소스 검색

Merge remote-tracking branch 'origin/master'

xiahan 1 년 전
부모
커밋
9e038fd9ab

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

@@ -1451,11 +1451,12 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 }
             }
         }
-        if (checkLevel == 3) {
-            //==============拼接工艺路线输出成品==============
+        if (checkLevel == 2 || checkLevel == 3) {
+            //==============拼接工艺路线输出成品和工艺输出物料规格==============
             //查询坯料计划对应工艺路线的输出成品
             List<String> processOutputList = this.baseMapper.selectProcessByBlankId(apsBlankOrderDo.getId());
             if (processOutputList != null && processOutputList.size() > 0) {
+                //工艺路线输出成品
                 String outputProcessMaterial = "";
                 //排序
                 processOutputList.sort(String::compareTo);
@@ -1466,6 +1467,22 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     }
                 }
                 apsBlankOrderDo.setOutputmaterial(outputProcessMaterial);
+
+                //工艺输出物料规格
+                String processOutputMaterialSpecification = "";
+                List<String> processOutputMaterialSpecificationList = processOutputList.stream().map(item -> {
+                    String[] s = item.split(" ");
+                    return s[0] + " " + s[1];
+                }).sorted(String::compareTo).collect(Collectors.toList());
+                for (int i = 0; i < processOutputMaterialSpecificationList.size(); i++) {
+                    processOutputMaterialSpecification += "[" + (i + 1) + "]" + processOutputMaterialSpecificationList.get(i);
+                    if (i < processOutputMaterialSpecificationList.size() - 1) {
+                        processOutputMaterialSpecification += ",\r\n";
+                    }
+                }
+                apsBlankOrderDo.setProcessoutmaterspecification(processOutputMaterialSpecification);
+
+
             } else {
                 return R.error("工艺路线没有输出成品");
             }
@@ -1626,6 +1643,13 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             }
         }
 
+        //提交工艺路线的校验
+        if (checkLevel == 2) {
+            if (!apsBlankOrderDo.getBlankoutmaterspecification().equals(apsBlankOrderDo.getProcessoutmaterspecification())) {
+                return R.error("工艺路线输出物料规格" + apsBlankOrderDo.getProcessoutmaterspecification() + "与坯料输出物料规格" + apsBlankOrderDo.getBlankoutmaterspecification() + "不一致");
+            }
+        }
+
         if (checkLevel == 3) {
             //============校验工艺路线=============
             //如果坯料需求的坯料输出成品字段值不等于坯料需求的工艺输出成品字段值,错误提示:工艺路线输出成品与坯料输出成品不一致
@@ -1754,12 +1778,14 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     return R.error("第" + j + "个坯料计划的承诺交货期-止不能早于排程交货期-止" + DateUtil.format(apsBlankOrderDo.getScheduledateend(), "yyyy-MM-dd"));
                 }
             }
+        }
 
-
+        if (checkLevel == 2 || checkLevel == 3) {
             //==============拼接工艺路线输出成品==============
             //查询坯料计划对应工艺路线的输出成品
             List<String> processOutputList = this.baseMapper.selectProcessByBlankId(apsBlankOrderDo.getId());
             if (processOutputList != null && processOutputList.size() > 0) {
+                //工艺路线输出成品
                 String outputProcessMaterial = "";
                 //排序
                 processOutputList.sort(String::compareTo);
@@ -1770,6 +1796,22 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     }
                 }
                 apsBlankOrderDo.setOutputmaterial(outputProcessMaterial);
+
+                //工艺输出物料规格
+                String processOutputMaterialSpecification = "";
+                List<String> processOutputMaterialSpecificationList = processOutputList.stream().map(item -> {
+                    String[] s = item.split(" ");
+                    return s[0] + " " + s[1];
+                }).sorted(String::compareTo).collect(Collectors.toList());
+                for (int i = 0; i < processOutputMaterialSpecificationList.size(); i++) {
+                    processOutputMaterialSpecification += "[" + (i + 1) + "]" + processOutputMaterialSpecificationList.get(i);
+                    if (i < processOutputMaterialSpecificationList.size() - 1) {
+                        processOutputMaterialSpecification += ",\r\n";
+                    }
+                }
+                apsBlankOrderDo.setProcessoutmaterspecification(processOutputMaterialSpecification);
+
+
             } else {
                 return R.error("第" + j + "个坯料计划 工艺路线没有输出成品");
             }
@@ -1907,6 +1949,14 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         }
 
 
+        //提交工艺路线的校验
+        if (checkLevel == 2) {
+            if (!apsBlankOrderDo.getBlankoutmaterspecification().equals(apsBlankOrderDo.getProcessoutmaterspecification())) {
+                return R.error("第" + j + "个坯料计划 工艺路线输出物料规格" + apsBlankOrderDo.getProcessoutmaterspecification() + "与坯料输出物料规格" + apsBlankOrderDo.getBlankoutmaterspecification() + "不一致");
+            }
+        }
+
+
         if (checkLevel == 3) {
             //============校验工艺路线=============
             //如果坯料需求的坯料输出成品字段值不等于坯料需求的工艺输出成品字段值,错误提示:工艺路线输出成品与坯料输出成品不一致
@@ -2089,7 +2139,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     if (ObjectUtil.isNotEmpty(prolength)) {
                         outputResult += ("*长" + prolength);
                     }
-                    outputResult += ("mm * " + apsProcessOutputProductDo.getPlanoutputorderroll() + "卷");
+                    outputResult += ("mm " + apsProcessOutputProductDo.getOutputonerollweigth() + "吨 * " + apsProcessOutputProductDo.getPlanoutputrollcount() + "卷");
 
                     endUpdateOutput.setOutputresult(outputResult);
                     isNeedUpdateBlank = true;
@@ -2126,7 +2176,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     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());
+                        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++) {

+ 220 - 45
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationServiceImpl.java

@@ -289,23 +289,21 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                             }
                             ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo = BeanUtil.toBean(apsCraftRouteOutMaterRequestDo.get(0), ApsProcessOperationOutMaterDo.class);
                             apsProcessOperationOutMaterDo.setId(SecurityUtil.getUUID());
-                            if (StringUtils.isBlank(apsProcessOperationOutMaterDo.getProducttypeid())) {
-                                apsProcessOperationOutMaterDo.setProducttypeid(outMaterDo.getProducttypeid());
-                            }
                             String outProducttype = apsProcessOperationOutMaterDo.getProducttype();
-                            if (StringUtils.isBlank(outProducttype)) {
-                                outProducttype = outMaterDo.getProducttype();
-                                apsProcessOperationOutMaterDo.setProducttype(outMaterDo.getProducttype());
+                            if (apsProcessOperationOutMaterDo.getProducttyperule().equals("不变")) {
+                                outProducttype = outMaterDo.getProducttype() == null ? "" : outMaterDo.getProducttype();
+                                apsProcessOperationOutMaterDo.setProducttypeid(outMaterDo.getProducttypeid() == null ? "" : outMaterDo.getProducttypeid());
+                                apsProcessOperationOutMaterDo.setProducttype(outProducttype);
                             }
                             String outMeter = apsProcessOperationOutMaterDo.getMetal();
-                            if (StringUtils.isBlank(outMeter)) {
-                                outMeter = outMaterDo.getMetal();
-                                apsProcessOperationOutMaterDo.setMetal(outMaterDo.getMetal());
+                            if (apsProcessOperationOutMaterDo.getMetalrule().equals("不变")) {
+                                outMeter = outMaterDo.getMetal() == null ? "" : outMaterDo.getMetal();
+                                apsProcessOperationOutMaterDo.setMetal(outMeter);
                             }
                             String outMetalstate = apsProcessOperationOutMaterDo.getMetalstate();
-                            if (StringUtils.isBlank(outMetalstate)) {
-                                outMetalstate = outMaterDo.getMetalstate();
-                                apsProcessOperationOutMaterDo.setMetalstate(outMaterDo.getMetalstate());
+                            if (apsProcessOperationOutMaterDo.getMetalstaterule().equals("不变")) {
+                                outMetalstate = outMaterDo.getMetalstate() == null ? "" : outMaterDo.getMetalstate();
+                                apsProcessOperationOutMaterDo.setMetalstate(outMetalstate);
                             }
                             BigDecimal tval = changeSize(outMaterDo.getThickness(), apsProcessOperationOutMaterDo.getThickrule(), apsProcessOperationOutMaterDo.getThickchange(), apsProcessOperationOutMaterDo.getThickness());
                             apsProcessOperationOutMaterDo.setThickness(tval);
@@ -344,7 +342,7 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                             String outputfinishproduct = "";
                             if (StringUtils.isBlank(apsCraftRouteStepDo1.getNextstepid())) {
                                 //如果没有后道工序作业,则自动填入=“{输出物料的输入物料描述} * {计划输出卷数 - 计划备料卷数}卷”
-                                outputfinishproduct = getInMeterInfo(outProducttype, outMeter, outMetalstate, tval, wval, lval) + apsProcessOperationOutMaterDo.getSinglerollweight()+UNIT_MAP.getOrDefault(apsProcessOperationOutMaterDo.getNumunit(), "")+ " * " + blanckdata.getInt("ROLLNUM") + "卷";
+                                outputfinishproduct = getInMeterInfo(outProducttype, outMeter, outMetalstate, tval, wval, lval) + apsProcessOperationOutMaterDo.getSinglerollweight() + UNIT_MAP.getOrDefault(apsProcessOperationOutMaterDo.getNumunit(), "") + " * " + blanckdata.getInt("ROLLNUM") + "卷";
                             }
                             apsProcessOperationOutMaterDo.setOutputfinishproduct(outputfinishproduct);
                             apsProcessOperationOutMaterDo.setOutmaterrequest(outputMeter);
@@ -448,23 +446,21 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                         }
                         ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo = BeanUtil.toBean(apsCraftRouteOutMaterRequestDo.get(0), ApsProcessOperationOutMaterDo.class);
                         apsProcessOperationOutMaterDo.setId(SecurityUtil.getUUID());
-                        if (StringUtils.isBlank(apsProcessOperationOutMaterDo.getProducttypeid())) {
-                            apsProcessOperationOutMaterDo.setProducttypeid(blanckdata.getStr("PRODUCTTYPEID"));
-                        }
                         String outProducttype = apsProcessOperationOutMaterDo.getProducttype();
-                        if (StringUtils.isBlank(outProducttype)) {
-                            outProducttype = blanckdata.getStr("PRODUCTTYPE");
-                            apsProcessOperationOutMaterDo.setProducttype(blanckdata.getStr("PRODUCTTYPE"));
+                        if (apsProcessOperationOutMaterDo.getProducttyperule().equals("不变")) {
+                            outProducttype = blanckdata.getStr("PRODUCTTYPE") == null ? "" : blanckdata.getStr("PRODUCTTYPE");
+                            apsProcessOperationOutMaterDo.setProducttypeid(blanckdata.getStr("PRODUCTTYPEID") == null ? "" : blanckdata.getStr("PRODUCTTYPEID"));
+                            apsProcessOperationOutMaterDo.setProducttype(outProducttype);
                         }
                         String outMeter = apsProcessOperationOutMaterDo.getMetal();
-                        if (StringUtils.isBlank(outMeter)) {
-                            outMeter = blanckdata.getStr("ALLOY");
-                            apsProcessOperationOutMaterDo.setMetal(blanckdata.getStr("ALLOY"));
+                        if (apsProcessOperationOutMaterDo.getMetalrule().equals("不变")) {
+                            outMeter = blanckdata.getStr("ALLOY") == null ? "" : blanckdata.getStr("ALLOY");
+                            apsProcessOperationOutMaterDo.setMetal(outMeter);
                         }
                         String outMetalstate = apsProcessOperationOutMaterDo.getMetalstate();
-                        if (StringUtils.isBlank(outMetalstate)) {
-                            outMetalstate = blanckdata.getStr("ALLOYSTATUS");
-                            apsProcessOperationOutMaterDo.setMetalstate(blanckdata.getStr("ALLOYSTATUS"));
+                        if (apsProcessOperationOutMaterDo.getMetalstaterule().equals("不变")) {
+                            outMetalstate = blanckdata.getStr("ALLOYSTATUS") == null ? "" : blanckdata.getStr("ALLOYSTATUS");
+                            apsProcessOperationOutMaterDo.setMetalstate(outMetalstate);
                         }
                         BigDecimal tval = changeSize(blanckdata.getBigDecimal("THICKNESS"), apsProcessOperationOutMaterDo.getThickrule(), apsProcessOperationOutMaterDo.getThickchange(), apsProcessOperationOutMaterDo.getThickness());
                         apsProcessOperationOutMaterDo.setThickness(tval);
@@ -497,7 +493,7 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                         String outputfinishproduct = "";
                         if (StringUtils.isBlank(apsCraftRouteStepDo.getNextstepid())) {
                             //如果没有后道工序作业,则自动填入=“{输出物料的输入物料描述} * {计划输出卷数 - 计划备料卷数}卷”
-                            outputfinishproduct = getInMeterInfo(outProducttype, outMeter, outMetalstate, tval, wval, lval) + apsProcessOperationOutMaterDo.getSinglerollweight()+UNIT_MAP.getOrDefault(apsProcessOperationOutMaterDo.getNumunit(), "")+ " * " + blanckdata.getInt("ROLLNUM") + "卷";
+                            outputfinishproduct = getInMeterInfo(outProducttype, outMeter, outMetalstate, tval, wval, lval) + apsProcessOperationOutMaterDo.getSinglerollweight() + UNIT_MAP.getOrDefault(apsProcessOperationOutMaterDo.getNumunit(), "") + " * " + blanckdata.getInt("ROLLNUM") + "卷";
                             apsProcessOperationOutMaterDo.setPlanprodrollnum(blanckdata.getInt("ROLLNUM"));
                         } else {
                             apsProcessOperationOutMaterDo.setPlanprodrollnum(0);
@@ -585,13 +581,17 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
     @Override
     @Transactional
     public R chooseHistoryRoute(Map<String, Object> params) {
-        String oldblankid = params.get("OLDBLANKID").toString();
+        JSONObject blanckdata = new JSONObject(params.get("BLANKDATA"));
         String newblankid = params.get("NEWBLANKID").toString();
         String craftrouteid = params.get("CRAFTROUTEID").toString();
 
+        // 获取排程参数设置
+        List<ApsScheduleConfigDo> apsConfigs = apsScheduleConfigService.list();
+        BigDecimal aluminumdensity = apsConfigs.get(0).getAluminumdensity();
+
         //先清空之前的相关数据
         Map<String, Object> blanckMap = new HashMap<>();
-        blanckMap.put("BLANKID", oldblankid);
+        blanckMap.put("BLANKID", blanckdata.getStr("ID"));
         clearCraftRoute(blanckMap);
 
         //选择新的坯料计划的工序作业、可选设备、输出、思维导图
@@ -621,7 +621,7 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
         SysMindMappingDo sysMindMappingDo = BeanUtil.toBean(sysMindMappingDos.get(0), SysMindMappingDo.class);
         String mindStrId = SecurityUtil.getUUID();
         sysMindMappingDo.setId(mindStrId);
-        sysMindMappingDo.setBsid(oldblankid);
+        sysMindMappingDo.setBsid(blanckdata.getStr("ID"));
         sysMindMappingDo.setBstable("aps_process_operation");
         sysMindMappingDoList.add(sysMindMappingDo);
 
@@ -641,14 +641,50 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                         processId = SecurityUtil.getUUID();
                         processOperationDo = BeanUtil.toBean(apsProcessOperationDo1, ApsProcessOperationDo.class);
                         processOperationDo.setId(processId);
-                        processOperationDo.setBlankid(oldblankid);
+                        processOperationDo.setBlankid(blanckdata.getStr("ID"));
                         processOperationDo.setNextprocessid(null);
 
                         //前道工序输出
                         List<PreviousProcessVo> processVo = newProcessIds.stream().filter(pro -> pro.getPreviousstepid().equals(apsProcessOperationDo1.getPreviousprocessid())).collect(Collectors.toList());
                         List<ApsProcessOperationOutMaterDo> outMaterDos = processVo.get(0).getApsProcessOperationOutMaterDos().stream().filter(out -> out.getRoption().equals(apsProcessOperationDo1.getPlaninputid())).collect(Collectors.toList());
+                        ApsProcessOperationOutMaterDo outMaterDo = outMaterDos.get(0);
                         processOperationDo.setPreviousprocessid(processVo.get(0).getProcessId());
-                        processOperationDo.setPlaninputid(outMaterDos.get(0).getId());
+                        processOperationDo.setPlaninputid(outMaterDo.getId());
+                        String meterInput = getInMeterInfo(outMaterDo.getProducttype(), outMaterDo.getMetal(), outMaterDo.getMetalstate(), outMaterDo.getThickness(), outMaterDo.getProwidth(), outMaterDo.getProlength());
+                        processOperationDo.setPlaninput(meterInput + outMaterDo.getSinglerollweight() + UNIT_MAP.getOrDefault(outMaterDo.getNumunit(), ""));
+                        processOperationDo.setProducttypeid(outMaterDo.getProducttypeid());
+                        processOperationDo.setProducttype(outMaterDo.getProducttype());
+                        processOperationDo.setMetal(outMaterDo.getMetal());
+                        processOperationDo.setMetalstate(outMaterDo.getMetalstate());
+                        processOperationDo.setThickness(outMaterDo.getThickness());
+                        processOperationDo.setProwidth(outMaterDo.getProwidth());
+                        processOperationDo.setProlength(outMaterDo.getProlength());
+                        processOperationDo.setSinglerollweight(outMaterDo.getSinglerollweight());
+                        Integer planInRall = outMaterDo.getPlanrollnum() - outMaterDo.getPlanstockrollnum() - outMaterDo.getPlanprodrollnum();
+                        processOperationDo.setPlaninrall(planInRall);
+                        //输入物料ID对应前道工序作业输出物料只有一个后道工序作业),则不可编辑,自动计算=计划输入卷数
+                        if (apsProcessOperationDos1.size() == 1) {
+                            processOperationDo.setPlanprocessrall(processVo.get(0).getPlanprocessrall());
+                            if (!processOperationDo.getProcessway().equals("合并加工")) {
+                                BigDecimal loadingmin = processOperationDo.getLoadingmin() == null ? BigDecimal.valueOf(0) : processOperationDo.getLoadingmin();
+                                BigDecimal cuttingmin = processOperationDo.getCuttingmin() == null ? BigDecimal.valueOf(0) : processOperationDo.getCuttingmin();
+                                if (processOperationDo.getTimeway().equals("10")) {
+                                    //如果计时方式=按设备运转速度计时,计划作业时长=计划加工卷数*(上料时长+下料时长+(输入单卷重/(输入物料宽度/1000*输入物料厚度/1000*设备运转速度/1000*铝的密度)))
+                                    BigDecimal prowidth = processOperationDo.getProwidth() == null ? BigDecimal.valueOf(1) : processOperationDo.getProwidth();
+                                    BigDecimal thickness = processOperationDo.getThickness() == null ? BigDecimal.valueOf(1) : processOperationDo.getThickness();
+                                    BigDecimal workspeed = processOperationDo.getWorkspeed() == null ? BigDecimal.valueOf(1) : processOperationDo.getWorkspeed();
+                                    BigDecimal onceprocessmin = new BigDecimal(df.format(loadingmin.add(cuttingmin).add(processOperationDo.getSinglerollweight().multiply(BigDecimal.valueOf(1000000000)).divide(prowidth.multiply(thickness).multiply(workspeed).multiply(aluminumdensity), 2, BigDecimal.ROUND_HALF_UP))));
+                                    processOperationDo.setOnceprocessmin(onceprocessmin);
+                                    processOperationDo.setProcesstotaltime(new BigDecimal(df.format(BigDecimal.valueOf(processOperationDo.getPlanprocessrall()).multiply(onceprocessmin))));
+                                } else if (processOperationDo.getTimeway().equals("40")) {
+                                    //如果计时方式=按单次加工时长计时,计划作业时长=(上料时长+下料时长+单次加工时长)*计划加工卷数
+                                    processOperationDo.setProcesstotaltime(new BigDecimal(df.format(loadingmin.add(cuttingmin).add(processOperationDo.getOnceprocessmin()).multiply(BigDecimal.valueOf(processOperationDo.getPlanprocessrall())))));
+                                }
+                            }
+                        } else {
+                            processOperationDo.setPlanprocessrall(0);
+                        }
+                        processOperationDo.setUnfinishroll(planInRall - processOperationDo.getCheckoutroll());
 
                         //更新前道工序的后道工序
                         ApsProcessOperationDo aDo = apsProcessOperationDoList.stream().filter(qtr -> processVo.get(0).getProcessId().equals(qtr.getId())).findAny().orElse(null);
@@ -658,23 +694,77 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                             aDo.setNextprocessid(aDo.getNextprocessid() + "," + processId);
                         }
 
+                        //本道工序信息
+                        previousProcessVo.setProcessId(processId);
+                        previousProcessVo.setPreviousstepid(apsProcessOperationDo1.getId());
+                        previousProcessVo.setPlanprocessrall(processOperationDo.getPlanprocessrall());
+
                         //本道工序的输出
                         List<ApsProcessOperationOutMaterDo> apsProcessOperationOutMaterDos1 = apsProcessOperationOutMaterDos.stream().filter(omd -> apsProcessOperationDo1.getId().equals(omd.getMainid())).collect(Collectors.toList());
                         if (apsProcessOperationOutMaterDos1.size() == 0) {
                             return R.error("工艺步骤" + apsProcessOperationDo1.getProcessname() + "没输出");
                         }
+                        List<String> planoutputList = new ArrayList<>();
                         for (ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo : apsProcessOperationOutMaterDos1) {
                             ApsProcessOperationOutMaterDo processOperationOutMaterDo = BeanUtil.toBean(apsProcessOperationOutMaterDo, ApsProcessOperationOutMaterDo.class);
                             processOperationOutMaterDo.setRoption(apsProcessOperationOutMaterDo.getId());
                             processOperationOutMaterDo.setId(SecurityUtil.getUUID());
+
+                            String outProducttype = apsProcessOperationOutMaterDo.getProducttype();
+                            if (apsProcessOperationOutMaterDo.getProducttyperule().equals("不变")) {
+                                outProducttype = outMaterDo.getProducttype() == null ? "" : outMaterDo.getProducttype();
+                                processOperationOutMaterDo.setProducttypeid(outMaterDo.getProducttypeid() == null ? "" : outMaterDo.getProducttypeid());
+                                processOperationOutMaterDo.setProducttype(outProducttype);
+                            }
+                            String outMeter = apsProcessOperationOutMaterDo.getMetal();
+                            if (apsProcessOperationOutMaterDo.getMetalrule().equals("不变")) {
+                                outMeter = outMaterDo.getMetal() == null ? "" : outMaterDo.getMetal();
+                                processOperationOutMaterDo.setMetal(outMeter);
+                            }
+                            String outMetalstate = apsProcessOperationOutMaterDo.getMetalstate();
+                            if (apsProcessOperationOutMaterDo.getMetalstaterule().equals("不变")) {
+                                outMetalstate = outMaterDo.getMetalstate() == null ? "" : outMaterDo.getMetalstate();
+                                processOperationOutMaterDo.setMetalstate(outMetalstate);
+                            }
+                            BigDecimal tval = changeSize(outMaterDo.getThickness(), apsProcessOperationOutMaterDo.getThickrule(), apsProcessOperationOutMaterDo.getThickchange(), apsProcessOperationOutMaterDo.getThickness());
+                            processOperationOutMaterDo.setThickness(tval);
+                            BigDecimal wval = changeSize(outMaterDo.getProwidth(), apsProcessOperationOutMaterDo.getWidthrule(), apsProcessOperationOutMaterDo.getWidthchange(), apsProcessOperationOutMaterDo.getProwidth());
+                            processOperationOutMaterDo.setProwidth(wval);
+                            BigDecimal lval = changeSize(outMaterDo.getProlength(), apsProcessOperationOutMaterDo.getLengthrule(), apsProcessOperationOutMaterDo.getLengthchange(), apsProcessOperationOutMaterDo.getProlength());
+                            processOperationOutMaterDo.setProlength(lval);
+                            processOperationOutMaterDo.setPlanrollnum(processOperationDo.getPlanprocessrall() * apsProcessOperationOutMaterDo.getOutval());
+                            //输入单卷重*输出宽度/输入宽度
+                            String singlerollweight = df.format(outMaterDo.getSinglerollweight().multiply(wval == null ? BigDecimal.valueOf(1) : wval).divide(outMaterDo.getProwidth() == null ? BigDecimal.valueOf(1) : outMaterDo.getProwidth(), 3, BigDecimal.ROUND_HALF_UP));
+                            processOperationOutMaterDo.setSinglerollweight(new BigDecimal(singlerollweight));
+                            processOperationOutMaterDo.setNumunit(blanckdata.getStr("NUMBERUNIT"));
+                            //没有后道工序作业,计划成品卷数=计划输出卷数-计划备料卷数
+                            if (StringUtils.isBlank(apsProcessOperationDo.getNextprocessid())) {
+                                processOperationOutMaterDo.setPlanprodrollnum(processOperationDo.getPlanprocessrall());
+                            } else {
+                                processOperationOutMaterDo.setPlanprodrollnum(0);
+                            }
+                            //输出物料
+                            String outputMeter = getOutMeterInfo(outProducttype, outMeter, outMetalstate, tval, wval, lval, processOperationOutMaterDo.getThickoffset(), processOperationOutMaterDo.getWidthoffset(), processOperationOutMaterDo.getLengthoffset()) + singlerollweight + UNIT_MAP.getOrDefault(blanckdata.getStr("NUMBERUNIT"), "");
+                            processOperationOutMaterDo.setOutputmaterial(outputMeter + "*" + (planInRall * processOperationOutMaterDo.getOutval()) + "卷");
+                            planoutputList.add(outputMeter + "*" + (planInRall * processOperationOutMaterDo.getOutval()) + "卷");
+                            String outputfinishproduct = "";
+                            Integer planprodrollnum = 0;
+                            if (StringUtils.isBlank(apsProcessOperationDo.getNextprocessid())) {
+                                planprodrollnum = (planInRall * processOperationOutMaterDo.getOutval()) - processOperationOutMaterDo.getPlanstockrollnum();
+                                //没有后道工序作业,计划成品卷数=计划输出卷数-计划备料卷数
+                                processOperationOutMaterDo.setPlanprodrollnum(processOperationOutMaterDo.getPlanrollnum() - processOperationOutMaterDo.getPlanstockrollnum());
+                            } else {
+                                planprodrollnum = processOperationOutMaterDo.getPlanprodrollnum();
+                            }
+                            if (planprodrollnum > 0) {
+                                outputfinishproduct = getInMeterInfo(outProducttype, outMeter, outMetalstate, tval, wval, lval) + "* " + planprodrollnum + "卷";
+                            }
+                            processOperationOutMaterDo.setOutputfinishproduct(outputfinishproduct);
+                            processOperationOutMaterDo.setOutmaterrequest(outputMeter);
                             processOperationOutMaterDo.setMainid(processId);
-                            processOperationOutMaterDo.setBlankid(oldblankid);
+                            processOperationOutMaterDo.setBlankid(blanckdata.getStr("ID"));
                             apsProcessOperationOutMaterDoList.add(processOperationOutMaterDo);
                         }
-
-                        //本道工序信息
-                        previousProcessVo.setProcessId(processId);
-                        previousProcessVo.setPreviousstepid(apsProcessOperationDo1.getId());
                         previousProcessVo.setApsProcessOperationOutMaterDos(apsProcessOperationOutMaterDoList);
 
                         //本道工序的可选设备
@@ -683,7 +773,7 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                             ApsProcessOperationEquDo processOperationEquDo = BeanUtil.toBean(apsProcessOperationEquDo, ApsProcessOperationEquDo.class);
                             processOperationEquDo.setId(SecurityUtil.getUUID());
                             processOperationEquDo.setMainid(processId);
-                            processOperationEquDo.setBlankid(oldblankid);
+                            processOperationEquDo.setBlankid(blanckdata.getStr("ID"));
                             apsProcessOperationEquDoList.add(processOperationEquDo);
                         }
 
@@ -692,7 +782,7 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                         SysMindMappingDo sysMindMappingDo1 = sysMindMappingDos1.get(0);
                         sysMindMappingDo1.setId(processId);
                         sysMindMappingDo1.setParentid(processVo.get(0).getProcessId());
-                        sysMindMappingDo1.setBsid(oldblankid);
+                        sysMindMappingDo1.setBsid(blanckdata.getStr("ID"));
                         sysMindMappingDo1.setBstable("aps_process_operation");
                         JSONObject jsonObject = new JSONObject();
                         jsonObject.putOpt("craftStepId", apsProcessOperationDo1.getId());
@@ -700,6 +790,19 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                         sysMindMappingDoList.add(sysMindMappingDo1);
 
                         newProcessIds.add(previousProcessVo);
+
+                        StringBuffer planoutsb = new StringBuffer();
+                        Collections.sort(planoutputList);
+                        Integer outIndex = 1;
+                        if (planoutputList.size() == 1) {
+                            planoutsb.append("[1]" + planoutputList.get(0));
+                        } else {
+                            for (String planout : planoutputList) {
+                                planoutsb.append("[" + outIndex + "]" + planout + "/n");
+                                outIndex++;
+                            }
+                        }
+                        processOperationDo.setPlanoutput(planoutsb.toString());
                         apsProcessOperationDoList.add(processOperationDo);
 
                         overProcessIds.add(apsProcessOperationDo1.getId());
@@ -708,26 +811,85 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                     previousProcessVo = new PreviousProcessVo();
                     //首道工序
                     processId = SecurityUtil.getUUID();
+                    String meterInput = getInMeterInfo(blanckdata.getStr("PRODUCTTYPE"), blanckdata.getStr("ALLOY"), blanckdata.getStr("ALLOYSTATUS"), blanckdata.getBigDecimal("THICKNESS"), blanckdata.getBigDecimal("PROWIDTH"), blanckdata.getBigDecimal("PROLENGTH"));
                     processOperationDo = BeanUtil.toBean(apsProcessOperationDo, ApsProcessOperationDo.class);
                     processOperationDo.setId(processId);
-                    processOperationDo.setBlankid(oldblankid);
+                    processOperationDo.setPlaninput(meterInput + blanckdata.getStr("SINGLEROLLWEIGHT") + UNIT_MAP.getOrDefault(blanckdata.getStr("NUMBERUNIT"), ""));
+                    processOperationDo.setMetalstate(blanckdata.getStr("ALLOYSTATUS"));
+                    processOperationDo.setProwidth(blanckdata.getBigDecimal("PROWIDTH"));
+                    processOperationDo.setProlength(blanckdata.getBigDecimal("PROLENGTH"));
+                    processOperationDo.setSinglerollweight(blanckdata.getBigDecimal("SINGLEROLLWEIGHT"));
+                    processOperationDo.setPlaninrall(blanckdata.getInt("ROLLNUM"));
+                    processOperationDo.setPlanprocessrall(blanckdata.getInt("ROLLNUM"));
+                    processOperationDo.setUnfinishroll(blanckdata.getInt("ROLLNUM"));
+                    processOperationDo.setBlankid(blanckdata.getStr("ID"));
                     processOperationDo.setNextprocessid(null);
 
+                    if (!processOperationDo.getProcessway().equals("合并加工")) {
+                        BigDecimal loadingmin = processOperationDo.getLoadingmin() == null ? BigDecimal.valueOf(0) : processOperationDo.getLoadingmin();
+                        BigDecimal cuttingmin = processOperationDo.getCuttingmin() == null ? BigDecimal.valueOf(0) : processOperationDo.getCuttingmin();
+                        if (processOperationDo.getTimeway().equals("10")) {
+                            //如果计时方式=按设备运转速度计时,计划作业时长=计划加工卷数*(上料时长+下料时长+(输入单卷重/(输入物料宽度/1000*输入物料厚度/1000*设备运转速度/1000*铝的密度)))
+                            BigDecimal prowidth = processOperationDo.getProwidth() == null ? BigDecimal.valueOf(1) : processOperationDo.getProwidth();
+                            BigDecimal thickness = processOperationDo.getThickness() == null ? BigDecimal.valueOf(1) : processOperationDo.getThickness();
+                            BigDecimal workspeed = processOperationDo.getWorkspeed() == null ? BigDecimal.valueOf(1) : processOperationDo.getWorkspeed();
+                            BigDecimal onceprocessmin = new BigDecimal(df.format(loadingmin.add(cuttingmin).add(processOperationDo.getSinglerollweight().multiply(BigDecimal.valueOf(1000000000)).divide(prowidth.multiply(thickness).multiply(workspeed).multiply(aluminumdensity), 2, BigDecimal.ROUND_HALF_UP))));
+                            processOperationDo.setOnceprocessmin(onceprocessmin);
+                            processOperationDo.setProcesstotaltime(new BigDecimal(df.format(BigDecimal.valueOf(processOperationDo.getPlanprocessrall()).multiply(onceprocessmin))));
+                        } else if (processOperationDo.getTimeway().equals("40")) {
+                            //如果计时方式=按单次加工时长计时,计划作业时长=(上料时长+下料时长+单次加工时长)*计划加工卷数
+                            processOperationDo.setProcesstotaltime(new BigDecimal(df.format(loadingmin.add(cuttingmin).add(processOperationDo.getOnceprocessmin()).multiply(BigDecimal.valueOf(processOperationDo.getPlanprocessrall())))));
+                        }
+                    }
+
                     //本道工序信息
                     previousProcessVo.setProcessId(processId);
                     previousProcessVo.setPreviousstepid(apsProcessOperationDo.getId());
+                    previousProcessVo.setPlanprocessrall(blanckdata.getInt("ROLLNUM"));
 
                     //本道工序的输出
                     List<ApsProcessOperationOutMaterDo> apsProcessOperationOutMaterDos1 = apsProcessOperationOutMaterDos.stream().filter(omd -> apsProcessOperationDo.getId().equals(omd.getMainid())).collect(Collectors.toList());
                     if (apsProcessOperationOutMaterDos1.size() == 0) {
                         return R.error("工艺步骤" + apsProcessOperationDo.getProcessname() + "没输出");
                     }
+                    List<String> planoutputList = new ArrayList<>();
                     for (ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo : apsProcessOperationOutMaterDos1) {
                         ApsProcessOperationOutMaterDo processOperationOutMaterDo = BeanUtil.toBean(apsProcessOperationOutMaterDo, ApsProcessOperationOutMaterDo.class);
-                        processOperationOutMaterDo.setRoption(apsProcessOperationOutMaterDo.getId());
                         processOperationOutMaterDo.setId(SecurityUtil.getUUID());
+                        processOperationOutMaterDo.setRoption(apsProcessOperationOutMaterDo.getId());
+                        String outProducttype = apsProcessOperationOutMaterDo.getProducttype();
+                        if (apsProcessOperationOutMaterDo.getProducttyperule().equals("不变")) {
+                            outProducttype = blanckdata.getStr("PRODUCTTYPE") == null ? "" : blanckdata.getStr("PRODUCTTYPE");
+                            processOperationOutMaterDo.setProducttypeid(blanckdata.getStr("PRODUCTTYPEID") == null ? "" : blanckdata.getStr("PRODUCTTYPEID"));
+                            processOperationOutMaterDo.setProducttype(outProducttype);
+                        }
+                        String outMeter = apsProcessOperationOutMaterDo.getMetal();
+                        if (apsProcessOperationOutMaterDo.getMetalrule().equals("不变")) {
+                            outMeter = blanckdata.getStr("ALLOY") == null ? "" : blanckdata.getStr("ALLOY");
+                            processOperationOutMaterDo.setMetal(outMeter);
+                        }
+                        String outMetalstate = apsProcessOperationOutMaterDo.getMetalstate();
+                        if (apsProcessOperationOutMaterDo.getMetalstaterule().equals("不变")) {
+                            outMetalstate = blanckdata.getStr("ALLOYSTATUS") == null ? "" : blanckdata.getStr("ALLOYSTATUS");
+                            processOperationOutMaterDo.setMetalstate(outMetalstate);
+                        }
+                        BigDecimal tval = changeSize(blanckdata.getBigDecimal("THICKNESS"), apsProcessOperationOutMaterDo.getThickrule(), apsProcessOperationOutMaterDo.getThickchange(), apsProcessOperationOutMaterDo.getThickness());
+                        processOperationOutMaterDo.setThickness(tval);
+                        BigDecimal wval = changeSize(blanckdata.getBigDecimal("PROWIDTH"), apsProcessOperationOutMaterDo.getWidthrule(), apsProcessOperationOutMaterDo.getWidthchange(), apsProcessOperationOutMaterDo.getProwidth());
+                        processOperationOutMaterDo.setProwidth(wval);
+                        BigDecimal lval = changeSize(blanckdata.getBigDecimal("PROLENGTH"), apsProcessOperationOutMaterDo.getLengthrule(), apsProcessOperationOutMaterDo.getLengthchange(), apsProcessOperationOutMaterDo.getProlength());
+                        processOperationOutMaterDo.setProlength(lval);
+                        processOperationOutMaterDo.setPlanrollnum(blanckdata.getInt("ROLLNUM"));
+                        //输入单卷重*输出宽度/输入宽度
+                        String singlerollweight = df.format(blanckdata.getBigDecimal("SINGLEROLLWEIGHT").multiply(wval == null ? BigDecimal.valueOf(1) : wval).divide(blanckdata.getBigDecimal("PROWIDTH") == null ? BigDecimal.valueOf(1) : blanckdata.getBigDecimal("PROWIDTH"), 3, BigDecimal.ROUND_HALF_UP));
+                        processOperationOutMaterDo.setSinglerollweight(new BigDecimal(singlerollweight));
+                        processOperationOutMaterDo.setNumunit(blanckdata.getStr("NUMBERUNIT"));
+                        //输出物料
+                        String outputMeter = getOutMeterInfo(outProducttype, outMeter, outMetalstate, tval, wval, lval, apsProcessOperationOutMaterDo.getThickoffset(), apsProcessOperationOutMaterDo.getWidthoffset(), apsProcessOperationOutMaterDo.getLengthoffset()) + singlerollweight + UNIT_MAP.getOrDefault(blanckdata.getStr("NUMBERUNIT"), "");
+                        processOperationOutMaterDo.setOutputmaterial(outputMeter + "*" + blanckdata.getInt("ROLLNUM") + "卷");
+                        planoutputList.add(outputMeter + "*" + blanckdata.getInt("ROLLNUM") + "卷");
                         processOperationOutMaterDo.setMainid(processId);
-                        processOperationOutMaterDo.setBlankid(oldblankid);
+                        processOperationOutMaterDo.setBlankid(blanckdata.getStr("ID"));
                         apsProcessOperationOutMaterDoList.add(processOperationOutMaterDo);
                     }
                     previousProcessVo.setApsProcessOperationOutMaterDos(apsProcessOperationOutMaterDoList);
@@ -738,7 +900,7 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                         ApsProcessOperationEquDo processOperationEquDo = BeanUtil.toBean(apsProcessOperationEquDo, ApsProcessOperationEquDo.class);
                         processOperationEquDo.setId(SecurityUtil.getUUID());
                         processOperationEquDo.setMainid(processId);
-                        processOperationEquDo.setBlankid(oldblankid);
+                        processOperationEquDo.setBlankid(blanckdata.getStr("ID"));
                         apsProcessOperationEquDoList.add(processOperationEquDo);
                     }
 
@@ -747,7 +909,7 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                     SysMindMappingDo sysMindMappingDo1 = sysMindMappingDos1.get(0);
                     sysMindMappingDo1.setId(processId);
                     sysMindMappingDo1.setParentid(mindStrId);
-                    sysMindMappingDo1.setBsid(oldblankid);
+                    sysMindMappingDo1.setBsid(blanckdata.getStr("ID"));
                     sysMindMappingDo1.setBstable("aps_process_operation");
                     JSONObject jsonObject = new JSONObject();
                     jsonObject.putOpt("craftStepId", apsProcessOperationDo.getId());
@@ -755,6 +917,19 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                     sysMindMappingDoList.add(sysMindMappingDo1);
 
                     newProcessIds.add(previousProcessVo);
+
+                    StringBuffer planoutsb = new StringBuffer();
+                    Collections.sort(planoutputList);
+                    Integer outIndex = 1;
+                    if (planoutputList.size() == 1) {
+                        planoutsb.append("[1]" + planoutputList.get(0));
+                    } else {
+                        for (String planout : planoutputList) {
+                            planoutsb.append("[" + outIndex + "]" + planout + "/n");
+                            outIndex++;
+                        }
+                    }
+                    processOperationDo.setPlanoutput(planoutsb.toString());
                     apsProcessOperationDoList.add(processOperationDo);
                 }
             }
@@ -766,7 +941,7 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
         boolean bool4 = sysMindMappingService.saveOrUpdateBatch(sysMindMappingDoList);
         if (bool1 && bool2 && bool3 && bool4) {
             //更新坯料计划的所选工艺路线
-            apsBlankOrderDao.upCraftrouteId(oldblankid, craftrouteid);
+            apsBlankOrderDao.upCraftrouteId(blanckdata.getStr("ID"), craftrouteid);
             return R.ok();
         } else {
             return R.error();
@@ -1332,7 +1507,7 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
         String outputfinishproduct = "";
         if (StringUtils.isBlank(apsProcessOperationDo.getNextprocessid())) {
             //如果没有后道工序作业,则自动填入=“{输出物料的输入物料描述} * {计划输出卷数 - 计划备料卷数}卷”
-            outputfinishproduct = getInMeterInfo(apsProcessOperationOutMaterDo.getProducttype(), apsProcessOperationOutMaterDo.getMetal(), apsProcessOperationOutMaterDo.getMetalstate(), apsProcessOperationOutMaterDo.getThickness(), apsProcessOperationOutMaterDo.getProwidth(), apsProcessOperationOutMaterDo.getProlength())+ apsProcessOperationOutMaterDo.getSinglerollweight()+UNIT_MAP.getOrDefault(apsProcessOperationOutMaterDo.getNumunit(), "")+ " * " + rollnum + "卷";
+            outputfinishproduct = getInMeterInfo(apsProcessOperationOutMaterDo.getProducttype(), apsProcessOperationOutMaterDo.getMetal(), apsProcessOperationOutMaterDo.getMetalstate(), apsProcessOperationOutMaterDo.getThickness(), apsProcessOperationOutMaterDo.getProwidth(), apsProcessOperationOutMaterDo.getProlength()) + apsProcessOperationOutMaterDo.getSinglerollweight() + UNIT_MAP.getOrDefault(apsProcessOperationOutMaterDo.getNumunit(), "") + " * " + rollnum + "卷";
             apsProcessOperationOutMaterDo.setPlanprodrollnum(rollnum);
         }
         apsProcessOperationOutMaterDo.setOutputfinishproduct(outputfinishproduct);

+ 13 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsBlankOrderDo.java

@@ -219,4 +219,17 @@ public class ApsBlankOrderDo extends BaseDo {
      */
     @TableField("BLANKOUTMATERTYPE")
     private String blankoutmatertype;
+
+
+    /**
+     * 坯料输出物料规格
+     */
+    @TableField("BLANKOUTMATERSPECIFICATION")
+    private String blankoutmaterspecification;
+
+    /**
+     * 工艺输出物料规格
+     */
+    @TableField("PROCESSOUTMATERSPECIFICATION")
+    private String processoutmaterspecification;
 }

+ 6 - 1
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsProcessOutputProductDo.java

@@ -104,7 +104,7 @@ public class ApsProcessOutputProductDo extends BaseDo {
     private Integer planoutputrollcount;
 
     /**
-     * 计划输出订单卷数
+     * 输出卷数
      */
     private Integer planoutputorderroll;
 
@@ -398,5 +398,10 @@ public class ApsProcessOutputProductDo extends BaseDo {
      */
     private String outmatertype;
 
+    /**
+     * 输出物料规格
+     */
+    private String outmaterspecification;
+
     private static final long serialVersionUID = 1L;
 }