浏览代码

bom、bom分类

24282 1 年之前
父节点
当前提交
c80817f22f

+ 6 - 5
sd-business/src/main/java/com/sd/business/controller/bom/BomClassifyController.java

@@ -1,6 +1,5 @@
 package com.sd.business.controller.bom;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.sd.business.entity.bom.dto.BomClassifyDto;
 import com.sd.business.entity.bom.dto.BomClassifySelectDto;
@@ -12,6 +11,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -29,11 +30,11 @@ public class BomClassifyController {
     private BomClassifyService bomClassifyService;
 
     /**
-     * bom分类分页
+     * bom分类树形
      */
-    @PostMapping("/page")
-    public Page<BomClassifyVo> page(@RequestBody BomClassifySelectDto dto) {
-        return bomClassifyService.getPage(dto);
+    @PostMapping("/tree")
+    public List<BomClassifyVo> tree(@RequestBody BomClassifySelectDto dto) {
+        return bomClassifyService.tree(dto);
     }
 
     /**

+ 10 - 0
sd-business/src/main/java/com/sd/business/entity/bom/dto/BomClassifySelectDto.java

@@ -14,4 +14,14 @@ import lombok.Setter;
 @Setter
 public class BomClassifySelectDto extends BaseSelectDto {
 
+    /**
+     * 分类名称
+     */
+    private String name;
+
+    /**
+     * 分类编码
+     */
+    private String code;
+
 }

+ 18 - 0
sd-business/src/main/java/com/sd/business/entity/bom/dto/BomDto.java

@@ -1,9 +1,14 @@
 package com.sd.business.entity.bom.dto;
 
+import com.fjhx.file.entity.ObsFile;
 import com.sd.business.entity.bom.po.Bom;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
 /**
  * bom新增编辑入参实体
  *
@@ -14,4 +19,17 @@ import lombok.Setter;
 @Setter
 public class BomDto extends Bom {
 
+
+    /**
+     * bom规格
+     */
+    @Valid
+    @NotEmpty(message = "规格不能为空")
+    private List<BomSpecDto> bomSpecList;
+
+    /**
+     * 主图产品
+     */
+    private ObsFile mainImgFile;
+
 }

+ 57 - 0
sd-business/src/main/java/com/sd/business/entity/bom/dto/BomSelectDto.java

@@ -4,6 +4,8 @@ import com.ruoyi.common.core.domain.BaseSelectDto;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * bom列表查询入参实体
  *
@@ -14,4 +16,59 @@ import lombok.Setter;
 @Setter
 public class BomSelectDto extends BaseSelectDto {
 
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 品号
+     */
+    private String code;
+
+    /**
+     * 种类 字典:bom_species
+     */
+    private String species;
+
+    /**
+     * 色层 字典:bom_chromatophore
+     */
+    private String chromatophore;
+
+    /**
+     * 压纹工艺 字典:bom_embossingProcess
+     */
+    private String embossingProcess;
+
+    /**
+     * 正面纹路 字典:bom_frontGrain
+     */
+    private String frontGrain;
+
+    /**
+     * 背面纹路 字典:bom_reverseGrain
+     */
+    private String reverseGrain;
+
+    /**
+     * 规格品名
+     */
+    private String bomSpecName;
+
+    /**
+     * 规格品号
+     */
+    private String bomSpecCode;
+
+    /**
+     * 颜色
+     */
+    private String colour;
+
+    /**
+     * bom分类id
+     */
+    private List<Long> bomClassifyIdList;
+
 }

+ 6 - 0
sd-business/src/main/java/com/sd/business/entity/bom/dto/BomSpecDto.java

@@ -1,5 +1,6 @@
 package com.sd.business.entity.bom.dto;
 
+import com.fjhx.file.entity.ObsFile;
 import com.sd.business.entity.bom.po.BomSpec;
 import lombok.Getter;
 import lombok.Setter;
@@ -14,4 +15,9 @@ import lombok.Setter;
 @Setter
 public class BomSpecDto extends BomSpec {
 
+    /**
+     * 规格图片
+     */
+    private ObsFile imgFile;
+
 }

+ 9 - 1
sd-business/src/main/java/com/sd/business/entity/bom/vo/BomClassifyVo.java

@@ -1,9 +1,12 @@
 package com.sd.business.entity.bom.vo;
 
 import com.sd.business.entity.bom.po.BomClassify;
+import com.sd.framework.util.tree.Tree;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * bom分类列表查询返回值实体
  *
@@ -12,6 +15,11 @@ import lombok.Setter;
  */
 @Getter
 @Setter
-public class BomClassifyVo extends BomClassify {
+public class BomClassifyVo extends BomClassify implements Tree<BomClassifyVo> {
+
+    /**
+     * 子集
+     */
+    private List<BomClassifyVo> children;
 
 }

+ 8 - 0
sd-business/src/main/java/com/sd/business/entity/bom/vo/BomVo.java

@@ -1,9 +1,12 @@
 package com.sd.business.entity.bom.vo;
 
 import com.sd.business.entity.bom.po.Bom;
+import com.sd.business.entity.bom.po.BomSpec;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * bom列表查询返回值实体
  *
@@ -14,4 +17,9 @@ import lombok.Setter;
 @Setter
 public class BomVo extends Bom {
 
+    /**
+     * bom规格列表
+     */
+    private List<BomSpec> bomSpecList;
+
 }

+ 4 - 3
sd-business/src/main/java/com/sd/business/service/bom/BomClassifyService.java

@@ -1,12 +1,13 @@
 package com.sd.business.service.bom;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.service.BaseService;
 import com.sd.business.entity.bom.dto.BomClassifyDto;
 import com.sd.business.entity.bom.dto.BomClassifySelectDto;
 import com.sd.business.entity.bom.po.BomClassify;
 import com.sd.business.entity.bom.vo.BomClassifyVo;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -19,9 +20,9 @@ import com.sd.business.entity.bom.vo.BomClassifyVo;
 public interface BomClassifyService extends BaseService<BomClassify> {
 
     /**
-     * bom分类分页
+     * bom分类树形
      */
-    Page<BomClassifyVo> getPage(BomClassifySelectDto dto);
+    List<BomClassifyVo> tree(BomClassifySelectDto dto);
 
     /**
      * bom分类明细

+ 11 - 6
sd-business/src/main/java/com/sd/business/service/bom/impl/BomClassifyServiceImpl.java

@@ -1,6 +1,5 @@
 package com.sd.business.service.bom.impl;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sd.business.entity.bom.dto.BomClassifyDto;
 import com.sd.business.entity.bom.dto.BomClassifySelectDto;
@@ -10,8 +9,11 @@ import com.sd.business.mapper.bom.BomClassifyMapper;
 import com.sd.business.service.bom.BomClassifyService;
 import com.sd.framework.util.Assert;
 import com.sd.framework.util.sql.Sql;
+import com.sd.framework.util.tree.TreeUtil;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -25,15 +27,18 @@ import org.springframework.stereotype.Service;
 public class BomClassifyServiceImpl extends ServiceImpl<BomClassifyMapper, BomClassify> implements BomClassifyService {
 
     @Override
-    public Page<BomClassifyVo> getPage(BomClassifySelectDto dto) {
+    public List<BomClassifyVo> tree(BomClassifySelectDto dto) {
 
-        Page<BomClassifyVo> page = Sql.create(BomClassifyVo.class)
+        List<BomClassifyVo> list = Sql.create(BomClassifyVo.class)
                 .selectAll(BomClassify.class)
                 .from(BomClassify.class)
-                .orderByDesc(BomClassify::getId)
-                .page(dto.getPage());
 
-        return page;
+                .like(BomClassify::getCode, dto.getCode())
+                .like(BomClassify::getName, dto.getName())
+                .orderByAsc(BomClassify::getSort)
+                .list();
+
+        return TreeUtil.build(list);
     }
 
     @Override

+ 154 - 1
sd-business/src/main/java/com/sd/business/service/bom/impl/BomServiceImpl.java

@@ -1,17 +1,37 @@
 package com.sd.business.service.bom.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.file.entity.FileInfo;
+import com.fjhx.file.entity.ObsFile;
+import com.fjhx.file.service.FileInfoService;
+import com.fjhx.file.utils.ObsFileUtil;
+import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.exception.ServiceException;
 import com.sd.business.entity.bom.dto.BomDto;
 import com.sd.business.entity.bom.dto.BomSelectDto;
 import com.sd.business.entity.bom.po.Bom;
+import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.bom.vo.BomVo;
 import com.sd.business.mapper.bom.BomMapper;
 import com.sd.business.service.bom.BomService;
+import com.sd.business.service.bom.BomSpecService;
 import com.sd.framework.util.Assert;
 import com.sd.framework.util.sql.Sql;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
 
 /**
  * <p>
@@ -24,15 +44,58 @@ import org.springframework.stereotype.Service;
 @Service
 public class BomServiceImpl extends ServiceImpl<BomMapper, Bom> implements BomService {
 
+    @Autowired
+    private BomSpecService bomSpecService;
+
+    @Autowired
+    private FileInfoService fileInfoService;
+
     @Override
     public Page<BomVo> getPage(BomSelectDto dto) {
 
+        List<Long> bomIdList = null;
+
+        if (!StrUtil.isAllBlank(dto.getBomSpecCode(), dto.getBomSpecName(), dto.getColour())) {
+            bomIdList = bomSpecService.listObject(BomSpec::getBomId, i -> i
+                    .like(StrUtil.isNotBlank(dto.getBomSpecCode()), BomSpec::getCode, dto.getBomSpecCode())
+                    .like(StrUtil.isNotBlank(dto.getBomSpecName()), BomSpec::getName, dto.getBomSpecName())
+                    .like(StrUtil.isNotBlank(dto.getColour()), BomSpec::getColour, dto.getColour()));
+            if (bomIdList.isEmpty()) {
+                return new Page<>();
+            }
+        }
+
         Page<BomVo> page = Sql.create(BomVo.class)
                 .selectAll(Bom.class)
                 .from(Bom.class)
+
+                .in(Bom::getId, bomIdList)
+                .like(Bom::getName, dto.getName())
+                .like(Bom::getCode, dto.getCode())
+                .eq(Bom::getSpecies, dto.getSpecies())
+                .eq(Bom::getChromatophore, dto.getChromatophore())
+                .eq(Bom::getEmbossingProcess, dto.getEmbossingProcess())
+                .eq(Bom::getFrontGrain, dto.getFrontGrain())
+                .eq(Bom::getReverseGrain, dto.getReverseGrain())
+                .in(Bom::getBomClassifyId, dto.getBomClassifyIdList())
                 .orderByDesc(Bom::getId)
                 .page(dto.getPage());
 
+        List<BomVo> records = page.getRecords();
+        if (records.isEmpty()) {
+            return page;
+        }
+
+        Map<Long, List<BomSpec>> bomSpecIdMap = bomSpecService.mapKGroup(BomSpec::getBomId, q -> q
+                .in(BomSpec::getBomId, records.stream().map(BaseIdPo::getId).collect(Collectors.toList()))
+                .like(StrUtil.isNotBlank(dto.getColour()), BomSpec::getColour, dto.getColour())
+                .like(StrUtil.isNotBlank(dto.getBomSpecCode()), BomSpec::getCode, dto.getBomSpecCode())
+                .like(StrUtil.isNotBlank(dto.getBomSpecName()), BomSpec::getName, dto.getBomSpecName()));
+
+        for (BomVo record : records) {
+            record.setBomSpecList(bomSpecIdMap.get(record.getId()));
+        }
+
         return page;
     }
 
@@ -45,24 +108,114 @@ public class BomServiceImpl extends ServiceImpl<BomMapper, Bom> implements BomSe
                 .eq(Bom::getId, id)
                 .one();
 
-        Assert.notNull(vo, "未知数据");
+        Assert.notNull(vo, "未知bom");
+
+        List<BomSpec> list = bomSpecService.list(q -> q.eq(BomSpec::getBomId, id));
+        vo.setBomSpecList(list);
 
         return vo;
     }
 
+    @DSTransactional
     @Override
     public void add(BomDto dto) {
+        List<FileInfo> fileInfoList = new ArrayList<>();
+        ObsFile mainImgFile = dto.getMainImgFile();
+
+        dto.setId(IdWorker.getId());
+        dto.setMainImgUrl(mainImgFile == null ? StringPool.EMPTY : mainImgFile.getFileUrl());
+
+        // 绑定主图
+        addFile(dto.getId(), mainImgFile, fileInfoList);
+
+        // 获取bom规格
+        List<BomSpec> bomSpecList = getBomSpecList(dto, fileInfoList);
+
         save(dto);
+        bomSpecService.saveBatch(bomSpecList);
+        if (!fileInfoList.isEmpty()) {
+            fileInfoService.updateBatchById(fileInfoList);
+        }
+
     }
 
+    @DSTransactional
     @Override
     public void edit(BomDto dto) {
+        List<FileInfo> fileInfoList = new ArrayList<>();
+        ObsFile mainImgFile = dto.getMainImgFile();
+
+        dto.setMainImgUrl(mainImgFile == null ? StringPool.EMPTY : mainImgFile.getFileUrl());
+
+        // 绑定主图
+        addFile(dto.getId(), mainImgFile, fileInfoList);
+
+        // 获取bom规格
+        List<BomSpec> bomSpecList = getBomSpecList(dto, fileInfoList);
+
+        // 修改bom
         updateById(dto);
+
+        // 修改bom明细
+        List<Long> bomSpecIdList = bomSpecList.stream().map(BomSpec::getId).filter(Objects::nonNull)
+                .distinct().collect(Collectors.toList());
+        bomSpecService.remove(q -> q.eq(BomSpec::getBomId, dto.getId())
+                .notIn(ObjectUtil.isNotEmpty(bomSpecIdList), BaseIdPo::getId, bomSpecIdList));
+        bomSpecService.saveOrUpdateBatch(bomSpecList);
+
+        // 修改文件
+        List<Long> businessIdList = bomSpecList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
+        businessIdList.add(dto.getId());
+        List<Long> fileInfoIdList = fileInfoList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
+        fileInfoService.remove(q -> q.in(FileInfo::getBusinessId, businessIdList)
+                .notIn(ObjectUtil.isNotEmpty(fileInfoIdList), BaseIdPo::getId, fileInfoIdList));
+        if (!fileInfoList.isEmpty()) {
+            fileInfoService.updateBatchById(fileInfoList);
+        }
+
     }
 
+    @DSTransactional
     @Override
     public void delete(Long id) {
+        Bom bom = getById(id);
+        if (bom == null) {
+            throw new ServiceException("没有找到bom信息");
+        }
+
+        List<Long> businessIdList = bomSpecService.listObject(BaseIdPo::getId, q -> q.eq(BomSpec::getBomId, id));
+        businessIdList.add(id);
+        fileInfoService.remove(q -> q.in(FileInfo::getBusinessId, businessIdList));
+
         removeById(id);
+        bomSpecService.remove(q -> q.eq(BomSpec::getBomId, id));
+    }
+
+    private void addFile(Long businessId, ObsFile obsFile, List<FileInfo> fileList) {
+        if (obsFile != null) {
+            FileInfo fileInfo = new FileInfo();
+            fileInfo.setId(obsFile.getId());
+            fileInfo.setBusinessId(businessId);
+            fileInfo.setBusinessType(ObsFileUtil.defaultFileType);
+            fileList.add(fileInfo);
+        }
+    }
+
+    private List<BomSpec> getBomSpecList(BomDto dto, List<FileInfo> fileInfoList) {
+        return dto.getBomSpecList().stream()
+                .peek(item -> {
+                    ObsFile imgFile = item.getImgFile();
+
+                    item.setId(IdWorker.getId());
+                    item.setBomId(dto.getId());
+
+                    // 绑定规格图片
+                    item.setMainImgUrl(imgFile == null ? StringPool.EMPTY : imgFile.getFileUrl());
+
+                    addFile(item.getId(), imgFile, fileInfoList);
+                })
+                .map(item -> (BomSpec) item)
+                .collect(Collectors.toList());
     }
 
 }