瀏覽代碼

aps-排程结束后,查询修改时间在排程开始-排程结束之间的待开工的明细,判断其冲突

sucheng 5 月之前
父節點
當前提交
ea80742400

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

@@ -132,6 +132,8 @@ public interface ApsProcessOperationProcessEquDao extends BaseMapper<ApsProcessO
     int selectHaveOtherDevice2(@Param("processdeviceid") String processdeviceid,@Param("heatNumber") String heatNumber,@Param("yearMonth") String yearMonth);
 
     void repairePlanStartDate(@Param("userId") String userId,@Param("userName")String userName);
+
+    List<ApsProcessOperationProcessEquCheckVo> getNeedCheckEquList(@Param("startTime") DateTime startTime,@Param("endTime") DateTime endTime, @Param("tenantId") String tenantId);
 }
 
 

+ 10 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsProcessOperationProcessEquService.java

@@ -5,6 +5,7 @@ import com.rongwei.bsentity.domain.ApsProcessOperationProcessEquDo;
 import com.rongwei.bsentity.vo.*;
 import com.rongwei.rwcommon.base.R;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -29,4 +30,13 @@ public interface ApsProcessOperationProcessEquService extends IService<ApsProces
     R workshopLocked(OrderLockVo orderLockVo);
 
     R scheduling(ChangingScheduleVo req);
+
+    void inspectionEquipmentIsAvailable(ApsProcessOperationProcessEquDo processEquDo,
+                                        String equId, Date startDate, Date endDate,
+                                        List<String> affectedIdList);
+
+    List<String> checkProcessingTimeConflict(ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo,
+                                             Date oldPlanstartdate, Date oldPlanenddate,
+                                             String oldEquId, String currentProcessWay, List<String> returnAboutIds);
+
 }

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

@@ -290,7 +290,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R changingWires(List<ChangingWiresVo> changingWiresVos) {
-        ApsUtils.checkScheduling(null);
+//        ApsUtils.checkScheduling(null);
         if (changingWiresVos.isEmpty()) {
             log.error("换线作业的工序作业不为空");
             return R.error("工序作业不能为空");
@@ -934,7 +934,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
     @Transactional(rollbackFor = Exception.class)
     public R changeStartTime(List<ChangeStartTimeVo> changeStartTimeVos) {
         /// 设计到修改的工序作业ID
-        ApsUtils.checkScheduling(null);
+//        ApsUtils.checkScheduling(null);
         List<String> affectedIdList = new ArrayList<>();
         List<UpdateConflictVo> updateConflictVos = new ArrayList<>();
         Set<String> blankIdSet = new HashSet<>();
@@ -1027,7 +1027,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R updateDetails(JobDetailsVo jobDetailsVo) {
-        ApsUtils.checkScheduling(null);
+//        ApsUtils.checkScheduling(null);
         List<String> affectedIdList = new ArrayList<>();
         List<String> mergeWorkerIdList = new ArrayList<>();
         String id = jobDetailsVo.getId();
@@ -1169,7 +1169,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
     @Transactional(rollbackFor = Exception.class)
     public R splitDetails(List<ProcessOperationDetailSplitVo> processOperationDetailSplitVos) {
         log.debug("开始执行工序作业明细指定卷数拆分逻辑");
-        ApsUtils.checkScheduling(null);
+//        ApsUtils.checkScheduling(null);
         boolean qtyError = processOperationDetailSplitVos.stream().anyMatch(data -> data.getSplitQty() == 0);
         if (qtyError) {
             log.error("存在拆分数量为0的工序作业明细数据");
@@ -1890,39 +1890,33 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                                                     String oldEquId, String currentProcessWay, List<String> returnAboutIds) {
         // 受影响的工序作业Id
         List<String> affectedIdList = new ArrayList<>();
-        //获取更新之前 所在设备 可能存在冲突的所有工序作业:前5天和后5天
-        Date olddate1 = DateUtil.offsetDay(oldPlanstartdate, -5);
-        Date olddate2 = DateUtil.offsetDay(oldPlanenddate, 5);
-        List<ProcessVo> oldList = this.baseMapper.selectMyProcessVo(oldEquId, olddate1, olddate2);
-//        for (ProcessVo item : oldList) {
-//            if (item.getProcessEquId().equals(apsProcessOperationProcessEquDo.getId())) {
-//                item.setPlanStartTime(apsProcessOperationProcessEquDo.getPlanstartdate());
-//                item.setPlanEndTime(apsProcessOperationProcessEquDo.getPlanenddate());
-//            }
-//        }
-        List<ProcessVo> needRemoveTimeOverLapList = checkNeedRemove(oldList,
-                oldPlanstartdate,
-                oldPlanenddate,
-                apsProcessOperationProcessEquDo.getId());
-        //把自己的冲突也删掉
-        ProcessVo processVo = new ProcessVo();
-        processVo.setProcessEquId(apsProcessOperationProcessEquDo.getId());
-        processVo.setProcessWay(currentProcessWay);
-        processVo.setConflictdes(apsProcessOperationProcessEquDo.getConflictdes());
-        processVo.setSoftconflictdes(apsProcessOperationProcessEquDo.getSoftconflictdes());
-        needRemoveTimeOverLapList.add(processVo);
-        List<String> needRemoveTimeOverLapIdList = needRemoveTimeOverLapList.stream().map(ProcessVo::getProcessEquId).collect(Collectors.toList());
+        List<ProcessVo> needRemoveTimeOverLapList = new LinkedList<>();
+        List<String> needRemoveTimeOverLapIdList = new LinkedList<>();
+        if (ObjectUtil.isNotEmpty(oldPlanstartdate) && ObjectUtil.isNotEmpty(oldPlanenddate) && ObjectUtil.isNotEmpty(oldEquId)) {
+            //获取更新之前 所在设备 可能存在冲突的所有工序作业:前5天和后5天
+            Date olddate1 = DateUtil.offsetDay(oldPlanstartdate, -5);
+            Date olddate2 = DateUtil.offsetDay(oldPlanenddate, 5);
+            List<ProcessVo> oldList = this.baseMapper.selectMyProcessVo(oldEquId, olddate1, olddate2);
+
+            needRemoveTimeOverLapList = checkNeedRemove(oldList,
+                    oldPlanstartdate,
+                    oldPlanenddate,
+                    apsProcessOperationProcessEquDo.getId());
+            //把自己的冲突也删掉
+            ProcessVo processVo = new ProcessVo();
+            processVo.setProcessEquId(apsProcessOperationProcessEquDo.getId());
+            processVo.setProcessWay(currentProcessWay);
+            processVo.setConflictdes(apsProcessOperationProcessEquDo.getConflictdes());
+            processVo.setSoftconflictdes(apsProcessOperationProcessEquDo.getSoftconflictdes());
+            needRemoveTimeOverLapList.add(processVo);
+            needRemoveTimeOverLapIdList = needRemoveTimeOverLapList.stream().map(ProcessVo::getProcessEquId).collect(Collectors.toList());
+        }
 
         //获取更新之后 所在设备 可能存在冲突的所有工序作业:前5天和后5天
         DateTime newdate1 = DateUtil.offsetDay(apsProcessOperationProcessEquDo.getPlanstartdate(), -5);
         DateTime newdate2 = DateUtil.offsetDay(apsProcessOperationProcessEquDo.getPlanenddate(), 5);
         List<ProcessVo> newList = this.baseMapper.selectMyProcessVo(apsProcessOperationProcessEquDo.getProcessdeviceid(), newdate1, newdate2);
-//        for (ProcessVo item : newList) {
-//            if (item.getProcessEquId().equals(apsProcessOperationProcessEquDo.getId())) {
-//                item.setPlanStartTime(apsProcessOperationProcessEquDo.getPlanstartdate());
-//                item.setPlanEndTime(apsProcessOperationProcessEquDo.getPlanenddate());
-//            }
-//        }
+
         List<ProcessVo> needAddTimeOverLapList = checkNeedAdd(newList,
                 apsProcessOperationProcessEquDo.getPlanstartdate(),
                 apsProcessOperationProcessEquDo.getPlanenddate(),
@@ -2030,7 +2024,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         return affectedIdList;
     }
 
-    private List<ProcessVo> checkNeedAdd(List<ProcessVo> newList,
+    public List<ProcessVo> checkNeedAdd(List<ProcessVo> newList,
                                          Date newPlanstartdate, Date newPlanenddate,
                                          String processEquId) {
         //判断当前是否存在冲突
@@ -2098,7 +2092,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
     @Override
     @Transactional
     public R scheduling(ChangingScheduleVo req) {
-        ApsUtils.checkScheduling(null);
+//        ApsUtils.checkScheduling(null);
 
         Date processingTime = req.getProcessingTime();
         if (processingTime.before(DateUtil.date())) {

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

@@ -99,6 +99,7 @@ public class ApsServiceImpl implements ApsService {
     @Override
     public void apsSchedule(List<ApsBlankOrderVo> apsBlankOrders, ApsTypeVo apsType, SysUserVo currentUser, List<String> needUnLockProcessIdList, DateTime scheduleStartDate) {
         logger.info("**********排程请求开始**********");
+        DateTime startTime = DateUtil.date();
         if (apsType.getScheduleType() == null) {
             apsType.setScheduleType("default");
         }
@@ -155,9 +156,9 @@ public class ApsServiceImpl implements ApsService {
                 }
                 // 冷轧连续性问题重排
                 if (apsType != null && StrUtil.isNotBlank(apsType.getScheduleType()) && "dd".equals(apsType.getScheduleType())) {
-                    lzlxOrderSchedule(apsBlankOrders, currentUser, apsType, needUnLockProcessIdList, scheduleStartDate);
+                    lzlxOrderSchedule(apsBlankOrders, currentUser, apsType, needUnLockProcessIdList, scheduleStartDate, startTime);
                 } else {
-                    apsOrderScheduleNew(apsBlankOrders, currentUser, apsType, needUnLockProcessIdList);
+                    apsOrderScheduleNew(apsBlankOrders, currentUser, apsType, needUnLockProcessIdList, startTime);
                 }
             } catch (Exception e) {
                 e.printStackTrace();
@@ -361,7 +362,7 @@ public class ApsServiceImpl implements ApsService {
         });
     }
 
-    private void apsOrderScheduleNew(List<ApsBlankOrderVo> apsBlankOrders, SysUserVo currentUser, ApsTypeVo apsType, List<String> needUnLockProcessIdList) {
+    private void apsOrderScheduleNew(List<ApsBlankOrderVo> apsBlankOrders, SysUserVo currentUser, ApsTypeVo apsType, List<String> needUnLockProcessIdList, DateTime startTime) {
         logger.info("预排程开始...");
         // 插单重排的优先排程
         List<ApsBlankOrderVo> cdorders = apsBlankOrders.stream().filter(v -> "1".equals(v.getCdbs())).collect(Collectors.toList());
@@ -389,7 +390,7 @@ public class ApsServiceImpl implements ApsService {
         Date finalApsPlanStartDate = apsPlanStartDate;
         if (cdorders != null && cdorders.size() > 0) {
             try {
-                apsOrderScheduleApsNew(cdorders, currentUser, allEqs, finalApsPlanStartDate, apsType, needUnLockProcessIdList);
+                apsOrderScheduleApsNew(cdorders, currentUser, allEqs, finalApsPlanStartDate, apsType, needUnLockProcessIdList, startTime);
             } catch (Exception e) {
                 e.printStackTrace();
                 logger.info("排程异常", e);
@@ -485,7 +486,7 @@ public class ApsServiceImpl implements ApsService {
                         }
                         return a;
                     });
-                    apsOrderScheduleApsNew(v, currentUser, allEqs, finalApsPlanStartDate, apsType, null);
+                    apsOrderScheduleApsNew(v, currentUser, allEqs, finalApsPlanStartDate, apsType, null, startTime);
                 } catch (Exception e) {
                     e.printStackTrace();
                     logger.info("排程异常", e);
@@ -516,7 +517,7 @@ public class ApsServiceImpl implements ApsService {
      * @param apsBlankOrders
      * @param currentUser
      */
-    private void lzlxOrderSchedule(List<ApsBlankOrderVo> apsBlankOrders, SysUserVo currentUser, ApsTypeVo apsType, List<String> needUnLockProcessIdList, DateTime scheduleStartDate) {
+    private void lzlxOrderSchedule(List<ApsBlankOrderVo> apsBlankOrders, SysUserVo currentUser, ApsTypeVo apsType, List<String> needUnLockProcessIdList, DateTime scheduleStartDate, DateTime startTime) {
         logger.info("调度排程开始...");
         // 坯料计划排序
         Collections.sort(apsBlankOrders, (v1, v2) -> {
@@ -620,10 +621,10 @@ public class ApsServiceImpl implements ApsService {
 //            needScheduleDate = DateUtil.format(DateUtil.offsetDay(nowDate, 2), "yyyy-MM-dd");
 //        }
 //        DateTime chongpaiStartDate = DateUtil.parseDate(needScheduleDate);
-        apsOrderScheduleApsNew(apsBlankOrders, currentUser, allEqs, scheduleStartDate, apsType, needUnLockProcessIdList);
+        apsOrderScheduleApsNew(apsBlankOrders, currentUser, allEqs, scheduleStartDate, apsType, needUnLockProcessIdList, startTime);
     }
 
-    private void apsOrderScheduleApsNew(List<ApsBlankOrderVo> apsBlankOrders, SysUserVo currentUser, Map<String, Equipment> allEqs, Date apsPlanStartDate, ApsTypeVo apsType, List<String> needUnLockProcessIdList) {
+    private void apsOrderScheduleApsNew(List<ApsBlankOrderVo> apsBlankOrders, SysUserVo currentUser, Map<String, Equipment> allEqs, Date apsPlanStartDate, ApsTypeVo apsType, List<String> needUnLockProcessIdList, DateTime startTime) {
         // 设备数据每批次开始清空
         allEqs.clear();
         // 排程前解锁所有待排程订单
@@ -769,6 +770,8 @@ public class ApsServiceImpl implements ApsService {
             logger.info("排程数据:" + JSONUtil.toJsonStr(apsProductionSchedule, jsonConfig));
             // APS平台排程接口调用
             ProductionScheduleRetVo productionScheduleRetVo = rwApsServer.productionSchedule(apsProductionSchedule);
+            //排程结束时间
+            DateTime endTime = DateUtil.date();
             //日志写入文件
             logWriter(JSONUtil.toJsonStr(apsProductionSchedule, jsonConfig), JSONUtil.toJsonStr(productionScheduleRetVo, jsonConfig), apsType.getScheduleType());
             if (!"200".equals(productionScheduleRetVo.getCode())) {
@@ -812,6 +815,22 @@ public class ApsServiceImpl implements ApsService {
                     throw new CustomException(productionScheduleRetVo.getMsg() + " " + DateUtil.formatDateTime(new Date()));
                 }
             }
+
+            //排程结束后,查询修改时间在排程开始-排程结束之间的待开工的明细,判断其冲突
+            List<ApsProcessOperationProcessEquCheckVo> list = apsProcessOperationProcessEquDao.getNeedCheckEquList(startTime, endTime, CXCommonUtils.getCurrentUserFactoryId(currentUser));
+            if (!list.isEmpty()) {
+                for (ApsProcessOperationProcessEquCheckVo equDo : list) {
+                    apsProcessOperationProcessEquService.checkProcessingTimeConflict(equDo,
+                            null, null, null, equDo.getProcessWay(), new LinkedList<>());
+                    ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(equDo.getId());
+                    // 判断是否存在设备不可用
+                    apsProcessOperationProcessEquService.inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
+                            apsProcessOperationProcessEquDo.getProcessdeviceid(),
+                            apsProcessOperationProcessEquDo.getPlanstartdate(),
+                            apsProcessOperationProcessEquDo.getPlanenddate(),
+                            new LinkedList<>());
+                }
+            }
         }
     }
 
@@ -825,9 +844,9 @@ public class ApsServiceImpl implements ApsService {
         String now = DateUtil.format(DateUtil.date(), "yyyy-MM-dd");
         fileName += DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss");
         String filePath = "./rw-aps/" + now + "/scheduleReqAndRes/" + fileName + "req.txt";
-        String content = req+
-                "\r\n"+"====================================================================================\r\n"
-                +res;
+        String content = req +
+                "\r\n" + "====================================================================================\r\n"
+                + res;
 
         // 创建File对象
         File file = new File(filePath);

+ 14 - 0
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationProcessEquDao.xml

@@ -624,4 +624,18 @@
           AND DATE_FORMAT(arr.STARTWORKTIME, '%Y-%m') = #{yearMonth}
           AND arr.REPORTWORKSTATUS = '已报工'
     </select>
+    <select id="getNeedCheckEquList" resultType="com.rongwei.bsentity.vo.ApsProcessOperationProcessEquCheckVo">
+        SELECT
+        apope.*,
+        apo.PROCESSWAY AS 'processWay'
+        FROM
+        aps_process_operation_process_equ apope
+        JOIN aps_process_operation apo ON apope.PROCESSID = apo.ID
+        WHERE
+        apope.DELETED = 0
+        AND apo.DELETED = 0
+        AND apope.TENANTID = #{tenantId}
+        AND apope.MODIFYDATE > #{startTime}
+        AND apope.MODIFYDATE &lt; #{endTime}
+    </select>
 </mapper>

+ 19 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ApsProcessOperationProcessEquCheckVo.java

@@ -0,0 +1,19 @@
+package com.rongwei.bsentity.vo;
+
+import com.rongwei.bsentity.domain.ApsProcessOperationProcessEquDo;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :sc
+ * @since :2025/2/11
+ */
+@Data
+public class ApsProcessOperationProcessEquCheckVo extends ApsProcessOperationProcessEquDo {
+
+    /**
+     * 工序作业加工类型
+     */
+    private String processWay;
+}