Browse Source

update: 修改购物车显示

Ben 11 months ago
parent
commit
27a65414ce

+ 8 - 0
feifan-module-mall/feifan-module-product-api/src/main/java/cn/newfeifan/mall/module/product/api/sku/dto/ProductSkuRespDTO.java

@@ -18,6 +18,14 @@ public class ProductSkuRespDTO {
      * 商品 SKU 编号,自增
      */
     private Long id;
+
+    /**
+     * 店铺ID,关联`sale_shop`表
+     * add by Ben 20240316
+     */
+    private Long shopId;
+
+
     /**
      * SPU 编号
      */

+ 14 - 1
feifan-module-mall/feifan-module-product-biz/src/main/java/cn/newfeifan/mall/module/product/api/sku/ProductSkuApiImpl.java

@@ -10,7 +10,9 @@ import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 商品 SKU API 实现类
@@ -34,7 +36,18 @@ public class ProductSkuApiImpl implements ProductSkuApi {
     @Override
     public List<ProductSkuRespDTO> getSkuList(Collection<Long> ids) {
         List<ProductSkuDO> skus = productSkuService.getSkuList(ids);
-        return BeanUtils.toBean(skus, ProductSkuRespDTO.class);
+
+        Map<Long,Long> skuidShopidMap = new HashMap<Long,Long>();
+        for(ProductSkuDO productSkuDO:skus){
+            skuidShopidMap.put(productSkuDO.getId(),productSkuDO.getShopId());
+        }
+        //把店铺id设置进skuList对象中,为购物车按店铺拆分显示,做准备
+        List<ProductSkuRespDTO> skuList = BeanUtils.toBean(skus, ProductSkuRespDTO.class);
+        for(ProductSkuRespDTO productSkuRespDTO:skuList){
+            productSkuRespDTO.setShopId(skuidShopidMap.get(productSkuRespDTO.getId()));
+        }
+
+        return skuList;
     }
 
     @Override

+ 1 - 1
feifan-module-mall/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/module/sale/dal/dataobject/shop/ShopDO.java

@@ -52,6 +52,6 @@ public class ShopDO extends BaseDO {
     /**
      * 域名
      */
-    private String website;
+//    private String website;
 
 }

+ 15 - 1
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/cart/vo/AppCartListRespVO.java

@@ -6,18 +6,32 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.util.List;
+import java.util.Map;
 
 @Schema(description = "用户 App - 用户的购物列表 Response VO")
 @Data
 public class AppCartListRespVO {
 
+    /**
+     * add by Ben
+     */
+    @Schema(description = "key为店铺ID,value为店铺名", requiredMode = Schema.RequiredMode.REQUIRED, example = "{1:'中星旗舰店',3:'五行茶官方店'}")
+    private Map<Long,String> shopNameMap;
+
+    /**
+     * add by Ben
+     * key为店铺ID,value为店铺下的商品skuId集合
+     */
+    @Schema(description = "key为店铺ID,value为店铺下的商品skuId集合", requiredMode = Schema.RequiredMode.REQUIRED, example = "{1:[12,46],3:[3,578]}}")
+    private Map<Long,List<Long>> shopSkuMap;
+
     /**
      * 有效的购物项数组
      */
     private List<Cart> validList;
 
     /**
-     * 无效的购物项数组
+     * 无效的购物项数组,指已经下架的购物车商品
      */
     private List<Cart> invalidList;
 

+ 0 - 8
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/order/TradeOrderDO.java

@@ -347,13 +347,5 @@ public class TradeOrderDO extends BaseDO {
      * 关联 CombinationRecordDO 的 id 字段
      */
     private Long combinationRecordId;
-    /**
-     * 店铺id
-     */
-    private Long shopId;
-    /**
-     * 商户id
-     */
-    private Long merchantId;
 
 }

+ 31 - 2
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/cart/CartServiceImpl.java

@@ -5,10 +5,13 @@ import cn.newfeifan.mall.module.product.api.sku.ProductSkuApi;
 import cn.newfeifan.mall.module.product.api.sku.dto.ProductSkuRespDTO;
 import cn.newfeifan.mall.module.product.api.spu.ProductSpuApi;
 import cn.newfeifan.mall.module.product.api.spu.dto.ProductSpuRespDTO;
+import cn.newfeifan.mall.module.sale.dal.dataobject.shop.ShopDO;
+import cn.newfeifan.mall.module.sale.dal.mysql.shop.ShopMapper;
 import cn.newfeifan.mall.module.trade.controller.app.cart.vo.*;
 import cn.newfeifan.mall.module.trade.convert.cart.TradeCartConvert;
 import cn.newfeifan.mall.module.trade.dal.dataobject.cart.CartDO;
 import cn.newfeifan.mall.module.trade.dal.mysql.cart.CartMapper;
+import io.swagger.v3.oas.annotations.media.Schema;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -34,6 +37,9 @@ import static java.util.Collections.emptyList;
 @Validated
 public class CartServiceImpl implements CartService {
 
+    @Resource
+    private ShopMapper shopMapper;
+
     @Resource
     private CartMapper cartMapper;
 
@@ -143,14 +149,37 @@ public class CartServiceImpl implements CartService {
 
         // 查询 SPU、SKU 列表
         List<ProductSpuRespDTO> spus = productSpuApi.getSpuList(convertSet(carts, CartDO::getSpuId));
-        List<ProductSkuRespDTO> skus = productSkuApi.getSkuList(convertSet(carts, CartDO::getSkuId));
+        List<ProductSkuRespDTO> skus = productSkuApi.getSkuList(convertSet(carts, CartDO::getSkuId));//Ben 已为skus每项补上了shopid
 
         // 如果 SPU 被删除,则删除购物车对应的商品。延迟删除
         // 为什么不是 SKU 被删除呢?因为 SKU 被删除时,还可以通过 SPU 选择其它 SKU
         deleteCartIfSpuDeleted(carts, spus);
 
+        AppCartListRespVO appCartListRespVO = TradeCartConvert.INSTANCE.convertList(carts, spus, skus);
+
+        Map<Long,List<Long>> shopSkuMap = new HashMap<Long,List<Long>>();
+        for(ProductSkuRespDTO productSkuRespDTO:skus){
+            Long shopId = productSkuRespDTO.getShopId();
+            Long skuId = productSkuRespDTO.getId();
+            List<Long> skuIds = shopSkuMap.get(shopId);
+            if(skuIds==null){
+                skuIds = new ArrayList<Long>();
+                shopSkuMap.put(shopId,skuIds);
+            }
+            skuIds.add(skuId);
+        }
+        appCartListRespVO.setShopSkuMap(shopSkuMap);
+
+        List<ShopDO> shopDOList = shopMapper.selectList("id", shopSkuMap.keySet());
+        //key为店铺ID,value为店铺名
+        Map<Long,String> shopNameMap = new HashMap<Long,String>();
+        for(ShopDO shopDO:shopDOList){
+            shopNameMap.put(shopDO.getId(),shopDO.getName());
+        }
+        appCartListRespVO.setShopNameMap(shopNameMap);
+
         // 拼接数据
-        return TradeCartConvert.INSTANCE.convertList(carts, spus, skus);
+        return appCartListRespVO;
     }
 
     @Override

+ 2 - 2
feifan-server/src/main/resources/application-local.yaml

@@ -47,12 +47,12 @@ spring:
       primary: master
       datasource:
         master:
-          name: mall-feifan
+          name: mall-feifan-dev
           url: jdbc:mysql://10.0.5.229:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
           username: wendao9t
           password: PA55W0RD
         slave: # 模拟从库,可根据自己需要修改
-          name: ruoyi-vue-pro
+          name: mall-feifan-dev
           lazy: true # 开启懒加载,保证启动速度
           url: jdbc:mysql://10.0.5.229:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
           username: wendao9t