瀏覽代碼

aps-加工设备该加工时间段不可用冲突修改

sucheng 5 月之前
父節點
當前提交
e1652ec0ba

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

@@ -389,12 +389,12 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     processEqus.setProcessworkshop(changingWiresVo.getWorkshopName());
                     processEqus.setProcessdeviceid(changingWiresVo.getEquId());
                     processEqus.setProcessdevice(changingWiresVo.getEquName());
-                    if (equIds.contains(changingWiresVo.getEquId())){
+                    if (equIds.contains(changingWiresVo.getEquId())) {
                         ApsProcessOperationEquDo apsProcessOperationEquDo = processOperationEquDos.stream().filter(item -> item.getResourceid().equals(changingWiresVo.getEquId())).findFirst().orElse(null);
                         if (ObjectUtil.isNotEmpty(apsProcessOperationEquDo)) {
                             processEqus.setRollerid(apsProcessOperationEquDo.getRollerid());
                         }
-                    }else {
+                    } else {
                         processEqus.setRollerid("");
                     }
                     // 计划开工时间=计划开工时间-开工时间间隔
@@ -451,12 +451,12 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                         newProcessEqu.setProcessworkshop(changingWiresVo.getWorkshopName());
                         newProcessEqu.setProcessdeviceid(changingWiresVo.getEquId());
                         newProcessEqu.setProcessdevice(changingWiresVo.getEquName());
-                        if (equIds.contains(changingWiresVo.getEquId())){
+                        if (equIds.contains(changingWiresVo.getEquId())) {
                             ApsProcessOperationEquDo apsProcessOperationEquDo = processOperationEquDos.stream().filter(item -> item.getResourceid().equals(changingWiresVo.getEquId())).findFirst().orElse(null);
                             if (ObjectUtil.isNotEmpty(apsProcessOperationEquDo)) {
                                 newProcessEqu.setRollerid(apsProcessOperationEquDo.getRollerid());
                             }
-                        }else {
+                        } else {
                             processEqus.setRollerid("");
                         }
                         newProcessEqu.setActualstartdate(null);
@@ -607,7 +607,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         }
     }
 
-    private void checkSomeNewInspection(ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo,List<String> affectedIdList) {
+    private void checkSomeNewInspection(ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo, List<String> affectedIdList) {
         /*
         如果加工设备不是工序作业指定的可选设备,记录冲突:加工设备不是工艺要求的可选设备
         如果作业明细计划开工时间<前道作业明细计划完工时间,记录冲突:计划开工时间早于前道计划完工时间
@@ -1084,7 +1084,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 // 增加受影响的工序作业信息
                 affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo, oldPlanstartdate,
                         oldPlanenddate, oldEquId, apsProcessOperationDo.getProcessway(), new ArrayList<>()));
-            }else {
+            } else {
                 this.updateById(apsProcessOperationProcessEquDo);
             }
 //            this.updateById(apsProcessOperationProcessEquDo);
@@ -1743,35 +1743,75 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
     public void inspectionEquipmentIsAvailable(ApsProcessOperationProcessEquDo processEquDo,
                                                String equId, Date startDate, Date endDate,
                                                List<String> affectedIdList) {
-        // 查询当前设备是否存在不可用设备的停机时间为空的数据
-        List<ApsEquipmentCalendarDo> nullSdTimeList = apsEquipmentCalendarService.list(new LambdaQueryWrapper<ApsEquipmentCalendarDo>()
+        // 查询当前设备 在开始时间之后,是否存在不可用设备数据
+        List<ApsEquipmentCalendarDo> equUnUseList = apsEquipmentCalendarService.list(new LambdaQueryWrapper<ApsEquipmentCalendarDo>()
                 .eq(ApsEquipmentCalendarDo::getProcessdeviceid, equId)
-                .isNull(ApsEquipmentCalendarDo::getSdendtime));
-        List<ApsEquipmentCalendarDo> list = new ArrayList<>();
-        //注意不可用结束时间为空,表示后面一直不可用
-        if (nullSdTimeList.isEmpty()) {
-            // 查询当前设备当前时间段是否存在不可用设备
-            list = apsEquipmentCalendarService.list(new LambdaQueryWrapper<ApsEquipmentCalendarDo>()
-                    .eq(ApsEquipmentCalendarDo::getProcessdeviceid, equId)
-                    .and(wapper -> wapper.apply("{0}   BETWEEN sdstarttime AND sdendtime", startDate)
-                            .or()
-                            .apply("{0}   BETWEEN sdstarttime AND sdendtime", endDate)));
-        } else {
-            list = apsEquipmentCalendarService.list(new LambdaQueryWrapper<ApsEquipmentCalendarDo>()
-                    .eq(ApsEquipmentCalendarDo::getProcessdeviceid, equId)
-                    .and(wapper -> wapper.apply("sdstarttime<={0}", startDate)
-                            .or()
-                            .apply("sdstarttime<={0}", endDate)));
-        }
-        String newConflictdes;
-        if (list.isEmpty()) {
+                .ge(ApsEquipmentCalendarDo::getSdstarttime, startDate));
+        String newConflictdes = processEquDo.getConflictdes();
+        //时间不可用是否有冲突
+        boolean isAdd = false;
+        for (ApsEquipmentCalendarDo apsEquipmentCalendarDo : equUnUseList) {
+            Date sdstarttime = apsEquipmentCalendarDo.getSdstarttime();
+            Date sdendtime = apsEquipmentCalendarDo.getSdendtime();
+
+            //没有结束时间,表示开始时间以后都不可用
+            if (ObjectUtil.isEmpty(sdendtime)) {
+                //计划结束时间在不可用片段
+                if (endDate.after(sdstarttime)) {
+                    apsConflictLogService.recordLog(processEquDo.getId(),
+                            apsEquipmentCalendarDo.getId(), EQUIPMENT_RUN_TIME, 1, null);
+                    newConflictdes = addNewConflictsDesc(processEquDo.getConflictdes(), EQUIPMENT_RUN_TIME);
+                    isAdd = true;
+                    break;
+                } else {
+                    isAdd = false;
+                }
+            } else {
+                //计划开始时间/计划结束时间在停用开始时间和停用结束时间之间
+                if ((startDate.after(sdstarttime) && startDate.before(sdendtime))
+                        || (endDate.after(sdstarttime) && endDate.before(sdendtime))) {
+                    apsConflictLogService.recordLog(processEquDo.getId(),
+                            apsEquipmentCalendarDo.getId(), EQUIPMENT_RUN_TIME, 1, null);
+                    newConflictdes = addNewConflictsDesc(processEquDo.getConflictdes(), EQUIPMENT_RUN_TIME);
+                    isAdd = true;
+                    break;
+                }
+                isAdd = false;
+            }
+        }
+        if (!isAdd) {
             apsConflictLogService.recordLog(processEquDo.getId(), "", EQUIPMENT_RUN_TIME, 2, null);
             newConflictdes = removeConflictsDesc(processEquDo.getConflictdes(), EQUIPMENT_RUN_TIME);
-        } else {
-            apsConflictLogService.recordLog(processEquDo.getId(),
-                    list.stream().map(ApsEquipmentCalendarDo::getId).collect(Collectors.joining(",")), EQUIPMENT_RUN_TIME, 1, null);
-            newConflictdes = addNewConflictsDesc(processEquDo.getConflictdes(), EQUIPMENT_RUN_TIME);
         }
+//        //查询其中没有停机结束时间的数据
+//        List<ApsEquipmentCalendarDo> nullSdEndTimeList = equUnUseList.stream().filter(item -> ObjectUtil.isEmpty(item.getSdendtime())).collect(Collectors.toList());
+//
+//
+//        List<ApsEquipmentCalendarDo> list = new ArrayList<>();
+//        //注意不可用结束时间为空,表示后面一直不可用
+//        if (nullSdTimeList.isEmpty()) {
+//            // 查询当前设备当前时间段是否存在不可用设备
+//            list = apsEquipmentCalendarService.list(new LambdaQueryWrapper<ApsEquipmentCalendarDo>()
+//                    .eq(ApsEquipmentCalendarDo::getProcessdeviceid, equId)
+//                    .and(wapper -> wapper.apply("{0}   BETWEEN sdstarttime AND sdendtime", startDate)
+//                            .or()
+//                            .apply("{0}   BETWEEN sdstarttime AND sdendtime", endDate)));
+//        } else {
+//            list = apsEquipmentCalendarService.list(new LambdaQueryWrapper<ApsEquipmentCalendarDo>()
+//                    .eq(ApsEquipmentCalendarDo::getProcessdeviceid, equId)
+//                    .and(wapper -> wapper.apply("sdstarttime<={0}", startDate)
+//                            .or()
+//                            .apply("sdstarttime<={0}", endDate)));
+//        }
+//
+//        if (list.isEmpty()) {
+//            apsConflictLogService.recordLog(processEquDo.getId(), "", EQUIPMENT_RUN_TIME, 2, null);
+//            newConflictdes = removeConflictsDesc(processEquDo.getConflictdes(), EQUIPMENT_RUN_TIME);
+//        } else {
+//            apsConflictLogService.recordLog(processEquDo.getId(),
+//                    list.stream().map(ApsEquipmentCalendarDo::getId).collect(Collectors.joining(",")), EQUIPMENT_RUN_TIME, 1, null);
+//            newConflictdes = addNewConflictsDesc(processEquDo.getConflictdes(), EQUIPMENT_RUN_TIME);
+//        }
         this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
                 .eq(ApsProcessOperationProcessEquDo::getId, processEquDo.getId())
                 .set(ApsProcessOperationProcessEquDo::getConflictdes, newConflictdes)
@@ -1781,7 +1821,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         );
         processEquDo.setConflictdes(newConflictdes);
         //新增的冲突判断
-        checkSomeNewInspection(processEquDo,affectedIdList);
+        checkSomeNewInspection(processEquDo, affectedIdList);
     }
 
     /**
@@ -2008,7 +2048,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         ApsUtils.checkScheduling(null);
 
         Date processingTime = req.getProcessingTime();
-        if (processingTime.before(DateUtil.date())){
+        if (processingTime.before(DateUtil.date())) {
             return R.error("开始时间必须大于当前时间");
         }
 
@@ -2036,13 +2076,13 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             //对应的辊赋值
             String processid = apsProcessOperationProcessEquDo.getProcessid();
             List<ApsProcessOperationEquDo> myEquList = processOperationEquDos.stream().filter(item -> item.getMainid().equals(processid)).collect(Collectors.toList());
-            if (myEquList.isEmpty()){
+            if (myEquList.isEmpty()) {
                 needUpdate.setRollerid("");
-            }else {
+            } else {
                 ApsProcessOperationEquDo apsProcessOperationEquDo = myEquList.stream().filter(item -> item.getResourceid().equals(req.getEquId())).findFirst().orElse(null);
-                if (ObjectUtil.isEmpty(apsProcessOperationEquDo)){
+                if (ObjectUtil.isEmpty(apsProcessOperationEquDo)) {
                     needUpdate.setRollerid("");
-                }else {
+                } else {
                     needUpdate.setRollerid(apsProcessOperationEquDo.getRollerid());
                 }
             }
@@ -2050,7 +2090,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             needUpdate.setProcessworkshopid(req.getWorkshopId());
             needUpdate.setProcessworkshop(req.getWorkshopName());
             needUpdate.setPlanstartdate(nextStartDate);
-            needUpdate.setPlanenddate(DateUtil.offsetSecond(nextStartDate,(int)DateUtil.between(planstartdate,planenddate,DateUnit.SECOND)));
+            needUpdate.setPlanenddate(DateUtil.offsetSecond(nextStartDate, (int) DateUtil.between(planstartdate, planenddate, DateUnit.SECOND)));
             nextStartDate = needUpdate.getPlanenddate();
 //            needUpdateList.add(needUpdate);
             apsProcessOperationProcessEquService.updateById(needUpdate);
@@ -2064,7 +2104,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     apsProcessOperationProcessEquDo.getPlanenddate(),
                     new LinkedList<>());
         }
-        blankIdList.forEach(item->apsBlankOrderService.updateBlankDeliveryDate(null, item));
+        blankIdList.forEach(item -> apsBlankOrderService.updateBlankDeliveryDate(null, item));
 
 
         return R.ok();