瀏覽代碼

aps-修改产品明细指定字段时,更新对应坯料计划输出成品及坯料计划

sucheng 1 年之前
父節點
當前提交
f3eda7dc4b

+ 3 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProductDetailDao.java

@@ -3,6 +3,7 @@ package com.rongwei.bscommon.sys.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.rongwei.bsentity.domain.*;
+import com.rongwei.bsentity.vo.ApsProcessOutputProductAndBlankStatusVo;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
@@ -54,4 +55,6 @@ public interface ApsProductDetailDao extends BaseMapper<ApsProductDetailDo> {
     @Select("select VALUE as MATERIALCODE,NAME as MATERIALNAME from sys_dict where DELETED='0' and DICTTYPE='metalState' and PID<>'-1'")
     List<ApsProcessMaterialDo> getMetalStateData();
 
+    @Select("select apop.*,abo.ID AS 'blankId',abo.PRODUCTSTATUS AS 'blankStatus' from aps_blank_order abo LEFT JOIN aps_process_output_product apop ON apop.DELETED = 0 AND apop.BLANKID = abo.ID where abo.DELETED = 0 AND apop.PRODUCTID = #{detailId}")
+    List<ApsProcessOutputProductAndBlankStatusVo> selectAboutBlankOutputByDetailId(@Param("detailId") String detailId);
 }

+ 1 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsBlankOrderService.java

@@ -49,4 +49,5 @@ public interface ApsBlankOrderService extends IService<ApsBlankOrderDo> {
     void apsAfter(ProductionScheduleRetVo productionScheduleRetVo,List<ApsBlankOrderVo> apsBlankOrders);
 
     R checkAndUpdateBlankAndOutput(ApsProductionTechnicalRequirementDo req);
+    void updateBlankSplicingColumn(String blankId);
 }

+ 3 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsProductDetailService.java

@@ -2,6 +2,7 @@ package com.rongwei.bscommon.sys.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.rongwei.bsentity.domain.ApsProductDetailDo;
+import com.rongwei.bsentity.vo.UpdateProductDetailsAndBlankOutputReq;
 import com.rongwei.rwcommon.base.R;
 import org.springframework.web.bind.annotation.RequestBody;
 
@@ -25,4 +26,6 @@ public interface ApsProductDetailService extends IService<ApsProductDetailDo> {
     R updateMergeCustomOrder(@RequestBody Map<String, Object> params);
 
     R updateOrSaveProductDetails(List<ApsProductDetailDo> req);
+
+    R updateProductDetailsAndBlankOutput(UpdateProductDetailsAndBlankOutputReq req);
 }

+ 82 - 48
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java

@@ -2094,8 +2094,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         //筛选出需要更新的坯料计划
         List<ApsBlankOrderDo> needUpdateBlankList = apsBlankOrderDoList.stream().filter(item -> Arrays.asList(TO_BE_SCHEDULED, TO_BE_PUBLISHED, TO_BE_STARTED).contains(item.getProductstatus())).collect(Collectors.toList());
 
-        //最终需要更新的数组集合
-        List<ApsBlankOrderDo> endNeedUpdateBlankList = new LinkedList<>();
+//        //最终需要更新的数组集合
+//        List<ApsBlankOrderDo> endNeedUpdateBlankList = new LinkedList<>();
 
         for (ApsBlankOrderDo apsBlankOrderDo : needUpdateBlankList) {
             //是否需要更新坯料计划的 输出产品订单字段
@@ -2147,54 +2147,17 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 apsProcessOutputProductService.updateById(endUpdateOutput);
             }
             if (isNeedUpdateBlank) {
-                //如果坯料计划是暂存,不做处理
-                if (apsBlankOrderDo.getIsstag().equals("是")) {
-                    continue;
-                }
-                ApsBlankOrderDo endUpdateBlank = new ApsBlankOrderDo();
-                endUpdateBlank.setId(apsBlankOrderDo.getId());
-                //=============更新坯料计划的 输出订单产品 和 输出成品===========
-                //查询坯料计划对应的输出成品
-                List<ApsProcessOutputProductDo> processOutputProductDoList = apsProcessOutputProductService.list(new QueryWrapper<ApsProcessOutputProductDo>().lambda().eq(ApsProcessOutputProductDo::getBlankid, apsBlankOrderDo.getId()));
-                if (processOutputProductDoList != null && processOutputProductDoList.size() > 0) {
-                    //获取所有输出成品的输出成品
-                    List<String> outputFinishList = processOutputProductDoList.stream().map(ApsProcessOutputProductDo::getOutputresult).sorted(String::compareTo).collect(Collectors.toList());
-                    //输出成品
-                    String outputFinishProduct = "";
-
-                    for (int i = 0; i < outputFinishList.size(); i++) {
-                        outputFinishProduct += "[" + (i + 1) + "]" + outputFinishList.get(i);
-                        if (i < outputFinishList.size() - 1) {
-                            outputFinishProduct += ",\r\n";
-                        }
-                    }
-                    endUpdateBlank.setOutputfinishproduct(outputFinishProduct);
-
-                    //输出订单产品
-                    String outputOrderProduct = "";
-                    //获取所有输出成品的输出订单产品
-                    List<String> outputOrderProductList = processOutputProductDoList.stream().map(item -> {
-                        String outputresult = item.getOutputresult();
-                        String[] s = outputresult.split(" ");
-                        return s[0] + " " + s[1] + " " + removeExtraZerosAndDecimal(item.getOutputonerollweigth()) + " * " + item.getPlanoutputrollcount() + "卷 = " + removeExtraZerosAndDecimal(item.getPlanoutputonerollweight());
-                    }).sorted(String::compareTo).collect(Collectors.toList());
-
-                    for (int i = 0; i < outputOrderProductList.size(); i++) {
-                        outputOrderProduct += "[" + (i + 1) + "]" + outputOrderProductList.get(i);
-                        if (i < outputOrderProductList.size() - 1) {
-                            outputOrderProduct += ",\r\n";
-                        }
-                    }
-                    endUpdateBlank.setOutputorderproduct(outputOrderProduct);
-                } else {
-                    throw new CustomException("没有找到该坯料计划的输出成品");
-                }
-                endNeedUpdateBlankList.add(endUpdateBlank);
+//                //如果坯料计划是暂存,不做处理
+////                if (apsBlankOrderDo.getIsstag().equals("是")) {
+////                    continue;
+////                }
+                this.updateBlankSplicingColumn(apsBlankOrderDo.getId());
+//                endNeedUpdateBlankList.add(endUpdateBlank);
             }
         }
-        if (endNeedUpdateBlankList.size() > 0) {
-            apsBlankOrderService.updateBatchById(endNeedUpdateBlankList);
-        }
+//        if (endNeedUpdateBlankList.size() > 0) {
+//            apsBlankOrderService.updateBatchById(endNeedUpdateBlankList);
+//        }
 
         return R.ok();
     }
@@ -2203,4 +2166,75 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         bd = bd.stripTrailingZeros();
         return bd.toPlainString();
     }
+
+    /**
+     * 根据坯料计划ID,更新 拼接字段(输出订单产品、输出成品、坯料输出物料类型、坯料输出物料规格)
+     *
+     * @param blankId 坯料计划ID
+     */
+    public void updateBlankSplicingColumn(String blankId) {
+        ApsBlankOrderDo endUpdateBlank = new ApsBlankOrderDo();
+        endUpdateBlank.setId(blankId);
+        //=============更新坯料计划的 输出订单产品、输出成品、坯料输出物料类型、坯料输出物料规格===========
+        //查询坯料计划对应的输出成品
+        List<ApsProcessOutputProductDo> processOutputProductDoList = apsProcessOutputProductService.list(new QueryWrapper<ApsProcessOutputProductDo>().lambda().eq(ApsProcessOutputProductDo::getBlankid, blankId));
+        if (processOutputProductDoList != null && processOutputProductDoList.size() > 0) {
+            //获取所有输出成品的输出成品
+            List<String> outputFinishList = processOutputProductDoList.stream().map(ApsProcessOutputProductDo::getOutputresult).sorted(String::compareTo).collect(Collectors.toList());
+            //================输出成品===============
+            String outputFinishProduct = "";
+
+            for (int i = 0; i < outputFinishList.size(); i++) {
+                outputFinishProduct += "[" + (i + 1) + "]" + outputFinishList.get(i);
+                if (i < outputFinishList.size() - 1) {
+                    outputFinishProduct += ",\r\n";
+                }
+            }
+            endUpdateBlank.setOutputfinishproduct(outputFinishProduct);
+
+            //================输出订单产品=================
+            String outputOrderProduct = "";
+            //获取所有输出成品的输出订单产品
+            List<String> outputOrderProductList = processOutputProductDoList.stream().map(item -> {
+                String outputresult = item.getOutputresult();
+                String[] s = outputresult.split(" ");
+                return s[0] + " " + s[1] + " " + removeExtraZerosAndDecimal(item.getOutputonerollweigth()) + "吨 * " + item.getPlanoutputrollcount() + "卷 = " + removeExtraZerosAndDecimal(item.getPlanoutputonerollweight());
+            }).sorted(String::compareTo).collect(Collectors.toList());
+
+            for (int i = 0; i < outputOrderProductList.size(); i++) {
+                outputOrderProduct += "[" + (i + 1) + "]" + outputOrderProductList.get(i);
+                if (i < outputOrderProductList.size() - 1) {
+                    outputOrderProduct += ",\r\n";
+                }
+            }
+            endUpdateBlank.setOutputorderproduct(outputOrderProduct);
+
+            //==============坯料输出物料类型===============
+            String outMaterType = "";
+            List<String> outMaterTypeList = processOutputProductDoList.stream().map(ApsProcessOutputProductDo::getOutmatertype).sorted(String::compareTo).collect(Collectors.toList());
+            for (int i = 0; i < outMaterTypeList.size(); i++) {
+                outMaterType += "[" + (i + 1) + "]" + outMaterTypeList.get(i);
+                if (i < outMaterTypeList.size() - 1) {
+                    outMaterType += ",\r\n";
+                }
+            }
+            endUpdateBlank.setBlankoutmatertype(outMaterType);
+
+            //==============坯料输出物料规格===============
+            String outMaterSpecification = "";
+            List<String> outMaterSpecificationList = processOutputProductDoList.stream().map(ApsProcessOutputProductDo::getOutmaterspecification).sorted(String::compareTo).collect(Collectors.toList());
+            for (int i = 0; i < outMaterSpecificationList.size(); i++) {
+                outMaterSpecification += "[" + (i + 1) + "]" + outMaterSpecificationList.get(i);
+                if (i < outMaterSpecificationList.size() - 1) {
+                    outMaterSpecification += ",\r\n";
+                }
+            }
+            endUpdateBlank.setBlankoutmaterspecification(outMaterSpecification);
+
+            //更新坯料计划
+            this.updateById(endUpdateBlank);
+        } else {
+            throw new CustomException("没有找到该坯料计划的输出成品");
+        }
+    }
 }

+ 99 - 7
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProductDetailServiceImpl.java

@@ -4,24 +4,22 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwei.bscommon.sys.dao.ApsProductDetailDao;
-import com.rongwei.bscommon.sys.service.ApsProductDetailService;
-import com.rongwei.bscommon.sys.service.ApsProductionMergeOrderService;
-import com.rongwei.bscommon.sys.service.ApsProductionOrderService;
-import com.rongwei.bscommon.sys.service.SlaveSourceService;
+import com.rongwei.bscommon.sys.service.*;
 import com.rongwei.bsentity.domain.*;
+import com.rongwei.bsentity.vo.ApsProcessOutputProductAndBlankStatusVo;
+import com.rongwei.bsentity.vo.UpdateProductDetailsAndBlankOutputReq;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.utils.SecurityUtil;
 import com.rongwei.rwcommon.utils.StringUtils;
 import com.rongwei.safecommon.utils.CXCommonUtils;
+import com.rongwei.safecommon.utils.SaveConstans;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.RequestBody;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -50,6 +48,12 @@ public class ApsProductDetailServiceImpl extends ServiceImpl<ApsProductDetailDao
     @Autowired
     private ApsProductDetailDao apsProductDetailDao;
 
+    @Autowired
+    private ApsProcessOutputProductService apsProcessOutputProductService;
+
+    @Autowired
+    private ApsBlankOrderService apsBlankOrderService;
+
     /*
     获取客户订单
      */
@@ -466,4 +470,92 @@ public class ApsProductDetailServiceImpl extends ServiceImpl<ApsProductDetailDao
         }
         return R.ok();
     }
+
+    @Override
+    @Transactional
+    public R updateProductDetailsAndBlankOutput(UpdateProductDetailsAndBlankOutputReq req) {
+        //获取目前订单所有的产品明细
+        List<ApsProductDetailDo> apsProductDetailDoList = req.getApsProductDetailDoList();
+        //获取当前修改的产品明细的ID
+        String nowId = req.getUpdateId();
+
+        //区分 目前修改的产品明细和 暂未修改的产品明细
+        List<ApsProductDetailDo> nowUpdateList = apsProductDetailDoList.stream().filter(item -> item.getId().equals(nowId)).collect(Collectors.toList());
+        List<ApsProductDetailDo> updateOrInsertDetailList = apsProductDetailDoList.stream().filter(item -> !item.getId().equals(nowId)).collect(Collectors.toList());
+
+        if (nowUpdateList.size() > 0 && ObjectUtil.isNotEmpty(nowUpdateList.get(0))) {
+            //产品明细变更
+            ApsProductDetailDo apsProductDetailDo = nowUpdateList.get(0);
+
+            //复制新的产品明细
+            apsProductDetailDo.setId(SecurityUtil.getUUID());
+            updateOrInsertDetailList.add(apsProductDetailDo);
+
+            //检查订单产品明细对应的所有相关的坯料计划的输出成品,
+            //如果订单产品明细的订单产品字段值不等于坯料计划输出成品的订单产品字段值,
+            //则订单产品明细ID=(新ID),更新订单产品明细的坯料计划输出总重量=0
+            //查询当前产品明细ID对应的坯料计划输出成品
+            List<ApsProcessOutputProductAndBlankStatusVo> apsProcessOutputProductAndBlankStatusVoList = this.baseMapper.selectAboutBlankOutputByDetailId(nowId);
+            //筛选其中待排程和待发布的坯料计划的输出成品
+            List<ApsProcessOutputProductAndBlankStatusVo> needUpdateOutputList = apsProcessOutputProductAndBlankStatusVoList.stream().filter(item ->
+                    ObjectUtil.isNotEmpty(item.getBlankStatus())
+                            //坯料计划的生产状态为 待排程或待发布
+                            && Integer.parseInt(item.getBlankStatus()) <= Integer.parseInt(SaveConstans.ProductionStatus.TO_BE_PUBLISHED)).collect(Collectors.toList());
+            if (apsProcessOutputProductAndBlankStatusVoList.size() > 0) {
+                Set<String> needUpdateBlankIds = new HashSet<>();
+                for (ApsProcessOutputProductAndBlankStatusVo vo : needUpdateOutputList) {
+                    if (!vo.getProductname().equals(apsProductDetailDo.getInputmaterialdescription())) {
+                        //变更产品明细对应的输出成品
+                        ApsProcessOutputProductDo apsProcessOutputProductDo = new ApsProcessOutputProductDo();
+                        apsProcessOutputProductDo.setId(vo.getId());
+                        apsProcessOutputProductDo.setAlloy(apsProductDetailDo.getAlloy());
+                        apsProcessOutputProductDo.setAlloystatus(apsProductDetailDo.getAlloystatus());
+                        apsProcessOutputProductDo.setThickness(apsProductDetailDo.getThickness());
+                        apsProcessOutputProductDo.setProwidth(apsProductDetailDo.getProwidth());
+                        apsProcessOutputProductDo.setProlength(apsProductDetailDo.getProlength());
+                        apsProcessOutputProductDo.setRollweightrequirement(apsProductDetailDo.getRollweightrequirement());
+                        apsProcessOutputProductDo.setRolldiameterrequirement(apsProductDetailDo.getRolldiameterrequirement());
+                        apsProcessOutputProductDo.setRollnumberrequirement(apsProductDetailDo.getRollnumberrequirement());
+                        apsProcessOutputProductDo.setProductname(apsProductDetailDo.getInputmaterialdescription());
+                        apsProcessOutputProductDo.setProductid(apsProductDetailDo.getId());
+                        String alloy = apsProcessOutputProductDo.getAlloy();
+                        String alloyStatus = apsProcessOutputProductDo.getAlloystatus();
+                        String productType = vo.getProducttype();
+                        if (ObjectUtil.isNotEmpty(vo.getChangealloy())) {
+                            alloy = vo.getChangealloy();
+                        }
+                        if (ObjectUtil.isNotEmpty(vo.getChangealloystatus())) {
+                            alloyStatus = vo.getChangealloystatus();
+                        }
+                        if (ObjectUtil.isNotEmpty(vo.getChangeproducttype())) {
+                            productType = vo.getChangeproducttype();
+                        }
+
+                        //拼接输出成品的输出物料类型字段
+                        apsProcessOutputProductDo.setOutmatertype(alloy + productType + apsProcessOutputProductDo.getThickness());
+                        //拼接输出成品的输出物料规格字段
+                        apsProcessOutputProductDo.setOutmaterspecification(alloy + alloyStatus + productType + " " + apsProcessOutputProductDo.getProductname().split(" ")[1]);
+                        //拼接输出成品的输出成品字段
+                        apsProcessOutputProductDo.setOutputresult(apsProcessOutputProductDo.getOutmaterspecification() + " " + vo.getOutputonerollweigth() + "吨 * " + vo.getPlanoutputorderroll() + "卷");
+
+                        apsProcessOutputProductService.updateById(apsProcessOutputProductDo);
+                        needUpdateBlankIds.add(vo.getBlankId());
+                    }
+                }
+                //遍历需要更新的坯料计划,更新 输出订单产品、输出成品、坯料输出物料类型、坯料输出物料规格
+                for (String needUpdateBlankId : needUpdateBlankIds) {
+                    apsBlankOrderService.updateBlankSplicingColumn(needUpdateBlankId);
+                }
+            }
+        }
+
+        //删除指定ID的产品明细
+        this.removeById(nowId);
+        //更新或新增 产品明细
+        if (ObjectUtil.isNotEmpty(updateOrInsertDetailList)) {
+            this.updateOrSaveProductDetails(updateOrInsertDetailList);
+        }
+
+        return R.ok();
+    }
 }

+ 17 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ApsProcessOutputProductAndBlankStatusVo.java

@@ -0,0 +1,17 @@
+package com.rongwei.bsentity.vo;
+
+import com.rongwei.bsentity.domain.ApsProcessOutputProductDo;
+import lombok.Data;
+
+/**
+ * @author :sc
+ * @since :2024/6/26
+ */
+@Data
+public class ApsProcessOutputProductAndBlankStatusVo extends ApsProcessOutputProductDo {
+    //坯料计划的ID
+    private String blankId;
+
+    //坯料计划的生产状态
+    private String blankStatus;
+}

+ 19 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/UpdateProductDetailsAndBlankOutputReq.java

@@ -0,0 +1,19 @@
+package com.rongwei.bsentity.vo;
+
+import com.rongwei.bsentity.domain.ApsProductDetailDo;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author :sc
+ * @since :2024/6/26
+ */
+@Data
+public class UpdateProductDetailsAndBlankOutputReq {
+    //产品明细列表
+    private List<ApsProductDetailDo> apsProductDetailDoList;
+
+    //被修改的产品明细ID
+    private String updateId;
+}

+ 15 - 0
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsProductDetailController.java

@@ -3,6 +3,7 @@ package com.rongwei.bsserver.controller;
 
 import com.rongwei.bscommon.sys.service.ApsProductDetailService;
 import com.rongwei.bsentity.domain.ApsProductDetailDo;
+import com.rongwei.bsentity.vo.UpdateProductDetailsAndBlankOutputReq;
 import com.rongwei.rwcommon.base.R;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -84,5 +85,19 @@ public class ApsProductDetailController {
             return R.error("更新或保存产品明细失败,请联系管理员");
         }
     }
+
+    /**
+     * 编辑产品明细的 合金、合金状态、厚、宽、长时,调用此接口,用于更新新的产品明细、更新产品明细对应的输出成品、拼接对应坯料计划的输出成品字段
+     */
+    @PostMapping("/updateProductDetailsAndBlankOutput")
+    public R updateProductDetailsAndBlankOutput(@RequestBody UpdateProductDetailsAndBlankOutputReq req) {
+        try {
+            log.info("更新或保存产品明细及其对应的输出成品;参数为:{}", req);
+            return apsProductDetailService.updateProductDetailsAndBlankOutput(req);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("更新或保存产品明细及其对应的输出成品失败,请联系管理员");
+        }
+    }
 }