Browse Source

sku主材替换

24282 1 năm trước cách đây
mục cha
commit
6d0d7b792c

+ 20 - 1
sd-business/src/main/java/com/sd/business/controller/sku/SkuController.java

@@ -2,8 +2,11 @@ package com.sd.business.controller.sku;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.sd.business.entity.sku.dto.GetReplacePrincipalMaterialListDto;
+import com.sd.business.entity.sku.dto.ReplacePrincipalMaterialDto;
 import com.sd.business.entity.sku.dto.SkuDto;
 import com.sd.business.entity.sku.dto.SkuSelectDto;
+import com.sd.business.entity.sku.vo.ReplacePrincipalMaterialVo;
 import com.sd.business.entity.sku.vo.SkuVo;
 import com.sd.business.service.sku.SkuService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController;
  * sku 前端控制器
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-07-03
  */
 @RestController
@@ -69,4 +72,20 @@ public class SkuController {
         skuService.delete(dto.getId());
     }
 
+    /**
+     * 获取可替换主材列表
+     */
+    @PostMapping("/getReplacePrincipalMaterialPage")
+    public Page<ReplacePrincipalMaterialVo> getReplacePrincipalMaterialPage(@RequestBody GetReplacePrincipalMaterialListDto dto) {
+        return skuService.getReplacePrincipalMaterialPage(dto);
+    }
+
+    /**
+     * 替换主材
+     */
+    @PostMapping("/replacePrincipalMaterial")
+    public void replacePrincipalMaterial(@Validated @RequestBody ReplacePrincipalMaterialDto dto) {
+        skuService.replacePrincipalMaterial(dto);
+    }
+
 }

+ 43 - 0
sd-business/src/main/java/com/sd/business/entity/sku/dto/GetReplacePrincipalMaterialListDto.java

@@ -0,0 +1,43 @@
+package com.sd.business.entity.sku.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+@Getter
+@Setter
+public class GetReplacePrincipalMaterialListDto extends BaseSelectDto {
+
+    /**
+     * 群组品号
+     */
+    private String skuCode;
+
+    /**
+     * sku品号
+     */
+    private String skuSpecCode;
+
+    /**
+     * bom品号
+     */
+    private String bomSpecCode;
+
+    /**
+     * sku长
+     */
+    private BigDecimal length;
+
+    /**
+     * sku宽
+     */
+    private BigDecimal width;
+
+    /**
+     * sku高
+     */
+    private BigDecimal height;
+
+}

+ 18 - 0
sd-business/src/main/java/com/sd/business/entity/sku/dto/ReplacePrincipalMaterialDto.java

@@ -0,0 +1,18 @@
+package com.sd.business.entity.sku.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+@Getter
+@Setter
+public class ReplacePrincipalMaterialDto extends GetReplacePrincipalMaterialListDto {
+
+    /**
+     * 替换主材id
+     */
+    @NotNull(message = "替换主材id不能为空")
+    private Long replaceBomSpecId;
+
+}

+ 30 - 0
sd-business/src/main/java/com/sd/business/entity/sku/vo/ReplacePrincipalMaterialVo.java

@@ -0,0 +1,30 @@
+package com.sd.business.entity.sku.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class ReplacePrincipalMaterialVo {
+
+    /**
+     * 群组品号
+     */
+    private String skuCode;
+
+    /**
+     * sku品号
+     */
+    private String skuSpecCode;
+
+    /**
+     * 品名
+     */
+    private String skuSpecName;
+
+    /**
+     * 裸垫品号
+     */
+    private String bomSpecCode;
+
+}

+ 10 - 3
sd-business/src/main/java/com/sd/business/mapper/sku/SkuMapper.java

@@ -1,19 +1,22 @@
 package com.sd.business.mapper.sku;
 
-import com.sd.business.entity.sku.po.Sku;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.sd.business.entity.sku.vo.SkuVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.sku.po.Sku;
+import com.sd.business.entity.sku.vo.ReplacePrincipalMaterialVo;
+import com.sd.business.entity.sku.vo.SkuVo;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 
 /**
  * <p>
  * sku Mapper 接口
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-07-03
  */
 public interface SkuMapper extends BaseMapper<Sku> {
@@ -23,4 +26,8 @@ public interface SkuMapper extends BaseMapper<Sku> {
      */
     Page<SkuVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Sku> wrapper);
 
+    Page<ReplacePrincipalMaterialVo> getReplacePrincipalMaterialPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Object> wrapper);
+
+    List<Long> selectReplaceSkuSpecIdList(@Param("ew") IWrapper<Object> wrapper);
+
 }

+ 17 - 4
sd-business/src/main/java/com/sd/business/service/sku/SkuService.java

@@ -1,11 +1,14 @@
 package com.sd.business.service.sku;
 
-import com.sd.business.entity.sku.po.Sku;
-import com.ruoyi.common.core.service.BaseService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.sd.business.entity.sku.vo.SkuVo;
-import com.sd.business.entity.sku.dto.SkuSelectDto;
+import com.ruoyi.common.core.service.BaseService;
+import com.sd.business.entity.sku.dto.GetReplacePrincipalMaterialListDto;
+import com.sd.business.entity.sku.dto.ReplacePrincipalMaterialDto;
 import com.sd.business.entity.sku.dto.SkuDto;
+import com.sd.business.entity.sku.dto.SkuSelectDto;
+import com.sd.business.entity.sku.po.Sku;
+import com.sd.business.entity.sku.vo.ReplacePrincipalMaterialVo;
+import com.sd.business.entity.sku.vo.SkuVo;
 
 
 /**
@@ -43,4 +46,14 @@ public interface SkuService extends BaseService<Sku> {
      */
     void delete(Long id);
 
+    /**
+     * 获取可替换主材列表
+     */
+    Page<ReplacePrincipalMaterialVo> getReplacePrincipalMaterialPage(GetReplacePrincipalMaterialListDto dto);
+
+    /**
+     * 替换主材
+     */
+    void replacePrincipalMaterial(ReplacePrincipalMaterialDto dto);
+
 }

+ 42 - 3
sd-business/src/main/java/com/sd/business/service/sku/impl/SkuServiceImpl.java

@@ -5,15 +5,15 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.sd.business.entity.bom.po.BomSpec;
-import com.sd.business.entity.sku.dto.SkuDto;
-import com.sd.business.entity.sku.dto.SkuSelectDto;
-import com.sd.business.entity.sku.dto.SkuSpecDto;
+import com.sd.business.entity.sku.dto.*;
 import com.sd.business.entity.sku.po.Sku;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.entity.sku.po.SkuSpecLink;
+import com.sd.business.entity.sku.vo.ReplacePrincipalMaterialVo;
 import com.sd.business.entity.sku.vo.SkuSpecLinkVo;
 import com.sd.business.entity.sku.vo.SkuSpecVo;
 import com.sd.business.entity.sku.vo.SkuVo;
@@ -178,6 +178,45 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements SkuSe
         skuSpecLinkService.remove(q -> q.eq(SkuSpecLink::getSkuId, id));
     }
 
+    @Override
+    public Page<ReplacePrincipalMaterialVo> getReplacePrincipalMaterialPage(GetReplacePrincipalMaterialListDto dto) {
+        IWrapper<Object> wrapper = getReplaceWrapper(dto);
+        return baseMapper.getReplacePrincipalMaterialPage(dto.getPage(), wrapper);
+    }
+
+    @Override
+    public void replacePrincipalMaterial(ReplacePrincipalMaterialDto dto) {
+
+        if (ObjectUtil.isAllEmpty(dto.getSkuCode(), dto.getSkuSpecCode(), dto.getBomSpecCode(),
+                dto.getWidth(), dto.getHeight(), dto.getLength())) {
+            throw new ServiceException("搜索条件不能全为空");
+        }
+
+        IWrapper<Object> wrapper = getReplaceWrapper(dto);
+
+        List<Long> skuSpecIdList = baseMapper.selectReplaceSkuSpecIdList(wrapper);
+
+        List<SkuSpec> skuSpecList = skuSpecIdList.stream().map(item -> {
+            SkuSpec skuSpec = new SkuSpec();
+            skuSpec.setId(item);
+            skuSpec.setBomSpecId(dto.getReplaceBomSpecId());
+            return skuSpec;
+        }).collect(Collectors.toList());
+
+        skuSpecService.updateBatchById(skuSpecList);
+
+    }
+
+    private IWrapper<Object> getReplaceWrapper(GetReplacePrincipalMaterialListDto dto) {
+        return IWrapper.getWrapper()
+                .eq("s", Sku::getCode, dto.getSkuCode())
+                .eq("ss", SkuSpec::getCode, dto.getSkuSpecCode())
+                .eq("bs", BomSpec::getCode, dto.getBomSpecCode())
+                .eq("ss", SkuSpec::getLength, dto.getLength())
+                .eq("ss", SkuSpec::getWidth, dto.getWidth())
+                .eq("ss", SkuSpec::getHeight, dto.getHeight());
+    }
+
     /**
      * 创建sku规格关联
      */

+ 36 - 18
sd-business/src/main/resources/mapper/sku/SkuMapper.xml

@@ -2,26 +2,44 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.sd.business.mapper.sku.SkuMapper">
     <select id="getPage" resultType="com.sd.business.entity.sku.vo.SkuVo">
-        select
-            s.id,
-            s.source,
-            s.sku_classify_id,
-            s.bar_code,
-            s.group_item_number,
-            s.code,
-            s.name,
-            s.brand,
-            s.material,
-            s.model_number,
-            s.craft_production_line_id,
-            s.main_img_url,
-            s.detail_text,
-            s.create_user,
-            s.create_time,
-            s.update_user,
-            s.update_time
+        select s.id,
+               s.source,
+               s.sku_classify_id,
+               s.bar_code,
+               s.group_item_number,
+               s.code,
+               s.name,
+               s.brand,
+               s.material,
+               s.model_number,
+               s.craft_production_line_id,
+               s.main_img_url,
+               s.detail_text,
+               s.create_user,
+               s.create_time,
+               s.update_user,
+               s.update_time
         from sku s
             ${ew.customSqlSegment}
     </select>
 
+    <select id="getReplacePrincipalMaterialPage" resultType="com.sd.business.entity.sku.vo.ReplacePrincipalMaterialVo">
+        select s.code  skuCode,
+               ss.code skuSpecCode,
+               ss.name skuSpecName,
+               bs.name bomSpecCode
+        from sku s
+                 inner join sku_spec ss on s.id = ss.sku_id
+                 inner join bom_spec bs on ss.bom_spec_id = bs.id
+            ${ew.customSqlSegment}
+    </select>
+
+    <select id="selectReplaceSkuSpecIdList" resultType="java.lang.Long">
+        select ss.id
+        from sku s
+                 inner join sku_spec ss on s.id = ss.sku_id
+                 inner join bom_spec bs on ss.bom_spec_id = bs.id
+            ${ew.customSqlSegment}
+    </select>
+
 </mapper>

+ 120 - 15
sd-starter/src/test/java/C2_SyncInventoryTest.java

@@ -45,22 +45,127 @@ public class C2_SyncInventoryTest {
     @Test
     public void test() {
 
-        String a = "204010400192 2075  \n" +
-                "204010400195 1851  \n" +
-                "204010400198 213      \n" +
-                "204010400193 396   \n" +
-                "204010400196 3617  \n" +
-                "204010400199 322 \n" +
-                "204010400201 890  \n" +
-                "204010400205 1731  \n" +
-                "204010400209 448\n" +
-                "204010400250 299   \n" +
-                "204010400200 431  \n" +
-                "204010400212 338  \n" +
-                "204010400211 712";
+        String a = "204010100175 \t2\n" +
+                "204010100176 \t\n" +
+                "204010100184\t69\n" +
+                "204010100185\t54\n" +
+                "204010100186\t9\n" +
+                "204010100187\t55\n" +
+                "204010100189\t48\n" +
+                "204010100190\t93\n" +
+                "204010100191\t120\n" +
+                "204010100192\t152\n" +
+                "204010100193\t107\n" +
+                "204010100218\t1237\n" +
+                "204010100226\t51\n" +
+                "204010100251\t13\n" +
+                "204010100252\t9\n" +
+                "204010100253\t62\n" +
+                "204010100254\t11\n" +
+                "204010100255\t52\n" +
+                "204010100318\t\n" +
+                "204010100319\t\n" +
+                "204010100320\t30\n" +
+                "204010100339\t4\n" +
+                "204010100344\t74\n" +
+                "204010100347\t204\n" +
+                "204010100353\t270\n" +
+                "204010100402\t349\n" +
+                "204010100409\t333\n" +
+                "204010100410\t489\n" +
+                "204010100411\t561\n" +
+                "204010300025\t422\n" +
+                "204010300026\t\n" +
+                "204010300027\t\n" +
+                "204010300028\t\n" +
+                "204010300029\t\n" +
+                "204010300030\t560\n" +
+                "204010300031\t156\n" +
+                "204010300032\t856\n" +
+                "204010300058\t753\n" +
+                "204010300059\t269\n" +
+                "204010300061\t437\n" +
+                "204010300062\t503\n" +
+                "204010300063\t439\n" +
+                "204010300064\t1050\n" +
+                "204010300067\t\n" +
+                "204010300068\t539\n" +
+                "204010300069\t279\n" +
+                "204010400031\t67\n" +
+                "204010400032\t169\n" +
+                "204010400033\t150\n" +
+                "204010400034\t49\n" +
+                "204010400035\t137\n" +
+                "204010400078\t\n" +
+                "204010400089\t50\n" +
+                "204010400090\t125\n" +
+                "204010400092\t237\n" +
+                "204010400104\t19\n" +
+                "204010400111\t1\n" +
+                "204010400120\t45\n" +
+                "204010400121\t102\n" +
+                "204010400124\t32\n" +
+                "204010400125\t31\n" +
+                "204010400126\t3\n" +
+                "204010400127\t17\n" +
+                "204010400192\t2288\n" +
+                "204010400193\t378\n" +
+                "204010400194\t1487\n" +
+                "204010400195\t2627\n" +
+                "204010400196\t3860\n" +
+                "204010400197\t1974\n" +
+                "204010400198\t177\n" +
+                "204010400199\t261\n" +
+                "204010400200\t415\n" +
+                "204010400201\t670\n" +
+                "204010400202\t116\n" +
+                "204010400203\t700\n" +
+                "204010400204\t222\n" +
+                "204010400205\t1502\n" +
+                "204010400206\t683\n" +
+                "204010400207\t758\n" +
+                "204010400208\t369\n" +
+                "204010400209\t484\n" +
+                "204010400210\t639\n" +
+                "204010400211\t1674\n" +
+                "204010400212\t458\n" +
+                "204010400227\t585\n" +
+                "204010400228\t256\n" +
+                "204010400234\t97\n" +
+                "204010400250\t298\n" +
+                "204012300023\t210\n" +
+                "204012300024\t70\n" +
+                "204012300025\t239\n" +
+                "204012300027\t285\n" +
+                "204012300028\t51\n" +
+                "204060200002\t3\n" +
+                "2042103013\t0\n" +
+                "2042103022\t159\n" +
+                "2042103024\t104\n" +
+                "2042103025\t34\n" +
+                "2080101056\t176\n" +
+                "2080101057\t324\n" +
+                "2080101058\t669\n" +
+                "2080101059\t890\n" +
+                "2080101061\t232\n" +
+                "2080101062\t1061\n" +
+                "2080101063\t451\n" +
+                "2080101065\t34\n" +
+                "2080101066\t694\n" +
+                "2080101067\t446\n" +
+                "2080101068\t695\n" +
+                "2080101069\t24\n" +
+                "2080101070\t14\n" +
+                "2080101072\t505\n" +
+                "2080101082\t584\n" +
+                "2080101087\t421\n" +
+                "2080101089\t79\n" +
+                "2080101090\t872\n" +
+                "204010100243 \t7\n" +
+                "204010100239 \t3\n";
 
         List<List<String>> list = Arrays.stream(a.split("\n"))
-                .map(item -> Arrays.stream(item.split(" ")).filter(StrUtil::isNotBlank).collect(Collectors.toList()))
+                .map(item -> Arrays.stream(item.split("\t")).filter(StrUtil::isNotBlank).collect(Collectors.toList()))
                 .collect(Collectors.toList());
 
         Map<String, Long> bomSpecMap = bomSpecService.mapKV(BomSpec::getCode, BaseIdPo::getId, null);
@@ -69,7 +174,7 @@ public class C2_SyncInventoryTest {
         for (List<String> data : list) {
 
             String code = data.get(0);
-            String quantity = data.get(1);
+            String quantity = data.size() == 1 ? "0" : data.get(1);
 
             Long bomSpecId = bomSpecMap.get(code);
             if (bomSpecId == null) {