迁移购物车模块

pull/4/MERGE
YunaiV 2020-08-07 07:40:20 +08:00
parent b57b2bc931
commit 5714ddcbe8
13 changed files with 352 additions and 44 deletions

View File

@ -1,8 +1,9 @@
package cn.iocoder.mall.orderservice.rpc.cart;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.orderservice.rpc.cart.dto.CartItemAddReqDTO;
import cn.iocoder.mall.orderservice.rpc.cart.dto.CartItemUpdateQuantityReqDTO;
import cn.iocoder.mall.orderservice.rpc.cart.dto.*;
import java.util.List;
/**
* Rpc
@ -20,9 +21,41 @@ public interface CartRpc {
/**
*
*
* @param updateQuantityReqDTO
* @param updateQuantityReqDTO DTO
* @return
*/
CommonResult<Boolean> updateCartItemSelected(CartItemUpdateQuantityReqDTO updateQuantityReqDTO);
CommonResult<Boolean> updateCartItemQuantity(CartItemUpdateQuantityReqDTO updateQuantityReqDTO);
/**
*
*
* @param updateSelectedReqDTO DTO
* @return
*/
CommonResult<Boolean> updateCartItemSelected(CartItemUpdateSelectedReqDTO updateSelectedReqDTO);
/**
*
*
* @param deleteListReqDTO DTO
* @return
*/
CommonResult<Boolean> deleteCartItems(CartItemDeleteListReqDTO deleteListReqDTO);
/**
*
*
* @param userId
* @return
*/
CommonResult<Integer> sumCartItemQuantity(Integer userId);
/**
*
*
* @param listReqDTO DTO
* @return
*/
CommonResult<List<CartItemRespDTO>> listCartItems(CartItemListReqDTO listReqDTO);
}

View File

@ -0,0 +1,28 @@
package cn.iocoder.mall.orderservice.rpc.cart.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
/**
* Request DTO
*/
@Data
@Accessors(chain = true)
public class CartItemDeleteListReqDTO implements Serializable {
/**
*
*/
@NotNull(message = "用户编号不能为空")
private Integer userId;
/**
* SKU
*/
@NotNull(message = "商品 SKU 编号列表不能为空")
private List<Integer> skuIds;
}

View File

@ -0,0 +1,26 @@
package cn.iocoder.mall.orderservice.rpc.cart.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* BO
*/
@Data
@Accessors(chain = true)
public class CartItemListReqDTO implements Serializable {
/**
*
*/
@NotNull(message = "用户编号不能为空")
private Integer userId;
/**
*
*/
private Boolean selected;
}

View File

@ -0,0 +1,67 @@
package cn.iocoder.mall.orderservice.rpc.cart.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* Response DTO
*/
@Data
@Accessors(chain = true)
public class CartItemRespDTO implements Serializable {
// ========= 基础字段 BEGIN =========
/**
*
*/
private Integer id;
/**
*
*/
private Boolean selected;
// ========= 基础字段 END =========
// ========= 买家信息 BEGIN =========
/**
*
*/
private Integer userId;
// ========= 买家信息 END =========
// ========= 商品信息 BEGIN =========
/**
* SPU
*/
private Integer spuId;
/**
* SKU
*/
private Integer skuId;
/**
*
*/
private Integer quantity;
// ========= 商品信息 END =========
// ========= 优惠信息 BEGIN =========
// /**
// * 商品营销活动编号
// */
// private Integer activityId;
// /**
// * 商品营销活动类型
// */
// private Integer activityType;
// ========= 优惠信息 END =========
}

View File

@ -0,0 +1,33 @@
package cn.iocoder.mall.orderservice.rpc.cart.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
/**
* Request DTO
*/
@Data
@Accessors(chain = true)
public class CartItemUpdateSelectedReqDTO implements Serializable {
/**
*
*/
@NotNull(message = "用户编号不能为空")
private Integer userId;
/**
* SKU
*/
@NotNull(message = "商品 SKU 编号列表不能为空")
private List<Integer> skuIds;
/**
*
*/
@NotNull(message = "是否选中不能为空")
private Boolean selected;
}

View File

@ -2,10 +2,16 @@ package cn.iocoder.mall.orderservice.convert.cart;
import cn.iocoder.mall.orderservice.dal.mysql.dataobject.cart.CartItemDO;
import cn.iocoder.mall.orderservice.rpc.cart.dto.CartItemAddReqDTO;
import cn.iocoder.mall.orderservice.rpc.cart.dto.CartItemListReqDTO;
import cn.iocoder.mall.orderservice.rpc.cart.dto.CartItemRespDTO;
import cn.iocoder.mall.orderservice.service.cart.bo.CartItemAddBO;
import cn.iocoder.mall.orderservice.service.cart.bo.CartItemBO;
import cn.iocoder.mall.orderservice.service.cart.bo.CartItemListQueryBO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper
public interface CartConvert {
@ -15,4 +21,10 @@ public interface CartConvert {
CartItemAddBO convert(CartItemAddReqDTO bean);
List<CartItemBO> convertList(List<CartItemDO> list);
CartItemListQueryBO convert(CartItemListReqDTO bean);
List<CartItemRespDTO> convertList02(List<CartItemBO> list);
}

View File

@ -2,6 +2,7 @@ package cn.iocoder.mall.orderservice.dal.mysql.mapper.cart;
import cn.iocoder.mall.mybatis.core.query.QueryWrapperX;
import cn.iocoder.mall.orderservice.dal.mysql.dataobject.cart.CartItemDO;
import cn.iocoder.mall.orderservice.service.cart.bo.CartItemListQueryBO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
@ -9,6 +10,7 @@ import org.springframework.stereotype.Repository;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Repository
@ -29,4 +31,18 @@ public interface CartItemMapper extends BaseMapper<CartItemDO> {
ids.forEach(id -> updateById(updateObject.setId(id)));
}
default Integer selectSumQuantityByUserId(Integer userId) {
// SQL sum 查询
List<Map<String, Object>> result = selectMaps(new QueryWrapper<CartItemDO>()
.select("SUM(quantity) AS sumQuantity")
.eq("user_id", userId));
// 获得数量
return (Integer) result.get(0).get("sumQuantity");
}
default List<CartItemDO> selectList(CartItemListQueryBO queryBO) {
return selectList(new QueryWrapperX<CartItemDO>().eq("user_id", queryBO.getUserId())
.eq("selected", queryBO.getSelected()));
}
}

View File

@ -4,15 +4,17 @@ import cn.iocoder.common.framework.enums.CommonStatusEnum;
import cn.iocoder.common.framework.exception.util.ServiceExceptionUtil;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.orderservice.convert.cart.CartConvert;
import cn.iocoder.mall.orderservice.rpc.cart.dto.CartItemAddReqDTO;
import cn.iocoder.mall.orderservice.rpc.cart.dto.CartItemUpdateQuantityReqDTO;
import cn.iocoder.mall.orderservice.rpc.cart.dto.*;
import cn.iocoder.mall.orderservice.service.cart.CartService;
import cn.iocoder.mall.orderservice.service.cart.bo.CartItemBO;
import cn.iocoder.mall.productservice.rpc.sku.ProductSkuRpc;
import cn.iocoder.mall.productservice.rpc.sku.dto.ProductSkuRespDTO;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import static cn.iocoder.mall.orderservice.enums.OrderErrorCodeConstants.CARD_ITEM_SKU_NOT_FOUND;
/**
@ -52,6 +54,55 @@ public class CartManager {
updateQuantityReqDTO.getQuantity(), skuDTO.getQuantity());
}
/**
*
*
* @param updateSelectedReqDTO DTO
*/
public void updateCartItemSelected(CartItemUpdateSelectedReqDTO updateSelectedReqDTO) {
cartService.updateCartItemSelected(updateSelectedReqDTO.getUserId(),
updateSelectedReqDTO.getSkuIds(), updateSelectedReqDTO.getSelected());
}
/**
*
*
* @param deleteListReqDTO DTO
*/
public void deleteCartItems(CartItemDeleteListReqDTO deleteListReqDTO) {
cartService.deleteCartItems(deleteListReqDTO.getUserId(),
deleteListReqDTO.getSkuIds());
}
/**
*
*
* @param userId
* @return
*/
public Integer sumCartItemQuantity(Integer userId) {
return cartService.sumCartItemQuantity(userId);
}
/**
*
*
* @param listReqDTO DTO
* @return
*/
public List<CartItemRespDTO> listCartItems(CartItemListReqDTO listReqDTO) {
List<CartItemBO> cartItemBOs = cartService.listCartItems(CartConvert.INSTANCE.convert(listReqDTO));
return CartConvert.INSTANCE.convertList02(cartItemBOs);
}
/**
* SKU
* 1.
* 2.
*
* @param skuId SKU
* @return SKU
*/
private ProductSkuRespDTO checkProductSku(Integer skuId) {
CommonResult<ProductSkuRespDTO> getProductSkuResult = productSkuRpc.getProductSku(skuId);
getProductSkuResult.checkError();

View File

@ -2,11 +2,14 @@ package cn.iocoder.mall.orderservice.rpc.cart;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.orderservice.manager.cart.CartManager;
import cn.iocoder.mall.orderservice.rpc.cart.dto.CartItemAddReqDTO;
import cn.iocoder.mall.orderservice.rpc.cart.dto.CartItemUpdateQuantityReqDTO;
import cn.iocoder.mall.orderservice.rpc.cart.dto.*;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import static cn.iocoder.common.framework.vo.CommonResult.success;
@DubboService
public class CartRpcImpl implements CartRpc {
@ -16,13 +19,35 @@ public class CartRpcImpl implements CartRpc {
@Override
public CommonResult<Boolean> addCartItem(CartItemAddReqDTO addItemReqDTO) {
cartManager.addCartItem(addItemReqDTO);
return CommonResult.success(true);
return success(true);
}
@Override
public CommonResult<Boolean> updateCartItemSelected(CartItemUpdateQuantityReqDTO updateQuantityReqDTO) {
public CommonResult<Boolean> updateCartItemQuantity(CartItemUpdateQuantityReqDTO updateQuantityReqDTO) {
cartManager.updateCartItemSelected(updateQuantityReqDTO);
return CommonResult.success(true);
return success(true);
}
@Override
public CommonResult<Boolean> updateCartItemSelected(CartItemUpdateSelectedReqDTO updateSelectedReqDTO) {
cartManager.updateCartItemSelected(updateSelectedReqDTO);
return success(true);
}
@Override
public CommonResult<Boolean> deleteCartItems(CartItemDeleteListReqDTO deleteListReqDTO) {
cartManager.deleteCartItems(deleteListReqDTO);
return success(true);
}
@Override
public CommonResult<Integer> sumCartItemQuantity(Integer userId) {
return success(cartManager.sumCartItemQuantity(userId));
}
@Override
public CommonResult<List<CartItemRespDTO>> listCartItems(CartItemListReqDTO listReqDTO) {
return success(cartManager.listCartItems(listReqDTO));
}
}

View File

@ -6,6 +6,8 @@ import cn.iocoder.mall.orderservice.convert.cart.CartConvert;
import cn.iocoder.mall.orderservice.dal.mysql.dataobject.cart.CartItemDO;
import cn.iocoder.mall.orderservice.dal.mysql.mapper.cart.CartItemMapper;
import cn.iocoder.mall.orderservice.service.cart.bo.CartItemAddBO;
import cn.iocoder.mall.orderservice.service.cart.bo.CartItemBO;
import cn.iocoder.mall.orderservice.service.cart.bo.CartItemListQueryBO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@ -99,13 +101,35 @@ public class CartService {
* @param userId
* @param skuIds SKU
*/
public void deleteList(Integer userId, List<Integer> skuIds) {
public void deleteCartItems(Integer userId, List<Integer> skuIds) {
// 查询 CartItemDO 列表
List<CartItemDO> itemDOs = cartItemMapper.selectListByUserIdAndSkuIds(userId, skuIds);
if (CollectionUtils.isEmpty(itemDOs)) {
return;
}
// 批量标记删除
cartItemMapper.deleteBatchIds(CollectionUtils.convertSet(itemDOs, CartItemDO::getId));
}
/**
*
*
* @param userId
* @return
*/
public Integer sumCartItemQuantity(Integer userId) {
return cartItemMapper.selectSumQuantityByUserId(userId);
}
/**
*
*
* @param queryBO BO
* @return
*/
public List<CartItemBO> listCartItems(CartItemListQueryBO queryBO) {
List<CartItemDO> cartItemDOs = cartItemMapper.selectList(queryBO);
return CartConvert.INSTANCE.convertList(cartItemDOs);
}
}

View File

@ -0,0 +1,25 @@
package cn.iocoder.mall.orderservice.service.cart.bo;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
/**
* BO
*/
@Data
@Accessors(chain = true)
public class CartItemListQueryBO {
/**
*
*/
@NotNull(message = "用户编号不能为空")
private Integer userId;
/**
*
*/
private Boolean selected;
}

View File

@ -3,27 +3,6 @@ package cn.iocoder.mall.order.biz.service;
public interface CartService {
// Boolean deleteList(Integer userId, List<Integer> skuIds);
//
//
// /**
// * 查询用户在购物车中的商品数量
// *
// * @param userId 用户编号
// * @return 商品数量
// */
// Integer count(Integer userId);
//
// /**
// * 显示买家购物车中的商品列表,并根据 selected 进行过滤。
// *
// * @param userId 用户编号
// * @param selected 是否选中。若为空,则不进行筛选
// * @return 购物车中商品列表信息
// */
// List<CartItemBO> list(Integer userId, @Nullable Boolean selected);
//
// // ========== 购物车与订单相关的逻辑 ==========
//
// /**

View File

@ -45,17 +45,6 @@ public class CartServiceImpl implements CartService {
@Autowired
private CartMapper cartMapper;
@Override
public Integer count(Integer userId) {
return cartMapper.selectQuantitySumByUserIdAndStatus(userId, CartItemStatusEnum.ENABLE.getValue());
}
@Override
public List<CartItemBO> list(Integer userId, Boolean selected) {
List<CartItemDO> items = cartMapper.selectByUserIdAndStatusAndSelected(userId, CartItemStatusEnum.ENABLE.getValue(), selected);
return CartConvert.INSTANCE.convert(items);
}
@Override
public CalcOrderPriceBO calcOrderPrice(CalcOrderPriceDTO calcOrderPriceDTO) {
// TODO 芋艿,补充一些表单校验。例如说,需要传入用户编号。