Procházet zdrojové kódy

购物车:增加获得商品数量 Map 接口

YunaiV před 2 roky
rodič
revize
6b05835cb3

+ 5 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/cart/TradeCartController.http

@@ -31,6 +31,11 @@ GET {{appApi}}/trade/cart/get-count
 tenant-id: {{appTenentId}}
 Authorization: Bearer {{appToken}}
 
+### 请求 /trade/cart/get-count-map 接口 => 成功
+GET {{appApi}}/trade/cart/get-count-map
+tenant-id: {{appTenentId}}
+Authorization: Bearer {{appToken}}
+
 ### 请求 /trade/cart/list 接口 => 成功
 GET {{appApi}}/trade/cart/list
 tenant-id: {{appTenentId}}

+ 9 - 1
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/cart/TradeCartController.java

@@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.trade.controller.app.cart;
 
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
-import cn.iocoder.yudao.module.trade.controller.app.cart.vo.AppTradeCartListRespVO;
 import cn.iocoder.yudao.module.trade.controller.app.cart.vo.AppTradeCartAddReqVO;
+import cn.iocoder.yudao.module.trade.controller.app.cart.vo.AppTradeCartListRespVO;
 import cn.iocoder.yudao.module.trade.controller.app.cart.vo.AppTradeCartResetReqVO;
 import cn.iocoder.yudao.module.trade.controller.app.cart.vo.AppTradeCartUpdateReqVO;
 import cn.iocoder.yudao.module.trade.service.cart.TradeCartService;
@@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.List;
+import java.util.Map;
 
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@@ -72,6 +73,13 @@ public class TradeCartController {
         return success(cartService.getCartCount(getLoginUserId()));
     }
 
+    @GetMapping("get-count-map")
+    @Operation(summary = "查询用户在购物车中的商品 SPU 数量 Map")
+    @PreAuthenticated
+    public CommonResult<Map<Long, Integer>> getCartCountMap() {
+        return success(cartService.getCartCountMap(getLoginUserId()));
+    }
+
     @GetMapping("/list")
     @Operation(summary = "查询用户的购物车列表")
     @PreAuthenticated

+ 14 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/cart/TradeCartMapper.java

@@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.trade.dal.mysql.cart;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
+import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.module.trade.dal.dataobject.cart.TradeCartDO;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -34,6 +35,19 @@ public interface TradeCartMapper extends BaseMapperX<TradeCartDO> {
         return CollUtil.getFirst(result) != null ? MapUtil.getInt(result.get(0), "sumCount") : 0;
     }
 
+    default Map<Long, Integer> selectSumMapByUserId(Long userId) {
+        // SQL sum 查询
+        List<Map<String, Object>> result = selectMaps(new QueryWrapper<TradeCartDO>()
+                .select("spu_id, SUM(count) AS sumCount")
+                .eq("user_id", userId)
+                .eq("add_status", true) // 只计算添加到购物车中的
+                .eq("order_status", false) // 必须未下单
+                .groupBy("spu_id"));
+        // 获得数量
+        return CollectionUtils.convertMap(result, item -> MapUtil.getLong(item, "spu_id"),
+                item -> MapUtil.getInt(item, "sumCount"));
+    }
+
     default TradeCartDO selectById(Long id, Long userId) {
         return selectOne(TradeCartDO::getId, id,
                 TradeCartDO::getUserId, userId);

+ 9 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/cart/TradeCartService.java

@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.trade.controller.app.cart.vo.AppTradeCartUpdateRe
 
 import javax.validation.Valid;
 import java.util.Collection;
+import java.util.Map;
 
 /**
  * 购物车 Service 接口
@@ -66,4 +67,12 @@ public interface TradeCartService {
      */
     AppTradeCartListRespVO getCartList(Long userId);
 
+    /**
+     * 获得用户的购物车商品 SPU 数量的 Map
+     *
+     * @param userId 用户编号
+     * @return 购物车商品 SPU 数量的 Map
+     */
+    Map<Long, Integer> getCartCountMap(Long userId);
+
 }

+ 6 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/cart/TradeCartServiceImpl.java

@@ -20,6 +20,7 @@ import javax.annotation.Resource;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Map;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
@@ -138,6 +139,11 @@ public class TradeCartServiceImpl implements TradeCartService {
         return cartMapper.selectSumByUserId(userId);
     }
 
+    @Override
+    public Map<Long, Integer> getCartCountMap(Long userId) {
+        return cartMapper.selectSumMapByUserId(userId);
+    }
+
     @Override
     public AppTradeCartListRespVO getCartList(Long userId) {
         // 获得购物车的商品,只查询未下单的