Przeglądaj źródła

河南郸城调度计划增加循环计划连续天的特殊处理

1037015548@qq.com 11 miesięcy temu
rodzic
commit
8b5ecd0977

+ 37 - 4
src/main/java/com/shkpr/service/aimodelpower/bizmgr/WODispatchPlanTmDoBizFun.java

@@ -124,7 +124,7 @@ public class WODispatchPlanTmDoBizFun {
                 nextTimeModel.setPlanType(model.getPlanType());
                 nextTimeModel.setDispatchLeadTime(model.getDispatchLeadTime());
                 nextTimeModel.setCycles(model.getCycles());
-                Map<String,Long> nextMap = returnNextTakeTime(nextTimeModel);
+                Map<String,Long> nextMap = returnNextTakeTime(nextTimeModel,newNextTakeTime);
                 newNextTakeTime = (model.getPlanType()==0)?0L:nextMap.get("nextTakeTime");
                 newLimitNextTakeTime = (model.getPlanType()==0)?0L:nextMap.get("limitNextTakeTime");//returnNextTakeTime(nextTimeModel);
 
@@ -462,13 +462,15 @@ public class WODispatchPlanTmDoBizFun {
 
     //TODO 公用计算下次生效时间的方法
     //TODO 分是否排班
-    public static Map<String,Long> returnNextTakeTime(DispatchPlanInfoNextTimeModel model){
+    //TODO oldTm主要为了再派单时比对
+    public static Map<String,Long> returnNextTakeTime(DispatchPlanInfoNextTimeModel model,long oldTm){
         Map<String,Long> map = new HashMap<>();
 
         Long nextTakeTime = 0L;
         Long limitNextTakeTime = 0L;
         map.put("nextTakeTime",nextTakeTime);
         map.put("limitNextTakeTime",limitNextTakeTime);
+        map.put("ifRestNextTakeTime",0L);//是否将newTextTakeTime更新到 plan中 0否, 1是
         if(!CollectionUtils.isEmpty(model.getItemsList())){
             List<DispatchCmdBatchItemNextTimeModel> newList = model.getItemsList().stream()
                     .sorted(Comparator.comparing(DispatchCmdBatchItemNextTimeModel::getHandleStartTime))
@@ -576,6 +578,13 @@ public class WODispatchPlanTmDoBizFun {
                     nextTakeTime = Instant.ofEpochMilli(nextTakeTime)
                             .plus(1, ChronoUnit.DAYS).toEpochMilli();
                     limitNextTakeTime = Instant.ofEpochMilli(limitNextTakeTime).toEpochMilli();
+                }else if(nextTakeTime<=oldTm){
+                    //TODO 连续时需考虑
+                    //TODO 如果传递了对比值, 则说明当前计算的时间与old不符合条件,则再加一算一次
+                    nextTakeTime = Instant.ofEpochMilli(nextTakeTime)
+                            .plus(1, ChronoUnit.DAYS).toEpochMilli();
+                    limitNextTakeTime = Instant.ofEpochMilli(limitNextTakeTime).plus(1, ChronoUnit.DAYS).toEpochMilli();
+                    map.put("ifRestNextTakeTime",1L);
                 }
             }else if(model.getPlanType()==2){
                 //TODO 周计划
@@ -648,6 +657,14 @@ public class WODispatchPlanTmDoBizFun {
                                 .withSecond(localTimeLimit.getSecond()));
                     }
                 }
+                //TODO 连续时需考虑
+                if(nextTakeTime<=oldTm){
+                    //TODO 如果传递了对比值, 则说明当前计算的时间与old不符合条件,则再加一算一次
+                    nextTakeTime = Instant.ofEpochMilli(nextTakeTime)
+                            .plus(1, ChronoUnit.DAYS).toEpochMilli();
+                    limitNextTakeTime = Instant.ofEpochMilli(limitNextTakeTime).plus(1, ChronoUnit.DAYS).toEpochMilli();
+                    map.put("ifRestNextTakeTime",1L);
+                }
             }else if(model.getPlanType()==3){
                 //TODO 月计划
                 JSONArray newJSONArray = JSONArray.parseArray(model.getCycles()).stream().sorted(
@@ -719,6 +736,14 @@ public class WODispatchPlanTmDoBizFun {
                                 .withSecond(localTimeLimit.getSecond()));
                     }
                 }
+                //TODO 连续时需考虑
+                if(nextTakeTime<=oldTm){
+                    //TODO 如果传递了对比值, 则说明当前计算的时间与old不符合条件,则再加一算一次
+                    nextTakeTime = Instant.ofEpochMilli(nextTakeTime)
+                            .plus(1, ChronoUnit.DAYS).toEpochMilli();
+                    limitNextTakeTime = Instant.ofEpochMilli(limitNextTakeTime).plus(1, ChronoUnit.DAYS).toEpochMilli();
+                    map.put("ifRestNextTakeTime",1L);
+                }
             }else if(model.getPlanType()==4){
                 //TODO 年计划
                 JSONArray newJSONArray = JSONArray.parseArray(model.getCycles()).stream().sorted(
@@ -792,6 +817,14 @@ public class WODispatchPlanTmDoBizFun {
                                 .withSecond(localTimeLimit.getSecond()));
                     }
                 }
+                //TODO 连续时需考虑
+                if(nextTakeTime<=oldTm){
+                    //TODO 如果传递了对比值, 则说明当前计算的时间与old不符合条件,则再加一算一次
+                    nextTakeTime = Instant.ofEpochMilli(nextTakeTime)
+                            .plus(1, ChronoUnit.DAYS).toEpochMilli();
+                    limitNextTakeTime = Instant.ofEpochMilli(limitNextTakeTime).plus(1, ChronoUnit.DAYS).toEpochMilli();
+                    map.put("ifRestNextTakeTime",1L);
+                }
             }
         }
 
@@ -835,7 +868,7 @@ public class WODispatchPlanTmDoBizFun {
             nextTimeModel.setItemsList(itemModels);
             nextTimeModel.setDispatchLeadTime(oJsonParam.getDispatchLeadTime());
             nextTimeModel.setCycles(oJsonParam.getCycles());
-            Map<String,Long> nextMap = returnNextTakeTime(nextTimeModel);
+            Map<String,Long> nextMap = returnNextTakeTime(nextTimeModel,0L);
             nextTakeTime = nextMap.get("nextTakeTime");
             limitNextTakeTime = nextMap.get("limitNextTakeTime");
 
@@ -921,7 +954,7 @@ public class WODispatchPlanTmDoBizFun {
             nextTimeModel.setItemsList(itemModels);
             nextTimeModel.setDispatchLeadTime(oJsonParam.getDispatchLeadTime());
             nextTimeModel.setCycles(oJsonParam.getCycles());
-            Map<String,Long> nextMap = returnNextTakeTime(nextTimeModel);
+            Map<String,Long> nextMap = returnNextTakeTime(nextTimeModel,0L);
             nextTakeTime = nextMap.get("nextTakeTime");
             limitNextTakeTime = nextMap.get("limitNextTakeTime");