Преглед на файлове

河南郸城调度计划列表 修改接口更新

1037015548@qq.com преди 11 месеца
родител
ревизия
3c688db2d3
променени са 15 файла, в които са добавени 515 реда и са изтрити 334 реда
  1. 264 220
      src/main/java/com/shkpr/service/aimodelpower/bizmgr/WODispatchPlanTmDoBizFun.java
  2. 54 0
      src/main/java/com/shkpr/service/aimodelpower/controllerapi/woDispatchPlan/WoDispatchPlanInfoController.java
  3. 1 0
      src/main/java/com/shkpr/service/aimodelpower/controllerfilter/third/ThirdJWTCurrencyFilter.java
  4. 6 4
      src/main/java/com/shkpr/service/aimodelpower/dbdao/mapper/WODispatchCmdPatchDisposalMapper.java
  5. 6 4
      src/main/java/com/shkpr/service/aimodelpower/dbdao/mapper/WODispatchCmdPatchItemMapper.java
  6. 6 4
      src/main/java/com/shkpr/service/aimodelpower/dbdao/mapper/WODispatchPlanRulsMapper.java
  7. 6 4
      src/main/java/com/shkpr/service/aimodelpower/dbdao/mapper/WODispatchPlanTagsMapper.java
  8. 3 4
      src/main/java/com/shkpr/service/aimodelpower/dbdao/services/WODispatchCmdBatchItemDBServiceImpl.java
  9. 97 7
      src/main/java/com/shkpr/service/aimodelpower/dbdao/services/WODispatchPlanDBServiceImpl.java
  10. 0 2
      src/main/java/com/shkpr/service/aimodelpower/dbdao/services/intef/WODispatchCmdBatchItemDBService.java
  11. 10 4
      src/main/java/com/shkpr/service/aimodelpower/dbdao/services/intef/WODispatchPlanDBService.java
  12. 25 0
      src/main/java/com/shkpr/service/aimodelpower/dto/woDispatchPlanModel/DispatchPlanInfoNextTimeModel.java
  13. 0 27
      src/main/java/com/shkpr/service/aimodelpower/jsonbean/woDispatchPlan/JPDispatchPlanInfoRuleUpdate.java
  14. 0 35
      src/main/java/com/shkpr/service/aimodelpower/jsonbean/woDispatchPlan/JPDispatchPlanInfoTagsUpdate.java
  15. 37 19
      src/main/java/com/shkpr/service/aimodelpower/jsonbean/woDispatchPlan/JPDispatchPlanInfoUpdate.java

+ 264 - 220
src/main/java/com/shkpr/service/aimodelpower/bizmgr/WODispatchPlanTmDoBizFun.java

@@ -16,15 +16,10 @@ import com.shkpr.service.aimodelpower.dbdao.services.intef.WODispatchCmdBatchIte
 import com.shkpr.service.aimodelpower.dbdao.services.intef.WODispatchPlanDBService;
 import com.shkpr.service.aimodelpower.dbdao.tables.WODispatchPlanInfoTable;
 import com.shkpr.service.aimodelpower.dto.*;
-import com.shkpr.service.aimodelpower.dto.woDispatchPlanModel.DispatchCmdBatchItemModel;
-import com.shkpr.service.aimodelpower.dto.woDispatchPlanModel.DispatchPlanInfoDetailsModel;
-import com.shkpr.service.aimodelpower.dto.woDispatchPlanModel.DispatchPlanInfoModel;
-import com.shkpr.service.aimodelpower.dto.woDispatchPlanModel.DispatchPlanInfoSSModel;
+import com.shkpr.service.aimodelpower.dto.woDispatchPlanModel.*;
 import com.shkpr.service.aimodelpower.globalmgr.AsyncTaskQueueMgr;
-import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.JPDispatchCmdBatchItem;
-import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.JPDispatchPlanInfoDetailsSS;
-import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.JPDispatchPlanInfoSS;
-import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.JPDispatchPlanInfoSave;
+import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.*;
+import javafx.beans.binding.ObjectExpression;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
@@ -206,14 +201,14 @@ public class WODispatchPlanTmDoBizFun {
         }
         try{
             Map<String,Object> map = getThisDBService().viewInfo("","",oJsonParam.getPlanId());
-            if(map!=null){
+            if(map!=null||map.size()>0){
                 DispatchPlanInfoDetailsModel model = FastJsonUtil.map2Obj(map,DispatchPlanInfoDetailsModel.class,true);
 
                 //TODO 查询相关联的排班项信息
                 Map<String,Object> andWheres = new HashMap<>();
                 andWheres.put("plan_id",oJsonParam.getPlanId());
-                List<DispatchCmdBatchItemModel> itemModels = getItemDBService().listAllWithsExByDispoal("","",1,0
-                        ,andWheres,new HashMap<>(),"handle_start_time","");
+                List<DispatchCmdBatchItemModel> itemModels = getItemDBService()
+                        .listAllWithsExByDispoal("","",andWheres,new HashMap<>(),"handle_start_time","");
 
                 model.setItemModels(itemModels);
 
@@ -261,6 +256,223 @@ public class WODispatchPlanTmDoBizFun {
         return timestampMillis;
     }
 
+    //TODO 公用计算下次生效时间的方法
+    //TODO 分是否排班
+    public static Long returnNextTakeTime(DispatchPlanInfoNextTimeModel model){
+        Long nextTakeTime = 0L;
+        if(!CollectionUtils.isEmpty(model.getItemsList())){
+            List<JPDispatchCmdBatchItem> newList = model.getItemsList().stream()
+                    .sorted(Comparator.comparing(JPDispatchCmdBatchItem::getHandleStartTime))
+                    .collect(Collectors.toList());
+            if(model.getPlanType()==0) {
+                //TODO 临时计划
+                Instant nowTime = Instant.ofEpochMilli(
+                        TimeTool.convertDateStr2UTC
+                                (
+                                        JSONArray.parseArray(model.getCycles()).getString(0)
+                                                +" "+
+                                                newList.get(0).getHandleStartTime()));
+                if(model.getDispatchLeadTime()==0) {
+                    nextTakeTime = nowTime.toEpochMilli();
+                }else if(model.getDispatchLeadTime()>0){
+                    nextTakeTime = nowTime.minus(-model.getDispatchLeadTime(), ChronoUnit.MINUTES).toEpochMilli();
+                }else if(model.getDispatchLeadTime()<0){
+                    nextTakeTime = nowTime.minus(model.getDispatchLeadTime(), ChronoUnit.MINUTES).toEpochMilli();
+                }
+                //TODO 如果当前时间与下次生效时间是同一天,但是时刻已经是过去时,那么则返回失败信息
+                Long nowTimeLong = TimeTool.getCurMsUTC();
+                if(nowTimeLong>nextTakeTime&&isSameDay(nowTimeLong,nextTakeTime)){
+                    throw new RuntimeException(ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrCode());
+                }
+            }else if(model.getPlanType()==1){
+                //TODO 日计划
+                boolean isToDay = false;//生效时间是否小于等于当前时刻
+                for (JPDispatchCmdBatchItem item:newList){
+                    Instant nowTime = Instant.ofEpochMilli(
+                            TimeTool.convertDateStr2UTC
+                                    (JSONArray.parseArray(model.getCycles()).getString(0)
+                                            +" "+item.getHandleStartTime()));
+                    if(nowTime.isBefore(Instant.now()) || nowTime.equals(Instant.now())){
+                        isToDay = true;
+                        if(model.getDispatchLeadTime()==0) {
+                            nextTakeTime = nowTime.toEpochMilli();
+                        }else if(model.getDispatchLeadTime()>0){
+                            nextTakeTime = nowTime.minus(-model.getDispatchLeadTime(), ChronoUnit.MINUTES).toEpochMilli();
+                        }else if(model.getDispatchLeadTime()<0){
+                            nextTakeTime = nowTime.minus(model.getDispatchLeadTime(), ChronoUnit.MINUTES).toEpochMilli();
+                        }
+                    }
+                }
+                if(!isToDay){
+                    //说明当天并没有满足条件的时刻,那么在日期上加一天,并且用最小时刻
+                    nextTakeTime = Instant.ofEpochMilli(
+                            TimeTool.convertDateStr2UTC
+                                    (JSONArray.parseArray(model.getCycles()).getString(0)
+                                            +" "+newList.get(0).getHandleStartTime())).toEpochMilli();
+                }
+
+                //TODO 如果当前时间大于生效时间,说明生效时间过期,则加一天
+                if(nextTakeTime<TimeTool.getCurMsUTC()){
+                    nextTakeTime = Instant.ofEpochMilli(nextTakeTime)
+                            .plus(1, ChronoUnit.DAYS).toEpochMilli();
+                }
+            }else if(model.getPlanType()==2){
+                //TODO 周计划
+                //TODO 先取周期值里最小的数,新集合里最小的值就是最早的周几数
+                JSONArray newJSONArray = JSONArray.parseArray(model.getCycles()).stream().sorted(
+                        // 根据
+                        Comparator.comparingLong(
+                                e -> Long.valueOf(e.toString())
+                        )
+                        // 放开下面的注释,使用reversed()方法,就是降序 大到小
+                        // .reversed()
+                ).collect(Collectors.toCollection(JSONArray::new));
+
+                //TODO 先得到所有集合对应的当前周的所有符合条件的时间
+                List<String> dateTimeStrings = new ArrayList<>();
+                for (Object obj:newJSONArray){
+                    LocalDateTime nowDate = LocalDateTime.now().with(DayOfWeek.of(Integer.valueOf(obj.toString())));
+                    for (JPDispatchCmdBatchItem item : newList){
+                        String[] times = item.getHandleStartTime().split(":");
+                        dateTimeStrings.add(nowDate.withHour(Integer.valueOf(times[0]))
+                                .withMinute(Integer.valueOf(times[1])).withSecond(Integer.valueOf(times[2])).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                    }
+                }
+                LocalDateTime nextDateTime = findNextTime(dateTimeStrings);
+
+                if(nextDateTime!=null){
+                    if (model.getDispatchLeadTime() == 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime);
+                    } else if (model.getDispatchLeadTime() > 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMinutes(-model.getDispatchLeadTime()));
+                    } else if (model.getDispatchLeadTime() < 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMinutes(model.getDispatchLeadTime()));
+                    }
+                }else{
+                    LocalTime localTime = LocalTime.parse(newList.get(0).getHandleStartTime(), DateTimeFormatter.ofPattern("HH:mm:ss"));
+                    nextDateTime = LocalDateTime.now()
+                            .with(DayOfWeek.of(Integer.valueOf(newJSONArray.get(0).toString())));
+                    if (model.getDispatchLeadTime() == 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusWeeks(-1).withHour(localTime.getHour())
+                                .withMinute(localTime.getMinute())
+                                .withSecond(localTime.getSecond()));
+                    } else if (model.getDispatchLeadTime() > 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusWeeks(-1).withHour(localTime.getHour())
+                                .withMinute(localTime.getMinute())
+                                .withSecond(localTime.getSecond()).minusMinutes(-model.getDispatchLeadTime()));
+                    } else if (model.getDispatchLeadTime() < 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusWeeks(-1).withHour(localTime.getHour())
+                                .withMinute(localTime.getMinute())
+                                .withSecond(localTime.getSecond()).minusMinutes(model.getDispatchLeadTime()));
+                    }
+                }
+            }else if(model.getPlanType()==3){
+                //TODO 月计划
+                JSONArray newJSONArray = JSONArray.parseArray(model.getCycles()).stream().sorted(
+                        // 根据
+                        Comparator.comparingLong(
+                                e -> Long.valueOf(e.toString())
+                        )
+                        // 放开下面的注释,使用reversed()方法,就是降序 大到小
+                        // .reversed()
+                ).collect(Collectors.toCollection(JSONArray::new));
+
+                //TODO 先得到所有集合对应的当前周的所有符合条件的时间
+                List<String> dateTimeStrings = new ArrayList<>();
+                for (Object obj:newJSONArray){
+                    LocalDateTime nowDate = LocalDateTime.now().withDayOfMonth(Integer.valueOf(obj.toString()));
+                    for (JPDispatchCmdBatchItem item : newList){
+                        String[] times = item.getHandleStartTime().split(":");
+                        dateTimeStrings.add(nowDate.withHour(Integer.valueOf(times[0]))
+                                .withMinute(Integer.valueOf(times[1])).withSecond(Integer.valueOf(times[2])).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                    }
+                }
+
+                LocalDateTime nextDateTime = findNextTime(dateTimeStrings);
+
+                if(nextDateTime!=null){
+                    if (model.getDispatchLeadTime() == 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime);
+                    } else if (model.getDispatchLeadTime() > 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMinutes(-model.getDispatchLeadTime()));
+                    } else if (model.getDispatchLeadTime() < 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMinutes(model.getDispatchLeadTime()));
+                    }
+                }else{
+                    LocalTime localTime = LocalTime.parse(newList.get(0).getHandleStartTime(), DateTimeFormatter.ofPattern("HH:mm:ss"));
+                    nextDateTime = LocalDateTime.now()
+                            .withDayOfMonth(newJSONArray.getInteger(0));
+                    if (model.getDispatchLeadTime() == 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMonths(-1).withHour(localTime.getHour())
+                                .withMinute(localTime.getMinute())
+                                .withSecond(localTime.getSecond()));
+                    } else if (model.getDispatchLeadTime() > 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMonths(-1).withHour(localTime.getHour())
+                                .withMinute(localTime.getMinute())
+                                .withSecond(localTime.getSecond()).minusMinutes(-model.getDispatchLeadTime()));
+                    } else if (model.getDispatchLeadTime() < 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMonths(-1).withHour(localTime.getHour())
+                                .withMinute(localTime.getMinute())
+                                .withSecond(localTime.getSecond()).minusMinutes(model.getDispatchLeadTime()));
+                    }
+                }
+            }else if(model.getPlanType()==4){
+                //TODO 年计划
+                JSONArray newJSONArray = JSONArray.parseArray(model.getCycles()).stream().sorted(
+                        // 根据
+                        Comparator.comparing(
+                                e -> e.toString()
+                        )
+                        // 放开下面的注释,使用reversed()方法,就是降序 大到小
+                        // .reversed()
+                ).collect(Collectors.toCollection(JSONArray::new));
+
+                //TODO 先得到所有集合对应的当前周的所有符合条件的时间
+                List<String> dateTimeStrings = new ArrayList<>();
+                for (Object obj:newJSONArray){
+                    String[] monthDays = obj.toString().split("-");
+                    LocalDateTime nowDate = LocalDateTime.now().withMonth(Integer.valueOf(monthDays[0]))
+                            .withDayOfMonth(Integer.valueOf(monthDays[1]));
+                    for (JPDispatchCmdBatchItem item : newList){
+                        String[] times = item.getHandleStartTime().split(":");
+                        dateTimeStrings.add(nowDate.withHour(Integer.valueOf(times[0]))
+                                .withMinute(Integer.valueOf(times[1])).withSecond(Integer.valueOf(times[2])).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                    }
+                }
+
+                LocalDateTime nextDateTime = findNextTime(dateTimeStrings);
+                if(nextDateTime!=null){
+                    if (model.getDispatchLeadTime() == 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime);
+                    } else if (model.getDispatchLeadTime() > 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMinutes(-model.getDispatchLeadTime()));
+                    } else if (model.getDispatchLeadTime() < 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMinutes(model.getDispatchLeadTime()));
+                    }
+                }else{
+                    LocalTime localTime = LocalTime.parse(newList.get(0).getHandleStartTime(), DateTimeFormatter.ofPattern("HH:mm:ss"));
+                    nextDateTime = LocalDateTime.now()
+                            .withMonth(Integer.valueOf(newJSONArray.get(0).toString().split("-")[0]))
+                            .withDayOfMonth(Integer.valueOf(newJSONArray.get(0).toString().split("-")[1]));
+                    if (model.getDispatchLeadTime() == 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusYears(-1).withHour(localTime.getHour())
+                                .withMinute(localTime.getMinute())
+                                .withSecond(localTime.getSecond()));
+                    } else if (model.getDispatchLeadTime() > 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusYears(-1).withHour(localTime.getHour())
+                                .withMinute(localTime.getMinute())
+                                .withSecond(localTime.getSecond()).minusMinutes(-model.getDispatchLeadTime()));
+                    } else if (model.getDispatchLeadTime() < 0) {
+                        nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusYears(-1).withHour(localTime.getHour())
+                                .withMinute(localTime.getMinute())
+                                .withSecond(localTime.getSecond()).minusMinutes(model.getDispatchLeadTime()));
+                    }
+                }
+            }
+        }
+        return nextTakeTime;
+    }
+
     //TODO 新增计划
     public static ResponseCode savePlan(JPDispatchPlanInfoSave oJsonParam){
         try{
@@ -280,217 +492,14 @@ public class WODispatchPlanTmDoBizFun {
             //TODO 开始计算时间字段并设置
             Long lastTakeTime = 0L;
             Long nextTakeTime = 0L;//下一次生效时间
-            //TODO 分是否排班
-            if(!CollectionUtils.isEmpty(oJsonParam.getItemsList())){
-                List<JPDispatchCmdBatchItem> newList = oJsonParam.getItemsList().stream()
-                        .sorted(Comparator.comparing(JPDispatchCmdBatchItem::getHandleStartTime))
-                        .collect(Collectors.toList());
-                if(model.getPlanType()==0) {
-                    //TODO 临时计划
-                    Instant nowTime = Instant.ofEpochMilli(
-                            TimeTool.convertDateStr2UTC
-                                    (
-                                            JSONArray.parseArray(model.getCycles()).getString(0)
-                                                    +" "+
-                                                    newList.get(0).getHandleStartTime()));
-                    if(model.getDispatchLeadTime()==0) {
-                        nextTakeTime = nowTime.toEpochMilli();
-                    }else if(model.getDispatchLeadTime()>0){
-                        nextTakeTime = nowTime.minus(-model.getDispatchLeadTime(), ChronoUnit.MINUTES).toEpochMilli();
-                    }else if(model.getDispatchLeadTime()<0){
-                        nextTakeTime = nowTime.minus(model.getDispatchLeadTime(), ChronoUnit.MINUTES).toEpochMilli();
-                    }
-                    //TODO 如果当前时间与下次生效时间是同一天,但是时刻已经是过去时,那么则返回失败信息
-                    Long nowTimeLong = TimeTool.getCurMsUTC();
-                    if(nowTimeLong>nextTakeTime&&isSameDay(nowTimeLong,nextTakeTime)){
-                        return ResponseCode.STATUS_ERROR_JSON_FORMAT;
-                    }
-                }else if(model.getPlanType()==1){
-                    //TODO 日计划
-                    boolean isToDay = false;//生效时间是否小于等于当前时刻
-                    for (JPDispatchCmdBatchItem item:newList){
-                        Instant nowTime = Instant.ofEpochMilli(
-                                TimeTool.convertDateStr2UTC
-                                        (JSONArray.parseArray(model.getCycles()).getString(0)
-                                                +" "+item.getHandleStartTime()));
-                        if(nowTime.isBefore(Instant.now()) || nowTime.equals(Instant.now())){
-                            isToDay = true;
-                            if(model.getDispatchLeadTime()==0) {
-                                nextTakeTime = nowTime.toEpochMilli();
-                            }else if(model.getDispatchLeadTime()>0){
-                                nextTakeTime = nowTime.minus(-model.getDispatchLeadTime(), ChronoUnit.MINUTES).toEpochMilli();
-                            }else if(model.getDispatchLeadTime()<0){
-                                nextTakeTime = nowTime.minus(model.getDispatchLeadTime(), ChronoUnit.MINUTES).toEpochMilli();
-                            }
-                        }
-                    }
-                    if(!isToDay){
-                        //说明当天并没有满足条件的时刻,那么在日期上加一天,并且用最小时刻
-                        nextTakeTime = Instant.ofEpochMilli(
-                                TimeTool.convertDateStr2UTC
-                                        (JSONArray.parseArray(model.getCycles()).getString(0)
-                                                +" "+newList.get(0).getHandleStartTime())).toEpochMilli();
-                    }
 
-                    //TODO 如果当前时间大于生效时间,说明生效时间过期,则加一天
-                    if(nextTakeTime<TimeTool.getCurMsUTC()){
-                        nextTakeTime = Instant.ofEpochMilli(nextTakeTime)
-                                .plus(1, ChronoUnit.DAYS).toEpochMilli();
-                    }
-                }else if(model.getPlanType()==2){
-                    //TODO 周计划
-                    //TODO 先取周期值里最小的数,新集合里最小的值就是最早的周几数
-                    JSONArray newJSONArray = JSONArray.parseArray(model.getCycles()).stream().sorted(
-                            // 根据
-                            Comparator.comparingLong(
-                                    e -> Long.valueOf(e.toString())
-                            )
-                            // 放开下面的注释,使用reversed()方法,就是降序 大到小
-                            // .reversed()
-                    ).collect(Collectors.toCollection(JSONArray::new));
-
-                    //TODO 先得到所有集合对应的当前周的所有符合条件的时间
-                    List<String> dateTimeStrings = new ArrayList<>();
-                    for (Object obj:newJSONArray){
-                        LocalDateTime nowDate = LocalDateTime.now().with(DayOfWeek.of(Integer.valueOf(obj.toString())));
-                        for (JPDispatchCmdBatchItem item : newList){
-                            String[] times = item.getHandleStartTime().split(":");
-                            dateTimeStrings.add(nowDate.withHour(Integer.valueOf(times[0]))
-                                    .withMinute(Integer.valueOf(times[1])).withSecond(Integer.valueOf(times[2])).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-                        }
-                    }
-                    LocalDateTime nextDateTime = findNextTime(dateTimeStrings);
-
-                    if(nextDateTime!=null){
-                        if (model.getDispatchLeadTime() == 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime);
-                        } else if (model.getDispatchLeadTime() > 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMinutes(-model.getDispatchLeadTime()));
-                        } else if (model.getDispatchLeadTime() < 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMinutes(model.getDispatchLeadTime()));
-                        }
-                    }else{
-                        LocalTime localTime = LocalTime.parse(newList.get(0).getHandleStartTime(), DateTimeFormatter.ofPattern("HH:mm:ss"));
-                        nextDateTime = LocalDateTime.now()
-                                .with(DayOfWeek.of(Integer.valueOf(newJSONArray.get(0).toString())));
-                        if (model.getDispatchLeadTime() == 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusWeeks(-1).withHour(localTime.getHour())
-                                    .withMinute(localTime.getMinute())
-                                    .withSecond(localTime.getSecond()));
-                        } else if (model.getDispatchLeadTime() > 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusWeeks(-1).withHour(localTime.getHour())
-                                    .withMinute(localTime.getMinute())
-                                    .withSecond(localTime.getSecond()).minusMinutes(-model.getDispatchLeadTime()));
-                        } else if (model.getDispatchLeadTime() < 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusWeeks(-1).withHour(localTime.getHour())
-                                    .withMinute(localTime.getMinute())
-                                    .withSecond(localTime.getSecond()).minusMinutes(model.getDispatchLeadTime()));
-                        }
-                    }
-                }else if(model.getPlanType()==3){
-                    //TODO 月计划
-                    JSONArray newJSONArray = JSONArray.parseArray(model.getCycles()).stream().sorted(
-                            // 根据
-                            Comparator.comparingLong(
-                                    e -> Long.valueOf(e.toString())
-                            )
-                            // 放开下面的注释,使用reversed()方法,就是降序 大到小
-                            // .reversed()
-                    ).collect(Collectors.toCollection(JSONArray::new));
-
-                    //TODO 先得到所有集合对应的当前周的所有符合条件的时间
-                    List<String> dateTimeStrings = new ArrayList<>();
-                    for (Object obj:newJSONArray){
-                        LocalDateTime nowDate = LocalDateTime.now().withDayOfMonth(Integer.valueOf(obj.toString()));
-                        for (JPDispatchCmdBatchItem item : newList){
-                            String[] times = item.getHandleStartTime().split(":");
-                            dateTimeStrings.add(nowDate.withHour(Integer.valueOf(times[0]))
-                                    .withMinute(Integer.valueOf(times[1])).withSecond(Integer.valueOf(times[2])).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-                        }
-                    }
+            DispatchPlanInfoNextTimeModel nextTimeModel = new DispatchPlanInfoNextTimeModel();
+            nextTimeModel.setPlanType(oJsonParam.getPlanType());
+            nextTimeModel.setItemsList(oJsonParam.getItemsList());
+            nextTimeModel.setDispatchLeadTime(oJsonParam.getDispatchLeadTime());
+            nextTimeModel.setCycles(oJsonParam.getCycles());
+            nextTakeTime = returnNextTakeTime(nextTimeModel);
 
-                    LocalDateTime nextDateTime = findNextTime(dateTimeStrings);
-
-                    if(nextDateTime!=null){
-                        if (model.getDispatchLeadTime() == 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime);
-                        } else if (model.getDispatchLeadTime() > 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMinutes(-model.getDispatchLeadTime()));
-                        } else if (model.getDispatchLeadTime() < 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMinutes(model.getDispatchLeadTime()));
-                        }
-                    }else{
-                        LocalTime localTime = LocalTime.parse(newList.get(0).getHandleStartTime(), DateTimeFormatter.ofPattern("HH:mm:ss"));
-                        nextDateTime = LocalDateTime.now()
-                                .withDayOfMonth(newJSONArray.getInteger(0));
-                        if (model.getDispatchLeadTime() == 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMonths(-1).withHour(localTime.getHour())
-                                    .withMinute(localTime.getMinute())
-                                    .withSecond(localTime.getSecond()));
-                        } else if (model.getDispatchLeadTime() > 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMonths(-1).withHour(localTime.getHour())
-                                    .withMinute(localTime.getMinute())
-                                    .withSecond(localTime.getSecond()).minusMinutes(-model.getDispatchLeadTime()));
-                        } else if (model.getDispatchLeadTime() < 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMonths(-1).withHour(localTime.getHour())
-                                    .withMinute(localTime.getMinute())
-                                    .withSecond(localTime.getSecond()).minusMinutes(model.getDispatchLeadTime()));
-                        }
-                    }
-                }else if(model.getPlanType()==4){
-                    //TODO 年计划
-                    JSONArray newJSONArray = JSONArray.parseArray(model.getCycles()).stream().sorted(
-                            // 根据
-                            Comparator.comparing(
-                                    e -> e.toString()
-                            )
-                            // 放开下面的注释,使用reversed()方法,就是降序 大到小
-                            // .reversed()
-                    ).collect(Collectors.toCollection(JSONArray::new));
-
-                    //TODO 先得到所有集合对应的当前周的所有符合条件的时间
-                    List<String> dateTimeStrings = new ArrayList<>();
-                    for (Object obj:newJSONArray){
-                        String[] monthDays = obj.toString().split("-");
-                        LocalDateTime nowDate = LocalDateTime.now().withMonth(Integer.valueOf(monthDays[0]))
-                                .withDayOfMonth(Integer.valueOf(monthDays[1]));
-                        for (JPDispatchCmdBatchItem item : newList){
-                            String[] times = item.getHandleStartTime().split(":");
-                            dateTimeStrings.add(nowDate.withHour(Integer.valueOf(times[0]))
-                                    .withMinute(Integer.valueOf(times[1])).withSecond(Integer.valueOf(times[2])).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-                        }
-                    }
-
-                    LocalDateTime nextDateTime = findNextTime(dateTimeStrings);
-                    if(nextDateTime!=null){
-                        if (model.getDispatchLeadTime() == 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime);
-                        } else if (model.getDispatchLeadTime() > 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMinutes(-model.getDispatchLeadTime()));
-                        } else if (model.getDispatchLeadTime() < 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusMinutes(model.getDispatchLeadTime()));
-                        }
-                    }else{
-                        LocalTime localTime = LocalTime.parse(newList.get(0).getHandleStartTime(), DateTimeFormatter.ofPattern("HH:mm:ss"));
-                        nextDateTime = LocalDateTime.now()
-                                .withMonth(Integer.valueOf(newJSONArray.get(0).toString().split("-")[0]))
-                                .withDayOfMonth(Integer.valueOf(newJSONArray.get(0).toString().split("-")[1]));
-                        if (model.getDispatchLeadTime() == 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusYears(-1).withHour(localTime.getHour())
-                                    .withMinute(localTime.getMinute())
-                                    .withSecond(localTime.getSecond()));
-                        } else if (model.getDispatchLeadTime() > 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusYears(-1).withHour(localTime.getHour())
-                                    .withMinute(localTime.getMinute())
-                                    .withSecond(localTime.getSecond()).minusMinutes(-model.getDispatchLeadTime()));
-                        } else if (model.getDispatchLeadTime() < 0) {
-                            nextTakeTime = reloadLocalDateTimeToLong(nextDateTime.minusYears(-1).withHour(localTime.getHour())
-                                    .withMinute(localTime.getMinute())
-                                    .withSecond(localTime.getSecond()).minusMinutes(model.getDispatchLeadTime()));
-                        }
-                    }
-                }
-            }
 
             model.setLastTakeTime(lastTakeTime);
             model.setNextTakeTime(nextTakeTime);
@@ -510,6 +519,41 @@ public class WODispatchPlanTmDoBizFun {
         }
     }
 
+    //TODO 修改计划
+    public static ResponseCode updatePlan(JPDispatchPlanInfoUpdate oJsonParam){
+        try {
+            //TODO 根据计划类型计算计划的下次生效时间
+            //TODO 查询原计划是否还存在,若存在比对planType是否一致
+            Map<String,Object> oldPlan = getThisDBService().getOne(oJsonParam.getPlanId());
+            if(oldPlan==null){
+                return ResponseCode.RESULT_REFERENCE_NOT_EXIST;
+            }
+            if(!oJsonParam.getPlanType().equals(Integer.valueOf(oldPlan.get("plan_type").toString()))){
+                return ResponseCode.STATUS_ERROR_JSON_FORMAT;
+            }
+
+            //TODO 开始计算时间字段并设置
+            Long nextTakeTime = 0L;//下一次生效时间
+
+            DispatchPlanInfoNextTimeModel nextTimeModel = new DispatchPlanInfoNextTimeModel();
+            nextTimeModel.setPlanType(oJsonParam.getPlanType());
+            nextTimeModel.setItemsList(oJsonParam.getItemsList());
+            nextTimeModel.setDispatchLeadTime(oJsonParam.getDispatchLeadTime());
+            nextTimeModel.setCycles(oJsonParam.getCycles());
+            nextTakeTime = returnNextTakeTime(nextTimeModel);
+
+
+            ResponseCode updateRes = getThisDBService().updatePlanInfoByCount(oJsonParam,nextTakeTime, oJsonParam.getRulesList(),
+                    oJsonParam.getTagsList(), oJsonParam.getItemsList());
+            return updateRes;
+        }catch(Exception ex){
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, mStrClassName, mStrClassName
+                    ,String.format("update planInfo errorMsg:%s end<====",
+                            ex.getLocalizedMessage()));
+            return ResponseCode.RESULT_BAD;
+        }
+    }
+
     private static boolean isSameDay(long timestamp1, long timestamp2) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         // 确保时区设置正确,以避免因夏令时导致的问题

+ 54 - 0
src/main/java/com/shkpr/service/aimodelpower/controllerapi/woDispatchPlan/WoDispatchPlanInfoController.java

@@ -7,6 +7,7 @@ import com.shkpr.service.aimodelpower.commtools.CommTool;
 import com.shkpr.service.aimodelpower.constants.ApiURI;
 import com.shkpr.service.aimodelpower.controllerfilter.TokenAuthenticationService;
 import com.shkpr.service.aimodelpower.controllervalid.CommonParamValidNew;
+import com.shkpr.service.aimodelpower.controllervalid.CommonParamValidReset;
 import com.shkpr.service.aimodelpower.controllervalid.CommonParamValidSS;
 import com.shkpr.service.aimodelpower.dto.PageRecordRes;
 import com.shkpr.service.aimodelpower.dto.ResponseCode;
@@ -17,6 +18,7 @@ import com.shkpr.service.aimodelpower.exception.SelfException;
 import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.JPDispatchPlanInfoDetailsSS;
 import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.JPDispatchPlanInfoSS;
 import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.JPDispatchPlanInfoSave;
+import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.JPDispatchPlanInfoUpdate;
 import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -210,4 +212,56 @@ public class WoDispatchPlanInfoController {
                         ,resResult.getTimestamp()-llReqBefore));
         return resResult;
     }
+
+    @PostMapping(value = ApiURI.URI_XXX_RESET)
+    public ResponseRes reset(HttpServletRequest request
+            , @RequestHeader(value= ApiURI.HEADER_CLIENT_TYPE, required=false) String strClientType
+            , @RequestHeader(value= ApiURI.HEADER_USER_AGENT, required=false) String strUserAgent
+            , @RequestBody(required=false) @Validated(value={CommonParamValidReset.class}) JPDispatchPlanInfoUpdate oJsonParam
+            , BindingResult bindRes) throws Exception{
+        final String URI_PATH = request.getRequestURI();
+        final String strPlatform = CommTool.getPlatformByAgent(strClientType, strUserAgent);
+        final String strUserId = (String)request.getAttribute(TokenAuthenticationService.HEADER_USERID);
+        if (oJsonParam == null || bindRes.hasErrors() || !oJsonParam.checkValid()){
+            throw new SelfException(ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrCode()
+                    , String.format(ApiURI.EXCEPTION_FORMAT
+                    , strPlatform
+                    , URI_PATH
+                    , ResponseCode.STATUS_ERROR_JSON_FORMAT.toStrMsg()));
+        }
+        long llReqBefore = System.currentTimeMillis();
+        String strRunSeq = String.format("%d-%d", llReqBefore, mSeqSS.incrementAndGet());
+        LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, mBusinessType, mStrClassName, strUserId
+                ,String.format("%s:%s seq:{%s} param:%s begin====>"
+                        ,strPlatform
+                        ,URI_PATH
+                        ,strRunSeq
+                        ,oJsonParam.toString()));
+
+        ResponseRes<String> resResult = new ResponseRes<String>();
+        resResult.setRescode(ResponseCode.RESULT_BAD.toStrCode());
+        resResult.setResmsg(MSG_FAILED);
+        resResult.setResdata("");
+
+        ResponseCode resCode = WODispatchPlanTmDoBizFun.updatePlan(oJsonParam);
+        if (resCode!=null&&resCode==ResponseCode.RESULT_NORMAL){
+            resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
+            resResult.setResmsg(MSG_SUCCESS);
+        }else{
+            if(resCode!=null) {
+                resResult.setRescode(resCode.toStrCode());
+                resResult.setResmsg(resCode.toStrMsg());
+            }
+        }
+        resResult.setTimestamp(System.currentTimeMillis());
+        LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, mBusinessType, mStrClassName, strUserId
+                ,String.format("%s:%s seq:{%s} rescode:{%s} resmsg:{%s} time:{%d ms} end<===="
+                        ,strPlatform
+                        ,URI_PATH
+                        ,strRunSeq
+                        ,resResult.getRescode()
+                        ,resResult.getResmsg()
+                        ,resResult.getTimestamp()-llReqBefore));
+        return resResult;
+    }
 }

+ 1 - 0
src/main/java/com/shkpr/service/aimodelpower/controllerfilter/third/ThirdJWTCurrencyFilter.java

@@ -28,6 +28,7 @@ public class ThirdJWTCurrencyFilter extends JWTAuthenticationFilter {
         msMapURI2Method.put(String.format("%s/%s", ApiURI.URI_DISPATCH_PLAN_H, ApiURI.URI_XXX_LISTS), "POST");
         msMapURI2Method.put(String.format("%s/%s", ApiURI.URI_DISPATCH_PLAN_H, ApiURI.URI_XXX_SK), "POST");
         msMapURI2Method.put(String.format("%s/%s", ApiURI.URI_DISPATCH_PLAN_H, ApiURI.URI_XXX_NEW_INFO), "POST");
+        msMapURI2Method.put(String.format("%s/%s", ApiURI.URI_DISPATCH_PLAN_H, ApiURI.URI_XXX_RESET), "POST");
     }
 
     public ThirdJWTCurrencyFilter(AuthenticationManager authenticationManager) {

+ 6 - 4
src/main/java/com/shkpr/service/aimodelpower/dbdao/mapper/WODispatchCmdPatchDisposalMapper.java

@@ -1,10 +1,7 @@
 package com.shkpr.service.aimodelpower.dbdao.mapper;
 
 import com.shkpr.service.aimodelpower.dbdao.providers.WODispatchCmdBatchDisposalSqlProvider;
-import org.apache.ibatis.annotations.InsertProvider;
-import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.SelectProvider;
-import org.apache.ibatis.annotations.UpdateProvider;
+import org.apache.ibatis.annotations.*;
 
 import java.util.List;
 import java.util.Map;
@@ -66,4 +63,9 @@ public interface WODispatchCmdPatchDisposalMapper {
     @UpdateProvider(type = WODispatchCmdBatchDisposalSqlProvider.class, method = "batchUpdateWiths")
     int batchUpdateWiths(@Param("andWheres") List<Map<String, Object>> andWheres
             , @Param("datas") List<Map<String, Object>> datas);
+
+    @DeleteProvider(type = WODispatchCmdBatchDisposalSqlProvider.class, method = "deleteWiths")
+    int deleteWiths(@Param("andWheres") Map<String, Object> andWheres
+            , @Param("orWheres") Map<String, Object> orWheres
+            , @Param("extend") String extend);
 }

+ 6 - 4
src/main/java/com/shkpr/service/aimodelpower/dbdao/mapper/WODispatchCmdPatchItemMapper.java

@@ -2,10 +2,7 @@ package com.shkpr.service.aimodelpower.dbdao.mapper;
 
 import com.shkpr.service.aimodelpower.dbdao.providers.WODispatchCmdBatchDisposalSqlProvider;
 import com.shkpr.service.aimodelpower.dbdao.providers.WODispatchCmdBatchItemSqlProvider;
-import org.apache.ibatis.annotations.InsertProvider;
-import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.SelectProvider;
-import org.apache.ibatis.annotations.UpdateProvider;
+import org.apache.ibatis.annotations.*;
 
 import java.util.List;
 import java.util.Map;
@@ -70,4 +67,9 @@ public interface WODispatchCmdPatchItemMapper {
 
     @InsertProvider(type = WODispatchCmdBatchItemSqlProvider.class, method = "insertsThisData")
     int insertsThisData(@Param("inserts") Map<String, Object> inserts);
+
+    @DeleteProvider(type = WODispatchCmdBatchItemSqlProvider.class, method = "deleteWiths")
+    int deleteWiths(@Param("andWheres") Map<String, Object> andWheres
+            , @Param("orWheres") Map<String, Object> orWheres
+            , @Param("extend") String extend);
 }

+ 6 - 4
src/main/java/com/shkpr/service/aimodelpower/dbdao/mapper/WODispatchPlanRulsMapper.java

@@ -1,10 +1,7 @@
 package com.shkpr.service.aimodelpower.dbdao.mapper;
 
 import com.shkpr.service.aimodelpower.dbdao.providers.WODispatchPlanRulsSqlProvider;
-import org.apache.ibatis.annotations.InsertProvider;
-import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.SelectProvider;
-import org.apache.ibatis.annotations.UpdateProvider;
+import org.apache.ibatis.annotations.*;
 
 import java.util.List;
 import java.util.Map;
@@ -60,4 +57,9 @@ public interface WODispatchPlanRulsMapper {
     @UpdateProvider(type = WODispatchPlanRulsSqlProvider.class, method = "batchUpdateWiths")
     int batchUpdateWiths(@Param("andWheres") List<Map<String, Object>> andWheres
             , @Param("datas") List<Map<String, Object>> datas);
+
+    @DeleteProvider(type = WODispatchPlanRulsSqlProvider.class, method = "deleteWiths")
+    int deleteWiths(@Param("andWheres") Map<String, Object> andWheres
+            , @Param("orWheres") Map<String, Object> orWheres
+            , @Param("extend") String extend);
 }

+ 6 - 4
src/main/java/com/shkpr/service/aimodelpower/dbdao/mapper/WODispatchPlanTagsMapper.java

@@ -1,10 +1,7 @@
 package com.shkpr.service.aimodelpower.dbdao.mapper;
 
 import com.shkpr.service.aimodelpower.dbdao.providers.WODispatchPlanTagsSqlProvider;
-import org.apache.ibatis.annotations.InsertProvider;
-import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.SelectProvider;
-import org.apache.ibatis.annotations.UpdateProvider;
+import org.apache.ibatis.annotations.*;
 
 import java.util.List;
 import java.util.Map;
@@ -67,4 +64,9 @@ public interface WODispatchPlanTagsMapper {
     @UpdateProvider(type = WODispatchPlanTagsSqlProvider.class, method = "batchUpdateWiths")
     int batchUpdateWiths(@Param("andWheres") List<Map<String, Object>> andWheres
             , @Param("datas") List<Map<String, Object>> datas);
+
+    @DeleteProvider(type = WODispatchPlanTagsSqlProvider.class, method = "deleteWiths")
+    int deleteWiths(@Param("andWheres") Map<String, Object> andWheres
+            , @Param("orWheres") Map<String, Object> orWheres
+            , @Param("extend") String extend);
 }

+ 3 - 4
src/main/java/com/shkpr/service/aimodelpower/dbdao/services/WODispatchCmdBatchItemDBServiceImpl.java

@@ -48,13 +48,13 @@ public class WODispatchCmdBatchItemDBServiceImpl implements WODispatchCmdBatchIt
     WODispatchCmdPatchDisposalMapper woDispatchCmdPatchDisposalMapper;
 
     @Override
-    public List<DispatchCmdBatchItemModel> listAllWithsExByDispoal(String table, String filed, int limit, int offset, Map<String, Object> andWheres, Map<String, Object> orWheres, String orderBy, String extend) {
+    public List<DispatchCmdBatchItemModel> listAllWithsExByDispoal(String table, String filed, Map<String, Object> andWheres, Map<String, Object> orWheres, String orderBy, String extend) {
         int nCode = 0;
         String strMsg = "Success";
         List<Map<String, Object>> arrRes = null;
         List<DispatchCmdBatchItemModel> newArrRes = null;
         try {
-            arrRes = woDispatchCmdPatchItemMapper.listAllWiths(table, filed, limit, offset, andWheres, orWheres, orderBy, extend);
+            arrRes = woDispatchCmdPatchItemMapper.batchQueryWiths(table, filed, andWheres, orWheres, orderBy, extend);
 
             if(!CollectionUtils.isEmpty(arrRes)){
                 newArrRes = new ArrayList<>();
@@ -81,9 +81,8 @@ public class WODispatchCmdBatchItemDBServiceImpl implements WODispatchCmdBatchIt
             LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.valueFromInt(nCode)
                     , mBusinessType
                     , mStrClassName
-                    , String.format("List All %s lines(limit=%d, offset=%d, orderBy=%s, back.size=%d) from database, code:{%d} msg:{%s} ..."
+                    , String.format("List All %s lines( orderBy=%s, back.size=%d) from database, code:{%d} msg:{%s} ..."
                             , logTag
-                            , limit, offset
                             , orderBy
                             , CommTool.listSize(arrRes)
                             , nCode, strMsg));

+ 97 - 7
src/main/java/com/shkpr/service/aimodelpower/dbdao/services/WODispatchPlanDBServiceImpl.java

@@ -7,14 +7,17 @@ import com.shkpr.service.aimodelpower.commtools.CommTool;
 import com.shkpr.service.aimodelpower.commtools.TimeTool;
 import com.shkpr.service.aimodelpower.constants.LogFlagBusiType;
 import com.shkpr.service.aimodelpower.dbdao.mapper.*;
+import com.shkpr.service.aimodelpower.dbdao.services.intef.WODispatchCmdBatchItemDBService;
 import com.shkpr.service.aimodelpower.dbdao.services.intef.WODispatchPlanDBService;
 import com.shkpr.service.aimodelpower.dbdao.tables.*;
 import com.shkpr.service.aimodelpower.dto.ResponseCode;
+import com.shkpr.service.aimodelpower.dto.woDispatchPlanModel.DispatchCmdBatchItemModel;
 import com.shkpr.service.aimodelpower.dto.woDispatchPlanModel.DispatchPlanInfoModel;
 import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.util.HashMap;
 import java.util.List;
@@ -56,6 +59,10 @@ public class WODispatchPlanDBServiceImpl implements WODispatchPlanDBService,WODi
     @Autowired
     WOViewDispatchPlanRulsWithTagMapper woViewDispatchPlanRulsWithTagMapper;
 
+    @SuppressWarnings("all")
+    @Autowired
+    WODispatchCmdBatchItemDBService woDispatchCmdBatchItemDBService;
+
     @Override
     public List<Map<String, Object>> listAllWithsEx(String table, String filed, int limit, int offset, Map<String, Object> andWheres, Map<String, Object> orWheres, String orderBy, String extend) {
         int nCode = 0;
@@ -146,7 +153,20 @@ public class WODispatchPlanDBServiceImpl implements WODispatchPlanDBService,WODi
 
     @Override
     public Map<String, Object> getOne(Object id) {
-        return null;
+        int nCode = 0;
+        String strMsg = "Success";
+        try {
+            return woDispatchPlanMapper.getOne("","",id);
+        }catch (Exception e){
+            nCode = LogLevelFlag.LOG_ERROR.ordinal();
+            strMsg = e.getLocalizedMessage();
+            return null;
+        }finally {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.valueFromInt(nCode)
+                    , mBusinessType
+                    , mStrClassName
+                    , String.format("Get %s:{%s} from database, code:{%d} msg:{%s} ...", logTag, String.valueOf(id), nCode, strMsg));
+        }
     }
 
     @Override
@@ -197,14 +217,14 @@ public class WODispatchPlanDBServiceImpl implements WODispatchPlanDBService,WODi
             for (JPDispatchPlanInfoRuleSave jp : rulesList) {
                 Map<String, Object> map = FastJsonUtil.obj2Map(jp, true);
                 map.put(WODispatchPlanRulsTable.W_INFO.PRIMARY_KEY, model.getPlanId());
-                map.put("update_time",TimeTool.getCurMsUTC());
+                map.put("update_time", TimeTool.getCurMsUTC());
                 woDispatchPlanRulsMapper.inserts(map);
             }
-        }
-        for (JPDispatchPlanInfoTagsSave jp:tagsList){
-            Map<String,Object> map = FastJsonUtil.obj2Map(jp,true);
-            map.put(WODispatchPlanTagsTable.W_INFO.PRIMARY_KEY,model.getPlanId());
-            woDispatchPlanTagsMapper.inserts(map);
+            for (JPDispatchPlanInfoTagsSave jp : tagsList) {
+                Map<String, Object> map = FastJsonUtil.obj2Map(jp, true);
+                map.put(WODispatchPlanTagsTable.W_INFO.PRIMARY_KEY, model.getPlanId());
+                woDispatchPlanTagsMapper.inserts(map);
+            }
         }
         for (JPDispatchCmdBatchItem jp:itemsList){
             Map<String,Object> map = FastJsonUtil.obj2Map(jp,true);
@@ -225,4 +245,74 @@ public class WODispatchPlanDBServiceImpl implements WODispatchPlanDBService,WODi
         return ResponseCode.RESULT_NORMAL;
     }
 
+
+    @Override
+    @Transactional(transactionManager = "mainDbTransactionManager")
+    public ResponseCode updatePlanInfoByCount(JPDispatchPlanInfoUpdate model,Long nextTakeTime, List<JPDispatchPlanInfoRuleSave> rulesList, List<JPDispatchPlanInfoTagsSave> tagsList, List<JPDispatchCmdBatchItem> itemsList) {
+        //TODO 修改计划
+        Map<String,Object> andWhereUp = new HashMap<>();
+        andWhereUp.put(R_INFO.PRIMARY_KEY,model.getPlanId());
+        Map<String,Object> upMap = FastJsonUtil.objPositiveData2Map(model, true);
+        upMap.put("next_take_time",nextTakeTime);
+        upMap.remove(R_INFO.PRIMARY_KEY);
+        upMap.remove("casual_value");
+        upMap.remove("rules_list");
+        upMap.remove("tags_list");
+        upMap.remove("items_list");
+        woDispatchPlanMapper.updateWiths(upMap,andWhereUp,new HashMap<>(),"");
+
+        //TODO 先删除所有关联再添加
+        Map<String,Object> andWhereRuls = new HashMap<>();
+        andWhereRuls.put("plan_id",model.getPlanId());
+        woDispatchPlanRulsMapper.deleteWiths(andWhereRuls,new HashMap<>(),"");
+        Map<String,Object> andWherePlanTags = new HashMap<>();
+        andWherePlanTags.put("plan_id",model.getPlanId());
+        woDispatchPlanTagsMapper.deleteWiths(andWherePlanTags,new HashMap<>(),"");
+        //删除排班
+        Map<String,Object> andWheresItems = new HashMap<>();
+        andWheresItems.put("plan_id",model.getPlanId());
+        List<DispatchCmdBatchItemModel> woMap = woDispatchCmdBatchItemDBService.listAllWithsExByDispoal("","",andWheresItems,new HashMap<>(),"handle_start_time","");
+        if(!CollectionUtils.isEmpty(woMap)){
+            for (DispatchCmdBatchItemModel item:woMap){
+                woDispatchCmdPatchItemMapper.deleteWiths(andWheresItems,new HashMap<>(),"");
+                //删除对应的处置建议
+                Map<String,Object> andWheresItemDisposals = new HashMap<>();
+                andWheresItemDisposals.put("batch_item_id",model.getPlanId());
+                woDispatchCmdPatchDisposalMapper.deleteWiths(andWheresItemDisposals,new HashMap<>(),"");
+            }
+        }
+
+        if(model.getChufaRulsFlag()==1) {
+            for (JPDispatchPlanInfoRuleSave jp : rulesList) {
+                Map<String, Object> map = FastJsonUtil.obj2Map(jp, true);
+                map.put(WODispatchPlanRulsTable.W_INFO.PRIMARY_KEY, model.getPlanId());
+                map.put("update_time", TimeTool.getCurMsUTC());
+                woDispatchPlanRulsMapper.inserts(map);
+            }
+            for (JPDispatchPlanInfoTagsSave jp : tagsList) {
+                Map<String, Object> map = FastJsonUtil.obj2Map(jp, true);
+                map.put(WODispatchPlanTagsTable.W_INFO.PRIMARY_KEY, model.getPlanId());
+                woDispatchPlanTagsMapper.inserts(map);
+            }
+        }
+        if(itemsList!=null) {
+            for (JPDispatchCmdBatchItem jp : itemsList) {
+                Map<String, Object> map = FastJsonUtil.obj2Map(jp, true);
+                map.put(WODispatchCmdPatchItemTable.W_INFO.PRIMARY_KEY, CommTool.genPlanItemId());
+                map.put(WODispatchCmdPatchItemTable.W_INFO.PLAN_ID, model.getPlanId());
+                map.put(WODispatchCmdPatchItemTable.W_INFO.CREATE_TIME, TimeTool.getCurMsUTC());
+                map.remove("dispoal_list");
+                //添加相应的处置建议
+                for (JPDispatchCmdBatchDispoal dispoal : jp.getDispoalList()) {
+                    Map<String, Object> mapDispoal = FastJsonUtil.obj2Map(dispoal, true);
+                    mapDispoal.put("key", CommTool.genPlanItemDispoalId());
+                    mapDispoal.put("create_time", TimeTool.getCurMsUTC());
+                    mapDispoal.put(WODispatchCmdPatchDisposalTable.W_INFO.BATCH_ITEM_ID, map.get(WODispatchCmdPatchItemTable.W_INFO.PRIMARY_KEY));
+                    woDispatchCmdPatchDisposalMapper.inserts(mapDispoal);
+                }
+                woDispatchCmdPatchItemMapper.inserts(map);
+            }
+        }
+        return ResponseCode.RESULT_NORMAL;
+    }
 }

+ 0 - 2
src/main/java/com/shkpr/service/aimodelpower/dbdao/services/intef/WODispatchCmdBatchItemDBService.java

@@ -15,8 +15,6 @@ import java.util.Map;
 public interface WODispatchCmdBatchItemDBService {
 
     List<DispatchCmdBatchItemModel> listAllWithsExByDispoal(String table, String filed
-            , int limit
-            , int offset
             , Map<String, Object> andWheres
             , Map<String, Object> orWheres
             , String orderBy

+ 10 - 4
src/main/java/com/shkpr/service/aimodelpower/dbdao/services/intef/WODispatchPlanDBService.java

@@ -2,10 +2,7 @@ package com.shkpr.service.aimodelpower.dbdao.services.intef;
 
 import com.shkpr.service.aimodelpower.dto.ResponseCode;
 import com.shkpr.service.aimodelpower.dto.woDispatchPlanModel.DispatchPlanInfoModel;
-import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.JPDispatchCmdBatchItem;
-import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.JPDispatchPlanInfoRuleSave;
-import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.JPDispatchPlanInfoSave;
-import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.JPDispatchPlanInfoTagsSave;
+import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.*;
 
 import java.util.List;
 import java.util.Map;
@@ -39,5 +36,14 @@ public interface WODispatchPlanDBService extends BaseDBService {
                                        List<JPDispatchPlanInfoTagsSave> tagsList,
                                        //③ 排班班次项
                                        List<JPDispatchCmdBatchItem> itemsList);
+    //TODO 事务修改调度计划
+    ResponseCode updatePlanInfoByCount(JPDispatchPlanInfoUpdate model,//TODO 相关关联子对象参数
+                                       Long nextTakeTime,
+                                       //① 计划相关触发规则
+                                       List<JPDispatchPlanInfoRuleSave> rulesList,
+                                       //② 计划附加标签项
+                                       List<JPDispatchPlanInfoTagsSave> tagsList,
+                                       //③ 排班班次项
+                                       List<JPDispatchCmdBatchItem> itemsList);
 }
 

+ 25 - 0
src/main/java/com/shkpr/service/aimodelpower/dto/woDispatchPlanModel/DispatchPlanInfoNextTimeModel.java

@@ -0,0 +1,25 @@
+package com.shkpr.service.aimodelpower.dto.woDispatchPlanModel;
+
+import com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan.JPDispatchCmdBatchItem;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @ClassName DispatchPlanInfoNextTimeModel
+ * @Description: TODO 用于公用计算下次生效时间的模型
+ * @Author LX
+ * @Date 2024/7/9
+ * @Version V1.0
+ **/
+@Data
+public class DispatchPlanInfoNextTimeModel {
+    //③ 排班班次项
+    private List<JPDispatchCmdBatchItem> itemsList;
+
+    private Integer planType;
+
+    private Integer dispatchLeadTime;
+
+    private String cycles;
+}

+ 0 - 27
src/main/java/com/shkpr/service/aimodelpower/jsonbean/woDispatchPlan/JPDispatchPlanInfoRuleUpdate.java

@@ -1,27 +0,0 @@
-package com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import java.io.Serializable;
-
-/**
- * @ClassName DispatchPlanInfoRuleModel
- * @Description: TODO 计划的智能匹配规则修改
- * @Author LX
- * @Date 2024/6/28
- * @Version V1.0
- **/
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class JPDispatchPlanInfoRuleUpdate extends JPDispatchPlanInfoRuleSave implements Serializable{
-
-//   private String updateTime;//创建/修改时间
-
-   private String planId;
-
-   public boolean checkValid(){
-      return true;
-   }
-
-}

+ 0 - 35
src/main/java/com/shkpr/service/aimodelpower/jsonbean/woDispatchPlan/JPDispatchPlanInfoTagsUpdate.java

@@ -1,35 +0,0 @@
-package com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan;
-
-import lombok.Data;
-import org.springframework.util.StringUtils;
-
-import java.io.Serializable;
-
-/**
- * @ClassName DispatchPlanInfoRuleModel
- * @Description: TODO 计划附加标签项
- * @Author LX
- * @Date 2024/6/28
- * @Version V1.0
- **/
-@Data
-public class JPDispatchPlanInfoTagsUpdate implements Serializable {
-
-   private String planId;//计划id,如果不为空则要查询planId和key是否存在,存在就修改, 不存在就新增
-   private String key;//附加标签标识符
-   private String data;//附加标签值
-   private Integer ifDel=0;//是否删除 0 否 1是
-
-   public boolean checkValid(){
-      if(StringUtils.isEmpty(planId)){
-         return false;
-      }
-      if(StringUtils.isEmpty(key)){
-         return false;
-      }
-      if(StringUtils.isEmpty(data)){
-         return false;
-      }
-      return true;
-   }
-}

+ 37 - 19
src/main/java/com/shkpr/service/aimodelpower/jsonbean/woDispatchPlan/JPDispatchPlanInfoUpdate.java

@@ -1,8 +1,12 @@
 package com.shkpr.service.aimodelpower.jsonbean.woDispatchPlan;
 
 import com.alibaba.fastjson.JSONArray;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.shkpr.service.aimodelpower.commtools.TimeTool;
-import com.shkpr.service.aimodelpower.controllervalid.CommonParamValidNew;
+import com.shkpr.service.aimodelpower.components.validators.IntInitOrRange;
+import com.shkpr.service.aimodelpower.components.validators.StrNullOrSize;
+import com.shkpr.service.aimodelpower.controllervalid.CommonParamValidReset;
+import com.shkpr.service.aimodelpower.controllervalid.CommonParamValidReset;
 import lombok.Data;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
@@ -24,7 +28,10 @@ import java.util.regex.Pattern;
  **/
 @Data
 public class JPDispatchPlanInfoUpdate {
-    private Integer planType = 0;//类型:0--临时;1--日循环;2--周循环;3--月循环;4--年循环
+    @NotBlank(groups = { CommonParamValidReset.class})
+    private String planId;
+
+    private Integer planType;//类型:0--临时;1--日循环;2--周循环;3--月循环;4--年循环
                                 //注:该字段新建时定义,后期不可再随意变更
 
     //TODO casualValue和casualHsm在排班有的时候排班的时刻优先级更高
@@ -35,37 +42,44 @@ public class JPDispatchPlanInfoUpdate {
                     // 如果为月,值为1-31号数,如果设置为31且循环月没有31号,则默认为该月的最后一天,值为dd
                     // 如果为年,值为mm-dd
 
+    @StrNullOrSize(groups = {CommonParamValidReset.class})
     private String cycles="";//TODO 根据参数casualTime处理后的具体周期值,决定循环计划的生效时间
 
-    private Integer planStatus = 1;//状态:-1--注销;0--停用;1--启用
+    @IntInitOrRange(init = -1, groups = {CommonParamValidReset.class})
+    private Integer planStatus = -1;//状态:-1--注销;0--停用;1--启用
 
-    @NotBlank(groups = { CommonParamValidNew.class})
-    @Size(min = 1,max = 255, groups = { CommonParamValidNew.class})
+    @NotBlank(groups = { CommonParamValidReset.class})
+    @Size(min = 1,max = 255, groups = { CommonParamValidReset.class})
     private String title;//计划标题
 
-    private Integer urgentLevel=1;//紧急程度(优先级)紧急级别:1 -- 一般;2 --重要;4 -- 紧急
+    @IntInitOrRange(init = -1, groups = {CommonParamValidReset.class})
+    private Integer urgentLevel=-1;//紧急程度(优先级)紧急级别:1 -- 一般;2 --重要;4 -- 紧急
 
-    private String dispatchRemark;//调度计划描述
+    @StrNullOrSize(groups = {CommonParamValidReset.class})
+    private String dispatchRemark = null;//调度计划描述
 
-    private Integer dispatchLeadTime = 0;//派单时间提前量设定(单位分钟)
+    @IntInitOrRange(init = -1, groups = {CommonParamValidReset.class})
+    private Integer dispatchLeadTime = -1;//派单时间提前量设定(单位分钟)
                                     //    提前或推迟的校正时间(存储单位:分钟)
                                     //*) =0则不推迟也不提前
                                     //*) >0则推迟触发
                                     //*) <0则提前触发
 
     //TODO 创建人ID
-    @NotBlank(groups = { CommonParamValidNew.class})
-    @Size(min = 1,max = 255, groups = { CommonParamValidNew.class})
+    @NotBlank(groups = { CommonParamValidReset.class})
+    @Size(min = 1,max = 255, groups = { CommonParamValidReset.class})
     private String updaterId;
 
     //TODO 监测分区id
-    @NotBlank(groups = { CommonParamValidNew.class})
-    @Size(min = 1,max = 255, groups = { CommonParamValidNew.class})
+    @NotBlank(groups = { CommonParamValidReset.class})
+    @Size(min = 1,max = 255, groups = { CommonParamValidReset.class})
     private String zoneId;
 
-    private Integer sendway = 1;//派单提醒方式:1--app通知;2--短信通知;3--app&短信通知
+    @IntInitOrRange(init = -1, groups = {CommonParamValidReset.class})
+    private Integer sendway = -1;//派单提醒方式:1--app通知;2--短信通知;3--app&短信通知
 
-    private Integer chufaRulsFlag = 1;//是否触发保存规则 0否 1是 默认值1
+    @IntInitOrRange(init = -1, groups = {CommonParamValidReset.class})
+    private Integer chufaRulsFlag = -1;//是否触发保存规则 0否 1是 默认值1
 
     //TODO 判断是否是时间格式
     public static boolean isValidDateFormat(String dateTimeStr,String fomatter) {
@@ -78,14 +92,12 @@ public class JPDispatchPlanInfoUpdate {
         }
     }
 
-    private static final Pattern TIME_PATTERN =
-            Pattern.compile("^([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$");
     //TODO 判断是否为HH:mm:ss格式
     public static boolean isValidTimeFormat(String time) {
         if (time == null) {
             return false;
         }
-        return TIME_PATTERN.matcher(time).matches();
+        return Pattern.compile("^([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$").matcher(time).matches();
     }
     //TODO 判断是否为1=7的数字
     public static boolean isOneToSeven(String str) {
@@ -93,7 +105,13 @@ public class JPDispatchPlanInfoUpdate {
     }
     //TODO 判断是否为1=31的数字
     public static boolean isOneToThirtyOne(String str) {
-        return str.matches("[1-31]+");
+        try {
+            int number = Integer.parseInt(str);
+            return number >= 1 && number <= 31;
+        } catch (NumberFormatException e) {
+            // 字符串不是一个有效的整数
+            return false;
+        }
     }
     //TODO 判断是否为mm-dd格式
     public static boolean isMonthDay(String str) {
@@ -103,7 +121,7 @@ public class JPDispatchPlanInfoUpdate {
 
     //TODO 相关关联子对象参数
     //① 计划相关触发规则
-    private List<JPDispatchPlanInfoRuleUpdate> rulesList;
+    private List<JPDispatchPlanInfoRuleSave> rulesList;
     //② 计划附加标签项
     private List<JPDispatchPlanInfoTagsSave> tagsList;
     //③ 排班班次项