Browse Source

sku编辑

24282 1 year ago
parent
commit
8f9168fcb6

+ 9 - 5
sd-business/src/main/java/com/sd/business/controller/sku/SkuController.java

@@ -1,13 +1,17 @@
 package com.sd.business.controller.sku;
 
-import org.springframework.web.bind.annotation.*;
 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.sd.business.entity.sku.dto.SkuDto;
 import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.sd.business.entity.sku.dto.SkuDto;
+import com.sd.business.entity.sku.dto.SkuSelectDto;
+import com.sd.business.entity.sku.vo.SkuVo;
 import com.sd.business.service.sku.SkuService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 
 /**
@@ -45,7 +49,7 @@ public class SkuController {
      * sku新增
      */
     @PostMapping("/add")
-    public void add(@RequestBody SkuDto skuDto) {
+    public void add(@Validated @RequestBody SkuDto skuDto) {
         skuService.add(skuDto);
     }
 

+ 9 - 1
sd-business/src/main/java/com/sd/business/entity/sku/dto/SkuDto.java

@@ -4,14 +4,22 @@ import com.sd.business.entity.sku.po.Sku;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
 /**
  * sku新增编辑入参实体
  *
- * @author 
+ * @author
  * @since 2023-07-03
  */
 @Getter
 @Setter
 public class SkuDto extends Sku {
 
+    @Valid
+    @NotEmpty(message = "规格列表不能为空")
+    private List<SkuSpecDto> skuSpecDtoList;
+
 }

+ 16 - 0
sd-business/src/main/java/com/sd/business/entity/sku/dto/SkuSpecDto.java

@@ -1,9 +1,13 @@
 package com.sd.business.entity.sku.dto;
 
 import com.sd.business.entity.sku.po.SkuSpec;
+import com.sd.business.entity.sku.po.SkuSpecLink;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.Valid;
+import java.util.List;
+
 /**
  * sku规格新增编辑入参实体
  *
@@ -14,4 +18,16 @@ import lombok.Setter;
 @Setter
 public class SkuSpecDto extends SkuSpec {
 
+    /**
+     * 包材
+     */
+    @Valid
+    private List<SkuSpecLink> principalMaterialSkuSpecLinkList;
+
+    /**
+     * 快递
+     */
+    @Valid
+    private List<SkuSpecLink> expressPackingSkuSpecLinkList;
+
 }

+ 8 - 0
sd-business/src/main/java/com/sd/business/entity/sku/po/Sku.java

@@ -5,6 +5,9 @@ import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 /**
  * <p>
  * sku
@@ -26,6 +29,7 @@ public class Sku extends BasePo {
     /**
      * 类型 0非集团SKU 1集团SKU
      */
+    @NotNull(message = "类型不能为空")
     private Integer type;
 
     /**
@@ -46,16 +50,19 @@ public class Sku extends BasePo {
     /**
      * 群组品号
      */
+    @NotBlank(message = "群组品号不能为空")
     private String groupItemNumber;
 
     /**
      * 编码
      */
+    @NotBlank(message = "编码不能为空")
     private String code;
 
     /**
      * 名称
      */
+    @NotBlank(message = "名称不能为空")
     private String name;
 
     /**
@@ -76,6 +83,7 @@ public class Sku extends BasePo {
     /**
      * 工艺产线id
      */
+    @NotNull(message = "工艺产线id不能为空")
     private Long craftProductionLineId;
 
     /**

+ 6 - 0
sd-business/src/main/java/com/sd/business/entity/sku/po/SkuSpecLink.java

@@ -5,6 +5,9 @@ import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.DecimalMin;
+import javax.validation.constraints.NotNull;
+
 /**
  * <p>
  * sku规格关联
@@ -31,6 +34,7 @@ public class SkuSpecLink extends BasePo {
     /**
      * bom规格id
      */
+    @NotNull(message = "bom规格id不能为空")
     private Long bomSpecId;
 
     /**
@@ -46,6 +50,8 @@ public class SkuSpecLink extends BasePo {
     /**
      * 数量
      */
+    @NotNull(message = "数量不能为空")
+    @DecimalMin(value = "0.01", message = "必须大于0")
     private Integer quantity;
 
 }

+ 114 - 9
sd-business/src/main/java/com/sd/business/service/sku/impl/SkuServiceImpl.java

@@ -2,6 +2,7 @@ package com.sd.business.service.sku.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.domain.BaseIdPo;
@@ -10,6 +11,7 @@ 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.po.Sku;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.entity.sku.po.SkuSpecLink;
@@ -24,12 +26,11 @@ import com.sd.business.service.sku.SkuSpecService;
 import com.sd.framework.util.Assert;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 
 /**
@@ -96,11 +97,11 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements SkuSe
         List<Long> bomSpecIdList = new ArrayList<>();
         bomSpecIdList.addAll(list.stream().map(SkuSpec::getBomSpecId).filter(ObjectUtil::isNotNull).collect(Collectors.toList()));
         bomSpecIdList.addAll(skuSpecLinkList.stream().map(SkuSpecLink::getBomSpecId).collect(Collectors.toList()));
-        if (bomSpecIdList.size() == 0) {
-            return result;
+        Map<Long, BomSpec> bomSpecMap = new HashMap<>();
+        if (bomSpecIdList.size() > 0) {
+            bomSpecMap = bomSpecService.mapKEntity(BaseIdPo::getId, q -> q.in(BaseIdPo::getId, bomSpecIdList));
         }
 
-        Map<Long, BomSpec> bomSpecMap = bomSpecService.mapKEntity(BaseIdPo::getId, q -> q.in(BaseIdPo::getId, bomSpecIdList));
         for (SkuSpecVo item : skuSpecList) {
 
             // 赋值主材bom名称
@@ -133,19 +134,123 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements SkuSe
         return result;
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void add(SkuDto skuDto) {
-        this.save(skuDto);
+        skuDto.setId(IdWorker.getId());
+        skuDto.setSource(1);
+
+        List<SkuSpecDto> skuSpecDtoList = skuDto.getSkuSpecDtoList();
+
+        for (SkuSpecDto skuSpecDto : skuSpecDtoList) {
+            skuSpecDto.setId(IdWorker.getId());
+            skuSpecDto.setSkuId(skuDto.getId());
+        }
+
+        List<SkuSpecLink> skuSpecLinkList = skuSpecDtoList.stream().flatMap(item -> {
+            List<SkuSpecLink> principalMaterialSkuSpecLinkList = item.getPrincipalMaterialSkuSpecLinkList();
+            if (principalMaterialSkuSpecLinkList == null) {
+                principalMaterialSkuSpecLinkList = Collections.emptyList();
+            } else {
+                for (SkuSpecLink skuSpecLink : principalMaterialSkuSpecLinkList) {
+                    skuSpecLink.setId(IdWorker.getId());
+                    skuSpecLink.setSkuId(item.getSkuId());
+                    skuSpecLink.setSkuSpecId(item.getId());
+                    skuSpecLink.setDepartmentId(SecurityUtils.getDeptId());
+                    skuSpecLink.setType(1);
+                }
+            }
+
+            List<SkuSpecLink> expressPackingSkuSpecLinkList = item.getExpressPackingSkuSpecLinkList();
+            if (expressPackingSkuSpecLinkList == null) {
+                expressPackingSkuSpecLinkList = Collections.emptyList();
+            } else {
+                for (SkuSpecLink skuSpecLink : expressPackingSkuSpecLinkList) {
+                    skuSpecLink.setId(IdWorker.getId());
+                    skuSpecLink.setSkuId(item.getSkuId());
+                    skuSpecLink.setSkuSpecId(item.getId());
+                    skuSpecLink.setDepartmentId(SecurityUtils.getDeptId());
+                    skuSpecLink.setType(2);
+                }
+            }
+            return Stream.concat(principalMaterialSkuSpecLinkList.stream(), expressPackingSkuSpecLinkList.stream());
+        }).collect(Collectors.toList());
+
+        save(skuDto);
+        skuSpecService.saveBatch(skuSpecDtoList.stream().map(item -> (SkuSpec) item).collect(Collectors.toList()));
+        skuSpecLinkService.saveBatch(skuSpecLinkList);
+
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void edit(SkuDto skuDto) {
+        Long skuId = skuDto.getId();
+
+        List<SkuSpecDto> skuSpecDtoList = skuDto.getSkuSpecDtoList();
+
+        List<Long> skuSpecIdList = skuSpecDtoList.stream().map(SkuSpec::getId)
+                .filter(ObjectUtil::isNotNull).collect(Collectors.toList());
+
+        List<Long> skuSpecLinkIdList = skuSpecDtoList.stream().flatMap(item -> Stream.concat(
+                item.getPrincipalMaterialSkuSpecLinkList().stream(),
+                item.getExpressPackingSkuSpecLinkList().stream()
+        )).map(BaseIdPo::getId).filter(ObjectUtil::isNotNull).collect(Collectors.toList());
+
+        skuSpecService.remove(q -> q
+                .eq(SkuSpec::getSkuId, skuId)
+                .notIn(ObjectUtil.isNotEmpty(skuSpecIdList), BaseIdPo::getId, skuSpecIdList));
+
+        skuSpecLinkService.remove(q -> q
+                .eq(SkuSpecLink::getSkuId, skuId)
+                .eq(SkuSpecLink::getDepartmentId, SecurityUtils.getDeptId())
+                .notIn(ObjectUtil.isNotEmpty(skuSpecLinkIdList), BaseIdPo::getId, skuSpecLinkIdList));
+
+        for (SkuSpecDto skuSpecDto : skuSpecDtoList) {
+            skuSpecDto.setId(IdWorker.getId());
+            skuSpecDto.setSkuId(skuDto.getId());
+        }
+
+        List<SkuSpecLink> skuSpecLinkList = skuSpecDtoList.stream().flatMap(item -> {
+            List<SkuSpecLink> principalMaterialSkuSpecLinkList = item.getPrincipalMaterialSkuSpecLinkList();
+            if (principalMaterialSkuSpecLinkList == null) {
+                principalMaterialSkuSpecLinkList = Collections.emptyList();
+            } else {
+                for (SkuSpecLink skuSpecLink : principalMaterialSkuSpecLinkList) {
+                    skuSpecLink.setId(IdWorker.getId());
+                    skuSpecLink.setSkuId(item.getSkuId());
+                    skuSpecLink.setSkuSpecId(item.getId());
+                    skuSpecLink.setDepartmentId(SecurityUtils.getDeptId());
+                    skuSpecLink.setType(1);
+                }
+            }
+
+            List<SkuSpecLink> expressPackingSkuSpecLinkList = item.getExpressPackingSkuSpecLinkList();
+            if (expressPackingSkuSpecLinkList == null) {
+                expressPackingSkuSpecLinkList = Collections.emptyList();
+            } else {
+                for (SkuSpecLink skuSpecLink : expressPackingSkuSpecLinkList) {
+                    skuSpecLink.setId(IdWorker.getId());
+                    skuSpecLink.setSkuId(item.getSkuId());
+                    skuSpecLink.setSkuSpecId(item.getId());
+                    skuSpecLink.setDepartmentId(SecurityUtils.getDeptId());
+                    skuSpecLink.setType(2);
+                }
+            }
+            return Stream.concat(principalMaterialSkuSpecLinkList.stream(), expressPackingSkuSpecLinkList.stream());
+        }).collect(Collectors.toList());
+
         this.updateById(skuDto);
+        skuSpecService.saveOrUpdateBatch(skuSpecDtoList.stream().map(item -> (SkuSpec) item).collect(Collectors.toList()));
+        skuSpecLinkService.saveOrUpdateBatch(skuSpecLinkList);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void delete(Long id) {
-        this.removeById(id);
+        removeById(id);
+        skuSpecService.remove(q -> q.eq(SkuSpec::getSkuId, id));
+        skuSpecLinkService.remove(q -> q.eq(SkuSpecLink::getSkuId, id));
     }
 
     private List<SkuSpecLinkVo> createSkuSpecLinkVoList(List<SkuSpecLink> skuSpecLinkList, Map<Long, BomSpec> bomSpecMap) {