فهرست منبع

河南郸城调度计划列表 详情 添加接口逻辑强优化

1037015548@qq.com 11 ماه پیش
والد
کامیت
44d0a0e435

+ 178 - 133
src/main/java/com/shkpr/service/aimodelpower/bizmgr/WODispatchPlanTmDoBizFun.java

@@ -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);

+ 22 - 7
src/main/java/com/shkpr/service/aimodelpower/jsonbean/woDispatchPlan/JPDispatchPlanInfoSave.java

@@ -143,32 +143,47 @@ public class JPDispatchPlanInfoSave {
                     cycles = "[\"" + TimeTool.convertUTC2DateStr(TimeTool.getCurMsUTC(), "yyyy-MM-dd") + "\"]";
                 } else if (planType == 2) {
                     //TODO 说明是周计划
-                    cycles += "[\"";
+                    cycles += "[";
+                    int i = 0;
                     for (Object objValue : JSONArray.parseArray(casualValue)) {
                         if (!isOneToSeven(objValue.toString())) {
                             return false;
                         }
                         cycles += objValue.toString();
+                        if (i!=(JSONArray.parseArray(casualValue).size()-1)){
+                            cycles += ",";
+                        }
+                        i++;
                     }
-                    cycles += "\"]";
+                    cycles += "]";
                 } else if (planType == 3) {
-                    cycles += "[\"";
+                    cycles += "[";
+                    int i = 0;
                     for (Object objValue : JSONArray.parseArray(casualValue)) {
                         if (!isOneToThirtyOne(objValue.toString())) {
                             return false;
                         }
                         cycles += objValue.toString();
+                        if (i!=(JSONArray.parseArray(casualValue).size()-1)){
+                            cycles += ",";
+                        }
+                        i++;
                     }
-                    cycles += "\"]";
+                    cycles += "]";
                 } else if (planType == 4) {
-                    cycles += "[\"";
+                    cycles += "[";
+                    int i = 0;
                     for (Object objValue : JSONArray.parseArray(casualValue)) {
                         if (!isMonthDay(objValue.toString())) {
                             return false;
                         }
-                        cycles += objValue.toString();
+                        cycles += "\""+objValue.toString()+"\"";
+                        if (i!=(JSONArray.parseArray(casualValue).size()-1)){
+                            cycles += ",";
+                        }
+                        i++;
                     }
-                    cycles += "\"]";
+                    cycles += "]";
                 }
             }
             if (planStatus == null || (planStatus != -1 && planStatus != 0 && planStatus != 1)) {