xiahan 1 год назад
Родитель
Сommit
b34e8c2392

+ 40 - 2
bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java

@@ -627,15 +627,53 @@ public class SaveConstans {
     }
 
     /**
-     * 冲突描述
+     * 强制冲突描述
      */
-    public static class ConflictDescription {
+    public static class ForcedConflictsDescription {
+        /**
+         * 工序作业所需的设备必须在工序的可选设备之内
+         */
+        public static final String EQ_TYPE_SAME="工序作业所需的设备必须在工序的可选设备之内";
+        /**
+         * 第一步工序作业要小于开始排程时间
+         */
+        public static final String NO_PRE_GB_AFTER_NOW="第一步工序作业要小于开始排程时间";
+        /**
+         * 当前工序作业开始时间违反上一步工序作业最大等待时间限制
+         */
+        public static final String HAS_ONE_PRE_GB_AFTER_NOW="当前工序作业开始时间违反上一步工序作业最大等待时间限制";
+        /**
+         * 设备已排产时间段不可排产其它工序作业
+         */
+        public static final String EQUIPMENT_RUN_TIME="设备已排产时间段不可排产其它工序作业";
+        /**
+         * 上一工序作业流转时间不能大于上一工序作业最大等待时间
+         */
+        public static final String LZ_TIME_LESS_MAX_WAIT="上一工序作业流转时间不能大于上一工序作业最大等待时间";
+        /**
+         * 排程过程中出现相同设备排产时间段有交叉
+         */
+        public static final String EQ_TIME_CROSS="排程过程中出现相同设备排产时间段有交叉";
+
         /**
          * 加工时间冲突描述
          */
         public static final String CONFLICTING_PROCESSING_TIMES = "与其他作业加工时间重叠";
     }
 
+    /**
+     * 非强制冲突描述
+     */
+    public static class UNForcedConflictsDescription {
+        /**
+         * 订单交货期不满足
+         */
+        public static final String DELIVERY_DATE="订单交货期不满足";
+        /**
+         * 订单的连续生产要求不满足
+         */
+        public static final String SERIES_PRODUCE="订单的连续生产要求不满足";
+    }
     /**
      * 产品类型的外观 字典ID
      */

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

@@ -14,8 +14,6 @@ import com.rongwei.bscommon.sys.service.*;
 import com.rongwei.bscommon.sys.utils.ApsUtils;
 import com.rongwei.bsentity.domain.*;
 import com.rongwei.bsentity.vo.*;
-import com.rongwei.rwadmincommon.system.domain.SysOrganizationDo;
-import com.rongwei.rwadmincommon.system.vo.SysOrganizationVo;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.utils.SecurityUtil;
@@ -34,11 +32,10 @@ import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
-import static com.rongwei.safecommon.utils.SaveConstans.ConflictDescription.CONFLICTING_PROCESSING_TIMES;
+import static com.rongwei.safecommon.utils.SaveConstans.ForcedConflictsDescription.CONFLICTING_PROCESSING_TIMES;
 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.MINUS_ONE;
 import static com.rongwei.safecommon.utils.SaveConstans.ProductionStatus.*;
 
 /**
@@ -391,39 +388,26 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             // 找到更新时间之后存在冲突的工序作业
             List<ApsProcessOperationProcessEquDo> afterTheUpdateConflictId = this.baseMapper.getConflictId(changeStartTimeVo.getQeuId(), changeStartTimeVo.getId(),
                     changeStartTimeVo.getPlanStartTime(), changeStartTimeVo.getPlanEndTime());
-            if (!beforeUpdatingConflictId.isEmpty()) {
-                beforeUpdatingConflictId.forEach(info->{
-                    String conflictdes = info.getConflictdes();
-                    if(StringUtils.isNotBlank(conflictdes)){
-                        List<String> conflictdeList = new ArrayList<>(Arrays.asList(conflictdes.split(",")));
-                        // 删除加工时间冲突描述
-                        conflictdeList.remove(CONFLICTING_PROCESSING_TIMES);
-                        if(conflictdeList.isEmpty()){
-                            info.setHasconflict(LOCKMARK_N);
-                        }
-                        info.setConflictdes(CollUtil.join(conflictdeList, ","));
-                    }
-                });
-                this.updateBatchById(beforeUpdatingConflictId);
-            }
+
             if (!afterTheUpdateConflictId.isEmpty()) {
                 processEquDo.setHasconflict(LOCKMARK_Y);
-                processEquDo.setConflictdes(CONFLICTING_PROCESSING_TIMES);
-                afterTheUpdateConflictId.forEach(info->{
-                    info.setHasconflict(LOCKMARK_Y);
-                    String conflictdes = info.getConflictdes();
-                    if(StringUtils.isNotBlank(conflictdes)){
-                        List<String> conflictdeList = new ArrayList<>(Arrays.asList(conflictdes.split(",")));
-                        if(!conflictdeList.contains(CONFLICTING_PROCESSING_TIMES)){
-                            conflictdeList.add(CONFLICTING_PROCESSING_TIMES);
-                        }
-                        info.setConflictdes(CollUtil.join(conflictdeList, ","));
-                    } else {
-                        info.setConflictdes(CONFLICTING_PROCESSING_TIMES);
-                    }
-                });
-                this.updateBatchById(afterTheUpdateConflictId);
+                // 更当前工序作业增加新的冲突
+                String newConflictsDesc = addNewConflictsDesc(processEquDo.getConflictdes(), CONFLICTING_PROCESSING_TIMES);
+                processEquDo.setConflictdes(newConflictsDesc);
+                updateProcessEquAfterAddConflictsDesc(afterTheUpdateConflictId,CONFLICTING_PROCESSING_TIMES);
+            }else{
+                String newConflictsDesc = removeConflictsDesc(processEquDo.getConflictdes(), CONFLICTING_PROCESSING_TIMES);
+                processEquDo.setConflictdes(newConflictsDesc);
+                processEquDo.setHasconflict(StringUtils.isBlank(processEquDo.getConflictdes()) &&
+                        StringUtils.isBlank(processEquDo.getSoftconflictdes()) ?
+                        LOCKMARK_N : LOCKMARK_Y);
+            }
+
+            if (!beforeUpdatingConflictId.isEmpty()) {
+                updateProcessEquBeforeAddConflictsDesc(beforeUpdatingConflictId,CONFLICTING_PROCESSING_TIMES);
             }
+
+
             processEquDo.setPlanstartdate(changeStartTimeVo.getPlanStartTime());
             processEquDo.setPlanenddate(changeStartTimeVo.getPlanEndTime());
             this.updateById(processEquDo);
@@ -496,39 +480,26 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     apsProcessOperationProcessEquDo.getProcessdeviceid(), id,
                     apsProcessOperationProcessEquDo.getPlanstartdate(), apsProcessOperationProcessEquDo.getPlanenddate());
 
-            if (!beforeUpdatingConflictId.isEmpty()) {
-                beforeUpdatingConflictId.forEach(info -> {
-                    String conflictdes = info.getConflictdes();
-                    if (StringUtils.isNotBlank(conflictdes)) {
-                        List<String> conflictdeList = new ArrayList<>(Arrays.asList(conflictdes.split(",")));
-                        // 删除加工时间冲突描述
-                        conflictdeList.remove(CONFLICTING_PROCESSING_TIMES);
-                        if (conflictdeList.isEmpty()) {
-                            info.setHasconflict(LOCKMARK_N);
-                        }
-                        info.setConflictdes(CollUtil.join(conflictdeList, ","));
-                    }
-                });
-                this.updateBatchById(beforeUpdatingConflictId);
-            }
             if (!afterTheUpdateConflictId.isEmpty()) {
                 apsProcessOperationProcessEquDo.setHasconflict(LOCKMARK_Y);
-                apsProcessOperationProcessEquDo.setConflictdes(CONFLICTING_PROCESSING_TIMES);
-                afterTheUpdateConflictId.forEach(info -> {
-                    info.setHasconflict(LOCKMARK_Y);
-                    String conflictdes = info.getConflictdes();
-                    if (StringUtils.isNotBlank(conflictdes)) {
-                        List<String> conflictdeList = new ArrayList<>(Arrays.asList(conflictdes.split(",")));
-                        if (!conflictdeList.contains(CONFLICTING_PROCESSING_TIMES)) {
-                            conflictdeList.add(CONFLICTING_PROCESSING_TIMES);
-                        }
-                        info.setConflictdes(CollUtil.join(conflictdeList, ","));
-                    } else {
-                        info.setConflictdes(CONFLICTING_PROCESSING_TIMES);
-                    }
-                });
+                // 更当前工序作业增加新的冲突
+                String newConflictsDesc = addNewConflictsDesc(apsProcessOperationProcessEquDo.getConflictdes(), CONFLICTING_PROCESSING_TIMES);
+                apsProcessOperationProcessEquDo.setConflictdes(newConflictsDesc);
+                updateProcessEquAfterAddConflictsDesc(afterTheUpdateConflictId,CONFLICTING_PROCESSING_TIMES);
                 this.updateBatchById(afterTheUpdateConflictId);
+            }else{
+                // 更当前工序作业增加新的冲突
+                String newConflictsDesc = removeConflictsDesc(apsProcessOperationProcessEquDo.getConflictdes(), CONFLICTING_PROCESSING_TIMES);
+                apsProcessOperationProcessEquDo.setConflictdes(newConflictsDesc);
+                apsProcessOperationProcessEquDo.setHasconflict(StringUtils.isBlank(apsProcessOperationProcessEquDo.getConflictdes()) &&
+                        StringUtils.isBlank(apsProcessOperationProcessEquDo.getSoftconflictdes()) ?
+                        LOCKMARK_N : LOCKMARK_Y);
             }
+
+            if (!beforeUpdatingConflictId.isEmpty()) {
+                updateProcessEquBeforeAddConflictsDesc(beforeUpdatingConflictId,CONFLICTING_PROCESSING_TIMES);
+            }
+
         }
         this.updateById(apsProcessOperationProcessEquDo);
         return R.ok();
@@ -689,6 +660,82 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             }
         }
     }
+
+    /**
+     * 更新设备或者时间之后 更新冲突描述
+     * @param beforeUpdatingConflictId 当前作业更新设备或者时间之后与该作业存在冲突的工序作业信息
+     * @param removeConflictsDesc 需要被删除的冲突描述
+     */
+    public void updateProcessEquBeforeAddConflictsDesc(List<ApsProcessOperationProcessEquDo> beforeUpdatingConflictId,
+                                                      String removeConflictsDesc) {
+        if (beforeUpdatingConflictId.isEmpty()) {
+            return;
+        }
+        beforeUpdatingConflictId.forEach(info->{
+            // 判断是否和其他工序作业明细存在从头
+            List<ApsProcessOperationProcessEquDo> conflictId = this.baseMapper.getConflictId(info.getProcessdeviceid(), info.getId(), info.getPlanstartdate(), info.getPlanenddate());
+            if(!conflictId.isEmpty()){
+                info.setConflictdes(removeConflictsDesc(info.getConflictdes(), removeConflictsDesc));
+                info.setHasconflict(StringUtils.isBlank(info.getConflictdes()) &&
+                        StringUtils.isBlank(info.getSoftconflictdes()) ?
+                        LOCKMARK_N : LOCKMARK_Y);
+            }
+
+        });
+        this.updateBatchById(beforeUpdatingConflictId);
+    }
+
+
+    /**
+     * 更新设备或者时间之后 更新冲突描述
+     * @param afterTheUpdateConflictId 当前作业更新设备或者时间之后与该作业存在冲突的工序作业信息
+     * @param conflictsDesc 冲突描述
+     */
+    public void updateProcessEquAfterAddConflictsDesc(List<ApsProcessOperationProcessEquDo> afterTheUpdateConflictId,
+                                                      String conflictsDesc) {
+        if (afterTheUpdateConflictId.isEmpty()) {
+            return;
+        }
+        afterTheUpdateConflictId.forEach(info -> {
+            String newConflictsDesc = addNewConflictsDesc(info.getConflictdes(), conflictsDesc);
+            info.setConflictdes(newConflictsDesc);
+            info.setHasconflict(StringUtils.isBlank(info.getConflictdes()) && StringUtils.isBlank(info.getSoftconflictdes()) ?
+                    LOCKMARK_N : LOCKMARK_Y);
+        });
+        this.updateBatchById(afterTheUpdateConflictId);
+    }
+
+    /**
+     *  增加 新的冲突
+     * @param oldConflictDesc 工序作业的旧冲突
+     * @param newConflictDesc 需要新增的冲突
+     * @return
+     */
+    public String addNewConflictsDesc(String oldConflictDesc, String newConflictDesc){
+        if(StringUtils.isBlank(oldConflictDesc)){
+            return newConflictDesc;
+        }
+        List<String> conflictdeList = new ArrayList<>(Arrays.asList(oldConflictDesc.split(";")));
+        if (!conflictdeList.contains(newConflictDesc)) {
+            conflictdeList.add(newConflictDesc);
+        }
+       return CollUtil.join(conflictdeList, ";");
+    }
+
+    /**
+     * 删除旧冲突
+     * @param oldConflictDesc 工序作业的旧冲突
+     * @param removeConflictDesc 需要删除的冲突
+     * @return
+     */
+    public String removeConflictsDesc(String oldConflictDesc, String removeConflictDesc){
+        if(StringUtils.isBlank(oldConflictDesc)){
+            return oldConflictDesc;
+        }
+        List<String> conflictdeList = new ArrayList<>(Arrays.asList(oldConflictDesc.split(";")));
+        conflictdeList.remove(removeConflictDesc);
+        return CollUtil.join(conflictdeList, ";");
+    }
 }
 
 

+ 2 - 2
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/GanttVos.java

@@ -145,10 +145,10 @@ public class GanttVos {
     /**
      *非强制冲突描述
      */
-    private String conflictdes;
+    private String conflictdes ="";
 
     /**
      * 强制冲突描述
      */
-    private String softconflictdes;
+    private String softconflictdes  ="";
 }