使用 cookie 存储购物车数据。服务层负责逻辑,控制层负责读写 cookie 。
服务接口层public interface CartService {
/**
* 需求:添加购物车数据
* @param cartList
* @param itemId
* @param num
* @return PygResult
*/
List addGoodsToCartList(List cartList, Long itemId, Integer num);
}
服务实现层
实现思路:
1.根据商品 SKU ID 查询 SKU 商品信息
2.获取商家 ID
3.根据商家 ID 判断购物车列表中是否存在该商家的购物车
4.如果购物车列表中不存在该商家的购物车
-- 4.1 新建购物车对象
-- 4.2 将新建的购物车对象添加到购物车列表
5.如果购物车列表中存在该商家的购物车,查询购物车明细列表中是否存在该商品
-- 5.1. 如果没有,新增购物车明细
-- 5.2. 如果有,在原购物车明细上添加数量,更改金额
CartServiceImpl实现代码:
@Service
public class CartServiceImpl implements CartService {
@Autowired
private TbItemMapper itemMapper;
@Override
public List addGoodsToCartList(List cartList, Long itemId, Integer num) {
//1.根据商品 SKU ID 查询 SKU 商品信息
TbItem item = itemMapper.selectByPrimaryKey(itemId);
if(item==null){
throw new RuntimeException("商品不存在")
};
if(!item.getStatus().equals("1")){
throw new RuntimeException("商品状态无效");
}
//2.获取商家 ID
String sellerId = item.getSellerId();
//3.根据商家 ID 判断购物车列表中是否存在该商家的购物车
Cart cart = searchCartBySellerId(cartList,sellerId);
//4.如果购物车列表中不存在该商家的购物车
if(cart==null){
//4.1 新建购物车对象 ,
cart=new Cart();
cart.setSellerId(sellerId);
cart.setSellerName(item.getSeller());
TbOrderItem orderItem = createOrderItem(item,num);
List orderItemList=new ArrayList();
orderItemList.add(orderItem);
cart.setOrderItemList(orderItemList);
//4.2 将购物车对象添加到购物车列表
cartList.add(cart);
}else{
//5.如果购物车列表中存在该商家的购物车
// 判断购物车明细列表中是否存在该商品
TbOrderItem orderItem = searchOrderItemByItemId(cart.getOrderItemList(),itemId);
if(orderItem==null){
//5.1. 如果没有,新增购物车明细
orderItem=createOrderItem(item,num);
cart.getOrderItemList().add(orderItem);
}else{
//5.2. 如果有,在原购物车明细上添加数量,更改金额
orderItem.setNum(orderItem.getNum()+num);orderItem.setTot
alFee(newBigDecimal(orderItem.getNum()*orderItem.getPrice().doubleValue()) );
//如果数量操作后小于等于 0,则移除
if(orderItem.getNum()
关注
打赏