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