Browse Source

aps-调度取值逻辑修改、推数据修改

sucheng 1 month ago
parent
commit
63694d7946

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

@@ -10,6 +10,7 @@ import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.vo.CriteriaQuery;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -73,9 +74,9 @@ public interface ApsBlankOrderService extends IService<ApsBlankOrderDo> {
 
     void apsScheduleRestart(Integer hour,String chongpaiStartDateStr,String chongpaiEndDateStr,SysUserVo currentUser, String blankId, Boolean haveLenZha, Boolean haveTuiHuo);
 
-    void sortLenZha(DateTime chongpaiEndDate, String tenantId);
+    void sortLenZha(DateTime chongpaiEndDate, String tenantId, Date lenzhaStartDate);
 
-    void sortTuiHuo(DateTime chongpaiEndDate, String tenantId);
+    void sortTuiHuo(DateTime chongpaiEndDate, String tenantId, Date tuihuoStartDate);
 
     void apsScheduleRestart2();
 

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

@@ -4653,6 +4653,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 blankIdList = new LinkedList<>(Arrays.asList(blankIds.split(",")));
             }
             if (haveLenZha) {
+                Date lenzhaStartDate = DateUtil.date();
                 try {
                     log.info("开始冷轧重排");
                     //冷轧重排
@@ -4678,9 +4679,10 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 }
                 log.info("开始推算冷轧调度时间之后的重叠数据");
                 //推算非退火、非铸轧的重叠数据,按序排列
-                sortLenZha(chongpaiEndDate, tenantId);
+                sortLenZha(chongpaiEndDate, tenantId, lenzhaStartDate);
             }
             if (haveTuiHuo) {
+                Date tuihuoStartDate = DateUtil.date();
                 try {
                     log.info("开始退火重排");
                     //退火重排
@@ -4706,7 +4708,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 }
                 log.info("开始推算退火调度时间之后的重叠数据");
                 //推算退火,按序排列
-                sortTuiHuo(chongpaiEndDate, tenantId);
+                sortTuiHuo(chongpaiEndDate, tenantId, tuihuoStartDate);
             }
             //调度排程结束
             //将之前锁定的作业和明细重新解锁
@@ -4729,7 +4731,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         }
     }
 
-    public void sortTuiHuo(DateTime chongpaiEndDate, String tenantId) {
+    public void sortTuiHuo(DateTime chongpaiEndDate, String tenantId, Date tuihuoStartDate) {
         //查询后续所有的明细(退火)
         List<ApsProcessOperationProcessEquDo> list = this.baseMapper.selectAllNeedSortTuiHuo(chongpaiEndDate, tenantId);
         //根据设备分组聚合
@@ -4742,6 +4744,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             List<ApsProcessOperationProcessEquDo> equList = map.get(key);
             //按照计划开工时间排序
             equList.sort(Comparator.comparing(ApsProcessOperationProcessEquDo::getPlanstartdate));
+            //取出刚刚排程完的数据(不需要移动)
+            List<ApsProcessOperationProcessEquDo> notMoveDataList = equList.stream().filter(item -> item.getModifydate().after(tuihuoStartDate)).collect(Collectors.toList());
 
             //设置基准
 //            LinkedList<ApsProcessOperationProcessEquDo> baseList = new LinkedList<>(equList);
@@ -4756,8 +4760,17 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = equList.get(i);
 //                //基准去除当前明细
 //                baseList.remove(apsProcessOperationProcessEquDo);
+                long count = notMoveDataList.stream().filter(item -> item.getId().equals(apsProcessOperationProcessEquDo.getId())).count();
+                if (count > 0) {
+                    baseList2.add(apsProcessOperationProcessEquDo);
+                    basePlanstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
+                    isChange = false;
+                    continue;
+                }
                 //如果是第一个,直接结束循环
                 if (i == 0) {
+                    //判断是否与不可修改的数据冲突,如果冲突,继续后推
+                    checkNotMoveData(notMoveDataList, apsProcessOperationProcessEquDo);
                     baseList2.add(apsProcessOperationProcessEquDo);
                     basePlanstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
                     isChange = false;
@@ -4779,6 +4792,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                         int between = (int) DateUtil.between(apsProcessOperationProcessEquDo.getPlanenddate(), apsProcessOperationProcessEquDo.getPlanstartdate(), DateUnit.SECOND);
                         DateTime newPlanEndDate = DateUtil.offsetSecond(needUpdateDo.getPlanstartdate(), between);
                         needUpdateDo.setPlanenddate(newPlanEndDate);
+                        //判断是否与不可修改的数据冲突,如果冲突,继续后推
+                        checkNotMoveData(notMoveDataList, needUpdateDo);
                         //待更新
                         needUpdateList.add(needUpdateDo);
                         //放入基准
@@ -4806,6 +4821,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     int between = (int) DateUtil.between(apsProcessOperationProcessEquDo.getPlanenddate(), apsProcessOperationProcessEquDo.getPlanstartdate(), DateUnit.SECOND);
                     DateTime newPlanEndDate = DateUtil.offsetSecond(needUpdateDo.getPlanstartdate(), between);
                     needUpdateDo.setPlanenddate(newPlanEndDate);
+                    //判断是否与不可修改的数据冲突,如果冲突,继续后推
+                    checkNotMoveData(notMoveDataList, needUpdateDo);
                     //待更新
                     needUpdateList.add(needUpdateDo);
                     //放入基准
@@ -4814,6 +4831,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     isChange = true;
                     newPlanStartDate = needUpdateDo.getPlanstartdate();
                 } else {//没有冲突,直接放入基准
+                    //判断是否与不可修改的数据冲突,如果冲突,继续后推
+                    checkNotMoveData(notMoveDataList, apsProcessOperationProcessEquDo);
                     baseList2.add(apsProcessOperationProcessEquDo);
                     basePlanstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
                     isChange = false;
@@ -5052,7 +5071,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
     //去除后续的冲突
     @Override
-    public void sortLenZha(DateTime chongpaiEndDate, String tenantId) {
+    public void sortLenZha(DateTime chongpaiEndDate, String tenantId, Date lenzhaStartDate) {
         //查询后续所有的明细(非退火、非铸轧)
         List<ApsProcessOperationProcessEquDo> list = this.baseMapper.selectAllNeedSortLenZha(chongpaiEndDate, tenantId);
         //根据设备分组聚合
@@ -5066,6 +5085,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             //按照计划开工时间排序
             equList.sort(Comparator.comparing(ApsProcessOperationProcessEquDo::getPlanstartdate));
 
+            //取出刚刚排程完的数据(不需要移动)
+            List<ApsProcessOperationProcessEquDo> notMoveDataList = equList.stream().filter(item -> item.getModifydate().after(lenzhaStartDate)).collect(Collectors.toList());
+
             //设置基准
 //            LinkedList<ApsProcessOperationProcessEquDo> baseList = new LinkedList<>(equList);
             //设置已排序基准
@@ -5073,10 +5095,17 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
             for (int i = 0; i < equList.size(); i++) {
                 ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = equList.get(i);
+                long count = notMoveDataList.stream().filter(item -> item.getId().equals(apsProcessOperationProcessEquDo.getId())).count();
+                if (count > 0) {
+                    baseList2.add(apsProcessOperationProcessEquDo);
+                    continue;
+                }
 //                //基准去除当前明细
 //                baseList.remove(apsProcessOperationProcessEquDo);
                 //如果是第一个,直接结束循环
                 if (i == 0) {
+                    //判断是否与不可修改的数据冲突,如果冲突,继续后推
+                    checkNotMoveData(notMoveDataList, apsProcessOperationProcessEquDo);
                     baseList2.add(apsProcessOperationProcessEquDo);
                     continue;
                 }
@@ -5092,11 +5121,15 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     int between = (int) DateUtil.between(apsProcessOperationProcessEquDo.getPlanenddate(), apsProcessOperationProcessEquDo.getPlanstartdate(), DateUnit.SECOND);
                     DateTime newPlanEndDate = DateUtil.offsetSecond(needUpdateDo.getPlanstartdate(), between);
                     needUpdateDo.setPlanenddate(newPlanEndDate);
+                    //判断是否与不可修改的数据冲突,如果冲突,继续后推
+                    checkNotMoveData(notMoveDataList, needUpdateDo);
                     //待更新
                     needUpdateList.add(needUpdateDo);
                     //放入基准
                     baseList2.add(needUpdateDo);
                 } else {//没有冲突,直接放入基准
+                    //判断是否与不可修改的数据冲突,如果冲突,继续后推
+                    checkNotMoveData(notMoveDataList, apsProcessOperationProcessEquDo);
                     baseList2.add(apsProcessOperationProcessEquDo);
                 }
             }
@@ -5106,6 +5139,24 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         }
     }
 
+    private void checkNotMoveData(List<ApsProcessOperationProcessEquDo> notMoveDataList, ApsProcessOperationProcessEquDo needUpdateDo) {
+        for (ApsProcessOperationProcessEquDo equDo : notMoveDataList) {
+            if (!needUpdateDo.getPlanenddate().after(equDo.getPlanstartdate())) {
+                break;
+            }else if (!needUpdateDo.getPlanstartdate().before(equDo.getPlanenddate())){
+            }else {
+                Date planstartdate = needUpdateDo.getPlanstartdate();
+                Date planenddate = needUpdateDo.getPlanenddate();
+                //移动开始时间为上一个的结束时间
+                needUpdateDo.setPlanstartdate(equDo.getPlanenddate());
+                //结束时间为当前的开始时间推算原来的加工时间(计划结束-计划开始)
+                int between = (int) DateUtil.between(planenddate, planstartdate, DateUnit.SECOND);
+                DateTime newPlanEndDate = DateUtil.offsetSecond(needUpdateDo.getPlanstartdate(), between);
+                needUpdateDo.setPlanenddate(newPlanEndDate);
+            }
+        }
+    }
+
     private void tuihuoChongpai(DateTime chongpaiStartDate, DateTime chongpaiEndDate, ApsScheduleConfigDo apsScheduleConfigDo, SysUserVo currentUser, List<String> blankIdsList) {
         //错误数据纠正挪动
         this.baseMapper.moveErrorNoPreviousProcessEqu(chongpaiStartDate, chongpaiEndDate, CXCommonUtils.getCurrentUserFactoryId(currentUser), "退火");

+ 4 - 2
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsBlankOrderDao.xml

@@ -659,7 +659,7 @@
           and apo.PROCESS in ('中退','成退','小卷成退')
           and apope.WORKSTATUS = '待开工'
           and apope.PLANSTARTDATE >= #{chongpaiStartDate} -- 调度开始时间之后计划开工
-          AND apope.PLANENDDATE &lt;= #{chongpaiEndDate}
+          AND apope.PLANSTARTDATE &lt;= #{chongpaiEndDate}
         <if test="blankIdsList != null and blankIdsList.size > 0">
             AND apope.BLANKID IN
             <foreach collection="blankIdsList" item="item" open="(" close=")" separator=",">
@@ -681,7 +681,7 @@
         and apo.PROCESS not in ('铸轧','中退','成退','小卷成退')
         and apope.WORKSTATUS = '待开工'
         and apope.PLANSTARTDATE >= #{chongpaiStartDate} -- 调度开始时间之后计划开工
-        AND apope.PLANENDDATE &lt;= #{chongpaiEndDate}
+        AND apope.PLANSTARTDATE &lt;= #{chongpaiEndDate}
         <if test="blankIdsList != null and blankIdsList.size > 0">
             AND apope.BLANKID IN
             <foreach collection="blankIdsList" item="item" open="(" close=")" separator=",">
@@ -701,6 +701,7 @@
           AND apope.TENANTID = #{tenantId}
           AND apo.PROCESS NOT IN ('铸轧','中退','成退','小卷成退')
           AND apope.PLANENDDATE is not null
+          AND apope.PROCESSDEVICEID != '' AND apope.PROCESSDEVICEID is not null
     </select>
     <select id="selectAllNeedSortTuiHuo"
             resultType="com.rongwei.bsentity.domain.ApsProcessOperationProcessEquDo">
@@ -714,6 +715,7 @@
           AND apope.TENANTID = #{tenantId}
           AND apo.PROCESS IN ('中退','成退','小卷成退')
           AND apope.PLANENDDATE is not null
+          AND apope.PROCESSDEVICEID != '' AND apope.PROCESSDEVICEID is not null
     </select>
     <select id="getNeedScheduleList" resultType="com.rongwei.bsentity.vo.ApsBlankOrderVo">
         SELECT

+ 5 - 3
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsBlankOrderController.java

@@ -272,9 +272,11 @@ public class ApsBlankOrderController {
      * 将制定时间后的数据顺序重排
      */
     @GetMapping("/chongPaiByEndDate")
-    public R chongPaiByEndDate(@RequestParam("chongpaiEndDate") String chongpaiEndDate) {
-        apsBlankOrderService.sortLenZha(DateUtil.parseDate(chongpaiEndDate), CXCommonUtils.getCurrentUserFactoryId(null));
-        apsBlankOrderService.sortTuiHuo(DateUtil.parseDate(chongpaiEndDate), CXCommonUtils.getCurrentUserFactoryId(null));
+    public R chongPaiByEndDate(@RequestParam("chongpaiEndDate") String chongpaiEndDate,
+                               @RequestParam("tenantId") String tenantId,
+                               @RequestParam("startDate") String startDate) {
+//        apsBlankOrderService.sortLenZha(DateUtil.parseDate(chongpaiEndDate), tenantId,DateUtil.parseDate(startDate));
+        apsBlankOrderService.sortTuiHuo(DateUtil.parseDateTime(chongpaiEndDate), tenantId,DateUtil.parseDateTime(startDate));
         return R.ok();
     }