Bläddra i källkod

aps-作业冲突增加校验修改

sucheng 6 månader sedan
förälder
incheckning
0cb62c8d95

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

@@ -675,6 +675,68 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 newConflictdes = removeConflictsDesc(newConflictdes, SMALL_THAN_MIN_RETURN_TIME);
             }
         }
+        //存在前道工序作业明细
+        if (StringUtils.isNotBlank(apsProcessOperationProcessEquDo.getNextprocessesids())) {
+            for (String nextProcessEquId : apsProcessOperationProcessEquDo.getNextprocessesids().split(",")) {
+                //此时前道的明细为当前明细
+                ApsProcessOperationProcessEquDo previousProcessEqu = apsProcessOperationProcessEquDo;
+                //查询后道的明细
+                ApsProcessOperationProcessEquDo nextProcessEqu = this.getById(nextProcessEquId);
+                //如果作业计划开工时间<前道作业计划完工时间,记录冲突:计划开工时间早于前道计划完工时间
+                if (nextProcessEqu.getPlanstartdate().compareTo(previousProcessEqu.getPlanenddate()) < 0) {
+                    apsConflictLogService.recordLog(nextProcessEqu.getId(),
+                            "作业明细计划开工时间:" + nextProcessEqu.getPlanstartdate() + ",前道作业明细计划完工时间:" + previousProcessEqu.getPlanenddate(), PREVIOUS_ENDTIME_AFTER_NOW, 1, null);
+                    newConflictdes = addNewConflictsDesc(newConflictdes, PREVIOUS_ENDTIME_AFTER_NOW);
+                } else {
+                    apsConflictLogService.recordLog(nextProcessEqu.getId(),
+                            "作业明细计划开工时间:" + nextProcessEqu.getPlanstartdate() + ",前道作业明细计划完工时间:" + previousProcessEqu.getPlanenddate(), PREVIOUS_ENDTIME_AFTER_NOW, 2, null);
+                    newConflictdes = removeConflictsDesc(newConflictdes, PREVIOUS_ENDTIME_AFTER_NOW);
+                }
+
+                //与前道作业明细间隔时间=该作业明细计划开工时间-前道作业明细计划完工时间
+                long betweenPrevious = DateUtil.between(nextProcessEqu.getPlanstartdate(), previousProcessEqu.getPlanenddate(), DateUnit.MINUTE);
+                /*
+                 * 如果作业明细加工设备相同,则该作业最小流转时间=取其大(排程设置的机台流转时间,作业的最小流转等待时间)
+                 * 如果作业明细加工车间不同,则该作业最小流转时间=取其大(排程设置的车间流转时间,作业的最小流转等待时间)
+                 * 如果作业明细加工工厂不同,则该作业最小流转时间=取其大(排程设置的工厂流转时间,作业的最小流转等待时间)
+                 */
+                //排程设置
+                ApsScheduleConfigDo apsScheduleConfigDo = apsScheduleConfigService.getById("1");
+                //最小流转时间
+                long minReturnTime = apsProcessOperationDo.getMinflowwaitmin().longValue();
+                //作业明细加工设备相同
+                if (!previousProcessEqu.getProcessdeviceid().equals(nextProcessEqu.getProcessdeviceid())) {
+                    if (apsScheduleConfigDo.getWorkshopin().longValue() > minReturnTime) {
+                        minReturnTime = apsScheduleConfigDo.getWorkshopin().longValue();
+                    }
+                }
+                //作业明细加工车间不同
+                if (!previousProcessEqu.getProcessworkshopid().equals(nextProcessEqu.getProcessworkshopid())) {
+                    if (apsScheduleConfigDo.getWorkshopcross().longValue() > minReturnTime) {
+                        minReturnTime = apsScheduleConfigDo.getWorkshopcross().longValue();
+                    }
+                }
+                //作业明细加工工厂不同
+                AspCheckItemsDo equ1 = aspCheckItemsService.getById(previousProcessEqu.getProcessdeviceid());
+                AspCheckItemsDo equ2 = aspCheckItemsService.getById(nextProcessEqu.getProcessdeviceid());
+                if (!equ1.getTenantid().equals(equ2.getTenantid())) {
+                    if (apsScheduleConfigDo.getFactorycross().longValue() > minReturnTime) {
+                        minReturnTime = apsScheduleConfigDo.getFactorycross().longValue();
+                    }
+                }
+                //如果与前道工序作业间隔时间<作业最小流转时间,则记录冲突:与前道间隔时间小于作业最小流转时间
+                if (betweenPrevious < minReturnTime) {
+                    apsConflictLogService.recordLog(nextProcessEqu.getId(),
+                            "与前道工序作业间隔时间:" + betweenPrevious + ",作业最小流转时间:" + minReturnTime, SMALL_THAN_MIN_RETURN_TIME, 1, null);
+                    newConflictdes = addNewConflictsDesc(newConflictdes, SMALL_THAN_MIN_RETURN_TIME);
+                } else {
+                    apsConflictLogService.recordLog(nextProcessEqu.getId(),
+                            "与前道工序作业间隔时间:" + betweenPrevious + ",作业最小流转时间:" + minReturnTime, SMALL_THAN_MIN_RETURN_TIME, 2, null);
+                    newConflictdes = removeConflictsDesc(newConflictdes, SMALL_THAN_MIN_RETURN_TIME);
+                }
+            }
+        }
+
         //查询坯料计划信息
         ApsBlankOrderDo apsBlankOrderDo = apsBlankOrderService.getById(apsProcessOperationProcessEquDo.getBlankid());
         //如果作业明细计划完工时间超出订单期望交货期,记录警告:完工时间超出订单交货期