浏览代码

商品详情接口增加参数判断查询时是否要所有库存信息

FengChaoYu 2 周之前
父节点
当前提交
cbb84da933

+ 3 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/goods/GoodsSpecVO.java

@@ -16,6 +16,9 @@ import java.math.BigDecimal;
 @Data
 public class GoodsSpecVO extends GoodsSpec {
 
+    @ApiModelProperty("仓库名称")
+    private String storageName;
+
     @ApiModelProperty("物料商品名称")
     private String goodsMaterialName;
     @ApiModelProperty("物料商品库存")

+ 3 - 2
mall-server-api/src/main/java/com/gree/mall/manager/controller/goods/GoodsController.java

@@ -75,9 +75,10 @@ public class GoodsController {
     @GetMapping("/detail")
     @ApiOperation(value = "商品详情")
     public ResponseHelper<GoodsSpecBean> detail(
-            @ApiParam(value = "id",required = true) @RequestParam String goodsId
+            @ApiParam(value = "id",required = true) @RequestParam String goodsId,
+            @ApiParam(value = "是否查询所有仓库规格",required = true) @RequestParam(required = false, defaultValue = "false") Boolean allStorageSpec
     ) throws RemoteServiceException {
-        GoodsSpecBean detail = goodsLogic.detail(goodsId);
+        GoodsSpecBean detail = goodsLogic.detail(goodsId, allStorageSpec);
         return ResponseHelper.success(detail);
     }
 

+ 19 - 3
mall-server-api/src/main/java/com/gree/mall/manager/logic/goods/GoodsLogic.java

@@ -205,9 +205,10 @@ public class GoodsLogic {
      * 商品详情
      *
      * @param goodsId
+     * @param allStorageSpec
      * @return
      */
-    public GoodsSpecBean detail(String goodsId) throws RemoteServiceException {
+    public GoodsSpecBean detail(String goodsId, Boolean allStorageSpec) throws RemoteServiceException {
         Goods goods = goodsService.getById(goodsId);
         final GoodsDetail goodsDetail = goodsDetailService.getById(goodsId);
         List<GoodsSpec> goodsSpecs = goodsSpecService.lambdaQuery()
@@ -216,7 +217,7 @@ public class GoodsLogic {
                 .list();
 
         //商品库存
-        Integer goodsStock = goodsSpecs.stream().collect(Collectors.summingInt(x -> x.getStockNum()));
+        Integer goodsStock = 0;
 
         GoodsSpecBean goodsBean = new GoodsSpecBean();
         if (goods == null) {
@@ -231,6 +232,7 @@ public class GoodsLogic {
         }
 
         List<GoodsSpecVO> goodsSpecVOS = BeanUtil.copyToList(goodsSpecs, GoodsSpecVO.class);
+        List<GoodsSpecVO> groupGoodsSpecVOS = new ArrayList<>();
         for (GoodsSpecVO goodsSpecVO : goodsSpecVOS) {
             GoodsMaterial goodsMaterial = goodsMaterialService.getById(goodsSpecVO.getGoodsCode());
 
@@ -248,8 +250,22 @@ public class GoodsLogic {
 
                 goodsSpecVO.setCostAmount(goodsMaterial.getCostAmount());
             }
+
+            if (allStorageSpec && CollectionUtil.isNotEmpty(goodsMaterialStorages)) {
+                // 以规格分组显示每个仓库库存
+                for (GoodsMaterialStorage materialStorage : goodsMaterialStorages) {
+                    if (!materialStorage.getGoodsMaterialId().equals(goodsSpecVO.getGoodsCode())) {
+                        continue;
+                    }
+                    GoodsSpecVO newGoodsSpecVO = new GoodsSpecVO();
+                    BeanUtils.copyProperties(goodsSpecVO, newGoodsSpecVO);
+                    newGoodsSpecVO.setStorageName(materialStorage.getStorageName());
+                    newGoodsSpecVO.setGoodsMaterialStock(materialStorage.getStockQty());
+                    groupGoodsSpecVOS.add(newGoodsSpecVO);
+                }
+            }
         }
-        goodsBean.setGoodsSpecs(goodsSpecVOS);
+        goodsBean.setGoodsSpecs(allStorageSpec ? groupGoodsSpecVOS : goodsSpecVOS);
         goodsBean.setImages(commonLogic.queryFileByObjId(goods.getGoodsId(), Constant.Img.GOODS_IMG));
         goodsBean.setStock(goodsStock);
         List<GoodsTemplate> goodsTemplates = goodsTemplateService.lambdaQuery()