Bläddra i källkod

aps-调度重排

sucheng 6 månader sedan
förälder
incheckning
0b35a297df

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

@@ -11,8 +11,8 @@ import java.util.Map;
 
 public interface ApsService {
 
-    void apsSchedule(List<ApsBlankOrderVo> apsBlankOrders, ApsTypeVo apsType, SysUserVo currentUser);
+    void apsSchedule(List<ApsBlankOrderVo> apsBlankOrders, ApsTypeVo apsType, SysUserVo currentUser,List<String> needUnLockProcessIdList);
 
-    ProductionScheduleVo apsProductionScheduleInit(List<ApsBlankOrderVo> apsBlankOrders, Date apsPlanStartDate);
+    ProductionScheduleVo apsProductionScheduleInit(List<ApsBlankOrderVo> apsBlankOrders, Date apsPlanStartDate,List<String> needUnLockProcessIdList);
 
 }

+ 3 - 3
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java

@@ -733,7 +733,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
      */
     @Override
     public void blankOrderAps(List<ApsBlankOrderVo> apsBlankOrders) {
-        apsService.apsSchedule(apsBlankOrders, null, null);
+        apsService.apsSchedule(apsBlankOrders, null, null,null);
     }
 
     /**
@@ -3267,7 +3267,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     public void insertSchedule(Map<String, Object> params) {
         List<ApsBlankOrderVo> apsBlankOrders = apsBlankOrderDao.getByOrderBlanckId(params.get("PRODUCTIONORDERID").toString(), params.get("BLANKORDERID").toString());
         if (apsBlankOrders != null && apsBlankOrders.size() > 0) {
-            apsService.apsSchedule(apsBlankOrders, new ApsTypeVo(), null);
+            apsService.apsSchedule(apsBlankOrders, new ApsTypeVo(), null,null);
         }
     }
 
@@ -4113,7 +4113,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             apsTypeVo.setThMergeMode("notThMergeBf");
             apsTypeVo.setConstraintMode("lz");
             //重新排程
-            apsService.apsSchedule(new ArrayList<>(), apsTypeVo, null);
+            apsService.apsSchedule(new ArrayList<>(), apsTypeVo, null,needUnLockProcessIdList);
         }
     }
 

+ 17 - 10
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONConfig;
 import cn.hutool.json.JSONUtil;
@@ -88,9 +89,10 @@ public class ApsServiceImpl implements ApsService {
      * Aps排程
      * @param apsBlankOrders
      * @param apsType cd:插单,lzcp:冷轧连续重排,mix:混合排程
+     * @param needUnLockProcessIdList 需要过滤的工序作业ID集合
      */
     @Override
-    public void apsSchedule(List<ApsBlankOrderVo> apsBlankOrders,ApsTypeVo apsType,SysUserVo currentUser) {
+    public void apsSchedule(List<ApsBlankOrderVo> apsBlankOrders,ApsTypeVo apsType,SysUserVo currentUser,List<String> needUnLockProcessIdList) {
         logger.info("**********排程请求开始**********");
         // 当前等路人所属工厂
         if(currentUser == null){
@@ -145,7 +147,7 @@ public class ApsServiceImpl implements ApsService {
                 }
                 // 冷轧连续性问题重排
                 if(apsType != null && StrUtil.isNotBlank(apsType.getMixIf()) && "mix".equals(apsType.getMixIf())){
-                    lzlxOrderSchedule(apsBlankOrders,currentUser,apsType);
+                    lzlxOrderSchedule(apsBlankOrders,currentUser,apsType,needUnLockProcessIdList);
                 }else{
                     apsOrderScheduleNew(apsBlankOrders,currentUser,apsType);
                 }
@@ -285,7 +287,7 @@ public class ApsServiceImpl implements ApsService {
                 dataMapOrder.put(bo.getId(),bo);
 
                 // 模型转换
-                ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(v,new Date());
+                ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(v,new Date(),null);
                 productionScheduleVos.add(productionScheduleVo);
                 dataMap.put(productionScheduleVo.getProductionScheduleId(),v);
 //                        int mergeThNum = mergeThNum(bo, productionScheduleVo);
@@ -364,7 +366,7 @@ public class ApsServiceImpl implements ApsService {
         Date finalApsPlanStartDate = apsPlanStartDate;
         if(cdorders != null && cdorders.size()>0){
             try{
-                apsOrderScheduleApsNew(cdorders,currentUser,allEqs, finalApsPlanStartDate,apsType);
+                apsOrderScheduleApsNew(cdorders,currentUser,allEqs, finalApsPlanStartDate,apsType,null);
             }catch (Exception e) {
                 e.printStackTrace();
                 logger.info("排程异常",e);
@@ -460,7 +462,7 @@ public class ApsServiceImpl implements ApsService {
                         }
                         return a;
                     });
-                    apsOrderScheduleApsNew(v,currentUser,allEqs, finalApsPlanStartDate,apsType);
+                    apsOrderScheduleApsNew(v,currentUser,allEqs, finalApsPlanStartDate,apsType,null);
                 }catch (Exception e) {
                     e.printStackTrace();
                     logger.info("排程异常",e);
@@ -490,7 +492,7 @@ public class ApsServiceImpl implements ApsService {
      * @param apsBlankOrders
      * @param currentUser
      */
-    private void lzlxOrderSchedule(List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser,ApsTypeVo apsType){
+    private void lzlxOrderSchedule(List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser,ApsTypeVo apsType,List<String> needUnLockProcessIdList){
         // 坯料计划排序
         Collections.sort(apsBlankOrders,(v1,v2)->{
             // 合金
@@ -579,10 +581,10 @@ public class ApsServiceImpl implements ApsService {
             }
         }
         Date finalApsPlanStartDate = apsPlanStartDate;
-        apsOrderScheduleApsNew(apsBlankOrders,currentUser,allEqs, finalApsPlanStartDate,apsType);
+        apsOrderScheduleApsNew(apsBlankOrders,currentUser,allEqs, finalApsPlanStartDate,apsType,needUnLockProcessIdList);
     }
 
-    private void apsOrderScheduleApsNew(List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser,Map<String,Equipment> allEqs,Date apsPlanStartDate,ApsTypeVo apsType){
+    private void apsOrderScheduleApsNew(List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser,Map<String,Equipment> allEqs,Date apsPlanStartDate,ApsTypeVo apsType,List<String> needUnLockProcessIdList){
         // 设备数据每批次开始清空
         allEqs.clear();
         // 排程前解锁所有待排程订单
@@ -630,7 +632,7 @@ public class ApsServiceImpl implements ApsService {
                 dataMapOrder.put(bo.getId(),bo);
 
                 // 模型转换
-                ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(v,apsPlanStartDate);
+                ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(v,apsPlanStartDate,needUnLockProcessIdList);
                 productionScheduleVos.add(productionScheduleVo);
                 dataMap.put(productionScheduleVo.getProductionScheduleId(),v);
 //                        int mergeThNum = mergeThNum(bo, productionScheduleVo);
@@ -855,7 +857,7 @@ public class ApsServiceImpl implements ApsService {
      * @return
      */
     @Override
-    public ProductionScheduleVo apsProductionScheduleInit(List<ApsBlankOrderVo> apsBlankOrders,Date apsPlanStartDate) {
+    public ProductionScheduleVo apsProductionScheduleInit(List<ApsBlankOrderVo> apsBlankOrders,Date apsPlanStartDate,List<String> needUnLockProcessIdList) {
         // 待排程坯料计划ID集合
         List<String> blankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
         // 查询当前坯料计划的历史排程明细
@@ -906,6 +908,11 @@ public class ApsServiceImpl implements ApsService {
                 Map<String, ProductionProcesses> lockHbPp = new HashMap<>();
                 // 转换工序模型数据
                 for (ApsProcessOperationDo operationDo : operationDos) {
+                    if (null != needUnLockProcessIdList){
+                        if (!needUnLockProcessIdList.contains(operationDo.getId())){
+                            continue;
+                        }
+                    }
                     processIdss.add(operationDo.getId());
                     ProductionProcesses processes = new ProductionProcesses();
                     // 工序所属订单