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

aps-甘特图修改工序作业明细bug修复testin1706

zhoudazhuang пре 9 месеци
родитељ
комит
44484dffec

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

@@ -635,6 +635,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
     public R updateDetails(JobDetailsVo jobDetailsVo) {
         ApsUtils.checkScheduling(null);
         List<String> affectedIdList = new ArrayList<>();
+        List<String> mergeWorkerIdList = new ArrayList<>();
         String id = jobDetailsVo.getId();
         affectedIdList.add(id);
         if (StringUtils.isBlank(id)) {
@@ -666,37 +667,81 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 return R.error("已开工的作业不可修改");
             }
         }
-        // 更新开工时间 jobDetailsVo
-        String equId = jobDetailsVo.getEquId();
-        String equName = jobDetailsVo.getEquName();
-        String oldEquId = apsProcessOperationProcessEquDo.getProcessdeviceid();
-        if (StringUtils.isNotBlank(equId)) {
-            apsProcessOperationProcessEquDo.setProcessdevice(equName);
-            apsProcessOperationProcessEquDo.setProcessdeviceid(equId);
-            apsProcessOperationProcessEquDo.setProcessworkshop(jobDetailsVo.getWorkshopName());
-            apsProcessOperationProcessEquDo.setProcessworkshopid(jobDetailsVo.getWorkshopId());
-        }
-        // 更新计划开工时间
-        Date planStartTime = jobDetailsVo.getPlanStartTime();
-        if (planStartTime != null) {
-            Date oldPlanstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
-            Date oldPlanenddate = apsProcessOperationProcessEquDo.getPlanenddate();
-            // 获取开工时间间隔=所选作业明细最早计划开工时间-所选加工开始时间
-            long timeInterval = DateUtil.between(planStartTime, oldPlanstartdate, DateUnit.SECOND, false);
-            apsProcessOperationProcessEquDo.setPlanstartdate(planStartTime);
-            // 自动计算计划完工时间=原完工时间+新计划开工时间-原计划开工时间
-            apsProcessOperationProcessEquDo.setPlanenddate(new Date(apsProcessOperationProcessEquDo.getPlanenddate().getTime() +
-                    jobDetailsVo.getPlanStartTime().getTime() - oldPlanstartdate.getTime()));
-            // 增加受影响的工序作业信息
-            affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo, oldPlanstartdate,
-                    oldPlanenddate, oldEquId, apsProcessOperationDo.getProcessway(),new ArrayList<>()));
-        }
+        if (apsProcessOperationDo!= null&&"合并加工".equals(apsProcessOperationDo.getProcessway())){
+            List<ApsProcessOperationProcessEquDo> changeApsProcessEquList = apsProcessOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
+                    .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, apsProcessOperationProcessEquDo.getProcessdeviceid())
+                    .eq(ApsProcessOperationProcessEquDo::getPlanstartdate,apsProcessOperationProcessEquDo.getPlanstartdate())
+                    .eq(ApsProcessOperationProcessEquDo::getProcessid,apsProcessOperationDo.getId()));
+            changeApsProcessEquList.forEach(info -> {
+                // 更新开工时间 jobDetailsVo
+                String equId = jobDetailsVo.getEquId();
+                String equName = jobDetailsVo.getEquName();
+                if (StringUtils.isNotBlank(equId)) {
+                    info.setProcessdevice(equName);
+                    info.setProcessdeviceid(equId);
+                    info.setProcessworkshop(jobDetailsVo.getWorkshopName());
+                    info.setProcessworkshopid(jobDetailsVo.getWorkshopId());
+                }
+                // 更新计划开工时间
+                Date planStartTime = jobDetailsVo.getPlanStartTime();
+                if (planStartTime != null) {
+                    Date oldPlanstartdate = info.getPlanstartdate();
+                    info.setPlanstartdate(planStartTime);
+                    // 自动计算计划完工时间=原完工时间+新计划开工时间-原计划开工时间
+                    info.setPlanenddate(new Date(info.getPlanenddate().getTime() +
+                            jobDetailsVo.getPlanStartTime().getTime() - oldPlanstartdate.getTime()));
+                }
+            });
+            //避免合并加工时,找到除去本身之外同一计划开工日期同一设备‘更新时间’更改之后存在冲突的工序作业明细
+            this.updateBatchById(changeApsProcessEquList);
+            changeApsProcessEquList.forEach(detail->{
+                //当工序作业为合并加工时处理工序作业明细冲突
+                String oldEquId = apsProcessOperationProcessEquDo.getProcessdeviceid();
+                Date oldPlanstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
+                Date oldPlanenddate = apsProcessOperationProcessEquDo.getPlanenddate();
+                // 增加受影响的工序作业信息
+                affectedIdList.addAll(checkProcessingTimeConflict(detail, oldPlanstartdate,
+                        oldPlanenddate, oldEquId, apsProcessOperationDo.getProcessway(),new ArrayList<>()));
+                // 判断是否存在设备不可用
+                inspectionEquipmentIsAvailable(detail, detail.getProcessdeviceid()
+                        , detail.getPlanstartdate(), detail.getPlanenddate());
+                if (!detail.getId().equals(apsProcessOperationProcessEquDo.getId())){
+                    mergeWorkerIdList.add(detail.getId());
+                }
+            });
+        }else {
+            // 更新开工时间 jobDetailsVo
+            String equId = jobDetailsVo.getEquId();
+            String equName = jobDetailsVo.getEquName();
+            String oldEquId = apsProcessOperationProcessEquDo.getProcessdeviceid();
+            if (StringUtils.isNotBlank(equId)) {
+                apsProcessOperationProcessEquDo.setProcessdevice(equName);
+                apsProcessOperationProcessEquDo.setProcessdeviceid(equId);
+                apsProcessOperationProcessEquDo.setProcessworkshop(jobDetailsVo.getWorkshopName());
+                apsProcessOperationProcessEquDo.setProcessworkshopid(jobDetailsVo.getWorkshopId());
+            }
+            // 更新计划开工时间
+            Date planStartTime = jobDetailsVo.getPlanStartTime();
+            if (planStartTime != null) {
+                Date oldPlanstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
+                Date oldPlanenddate = apsProcessOperationProcessEquDo.getPlanenddate();
+                // 获取开工时间间隔=所选作业明细最早计划开工时间-所选加工开始时间
+                long timeInterval = DateUtil.between(planStartTime, oldPlanstartdate, DateUnit.SECOND, false);
+                apsProcessOperationProcessEquDo.setPlanstartdate(planStartTime);
+                // 自动计算计划完工时间=原完工时间+新计划开工时间-原计划开工时间
+                apsProcessOperationProcessEquDo.setPlanenddate(new Date(apsProcessOperationProcessEquDo.getPlanenddate().getTime() +
+                        jobDetailsVo.getPlanStartTime().getTime() - oldPlanstartdate.getTime()));
+                // 增加受影响的工序作业信息
+                affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo, oldPlanstartdate,
+                        oldPlanenddate, oldEquId, apsProcessOperationDo.getProcessway(),new ArrayList<>()));
+            }
 
-        // 判断是否存在设备不可用
-        inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo, apsProcessOperationProcessEquDo.getProcessdeviceid()
-                , apsProcessOperationProcessEquDo.getPlanstartdate(), apsProcessOperationProcessEquDo.getPlanenddate());
+            // 判断是否存在设备不可用
+            inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo, apsProcessOperationProcessEquDo.getProcessdeviceid()
+                    , apsProcessOperationProcessEquDo.getPlanstartdate(), apsProcessOperationProcessEquDo.getPlanenddate());
 
-        this.updateById(apsProcessOperationProcessEquDo);
+            this.updateById(apsProcessOperationProcessEquDo);
+        }
         // 更新坯料交货期
 //        apsBlankOrderService.updateBlankDeliveryDate(null, apsProcessOperationDo.getBlankid());
 //        affectedIdList.addAll(jobDetailsVo.getReturnAboutIds());
@@ -704,6 +749,9 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         affectedIdList.addAll(jobDetailsVo.getReturnAboutIds());
         List<String> aboutIds= affectedIdList.stream().distinct().collect(Collectors.toList());
         aboutIds.addAll(apsBlankOrderService.updateBlankDeliveryDate(null, apsProcessOperationDo.getBlankid()));
+        if (!mergeWorkerIdList.isEmpty()){
+            aboutIds.addAll(mergeWorkerIdList);
+        }
         return R.ok(ganttService.getListById(aboutIds));
     }
 
@@ -1275,6 +1323,12 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         // 获取更新之前的存在冲突的工序作业
         List<ApsProcessOperationProcessEquDo> beforeUpdatingConflictId = this.baseMapper.getTimeOverlapByEquId(oldEquId,
                 apsProcessOperationProcessEquDo.getId(), oldPlanstartdate, oldPlanenddate, currentProcessWay);
+        log.info("参数旧的的设备id:{}", oldEquId);
+        log.info("参数工序作业明细主键:{}", apsProcessOperationProcessEquDo.getId());
+        log.info("参数旧的计划开工日期:{}", oldPlanstartdate);
+        log.info("参数旧的计划完工日期:{}", oldPlanenddate);
+        log.info("参数当前工序作业加工方式:{}", currentProcessWay);
+        log.info("获取更新之前的存在冲突的工序作业结果:{}", beforeUpdatingConflictId);
         List<ApsProcessOperationProcessEquDo> aboutProcessEquList = new ArrayList<>();
         if (!returnAboutIds.isEmpty()){
             aboutProcessEquList = (List<ApsProcessOperationProcessEquDo>) apsProcessOperationProcessEquService.listByIds(returnAboutIds);
@@ -1296,6 +1350,12 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 apsProcessOperationProcessEquDo.getProcessdeviceid(), apsProcessOperationProcessEquDo.getId(),
                 apsProcessOperationProcessEquDo.getPlanstartdate(), apsProcessOperationProcessEquDo.getPlanenddate(),
                 currentProcessWay);
+        log.info("参数新的的设备id:{}", apsProcessOperationProcessEquDo.getProcessdeviceid());
+        log.info("参数工序作业明细主键:{}", apsProcessOperationProcessEquDo.getId());
+        log.info("参数新的计划开工日期:{}", apsProcessOperationProcessEquDo.getPlanstartdate());
+        log.info("参数新的计划完工日期:{}", apsProcessOperationProcessEquDo.getPlanenddate());
+        log.info("参数当前工序作业加工方式:{}", currentProcessWay);
+        log.info("找到更新时间之后存在冲突的工序作业结果:{}", afterTheUpdateConflictId);
         affectedIdList.addAll(afterTheUpdateConflictId.stream().map(ApsProcessOperationProcessEquDo::getId).collect(Collectors.toList()));
         if (!afterTheUpdateConflictId.isEmpty()) {
             apsProcessOperationProcessEquDo.setHasconflict(LOCKMARK_Y);