Browse Source

添加产品BOM

yzc 1 year ago
parent
commit
42c6e4aff7
20 changed files with 386 additions and 8 deletions
  1. 87 0
      hx-item/src/main/java/com/fjhx/item/controller/product/ProductBomInfoController.java
  2. 5 5
      hx-item/src/main/java/com/fjhx/item/controller/product/ProductClassifyController.java
  3. 17 0
      hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductBomDetailDto.java
  4. 17 0
      hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductBomDetailSelectDto.java
  5. 32 0
      hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductBomInfoDto.java
  6. 5 0
      hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductClassifyDto.java
  7. 5 0
      hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductInfoSelectDto.java
  8. 38 0
      hx-item/src/main/java/com/fjhx/item/entity/product/po/ProductBomDetail.java
  9. 5 0
      hx-item/src/main/java/com/fjhx/item/entity/product/po/ProductInfo.java
  10. 26 0
      hx-item/src/main/java/com/fjhx/item/entity/product/vo/ProductBomDetailVo.java
  11. 41 0
      hx-item/src/main/java/com/fjhx/item/entity/product/vo/ProductBomInfoVo.java
  12. 9 0
      hx-item/src/main/java/com/fjhx/item/entity/product/vo/ProductInfoVo.java
  13. 17 0
      hx-item/src/main/java/com/fjhx/item/mapper/product/ProductBomDetailMapper.java
  14. 17 0
      hx-item/src/main/java/com/fjhx/item/service/product/ProductBomDetailService.java
  15. 1 1
      hx-item/src/main/java/com/fjhx/item/service/product/ProductClassifyService.java
  16. 21 0
      hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductBomDetailServiceImpl.java
  17. 12 1
      hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductClassifyServiceImpl.java
  18. 25 0
      hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java
  19. 4 0
      hx-item/src/main/resources/mapper/product/ProductBomDetailMapper.xml
  20. 2 1
      hx-item/src/main/resources/mapper/product/ProductInfoMapper.xml

+ 87 - 0
hx-item/src/main/java/com/fjhx/item/controller/product/ProductBomInfoController.java

@@ -0,0 +1,87 @@
+package com.fjhx.item.controller.product;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.fjhx.common.utils.Assert;
+import com.fjhx.item.entity.product.dto.ProductBomInfoDto;
+import com.fjhx.item.entity.product.po.ProductBomDetail;
+import com.fjhx.item.entity.product.po.ProductInfo;
+import com.fjhx.item.entity.product.vo.ProductBomDetailVo;
+import com.fjhx.item.entity.product.vo.ProductBomInfoVo;
+import com.fjhx.item.service.product.ProductBomDetailService;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.ruoyi.common.utils.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * <p>
+ * item_产品BOM明细 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2024-01-07
+ */
+@RestController
+@RequestMapping("/productBomInfo")
+public class ProductBomInfoController {
+
+    @Autowired
+    private ProductInfoService productInfoService;
+    @Autowired
+    private ProductBomDetailService productBomDetailService;
+
+    /**
+     * 产品BOM信息明细
+     */
+    @PostMapping("/detail")
+    public ProductBomInfoVo detail(@RequestBody BaseSelectDto dto) {
+        Assert.notEmpty(dto.getId(), "产品id不能为空");
+        ProductInfo productInfo = productInfoService.getById(dto.getId());
+        Assert.notEmpty(productInfo, "查询不到产品信息");
+
+        //赋值物料信息
+        List<ProductBomDetail> list = productBomDetailService.list(q -> q.eq(ProductBomDetail::getProductId, dto.getId()));
+        List<ProductBomDetailVo> productBomDetailVos = BeanUtil.copyToList(list, ProductBomDetailVo.class);
+        productInfoService.attributeAssign(productBomDetailVos, ProductBomDetail::getProductId, (item, material) -> {
+            item.setMaterialName(material.getName());
+            item.setMaterialCode(material.getCustomCode());
+        });
+
+        ProductBomInfoVo productBomInfoVo = new ProductBomInfoVo();
+        productBomInfoVo.setId(productInfo.getId());
+        productBomInfoVo.setRawMaterialId(productInfo.getRawMaterialId());
+        productBomInfoVo.setRawMaterialName(productInfo.getName());
+        productBomInfoVo.setRawMaterialName(productInfo.getName());
+        productBomInfoVo.setProductBomDetailList(productBomDetailVos);
+
+        return productBomInfoVo;
+    }
+
+    /**
+     * 产品BOM信息编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ProductBomInfoDto dto) {
+        Assert.notEmpty(dto.getId(), "产品id不能为空");
+
+        productInfoService.update(q -> q
+                .eq(ProductInfo::getId, dto.getId())
+                .set(ProductInfo::getRawMaterialId, dto.getRawMaterialId())
+                .set(ProductInfo::getUpdateTime, new Date())
+                .set(ProductInfo::getUpdateUser, SecurityUtils.getUserId())
+        );
+
+        List<ProductBomDetail> productBomDetailList = dto.getProductBomDetailList();
+        productBomDetailList.forEach(item -> item.setProductId(dto.getId()));
+        productBomDetailService.saveOrUpdateBatch(productBomDetailList);
+    }
+
+}

+ 5 - 5
hx-item/src/main/java/com/fjhx/item/controller/product/ProductClassifyController.java

@@ -1,15 +1,15 @@
 package com.fjhx.item.controller.product;
 
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.dynamic.datasource.annotation.DS;
-import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.item.entity.product.dto.ProductClassifyDto;
-import com.fjhx.item.entity.product.po.ProductClassify;
 import com.fjhx.item.service.product.ProductClassifyService;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+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;
 
 import java.util.List;
 
@@ -34,7 +34,7 @@ public class ProductClassifyController {
      * 产品分类树形
      */
     @PostMapping("/tree")
-    public List<JSONObject> tree(@Validated @RequestBody ProductClassify productClassify) {
+    public List<JSONObject> tree(@Validated @RequestBody ProductClassifyDto productClassify) {
         List<JSONObject> tree = productClassifyService.tree(productClassify);
         return tree;
     }

+ 17 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductBomDetailDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.item.entity.product.dto;
+
+import com.fjhx.item.entity.product.po.ProductBomDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * item_产品BOM明细新增编辑入参实体
+ *
+ * @author
+ * @since 2024-01-07
+ */
+@Getter
+@Setter
+public class ProductBomDetailDto extends ProductBomDetail {
+
+}

+ 17 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductBomDetailSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.item.entity.product.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * item_产品BOM明细列表查询入参实体
+ *
+ * @author
+ * @since 2024-01-07
+ */
+@Getter
+@Setter
+public class ProductBomDetailSelectDto extends BaseSelectDto {
+
+}

+ 32 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductBomInfoDto.java

@@ -0,0 +1,32 @@
+package com.fjhx.item.entity.product.dto;
+
+import com.fjhx.item.entity.product.po.ProductBomDetail;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * <p>
+ * item_产品BOM明细
+ * </p>
+ *
+ * @author
+ * @since 2024-01-07
+ */
+@Getter
+@Setter
+public class ProductBomInfoDto extends BasePo {
+
+    /**
+     * 原材料id
+     */
+    private Long rawMaterialId;
+
+    /**
+     * 产品物料明细列表
+     */
+    private List<ProductBomDetail> productBomDetailList;
+
+}

+ 5 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductClassifyDto.java

@@ -14,4 +14,9 @@ import lombok.Setter;
 @Setter
 public class ProductClassifyDto extends ProductClassify {
 
+    /**
+     * 是否不显示原材料
+     */
+    private Integer isNeRawMaterial;
+
 }

+ 5 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductInfoSelectDto.java

@@ -96,4 +96,9 @@ public class ProductInfoSelectDto extends BaseSelectDto {
      */
     private String customsCode;
 
+    /**
+     * 是否不显示原材料
+     */
+    private Integer isNeRawMaterial;
+
 }

+ 38 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/po/ProductBomDetail.java

@@ -0,0 +1,38 @@
+package com.fjhx.item.entity.product.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * item_产品BOM明细
+ * </p>
+ *
+ * @author
+ * @since 2024-01-07
+ */
+@Getter
+@Setter
+@TableName("product_bom_detail")
+public class ProductBomDetail extends BasePo {
+
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * 物料id
+     */
+    private Long materialId;
+
+    /**
+     * 数量
+     */
+    private BigDecimal quantity;
+
+}

+ 5 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/po/ProductInfo.java

@@ -102,6 +102,11 @@ public class ProductInfo extends BasePo {
      */
     private String prodFilePath;
 
+    /**
+     * 原材料id
+     */
+    private Long rawMaterialId;
+
     //---------------------------------------------------------------
 
     /**

+ 26 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/vo/ProductBomDetailVo.java

@@ -0,0 +1,26 @@
+package com.fjhx.item.entity.product.vo;
+
+import com.fjhx.item.entity.product.po.ProductBomDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * item_产品BOM明细列表查询返回值实体
+ *
+ * @author
+ * @since 2024-01-07
+ */
+@Getter
+@Setter
+public class ProductBomDetailVo extends ProductBomDetail {
+
+    /**
+     * 物料名称
+     */
+    private String materialName;
+    /**
+     * 物料编码
+     */
+    private String materialCode;
+
+}

+ 41 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/vo/ProductBomInfoVo.java

@@ -0,0 +1,41 @@
+package com.fjhx.item.entity.product.vo;
+
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * <p>
+ * item_产品BOM明细
+ * </p>
+ *
+ * @author
+ * @since 2024-01-07
+ */
+@Getter
+@Setter
+public class ProductBomInfoVo extends BasePo {
+
+    /**
+     * 原材料id
+     */
+    private Long rawMaterialId;
+
+    /**
+     * 原材料名称
+     */
+    private String rawMaterialName;
+
+    /**
+     * 原材料编号
+     */
+    private String rawMaterialCode;
+
+    /**
+     * 产品物料明细列表
+     */
+    private List<ProductBomDetailVo> productBomDetailList;
+
+}

+ 9 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/vo/ProductInfoVo.java

@@ -55,4 +55,13 @@ public class ProductInfoVo extends ProductInfo {
      * 产品分类列表树
      */
     private String productClassifyNames;
+
+    /**
+     * 原材料名称
+     */
+    private String rawMaterialName;
+    /**
+     * 原材料编号
+     */
+    private String rawMaterialCode;
 }

+ 17 - 0
hx-item/src/main/java/com/fjhx/item/mapper/product/ProductBomDetailMapper.java

@@ -0,0 +1,17 @@
+package com.fjhx.item.mapper.product;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.item.entity.product.po.ProductBomDetail;
+
+
+/**
+ * <p>
+ * item_产品BOM明细 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2024-01-07
+ */
+public interface ProductBomDetailMapper extends BaseMapper<ProductBomDetail> {
+
+}

+ 17 - 0
hx-item/src/main/java/com/fjhx/item/service/product/ProductBomDetailService.java

@@ -0,0 +1,17 @@
+package com.fjhx.item.service.product;
+
+import com.fjhx.item.entity.product.po.ProductBomDetail;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * item_产品BOM明细 服务类
+ * </p>
+ *
+ * @author
+ * @since 2024-01-07
+ */
+public interface ProductBomDetailService extends BaseService<ProductBomDetail> {
+
+}

+ 1 - 1
hx-item/src/main/java/com/fjhx/item/service/product/ProductClassifyService.java

@@ -21,7 +21,7 @@ public interface ProductClassifyService extends BaseService<ProductClassify> {
     /**
      * 产品分类树形
      */
-    List<JSONObject> tree(ProductClassify productClassify);
+    List<JSONObject> tree(ProductClassifyDto productClassify);
 
     /**
      * 产品分类新增

+ 21 - 0
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductBomDetailServiceImpl.java

@@ -0,0 +1,21 @@
+package com.fjhx.item.service.product.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.item.entity.product.po.ProductBomDetail;
+import com.fjhx.item.mapper.product.ProductBomDetailMapper;
+import com.fjhx.item.service.product.ProductBomDetailService;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * item_产品BOM明细 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2024-01-07
+ */
+@Service
+public class ProductBomDetailServiceImpl extends ServiceImpl<ProductBomDetailMapper, ProductBomDetail> implements ProductBomDetailService {
+
+}

+ 12 - 1
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductClassifyServiceImpl.java

@@ -34,14 +34,25 @@ public class ProductClassifyServiceImpl extends ServiceImpl<ProductClassifyMappe
     private ISysUserService iSysUserService;
 
     @Override
-    public List<JSONObject> tree(ProductClassify productClassify) {
+    public List<JSONObject> tree(ProductClassifyDto productClassify) {
         // 分类名称
         String name = productClassify.getName();
 
+        //是否不显示原材料数据
+        Integer isNeRawMaterial = productClassify.getIsNeRawMaterial();
+        List<Long> pcIds = new ArrayList<>();
+        if (Objects.equals(isNeRawMaterial, 1)) {
+            pcIds = this.listObject(ProductClassify::getId, q -> q
+                    .eq(ProductClassify::getId, 100)
+                    .or().apply("FIND_IN_SET(parent_id_set, 100)")
+            );
+        }
+
         List<ProductClassify> list = lambdaQuery()
                 .select(ProductClassify::getId, ProductClassify::getName, ProductClassify::getParentId, ProductClassify::getSort)
                 .eq(ProductClassify::getDefinition, productClassify.getDefinition())
                 .like(ObjectUtil.isNotEmpty(name), ProductClassify::getName, name)
+                .notIn(ObjectUtil.isNotEmpty(pcIds), ProductClassify::getId, pcIds)
                 .orderByAsc(ProductClassify::getSort)
                 .list();
 

+ 25 - 0
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java

@@ -88,6 +88,18 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
                 new SqlField("pi", ProductInfo::getSpec)
         );
 
+        //不显示原材料数据
+        Integer isNeRawMaterial = dto.getIsNeRawMaterial();
+        if (Objects.equals(isNeRawMaterial, 1)) {
+            List<Long> pcIds = productClassifyService.listObject(ProductClassify::getId, q -> q
+                    .eq(ProductClassify::getId, 100)
+                    .or().apply("FIND_IN_SET(parent_id_set, 100)")
+            );
+            if (ObjectUtil.isNotEmpty(pcIds)) {
+                wrapper.notIn("pi", ProductInfo::getProductClassifyId, pcIds);
+            }
+        }
+
         Page<ProductInfoVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
 
         List<ProductInfoVo> records = page.getRecords();
@@ -99,6 +111,13 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
         List<ProductClassify> productClassifyList = productClassifyService.list();
         Map<Long, ProductClassify> productClassifyMap = productClassifyList.stream().collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
 
+        //赋值原材料信息
+        List<Long> rawMaterialIds = records.stream().map(ProductInfo::getRawMaterialId).collect(Collectors.toList());
+        Map<Long, ProductInfo> rawMaterialMap = new HashMap<>();
+        if (ObjectUtil.isNotEmpty(rawMaterialIds)) {
+            rawMaterialMap = this.mapKEntity(ProductInfo::getId, q -> q.in(ProductInfo::getId, rawMaterialIds));
+        }
+
         for (ProductInfoVo record : records) {
             Long productClassifyId = record.getProductClassifyId();
             ProductClassify productClassify = productClassifyMap.get(productClassifyId);
@@ -116,6 +135,12 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
             }
             record.setClassifyNameGroup(classifyNameGroup);
 
+
+            //赋值原材料信息
+            ProductInfo productInfo = rawMaterialMap.get(record.getRawMaterialId());
+            record.setRawMaterialName(productInfo.getName());
+            record.setRawMaterialCode(productInfo.getCustomCode());
+
         }
 
         return page;

+ 4 - 0
hx-item/src/main/resources/mapper/product/ProductBomDetailMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.item.mapper.product.ProductBomDetailMapper">
+</mapper>

+ 2 - 1
hx-item/src/main/resources/mapper/product/ProductInfoMapper.xml

@@ -35,7 +35,8 @@
                pi.price,
                pi.currency,
                pi.cost_price,
-               pi.cost_currency
+               pi.cost_currency,
+               pi.raw_material_id
         FROM product_info pi
     </sql>