소스 검색

修改周期报表时间

zhoupeng 1 년 전
부모
커밋
9aac60ff7c
18개의 변경된 파일368개의 추가작업 그리고 504개의 파일을 삭제
  1. 0 19
      industry-system/cqcy-ei-common/src/main/java/com/example/opc_common/util/ConstantStr.java
  2. 0 348
      industry-system/cqcy-ei-common/src/main/java/com/example/opc_common/util/DateUtil.java
  3. 1 1
      industry-system/industry-da/src/main/java/com/example/opc_da/controller/ReportDataPolicyController.java
  4. 1 1
      industry-system/industry-da/src/main/java/com/example/opc_da/service/ReportDataPolicyService.java
  5. 5 16
      industry-system/industry-da/src/main/java/com/example/opc_da/service/impl/ReportDataPolicyServiceImpl.java
  6. 32 0
      industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/AmountEnum.java
  7. 22 0
      industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/BucketType.java
  8. 30 0
      industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/BucketTypeFactory.java
  9. 37 0
      industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/DayBucketType.java
  10. 31 0
      industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/HourBucketType.java
  11. 29 0
      industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/MinuteBucketType.java
  12. 36 0
      industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/MonthBucketType.java
  13. 31 0
      industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/SecondBucketType.java
  14. 21 0
      industry-system/industry-da/src/main/java/com/example/opc_da/util/cycleTime/CycleTime.java
  15. 28 0
      industry-system/industry-da/src/main/java/com/example/opc_da/util/cycleTime/CycleTimeFactory.java
  16. 17 0
      industry-system/industry-da/src/main/java/com/example/opc_da/util/cycleTime/EndCycleTime.java
  17. 18 0
      industry-system/industry-da/src/main/java/com/example/opc_da/util/cycleTime/StartCycleTime.java
  18. 29 119
      industry-system/industry-da/src/main/java/com/example/opc_da/validate/reportTable/AutomaticReportTableValidate.java

+ 0 - 19
industry-system/cqcy-ei-common/src/main/java/com/example/opc_common/util/ConstantStr.java

@@ -99,25 +99,6 @@ public class ConstantStr {
     //0数据集,1单值
     public static final String DATA_SET = "0";
     public static final String SINGLE_VALUE = "1";
-    //取值模式:0平均值,1最大值,2最小值,3瞬时值,4求和,5计数
-    public static final String AVERAGE_VALUE = "0";
-    public static final String MAX_VALUE = "1";
-    public static final String MIN_VALUE = "2";
-    public static final String INSTANTANEOUS_VALUE = "3";
-    public static final String SUM_VALUE = "4";
-    public static final String COUNT_VALUE = "5";
-    //时段类型:0月,1天,2时,3分,4秒
-    public static final String PERIOD_TIME_MONTH = "0";
-    public static final String PERIOD_TIME_DAY = "1";
-    public static final String PERIOD_TIME_HOUR = "2";
-    public static final String PERIOD_TIME_MINUTE = "3";
-    public static final String PERIOD_TIME_SECOND = "4";
-    //0当前,1下一次
-//    public static final String TYPE_CURRENT = "0";
-//    public static final String TYPE_NEXT = "1";
-    //0上一次,1当
-    public static final String TYPE_LAST = "1";
-    public static final String TYPE_CURRENT = "2";
 
     //统计图取值格式
     public static final Integer CHART_VALUE_HOUR = 0;

+ 0 - 348
industry-system/cqcy-ei-common/src/main/java/com/example/opc_common/util/DateUtil.java

@@ -5,7 +5,6 @@ import lombok.Data;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
-import java.util.GregorianCalendar;
 
 @Data
 public class DateUtil {
@@ -39,27 +38,6 @@ public class DateUtil {
     }
 
     /**
-     * 时间字符串转为Date类型
-     *
-     * @param dateStr
-     * @param pattern
-     * @return
-     */
-    public static Date strChangeDate(String dateStr, String pattern) {
-        if (Blank.isEmpty(pattern)) {
-            return null;
-        }
-        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
-        Date date = null;
-        try {
-            date = sdf.parse(dateStr);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return date;
-    }
-
-    /**
      * Date时间转换为年月日时分秒毫秒字符串
      *
      * @param date
@@ -94,14 +72,6 @@ public class DateUtil {
     }
 
     /**
-     * 获取当前年月日字符串格式为yyyy-MM-dd HH:mm:ss
-     */
-    public static String getCurrentYmdHms() {
-        Calendar calendar = Calendar.getInstance();
-        return dateChangeStrYmdhms(calendar.getTime());
-    }
-
-    /**
      * 获取当前年月日字符串格式为yyyy-MM-dd
      */
     public static String getCurrentYmd() {
@@ -109,15 +79,6 @@ public class DateUtil {
         return dateChangeStr(calendar.getTime(), "yyyy-MM-dd");
     }
 
-    /**
-     * 星期1-6,对应数字1-6,星期天对应0
-     *
-     * @return
-     */
-    public static Integer getCurrentWeek() {
-        Calendar cal = Calendar.getInstance();
-        return cal.get(Calendar.DAY_OF_WEEK) - 1;
-    }
 
     /**
      * 返回今天是星期几的英文
@@ -147,313 +108,4 @@ public class DateUtil {
         }
     }
 
-    /**
-     * 将时间戳转换为年月日时分秒
-     *
-     * @param time
-     * @return
-     */
-    public static String longStrYmdhms(long time) {
-        Date date = new Date(time);
-        return dateChangeStrYmdhms(date);
-    }
-
-    /**
-     * 将时间戳转为相应的时间格式字符串
-     *
-     * @param time
-     * @param pattern
-     * @return
-     */
-    public static String longStr(Long time, String pattern) {
-        Date date = new Date(time);
-        return dateChangeStr(date, pattern);
-    }
-
-    /**
-     * 判断时间字符串是否符合传入的格式验证
-     *
-     * @param dateStr
-     * @param pattern
-     * @return
-     */
-    public static Boolean isValid(String dateStr, String pattern) {
-        if (Blank.isEmpty(pattern, dateStr)) {
-            return false;
-        }
-        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
-//        sdf.setLenient(false);
-        try {
-            sdf.parse(dateStr);
-        } catch (Exception e) {
-            return false;
-        }
-        return true;
-    }
-
-
-    /**
-     * 获取今天日期 年月日
-     *
-     * @return
-     */
-    public static Date getTodayYmd() {
-        Date now = new Date();
-        Calendar cal1 = Calendar.getInstance();
-        cal1.setTime(now);
-        // 将时分秒,毫秒域清零
-        cal1.set(Calendar.HOUR_OF_DAY, 0);
-        cal1.set(Calendar.MINUTE, 0);
-        cal1.set(Calendar.SECOND, 0);
-        cal1.set(Calendar.MILLISECOND, 0);
-        return cal1.getTime();
-    }
-
-    /**
-     * 获取昨天日期 年月日
-     *
-     * @return
-     */
-    public static Date getYesterdayYmd() {
-        Calendar cal = new GregorianCalendar();
-        cal.set(Calendar.HOUR_OF_DAY, 0);
-        cal.set(Calendar.MINUTE, 0);
-        cal.set(Calendar.SECOND, 0);
-        cal.set(Calendar.MILLISECOND, 0);
-        cal.add(Calendar.DAY_OF_MONTH, -1);
-        return cal.getTime();
-    }
-
-    /**
-     * 传入天和小时,如果传入天为0,则是今天,为1则是明天,-1为昨天,以此类推;传入的小时,传多少是多少
-     *
-     * @param day
-     * @param hour
-     * @return
-     */
-    public static Date getAppointDh(int day, int hour) {
-        Calendar cal = new GregorianCalendar();
-        if (Blank.isNotEmpty(day)) {
-            cal.add(Calendar.DATE, day);
-        }
-        if (Blank.isNotEmpty(hour)) {
-            cal.set(Calendar.HOUR, hour);
-        }
-        cal.set(Calendar.MINUTE, 0);
-        cal.set(Calendar.SECOND, 0);
-        return cal.getTime();
-    }
-
-    /**
-     * 通过传入的时间字符串和格式,返回时间戳
-     *
-     * @param dateStr
-     * @param pattern
-     * @return
-     */
-    public static Long genTimeStamp(String dateStr, String pattern) {
-        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
-        try {
-            Date date = sdf.parse(dateStr);
-            return date.getTime();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return 0L;
-    }
-
-    public static Long genTimeStampDay(String dateStr, String pattern, int day) {
-        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
-        try {
-            Date date = sdf.parse(dateStr);
-            Calendar calendar = Calendar.getInstance();
-            calendar.setTime(date);
-            calendar.add(Calendar.DATE, day);
-            return calendar.getTime().getTime();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return 0L;
-    }
-
-    public static Long genTimeStampHour(String dateStr, String pattern, int hour) {
-        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
-        try {
-            Date date = sdf.parse(dateStr);
-            Calendar calendar = Calendar.getInstance();
-            calendar.setTime(date);
-            calendar.add(Calendar.HOUR, hour);
-            return calendar.getTime().getTime();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return 0L;
-    }
-
-    public static Long genTimeStampMinute(String dateStr, String pattern, int minute) {
-        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
-        try {
-            Date date = sdf.parse(dateStr);
-            Calendar calendar = Calendar.getInstance();
-            calendar.setTime(date);
-            calendar.add(Calendar.MINUTE, minute);
-            return calendar.getTime().getTime();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return 0L;
-    }
-
-    public static Long genTimeStampSecond(String dateStr, String pattern, int second) {
-        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
-        try {
-            Date date = sdf.parse(dateStr);
-            Calendar calendar = Calendar.getInstance();
-            calendar.setTime(date);
-            calendar.add(Calendar.SECOND, second);
-            return calendar.getTime().getTime();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return 0L;
-    }
-
-    public static Long addTimeStamp(Long startTime, String pattern, Integer bucketValue) {
-        Calendar calendar = Calendar.getInstance();
-        Date date = new Date(startTime);
-        calendar.setTime(date);
-        if (pattern.length() == 10) {
-            calendar.add(Calendar.DATE, bucketValue);
-        } else if (pattern.length() == 13) {
-            calendar.add(Calendar.HOUR, bucketValue);
-        } else if (pattern.length() == 16) {
-            calendar.add(Calendar.MINUTE, bucketValue);
-        } else if (pattern.length() == 19) {
-            calendar.add(Calendar.SECOND, bucketValue);
-        }
-        return calendar.getTime().getTime();
-    }
-
-    public static Long addTimeStamp1(Long startTime, Integer bucketType, Integer bucketValue) {
-        Calendar calendar = Calendar.getInstance();
-        Date date = new Date(startTime);
-        calendar.setTime(date);
-        if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
-            calendar.add(Calendar.DATE, bucketValue);
-        } else if (bucketType.equals(ConstantStr.PERIOD_TIME_HOUR)) {
-            calendar.add(Calendar.HOUR, bucketValue);
-        } else if (bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE)) {
-            calendar.add(Calendar.MINUTE, bucketValue);
-        } else if (bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
-            calendar.add(Calendar.SECOND, bucketValue);
-        }
-        return calendar.getTime().getTime();
-    }
-
-    public static Long addTimeStamp2(Long startTime, Integer bucketType, Integer bucketValue) {
-        Calendar calendar = Calendar.getInstance();
-        Date date = new Date(startTime);
-        calendar.setTime(date);
-        if (bucketType.equals(Calendar.DAY_OF_MONTH)) {
-            calendar.add(Calendar.DATE, bucketValue);
-        } else if (bucketType.equals(Calendar.HOUR)) {
-            calendar.add(Calendar.HOUR, bucketValue);
-        } else if (bucketType.equals(Calendar.MINUTE)) {
-            calendar.add(Calendar.MINUTE, bucketValue);
-        } else if (bucketType.equals(Calendar.SECOND)) {
-            calendar.add(Calendar.SECOND, bucketValue);
-        }
-        return calendar.getTime().getTime();
-    }
-
-    public static int timeDifference(Date startTime, Date endTime, String pattern, Integer bucketValue) {
-        if (pattern.length() == 10) {
-            if (((endTime.getTime() - startTime.getTime()) % (bucketValue * 24 * 60 * 60 * 1000)) == 0) {
-                return (int) ((endTime.getTime() - startTime.getTime()) / (bucketValue * 24 * 60 * 60 * 1000));
-            }
-            return (int) ((endTime.getTime() - startTime.getTime()) / (bucketValue * 24 * 60 * 60 * 1000)) + 1;
-        } else if (pattern.length() == 13) {
-            if (((endTime.getTime() - startTime.getTime()) % (bucketValue * 60 * 60 * 1000)) == 0) {
-                return (int) ((endTime.getTime() - startTime.getTime()) / (bucketValue * 60 * 60 * 1000));
-            }
-            return (int) ((endTime.getTime() - startTime.getTime()) / (bucketValue * 60 * 60 * 1000)) + 1;
-        } else if (pattern.length() == 16) {
-            if (((endTime.getTime() - startTime.getTime()) % (bucketValue * 60 * 1000)) == 0) {
-                return (int) ((endTime.getTime() - startTime.getTime()) / (bucketValue * 60 * 1000));
-            }
-            return (int) ((endTime.getTime() - startTime.getTime()) / (bucketValue * 60 * 1000)) + 1;
-        } else if (pattern.length() == 19) {
-            if (((endTime.getTime() - startTime.getTime()) % (bucketValue * 1000)) == 0) {
-                return (int) ((endTime.getTime() - startTime.getTime()) / (bucketValue * 1000));
-            }
-            return (int) ((endTime.getTime() - startTime.getTime()) / (bucketValue * 1000)) + 1;
-        }
-        return 0;
-    }
-
-    public static int timeDifference1(Date startTime, Date endTime, Integer bucketType, Integer bucketValue) {
-        long time = endTime.getTime() - startTime.getTime();
-        if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
-            if ((time % (bucketValue * 24 * 60 * 60 * 1000)) == 0) {
-                return (int) (time / (bucketValue * 24 * 60 * 60 * 1000));
-            }
-            return (int) (time / (bucketValue * 24 * 60 * 60 * 1000)) + 1;
-        } else if (bucketType.equals(ConstantStr.PERIOD_TIME_HOUR)) {
-            if ((time % (bucketValue * 60 * 60 * 1000)) == 0) {
-                return (int) (time / (bucketValue * 60 * 60 * 1000));
-            }
-            return (int) (time / (bucketValue * 60 * 60 * 1000)) + 1;
-        } else if (bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE)) {
-            if ((time % (bucketValue * 60 * 1000)) == 0) {
-                return (int) (time / (bucketValue * 60 * 1000));
-            }
-            return (int) (time / (bucketValue * 60 * 1000)) + 1;
-        } else if (bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
-            if ((time % (bucketValue * 1000)) == 0) {
-                return (int) (time / (bucketValue * 1000));
-            }
-            return (int) (time / (bucketValue * 1000)) + 1;
-        }
-        return 0;
-    }
-
-    public static int timeDifference2(Date startTime, Date endTime, Integer bucketType, Integer bucketValue) {
-        long time = endTime.getTime() - startTime.getTime();
-        if (bucketType.equals(Calendar.DAY_OF_MONTH)) {
-            if ((time % (bucketValue * 24 * 60 * 60 * 1000)) == 0) {
-                return (int) (time / (bucketValue * 24 * 60 * 60 * 1000));
-            }
-            return (int) (time / (bucketValue * 24 * 60 * 60 * 1000)) + 1;
-        } else if (bucketType.equals(Calendar.HOUR)) {
-            if ((time % (bucketValue * 60 * 60 * 1000)) == 0) {
-                return (int) (time / (bucketValue * 60 * 60 * 1000));
-            }
-            return (int) (time / (bucketValue * 60 * 60 * 1000)) + 1;
-        } else if (bucketType.equals(Calendar.MINUTE)) {
-            if ((time % (bucketValue * 60 * 1000)) == 0) {
-                return (int) (time / (bucketValue * 60 * 1000));
-            }
-            return (int) (time / (bucketValue * 60 * 1000)) + 1;
-        } else if (bucketType.equals(Calendar.SECOND)) {
-            if ((time % (bucketValue * 1000)) == 0) {
-                return (int) (time / (bucketValue * 1000));
-            }
-            return (int) (time / (bucketValue * 1000)) + 1;
-        }
-        return 0;
-    }
-
-    /**
-     * @param type        1年,2月,5日
-     * @param num         0当,-1昨,-2前
-     * @param currentTime 当前时间
-     * @return
-     */
-    public static Date countCalendarDate(Integer type, Integer num, Date currentTime) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(currentTime);
-        calendar.add(type, num);
-        return calendar.getTime();
-    }
-
 }

+ 1 - 1
industry-system/industry-da/src/main/java/com/example/opc_da/controller/ReportDataPolicyController.java

@@ -195,7 +195,7 @@ public class ReportDataPolicyController {
     @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTDATAPOLICY, OperationEnum = OperationEnum.SELECT)
     public Result getPolicyHistoryDataByItemIdList(@RequestParam String idList, @RequestParam Integer valueType
             , @RequestParam String startTime, @RequestParam String endTime, String dataValueType
-            , @RequestParam Integer valueTakingMode, @RequestParam String bucketType
+            , @RequestParam Integer valueTakingMode, @RequestParam Integer bucketType
             , @RequestParam Integer bucketValue, String chartType, Integer limit) {
         idList = idList.substring(1, idList.length() - 1);
         // 将字符串分割并转换成整数集合

+ 1 - 1
industry-system/industry-da/src/main/java/com/example/opc_da/service/ReportDataPolicyService.java

@@ -33,6 +33,6 @@ public interface ReportDataPolicyService {
     Result getPolicyRealDataByItemIdList(List<Integer> idList, Integer valueType);
 
     Result getPolicyHistoryDataByItemIdList(List<Integer> idList, Integer valueType, String startTime, String endTime
-            , String dataValueType, Integer valueTakingMode, String bucketType, Integer bucketValue, String chartType, Integer limit);
+            , String dataValueType, Integer valueTakingMode, Integer bucketType, Integer bucketValue, String chartType, Integer limit);
 
 }

+ 5 - 16
industry-system/industry-da/src/main/java/com/example/opc_da/service/impl/ReportDataPolicyServiceImpl.java

@@ -22,6 +22,7 @@ import com.example.opc_da.timer.QuartzTimerFactory;
 import com.example.opc_da.util.InFluxDBServiceUtil;
 import com.example.opc_da.util.QueryServiceUtil;
 import com.example.opc_da.util.RedisUtil;
+import com.example.opc_da.util.bucketType.BucketTypeFactory;
 import com.example.opc_da.util.calculate.CalculateDataFactory;
 import com.example.opc_da.validate.reportDataPolicy.ReportDataPolicyValidateFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -325,7 +326,7 @@ public class ReportDataPolicyServiceImpl implements ReportDataPolicyService {
     public Result getPolicyHistoryDataByItemIdList(List<Integer> idList, Integer valueType,
                                                    String startTime, String endTime,
                                                    String dataValueType, Integer valueTakingMode,
-                                                   String bucketType, Integer bucketValue, String chartType, Integer limit) {
+                                                   Integer bucketType, Integer bucketValue, String chartType, Integer limit) {
         //得到开始和结束时间
         LocalDateTime startLocalDateTime = LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern(timePattern));
         LocalDateTime endLocalDateTime = LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern(timePattern));
@@ -372,7 +373,7 @@ public class ReportDataPolicyServiceImpl implements ReportDataPolicyService {
      * @param startLocalDateTime
      * @param endLocalDateTime
      */
-    private ReportDataPolicyItem extracted(String dataValueType, Integer valueTakingMode, String bucketType
+    private ReportDataPolicyItem extracted(String dataValueType, Integer valueTakingMode, Integer bucketType
             , Integer bucketValue, Integer limit, ReportDataPolicyItem policyItem
             , LocalDateTime startLocalDateTime, LocalDateTime endLocalDateTime) {
         //获取数据集
@@ -406,7 +407,7 @@ public class ReportDataPolicyServiceImpl implements ReportDataPolicyService {
      * @param endLocalDateTime
      */
     private ReportDataPolicyItem generateDataSet(ReportDataPolicyItem policyItem, Integer valueTakingMode
-            , String bucketType, Integer bucketValue, LocalDateTime startLocalDateTime
+            , Integer bucketType, Integer bucketValue, LocalDateTime startLocalDateTime
             , LocalDateTime endLocalDateTime) {
         List<String> flagDataValueList = new ArrayList<>();
         List<String> flagDataTimeList = new ArrayList<>();
@@ -416,19 +417,7 @@ public class ReportDataPolicyServiceImpl implements ReportDataPolicyService {
         LocalDateTime eDateTime;
         //如果sDateTime小于endDateTime
         while (sDateTime.isBefore(endLocalDateTime)) {
-            if (bucketType.equals(ConstantStr.PERIOD_TIME_MONTH)) {
-                eDateTime = sDateTime.plusMonths(bucketValue);
-            } else if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
-                eDateTime = sDateTime.plusDays(bucketValue);
-            } else if (bucketType.equals(ConstantStr.PERIOD_TIME_HOUR)) {
-                eDateTime = sDateTime.plusHours(bucketValue);
-            } else if (bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE)) {
-                eDateTime = sDateTime.plusMinutes(bucketValue);
-            } else if (bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
-                eDateTime = sDateTime.plusSeconds(bucketValue);
-            } else {
-                throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "时段类型错误");
-            }
+            eDateTime = BucketTypeFactory.getBucketType(bucketType).plusLocalDateTime(sDateTime, bucketValue);
             List<String> valueList = new ArrayList<>();
             if (CollUtil.isNotEmpty(dataValueList)) {
                 for (int i = 0; i < dataValueList.size(); i++) {

+ 32 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/AmountEnum.java

@@ -0,0 +1,32 @@
+package com.example.opc_da.util.bucketType;
+
+import lombok.Getter;
+
+import java.util.Arrays;
+
+// 定义AmountEnum枚举类型
+@Getter
+public enum AmountEnum {
+
+    // 枚举常量LAST表示最后一个,其key为1,value为-1
+    LAST(1, -1),
+    // 枚举常量CURRENCt表示当前的,其key为2,value为0
+    CURRENCt(2, 0);
+
+    private Integer key; // 枚举常量的key值
+    private Integer value; // 枚举常量的value值
+
+    // 枚举类的构造函数,传入key和value进行初始化
+    AmountEnum(Integer key, Integer value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    // 根据key值获取对应的AmountEnum枚举常量
+    public static AmountEnum getAmount(Integer key) {
+        return Arrays.stream(AmountEnum.values())
+                .filter(a -> a.getKey().equals(key))
+                .findFirst()
+                .orElse(null);  // 如果没有找到对应的枚举值,可以根据实际需求返回一个默认值或者抛出异常
+    }
+}

+ 22 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/BucketType.java

@@ -0,0 +1,22 @@
+package com.example.opc_da.util.bucketType;
+
+import java.time.LocalDateTime;
+
+public interface BucketType {
+    /**
+     * 获取日期时间
+     *
+     * @param referTime     参考时间
+     * @param bucketType    时段类型:0月,1天,2时,3分,4秒
+     * @param timeType      时间类型
+     * @param timeValue     时间值
+     * @param dateTimeType  日期时间类型
+     * @param dateTimeValue 日期时间值
+     * @param timeEventType 时间事件类型 1开始,2结束
+     * @return 本地日期时间
+     */
+    LocalDateTime getLocalDateTime(LocalDateTime referTime, Integer bucketType, Integer timeType, Integer timeValue,
+                                   Integer dateTimeType, String dateTimeValue, Integer timeEventType);
+
+    LocalDateTime plusLocalDateTime(LocalDateTime referTime, Integer bucketValue);
+}

+ 30 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/BucketTypeFactory.java

@@ -0,0 +1,30 @@
+package com.example.opc_da.util.bucketType;
+
+import com.example.opc_common.enums.ResultEnum;
+import com.example.opc_common.exception.CustomException;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class BucketTypeFactory {
+
+    private static final Map<Integer, BucketType> bucketTypeMap = new HashMap<>();
+
+    // 静态初始化块,将各种计算方式放入映射中
+    static {
+        //时段类型:0月,1天,2时,3分,4秒
+        bucketTypeMap.put(0, new MonthBucketType());
+        bucketTypeMap.put(1, new DayBucketType());
+        bucketTypeMap.put(2, new HourBucketType());
+        bucketTypeMap.put(3, new MinuteBucketType());
+        bucketTypeMap.put(4, new SecondBucketType());
+    }
+
+    public static BucketType getBucketType(Integer type) {
+        BucketType bucketType = bucketTypeMap.get(type);
+        if (bucketType == null) {
+            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前未适配此种类型的计算方式");
+        }
+        return bucketType;
+    }
+}

+ 37 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/DayBucketType.java

@@ -0,0 +1,37 @@
+package com.example.opc_da.util.bucketType;
+
+import com.example.opc_common.util.Blank;
+
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+
+// 定义一个实现了BucketType接口的DayBucketType类
+public class DayBucketType implements BucketType {
+    // 重写接口中的方法,根据给定的参数计算出LocalDateTime对象
+    @Override
+    public LocalDateTime getLocalDateTime(LocalDateTime referTime, Integer bucketType, Integer timeType, Integer timeValue,
+                                          Integer dateTimeType, String dateTimeValue, Integer timeEventType) {
+        // 如果referTime不为空,则对其进行时间调整,否则使用当前时间并增加指定的月份
+        if (Blank.isNotEmpty(referTime)) {
+            referTime = referTime.plusMonths(AmountEnum.getAmount(timeType).getValue());
+        } else {
+            referTime = LocalDateTime.now();
+            referTime = referTime.plusMonths(AmountEnum.getAmount(timeType).getValue() + 1);
+        }
+        //设置天
+        referTime.withDayOfMonth(timeValue);
+        // 如果timeEventType为1,则将时间调整为当天的最早时间
+        if (timeEventType == 1) {
+            return LocalDateTime.of(referTime.toLocalDate(), LocalTime.MIN);
+            // 如果timeEventType为2,则将时间调整为当天的最晚时间
+        } else if (timeEventType == 2) {
+            return LocalDateTime.of(referTime.toLocalDate(), LocalTime.MAX);
+        }
+        return LocalDateTime.now();
+    }
+
+    @Override
+    public LocalDateTime plusLocalDateTime(LocalDateTime referTime, Integer bucketValue) {
+        return referTime.plusDays(bucketValue);
+    }
+}

+ 31 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/HourBucketType.java

@@ -0,0 +1,31 @@
+package com.example.opc_da.util.bucketType;
+
+import com.example.opc_common.util.Blank;
+
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+
+// 小时时段类型,实现BucketType接口
+public class HourBucketType implements BucketType {
+    // 获取日期时间
+    @Override
+    public LocalDateTime getLocalDateTime(LocalDateTime referTime, Integer bucketType, Integer timeType, Integer timeValue,
+                                          Integer dateTimeType, String dateTimeValue, Integer timeEventType) {
+        if (Blank.isEmpty(referTime)) {
+            // 如果referTime为空,则将其加上指定天数
+            referTime = referTime.plusDays(AmountEnum.getAmount(dateTimeType).getValue());
+        } else {
+            // 如果referTime不为空,则将其设置为当前时间,然后加上指定天数和1天
+            referTime = LocalDateTime.now();
+            referTime = referTime.plusDays(AmountEnum.getAmount(dateTimeType).getValue() + 1);
+        }
+        // 返回设置了指定时间的referTime
+        return referTime.with(LocalTime.parse(dateTimeValue, DateTimeFormatter.ofPattern("HH:mm:ss")));
+    }
+
+    @Override
+    public LocalDateTime plusLocalDateTime(LocalDateTime referTime, Integer bucketValue) {
+        return referTime.plusHours(bucketValue);
+    }
+}

+ 29 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/MinuteBucketType.java

@@ -0,0 +1,29 @@
+package com.example.opc_da.util.bucketType;
+
+import com.example.opc_common.util.Blank;
+
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+
+// 实现 BucketType 接口的分钟时段类型类
+public class MinuteBucketType implements BucketType {
+
+    // 获取日期时间
+    @Override
+    public LocalDateTime getLocalDateTime(LocalDateTime referTime, Integer bucketType, Integer timeType, Integer timeValue,
+                                          Integer dateTimeType, String dateTimeValue, Integer timeEventType) {
+        if (Blank.isEmpty(referTime)) {  // 如果参考时间为空
+            referTime = referTime.plusDays(AmountEnum.getAmount(dateTimeType).getValue());  // 将参考时间增加指定天数
+        } else {
+            referTime = LocalDateTime.now();  // 否则将参考时间设置为当前时间
+            referTime = referTime.plusDays(AmountEnum.getAmount(dateTimeType).getValue() + 1);  // 然后将参考时间增加指定天数再加1天
+        }
+        return referTime.with(LocalTime.parse(dateTimeValue, DateTimeFormatter.ofPattern("HH:mm:ss")));  // 返回设置了指定小时、分钟和秒的日期时间
+    }
+
+    @Override
+    public LocalDateTime plusLocalDateTime(LocalDateTime referTime, Integer bucketValue) {
+        return referTime.plusMinutes(bucketValue);
+    }
+}

+ 36 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/MonthBucketType.java

@@ -0,0 +1,36 @@
+package com.example.opc_da.util.bucketType;
+
+import com.example.opc_common.util.Blank;
+
+import java.time.LocalDateTime;
+import java.time.temporal.TemporalAdjusters;
+
+// 月份时段类型实现类
+public class MonthBucketType implements BucketType {
+    @Override
+    // 获取本地日期时间
+    public LocalDateTime getLocalDateTime(LocalDateTime referTime, Integer bucketType, Integer timeType, Integer timeValue,
+                                          Integer dateTimeType, String dateTimeValue, Integer timeEventType) {
+        // 如果参考时间不为空,则在其基础上增加年份
+        if (Blank.isNotEmpty(referTime)) {
+            referTime = referTime.plusYears(AmountEnum.getAmount(timeType).getValue());
+        } else {
+            // 如果参考时间为空,则使用当前时间,并在其基础上增加年份
+            referTime = LocalDateTime.now();
+            referTime = referTime.plusYears(AmountEnum.getAmount(timeType).getValue() + 1);
+        }
+        // 设置月份
+        referTime = referTime.withMonth(timeValue);
+        if (timeEventType == 1) {
+            return referTime.with(TemporalAdjusters.firstDayOfMonth());
+        } else if (timeEventType == 2) {
+            return referTime.with(TemporalAdjusters.lastDayOfMonth());
+        }
+        return LocalDateTime.now();
+    }
+
+    @Override
+    public LocalDateTime plusLocalDateTime(LocalDateTime referTime, Integer bucketValue) {
+        return referTime.plusMonths(bucketValue);
+    }
+}

+ 31 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/util/bucketType/SecondBucketType.java

@@ -0,0 +1,31 @@
+package com.example.opc_da.util.bucketType;
+
+import com.example.opc_common.util.Blank;
+
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+
+// 实现桶类型接口的秒级时段类型类
+public class SecondBucketType implements BucketType {
+    // 重写获取日期时间的方法
+    @Override
+    public LocalDateTime getLocalDateTime(LocalDateTime referTime, Integer bucketType, Integer timeType, Integer timeValue,
+                                          Integer dateTimeType, String dateTimeValue, Integer timeEventType) {
+        // 如果参考时间为空,则参考时间加上指定天数
+        if (Blank.isEmpty(referTime)) {
+            referTime = referTime.plusDays(AmountEnum.getAmount(dateTimeType).getValue());
+        } else {
+            // 否则,使用当前时间作为参考时间,并加上指定天数再加一天
+            referTime = LocalDateTime.now();
+            referTime = referTime.plusDays(AmountEnum.getAmount(dateTimeType).getValue() + 1);
+        }
+        // 返回按指定格式解析后的参考时间
+        return referTime.with(LocalTime.parse(dateTimeValue, DateTimeFormatter.ofPattern("HH:mm:ss")));
+    }
+
+    @Override
+    public LocalDateTime plusLocalDateTime(LocalDateTime referTime, Integer bucketValue) {
+        return referTime.plusSeconds(bucketValue);
+    }
+}

+ 21 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/util/cycleTime/CycleTime.java

@@ -0,0 +1,21 @@
+package com.example.opc_da.util.cycleTime;
+
+import java.time.LocalDateTime;
+
+// 定义CycleTime接口
+public interface CycleTime {
+
+    /**
+     * 获取日期时间
+     *
+     * @param referTime     参考时间
+     * @param bucketType    时间间隔类型
+     * @param timeType      时间类型
+     * @param timeValue     时间值
+     * @param dateTimeType  日期时间类型
+     * @param dateTimeValue 日期时间值
+     * @return 返回日期时间
+     */
+    LocalDateTime getLocalDateTime(LocalDateTime referTime, Integer bucketType, Integer timeType, Integer timeValue,
+                                   Integer dateTimeType, String dateTimeValue);
+}

+ 28 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/util/cycleTime/CycleTimeFactory.java

@@ -0,0 +1,28 @@
+package com.example.opc_da.util.cycleTime;
+
+import com.example.opc_common.enums.ResultEnum;
+import com.example.opc_common.exception.CustomException;
+
+import java.util.HashMap;
+import java.util.Map;
+
+// 周期时间工厂类
+public class CycleTimeFactory {
+    // 存储不同类型周期时间对象的映射
+    private static final Map<Integer, CycleTime> cycleTimeMap = new HashMap<>();
+
+    // 静态初始化块,将各种计算方式放入映射中
+    static {
+        cycleTimeMap.put(1, new StartCycleTime());
+        cycleTimeMap.put(2, new EndCycleTime());
+    }
+
+    // 获取指定类型的周期时间对象
+    public static CycleTime getCycleTime(Integer type) {
+        CycleTime cycleTime = cycleTimeMap.get(type);
+        if (cycleTime == null) {
+            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前未适配此种获取周期的时间");
+        }
+        return cycleTime;
+    }
+}

+ 17 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/util/cycleTime/EndCycleTime.java

@@ -0,0 +1,17 @@
+package com.example.opc_da.util.cycleTime;
+
+import com.example.opc_da.util.bucketType.BucketTypeFactory;
+
+import java.time.LocalDateTime;
+
+// 实现 CycleTime 接口的 EndCycleTime 类
+public class EndCycleTime implements CycleTime {
+    // 重写 getLocalDateTime 方法
+    @Override
+    public LocalDateTime getLocalDateTime(LocalDateTime referTime, Integer bucketType, Integer timeType, Integer timeValue,
+                                          Integer dateTimeType, String dateTimeValue) {
+        // 返回 BucketTypeFactory 根据 bucketType 获取的 BucketType 实现类的 getLocalDateTime 方法的调用结果
+        return BucketTypeFactory.getBucketType(bucketType)
+                .getLocalDateTime(referTime, bucketType, timeType, timeValue, dateTimeType, dateTimeValue,2);
+    }
+}

+ 18 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/util/cycleTime/StartCycleTime.java

@@ -0,0 +1,18 @@
+package com.example.opc_da.util.cycleTime;
+
+import com.example.opc_da.util.bucketType.BucketTypeFactory;
+
+import java.time.LocalDateTime;
+
+// 实现 CycleTime 接口的 StartCycleTime 类
+public class StartCycleTime implements CycleTime {
+    // 重写获取本地日期时间的方法
+    @Override
+    public LocalDateTime getLocalDateTime(LocalDateTime referTime, Integer bucketType, Integer timeType, Integer timeValue,
+                                          Integer dateTimeType, String dateTimeValue) {
+        // 调用 BucketTypeFactory 的 getBucketType 方法,获取指定桶类型的实例,
+        // 然后调用该实例的 getLocalDateTime 方法,并返回其结果
+        return BucketTypeFactory.getBucketType(bucketType)
+                .getLocalDateTime(referTime, bucketType, timeType, timeValue, dateTimeType, dateTimeValue, 1);
+    }
+}

+ 29 - 119
industry-system/industry-da/src/main/java/com/example/opc_da/validate/reportTable/AutomaticReportTableValidate.java

@@ -5,21 +5,19 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.cqcy.ei.influxdb.entity.Item;
 import com.cqcy.ei.influxdb.service.InFluxDBService;
-import com.example.opc_common.enums.ResultEnum;
-import com.example.opc_common.exception.CustomException;
 import com.example.opc_common.util.Blank;
 import com.example.opc_common.util.ConstantStr;
 import com.example.opc_da.config.SpringContextUtils;
 import com.example.opc_da.task.ReportTableBasicItemEnum;
+import com.example.opc_da.util.bucketType.BucketTypeFactory;
 import com.example.opc_da.util.calculate.CalculateDataFactory;
+import com.example.opc_da.util.cycleTime.CycleTimeFactory;
 import lombok.extern.slf4j.Slf4j;
 import org.jetbrains.annotations.NotNull;
 
 import javax.validation.constraints.NotBlank;
 import java.time.LocalDateTime;
-import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
-import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -239,7 +237,7 @@ public abstract class AutomaticReportTableValidate implements ReportTableValidat
      */
     private List<Item> countUidData(JSONObject jsonObject, List<Item> itemList, LocalDateTime referTime) {
         JSONObject setting = jsonObject.getJSONObject("setting");
-        String bucketType = setting.getString("bucketType");
+        Integer bucketType = setting.getInteger("bucketType");
 
         //根据上面时间类型,生成sTime,eTime
         LocalDateTime sTime = getSheetStartTime(setting, referTime);
@@ -326,12 +324,13 @@ public abstract class AutomaticReportTableValidate implements ReportTableValidat
      * @return
      */
     private LocalDateTime getSheetStartTime(JSONObject setting, LocalDateTime referTime) {
-        String bucketType = setting.getString("bucketType");
-        String timeType1 = setting.getString("timeType1");
+        Integer bucketType = setting.getInteger("bucketType");
+        Integer timeType1 = setting.getInteger("timeType1");
         Integer timeValue1 = setting.getInteger("timeValue1");
-        String dateTimeType1 = setting.getString("dateTimeType1");
+        Integer dateTimeType1 = setting.getInteger("dateTimeType1");
         String startTime = setting.getString("startTime");
-        return generateCycleTime(referTime, bucketType, timeType1, timeValue1, dateTimeType1, startTime);
+        return CycleTimeFactory.getCycleTime(1)
+                .getLocalDateTime(referTime, bucketType, timeType1, timeValue1, dateTimeType1, startTime);
     }
 
     /**
@@ -342,13 +341,14 @@ public abstract class AutomaticReportTableValidate implements ReportTableValidat
      * @return
      */
     private LocalDateTime getSheetEndTime(JSONObject setting, LocalDateTime referTime) {
-        String bucketType = setting.getString("bucketType");
+        Integer bucketType = setting.getInteger("bucketType");
 
-        String timeType2 = setting.getString("timeType2");
+        Integer timeType2 = setting.getInteger("timeType2");
         Integer timeValue2 = setting.getInteger("timeValue2");
-        String dateTimeType2 = setting.getString("dateTimeType2");
+        Integer dateTimeType2 = setting.getInteger("dateTimeType2");
         String endTime = setting.getString("endTime");
-        LocalDateTime localDateTime = generateCycleTime(referTime, bucketType, timeType2, timeValue2, dateTimeType2, endTime);
+        LocalDateTime localDateTime = CycleTimeFactory.getCycleTime(2)
+                .getLocalDateTime(referTime, bucketType, timeType2, timeValue2, dateTimeType2, endTime);
         return localDateTime.isBefore(LocalDateTime.now()) ? localDateTime : LocalDateTime.now();
     }
 
@@ -382,7 +382,7 @@ public abstract class AutomaticReportTableValidate implements ReportTableValidat
         String policyId = dataForm.getString("chart-item-group");
 
         String valueType = dataForm.getString("valueType");
-        String bucketType = dataForm.getString("bucketType");
+        Integer bucketType = dataForm.getInteger("bucketType");
 
         //根据配置信息,生成统计图的开始和结束时间
         LocalDateTime sTime = getChartStartTime(dataForm, referTime);
@@ -452,14 +452,15 @@ public abstract class AutomaticReportTableValidate implements ReportTableValidat
      * @return
      */
     private LocalDateTime getChartStartTime(JSONObject dataForm, LocalDateTime referTime) {
-        String bucketType = dataForm.getString("bucketType");
+        Integer bucketType = dataForm.getInteger("bucketType");
 
-        String chartTimeType1 = dataForm.getString("chartTimeType1");
+        Integer chartTimeType1 = dataForm.getInteger("chartTimeType1");
         Integer chartTimeValue1 = dataForm.getInteger("chartTimeValue1");
-        String chartDateTimeType1 = dataForm.getString("chartDateTimeType1");
+        Integer chartDateTimeType1 = dataForm.getInteger("chartDateTimeType1");
         String chartSettingData1 = dataForm.getString("chartSettingData1");
-        return generateCycleTime(referTime, bucketType, chartTimeType1,
-                chartTimeValue1, chartDateTimeType1, chartSettingData1);
+        return CycleTimeFactory.getCycleTime(1)
+                .getLocalDateTime(referTime, bucketType, chartTimeType1,
+                        chartTimeValue1, chartDateTimeType1, chartSettingData1);
 
     }
 
@@ -471,97 +472,19 @@ public abstract class AutomaticReportTableValidate implements ReportTableValidat
      * @return
      */
     private LocalDateTime getChartEndTime(JSONObject dataForm, LocalDateTime referTime) {
-        String bucketType = dataForm.getString("bucketType");
+        Integer bucketType = dataForm.getInteger("bucketType");
 
-        String chartTimeType2 = dataForm.getString("chartTimeType2");
+        Integer chartTimeType2 = dataForm.getInteger("chartTimeType2");
         Integer chartTimeValue2 = dataForm.getInteger("chartTimeValue2");
-        String chartDateTimeType2 = dataForm.getString("chartDateTimeType2");
+        Integer chartDateTimeType2 = dataForm.getInteger("chartDateTimeType2");
         String chartSettingData2 = dataForm.getString("chartSettingData2");
-        LocalDateTime localDateTime = generateCycleTime(referTime, bucketType, chartTimeType2,
-                chartTimeValue2, chartDateTimeType2, chartSettingData2);
+        LocalDateTime localDateTime = CycleTimeFactory.getCycleTime(2)
+                .getLocalDateTime(referTime, bucketType, chartTimeType2,
+                        chartTimeValue2, chartDateTimeType2, chartSettingData2);
         return localDateTime.isBefore(LocalDateTime.now()) ? localDateTime : LocalDateTime.now();
     }
 
     /**
-     * 生成周期报表时间方法
-     *
-     * @param referTime     参考时间,如果时间为空,则是查实时数据,不为空,则查历史数据
-     * @param bucketType    时段类型:0月,1天,2时,3粉,4秒
-     * @param timeType      0当,1次
-     * @param timeValue     值
-     * @param dateTimeType
-     * @param dateTimeValue
-     * @return
-     */
-    private LocalDateTime generateCycleTime(LocalDateTime referTime, String bucketType, String timeType, Integer timeValue,
-                                            String dateTimeType, String dateTimeValue) {
-        if (Blank.isNotEmpty(referTime)) {
-            if (bucketType.equals(ConstantStr.PERIOD_TIME_MONTH)) {
-                //如果时段类型选择为月
-                if (timeType.equals(ConstantStr.TYPE_LAST)) {
-                    //参考时间的上一年 指定月 第一天
-                    return referTime.minusYears(1).withMonth(timeValue).with(TemporalAdjusters.firstDayOfMonth());
-                } else if (timeType.equals(ConstantStr.TYPE_CURRENT)) {
-                    //参考时间的本年 指定月 第一天
-                    return referTime.withMonth(timeValue).with(TemporalAdjusters.firstDayOfMonth());
-                }
-            } else if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
-                //如果时段类型选择为日
-                if (timeType.equals(ConstantStr.TYPE_LAST)) {
-                    //参考时间的本年 上一月 指定天
-                    return referTime.minusMonths(1).withDayOfMonth(timeValue);
-                } else if (timeType.equals(ConstantStr.TYPE_CURRENT)) {
-                    //参考时间的本年 本月 指定天
-                    return referTime.withDayOfMonth(timeValue);
-                }
-            } else if (bucketType.equals(ConstantStr.PERIOD_TIME_HOUR) ||
-                    bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE) ||
-                    bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
-                //如果时段类型选择为时,分,秒
-                if (dateTimeType.equals(ConstantStr.TYPE_LAST)) {
-                    //参考时间的本年 本月 下一天 指定时分秒
-                    return referTime.minusDays(1).with(LocalTime.parse(dateTimeValue, DateTimeFormatter.ofPattern("HH:mm:ss")));
-                } else if (dateTimeType.equals(ConstantStr.TYPE_CURRENT)) {
-                    //参考时间的本年 本月 本天 指定时分秒
-                    return referTime.with(LocalTime.parse(dateTimeValue, DateTimeFormatter.ofPattern("HH:mm:ss")));
-                }
-            }
-        }
-        referTime = LocalDateTime.now();
-        if (bucketType.equals(ConstantStr.PERIOD_TIME_MONTH)) {
-            //如果时段类型选择为月
-            if (timeType.equals(ConstantStr.TYPE_LAST)) {
-                //参考时间的本年 指定月 第一天
-                return referTime.withMonth(timeValue).with(TemporalAdjusters.firstDayOfMonth());
-            } else if (timeType.equals(ConstantStr.TYPE_CURRENT)) {
-                //参考时间的下一年 指定月 第一天
-                return referTime.plusYears(1).withMonth(timeValue).with(TemporalAdjusters.firstDayOfMonth());
-            }
-        } else if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
-            //如果时段类型选择为日
-            if (timeType.equals(ConstantStr.TYPE_LAST)) {
-                //参考时间的本年 本月 指定天
-                return referTime.withDayOfMonth(timeValue);
-            } else if (timeType.equals(ConstantStr.TYPE_CURRENT)) {
-                //参考时间的本年 下一月 指定天
-                return referTime.plusMonths(1).withDayOfMonth(timeValue);
-            }
-        } else if (bucketType.equals(ConstantStr.PERIOD_TIME_HOUR) ||
-                bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE) ||
-                bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
-            //如果时段类型选择为时,分,秒
-            if (dateTimeType.equals(ConstantStr.TYPE_LAST)) {
-                //参考时间的本年 本月 本天 指定时分秒
-                return referTime.with(LocalTime.parse(dateTimeValue, DateTimeFormatter.ofPattern("HH:mm:ss")));
-            } else if (dateTimeType.equals(ConstantStr.TYPE_CURRENT)) {
-                //参考时间的本年 本月 下一天 指定时分秒
-                return referTime.plusDays(1).with(LocalTime.parse(dateTimeValue, DateTimeFormatter.ofPattern("HH:mm:ss")));
-            }
-        }
-        return LocalDateTime.now();
-    }
-
-    /**
      * 通过开始时间和结束时间分割数据,并计算
      *
      * @param dataValueType   0数据集,1单值,空也为数据集
@@ -574,7 +497,7 @@ public abstract class AutomaticReportTableValidate implements ReportTableValidat
      * @return
      */
     private List<Item> splitData(String dataValueType, List<Item> itemList, LocalDateTime startDateTime, LocalDateTime endDateTime,
-                                 Integer valueTakingMode, String bucketType, Integer bucketValue) {
+                                 Integer valueTakingMode, Integer bucketType, Integer bucketValue) {
         List<Item> newItemList = new ArrayList<>();
         //获取数据集
         if (Blank.isEmpty(dataValueType) || dataValueType.equals(ConstantStr.DATA_SET)) {
@@ -582,19 +505,7 @@ public abstract class AutomaticReportTableValidate implements ReportTableValidat
             LocalDateTime eDateTime;
             //如果sDateTime小于endDateTime
             while (sDateTime.isBefore(endDateTime)) {
-                if (bucketType.equals(ConstantStr.PERIOD_TIME_MONTH)) {
-                    eDateTime = sDateTime.plusMonths(bucketValue);
-                } else if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
-                    eDateTime = sDateTime.plusDays(bucketValue);
-                } else if (bucketType.equals(ConstantStr.PERIOD_TIME_HOUR)) {
-                    eDateTime = sDateTime.plusHours(bucketValue);
-                } else if (bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE)) {
-                    eDateTime = sDateTime.plusMinutes(bucketValue);
-                } else if (bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
-                    eDateTime = sDateTime.plusSeconds(bucketValue);
-                } else {
-                    throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "时段类型错误");
-                }
+                eDateTime = BucketTypeFactory.getBucketType(bucketType).plusLocalDateTime(sDateTime, bucketValue);
                 List<String> valueList = new ArrayList<>();
                 if (CollUtil.isNotEmpty(itemList)) {
                     for (int i = 0; i < itemList.size(); i++) {
@@ -626,8 +537,7 @@ public abstract class AutomaticReportTableValidate implements ReportTableValidat
             newItemList.add(new Item()
                     .value(CalculateDataFactory.getCalculateData(valueTakingMode).calculateData(
                             itemList.stream()
-                                    .map(i ->
-                                            i.getValue()).collect(Collectors.toList())))
+                                    .map(Item::getValue).collect(Collectors.toList())))
                     .time(startDateTime.format(DateTimeFormatter.ofPattern(timePattern))));
         }
         return newItemList;