Procházet zdrojové kódy

feature 修改清空冲突的逻辑

xiahan před 1 rokem
rodič
revize
98e7a3d7fe

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

@@ -96,6 +96,11 @@ public interface ApsProcessOperationProcessEquDao extends BaseMapper<ApsProcessO
 
     @Select("select * from aps_process_operation_process_equ where PROCESSID = #{processoperationid} AND STARTINGROLL > 0 order by ACTUALSTARTDATE limit 1")
     ApsProcessOperationProcessEquDo selectMinStartWorkDate(@Param("processoperationid") String processoperationid);
+
+    List<ApsProcessOperationProcessEquDo> getTimeOverlapByEquId(@Param("equId") String equId,
+                                                                @Param("id") String id,
+                                                                @Param("oldStartDate")  Date oldStartDate,
+                                                                @Param("oldEndDate")  Date oldEndDate);
 }
 
 

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

@@ -458,7 +458,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             updateConflictVoList.forEach(data -> {
                 ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = data.getApsProcessOperationProcessEquDo();
                 affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
-                        data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getCurrentProcessWay()));
+                        data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getOldEquId(), data.getCurrentProcessWay()));
                 // 判断是否存在设备不可用
                 inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
                         apsProcessOperationProcessEquDo.getProcessdeviceid(),
@@ -540,11 +540,10 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                 throw new CustomException("该作业已发布,不能调整开工时间");
             }
             blankIdSet.add(operationDo.getBlankid());
-
+            vo.setOldEquId(processEquDo.getProcessdeviceid());
             if (StringUtils.isNotBlank(changeStartTimeVo.getEquId())) {
                 processEquDo.setProcessdevice(changeStartTimeVo.getEquId());
             }
-
             if (StringUtils.isNotBlank(changeStartTimeVo.getEquName())) {
                 processEquDo.setProcessdeviceid(changeStartTimeVo.getEquName());
             }
@@ -554,9 +553,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             processEquDo.setPlanstartdate(changeStartTimeVo.getPlanStartTime());
             processEquDo.setPlanenddate(changeStartTimeVo.getPlanEndTime());
             vo.setApsProcessOperationProcessEquDo(processEquDo);
-            vo.setOldEquId(changeStartTimeVo.getEquId());
             vo.setOldPlanStartdate(processEquDo.getPlanenddate());
-
             updateConflictVos.add(vo);
             this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
                     .eq(ApsProcessOperationProcessEquDo::getId, id)
@@ -569,7 +566,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         updateConflictVos.forEach(data -> {
             ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = data.getApsProcessOperationProcessEquDo();
             affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
-                    data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getCurrentProcessWay()));
+                    data.getOldPlanStartdate(), data.getOldPlanEnddate(),data.getOldEquId(), data.getCurrentProcessWay()));
             // 判断是否存在设备不可用
             inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
                     apsProcessOperationProcessEquDo.getProcessdeviceid(),
@@ -647,7 +644,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     jobDetailsVo.getPlanStartTime().getTime() - oldPlanstartdate.getTime()));
             // 增加受影响的工序作业信息
             affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo, oldPlanstartdate,
-                    oldPlanenddate, apsProcessOperationDo.getProcessway()));
+                    oldPlanenddate, oldEquId, apsProcessOperationDo.getProcessway()));
         }
 
         // 判断是否存在设备不可用
@@ -824,21 +821,31 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
      * @param removeConflictsDesc      需要被删除的冲突描述
      */
     public void updateProcessEquBeforeAddConflictsDesc(List<ApsProcessOperationProcessEquDo> beforeUpdatingConflictId,
-                                                       String removeConflictsDesc, String processway) {
+                                                       String removeConflictsDesc, String processway,
+                                                       Date newPlanStartDate,
+                                                       Date newOldEndDate) {
         if (beforeUpdatingConflictId.isEmpty()) {
             return;
         }
         beforeUpdatingConflictId.forEach(info -> {
-            // 判断是否和其他工序作业明细存在冲突
-            List<ApsProcessOperationProcessEquDo> conflictId = this.baseMapper.getConflictId(info.getProcessdeviceid(),
-                    info.getId(), info.getPlanstartdate(), info.getPlanenddate(), processway);
-            if (!conflictId.isEmpty()) {
+//            // 判断是否和其他工序作业明细存在冲突
+//            List<ApsProcessOperationProcessEquDo> conflictId = this.baseMapper.getConflictId(info.getProcessdeviceid(),
+//                    info.getId(), info.getPlanstartdate(), info.getPlanenddate(), processway);
+//            if (!conflictId.isEmpty()) {
+//                info.setConflictdes(removeConflictsDesc(info.getConflictdes(), removeConflictsDesc));
+//                info.setHasconflict(StringUtils.isBlank(info.getConflictdes()) &&
+//                        StringUtils.isBlank(info.getSoftconflictdes()) ?
+//                        LOCKMARK_N : LOCKMARK_Y);
+//            }
+            if(info.getPlanstartdate().equals(newPlanStartDate)){
                 info.setConflictdes(removeConflictsDesc(info.getConflictdes(), removeConflictsDesc));
                 info.setHasconflict(StringUtils.isBlank(info.getConflictdes()) &&
                         StringUtils.isBlank(info.getSoftconflictdes()) ?
                         LOCKMARK_N : LOCKMARK_Y);
+            }else{
+                info.setConflictdes(addNewConflictsDesc(info.getConflictdes(), removeConflictsDesc));
+                info.setHasconflict(LOCKMARK_Y);
             }
-
         });
         this.updateBatchById(beforeUpdatingConflictId);
     }
@@ -919,28 +926,34 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
      * @return
      */
     public List<String> checkProcessingTimeConflict(ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo,
-                                                    Date oldPlanstartdate, Date oldPlanenddate, String currentProcessWay) {
+                                                    Date oldPlanstartdate, Date oldPlanenddate, String oldEquId,
+                                                    String currentProcessWay) {
         // 受影响的工序作业Id
         List<String> affectedIdList = new ArrayList<>();
-        // 获取更新之前的存在冲突的工序作业
-        List<ApsProcessOperationProcessEquDo> beforeUpdatingConflictId = this.baseMapper.getConflictId(
-                apsProcessOperationProcessEquDo.getProcessdeviceid(), apsProcessOperationProcessEquDo.getId(),
-                oldPlanstartdate, oldPlanenddate, currentProcessWay);
 
-        affectedIdList.addAll(beforeUpdatingConflictId.stream().map(ApsProcessOperationProcessEquDo::getId).collect(Collectors.toList()));
+        List<ApsProcessOperationProcessEquDo> beforeUpdatingConflictId = null;
+        // 如果当前工序是合并加工 需要获取在修改之前存在中途的数据
+        if (PROCESS_WAY_MERGE.equals(currentProcessWay)) {
+            // 获取更新之前的存在冲突的工序作业
+            beforeUpdatingConflictId = this.baseMapper.getTimeOverlapByEquId(oldEquId, apsProcessOperationProcessEquDo.getId(), oldPlanstartdate, oldPlanenddate);
+        }
+
+        if (beforeUpdatingConflictId != null && !beforeUpdatingConflictId.isEmpty()) {
+            affectedIdList.addAll(beforeUpdatingConflictId.stream().map(ApsProcessOperationProcessEquDo::getId).collect(Collectors.toList()));
+            updateProcessEquBeforeAddConflictsDesc(beforeUpdatingConflictId, EQ_TIME_CROSS, currentProcessWay,
+                    apsProcessOperationProcessEquDo.getPlanstartdate(),
+                    apsProcessOperationProcessEquDo.getPlanenddate());
+        }
+
         // 找到更新时间之后存在冲突的工序作业
         List<ApsProcessOperationProcessEquDo> afterTheUpdateConflictId = this.baseMapper.getConflictId(
                 apsProcessOperationProcessEquDo.getProcessdeviceid(), apsProcessOperationProcessEquDo.getId(),
                 apsProcessOperationProcessEquDo.getPlanstartdate(), apsProcessOperationProcessEquDo.getPlanenddate(),
                 currentProcessWay);
         affectedIdList.addAll(afterTheUpdateConflictId.stream().map(ApsProcessOperationProcessEquDo::getId).collect(Collectors.toList()));
-        if (!beforeUpdatingConflictId.isEmpty()) {
-            updateProcessEquBeforeAddConflictsDesc(beforeUpdatingConflictId, EQ_TIME_CROSS, currentProcessWay);
-        }
-
         if (!afterTheUpdateConflictId.isEmpty()) {
             apsProcessOperationProcessEquDo.setHasconflict(LOCKMARK_Y);
-            // 更当前工序作业增加新的冲突
+            // 更新当前工序作业增加新的冲突
             String newConflictsDesc = addNewConflictsDesc(apsProcessOperationProcessEquDo.getConflictdes(), EQ_TIME_CROSS);
             apsProcessOperationProcessEquDo.setConflictdes(newConflictsDesc);
             updateProcessEquAfterAddConflictsDesc(afterTheUpdateConflictId, EQ_TIME_CROSS);

+ 13 - 1
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationProcessEquDao.xml

@@ -436,7 +436,7 @@
             apl.ID as productlineid
         FROM
             aps_process_operation_process_equ a1
-                LEFT JOIN aps_resources_equipment ape on ape.EQUIPMENTID = a1.PROCESSDEVICEID AND ape.DELETED = '0'
+            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'
             left join asp_check_items b on a1.PROCESSDEVICEID =b.ID
         WHERE
@@ -449,4 +449,16 @@
             b.CHECKITEMTYPE,
             a1.PROCESSDEVICE
     </select>
+    <select id="getTimeOverlapByEquId" resultType="com.rongwei.bsentity.domain.ApsProcessOperationProcessEquDo">
+        select apope.*
+        from aps_process_operation_process_equ apope
+        left join aps_process_operation app on apope.PROCESSID = app.ID and app.DELETED='0'
+        <where>
+              apope.ID != #{id}
+            AND  apope.PROCESSDEVICEID =#{equId}
+            and  app.PROCESSWAY='合并加工'
+            and ( #{oldStartDate} BETWEEN apope.PLANSTARTDATE AND  apope.PLANENDDATE
+            OR  #{oldEndDate} BETWEEN apope.PLANSTARTDATE AND  apope.PLANENDDATE )
+        </where>
+    </select>
 </mapper>