From d32bc8f5fa5cd1a9ef293614124420b17acdaa5f Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Thu, 23 Sep 2021 15:21:08 +0800
Subject: [PATCH] screen-api                   增加小时和五分钟跨表查询

---
 screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java        |   44 ++++
 screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java     |    1 
 screen-common/src/main/java/com/moral/util/DateUtils.java                                |  202 ++++++++++++++++++-
 screen-api/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java           |    2 
 screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java  |   40 ++++
 screen-common/src/main/java/com/moral/constant/KafkaConstants.java                       |    1 
 screen-api/src/main/java/com/moral/api/config/mybatis/MybatisPlusConfig.java             |   46 +++-
 screen-common/src/main/java/com/moral/util/MybatisPLUSUtils.java                         |   58 +++++
 screen-api/src/main/java/com/moral/api/config/mybatis/PaginationInnerInterceptorIIL.java |  103 ++++++++++
 screen-common/src/main/java/com/moral/constant/SeparateTableType.java                    |   18 +
 screen-api/src/main/java/com/moral/api/config/mybatis/MybatisIntercept.java              |   55 +++++
 11 files changed, 532 insertions(+), 38 deletions(-)

diff --git a/screen-api/src/main/java/com/moral/api/config/mybatis/MybatisIntercept.java b/screen-api/src/main/java/com/moral/api/config/mybatis/MybatisIntercept.java
new file mode 100644
index 0000000..902fd99
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/config/mybatis/MybatisIntercept.java
@@ -0,0 +1,55 @@
+package com.moral.api.config.mybatis;
+
+import org.apache.ibatis.executor.statement.StatementHandler;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.plugin.*;
+import org.apache.ibatis.reflection.DefaultReflectorFactory;
+import org.apache.ibatis.reflection.MetaObject;
+import org.apache.ibatis.reflection.SystemMetaObject;
+import java.sql.Connection;
+import java.util.Properties;
+
+import static javax.xml.bind.JAXBIntrospector.getValue;
+
+
+/**
+ * @ClassName MybatisIntercept
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/17 10:57
+ * @Version TODO
+ **/
+//@Component
+/*@Intercepts({
+        //type���������������������������������method������������Executor������������������,args������Executor������query������������������������������
+        //������Executor������������query���������������������@Signature
+        @Signature(type = Executor.class,method = "query",args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class}),
+        @Signature(type = Executor.class, method = "query", args = { MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class })//������������������������������
+})*/
+
+@Intercepts({
+        //type���������������������������������method������������Executor������������������,args������Executor������query������������������������������
+        //������Executor������������query���������������������@Signature
+        @Signature(method = "prepare", type = StatementHandler.class, args = {Connection.class,Integer.class})
+})
+public class MybatisIntercept implements Interceptor {
+
+    @Override
+    public Object intercept(Invocation invocation) throws Throwable {
+        System.out.println(11);
+        return null;
+    }
+
+    @Override
+    public Object plugin(Object target) {
+        Object wrap = Plugin.wrap(target, this);
+        return wrap;
+    }
+
+    @Override
+    public void setProperties(Properties properties) {
+
+    }
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/config/mybatis/MybatisPlusConfig.java b/screen-api/src/main/java/com/moral/api/config/mybatis/MybatisPlusConfig.java
index b919465..a43b5e9 100644
--- a/screen-api/src/main/java/com/moral/api/config/mybatis/MybatisPlusConfig.java
+++ b/screen-api/src/main/java/com/moral/api/config/mybatis/MybatisPlusConfig.java
@@ -1,10 +1,20 @@
 package com.moral.api.config.mybatis;
 
 import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.parsers.DynamicTableNameParser;
+import com.baomidou.mybatisplus.extension.parsers.ITableNameHandler;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
 import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import com.moral.api.entity.HistoryFiveMinutely;
+import com.moral.api.mapper.HistoryFiveMinutelyMapper;
+import com.moral.api.service.HistorySecondUavService;
+import com.moral.api.service.impl.HistorySecondUavServiceImpl;
+import com.moral.api.service.impl.OrganizationServiceImpl;
+import org.apache.ibatis.reflection.MetaObject;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -15,29 +25,37 @@
 @Configuration
 public class MybatisPlusConfig {
 
-    /**
-    * @Description: ������������������
-            * @Param: []
-            * @return: com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor
-            * @Author: ���������
-            * @Date: 2021/7/15
-            */
+    public static ThreadLocal<String> tableName = new ThreadLocal<>();
+
     @Bean
-    public MybatisPlusInterceptor mybatisPlusInterceptor(){
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+
         //������������
-        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptorIIL(DbType.MYSQL));
+
+        // ������������SQL���������
         DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
-        HashMap<String, TableNameHandler> map = new HashMap<String, TableNameHandler>();
-        map.put("history_five_minutely",(sql,tableName)->{ Date date = new Date();
-            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
-            String month = sdf.format(date);
-            return tableName+"_"+month;});
+        HashMap<String, TableNameHandler> map = new HashMap<>();
+        map.put("history_hourly", (sql, tableName) -> tableName+this.tableName.get());
+        map.put("history_five_minutely", (sql, tableName) -> tableName+this.tableName.get());
 
         dynamicTableNameInnerInterceptor.setTableNameHandlerMap(map);
         interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
+
         return interceptor;
     }
 
+    /*@Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+
+        //������������
+        PaginationInnerInterceptorIIL paginationInnerInterceptorIIL = new PaginationInnerInterceptorIIL(DbType.MYSQL);
+        paginationInnerInterceptorIIL.setMultiTableQueryName(multiTableQueryNames);
+        interceptor.addInnerInterceptor(paginationInnerInterceptorIIL);
+
+        return interceptor;
+    }*/
 
 }
diff --git a/screen-api/src/main/java/com/moral/api/config/mybatis/PaginationInnerInterceptorIIL.java b/screen-api/src/main/java/com/moral/api/config/mybatis/PaginationInnerInterceptorIIL.java
new file mode 100644
index 0000000..4c69042
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/config/mybatis/PaginationInnerInterceptorIIL.java
@@ -0,0 +1,103 @@
+package com.moral.api.config.mybatis;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ParameterUtils;
+import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.DialectModel;
+import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.IDialect;
+import lombok.SneakyThrows;
+import net.sf.jsqlparser.JSQLParserException;
+import net.sf.jsqlparser.parser.CCJSqlParserUtil;
+import net.sf.jsqlparser.schema.Table;
+import net.sf.jsqlparser.statement.select.*;
+import org.apache.ibatis.executor.Executor;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.ParameterMapping;
+import org.apache.ibatis.session.Configuration;
+import org.apache.ibatis.session.ResultHandler;
+import org.apache.ibatis.session.RowBounds;
+
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/18 10:13
+ * @Version TODO
+ **/
+public class PaginationInnerInterceptorIIL extends PaginationInnerInterceptor {
+
+    private List<String> multiTableQueryName;
+
+    public void setMultiTableQueryName(List<String> multiTableQueryName) {
+        this.multiTableQueryName = multiTableQueryName;
+    }
+
+    public PaginationInnerInterceptorIIL(DbType dbType) {
+        super(dbType);
+    }
+
+    @SneakyThrows
+    @Override
+    public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
+        IPage<?> page = ParameterUtils.findPage(parameter).orElse(null);
+        if (null == page) {
+            return;
+        }
+
+        // ������ orderBy ������
+        boolean addOrdered = false;
+        String buildSql = boundSql.getSql();
+        List<OrderItem> orders = page.orders();
+        if (!CollectionUtils.isEmpty(orders)) {
+            addOrdered = true;
+            buildSql = this.concatOrderBy(buildSql, orders);
+        }
+
+
+        // size ������ 0 ���������������sql
+        if (page.getSize() < 0) {
+            if (addOrdered) {
+                PluginUtils.mpBoundSql(boundSql).sql(buildSql);
+            }
+            return;
+        }
+
+        handlerLimit(page);
+        IDialect dialect = findIDialect(executor);
+
+        //������������������������������������
+        String tableName = getTableName(buildSql);
+        if(multiTableQueryName.contains(tableName)){
+            System.out.println(111);
+        }
+
+        final Configuration configuration = ms.getConfiguration();
+        DialectModel model = dialect.buildPaginationSql(buildSql, page.offset(), page.getSize());
+        PluginUtils.MPBoundSql mpBoundSql = PluginUtils.mpBoundSql(boundSql);
+
+        List<ParameterMapping> mappings = mpBoundSql.parameterMappings();
+        Map<String, Object> additionalParameter = mpBoundSql.additionalParameters();
+        model.consumers(mappings, configuration, additionalParameter);
+        mpBoundSql.sql(model.getDialectSql());
+        mpBoundSql.parameterMappings(mappings);
+    }
+
+    private String getTableName(String buildSql) throws JSQLParserException {
+        Select select = (Select) CCJSqlParserUtil.parse(buildSql);
+        PlainSelect selectBody = (PlainSelect) select.getSelectBody();
+        Table table = (Table) selectBody.getFromItem();
+        return  table.getName();
+    }
+
+
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java b/screen-api/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java
index 0021494..b6b0846 100644
--- a/screen-api/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java
+++ b/screen-api/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java
@@ -5,6 +5,7 @@
 import com.moral.api.pojo.dto.historyFiveMinutely.DeviceAndFiveMinuteDataDTO;
 import com.moral.api.pojo.form.historyFiveMinutely.QueryDeviceAndFiveMinuteDataForm;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -38,4 +39,5 @@
 
     //������5������������������
     List<Object> getAreaWindData(Map<String,Object> params);
+
 }
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java
index c9701ec..9e2198b 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java
@@ -2,9 +2,14 @@
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
+import com.baomidou.mybatisplus.core.conditions.segments.NormalSegmentList;
+import com.moral.api.config.mybatis.MybatisPlusConfig;
 import com.moral.api.entity.Device;
 import com.moral.api.entity.HistoryFiveMinutely;
+import com.moral.api.entity.HistoryHourly;
 import com.moral.api.entity.MonitorPoint;
 import com.moral.api.mapper.HistoryFiveMinutelyMapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -15,7 +20,9 @@
 import com.moral.api.service.HistoryFiveMinutelyService;
 import com.moral.api.service.MonitorPointService;
 import com.moral.constant.RedisConstants;
+import com.moral.constant.SeparateTableType;
 import com.moral.util.DateUtils;
+import com.moral.util.MybatisPLUSUtils;
 import io.lettuce.core.GeoCoordinates;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -287,6 +294,39 @@
         return list;
     }
 
+    /**
+     * @Description: ���������������������������mac���������
+     * @Param: [mac, startDate, endDate]
+     * @return: java.util.List<com.moral.api.entity.HistoryHourly>
+     * @Author: ���������
+     * @Date: 2021/9/23
+     */
+    public List<HistoryFiveMinutely> getValueByMacAndTime(String mac, Date startDate, Date endDate){
+        QueryWrapper<HistoryFiveMinutely> wrapper = new QueryWrapper<>();
+        wrapper.eq("mac",mac);
+        wrapper.between("time",startDate,endDate);
+        List<String> tableNames = MybatisPLUSUtils.getTableNamesByWrapper(startDate, endDate, SeparateTableType.MONTH);
+        List<HistoryFiveMinutely> datas = multiTableQuery(wrapper, tableNames);
+        return datas;
+    }
+
+    /**
+     * @Description: ������������������������������������������������wrapper���������������
+     * @Param: [wrapper, tableNames]
+     * @return: java.util.List<com.moral.api.entity.HistoryHourly>
+     * @Author: ���������
+     * @Date: 2021/9/23
+     */
+    private List<HistoryFiveMinutely> multiTableQuery(QueryWrapper<HistoryFiveMinutely> wrapper,List<String> tableNames){
+        List<HistoryFiveMinutely> result = new ArrayList<>();
+        for (String tableName : tableNames) {
+            MybatisPlusConfig.tableName.set(tableName);
+            List<HistoryFiveMinutely> datas = historyFiveMinutelyMapper.selectList(wrapper);
+            result.addAll(datas);
+        }
+        return result;
+    }
+
 
 
 
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
index 58b84a5..846ca66 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
@@ -1,19 +1,23 @@
 package com.moral.api.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.moral.api.config.mybatis.MybatisPlusConfig;
+import com.moral.api.entity.HistoryFiveMinutely;
+import com.moral.api.entity.HistoryHourly;
 import com.moral.api.mapper.HistoryHourlyMapper;
 import com.moral.api.service.HistoryHourlyService;
 import com.moral.constant.Constants;
+import com.moral.constant.SeparateTableType;
 import com.moral.util.AQIUtils;
 import com.moral.util.DateUtils;
 
+import com.moral.util.MybatisPLUSUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 
 /**
  * <p>
@@ -48,4 +52,38 @@
         result.put("AQI", AQIUtils.hourlyAqi(data));
         return result;
     }
+
+    /**
+    * @Description: ���������������������������mac���������
+            * @Param: [mac, startDate, endDate]
+            * @return: java.util.List<com.moral.api.entity.HistoryHourly>
+            * @Author: ���������
+            * @Date: 2021/9/23
+            */
+    public List<HistoryHourly> getValueByMacAndTime(String mac,Date startDate,Date endDate){
+        QueryWrapper<HistoryHourly> wrapper = new QueryWrapper<>();
+        wrapper.eq("mac",mac);
+        wrapper.between("time",startDate,endDate);
+        List<String> tableNames = MybatisPLUSUtils.getTableNamesByWrapper(startDate, endDate, SeparateTableType.MONTH);
+        List<HistoryHourly> datas = multiTableQuery(wrapper, tableNames);
+        return datas;
+    }
+
+    /**
+    * @Description: ������������������������������������������������wrapper���������������
+            * @Param: [wrapper, tableNames]
+            * @return: java.util.List<com.moral.api.entity.HistoryHourly>
+            * @Author: ���������
+            * @Date: 2021/9/23
+            */
+    private List<HistoryHourly> multiTableQuery(QueryWrapper<HistoryHourly> wrapper,List<String> tableNames){
+        List<HistoryHourly> result = new ArrayList<>();
+        for (String tableName : tableNames) {
+            MybatisPlusConfig.tableName.set(tableName);
+            List<HistoryHourly> datas = historyHourlyMapper.selectList(wrapper);
+            result.addAll(datas);
+        }
+        return result;
+    }
+
 }
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java
index 79340ac..cdca09d 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java
@@ -328,7 +328,6 @@
             String value = JSON.toJSONString(valueMap);
             data.setValue(value);
         }
-        System.out.println(111);
     }
 
 }
diff --git a/screen-common/src/main/java/com/moral/constant/KafkaConstants.java b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java
index 3f58d3c..7ec3107 100644
--- a/screen-common/src/main/java/com/moral/constant/KafkaConstants.java
+++ b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java
@@ -37,7 +37,6 @@
     * */
     public static final String CRUISER_TOPIC_HOUR = "cruiser_hour_data";
 
-
     /**
      * ���������������������������
      */
diff --git a/screen-common/src/main/java/com/moral/constant/SeparateTableType.java b/screen-common/src/main/java/com/moral/constant/SeparateTableType.java
new file mode 100644
index 0000000..11ef021
--- /dev/null
+++ b/screen-common/src/main/java/com/moral/constant/SeparateTableType.java
@@ -0,0 +1,18 @@
+package com.moral.constant;
+
+public enum SeparateTableType {
+
+    YEAR("yyyy"),
+    MONTH("yyyy_MM"),
+    DAY("yyyy_MM_dd");
+
+    private final String format;
+
+    SeparateTableType(String format) {
+        this.format = format;
+    }
+
+    public String getFormat() {
+        return format;
+    }
+}
diff --git a/screen-common/src/main/java/com/moral/util/DateUtils.java b/screen-common/src/main/java/com/moral/util/DateUtils.java
index 7b313a8..4c7d1f4 100644
--- a/screen-common/src/main/java/com/moral/util/DateUtils.java
+++ b/screen-common/src/main/java/com/moral/util/DateUtils.java
@@ -82,8 +82,8 @@
     public static final String yyyy_MM_dd_HH_EN = "yyyy-MM-dd HH";
 
     /*
-    * Date���toString������
-    * */
+     * Date���toString������
+     * */
     public static final String EEE_MMM_dd_HH_mm_ss_zzz_yyyy = "EEE MMM dd HH:mm:ss zzz yyyy";
     /**
      * DateFormat������
@@ -92,16 +92,16 @@
 
 
     /**
-    * @Description: ������������������������������������������������
-            * @Param: [date]
-            * @return: java.util.List<java.util.Date>
-            * @Author: ���������
-            * @Date: 2021/9/8
-            */
-    public static List<Date> dateToStartAndEndTime(Date date){
+     * @Description: ������������������������������������������������
+     * @Param: [date]
+     * @return: java.util.List<java.util.Date>
+     * @Author: ���������
+     * @Date: 2021/9/8
+     */
+    public static List<Date> dateToStartAndEndTime(Date date) {
         String dateStr = dateToDateString(date, "yyyy-MM-dd");
-        String startDateStr = dateStr+" 00:00:00";
-        String endDateStr = dateStr+" 23:59:59";
+        String startDateStr = dateStr + " 00:00:00";
+        String endDateStr = dateStr + " 23:59:59";
         Date startDate = getDate(startDateStr, "yyyy-MM-dd HH:mm:ss");
         Date endDate = getDate(endDateStr, "yyyy-MM-dd HH:mm:ss");
         ArrayList<Date> dates = new ArrayList<>();
@@ -112,13 +112,13 @@
 
 
     /**
-    * @Description: Date���toString������������Date
-            * @Param: []
-            * @return: java.util.Date
-            * @Author: ���������
-            * @Date: 2021/8/25
-            */
-    public static Date dateStringToDate(String formatStr){
+     * @Description: Date���toString������������Date
+     * @Param: []
+     * @return: java.util.Date
+     * @Author: ���������
+     * @Date: 2021/8/25
+     */
+    public static Date dateStringToDate(String formatStr) {
         try {
             SimpleDateFormat sdf = new SimpleDateFormat(EEE_MMM_dd_HH_mm_ss_zzz_yyyy, Locale.US);
             return sdf.parse(formatStr);
@@ -1284,6 +1284,170 @@
     }
 
     /**
+     * @Description: ���������������������������������
+     * @Param: [start, end]
+     * @return: int
+     * @Author: ���������
+     * @Date: 2021/9/23
+     */
+    public static int getMonth(Date start, Date end) {
+        if (start.after(end)) {
+            Date t = start;
+            start = end;
+            end = t;
+        }
+        Calendar startCalendar = Calendar.getInstance();
+        startCalendar.setTime(start);
+        Calendar endCalendar = Calendar.getInstance();
+        endCalendar.setTime(end);
+        Calendar temp = Calendar.getInstance();
+        temp.setTime(end);
+        temp.add(Calendar.DATE, 1);
+
+        int year = endCalendar.get(Calendar.YEAR)
+                - startCalendar.get(Calendar.YEAR);
+        int month = endCalendar.get(Calendar.MONTH)
+                - startCalendar.get(Calendar.MONTH);
+
+        if ((startCalendar.get(Calendar.DATE) == 1)
+                && (temp.get(Calendar.DATE) == 1)) {
+            return year * 12 + month + 1;
+        } else if ((startCalendar.get(Calendar.DATE) != 1)
+                && (temp.get(Calendar.DATE) == 1)) {
+            return year * 12 + month;
+        } else if ((startCalendar.get(Calendar.DATE) == 1)
+                && (temp.get(Calendar.DATE) != 1)) {
+            return year * 12 + month;
+        } else {
+            return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month);
+        }
+    }
+
+    /**
+     * @Description: ���������������������������������������
+     * @Param: [start, end]
+     * @return: java.util.List<java.lang.String>
+     * @Author: ���������
+     * @Date: 2021/9/23
+     */
+    public static List<String> getAllMonth(Date start, Date end) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(start);
+        // ���������������������������������
+        int startYear = calendar.get(Calendar.YEAR);
+        int startMonth = calendar.get(Calendar.MONTH);
+        // ���������������������������������
+        calendar.setTime(end);
+        int endYear = calendar.get(Calendar.YEAR);
+        int endMonth = calendar.get(Calendar.MONTH);
+        //
+        List<String> list = new ArrayList<String>();
+
+        for (int i = startYear; i <= endYear; i++) {
+            String date = "";
+            if (startYear == endYear) {
+                for (int j = startMonth; j <= endMonth; j++) {
+                    if (j < 9) {
+                        date = i + "-0" + (j + 1);
+                    } else {
+                        date = i + "-" + (j + 1);
+                    }
+                    list.add(date);
+                }
+
+            } else {
+                if (i == startYear) {
+                    for (int j = startMonth; j < 12; j++) {
+                        if (j < 9) {
+                            date = i + "-0" + (j + 1);
+                        } else {
+                            date = i + "-" + (j + 1);
+                        }
+                        list.add(date);
+                    }
+                } else if (i == endYear) {
+                    for (int j = 0; j <= endMonth; j++) {
+                        if (j < 9) {
+                            date = i + "-0" + (j + 1);
+                        } else {
+                            date = i + "-" + (j + 1);
+                        }
+                        list.add(date);
+                    }
+                } else {
+                    for (int j = 0; j < 12; j++) {
+                        if (j < 9) {
+                            date = i + "-0" + (j + 1);
+                        } else {
+                            date = i + "-" + (j + 1);
+                        }
+                        list.add(date);
+                    }
+                }
+
+            }
+
+        }
+
+        return list;
+    }
+
+    /**
+     * @Description: ���������������������������������������
+     * @Param: [start, end]
+     * @return: java.util.List<java.lang.String>
+     * @Author: ���������
+     * @Date: 2021/9/23
+     */
+    public static List<String> getAllYear(Date start, Date end) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(start);
+        int startYear = calendar.get(Calendar.YEAR);
+        calendar.setTime(end);
+        int endYear = calendar.get(Calendar.YEAR);
+
+        List<String> list = new ArrayList<>();
+        list.add(String.valueOf(startYear));
+
+        int i = endYear - startYear;
+
+        for (int j = 1; j < i + 1; j++) {
+            list.add(String.valueOf(startYear + j));
+        }
+
+        return list;
+    }
+
+    public static List<String> getAllDays(Date start, Date end) {
+        List<String> list = new ArrayList<String>();
+        SimpleDateFormat outformat = new SimpleDateFormat("yyyy-MM-dd");
+
+        Calendar sCalendar = Calendar.getInstance();
+        sCalendar.setTime(start);
+        int year = sCalendar.get(Calendar.YEAR);
+        int month = sCalendar.get(Calendar.MONTH);
+        int day = sCalendar.get(Calendar.DATE);
+        sCalendar.set(year, month, day, 0, 0, 0);
+
+        Calendar eCalendar = Calendar.getInstance();
+        eCalendar.setTime(end);
+        year = eCalendar.get(Calendar.YEAR);
+        month = eCalendar.get(Calendar.MONTH);
+        day = eCalendar.get(Calendar.DATE);
+        eCalendar.set(year, month, day, 0, 0, 0);
+
+        while (sCalendar.before(eCalendar)) {
+            list.add(outformat.format(sCalendar.getTime()));
+            sCalendar.add(Calendar.DAY_OF_YEAR, 1);
+        }
+        list.add(outformat.format(eCalendar.getTime()));
+
+        return list;
+
+    }
+
+
+    /**
      * ������������ date
      *
      * @param longDate ���������
@@ -1430,7 +1594,7 @@
         }
         cal.setTime(getDate(time, df));
         for (long d = cal.getTimeInMillis(); d < getDate(end, df).getTime(); cal.set(i, cal.get(i) + 1), d = cal.getTimeInMillis()) {
-            String format = dateToDateString(new Date(d),dateFormat);
+            String format = dateToDateString(new Date(d), dateFormat);
             result.add(format);
         }
         return result;
diff --git a/screen-common/src/main/java/com/moral/util/MybatisPLUSUtils.java b/screen-common/src/main/java/com/moral/util/MybatisPLUSUtils.java
new file mode 100644
index 0000000..fb73ff5
--- /dev/null
+++ b/screen-common/src/main/java/com/moral/util/MybatisPLUSUtils.java
@@ -0,0 +1,58 @@
+package com.moral.util;
+
+import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
+import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
+import com.baomidou.mybatisplus.core.conditions.segments.NormalSegmentList;
+import com.moral.constant.SeparateTableType;
+import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @ClassName MybatisPLUSUtils
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/23 10:45
+ * @Version TODO
+ **/
+public class MybatisPLUSUtils {
+
+    /**
+     * @Description: ������wrapper������������������������������
+     * @Param: [wrapper]
+     * @return: java.util.List<java.lang.String>
+     * @Author: ���������
+     * @Date: 2021/9/23
+     */
+    public static List<String> getTableNamesByWrapper(Date startDate, Date endDate,SeparateTableType type) {
+
+        List<String> tableNames = new ArrayList<>();
+
+        if (type == SeparateTableType.MONTH) {
+            List<String> months = DateUtils.getAllMonth(startDate, endDate);
+            for (String month : months) {
+                month = month.replaceAll("-", "");
+                tableNames.add("_" + month);
+            }
+        } else if (type == SeparateTableType.YEAR) {
+            List<String> years = DateUtils.getAllYear(startDate, endDate);
+            for (String year : years) {
+                tableNames.add("_" + year);
+            }
+        } else {
+            List<String> days = DateUtils.getAllDays(startDate, endDate);
+            for (String day : days) {
+                day = day.replaceAll("-", "");
+                tableNames.add("_"+day);
+            }
+        }
+        return tableNames;
+    }
+
+}

--
Gitblit v1.8.0