|
@@ -27,10 +27,7 @@ import org.springframework.util.CollectionUtils;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
-import java.time.DayOfWeek;
|
|
|
-import java.time.Instant;
|
|
|
-import java.time.LocalDate;
|
|
|
-import java.time.LocalDateTime;
|
|
|
+import java.time.*;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
import java.time.temporal.TemporalAdjusters;
|
|
@@ -215,6 +212,39 @@ public class WODispatchPlanTmDoBizFun {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //判断是否在时间区间内并且取出最接近当前时间的大于它的时间
|
|
|
+ //nextType 0 周 1 月 2 年
|
|
|
+ public static LocalDateTime findNextTime(List<String> dateTimeStrings){
|
|
|
+ LocalDateTime now = LocalDateTime.now(); // 获取当前日期时间
|
|
|
+ System.out.println("Current DateTime: " + now);
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+ // 转换为LocalDateTime集合
|
|
|
+ List<LocalDateTime> dateTimes = new ArrayList<>();
|
|
|
+ for (String dtStr : dateTimeStrings) {
|
|
|
+ dateTimes.add(LocalDateTime.parse(dtStr,formatter));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 找到最接近且大于当前时间的日期时间
|
|
|
+ // 仅考虑大于当前时间的日期时间
|
|
|
+ LocalDateTime closestFutureDateTime = dateTimes.stream()
|
|
|
+ .filter(dateTime -> dateTime.isAfter(now))
|
|
|
+ .min((dateTime1, dateTime2) -> Long.compare(
|
|
|
+ java.time.temporal.ChronoUnit.MINUTES.between(now, dateTime1),
|
|
|
+ java.time.temporal.ChronoUnit.MINUTES.between(now, dateTime2)))
|
|
|
+ .orElse(null); // 如果没有找到,返回null
|
|
|
+
|
|
|
+ //TODO 输出结果 ,如果为空说明在集合中没有找到符合条件的时间, 则直接取下一个单位的最小时间即可
|
|
|
+ return closestFutureDateTime;
|
|
|
+ }
|
|
|
+ //LocalDateTime转UTC时间戳
|
|
|
+ public static Long reloadLocalDateTimeToLong(LocalDateTime localDateTime){
|
|
|
+
|
|
|
+ // 转换为毫秒时间戳
|
|
|
+ long timestampMillis = TimeTool.convertDateStr2UTC(localDateTime.format(DateTimeFormatter.ofPattern(TimeTool.TIMESTAMP_FORMAT)));
|
|
|
+
|
|
|
+ return timestampMillis;
|
|
|
+ }
|
|
|
+
|
|
|
//TODO 新增计划
|
|
|
public static ResponseCode savePlan(JPDispatchPlanInfoSave oJsonParam){
|
|
|
try{
|
|
@@ -254,18 +284,42 @@ public class WODispatchPlanTmDoBizFun {
|
|
|
}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 日计划
|
|
|
- Instant nowTime = Instant.ofEpochMilli(
|
|
|
- TimeTool.convertDateStr2UTC
|
|
|
- (JSONArray.parseArray(
|
|
|
- model.getCycles()+" "+newList.get(0).getHandleStartTime()).toString()));
|
|
|
- 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();
|
|
|
+ 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 周计划
|
|
@@ -279,46 +333,42 @@ public class WODispatchPlanTmDoBizFun {
|
|
|
// .reversed()
|
|
|
).collect(Collectors.toCollection(JSONArray::new));
|
|
|
|
|
|
- //TODO dayOfWeekInt 为当前时间的星期几
|
|
|
- DayOfWeek dayOfWeek = LocalDateTime.now().getDayOfWeek();
|
|
|
- Integer dayOfWeekInt = dayOfWeek.getValue();
|
|
|
-
|
|
|
- if(newJSONArray!=null&&!newJSONArray.isEmpty()) {
|
|
|
- //TODO 三种情况,小于等于最小值取最小(大于最大值也取最小),大于区间最小值和小于等于区间最大值(取区间最大值),大于最大值,则取下周的最小值日期
|
|
|
- for (int i = 0; i < newJSONArray.size(); i++) {
|
|
|
- LocalDate newResult = null;
|
|
|
- if (dayOfWeekInt <= newJSONArray.getInteger(0)
|
|
|
- ||
|
|
|
- dayOfWeekInt>newJSONArray.getInteger(newJSONArray.size()-1)) {
|
|
|
- //TODO 那么下次生效时间为本周期最小值的日期
|
|
|
- LocalDate result = LocalDate.now().with(DayOfWeek.of(newJSONArray.getInteger(0)));
|
|
|
- newResult = result; // 返回指定的星期几的日期
|
|
|
- } else if (dayOfWeekInt > newJSONArray.getInteger(i) && dayOfWeekInt <= newJSONArray.getInteger(i + 1)) {
|
|
|
- //TODO 循环到此处不会报错, 因为如果为7的话 ,循环的i+1只会增加到6,不会到7
|
|
|
- //TODO 那么下次生效时间为该区间的最大值
|
|
|
- LocalDate result = LocalDate.now().with(DayOfWeek.of(newJSONArray.getInteger(i + 1))); // 将日期调整到本周的周一
|
|
|
- newResult = result; // 返回指定的星期几的日期
|
|
|
- }else if(dayOfWeekInt > newJSONArray.getInteger(newJSONArray.size()-1)){
|
|
|
- //TODO 说明当前天已不再设置范围内,则取下一周的最小星期数日期
|
|
|
- LocalDate result = LocalDate.now().minusWeeks(-1).with(DayOfWeek.of(newJSONArray.getInteger(0))); // 将日期调整到下周的指定星期几
|
|
|
- newResult = result;
|
|
|
- }
|
|
|
- if (newResult!=null) {
|
|
|
- Instant nowTime = Instant.ofEpochMilli(
|
|
|
- TimeTool.convertDateStr2UTC
|
|
|
- (JSONArray.parseArray(
|
|
|
- newResult.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
|
|
|
- + " " +
|
|
|
- newList.get(0).getHandleStartTime()).toString()));
|
|
|
- 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();
|
|
|
- }
|
|
|
- break;
|
|
|
- }
|
|
|
+ //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){
|
|
@@ -332,48 +382,43 @@ public class WODispatchPlanTmDoBizFun {
|
|
|
// .reversed()
|
|
|
).collect(Collectors.toCollection(JSONArray::new));
|
|
|
|
|
|
- Integer dayOfMonth = LocalDate.now().getDayOfMonth();//当前天号数
|
|
|
- //TODO 三种情况,小于等于最小值取最小(大于最大值也取最小),大于区间最小值和小于等于区间最大值(取区间最大值),大于最大值则取下个月的最小日期
|
|
|
- for (int i = 0; i < newJSONArray.size(); i++) {
|
|
|
- LocalDate newResult = null;
|
|
|
- if (dayOfMonth <= newJSONArray.getInteger(0)){
|
|
|
- //TODO 如果设置的值大于当前月的最后一天
|
|
|
- if(newJSONArray.getInteger(0)>LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth()){
|
|
|
- //TODO 说明是想设置最后一天,因此特殊处理一下,避免日期设置报错
|
|
|
- newResult = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
|
|
|
- }else{
|
|
|
- newResult = LocalDate.now().withDayOfMonth(newJSONArray.getInteger(0));
|
|
|
- }
|
|
|
- }else if (dayOfMonth > newJSONArray.getInteger(i) && dayOfMonth <= newJSONArray.getInteger(i + 1)) {
|
|
|
- if(newJSONArray.getInteger(i + 1)>LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth()) {
|
|
|
- //TODO 说明是想设置最后一天,因此特殊处理一下,避免日期设置报错
|
|
|
- newResult = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
|
|
|
- }else{
|
|
|
- newResult = LocalDate.now().withDayOfMonth(newJSONArray.getInteger(i+1));
|
|
|
- }
|
|
|
- }else if(dayOfMonth > newJSONArray.getInteger(newJSONArray.size()-1)){
|
|
|
- if(newJSONArray.getInteger(0)>LocalDate.now().minusMonths(-1).with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth()) {
|
|
|
- //TODO 说明是想设置最后一天,因此特殊处理一下,避免日期设置报错
|
|
|
- newResult = LocalDate.now().minusMonths(-1).with(TemporalAdjusters.lastDayOfMonth());
|
|
|
- }else{
|
|
|
- newResult = LocalDate.now().minusMonths(-1).withDayOfMonth(newJSONArray.getInteger(0));
|
|
|
- }
|
|
|
+ //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")));
|
|
|
}
|
|
|
- if(newResult!=null){
|
|
|
- Instant nowTime = Instant.ofEpochMilli(
|
|
|
- TimeTool.convertDateStr2UTC
|
|
|
- (JSONArray.parseArray(
|
|
|
- newResult.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
|
|
|
- + " " +
|
|
|
- newList.get(0).getHandleStartTime()).toString()));
|
|
|
- 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();
|
|
|
- }
|
|
|
- break;
|
|
|
+ }
|
|
|
+
|
|
|
+ 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){
|
|
@@ -387,50 +432,50 @@ public class WODispatchPlanTmDoBizFun {
|
|
|
// .reversed()
|
|
|
).collect(Collectors.toCollection(JSONArray::new));
|
|
|
|
|
|
- LocalDate dateNow = LocalDate.now();//当前日期
|
|
|
- //TODO 三种情况,小于等于最小值取最小(大于最大值也取最小),大于区间最小值和小于等于区间最大值(取区间最大值),大于最大值则取下个月的最小日期
|
|
|
- for (int i = 0; i < newJSONArray.size(); i++) {
|
|
|
- LocalDate newResult = null;
|
|
|
- //TODO 转换时默认为当前年
|
|
|
- LocalDate firstDate = LocalDate.parse(LocalDate.now().getYear()+"-"+newJSONArray.getString(0),DateTimeFormatter.ofPattern("MM-dd"));
|
|
|
- LocalDate nowDate = LocalDate.parse(LocalDate.now().getYear()+"-"+newJSONArray.getString(i),DateTimeFormatter.ofPattern("MM-dd"));
|
|
|
- LocalDate nowLastDate = LocalDate.parse(LocalDate.now().getYear()+"-"+newJSONArray.getString(i+1),DateTimeFormatter.ofPattern("MM-dd"));
|
|
|
- LocalDate lastDate = LocalDate.parse(LocalDate.now().getYear()+"-"+newJSONArray.getString(newJSONArray.size()-1),DateTimeFormatter.ofPattern("MM-dd"));
|
|
|
- if (dateNow.isBefore(firstDate)||dateNow.isEqual(firstDate)){
|
|
|
- newResult = firstDate;
|
|
|
- }else if (dateNow.isAfter(nowDate) && (dateNow.isBefore(nowLastDate) || dateNow.isEqual(nowLastDate) )) {
|
|
|
- newResult = nowLastDate;
|
|
|
- }else if(dateNow.isAfter(lastDate)){
|
|
|
- //TODO 说明值已为当前时间的过去时,那么设置下一年的时间为生效时间
|
|
|
- newResult = lastDate.minusYears(-1);
|
|
|
- }
|
|
|
- if(newResult!=null){
|
|
|
- Instant nowTime = Instant.ofEpochMilli(
|
|
|
- TimeTool.convertDateStr2UTC
|
|
|
- (JSONArray.parseArray(
|
|
|
- newResult.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
|
|
|
- + " " +
|
|
|
- newList.get(0).getHandleStartTime()).toString()));
|
|
|
- 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();
|
|
|
- }
|
|
|
- break;
|
|
|
+ //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()));
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //TODO 如果当前时间与下次生效时间是同一天,但是时刻已经是过去时,那么则返回失败信息
|
|
|
- Long nowTimeLong = TimeTool.getCurMsUTC();
|
|
|
- if(nowTimeLong>nextTakeTime&&isSameDay(nowTimeLong,nextTakeTime)){
|
|
|
- return ResponseCode.STATUS_ERROR_JSON_FORMAT;
|
|
|
- }
|
|
|
-
|
|
|
model.setLastTakeTime(lastTakeTime);
|
|
|
model.setNextTakeTime(nextTakeTime);
|
|
|
model.setTakes(0);
|