Parcourir la source

Merge remote-tracking branch 'origin/zx_saas_goods' into zx_saas_goods

yuanliang il y a 1 an
Parent
commit
c6485ba824

+ 4 - 0
mec-client-api/src/main/java/com/ym/mec/mall/MallFeignService.java

@@ -47,4 +47,8 @@ public interface MallFeignService {
     @ResponseBody
     List<ProductCategoryDto> listWithChildren();
 
+
+//    @ApiOperation("分页获取所有商品属性分类")
+    @RequestMapping(value = "/open/productAttribute/category/list", method = RequestMethod.GET)
+    List<ProductAttributeCategoryDto> getProductAttributeCategoryList();
 }

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/mall/fallback/MallFeignServiceFallback.java

@@ -42,5 +42,10 @@ public class MallFeignServiceFallback implements MallFeignService {
         return null;
     }
 
+    @Override
+    public List<ProductAttributeCategoryDto> getProductAttributeCategoryList() {
+        return null;
+    }
+
 
 }

+ 12 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/dto/ProductAttributeCategoryDto.java

@@ -0,0 +1,12 @@
+package com.ym.mec.common.dto;
+
+import lombok.Data;
+
+@Data
+public class ProductAttributeCategoryDto {
+//    @ApiModelProperty("商品类型ID")
+    private Long id;
+
+//    @ApiModelProperty("名称")
+    private String name;
+}

+ 21 - 0
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/PmsProductSkuStockRecordController.java

@@ -19,6 +19,7 @@ import org.springframework.stereotype.Controller;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -60,4 +61,24 @@ public class PmsProductSkuStockRecordController {
             return CommonResult.failed();
         }
     }
+
+
+    @ApiOperation("新增商品库存入库记录")
+    @RequestMapping(value = "/update", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@RequestBody @Validated PmsProductSkuStockRecordWrapper.PmsProductSkuStockRecord pmsProductSkuStockRecord) {
+
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || sysUser.getId() == null) {
+            return CommonResult.failed(ResultCode.FORBIDDEN, "请登录");
+        }
+        pmsProductSkuStockRecord.setCreateBy(sysUser.getId().longValue());
+        pmsProductSkuStockRecord.setCreateTime(new Date());
+        int count = pmsProductSkuStockRecordService.update(pmsProductSkuStockRecord);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
 }

+ 13 - 4
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/OpenController.java

@@ -6,14 +6,12 @@ import com.ym.mec.common.dto.PmsProductQueryParamDto;
 import com.ym.mec.common.page.PageInfo;
 import com.yonge.cooleshow.admin.controller.OmsOrderReturnApplyController;
 import com.yonge.cooleshow.admin.dto.PmsProductCategoryWithChildrenItem;
-import com.yonge.cooleshow.admin.service.OmsOrderReturnApplyService;
-import com.yonge.cooleshow.admin.service.PmsBrandService;
-import com.yonge.cooleshow.admin.service.PmsProductCategoryService;
-import com.yonge.cooleshow.admin.service.PmsProductService;
+import com.yonge.cooleshow.admin.service.*;
 import com.yonge.cooleshow.mall.common.api.CommonPage;
 import com.yonge.cooleshow.mall.common.api.CommonResult;
 import com.yonge.cooleshow.mall.common.enums.OrderCacheEnum;
 import com.yonge.cooleshow.mbg.model.PmsBrand;
+import com.yonge.cooleshow.mbg.model.PmsProductAttributeCategory;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.redisson.api.RLock;
@@ -57,6 +55,9 @@ public class OpenController {
     @Autowired
     private PmsProductCategoryService productCategoryService;
 
+    @Autowired
+    private PmsProductAttributeCategoryService productAttributeCategoryService;
+
     private static final Logger log = LoggerFactory.getLogger(OmsOrderReturnApplyController.class);
 
     @ApiOperation("完成退货测试接口")
@@ -114,4 +115,12 @@ public class OpenController {
         List<PmsProductCategoryWithChildrenItem> list = productCategoryService.listWithChildren();
         return list;
     }
+
+
+    @ApiOperation("分页获取所有商品属性分类")
+    @RequestMapping(value = "productAttribute/category/list", method = RequestMethod.GET)
+    public List<PmsProductAttributeCategory> getProductAttributeCategoryList() {
+        List<PmsProductAttributeCategory> productAttributeCategoryList = productAttributeCategoryService.getList(1, 99999);
+        return productAttributeCategoryList;
+    }
 }

+ 6 - 0
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/PmsProductSkuStockRecordService.java

@@ -30,4 +30,10 @@ public interface PmsProductSkuStockRecordService {
      *
      */
     int create(PmsProductSkuStockRecordWrapper.PmsProductSkuStockRecord pmsProductSkuStockRecord);
+
+    /**
+     * 修改
+     *
+     */
+    int update(PmsProductSkuStockRecordWrapper.PmsProductSkuStockRecord pmsProductSkuStockRecord);
 }

+ 67 - 1
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/PmsProductServiceImpl.java

@@ -17,6 +17,7 @@ import com.yonge.cooleshow.admin.dto.PmsProductResult;
 import com.yonge.cooleshow.admin.service.PmsBrandService;
 import com.yonge.cooleshow.admin.service.PmsProductCategoryService;
 import com.yonge.cooleshow.admin.service.PmsProductService;
+import com.yonge.cooleshow.mbg.dto.PmsSkuStockDto;
 import com.yonge.cooleshow.mbg.mapper.*;
 import com.yonge.cooleshow.mbg.model.*;
 import org.slf4j.Logger;
@@ -141,7 +142,72 @@ public class PmsProductServiceImpl implements PmsProductService {
 
     @Override
     public PmsProductResult getUpdateInfo(Long id) {
-        return productDao.getUpdateInfo(id);
+        PmsProductResult updateInfo = productDao.getUpdateInfo(id);
+        updateProductStock(Collections.singletonList(updateInfo));
+        updateProductSkuStock(updateInfo.getSkuStockList());
+
+        return updateInfo;
+    }
+
+
+
+    public List<PmsSkuStock> updateProductSkuStock(List<PmsSkuStock> skuStocks) {
+        if (CollectionUtils.isEmpty(skuStocks)) {
+            return new ArrayList<>();
+        }
+        // 从进货清单中 获取剩余库存数量
+        List<Long> productIds = skuStocks.stream().map(PmsSkuStock::getProductId).distinct().collect(Collectors.toList());
+
+        // 计算库存数据
+        List<PmsSkuStockDto.PmsSkuStockStock> skuStockStocks = skuStockMapper.getSkuStockByProductIds(productIds);
+
+        // Convert to map
+        Map<Long, Map<Long, List<PmsSkuStockDto.PmsSkuStockStock>>> map = skuStockStocks.stream()
+            .collect(Collectors.groupingBy(PmsSkuStockDto.PmsSkuStockStock::getProductId, Collectors.groupingBy(PmsSkuStockDto.PmsSkuStockStock::getId)));
+
+        // Merge
+        for (PmsSkuStock skuStock : skuStocks) {
+            Map<Long, List<PmsSkuStockDto.PmsSkuStockStock>> skuStockStock = map.get(skuStock.getProductId());
+            if (!CollectionUtils.isEmpty(skuStockStock)) {
+                List<PmsSkuStockDto.PmsSkuStockStock> pmsSkuStockStocks = skuStockStock.get(skuStock.getId());
+                if (CollectionUtils.isEmpty(pmsSkuStockStocks)) {
+                    skuStock.setLockStock(0);
+                    skuStock.setStock(0);
+                    continue;
+                }
+                skuStock.setStock(pmsSkuStockStocks.stream().mapToInt(item -> item.getInternalStock() + item.getTaxStock()).sum());
+                skuStock.setLockStock(0);
+            }
+
+        }
+        return skuStocks;
+    }
+
+    public List<PmsProduct> updateProductStock(List<PmsProduct> pmsProducts) {
+        if (CollectionUtils.isEmpty(pmsProducts)) {
+            return new ArrayList<>();
+        }
+        // 从进货清单中 获取剩余库存数量
+        List<Long> productIds = pmsProducts.stream().map(PmsProduct::getId).collect(Collectors.toList());
+
+        // 计算库存数据
+        List<PmsSkuStockDto.PmsSkuStockStock> skuStockStocks = skuStockMapper.getSkuStockByProductIds(productIds);
+
+        // Convert to map
+        Map<Long, List<PmsSkuStockDto.PmsSkuStockStock>> skuStockStockMap = skuStockStocks.stream().collect(Collectors.groupingBy(PmsSkuStockDto.PmsSkuStockStock::getProductId));
+
+        // Merge
+        for (PmsProduct pmsProduct : pmsProducts) {
+            List<PmsSkuStockDto.PmsSkuStockStock> skuStockStock = skuStockStockMap.get(pmsProduct.getId());
+            if (!CollectionUtils.isEmpty(skuStockStock)) {
+                pmsProduct.setStock(skuStockStock.stream().mapToInt(PmsSkuStockDto.PmsSkuStockStock::getInternalStock).sum() + skuStockStock.stream().mapToInt(PmsSkuStockDto.PmsSkuStockStock::getTaxStock).sum());
+                pmsProduct.setLockStock(0);
+            } else {
+                pmsProduct.setStock(0);
+                pmsProduct.setLockStock(0);
+            }
+        }
+        return pmsProducts;
     }
 
     @Override

+ 17 - 0
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/PmsProductSkuStockRecordServiceImpl.java

@@ -113,4 +113,21 @@ public class PmsProductSkuStockRecordServiceImpl implements PmsProductSkuStockRe
 
         return 1;
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int update(PmsProductSkuStockRecordWrapper.PmsProductSkuStockRecord pmsProductSkuStockRecord) {
+        // 没有扣减过库存的记录才能修改
+        if (pmsProductSkuStockRecord.getId() == null) {
+            throw new BizException("批次号不能为空");
+        }
+        int i = pmsProductSkuStockRecordMapper.updateByIdAndStockSelective(JSON.parseObject(JSON.toJSONString(pmsProductSkuStockRecord), PmsProductSkuStockRecord.class));
+        if (i > 0) {
+            // 同步库存数据
+            omsOrderService.syncSkuStock(Lists.newArrayList(pmsProductSkuStockRecord.getProductSkuId()));
+        } else {
+            throw new BizException("修改失败");
+        }
+        return i;
+    }
 }

+ 2 - 0
mec-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/mapper/PmsProductSkuStockRecordMapper.java

@@ -30,4 +30,6 @@ public interface PmsProductSkuStockRecordMapper {
     int updateByPrimaryKey(PmsProductSkuStockRecord record);
 
     void lockStock(@Param("stockRecordIds") List<Long> stockRecordIds);
+
+    int updateByIdAndStockSelective( PmsProductSkuStockRecord pmsProductSkuStockRecord);
 }

+ 38 - 0
mec-mall/mall-mbg/src/main/resources/config/mybatis/PmsProductSkuStockRecordMapper.xml

@@ -323,4 +323,42 @@
       </foreach>
       for update
     </select>
+
+  <update id="updateByIdAndStockSelective">
+      <!--@mbg.generated-->
+      update pms_product_sku_stock_record
+      <set>
+          <if test="productId != null">
+              product_id = #{productId,jdbcType=BIGINT},
+          </if>
+          <if test="productSkuId != null">
+              product_sku_id = #{productSkuId,jdbcType=BIGINT},
+          </if>
+          <if test="selectProductSn != null and selectProductSn != ''">
+              select_product_sn = #{selectProductSn,jdbcType=VARCHAR},
+          </if>
+          <if test="internalStock != null">
+              internal_stock = #{internalStock,jdbcType=INTEGER},
+          </if>
+          <if test="internalSaleStock != null">
+              internal_sale_stock = #{internalSaleStock,jdbcType=INTEGER},
+          </if>
+          <if test="taxStock != null">
+              tax_stock = #{taxStock,jdbcType=INTEGER},
+          </if>
+          <if test="taxSaleStock != null">
+              tax_sale_stock = #{taxSaleStock,jdbcType=INTEGER},
+          </if>
+          <if test="price != null">
+              price = #{price,jdbcType=DECIMAL},
+          </if>
+          <if test="createTime != null">
+              create_time = #{createTime,jdbcType=TIMESTAMP},
+          </if>
+          <if test="createBy != null">
+              create_by = #{createBy,jdbcType=BIGINT},
+          </if>
+      </set>
+      where id = #{id,jdbcType=BIGINT} and internal_sale_stock = 0 and tax_sale_stock = 0
+    </update>
 </mapper>