Browse Source

update: 把4月3日修改订单预览、提交的分支内容,通过重新覆盖代码,重新提交。

Ben 1 year ago
parent
commit
a03315c75b

+ 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

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

@@ -1,11 +1,10 @@
 package cn.newfeifan.mall.module.sale.dal.dataobject.shop;
 
-import lombok.*;
-import java.util.*;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import com.baomidou.mybatisplus.annotation.*;
 import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
 
 /**
  * 店铺 DO
@@ -50,5 +49,9 @@ public class ShopDO extends BaseDO {
      * logo地址
      */
     private String logoUrl;
+    /**
+     * 域名
+     */
+//    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;
 

+ 8 - 7
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/order/vo/AppTradeOrderSettlementReqVO.java

@@ -20,7 +20,7 @@ import java.util.List;
 @Valid
 public class AppTradeOrderSettlementReqVO {
 
-    @Schema(description = "店铺ID")
+    //店铺ID
     private Long shopId;
 
     @Schema(description = "商品项数组", requiredMode = Schema.RequiredMode.REQUIRED)
@@ -68,12 +68,13 @@ public class AppTradeOrderSettlementReqVO {
     @AssertTrue(message = "活动商品每次只能购买一种规格")
     @JsonIgnore
     public boolean isValidActivityItems() {
-        // 校验是否是活动订单
-        if (ObjUtil.isAllEmpty(seckillActivityId, combinationActivityId, combinationHeadId, bargainRecordId)) {
-            return true;
-        }
-        // 校验订单项是否超出
-        return items.size() == 1;
+//        // 校验是否是活动订单
+//        if (ObjUtil.isAllEmpty(seckillActivityId, combinationActivityId, combinationHeadId, bargainRecordId)) {
+//            return true;
+//        }
+//        // 校验订单项是否超出
+//        return items.size() == 1;
+        return true;//update by Ben 不用原来活动商品逻辑
     }
 
     @Data

+ 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

+ 10 - 11
feifan-server/src/main/resources/application-dev.yaml

@@ -43,17 +43,16 @@ spring:
       primary: master
       datasource:
         master:
-          name: ruoyi-vue-pro
-          url: jdbc:mysql://400-infra.server.iocoder.cn:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=CTT&allowPublicKeyRetrieval=true
-          driver-class-name: com.mysql.jdbc.Driver
-          username: root
-          password: 3WLiVUBEwTbvAfsh
-        slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
-          name: ruoyi-vue-pro
-          url: jdbc:mysql://400-infra.server.iocoder.cn:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&serverTimezone=CTT&allowPublicKeyRetrieval=true
-          driver-class-name: com.mysql.jdbc.Driver
-          username: root
-          password: 3WLiVUBEwTbvAfsh
+          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: 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
+          password: PA55W0RD
 
   # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
   redis:

+ 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