瀏覽代碼

aps-技术要求保存时,更新坯料计划 与技术要求相关的部分

sucheng 1 年之前
父節點
當前提交
6aab93a721

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

@@ -0,0 +1,8 @@
+package com.rongwei.bscommon.sys.dao;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwei.bsentity.domain.ApsProductionTechnicalRequirementDo;
+
+public interface ApsProductionTechnicalRequirementDao extends BaseMapper<ApsProductionTechnicalRequirementDo> {
+}

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

@@ -2,6 +2,7 @@ package com.rongwei.bscommon.sys.service;
 
 import com.rongwei.bsentity.domain.ApsBlankOrderDo;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwei.bsentity.domain.ApsProductionTechnicalRequirementDo;
 import com.rongwei.bsentity.vo.*;
 import com.rongwei.rwcommon.base.R;
 import java.util.List;
@@ -45,4 +46,6 @@ public interface ApsBlankOrderService extends IService<ApsBlankOrderDo> {
     void removeBlankOrderAndChild(ApsBlankOrderDo req);
 
     void apsAfter(ProductionScheduleRetVo productionScheduleRetVo,List<ApsBlankOrderVo> apsBlankOrders);
+
+    R checkAndUpdateBlankAndOutput(ApsProductionTechnicalRequirementDo req);
 }

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

@@ -0,0 +1,9 @@
+package com.rongwei.bscommon.sys.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwei.bsentity.domain.ApsProductionTechnicalRequirementDo;
+
+
+public interface ApsProductionTechnicalRequirementService extends IService<ApsProductionTechnicalRequirementDo> {
+
+}

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

@@ -95,6 +95,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     private ApsEquipmentCalendarService apsEquipmentCalendarService;
     @Autowired
     private ApsService apsService;
+    @Autowired
+    private ApsProductionTechnicalRequirementService apsProductionTechnicalRequirementService;
 
 
     @Override
@@ -1834,4 +1836,140 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         //逻辑删除坯料计划的工艺路线
         this.baseMapper.removeMindMappingByBlankId(req.getId());
     }
+
+    @Override
+    @Transactional
+    public R checkAndUpdateBlankAndOutput(ApsProductionTechnicalRequirementDo req) {
+        String id = req.getId();
+        //查询技术要求
+        ApsProductionTechnicalRequirementDo apsProductionTechnicalRequirementDo = apsProductionTechnicalRequirementService.getById(id);
+        //获取对应的产品明细IDs
+        String orderdetailids = apsProductionTechnicalRequirementDo.getOrderdetailids();
+        if (ObjectUtil.isEmpty(orderdetailids)) {
+            return R.error("技术要求对应的产品明细不能为空");
+        }
+        //查询产品明细对应的输出成品
+        List<String> orderDetailIdList = Arrays.asList(orderdetailids.split(","));
+        List<ApsProcessOutputProductDo> apsProcessOutputProductDoList = apsProcessOutputProductService.list(new QueryWrapper<ApsProcessOutputProductDo>().lambda().in(ApsProcessOutputProductDo::getProductid, orderDetailIdList));
+        //查询涉及到的坯料计划ID
+        List<String> blankIdlist = apsProcessOutputProductDoList.stream().map(ApsProcessOutputProductDo::getBlankid).distinct().collect(Collectors.toList());
+        if (ObjectUtil.isEmpty(blankIdlist)) {
+            return R.ok();
+        }
+        //查询坯料计划详情
+        List<ApsBlankOrderDo> apsBlankOrderDoList = apsBlankOrderService.list(new QueryWrapper<ApsBlankOrderDo>().lambda().in(ApsBlankOrderDo::getId, blankIdlist));
+
+        //如果坯料计划的生产状态为:待排程(10),待发布(20),待开工(30)
+        //筛选出需要更新的坯料计划
+        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<>();
+
+        for (ApsBlankOrderDo apsBlankOrderDo : needUpdateBlankList) {
+            //是否需要更新坯料计划的 输出产品订单字段
+            boolean isNeedUpdateBlank = false;
+
+            //筛选出需要更新的输出成品
+            List<ApsProcessOutputProductDo> needUpdateProductOutputList = apsProcessOutputProductDoList.stream().filter(item -> item.getBlankid().equals(apsBlankOrderDo.getId())).collect(Collectors.toList());
+            for (ApsProcessOutputProductDo apsProcessOutputProductDo : needUpdateProductOutputList) {
+                //获取当前组装输出成品 使用的 字段,(包含替换字段)
+                String alloy = ObjectUtil.isNotEmpty(apsProcessOutputProductDo.getAlloy()) ? apsProcessOutputProductDo.getAlloy() : "";
+                String alloystatus = ObjectUtil.isNotEmpty(apsProcessOutputProductDo.getAlloystatus()) ? apsProcessOutputProductDo.getAlloystatus() : "";
+                String producttype = ObjectUtil.isNotEmpty(apsProcessOutputProductDo.getProducttype()) ? apsProcessOutputProductDo.getProducttype() : "";
+                if (ObjectUtil.isNotEmpty(apsProcessOutputProductDo.getChangealloy())) {
+                    alloy = apsProcessOutputProductDo.getChangealloy();
+                }
+                if (ObjectUtil.isNotEmpty(apsProcessOutputProductDo.getChangealloystatus())) {
+                    alloystatus = apsProcessOutputProductDo.getChangealloystatus();
+                }
+                if (ObjectUtil.isNotEmpty(apsProcessOutputProductDo.getChangeproducttype())) {
+                    producttype = apsProcessOutputProductDo.getChangeproducttype();
+                }
+
+                ApsProcessOutputProductDo endUpdateOutput = BeanUtil.copyProperties(apsProductionTechnicalRequirementDo, ApsProcessOutputProductDo.class);
+                endUpdateOutput.setId(apsProcessOutputProductDo.getId());
+                endUpdateOutput.setProducttype(apsProductionTechnicalRequirementDo.getOrderproducttype());
+                endUpdateOutput.setProducttypeid(apsProductionTechnicalRequirementDo.getOrderproducttypeid());
+                //新的产品类型
+                String newProductType = endUpdateOutput.getProducttype();
+                if (ObjectUtil.isNotEmpty(apsProcessOutputProductDo.getChangeproducttype())) {
+                    newProductType = apsProcessOutputProductDo.getChangeproducttype();
+                }
+                //如果技术要求中的 订单产品类型 不等于 输出成品的 产品类型 , 需要重新组装输出成品
+                if (!producttype.equals(newProductType)) {
+                    String outputResult = "";
+                    outputResult += (alloy + alloystatus + newProductType + " ");
+                    //获取长宽高
+                    String thickness = ObjectUtil.isNotEmpty(apsProcessOutputProductDo.getThickness()) ? removeExtraZerosAndDecimal(apsProcessOutputProductDo.getThickness()) : "";
+                    String prowidth = ObjectUtil.isNotEmpty(apsProcessOutputProductDo.getProwidth()) ? removeExtraZerosAndDecimal(apsProcessOutputProductDo.getProwidth()) : "";
+                    String prolength = ObjectUtil.isNotEmpty(apsProcessOutputProductDo.getProlength()) ? removeExtraZerosAndDecimal(apsProcessOutputProductDo.getProlength()) : "";
+                    outputResult += ("厚" + thickness + "*宽" + prowidth);
+                    if (ObjectUtil.isNotEmpty(prolength)) {
+                        outputResult += ("*长" + prolength);
+                    }
+                    outputResult += ("mm * " + apsProcessOutputProductDo.getPlanoutputorderroll() + "卷");
+
+                    endUpdateOutput.setOutputresult(outputResult);
+                    isNeedUpdateBlank = true;
+                }
+                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.getPlanoutputorderroll() + "卷 = " + 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 (endNeedUpdateBlankList.size() > 0) {
+            apsBlankOrderService.updateBatchById(endNeedUpdateBlankList);
+        }
+
+        return R.ok();
+    }
+
+    public static String removeExtraZerosAndDecimal(BigDecimal bd) {
+        bd = bd.stripTrailingZeros();
+        return bd.toPlainString();
+    }
 }

+ 20 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProductionTechnicalRequirementServiceImpl.java

@@ -0,0 +1,20 @@
+package com.rongwei.bscommon.sys.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.rongwei.bscommon.sys.dao.ApsProductionTechnicalRequirementDao;
+import com.rongwei.bscommon.sys.service.ApsProductionTechnicalRequirementService;
+import com.rongwei.bsentity.domain.ApsProductionTechnicalRequirementDo;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ */
+@Service
+public class ApsProductionTechnicalRequirementServiceImpl extends ServiceImpl<ApsProductionTechnicalRequirementDao, ApsProductionTechnicalRequirementDo>
+        implements ApsProductionTechnicalRequirementService {
+
+}
+
+
+
+

+ 239 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsProductionTechnicalRequirementDo.java

@@ -0,0 +1,239 @@
+package com.rongwei.bsentity.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * aps_production_technical_requirement
+ * @author 
+ */
+@Data
+@TableName("aps_production_technical_requirement")
+public class ApsProductionTechnicalRequirementDo extends BaseDo implements Serializable {
+    /**
+     * 主键
+     */
+    private String id;
+
+    /**
+     * 所属租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 订单ID
+     */
+    private String orderid;
+
+    /**
+     * 产品明细ID
+     */
+    private String orderdetailids;
+
+    /**
+     * 订单产品
+     */
+    private String orderdetailnames;
+
+    /**
+     * 技术要求详情
+     */
+    private String technicalrequirement;
+
+    /**
+     * 坯料类型
+     */
+    private String blanktype;
+
+    /**
+     * 成分调整
+     */
+    private String compositionchange;
+
+    /**
+     * 调整方案
+     */
+    private String changeremark;
+
+    /**
+     * 坯料厚度
+     */
+    private String blamkthickness;
+
+    /**
+     * 坯料均质
+     */
+    private String blankhomogenization;
+
+    /**
+     * 终轧温度
+     */
+    private String finishtemperature;
+
+    /**
+     * 厚度公差(H)
+     */
+    private String thicknesstolerance;
+
+    /**
+     * 宽度公差(W)
+     */
+    private String widthtolerance;
+
+    /**
+     * 长度公差(L)
+     */
+    private String lengthtolerance;
+
+    /**
+     * 折弯要求
+     */
+    private String bendrequirement;
+
+    /**
+     * 接头(率)
+     */
+    private String joint;
+
+    /**
+     * 刷水/达因值
+     */
+    private String swabbing;
+
+    /**
+     * 抗拉强度
+     */
+    private String tensilestrength;
+
+    /**
+     * 屈服强度
+     */
+    private String yieldstrength;
+
+    /**
+     * 延伸率
+     */
+    private String elongationrate;
+
+    /**
+     * 针孔
+     */
+    private String pinhole;
+
+    /**
+     * 杯突
+     */
+    private String cupping;
+
+    /**
+     * 制耳
+     */
+    private String earing;
+
+    /**
+     * 管内芯直径(mm)
+     */
+    private BigDecimal innercorediameter;
+
+    /**
+     * 管芯材质
+     */
+    private String corematerial;
+
+    /**
+     * 包装方式
+     */
+    private String packagingmethod;
+
+    /**
+     * 包装要求
+     */
+    private String packagingrequirement;
+
+    /**
+     * 托盘要求
+     */
+    private String pallentrequirements;
+
+    /**
+     * 标签要求
+     */
+    private String tag;
+
+    /**
+     * 正反面
+     */
+    private String frontandbacksides;
+
+    /**
+     * 亮暗面
+     */
+    private String surfacerequirement;
+
+    /**
+     * 是否过拉矫
+     */
+    private String istensionlevelling;
+
+    /**
+     * 表面硬度
+     */
+    private String surfacehardness;
+
+    /**
+     * 成品外径(废弃)
+     */
+    private String nomod;
+
+    /**
+     * 卷重要求(废弃)
+     */
+    private String rollweightrequirement;
+
+    /**
+     * 其他订单执行标准
+     */
+    private String otherorderstandard;
+
+    /**
+     * 是否成熟工艺
+     */
+    private String idmatureprocess;
+
+    /**
+     * 其他注意事项
+     */
+    private String otherprecaution;
+
+    /**
+     * 订单产品类型名称
+     */
+    private String orderproducttype;
+
+    /**
+     * 坯料产品类型名称
+     */
+    private String blankproducttype;
+
+    /**
+     * 订单产品类型
+     */
+    private String orderproducttypeid;
+
+    /**
+     * 坯料产品类型
+     */
+    private String blankproducttypeid;
+
+    private static final long serialVersionUID = 1L;
+}

+ 16 - 0
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsBlankOrderController.java

@@ -3,6 +3,7 @@ package com.rongwei.bsserver.controller;
 
 import com.rongwei.bscommon.sys.service.ApsBlankOrderService;
 import com.rongwei.bsentity.domain.ApsBlankOrderDo;
+import com.rongwei.bsentity.domain.ApsProductionTechnicalRequirementDo;
 import com.rongwei.bsentity.vo.ApsPlanVo;
 import com.rongwei.bsentity.vo.CheckAndSaveOrUpdateBlankReq;
 import com.rongwei.bsentity.vo.OrderLockVo;
@@ -152,5 +153,20 @@ public class ApsBlankOrderController {
         log.info("removeBlankOrder 取消ID为:{}的坯料计划", req.getId());
         return apsBlankOrderService.removeBlankOrder(req);
     }
+
+    /**
+     * 保存技术要求之后,是否更新坯料计划的输出成品
+     */
+    @PostMapping("/checkAndUpdateBlankAndOutput")
+    public R checkAndUpdateBlankAndOutput(@RequestBody ApsProductionTechnicalRequirementDo req) {
+        try {
+            log.info("checkAndUpdateBlankAndOutput 保存技术要求后更新,技术要求id为:{}相关的坯料计划和输出成品", req.getId());
+            return apsBlankOrderService.checkAndUpdateBlankAndOutput(req);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("更新输出成品失败");
+        }
+
+    }
 }