Forráskód Böngészése

aps-调度挪动数据sql修改,预排程增加反写字段旧的计划开始和结束时间

sucheng 2 hónapja
szülő
commit
5f82258238

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

@@ -899,6 +899,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                         apsProcessOperationProcessEqu.setInputunqualifiednum(hasEqu.getInputunqualifiednum());
                         apsProcessOperationProcessEqu.setInputunqualifiedroll(hasEqu.getInputunqualifiedroll());
                         apsProcessOperationProcessEqu.setCancelrollno(hasEqu.getCancelrollno());
+                        apsProcessOperationProcessEqu.setOldplanstartdate(hasEqu.getOldplanstartdate());
+                        apsProcessOperationProcessEqu.setOldplanenddate(hasEqu.getOldplanenddate());
                         apsProcessOperationProcessEqu.setRoottaskid(hasEqu.getRoottaskid());
                     }
                     apsProcessOperationProcessEquDos.add(apsProcessOperationProcessEqu);
@@ -4420,18 +4422,18 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     break;
                 }
             }
-            int safeCount2 = 0;
-            while (true) {
-                int updateCount2 = this.baseMapper.moveErrorProcessEqu2(chongpaiStartDate, chongpaiEndDate, CXCommonUtils.getCurrentUserFactoryId(currentUser));
-                if (updateCount2 <= 0) {
-                    break;
-                }
-                //安全设置,防止死循环
-                safeCount2 += 1;
-                if (safeCount2 >= 50) {
-                    break;
-                }
-            }
+//            int safeCount2 = 0;
+//            while (true) {
+//                int updateCount2 = this.baseMapper.moveErrorProcessEqu2(chongpaiStartDate, chongpaiEndDate, CXCommonUtils.getCurrentUserFactoryId(currentUser));
+//                if (updateCount2 <= 0) {
+//                    break;
+//                }
+//                //安全设置,防止死循环
+//                safeCount2 += 1;
+//                if (safeCount2 >= 50) {
+//                    break;
+//                }
+//            }
             //锁定所有 未锁定的 作业和作业明细
             apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
                     .set(ApsProcessOperationProcessEquDo::getLockmarkdetail, "y")

+ 109 - 81
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsBlankOrderDao.xml

@@ -300,92 +300,120 @@
                 join aps_process_operation apo on apo.ID = apope.PROCESSID
                 join aps_process_operation_process_equ preapope on apope.PREVIOUSPROCESSESIDS = preapope.id
         set
-            apope.PLANENDDATE=date_add(apope.PLANENDDATE,
-                                       INTERVAL TIMESTAMPdiff(SECOND,
-                                                              apope.PLANSTARTDATE,
-                                                              LEAST(GREATEST(
-                                                                            date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间
-                                                                                     INTERVAL GREATEST(
-                                                                                             ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
-                                                                                             if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
-                                                                                                if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0))) MINUTE -- 机台流转时间
-                                                                            ),
-                                                                            #{chongpaiStartDate} -- 调度开始时间
-                                                                    ),
-                                                                    if(ifnull(apo.MAXFLOWWAITMIN,0)=0, -- 如果有最大流转等待时间,则取前道计划完工时间 + 最大流转等待时间,否则取调度结束时间
-                                                                       DATE_ADD(#{chongpaiEndDate},INTERVAL 10 DAY),-- 无限制时间
-                                                                       date_add(preapope.PLANENDDATE, INTERVAL apo.MAXFLOWWAITMIN MINUTE))) -- 前道计划完工时间 + 最大流转等待时间
-                                                ) SECOND),
-            apope.PLANSTARTDATE=date_add(apope.PLANSTARTDATE,
-                                         INTERVAL TIMESTAMPdiff(SECOND,
-                                                                apope.PLANSTARTDATE,
-                                                                LEAST(GREATEST(
-                                                                              date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间
-                                                                                       INTERVAL GREATEST(
-                                                                                               ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
-                                                                                               if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
-                                                                                                  if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0))) MINUTE -- 机台流转时间
-                                                                              ),
-                                                                              #{chongpaiStartDate} -- 调度开始时间
-                                                                      ),
-                                                                      if(ifnull(apo.MAXFLOWWAITMIN,0)=0, -- 如果有最大流转等待时间,则取前道计划完工时间 + 最大流转等待时间,否则取调度结束时间
-                                                                         DATE_ADD(#{chongpaiEndDate},INTERVAL 10 DAY),-- 无限制时间
-                                                                         date_add(preapope.PLANENDDATE, INTERVAL apo.MAXFLOWWAITMIN MINUTE))) -- 前道计划完工时间 + 最大流转等待时间
-                                                  ) SECOND)
+            apope.PLANENDDATE=if( -- 如果前道在调度时间之前开工,并且与前道是连续作业,则移动到前道计划完工时间
+                    apope.PROCESSDEVICEID = preapope.PROCESSDEVICEID and ifnull(apo.MINFLOWWAITMIN,0)=0,
+                    DATE_ADD(preapope.PLANENDDATE,INTERVAL TIMESTAMPdiff(SECOND, apope.PLANSTARTDATE, apope.PLANENDDATE) SECOND),
+                    date_add(apope.PLANENDDATE,
+                             INTERVAL TIMESTAMPdiff(SECOND,
+                                                    apope.PLANSTARTDATE,
+                                                    GREATEST(
+                                                            date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间
+                                                                     INTERVAL GREATEST(
+                                                                             ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
+                                                                             if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
+                                                                                if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0)
+                                                                             )
+                                                                              ) MINUTE -- 机台流转时间
+                                                            ),
+                                                            #{chongpaiStartDate}
+                                                    )
+                                      ) SECOND
+                    )
+                              ),
+            apope.PLANSTARTDATE=if( -- 如果前道在调度时间之前,并且与前道是连续作业,则移动到前道计划完工时间
+                    apope.PROCESSDEVICEID = preapope.PROCESSDEVICEID and ifnull(apo.MINFLOWWAITMIN,0)=0,
+                    preapope.PLANENDDATE,
+                    date_add(apope.PLANSTARTDATE,
+                             INTERVAL TIMESTAMPdiff(SECOND,
+                                                    apope.PLANSTARTDATE,
+                                                    GREATEST(
+                                                            date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间
+                                                                     INTERVAL GREATEST(
+                                                                             ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
+                                                                             if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
+                                                                                if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0)
+                                                                             )
+                                                                              ) MINUTE -- 机台流转时间
+                                                            ),
+                                                            #{chongpaiStartDate}
+                                                    )
+                                      ) SECOND
+                    )
+                                )
         WHERE
             apope.deleted = '0' AND apo.DELETED = '0' AND preapope.DELETED = '0'
           and apope.TENANTID = #{tenantId}
           and apo.PROCESS != '铸轧'
           and apope.WORKSTATUS = '待开工'
-        AND ((apope.PLANSTARTDATE between #{chongpaiStartDate} and #{chongpaiEndDate}) -- 在调度时间范围内开工
-        or (preapope.PLANSTARTDATE between #{chongpaiStartDate} and #{chongpaiEndDate} -- 前道在调度时间范围内开工
-            AND date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间 > 计划开工时间
-            INTERVAL GREATEST(
-            ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
-            if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
-            if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0))) MINUTE -- 机台流转时间
-            ) > apope.PLANSTARTDATE
-        )
-        or (apope.PLANSTARTDATE > #{chongpaiEndDate}
-            AND date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间 小于 调度结束时间,表示可以在调度时间范围内开工
-            INTERVAL GREATEST(
-            ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
-            if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
-            if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0))) MINUTE -- 机台流转时间
-            ) &lt; #{chongpaiEndDate} -- 调度结束时间
-        )) -- 计划调度结束时间之后开工
-          AND (apope.PLANENDDATE!=date_add(apope.PLANENDDATE,
-                                           INTERVAL TIMESTAMPdiff(SECOND,
-                                                                  apope.PLANSTARTDATE,
-                                                                  LEAST(GREATEST(
-                                                                                date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间
-                                                                                         INTERVAL GREATEST(
-                                                                                                 ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
-                                                                                                 if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
-                                                                                                    if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0))) MINUTE -- 机台流转时间
-                                                                                ),
-                                                                                #{chongpaiStartDate} -- 调度开始时间
-                                                                        ),
-                                                                        if(ifnull(apo.MAXFLOWWAITMIN,0)=0, -- 如果有最大流转等待时间,则取前道计划完工时间 + 最大流转等待时间,否则取调度结束时间
-                                                                           DATE_ADD(#{chongpaiEndDate},INTERVAL 10 DAY),-- 无限制时间
-                                                                           date_add(preapope.PLANENDDATE, INTERVAL apo.MAXFLOWWAITMIN MINUTE))) -- 前道计划完工时间 + 最大流转等待时间
-                                                    ) SECOND)
-            OR apope.PLANSTARTDATE!=date_add(apope.PLANSTARTDATE,
-                                             INTERVAL TIMESTAMPdiff(SECOND,
-                                                                    apope.PLANSTARTDATE,
-                                                                    LEAST(GREATEST(
-                                                                                  date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间
-                                                                                           INTERVAL GREATEST(
-                                                                                                   ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
-                                                                                                   if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
-                                                                                                      if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0))) MINUTE -- 机台流转时间
-                                                                                  ),
-                                                                                  #{chongpaiStartDate} -- 调度开始时间
-                                                                          ),
-                                                                          if(ifnull(apo.MAXFLOWWAITMIN,0)=0, -- 如果有最大流转等待时间,则取前道计划完工时间 + 最大流转等待时间,否则取调度结束时间
-                                                                             DATE_ADD(#{chongpaiEndDate},INTERVAL 10 DAY),-- 无限制时间
-                                                                             date_add(preapope.PLANENDDATE, INTERVAL apo.MAXFLOWWAITMIN MINUTE))) -- 前道计划完工时间 + 最大流转等待时间
-                                                      ) SECOND)
+          AND ((apope.PLANSTARTDATE between #{chongpaiStartDate} and #{chongpaiEndDate}) -- 在调度时间范围内开工
+            or ((preapope.PLANSTARTDATE between #{chongpaiStartDate} and #{chongpaiEndDate}) -- 前道在调度时间范围内开工
+                AND (
+                    date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间 > 计划开工时间
+                             INTERVAL GREATEST(
+                                     ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
+                                     if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
+                                        if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0))) MINUTE -- 机台流转时间
+                    ) > apope.PLANSTARTDATE
+                        or date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间 小于 调度结束时间
+                                    INTERVAL GREATEST(
+                                            ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
+                                            if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
+                                               if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0))) MINUTE -- 机台流转时间
+                           ) &lt; #{chongpaiEndDate} -- 调度结束时间
+                    )
+                   )
+            )
+          AND (apope.PLANENDDATE!=if( -- 如果前道在调度时间之前开工,并且与前道是连续作业,则移动到前道计划完工时间
+                apope.PROCESSDEVICEID = preapope.PROCESSDEVICEID and ifnull(apo.MINFLOWWAITMIN,0)=0,
+                DATE_ADD(preapope.PLANENDDATE,INTERVAL TIMESTAMPdiff(SECOND, apope.PLANSTARTDATE, apope.PLANENDDATE) SECOND),
+                date_add(apope.PLANENDDATE,
+                         INTERVAL TIMESTAMPdiff(SECOND,
+                                                apope.PLANSTARTDATE,
+                                                GREATEST(
+                                                        date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间
+                                                                 INTERVAL GREATEST(
+                                                                         ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
+                                                                         if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
+                                                                            if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0)
+                                                                         )
+                                                                          ) MINUTE -- 机台流转时间
+                                                        ),
+                                                        if(ifnull(apo.MAXFLOWWAITMIN,0)=0,
+                                                           #{chongpaiStartDate}, -- 调度开始时间
+                                                           LEAST(#{chongpaiStartDate}, -- 调度开始时间
+                                                                 date_add(preapope.PLANENDDATE, INTERVAL apo.MAXFLOWWAITMIN MINUTE)
+                                                           )
+                                                        ) -- 前道计划完工时间 + 最大流转等待时间
+                                                )
+                                  ) SECOND
+                )
+                                  )
+            OR
+               apope.PLANSTARTDATE!=if( -- 如果前道在调度时间之前,并且与前道是连续作业,则移动到前道计划完工时间
+                       apope.PROCESSDEVICEID = preapope.PROCESSDEVICEID and ifnull(apo.MINFLOWWAITMIN,0)=0,
+                       preapope.PLANENDDATE,
+                       date_add(apope.PLANENDDATE,
+                                INTERVAL TIMESTAMPdiff(SECOND,
+                                                       apope.PLANSTARTDATE,
+                                                       GREATEST(
+                                                               date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间
+                                                                        INTERVAL GREATEST(
+                                                                                ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
+                                                                                if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
+                                                                                   if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0)
+                                                                                )
+                                                                                 ) MINUTE -- 机台流转时间
+                                                               ),
+                                                               if(ifnull(apo.MAXFLOWWAITMIN,0)=0,
+                                                                  #{chongpaiStartDate}, -- 调度开始时间
+                                                                  LEAST(#{chongpaiStartDate}, -- 调度开始时间
+                                                                        date_add(preapope.PLANENDDATE, INTERVAL apo.MAXFLOWWAITMIN MINUTE)
+                                                                  )
+                                                               ) -- 前道计划完工时间 + 最大流转等待时间
+                                                       )
+                                         ) SECOND
+                       )
+                                    )
             )
 
     </update>