Browse Source

aps-增加冲突警告

sucheng 6 months ago
parent
commit
b050e68067

+ 20 - 0
bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java

@@ -821,6 +821,18 @@ public class SaveConstans {
          * 超出承诺交货期
          */
         public static final String EXCEEDING_THE_PROMISED_DELIVERY_DEADLINE = "超出承诺交货期";
+        /**
+         * 加工设备不是工艺要求的可选设备
+         */
+        public static final String NO_NEED_EQU = "加工设备不是工艺要求的可选设备";
+        /**
+         * 计划开工时间早于前道计划完工时间
+         */
+        public static final String PREVIOUS_ENDTIME_AFTER_NOW = "计划开工时间早于前道计划完工时间";
+        /**
+         * 与前道间隔时间小于作业最小流转时间
+         */
+        public static final String SMALL_THAN_MIN_RETURN_TIME = "与前道间隔时间小于作业最小流转时间";
 
     }
 
@@ -836,6 +848,14 @@ public class SaveConstans {
          * 订单的连续生产要求不满足
          */
         public static final String SERIES_PRODUCE = "订单的连续生产要求不满足";
+        /**
+         * 完工时间超出订单交货期
+         */
+        public static final String PLAN_END_DATE_AFTER_DELIVERY_DATE = "完工时间超出坯料计划交货期";
+        /**
+         * 不满足冷轧交货天数
+         */
+        public static final String NO_ABOUT_EXPECTED_DAYS = "不满足冷轧交货天数";
     }
 
     /**

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

@@ -119,6 +119,9 @@ public interface ApsProcessOperationProcessEquDao extends BaseMapper<ApsProcessO
     String getNeedSelectEquTypes(@Param("operationJobDetailsId") List<String> operationJobDetailsId);
 
     List<ProcessVo> selectMyProcessVo(@Param("equId") String equId, @Param("date1") Date date1, @Param("date2") Date date2);
+
+    @Select("select apope.PLANSTARTDATE from aps_process_operation apo LEFT JOIN aps_process_operation_process_equ apope ON apo.ID = apope.PROCESSID AND apope.DELETED = 0 WHERE apo.DELETED = 0 AND apo.BLANKID = #{blankid} AND apo.PROCESS != '铸轧' ORDER BY apope.PLANSTARTDATE limit 1")
+    Date getEarltPlanStartDate(@Param("blankid") String blankid);
 }
 
 

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

@@ -40,13 +40,13 @@ import java.util.stream.Collectors;
 
 import static com.rongwei.bscommon.sys.utils.ApsUtils.addNewConflictsDesc;
 import static com.rongwei.safecommon.utils.SaveConstans.CloseStatus.UNFINISHED;
-import static com.rongwei.safecommon.utils.SaveConstans.ForcedConflictsDescription.EQUIPMENT_RUN_TIME;
-import static com.rongwei.safecommon.utils.SaveConstans.ForcedConflictsDescription.EQ_TIME_CROSS;
+import static com.rongwei.safecommon.utils.SaveConstans.ForcedConflictsDescription.*;
 import static com.rongwei.safecommon.utils.SaveConstans.JobStatus.*;
 import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_N;
 import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_Y;
 import static com.rongwei.safecommon.utils.SaveConstans.ProcessWay.PROCESS_WAY_MERGE;
 import static com.rongwei.safecommon.utils.SaveConstans.ProductionStatus.*;
+import static com.rongwei.safecommon.utils.SaveConstans.UNForcedConflictsDescription.*;
 
 /**
  *
@@ -85,6 +85,12 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
     private ApsProcessOperationProcessEquService apsProcessOperationProcessEquService;
     @Autowired
     private ProcessServiceImpl processService;
+    @Autowired
+    private ApsProcessOperationEquService apsProcessOperationEquService;
+    @Autowired
+    private AspCheckItemsService aspCheckItemsService;
+    @Autowired
+    private ApsScheduleConfigService apsScheduleConfigService;
 
     /**
      * 更新工序的待加工批次号信息
@@ -578,6 +584,137 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         }
     }
 
+    private void checkSomeNewInspection(ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo) {
+        /*
+        如果加工设备不是工序作业指定的可选设备,记录冲突:加工设备不是工艺要求的可选设备
+        如果作业明细计划开工时间<前道作业明细计划完工时间,记录冲突:计划开工时间早于前道计划完工时间
+        如果与前道作业明细间隔时间<该作业最小流转时间,则记录冲突:与前道间隔时间小于作业最小流转时间
+        与前道作业明细间隔时间=该作业明细计划开工时间-前道作业明细计划完工时间
+        如果作业明细加工设备相同,则该作业最小流转时间=取其大(排程设置的机台流转时间,作业的最小流转等待时间)
+        如果作业明细加工车间不同,则该作业最小流转时间=取其大(排程设置的车间流转时间,作业的最小流转等待时间)
+        如果作业明细加工工厂不同,则该作业最小流转时间=取其大(排程设置的工厂流转时间,作业的最小流转等待时间)
+
+        如果作业明细计划完工时间超出订单坯料计划期望交货期,记录警告:完工时间超出坯料计划交货期
+        如果该作业不是铸轧,并且作业明细计划完工时间-该坯料计划非铸轧作业明细的最早计划开工时间>坯料计划冷轧交货天数,记录警告:不满足冷轧交货天数
+         */
+        //工序作业ID
+        String processid = apsProcessOperationProcessEquDo.getProcessid();
+        //查询工艺步骤指定的可选设备
+        List<ApsProcessOperationEquDo> processOperationEquDos = apsProcessOperationEquService.list(new LambdaQueryWrapper<ApsProcessOperationEquDo>().eq(ApsProcessOperationEquDo::getMainid, processid));
+        long count = processOperationEquDos.stream().filter(item -> item.getResourceid().equals(apsProcessOperationProcessEquDo.getProcessdeviceid())).count();
+        String newConflictdes = apsProcessOperationProcessEquDo.getConflictdes();
+        if (count <= 0) {
+            //如果加工设备不是工艺步骤指定的可选设备,记录冲突:加工设备不是工艺要求的可选设备
+            apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
+                    apsProcessOperationProcessEquDo.getProcessdeviceid(), NO_NEED_EQU, 1, null);
+            newConflictdes = addNewConflictsDesc(newConflictdes, NO_NEED_EQU);
+        } else {
+            apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
+                    apsProcessOperationProcessEquDo.getProcessdeviceid(), NO_NEED_EQU, 2, null);
+            newConflictdes = removeConflictsDesc(newConflictdes, NO_NEED_EQU);
+        }
+        //查询工序作业详情
+        ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(apsProcessOperationProcessEquDo.getProcessid());
+
+        //存在前道工序作业明细
+        if (StringUtils.isNotBlank(apsProcessOperationProcessEquDo.getPreviousprocessesids())) {
+            //查询前道作业明细
+            ApsProcessOperationProcessEquDo previousProcessEqu = this.getById(apsProcessOperationProcessEquDo.getPreviousprocessesids());
+            //如果作业计划开工时间<前道作业计划完工时间,记录冲突:计划开工时间早于前道计划完工时间
+            if (apsProcessOperationProcessEquDo.getPlanstartdate().compareTo(previousProcessEqu.getPlanenddate()) < 0) {
+                apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
+                        "作业明细计划开工时间:" + apsProcessOperationProcessEquDo.getPlanstartdate() + ",前道作业明细计划完工时间:" + previousProcessEqu.getPlanenddate(), PREVIOUS_ENDTIME_AFTER_NOW, 1, null);
+                newConflictdes = addNewConflictsDesc(newConflictdes, PREVIOUS_ENDTIME_AFTER_NOW);
+            } else {
+                apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
+                        "作业明细计划开工时间:" + apsProcessOperationProcessEquDo.getPlanstartdate() + ",前道作业明细计划完工时间:" + previousProcessEqu.getPlanenddate(), PREVIOUS_ENDTIME_AFTER_NOW, 2, null);
+                newConflictdes = removeConflictsDesc(newConflictdes, PREVIOUS_ENDTIME_AFTER_NOW);
+            }
+
+            //与前道作业明细间隔时间=该作业明细计划开工时间-前道作业明细计划完工时间
+            long betweenPrevious = DateUtil.between(apsProcessOperationProcessEquDo.getPlanstartdate(), previousProcessEqu.getPlanenddate(), DateUnit.MINUTE);
+            /*
+             * 如果作业明细加工设备相同,则该作业最小流转时间=取其大(排程设置的机台流转时间,作业的最小流转等待时间)
+             * 如果作业明细加工车间不同,则该作业最小流转时间=取其大(排程设置的车间流转时间,作业的最小流转等待时间)
+             * 如果作业明细加工工厂不同,则该作业最小流转时间=取其大(排程设置的工厂流转时间,作业的最小流转等待时间)
+             */
+            //排程设置
+            ApsScheduleConfigDo apsScheduleConfigDo = apsScheduleConfigService.getById("1");
+            //最小流转时间
+            long minReturnTime = apsProcessOperationDo.getMinflowwaitmin().longValue();
+            //作业明细加工设备相同
+            if (previousProcessEqu.getProcessdeviceid().equals(apsProcessOperationProcessEquDo.getProcessdeviceid())) {
+                if (apsScheduleConfigDo.getWorkshopin().longValue() > minReturnTime) {
+                    minReturnTime = apsScheduleConfigDo.getWorkshopin().longValue();
+                }
+            }
+            //作业明细加工车间不同
+            if (!previousProcessEqu.getProcessworkshopid().equals(apsProcessOperationProcessEquDo.getProcessworkshopid())) {
+                if (apsScheduleConfigDo.getWorkshopcross().longValue() > minReturnTime) {
+                    minReturnTime = apsScheduleConfigDo.getWorkshopcross().longValue();
+                }
+            }
+            //作业明细加工工厂不同
+            AspCheckItemsDo equ1 = aspCheckItemsService.getById(previousProcessEqu.getProcessdeviceid());
+            AspCheckItemsDo equ2 = aspCheckItemsService.getById(apsProcessOperationProcessEquDo.getProcessdeviceid());
+            if (!equ1.getTenantid().equals(equ2.getTenantid())) {
+                if (apsScheduleConfigDo.getFactorycross().longValue() > minReturnTime) {
+                    minReturnTime = apsScheduleConfigDo.getFactorycross().longValue();
+                }
+            }
+            //如果与前道工序作业间隔时间<作业最小流转时间,则记录冲突:与前道间隔时间小于作业最小流转时间
+            if (betweenPrevious < minReturnTime) {
+                apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
+                        "与前道工序作业间隔时间:" + betweenPrevious + ",作业最小流转时间:" + minReturnTime, SMALL_THAN_MIN_RETURN_TIME, 1, null);
+                newConflictdes = addNewConflictsDesc(newConflictdes, SMALL_THAN_MIN_RETURN_TIME);
+            } else {
+                apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
+                        "与前道工序作业间隔时间:" + betweenPrevious + ",作业最小流转时间:" + minReturnTime, SMALL_THAN_MIN_RETURN_TIME, 2, null);
+                newConflictdes = removeConflictsDesc(newConflictdes, SMALL_THAN_MIN_RETURN_TIME);
+            }
+        }
+        //查询坯料计划信息
+        ApsBlankOrderDo apsBlankOrderDo = apsBlankOrderService.getById(apsProcessOperationProcessEquDo.getBlankid());
+        //如果作业明细计划完工时间超出订单期望交货期,记录警告:完工时间超出订单交货期
+        //警告
+        String newSoftconflictdes = apsProcessOperationProcessEquDo.getSoftconflictdes();
+        if (apsProcessOperationProcessEquDo.getPlanenddate().compareTo(apsBlankOrderDo.getDeliverydate()) > 0){
+            apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
+                    "作业明细计划完工时间:" + apsProcessOperationProcessEquDo.getPlanenddate() + ",坯料计划期望交货期:" + apsBlankOrderDo.getDeliverydate(), PLAN_END_DATE_AFTER_DELIVERY_DATE, 1, null);
+            newSoftconflictdes = addNewConflictsDesc(newSoftconflictdes, PLAN_END_DATE_AFTER_DELIVERY_DATE);
+        } else {
+            apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
+                    "作业明细计划完工时间:" + apsProcessOperationProcessEquDo.getPlanenddate() + ",坯料计划期望交货期:" + apsBlankOrderDo.getDeliverydate(), PLAN_END_DATE_AFTER_DELIVERY_DATE, 2, null);
+            newSoftconflictdes = removeConflictsDesc(newSoftconflictdes, PLAN_END_DATE_AFTER_DELIVERY_DATE);
+        }
+        //如果该作业不是铸轧,并且作业明细计划完工时间-该坯料计划非铸轧作业明细的最早计划开工时间>坯料计划冷轧交货天数,记录警告:不满足冷轧交货天数
+        if (!apsProcessOperationDo.getProcess().equals("铸轧")) {
+            //查询该坯料计划非铸轧作业明细的最早计划开工时间
+            Date earlyPlanStartDate = this.baseMapper.getEarltPlanStartDate(apsProcessOperationProcessEquDo.getBlankid());
+            if (DateUtil.between(apsProcessOperationProcessEquDo.getPlanenddate(), earlyPlanStartDate, DateUnit.DAY) > apsBlankOrderDo.getExpecteddays()) {
+                apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
+                        "作业明细计划完工时间:" + apsProcessOperationProcessEquDo.getPlanenddate() + ",该坯料计划非铸轧作业明细的最早计划开工时间:" + earlyPlanStartDate+",坯料计划冷轧交货天数:"+apsBlankOrderDo.getExpecteddays(), NO_ABOUT_EXPECTED_DAYS, 1, null);
+                newSoftconflictdes = addNewConflictsDesc(newSoftconflictdes, NO_ABOUT_EXPECTED_DAYS);
+            } else {
+                apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
+                        "作业明细计划完工时间:" + apsProcessOperationProcessEquDo.getPlanenddate() + ",该坯料计划非铸轧作业明细的最早计划开工时间:" + earlyPlanStartDate+",坯料计划冷轧交货天数:"+apsBlankOrderDo.getExpecteddays(), NO_ABOUT_EXPECTED_DAYS, 2, null);
+                newSoftconflictdes = removeConflictsDesc(newSoftconflictdes, NO_ABOUT_EXPECTED_DAYS);
+            }
+        }
+
+
+        this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
+                .eq(ApsProcessOperationProcessEquDo::getId, apsProcessOperationProcessEquDo.getId())
+                .set(ApsProcessOperationProcessEquDo::getConflictdes, newConflictdes)
+                .set(ApsProcessOperationProcessEquDo::getSoftconflictdes, newSoftconflictdes)
+                .set(BaseDo::getModifydate, new Date())
+                .set(ApsProcessOperationProcessEquDo::getHasconflict, StringUtils.isBlank(newConflictdes) &&
+                        StringUtils.isBlank(newSoftconflictdes) ? LOCKMARK_N : LOCKMARK_Y)
+        );
+        apsProcessOperationProcessEquDo.setConflictdes(newConflictdes);
+        apsProcessOperationProcessEquDo.setSoftconflictdes(newSoftconflictdes);
+    }
+
     /**
      * 计算计划完工时间
      * = 计划开工时间+加工时长/原计划加工卷数*本次计划加工卷数
@@ -1520,6 +1657,9 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 .set(ApsProcessOperationProcessEquDo::getHasconflict, StringUtils.isBlank(newConflictdes) &&
                         StringUtils.isBlank(processEquDo.getSoftconflictdes()) ? LOCKMARK_N : LOCKMARK_Y)
         );
+        processEquDo.setConflictdes(newConflictdes);
+        //新增的冲突判断
+        checkSomeNewInspection(processEquDo);
     }
 
     /**