Преглед изворни кода

Merge remote-tracking branch 'origin/mode-min-unit' into mode-min-unit

fangpy пре 1 година
родитељ
комит
d44dc7e4bb

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

@@ -6,6 +6,7 @@ import com.rongwei.bsentity.domain.ApsParameterDo;
 import com.rongwei.bsentity.domain.ApsProcessOperationProcessEquDo;
 import com.rongwei.bsentity.domain.ApsReportRecordsDo;
 import com.rongwei.bsentity.vo.OrganizationCodeAndDeviceCodeVo;
+import com.rongwei.bsentity.vo.ProcessOutputAndInputNumber;
 import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -60,8 +61,6 @@ public interface ApsReportRecordsDao extends BaseMapper<ApsReportRecordsDo> {
 
     @Select("select * from aps_process_operation_process_equ where DELETED = 0 AND ID != #{id} AND PROCESSDEVICEID = #{processdeviceid} AND PLANSTARTDATE = #{planstartdate} AND WAITREPORTID is not null AND WAITREPORTID != ''")
     List<ApsProcessOperationProcessEquDo> selectOtherMergeProcessStarting(@Param("id") String id, @Param("processdeviceid") String processdeviceid, @Param("planstartdate") Date planstartdate);
-}
-
-
-
 
+    List<ProcessOutputAndInputNumber> selectInputAndOutputNumByProcessId(@Param("processIds")List<String> processIds);
+}

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

@@ -182,19 +182,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             logger.error("所选坯料计划:{}存在冲突", blankIds);
             return R.error("请先解决排程冲突在发布");
         }
-        // 判断是否存在已发布的工序作业
-        List<ApsBlankOrderDo> apsBlankOrderDos = this.baseMapper.selectBatchIds(blankIds);
-        List<String> searchCondition = new ArrayList<String>() {{
-            add("30");
-            add("20");
-            add("10");
-        }};
-        List<ApsBlankOrderDo> collect1 = apsBlankOrderDos.stream().filter(info -> !searchCondition.contains(info.getProductstatus())).collect(Collectors.toList());
-        if (!collect1.isEmpty()) {
-            logger.error("存在已开工的坯料计划:{}", collect1);
-            return R.error("存在已开工的坯料计划");
-        }
-        // 如果 订单排程交货期>承诺交货期 抛出异常信息
+       // 如果 订单排程交货期>承诺交货期 抛出异常信息
         List<ApsProductionOrderDo> dataByBlankId = apsProcessOperationDao.getDataByBlankId(blankIds);
         if (!dataByBlankId.isEmpty()) {
             String collect = dataByBlankId.stream()
@@ -211,38 +199,57 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             log.error("当前坯料计划不存在工序作业明细");
             return R.error("无法根据坯料计划找到工序作业明细");
         }
-        // 判断是否存在强制冲突不为空的数据
+         // 判断是否存在强制冲突不为空的数据
         boolean b = processOperationProcessEquDos.stream().anyMatch(info -> StringUtils.isNotBlank(info.getConflictdes()));
         if (b) {
             log.error("存在强制冲突无法发布");
             return R.error("请先解决冲突在发布");
         }
-        // 更新坯料计划的生产状态为已发布
-        this.update(new LambdaUpdateWrapper<ApsBlankOrderDo>().in(ApsBlankOrderDo::getId, blankIds)
-                .set(ApsBlankOrderDo::getProductstatus, "30")
-                .set(ApsBlankOrderDo::getSchedulingstatus, PUBLISHED)
-                .set(ApsBlankOrderDo::getLockmark, LOCKMARK_Y));
-        // 更新坯料计划对应工序作业的状态为待开工
-        apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
-                .in(ApsProcessOperationDo::getBlankid, blankIds)
-                .set(ApsProcessOperationDo::getProcessstatus, "30")
-                .set(ApsProcessOperationDo::getLockmark, LOCKMARK_Y)
-                .set(ApsProcessOperationDo::getWorkstatus, JOBSTATUS_TO_BE_START));
-        // 更新坯料计划对应产品明细的生产状态为待开工
-        apsProductDetailDao.updateProductStatusByBlankId(blankIds, "30");
-        // 更新工序作业明细的生产状态为待开工
-        processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
-                .in(ApsProcessOperationProcessEquDo::getId, processOperationProcessEquDos.stream().map(ApsProcessOperationProcessEquDo::getId).collect(Collectors.toList()))
-                .set(ApsProcessOperationProcessEquDo::getLockmark, LOCKMARK_Y)
-                .set(ApsProcessOperationProcessEquDo::getWorkstatus, JOBSTATUS_TO_BE_START)
-        );
-        List<String> collect = apsBlankOrderDos.stream().map(ApsBlankOrderDo::getProductionorderid).distinct().collect(Collectors.toList());
-        // 更新工序作业的状态
-        apsProcessOperationDao.publish(collect);
-        // 更新订单表的生产状态
+        List<String> productionOrderIds = new ArrayList<>();
         blankIds.forEach(blankId -> {
-            processOperationProcessEquService.updateOrder(blankId);
+            // 更新工序作业生产状态
+            apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
+                    .eq(ApsProcessOperationDo::getBlankid, blankId)
+                    .eq(ApsProcessOperationDo::getProcessstatus,TO_BE_PUBLISHED)
+                    .set(ApsProcessOperationDo::getProcessstatus,TO_BE_STARTED)
+                    .set(ApsProcessOperationDo::getLockmark, LOCKMARK_Y));
+            // 工序作业信息
+            List<ApsProcessOperationDo> processOperationDos = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
+                    .eq(ApsProcessOperationDo::getBlankid, blankId).orderByDesc(ApsProcessOperationDo::getProcessstatus));
+            // 坯料计划排程状态
+            String schedulingstatus;
+            // 坯料计划生产状态
+            String producttStatus;
+            if (processOperationDos.get(0).getProcessstatus().equals(TO_BE_PUBLISHED)) {
+                schedulingstatus = SCHEDULSTATUS_TORELEASE;
+                producttStatus = TO_BE_PUBLISHED;
+            } else if (processOperationDos.get(0).getProcessstatus().equals(TO_BE_SCHEDULED)) {
+                schedulingstatus = SCHEDULSTATUS_TOSCHEDULE;
+                producttStatus = TO_BE_SCHEDULED;
+            } else {
+                schedulingstatus = SCHEDULSTATUS_HASRELEASE;
+                List<String> processStatusList = processOperationDos.stream()
+                        .map(ApsProcessOperationDo::getProcessstatus)
+                        .distinct()
+                        .collect(Collectors.toList());
+                if (processOperationDos.get(0).getProcessstatus().equals(TO_BE_STARTED)) {
+                    producttStatus = TO_BE_STARTED;
+                } else if (processStatusList.size() == 1 && processStatusList.get(0).equals(COMPLETED)) {
+                    producttStatus = COMPLETED;
+                } else {
+                    producttStatus = PROCESSING;
+                }
+            }
+            ApsBlankOrderDo blankOrderDo = this.getById(blankId);
+            productionOrderIds.add(blankOrderDo.getProductionorderid());
+            this.update(new LambdaUpdateWrapper<ApsBlankOrderDo>().eq(ApsBlankOrderDo::getId, blankId)
+                    .set(ApsBlankOrderDo::getProductstatus, producttStatus)
+                    .set(ApsBlankOrderDo::getSchedulingstatus, schedulingstatus));
         });
+        // 更新产品明细的生产状态
+        apsProductDetailDao.publishCancel(blankIds);
+        // 更新订单的生产状态
+        apsProcessOperationDao.publishCancel(productionOrderIds);
         // 根据坯料ID 删除 备份数据
         ApsUtils.clearBackup(null);
         return R.ok();
@@ -397,10 +404,10 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             apsProcessOperationDos = new ArrayList<>(apsProcessOperationService.listByIds(processIds));
             //解锁的情况下校验 工序作业对应的生产状态
             if (LOCKMARK_N.equals(lockMark)) {
-                boolean b = apsProcessOperationDos.stream().anyMatch(info -> COMPLETED.equals(info.getProcessstatus()) ||
+                boolean b = apsProcessOperationDos.stream().allMatch(info -> COMPLETED.equals(info.getProcessstatus()) ||
                         PROCESSING.equals(info.getProcessstatus()));
                 if(b){
-                    return R.error("所选工序作业生产状态为加工或已完工,不能锁定");
+                    return R.error("所选作业都已开工,不可以解锁,不能锁定");
                 }
             }
         }

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

@@ -252,22 +252,22 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                             //输入物料ID对应前道工序作业输出物料只有一个后道工序作业),则不可编辑,自动计算=计划输入卷数
                             if (apsCraftRouteStepDoList1.size() == 1) {
                                 apsProcessOperationDo.setPlanprocessrall(processVo.get(0).getPlanprocessrall());
-                                if (!apsProcessOperationDo.getProcessway().equals("合并加工")) {
-                                    BigDecimal loadingmin = apsProcessOperationDo.getLoadingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getLoadingmin();
-                                    BigDecimal cuttingmin = apsProcessOperationDo.getCuttingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getCuttingmin();
-                                    if (apsProcessOperationDo.getTimeway().equals("10")) {
-                                        //如果计时方式=按设备运转速度计时,计划作业时长=计划加工卷数*(上料时长+下料时长+(输入单卷重/(输入物料宽度/1000*输入物料厚度/1000*设备运转速度/1000*铝的密度)))
-                                        BigDecimal prowidth = apsProcessOperationDo.getProwidth() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getProwidth();
-                                        BigDecimal thickness = apsProcessOperationDo.getThickness() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getThickness();
-                                        BigDecimal workspeed = apsProcessOperationDo.getWorkspeed() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getWorkspeed();
-                                        BigDecimal onceprocessmin = new BigDecimal(df.format(loadingmin.add(cuttingmin).add(apsProcessOperationDo.getSinglerollweight().multiply(BigDecimal.valueOf(1000000000)).divide(prowidth.multiply(thickness).multiply(workspeed).multiply(aluminumdensity), 2, BigDecimal.ROUND_HALF_UP))));
-                                        apsProcessOperationDo.setOnceprocessmin(onceprocessmin);
-                                        apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(BigDecimal.valueOf(apsProcessOperationDo.getPlanprocessrall()).multiply(onceprocessmin))));
-                                    } else if (apsProcessOperationDo.getTimeway().equals("40")) {
-                                        //如果计时方式=按单次加工时长计时,计划作业时长=(上料时长+下料时长+单次加工时长)*计划加工卷数
-                                        apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(loadingmin.add(cuttingmin).add(apsProcessOperationDo.getOnceprocessmin()).multiply(BigDecimal.valueOf(apsProcessOperationDo.getPlanprocessrall())))));
-                                    }
+//                                if (!apsProcessOperationDo.getProcessway().equals("合并加工")) {
+                                BigDecimal loadingmin = apsProcessOperationDo.getLoadingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getLoadingmin();
+                                BigDecimal cuttingmin = apsProcessOperationDo.getCuttingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getCuttingmin();
+                                if (apsProcessOperationDo.getTimeway().equals("10")) {
+                                    //如果计时方式=按设备运转速度计时,计划作业时长=计划加工卷数*(上料时长+下料时长+(输入单卷重/(输入物料宽度/1000*输入物料厚度/1000*设备运转速度/1000*铝的密度)))
+                                    BigDecimal prowidth = apsProcessOperationDo.getProwidth() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getProwidth();
+                                    BigDecimal thickness = apsProcessOperationDo.getThickness() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getThickness();
+                                    BigDecimal workspeed = apsProcessOperationDo.getWorkspeed() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getWorkspeed();
+                                    BigDecimal onceprocessmin = new BigDecimal(df.format(loadingmin.add(cuttingmin).add(apsProcessOperationDo.getSinglerollweight().multiply(BigDecimal.valueOf(1000000000)).divide(prowidth.multiply(thickness).multiply(workspeed).multiply(aluminumdensity), 2, BigDecimal.ROUND_HALF_UP))));
+                                    apsProcessOperationDo.setOnceprocessmin(onceprocessmin);
+                                    apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(BigDecimal.valueOf(apsProcessOperationDo.getPlanprocessrall()).multiply(onceprocessmin))));
+                                } else if (apsProcessOperationDo.getTimeway().equals("40")) {
+                                    //如果计时方式=按单次加工时长计时,计划作业时长=(上料时长+下料时长+单次加工时长)*计划加工卷数
+                                    apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(loadingmin.add(cuttingmin).add(apsProcessOperationDo.getOnceprocessmin()).multiply(BigDecimal.valueOf(apsProcessOperationDo.getPlanprocessrall())))));
                                 }
+//                                }
                             } else {
                                 apsProcessOperationDo.setPlanprocessrall(0);
                             }
@@ -420,22 +420,22 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                         apsProcessOperationDo.setBlankid(blanckdata.getStr("ID"));
                         apsProcessOperationDo.setCraftstepid(apsCraftRouteStepDo.getId());
 
-                        if (!apsProcessOperationDo.getProcessway().equals("合并加工")) {
-                            BigDecimal loadingmin = apsProcessOperationDo.getLoadingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getLoadingmin();
-                            BigDecimal cuttingmin = apsProcessOperationDo.getCuttingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getCuttingmin();
-                            if (apsProcessOperationDo.getTimeway().equals("10")) {
-                                //如果计时方式=按设备运转速度计时,计划作业时长=计划加工卷数*(上料时长+下料时长+(输入单卷重/(输入物料宽度/1000*输入物料厚度/1000*设备运转速度/1000*铝的密度)))
-                                BigDecimal prowidth = apsProcessOperationDo.getProwidth() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getProwidth();
-                                BigDecimal thickness = apsProcessOperationDo.getThickness() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getThickness();
-                                BigDecimal workspeed = apsProcessOperationDo.getWorkspeed() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getWorkspeed();
-                                BigDecimal onceprocessmin = new BigDecimal(df.format(loadingmin.add(cuttingmin).add(apsProcessOperationDo.getSinglerollweight().multiply(BigDecimal.valueOf(1000000000)).divide(prowidth.multiply(thickness).multiply(workspeed).multiply(aluminumdensity), 2, BigDecimal.ROUND_HALF_UP))));
-                                apsProcessOperationDo.setOnceprocessmin(onceprocessmin);
-                                apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(BigDecimal.valueOf(apsProcessOperationDo.getPlanprocessrall()).multiply(onceprocessmin))));
-                            } else if (apsProcessOperationDo.getTimeway().equals("40")) {
-                                //如果计时方式=按单次加工时长计时,计划作业时长=(上料时长+下料时长+单次加工时长)*计划加工卷数
-                                apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(loadingmin.add(cuttingmin).add(apsProcessOperationDo.getOnceprocessmin()).multiply(BigDecimal.valueOf(apsProcessOperationDo.getPlanprocessrall())))));
-                            }
+//                        if (!apsProcessOperationDo.getProcessway().equals("合并加工")) {
+                        BigDecimal loadingmin = apsProcessOperationDo.getLoadingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getLoadingmin();
+                        BigDecimal cuttingmin = apsProcessOperationDo.getCuttingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getCuttingmin();
+                        if (apsProcessOperationDo.getTimeway().equals("10")) {
+                            //如果计时方式=按设备运转速度计时,计划作业时长=计划加工卷数*(上料时长+下料时长+(输入单卷重/(输入物料宽度/1000*输入物料厚度/1000*设备运转速度/1000*铝的密度)))
+                            BigDecimal prowidth = apsProcessOperationDo.getProwidth() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getProwidth();
+                            BigDecimal thickness = apsProcessOperationDo.getThickness() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getThickness();
+                            BigDecimal workspeed = apsProcessOperationDo.getWorkspeed() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getWorkspeed();
+                            BigDecimal onceprocessmin = new BigDecimal(df.format(loadingmin.add(cuttingmin).add(apsProcessOperationDo.getSinglerollweight().multiply(BigDecimal.valueOf(1000000000)).divide(prowidth.multiply(thickness).multiply(workspeed).multiply(aluminumdensity), 2, BigDecimal.ROUND_HALF_UP))));
+                            apsProcessOperationDo.setOnceprocessmin(onceprocessmin);
+                            apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(BigDecimal.valueOf(apsProcessOperationDo.getPlanprocessrall()).multiply(onceprocessmin))));
+                        } else if (apsProcessOperationDo.getTimeway().equals("40")) {
+                            //如果计时方式=按单次加工时长计时,计划作业时长=(上料时长+下料时长+单次加工时长)*计划加工卷数
+                            apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(loadingmin.add(cuttingmin).add(apsProcessOperationDo.getOnceprocessmin()).multiply(BigDecimal.valueOf(apsProcessOperationDo.getPlanprocessrall())))));
                         }
+//                        }
 
                         //本道工序信息
                         previousProcessVo.setProcessId(processId);
@@ -683,22 +683,22 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                         //输入物料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())))));
-                                }
+//                            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);
                         }
@@ -844,22 +844,22 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                     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())))));
-                        }
+//                    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);
@@ -1216,22 +1216,22 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                     //输入物料ID对应前道工序作业输出物料只有一个后道工序作业),则不可编辑,自动计算=计划输入卷数
                     if (apsProcessOperationDos.size() == 1) {
                         apsProcessOperationDo.setPlanprocessrall(planinrall);
-                        if (!apsProcessOperationDo.getProcessway().equals("合并加工")) {
-                            BigDecimal loadingmin = apsProcessOperationDo.getLoadingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getLoadingmin();
-                            BigDecimal cuttingmin = apsProcessOperationDo.getCuttingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getCuttingmin();
-                            if (apsProcessOperationDo.getTimeway().equals("10")) {
-                                //如果计时方式=按设备运转速度计时,计划作业时长=计划加工卷数*(上料时长+下料时长+(输入单卷重/(输入物料宽度/1000*输入物料厚度/1000*设备运转速度/1000*铝的密度)))
-                                BigDecimal prowidth = apsProcessOperationDo.getProwidth() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getProwidth();
-                                BigDecimal thickness = apsProcessOperationDo.getThickness() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getThickness();
-                                BigDecimal workspeed = apsProcessOperationDo.getWorkspeed() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getWorkspeed();
-                                BigDecimal onceprocessmin = new BigDecimal(df.format(loadingmin.add(cuttingmin).add(apsProcessOperationDo.getSinglerollweight().multiply(BigDecimal.valueOf(1000000000)).divide(prowidth.multiply(thickness).multiply(workspeed).multiply(aluminumdensity), 2, BigDecimal.ROUND_HALF_UP))));
-                                apsProcessOperationDo.setOnceprocessmin(onceprocessmin);
-                                apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(BigDecimal.valueOf(apsProcessOperationDo.getPlanprocessrall()).multiply(onceprocessmin))));
-                            } else if (apsProcessOperationDo.getTimeway().equals("40")) {
-                                //如果计时方式=按单次加工时长计时,计划作业时长=(上料时长+下料时长+单次加工时长)*计划加工卷数
-                                apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(loadingmin.add(cuttingmin).add(apsProcessOperationDo.getOnceprocessmin()).multiply(BigDecimal.valueOf(apsProcessOperationDo.getPlanprocessrall())))));
-                            }
+//                        if (!apsProcessOperationDo.getProcessway().equals("合并加工")) {
+                        BigDecimal loadingmin = apsProcessOperationDo.getLoadingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getLoadingmin();
+                        BigDecimal cuttingmin = apsProcessOperationDo.getCuttingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getCuttingmin();
+                        if (apsProcessOperationDo.getTimeway().equals("10")) {
+                            //如果计时方式=按设备运转速度计时,计划作业时长=计划加工卷数*(上料时长+下料时长+(输入单卷重/(输入物料宽度/1000*输入物料厚度/1000*设备运转速度/1000*铝的密度)))
+                            BigDecimal prowidth = apsProcessOperationDo.getProwidth() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getProwidth();
+                            BigDecimal thickness = apsProcessOperationDo.getThickness() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getThickness();
+                            BigDecimal workspeed = apsProcessOperationDo.getWorkspeed() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getWorkspeed();
+                            BigDecimal onceprocessmin = new BigDecimal(df.format(loadingmin.add(cuttingmin).add(apsProcessOperationDo.getSinglerollweight().multiply(BigDecimal.valueOf(1000000000)).divide(prowidth.multiply(thickness).multiply(workspeed).multiply(aluminumdensity), 2, BigDecimal.ROUND_HALF_UP))));
+                            apsProcessOperationDo.setOnceprocessmin(onceprocessmin);
+                            apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(BigDecimal.valueOf(apsProcessOperationDo.getPlanprocessrall()).multiply(onceprocessmin))));
+                        } else if (apsProcessOperationDo.getTimeway().equals("40")) {
+                            //如果计时方式=按单次加工时长计时,计划作业时长=(上料时长+下料时长+单次加工时长)*计划加工卷数
+                            apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(loadingmin.add(cuttingmin).add(apsProcessOperationDo.getOnceprocessmin()).multiply(BigDecimal.valueOf(apsProcessOperationDo.getPlanprocessrall())))));
                         }
+//                        }
 //                        ApsProcessOperationDo operationDo = processOperationDos.stream().filter(item -> item.getId().equals(apsProcessOperationDo.getPreviousprocessid())).findFirst().get();
 //                        apsProcessOperationDo.setPlanprocessrall(operationDo.getPlanprocessrall());
                     }
@@ -1540,22 +1540,22 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
         apsProcessOperationDo.setPlanprocessrall(rollnum);
         apsProcessOperationDo.setUnfinishroll(rollnum - apsProcessOperationDo.getReportroll());
 
-        if (!apsProcessOperationDo.getProcessway().equals("合并加工")) {
-            BigDecimal loadingmin = apsProcessOperationDo.getLoadingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getLoadingmin();
-            BigDecimal cuttingmin = apsProcessOperationDo.getCuttingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getCuttingmin();
-            if (apsProcessOperationDo.getTimeway().equals("10")) {
-                //如果计时方式=按设备运转速度计时,计划作业时长=计划加工卷数*(上料时长+下料时长+(输入单卷重/(输入物料宽度/1000*输入物料厚度/1000*设备运转速度/1000*铝的密度)))
-                BigDecimal prowidth = apsProcessOperationDo.getProwidth() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getProwidth();
-                BigDecimal thickness = apsProcessOperationDo.getThickness() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getThickness();
-                BigDecimal workspeed = apsProcessOperationDo.getWorkspeed() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getWorkspeed();
-                BigDecimal onceprocessmin = new BigDecimal(df.format(loadingmin.add(cuttingmin).add(singlerollweight.multiply(BigDecimal.valueOf(1000000000)).divide(prowidth.multiply(thickness).multiply(workspeed).multiply(aluminumdensity), 2, BigDecimal.ROUND_HALF_UP))));
-                apsProcessOperationDo.setOnceprocessmin(onceprocessmin);
-                apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(BigDecimal.valueOf(apsProcessOperationDo.getPlanprocessrall()).multiply(onceprocessmin))));
-            } else if (apsProcessOperationDo.getTimeway().equals("40")) {
-                //如果计时方式=按单次加工时长计时,计划作业时长=(上料时长+下料时长+单次加工时长)*计划加工卷数
-                apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(loadingmin.add(cuttingmin).add(apsProcessOperationDo.getOnceprocessmin()).multiply(BigDecimal.valueOf(rollnum)))));
-            }
+//        if (!apsProcessOperationDo.getProcessway().equals("合并加工")) {
+        BigDecimal loadingmin = apsProcessOperationDo.getLoadingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getLoadingmin();
+        BigDecimal cuttingmin = apsProcessOperationDo.getCuttingmin() == null ? BigDecimal.valueOf(0) : apsProcessOperationDo.getCuttingmin();
+        if (apsProcessOperationDo.getTimeway().equals("10")) {
+            //如果计时方式=按设备运转速度计时,计划作业时长=计划加工卷数*(上料时长+下料时长+(输入单卷重/(输入物料宽度/1000*输入物料厚度/1000*设备运转速度/1000*铝的密度)))
+            BigDecimal prowidth = apsProcessOperationDo.getProwidth() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getProwidth();
+            BigDecimal thickness = apsProcessOperationDo.getThickness() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getThickness();
+            BigDecimal workspeed = apsProcessOperationDo.getWorkspeed() == null ? BigDecimal.valueOf(1) : apsProcessOperationDo.getWorkspeed();
+            BigDecimal onceprocessmin = new BigDecimal(df.format(loadingmin.add(cuttingmin).add(singlerollweight.multiply(BigDecimal.valueOf(1000000000)).divide(prowidth.multiply(thickness).multiply(workspeed).multiply(aluminumdensity), 2, BigDecimal.ROUND_HALF_UP))));
+            apsProcessOperationDo.setOnceprocessmin(onceprocessmin);
+            apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(BigDecimal.valueOf(apsProcessOperationDo.getPlanprocessrall()).multiply(onceprocessmin))));
+        } else if (apsProcessOperationDo.getTimeway().equals("40")) {
+            //如果计时方式=按单次加工时长计时,计划作业时长=(上料时长+下料时长+单次加工时长)*计划加工卷数
+            apsProcessOperationDo.setProcesstotaltime(new BigDecimal(df.format(loadingmin.add(cuttingmin).add(apsProcessOperationDo.getOnceprocessmin()).multiply(BigDecimal.valueOf(rollnum)))));
         }
+//        }
 
         //更新工序输出
         List<ApsProcessOperationOutMaterDo> apsProcessOperationOutMaterDoNewList = new ArrayList<>();

+ 66 - 44
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/GanttServiceImpl.java

@@ -2,14 +2,17 @@ package com.rongwei.bscommon.sys.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.StopWatch;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.rongwei.bscommon.sys.dao.ApsProcessOperationProcessEquDao;
+import com.rongwei.bscommon.sys.dao.ApsReportRecordsDao;
 import com.rongwei.bscommon.sys.service.ApsProcessOperationBackupService;
 import com.rongwei.bscommon.sys.service.ApsProcessOperationService;
 import com.rongwei.bscommon.sys.service.GanttService;
 import com.rongwei.bsentity.domain.ApsProcessOperationBackupDo;
 import com.rongwei.bsentity.domain.ApsProcessOperationDo;
 import com.rongwei.bsentity.vo.GanttVos;
+import com.rongwei.bsentity.vo.ProcessOutputAndInputNumber;
 import com.rongwei.bsentity.vo.ScheduleGanttVo;
 import com.rongwei.commonservice.service.RedisService;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
@@ -41,25 +44,26 @@ import java.util.stream.Collectors;
 @Service
 public class GanttServiceImpl implements GanttService {
     public static final String GANTT_ITEM_NAME = "%s %d卷 %s %s %tF";
-    public static final String GANTT_ITEM_NAME_PREFIX = "%s %s";
-    public static final String GANTT_DESC_PREFIX = " 计划时间:%s-%s </br>" +
-            "实际时间:%s-%s </br>" +
-            "加工设备:%s/%s </br>";
-    public static final String GANTT_DESC =
-            "输入物料:%s %d卷</br>" +
-                    "工序:%s </br>" +
-                    "作业状态:%s </br>" +
-                    "完成情况:已开工 %d/已报工 %d/已检验 %d/未完工 %d </br>" +
-                    "客户订单号:%s </br>" +
-                    "客户名称:%s </br>" +
-                    "交货期:%tF </br>" +
-                    "订单产品:%s </br>";
+//    public static final String GANTT_ITEM_NAME_PREFIX = "%s %s";
+//    public static final String GANTT_DESC_PREFIX = " 计划时间:%s-%s </br>" +
+//            "实际时间:%s-%s </br>" +
+//            "加工设备:%s/%s </br>";
+//    public static final String GANTT_DESC =
+//            "输入物料:%s %d卷</br>" +
+//                    "工序:%s </br>" +
+//                    "作业状态:%s </br>" +
+//                    "完成情况:已开工 %d/已报工 %d/已检验 %d/未完工 %d </br>" +
+//                    "客户订单号:%s </br>" +
+//                    "客户名称:%s </br>" +
+//                    "交货期:%tF </br>" +
+//                    "订单产品:%s </br>";
     public static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     public static final String DEFAULT_TYPE = "project";
     public static final String DEFAULT_RENDER = "split";
     public static final String COMBINED_PROCESSING = "合并加工";
     public static final String SCHEDULING_STR = "%s-正在排程";
     public static final String SCHEDULING_TO_BE_PUBLISHED_STR = "%s-排程结束待发布";
+    public static final String DEFAULT_SPLIT="-;-";
     private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
     @Autowired
     private ApsProcessOperationProcessEquDao apsProcessOperationProcessEquDao;
@@ -71,7 +75,8 @@ public class GanttServiceImpl implements GanttService {
     private RedisService redisService;
     @Autowired
     private ApsProcessOperationBackupService apsProcessOperationBackupService;
-
+    @Autowired
+    private ApsReportRecordsDao apsReportRecordsDao;
     /**
      * 根据条件获取gantt
      *
@@ -94,11 +99,19 @@ public class GanttServiceImpl implements GanttService {
             startDate = searchDateList.get(0);
             endDate = searchDateList.get(1);
         }
+        StopWatch stopWatch = new StopWatch();
+        stopWatch.start();
         List<GanttVos> apsProcessOperationProcessEquDos = apsProcessOperationProcessEquDao.getGanttDataList(
                 startDate, endDate, factoryId, workShopIdList, orderNoList,
                 null, productionLineId, equId, null, productionLineName, equName);
+        stopWatch.stop();
+        log.error("甘特图查询用时:{}",stopWatch.getTotalTimeSeconds());
+        StopWatch stopWatch1 = new StopWatch();
+        stopWatch1.start();
         List<ScheduleGanttVo> scheduleGanttVos = assembleGanttData(apsProcessOperationProcessEquDos);
-        log.info("甘特图查询结束时间:" + DateUtil.now());
+        stopWatch1.stop();
+        log.error("甘特图组装数据用时:{}",stopWatch1.getTotalTimeSeconds());
+
         return R.ok(scheduleGanttVos);
 //        dataMap.forEach((k, v) -> {
 //            ScheduleGanttVo vo = new ScheduleGanttVo();
@@ -284,11 +297,16 @@ public class GanttServiceImpl implements GanttService {
      */
     public List<ScheduleGanttVo> assembleGanttData(List<GanttVos> apsProcessOperationProcessEquDos) {
         // 需要返回给前端的数据
-        List<ScheduleGanttVo> resultVo;
+        List<ScheduleGanttVo> resultVo=new ArrayList<>();
         if (apsProcessOperationProcessEquDos.isEmpty()) {
-            return new ArrayList<>();
+            return resultVo;
         }
-        resultVo = new ArrayList<>();
+        // 获取工序对应的 输入输出批次号
+        List<String> processId = apsProcessOperationProcessEquDos.stream().map(GanttVos::getProcessid).distinct().collect(Collectors.toList());
+        // 工序作业对应的输入和输出批次号
+        Map<String, String> processAndNumberMap = apsReportRecordsDao.selectInputAndOutputNumByProcessId(processId).stream().collect(Collectors.toMap(ProcessOutputAndInputNumber::getProcessId, ProcessOutputAndInputNumber::getNumber));
+
+
         // 对数据按照加工车间分组
         LinkedHashMap<String, List<GanttVos>> dataMap = apsProcessOperationProcessEquDos.stream()
                 .collect(Collectors.groupingBy(GanttVos::getProcessworkshopid,
@@ -302,6 +320,7 @@ public class GanttServiceImpl implements GanttService {
         // 具体工序作业的对象
         ScheduleGanttVo dateVo;
         int workShopIndex = 1;
+        String inputNumber;
         for (Map.Entry<String, List<GanttVos>> workShopEntry : dataMap.entrySet()) {
             workShopVo = new ScheduleGanttVo();
             workShopVo.setId(workShopIndex++);
@@ -321,11 +340,12 @@ public class GanttServiceImpl implements GanttService {
                 deviceVo.setOpen(true);
                 deviceVo.setType(DEFAULT_TYPE);
                 deviceVo.setParent(workShopVo.getId());
-                deviceVo.setDevicetype(deviceEntry.getValue().get(0).getDevicetype());
+//                deviceVo.setDevicetype(deviceEntry.getValue().get(0).getDevicetype());
                 deviceVo.setRender(DEFAULT_RENDER);
                 deviceVo.setStart_date(deviceEntry.getValue().get(0).getPlanstartdate());
+                deviceVo.setProductlineid(deviceEntry.getValue().get(0).getProductlineid());
+                deviceVo.setProductlinename(deviceEntry.getValue().get(0).getProductlinename());
                 resultVo.add(deviceVo);
-
                 // 对数据按照 计划开始时间+计划结束时间 分组
                 LinkedHashMap<String, List<GanttVos>> planDataMap = deviceEntry.getValue().stream().collect(Collectors.groupingBy(info -> {
                             if (COMBINED_PROCESSING.equals(info.getProcessway())) {
@@ -334,9 +354,15 @@ public class GanttServiceImpl implements GanttService {
                             return info.getUuid();
                         },
                         LinkedHashMap::new, Collectors.toList()));
-
                 for (Map.Entry<String, List<GanttVos>> planDateEntry : planDataMap.entrySet()) {
                     List<GanttVos> ganttVos = planDateEntry.getValue();
+                    ganttVos.forEach(data->{
+                        String number = processAndNumberMap.getOrDefault(data.getProcessid(), "");
+                        if(StringUtils.isNotBlank(number) && number.split(DEFAULT_SPLIT).length==2){
+                            data.setInputnumber(number.split(DEFAULT_SPLIT)[0]);
+                            data.setOutputnumber(number.split(DEFAULT_SPLIT)[1]);
+                        }
+                    });
                     List<String> itemNames = new ArrayList<>();
                     // 按照工序作业明细ID 进行分组 并且获取 图列的 名称和描述
                     LinkedHashMap<String, List<GanttVos>> collect = ganttVos.stream().collect(Collectors.groupingBy(GanttVos::getId, LinkedHashMap::new, Collectors.toList()));
@@ -349,49 +375,45 @@ public class GanttServiceImpl implements GanttService {
                     }).collect(Collectors.joining("</br>"));
                     itemNames.add(itemName);
 
-                    String itemPrefix = String.format(GANTT_DESC_PREFIX,
-                            dateFormat(ganttVos.get(0).getPlanstartdate()),
-                            dateFormat(ganttVos.get(0).getPlanenddate()),
-                            dateFormat(ganttVos.get(0).getActualstartdate()),
-                            dateFormat(ganttVos.get(0).getActualfinishdate()),
-                            ganttVos.get(0).getProcessworkshop(), ganttVos.get(0).getProcessdevice());
-                    String itemDesc = ganttVos.stream().map(info -> {
-                        return String.format(GANTT_DESC, info.getInmatercondition(), info.getPlanprocessrall(),
-                                info.getProcessname(), info.getWorkstatus(),
-                                info.getStartingroll(), info.getReportroll(),
-                                info.getCheckoutroll(), info.getUnfinishroll(),
-                                info.getCustomorderno(), info.getCustomerabbreviation(),
-                                info.getDeliverydate(), info.getOutputorderproduct());
-                    }).collect(Collectors.joining("</br>"));
+//                    String itemPrefix = String.format(GANTT_DESC_PREFIX,
+//                            dateFormat(ganttVos.get(0).getPlanstartdate()),
+//                            dateFormat(ganttVos.get(0).getPlanenddate()),
+//                            dateFormat(ganttVos.get(0).getActualstartdate()),
+//                            dateFormat(ganttVos.get(0).getActualfinishdate()),
+//                            ganttVos.get(0).getProcessworkshop(), ganttVos.get(0).getProcessdevice());
+//                    String itemDesc = ganttVos.stream().map(info -> {
+//                        return String.format(GANTT_DESC, info.getInmatercondition(), info.getPlanprocessrall(),
+//                                info.getProcessname(), info.getWorkstatus(),
+//                                info.getStartingroll(), info.getReportroll(),
+//                                info.getCheckoutroll(), info.getUnfinishroll(),
+//                                info.getCustomorderno(), info.getCustomerabbreviation(),
+//                                info.getDeliverydate(), info.getOutputorderproduct());
+//                    }).collect(Collectors.joining("</br>"));
                     dateVo = new ScheduleGanttVo();
                     dateVo.setId(workShopIndex++);
                     dateVo.setParent(deviceVo.getId());
                     dateVo.setText(StringUtils.join(itemNames, "</br>"));
-                    dateVo.setTooltip(itemPrefix + itemDesc);
+//                    dateVo.setTooltip(itemPrefix + itemDesc);
                     dateVo.setOpen(false);
                     dateVo.setStart_date(planDateEntry.getValue().get(0).getPlanstartdate());
                     dateVo.setEnd_date(planDateEntry.getValue().get(0).getPlanenddate());
                     dateVo.setName(StringUtils.join(itemNames, "</br>"));
-                    dateVo.setDesc(itemPrefix + itemDesc);
+//                    dateVo.setDesc(itemPrefix + itemDesc);
                     dateVo.setProcessdetailids(ganttVos.stream().map(GanttVos::getId).distinct().collect(Collectors.joining(",")));
                     dateVo.setProcessids(ganttVos.stream().map(GanttVos::getProcessid).distinct().collect(Collectors.joining(",")));
                     dateVo.setGanttVos(ganttVos);
                     dateVo.setWorkstatus(ganttVos.stream().map(GanttVos::getWorkstatus).distinct().collect(Collectors.joining(",")));
                     dateVo.setLockmark(ganttVos.stream().map(GanttVos::getLockmark).distinct().collect(Collectors.joining(",")));
-                    dateVo.setConflict(ganttVos.get(0).getConflict());
+//                    dateVo.setConflict(ganttVos.get(0).getConflict());
                     dateVo.setProductionorderid(ganttVos.stream().map(GanttVos::getProductionorderid).collect(Collectors.joining(",")));
                     // 冲突描述
                     List<GanttVos> conflictdes = ganttVos.stream().filter(v -> StringUtils.isNotBlank(v.getConflictdes())).collect(Collectors.toList());
-                    if (conflictdes != null && conflictdes.size() > 0) {
+                    if (!conflictdes.isEmpty()) {
                         String desc = conflictdes.stream().map(GanttVos::getConflictdes).collect(Collectors.joining(";"));
                         dateVo.setConflictdes(desc);
                         dateVo.setSoftconflictdes(conflictdes.stream().map(GanttVos::getSoftconflictdes).collect(Collectors.joining(";")));
                         // 有冲突描述时
-                        if (StringUtils.isBlank(dateVo.getConflictdes()) && StringUtils.isBlank(dateVo.getSoftconflictdes())) {
-                            dateVo.setConflict(true);
-                        } else {
-                            dateVo.setConflict(false);
-                        }
+                        dateVo.setConflict(StringUtils.isBlank(dateVo.getConflictdes()) && StringUtils.isBlank(dateVo.getSoftconflictdes()));
                     }
 
                     resultVo.add(dateVo);

+ 12 - 28
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationProcessEquDao.xml

@@ -178,25 +178,17 @@
         a2.ID as processid,
         Date(a6.PROMISEDELIVERYDATE) as PROMISEDELIVERYDATE,
         Date(a6.SCHEDULEDELIVERYDATE) as SCHEDULEDELIVERYDATE,
-        if((a6.PROMISEDELIVERYDATE is not null and DATE(a6.SCHEDULEDELIVERYDATE)> DATE(a6.PROMISEDELIVERYDATE))
-        or ((a6.PROMISEDELIVERYDATE is null or DATE(a6.SCHEDULEDELIVERYDATE) &lt;= DATE(a6.PROMISEDELIVERYDATE)) and
-        DATE(a6.SCHEDULEDELIVERYDATE)> DATE(a6.DELIVERYDATE)
-        ),1,0) as conflict,
         a1.SOFTCONFLICTDES,
         a2.PLANINPUT AS INMATERCONDITION,
         a6.CUSTOMORDERNO,
         a3.OUTPUTORDERPRODUCT,
-        c.NAME AS DEVICETYPE,
         a2.PROCESSWAY,
-        (select GROUP_CONCAT(DISTINCT arr.BATCHNUMBER) from aps_report_records arr where arr.DELETED='0' and
-        arr.PROCESSOPERATIONID=a1.PROCESSID group by arr.PROCESSOPERATIONID)as INPUTNUMBER,
-        (select GROUP_CONCAT(DISTINCT aro.OUTPUTNUMBER) from aps_report_records arr left join aps_report_output aro on
-        arr.ID=aro.MAINID AND aro.DELETED='0' where arr.DELETED='0' and arr.PROCESSOPERATIONID=a1.PROCESSID group by
-        arr.PROCESSOPERATIONID) AS OUTPUTNUMBER,
         DATE(a3.PROMISEDATESTART) AS PROMISEDATESTART,
         DATE(a3.PROMISEDATEEND) AS PROMISEDATEEND,
         a1.nextprocessesids,
-        a1.previousprocessesids
+        a1.previousprocessesids,
+        apl.PRODUCTLINENAME,
+        apl.ID AS PRODUCTLINEID
         FROM
         aps_process_operation_process_equ a1
         LEFT JOIN aps_process_operation a2 ON a1.PROCESSID = a2.ID
@@ -205,22 +197,16 @@
         aps_process_output_product where DELETED='0' group by BLANKID) a4 ON a3.ID = a4.BLANKID
         LEFT JOIN aps_production_order a6 ON a6.ID = a3.PRODUCTIONORDERID
         LEFT JOIN aps_customer_management a7 on a6.CUSTOMID= a7.ID
-        left join asp_check_items b on a1.PROCESSDEVICEID =b.ID
-        left join sys_dict c on c.DICTTYPE='asp_check_item_type' AND b.CHECKITEMTYPE =c.VALUE
-        <if test="productionLineIds != null and productionLineIds.size()>0">
-            LEFT JOIN aps_resources_equipment ape on ape.EQUIPMENTID = a1.PROCESSDEVICEID
-            LEFT JOIN aps_production_line apl on ape.MAINID =apl.ID
-        </if>
-        <if test="productionLineName !=null and productionLineName!=''">
-            LEFT JOIN aps_resources_equipment ape on ape.EQUIPMENTID = a1.PROCESSDEVICEID
-            LEFT JOIN aps_production_line apl on ape.MAINID =apl.ID
-        </if>
+        LEFT JOIN aps_resources_equipment ape on ape.EQUIPMENTID = a1.PROCESSDEVICEID AND ape.DELETED = '0'
+        LEFT JOIN aps_production_line apl on ape.MAINID =apl.ID AND apl.DELETED = '0'
+<!--        <if test="productionLineName !=null and productionLineName!=''">-->
+<!--            LEFT JOIN aps_resources_equipment ape on ape.EQUIPMENTID = a1.PROCESSDEVICEID-->
+<!--            LEFT JOIN aps_production_line apl on ape.MAINID =apl.ID-->
+<!--        </if>-->
         <where>
             a1.DELETED ='0'
             AND a2.DELETED = '0'
             AND a3.DELETED = '0'
-            -- AND a4.DELETED = '0'
-            -- AND a5.DELETED = '0'
             AND a6.DELETED='0'
             <if test="ids != null and ids.size()>0">
                 and a1.ID in
@@ -228,10 +214,7 @@
                     #{id}
                 </foreach>
             </if>
-            <if test="productionLineIds != null and productionLineIds.size()>0">
-                AND ape.DELETED = '0'
-                AND apl.DELETED = '0'
-            </if>
+
             <if test="workshopIds != null and workshopIds.size()>0">
                 and a1.PROCESSWORKSHOPID in
                 <foreach collection="workshopIds" item="workshopId" open="(" close=")" separator=",">
@@ -271,7 +254,8 @@
             </if>
             <if test="processids != null ">and a1.PROCESSID in (${processids})</if>
         </where>
-        order by a1.PROCESSWORKSHOP,a1.PROCESSDEVICE,a1.PLANSTARTDATE asc,a1.PLANENDDATE,c.VALUE asc
+        order by a1.PROCESSWORKSHOP,a1.PROCESSDEVICE,a1.PLANSTARTDATE asc,a1.PLANENDDATE
+#                  ,c.VALUE asc
     </select>
     <select id="selectNeedUpdate" resultType="com.rongwei.bsentity.vo.CommonUpdateProductionStatusReq">
         SELECT

+ 18 - 0
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsReportRecordsDao.xml

@@ -44,4 +44,22 @@
         CHECKID,CHECKDATE,CHECKFILE,
         INGREDIENT,CHECKUSERNAME
     </sql>
+    <select id="selectInputAndOutputNumByProcessId" resultType="com.rongwei.bsentity.vo.ProcessOutputAndInputNumber">
+        SELECT
+            arr.PROCESSOPERATIONID as processId,
+        CONCAT(GROUP_CONCAT(DISTINCT arr.BATCHNUMBER ),"-;-",GROUP_CONCAT( DISTINCT aro.OUTPUTNUMBER )) as number
+        FROM
+            aps_report_records arr
+            LEFT JOIN aps_report_output aro ON arr.ID = aro.MAINID
+        <where>
+            arr.DELETED = '0'
+            AND aro.DELETED = '0'
+            AND arr.PROCESSOPERATIONID in
+            <foreach collection="processIds" open="(" close=")" item="id" separator=",">
+                #{id}
+            </foreach>
+        </where>
+        GROUP BY
+            arr.PROCESSOPERATIONID
+    </select>
 </mapper>

+ 8 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/GanttVos.java

@@ -201,4 +201,12 @@ public class GanttVos {
      * 前道工序作业明细ID
      */
     private String previousprocessesids="";
+    /**
+     * 产线名称
+     */
+    private String productlinename="";
+    /**
+     * 产线ID
+     */
+    private String productlineid="";
 }

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

@@ -0,0 +1,19 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+/**
+ * ProcessOutputAndInputNumber class
+ *
+ * @author XH
+ * @date 2024/07/25
+ */
+@Data
+public class ProcessOutputAndInputNumber {
+    private String processId;
+    /**
+     * 输入和输出物料号
+     * 输入1,输入2-;-输出1,输出2
+     */
+    private String number;
+}

+ 8 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ScheduleGanttVo.java

@@ -111,6 +111,14 @@ public class ScheduleGanttVo {
      * 设备类型
      */
     private String devicetype;
+    /**
+     * 产线名称
+     */
+    private String productlinename;
+    /**
+     * 产线ID
+     */
+    private String productlineid;
     /**
      * 详细对象
      */