Pārlūkot izejas kodu

aps-排程之后初始化数据异常处理

sucheng 1 nedēļu atpakaļ
vecāks
revīzija
ad6a740a68

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

@@ -132,11 +132,11 @@ public interface ApsProcessOperationProcessEquDao extends BaseMapper<ApsProcessO
 //    @Select("select count(1) from aps_process_operation_process_equ where DELETED = 0 AND PROCESSDEVICEID = #{processdeviceid} AND WORKSTATUS = '已完工'  AND OLDPLANSTARTDATE = #{planStartDate}")
     int selectHaveOtherDevice2(@Param("processdeviceid") String processdeviceid,@Param("heatNumber") String heatNumber,@Param("yearMonth") String yearMonth);
 
-    void repairePlanStartDate();
+    void repairePlanStartDate(@Param("processEquIdList") List<String> processEquIdList);
 
     List<ApsProcessOperationProcessEquCheckVo> getNeedCheckEquList(@Param("startTime") DateTime startTime, @Param("tenantId") String tenantId);
 
-    void repairePlanStartDate2();
+    void repairePlanStartDate2(@Param("processEquIdList") List<String> processEquIdList);
 
     void myUpdateConflictdes(@Param("apsProcessOperationProcessEquDo") ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo);
 

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

@@ -903,9 +903,30 @@ public class ApsServiceImpl implements ApsService {
                     }
                 }
             }
-            //还原排程过程中,开工/报工的作业的计划时间
-            apsProcessOperationProcessEquDao.repairePlanStartDate();
-            apsProcessOperationProcessEquDao.repairePlanStartDate2();
+            //循环5次,如果执行成功,继续向下执行,如果出现sql超时,等待2分钟后重试,重试5次
+            boolean isSuccess = false;
+            for (int i = 0; i < 5; i++) {
+                if (isSuccess) {
+                    break;
+                }
+                try {
+                    List<String> processEquIdList = productionScheduleRetVo.getProcesses().stream().filter(item -> !item.isIfLock()).map(ProductionProcesses::getId).distinct().collect(Collectors.toList());
+                    if (!processEquIdList.isEmpty()) {
+                        //还原排程过程中,开工/报工的作业的计划时间
+                        apsProcessOperationProcessEquDao.repairePlanStartDate(processEquIdList);
+                        apsProcessOperationProcessEquDao.repairePlanStartDate2(processEquIdList);
+                    }
+                    isSuccess = true;
+                } catch (Exception e) {
+                    try {
+                        Thread.sleep(120000);
+                    } catch (InterruptedException ignored) {
+                    }
+                    if (i == 4) {
+                        throw new CustomException(e.getMessage());
+                    }
+                }
+            }
 
             if (StrUtil.isNotBlank(productionScheduleRetVo.getMsg())) {
                 // 排程异常后恢复历史排程结果为锁定状态

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

@@ -392,6 +392,10 @@
           AND OLDPLANENDDATE is not null
           AND PLANENDDATE is not null
           AND ACTUALFINISHDATE != PLANENDDATE
+          AND ID IN
+        <foreach collection="processEquIdList" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
     </update>
     <update id="repairePlanStartDate2">
         update aps_process_operation_process_equ set
@@ -404,6 +408,10 @@
           AND OLDPLANENDDATE is not null
           AND PLANSTARTDATE is not null
           AND ACTUALSTARTDATE != PLANSTARTDATE
+          AND ID IN
+        <foreach collection="processEquIdList" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
     </update>
     <update id="myUpdateConflictdes">
         update aps_process_operation_process_equ