From 6b05835cb39be947a257cb2d916362c15c199d4a Mon Sep 17 00:00:00 2001 From: YunaiV Date: Wed, 3 May 2023 09:20:17 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=AD=E7=89=A9=E8=BD=A6=EF=BC=9A=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E8=8E=B7=E5=BE=97=E5=95=86=E5=93=81=E6=95=B0=E9=87=8F?= =?UTF-8?q?=20Map=20=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/app/cart/TradeCartController.http | 5 +++++ .../controller/app/cart/TradeCartController.java | 10 +++++++++- .../trade/dal/mysql/cart/TradeCartMapper.java | 14 ++++++++++++++ .../trade/service/cart/TradeCartService.java | 9 +++++++++ .../trade/service/cart/TradeCartServiceImpl.java | 6 ++++++ 5 files changed, 43 insertions(+), 1 deletion(-) diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/cart/TradeCartController.http b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/cart/TradeCartController.http index ead0fa72f..b341a4886 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/cart/TradeCartController.http +++ b/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}} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/cart/TradeCartController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/cart/TradeCartController.java index 79105ced6..9216773ad 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/cart/TradeCartController.java +++ b/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> getCartCountMap() { + return success(cartService.getCartCountMap(getLoginUserId())); + } + @GetMapping("/list") @Operation(summary = "查询用户的购物车列表") @PreAuthenticated diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/cart/TradeCartMapper.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/cart/TradeCartMapper.java index 6c44dc279..564a4f0bc 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/cart/TradeCartMapper.java +++ b/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 { return CollUtil.getFirst(result) != null ? MapUtil.getInt(result.get(0), "sumCount") : 0; } + default Map selectSumMapByUserId(Long userId) { + // SQL sum 查询 + List> result = selectMaps(new QueryWrapper() + .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); diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/cart/TradeCartService.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/cart/TradeCartService.java index 9b87762c9..9a009860d 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/cart/TradeCartService.java +++ b/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 getCartCountMap(Long userId); + } diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/cart/TradeCartServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/cart/TradeCartServiceImpl.java index f92068644..c6fb3e0ec 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/cart/TradeCartServiceImpl.java +++ b/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 getCartCountMap(Long userId) { + return cartMapper.selectSumMapByUserId(userId); + } + @Override public AppTradeCartListRespVO getCartList(Long userId) { // 获得购物车的商品,只查询未下单的