|
@@ -0,0 +1,476 @@
|
|
|
+package com.persagy.dmp.report.service;
|
|
|
+
|
|
|
+import com.persagy.common.date.DateUtils;
|
|
|
+import com.persagy.dmp.config.DmpParameterStorage;
|
|
|
+import com.persagy.dmp.report.common.criteria.JacksonCriteria;
|
|
|
+import com.persagy.dmp.report.entity.*;
|
|
|
+import com.persagy.dmp.report.enumeration.DateType;
|
|
|
+import com.persagy.dmp.report.repository.ReportConfigGroupRepository;
|
|
|
+import com.persagy.dmp.report.repository.ReportConfigRepository;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.context.ApplicationContext;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.lang.reflect.Constructor;
|
|
|
+import java.lang.reflect.Field;
|
|
|
+import java.lang.reflect.InvocationTargetException;
|
|
|
+import java.lang.reflect.Method;
|
|
|
+import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author fengyanjie
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class ReportUtils {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ApplicationContext applicationContext;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ReportConfigRepository reportConfigRepository;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ReportConfigGroupRepository reportConfigGroupRepository;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 多维度处理
|
|
|
+ *
|
|
|
+ * @param index 下标
|
|
|
+ * @param groupList 维度数据
|
|
|
+ * @param clazz 对象实例
|
|
|
+ * @param list 处理后的数据
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ public List<BaseEntity> initData(Integer index, List<ReportConfigGroup> groupList, Class<? extends BaseEntity> clazz, List<BaseEntity> list) throws Exception {
|
|
|
+ if (index == groupList.size()) {
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+ ReportConfigGroup reportConfigGroup = groupList.get(index);
|
|
|
+ List<Object[]> groupValueList = reportConfigGroup.getValueList();
|
|
|
+ String[] conlumnNameList = reportConfigGroup.getConlumnName().split(",");
|
|
|
+ int nextIndex = (index + 1);
|
|
|
+ if (0 != groupValueList.size()) {
|
|
|
+ initData(0, groupValueList, conlumnNameList, clazz, new ArrayList<>(), list);
|
|
|
+ }
|
|
|
+ return initData(nextIndex, groupList, clazz, list);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 组合维度处理
|
|
|
+ *
|
|
|
+ * @param index 下标
|
|
|
+ * @param groupValueList 组合维度值
|
|
|
+ * @param conlumnNameList 组合维度名称
|
|
|
+ * @param clazz 对象实例
|
|
|
+ * @param resultList 处理后的数据
|
|
|
+ * @param list 原数据
|
|
|
+ */
|
|
|
+ private void initData(Integer index, List<Object[]> groupValueList, String[] conlumnNameList, Class<? extends BaseEntity> clazz, List<BaseEntity> resultList, List<BaseEntity> list) throws Exception {
|
|
|
+ if (index == groupValueList.size()) {
|
|
|
+ list.clear();
|
|
|
+ list.addAll(resultList);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Object[] valueList = groupValueList.get(index);
|
|
|
+ if (0 == list.size()) {
|
|
|
+ BaseEntity result = clazz.getDeclaredConstructor().newInstance();
|
|
|
+ for (int i = 0; i < conlumnNameList.length; i++) {
|
|
|
+ String conlumnName = conlumnNameList[i];
|
|
|
+ Object value = valueList[i];
|
|
|
+ setValue(value, conlumnName, clazz, result);
|
|
|
+ }
|
|
|
+ resultList.add(result);
|
|
|
+ } else {
|
|
|
+ for (BaseEntity baseEntity : list) {
|
|
|
+ Constructor<?> constructor = clazz.getConstructor(baseEntity.getClass());
|
|
|
+ BaseEntity result = (BaseEntity) constructor.newInstance(baseEntity);
|
|
|
+ for (int i = 0; i < conlumnNameList.length; i++) {
|
|
|
+ String conlumnName = conlumnNameList[i];
|
|
|
+ Object value = valueList[i];
|
|
|
+ setValue(value, conlumnName, clazz, result);
|
|
|
+ }
|
|
|
+ resultList.add(result);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ int nextIndex = index + 1;
|
|
|
+ initData(nextIndex, groupValueList, conlumnNameList, clazz, resultList, list);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setValue(Object value, String conlumnName, Class clazz, BaseEntity result) throws Exception {
|
|
|
+ String val = value.toString();
|
|
|
+ if (conlumnName.equals("year")) {
|
|
|
+ Method dateMethod = BeanUtils.findMethod(clazz, "setCreateTime", value.getClass());
|
|
|
+ dateMethod.invoke(result, val);
|
|
|
+ } else if (conlumnName.equals("month")) {
|
|
|
+ Method dateMethod = BeanUtils.findMethod(clazz, "setCreateTime", value.getClass());
|
|
|
+ dateMethod.invoke(result, val);
|
|
|
+ dateMethod = BeanUtils.findMethod(clazz, "setYear", value.getClass());
|
|
|
+ dateMethod.invoke(result, val.substring(0, 4));
|
|
|
+ value = val.substring(4, 6);
|
|
|
+ } else if (conlumnName.equals("day")) {
|
|
|
+ Method dateMethod = BeanUtils.findMethod(clazz, "setCreateTime", value.getClass());
|
|
|
+ dateMethod.invoke(result, val);
|
|
|
+ dateMethod = BeanUtils.findMethod(clazz, "setYear", value.getClass());
|
|
|
+ dateMethod.invoke(result, val.substring(0, 4));
|
|
|
+ dateMethod = BeanUtils.findMethod(clazz, "setMonth", value.getClass());
|
|
|
+ dateMethod.invoke(result, val.substring(4, 6));
|
|
|
+ value = val.substring(6, 8);
|
|
|
+ } else if (conlumnName.equals("hour")) {
|
|
|
+ Method dateMethod = BeanUtils.findMethod(clazz, "setCreateTime", value.getClass());
|
|
|
+ dateMethod.invoke(result, val);
|
|
|
+ dateMethod = BeanUtils.findMethod(clazz, "setYear", value.getClass());
|
|
|
+ dateMethod.invoke(result, val.substring(0, 4));
|
|
|
+ dateMethod = BeanUtils.findMethod(clazz, "setMonth", value.getClass());
|
|
|
+ dateMethod.invoke(result, val.substring(4, 6));
|
|
|
+ dateMethod = BeanUtils.findMethod(clazz, "setDay", value.getClass());
|
|
|
+ dateMethod.invoke(result, val.substring(6, 8));
|
|
|
+ value = val.substring(8, 10);
|
|
|
+ }
|
|
|
+ String methodName = under2camel(conlumnName);
|
|
|
+ Method method = BeanUtils.findMethod(clazz, "set" + methodName, value.getClass());
|
|
|
+ if (null == method) {
|
|
|
+ throw new Exception("set" + methodName + " 方法不存在。");
|
|
|
+ }
|
|
|
+ method.invoke(result, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ private String concat(TreeSet<String> set) {
|
|
|
+ StringBuilder buff = new StringBuilder();
|
|
|
+ set.forEach(str -> buff.append(str).append("|"));
|
|
|
+ return buff.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 添加不重复的统计数据
|
|
|
+ *
|
|
|
+ * @param list 已统计数据
|
|
|
+ * @param resultList 总维度统计数据
|
|
|
+ * @param calculatedColumns 计算列
|
|
|
+ */
|
|
|
+ public List<BaseEntity> addList(List<BaseEntity> list, List<BaseEntity> resultList, List<JacksonCriteria.Calculated> calculatedColumns) throws InvocationTargetException, IllegalAccessException {
|
|
|
+ log.info("begin time:{} list.size:{} resultList.size:{} calculatedColumns.size:{}", DateUtils.format(new Date()), list.size(), resultList.size(), calculatedColumns.size());
|
|
|
+ String groupCode = DmpParameterStorage.getGroupCode();
|
|
|
+ String projectId = DmpParameterStorage.getProjectId();
|
|
|
+ Set<String> columnNameList = new HashSet<>();
|
|
|
+ calculatedColumns.forEach(item -> columnNameList.add(item.getColumn()));
|
|
|
+
|
|
|
+ Map<String, BaseEntity> maps = resultList.stream().collect(Collectors.toMap(entity -> {
|
|
|
+ TreeSet<String> treeSet = new TreeSet<>();
|
|
|
+ Field[] fields = entity.getClass().getDeclaredFields();
|
|
|
+ for (Field field : fields) {
|
|
|
+ String columnName = field.getName();
|
|
|
+ String methodName = columnName.substring(0, 1).toUpperCase() + columnName.substring(1);
|
|
|
+ try {
|
|
|
+ //处理计算字段
|
|
|
+ if (columnNameList.contains(columnName)) {
|
|
|
+ Method method = BeanUtils.findMethod(entity.getClass(), "set" + methodName, Integer.class);
|
|
|
+ Object val = 0;
|
|
|
+ if (null == method) {
|
|
|
+ method = BeanUtils.findMethod(entity.getClass(), "set" + methodName, Double.class);
|
|
|
+ val = 0.0D;
|
|
|
+ }
|
|
|
+ if (null == method) {
|
|
|
+ method = BeanUtils.findMethod(entity.getClass(), "set" + methodName, Long.class);
|
|
|
+ val = 0L;
|
|
|
+ }
|
|
|
+ method.invoke(entity, val);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //拼接key
|
|
|
+ Method method = null;
|
|
|
+ Object value = null;
|
|
|
+ if ("ProjectId".equals(methodName)) {
|
|
|
+ method = BeanUtils.findMethod(entity.getClass(), "set" + methodName, String.class);
|
|
|
+ method.invoke(entity, projectId);
|
|
|
+ value = projectId;
|
|
|
+ } else if ("GroupCode".equals(methodName)) {
|
|
|
+ method = BeanUtils.findMethod(entity.getClass(), "set" + methodName, String.class);
|
|
|
+ method.invoke(entity, groupCode);
|
|
|
+ value = groupCode;
|
|
|
+ } else {
|
|
|
+ method = BeanUtils.findMethod(entity.getClass(), "get" + methodName);
|
|
|
+ value = method.invoke(entity);
|
|
|
+ }
|
|
|
+ treeSet.add(columnName + "=" + value);
|
|
|
+ } catch (IllegalAccessException | InvocationTargetException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ String key = concat(treeSet);
|
|
|
+ return key;
|
|
|
+ }, Function.identity()));
|
|
|
+
|
|
|
+ for (BaseEntity data : list) {
|
|
|
+ TreeSet<String> treeSet = new TreeSet<>();
|
|
|
+ Field[] fields = data.getClass().getDeclaredFields();
|
|
|
+ for (Field field : fields) {
|
|
|
+ String columnName = field.getName();
|
|
|
+ if (columnNameList.contains(columnName)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String methodName = columnName.substring(0, 1).toUpperCase() + columnName.substring(1);
|
|
|
+ Method dataMethod = BeanUtils.findMethod(data.getClass(), "get" + methodName);
|
|
|
+ Object invoke = dataMethod.invoke(data);
|
|
|
+ treeSet.add(columnName + "=" + invoke);
|
|
|
+ }
|
|
|
+ String key = concat(treeSet);
|
|
|
+ BaseEntity entity = maps.get(key);
|
|
|
+ if (null != entity) {
|
|
|
+ maps.put(key, data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<BaseEntity> result = new ArrayList<>(maps.values());
|
|
|
+ log.info("end time:{} list.size:{} resultList.size:{} calculatedColumns.size:{}", DateUtils.format(new Date()), list.size(), resultList.size(), calculatedColumns.size());
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取所有的统计维度
|
|
|
+ */
|
|
|
+ public List<ReportConfigGroup> getGroupList(List<Object> groupList, DateType dateType, Date startTime, Date endTime) throws Exception {
|
|
|
+ List<ReportConfigGroup> result = new ArrayList<>();
|
|
|
+ List<String> conlumnNameList = new ArrayList<>();
|
|
|
+ for (Object obj : groupList) {
|
|
|
+ List<String> group = (List<String>) obj;
|
|
|
+ StringBuilder str = new StringBuilder();
|
|
|
+ group.forEach(item -> {
|
|
|
+ str.append(item).append(",");
|
|
|
+ });
|
|
|
+ String conlumnName = str.deleteCharAt(str.length() - 1).toString();
|
|
|
+ conlumnNameList.add(conlumnName);
|
|
|
+ }
|
|
|
+ QReportConfigGroup groupQt = QReportConfigGroup.reportConfigGroup;
|
|
|
+ Iterable<ReportConfigGroup> groupAll = reportConfigGroupRepository.findAll(groupQt.conlumnName.in(conlumnNameList));
|
|
|
+ for (ReportConfigGroup reportConfigGroup : groupAll) {
|
|
|
+ if (1 == reportConfigGroup.getValueType()) {
|
|
|
+ List<Object[]> valueList = new ArrayList<>();
|
|
|
+ String[] split = reportConfigGroup.getValue().split(",");
|
|
|
+ for (String value : split) {
|
|
|
+ valueList.add(new String[]{value});
|
|
|
+ }
|
|
|
+ reportConfigGroup.setValueList(valueList);
|
|
|
+ }
|
|
|
+ if (2 == reportConfigGroup.getValueType()) {
|
|
|
+ Class<?> groupClazz = Class.forName(reportConfigGroup.getValue());
|
|
|
+ Method groupMethod = BeanUtils.findMethod(groupClazz, reportConfigGroup.getMethod());
|
|
|
+ List<Object[]> invoke = (List<Object[]>) groupMethod.invoke(applicationContext.getBean(groupClazz));
|
|
|
+ reportConfigGroup.setValueList(invoke);
|
|
|
+ }
|
|
|
+ result.add(reportConfigGroup);
|
|
|
+ }
|
|
|
+ addDateType(result, dateType, startTime, endTime);
|
|
|
+ result.add(new ReportConfigGroup("date_type", Collections.singletonList(new Object[]{dateType})));
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据日期类型 返回时间范围内的所有日期
|
|
|
+ */
|
|
|
+ private void addDateType(List<ReportConfigGroup> groupList, DateType dateType, Date startTime, Date endTime) {
|
|
|
+ List<Object[]> year = new ArrayList<>();
|
|
|
+ List<Object[]> month = new ArrayList<>();
|
|
|
+ List<Object[]> day = new ArrayList<>();
|
|
|
+ List<Object[]> hour = new ArrayList<>();
|
|
|
+
|
|
|
+ if (DateType.YEAR == dateType) {
|
|
|
+ Set<String> yearList = getDateList(startTime, endTime, DateUtils.PATTERN_yyyy, Calendar.YEAR);
|
|
|
+ yearList.forEach(item -> year.add(new Object[]{item}));
|
|
|
+ }
|
|
|
+ if (DateType.MONTH == dateType) {
|
|
|
+ Set<String> monthList = getDateList(startTime, endTime, DateUtils.PATTERN_yyyyMM, Calendar.MONTH);
|
|
|
+ monthList.forEach(item -> month.add(new Object[]{item}));
|
|
|
+ }
|
|
|
+ if (DateType.DAY == dateType) {
|
|
|
+ Set<String> dayList = getDateList(startTime, endTime, DateUtils.PATTERN_yyyyMMdd, Calendar.DAY_OF_YEAR);
|
|
|
+ dayList.forEach(item -> day.add(new Object[]{item}));
|
|
|
+ }
|
|
|
+ if (DateType.HOUR == dateType) {
|
|
|
+ Set<String> hourList = getDateList(startTime, endTime, "yyyyMMddHH", Calendar.HOUR_OF_DAY);
|
|
|
+ hourList.forEach(item -> hour.add(new Object[]{item}));
|
|
|
+ }
|
|
|
+ if (DateType.SEASON == dateType) {
|
|
|
+ //TODO
|
|
|
+ }
|
|
|
+ groupList.add(new ReportConfigGroup("year", year));
|
|
|
+ groupList.add(new ReportConfigGroup("month", month));
|
|
|
+ groupList.add(new ReportConfigGroup("day", day));
|
|
|
+ groupList.add(new ReportConfigGroup("hour", hour));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询报表配置信息
|
|
|
+ */
|
|
|
+ public ReportConfig queryReportConfig(String tableName) {
|
|
|
+ QReportConfig configQt = QReportConfig.reportConfig;
|
|
|
+ Iterable<ReportConfig> configAll = reportConfigRepository.findAll(configQt.tableName.eq(tableName));
|
|
|
+ ReportConfig reportConfig = new ReportConfig();
|
|
|
+ configAll.forEach(item -> {
|
|
|
+ reportConfig.setCalculated(item.getCalculated());
|
|
|
+ reportConfig.setTableGroup(item.getTableGroup());
|
|
|
+ reportConfig.setGroupColumn(item.getGroupColumn());
|
|
|
+ reportConfig.setMappingName(item.getMappingName());
|
|
|
+ reportConfig.setTableName(item.getTableName());
|
|
|
+ if (null == reportConfig.getCalculatedColumns()) {
|
|
|
+ reportConfig.setCalculatedColumns(new ArrayList<>());
|
|
|
+ }
|
|
|
+ reportConfig.getCalculatedColumns().add(new JacksonCriteria.Calculated(item.getCalculated()));
|
|
|
+ });
|
|
|
+ return reportConfig;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据日期类型 拼接合适的统计sql 和 返回合适的日期格式
|
|
|
+ */
|
|
|
+ public void appendSql(StringBuilder sql, DateType dateType) {
|
|
|
+ if (DateType.YEAR == dateType) {
|
|
|
+ sql.append(" date_format(create_time, '%Y') year,'null' as month,'null' as day,'null' as hour,'null' as season,date_format(create_time, '%Y') date, \n");
|
|
|
+ }
|
|
|
+ if (DateType.MONTH == dateType) {
|
|
|
+ sql.append(" date_format(create_time, '%Y') year,date_format(create_time, '%m') month,'null' as day,'null' as hour,'null' as season,date_format(create_time, '%Y%m') date, \n");
|
|
|
+ }
|
|
|
+ if (DateType.DAY == dateType) {
|
|
|
+ sql.append(" date_format(create_time, '%Y') year,date_format(create_time, '%m') month,date_format(create_time, '%d') day,'null' as hour,'null' as season,date_format(create_time, '%Y%m%d') date, \n");
|
|
|
+ }
|
|
|
+ if (DateType.HOUR == dateType) {
|
|
|
+ sql.append(" date_format(create_time, '%Y') year,date_format(create_time, '%m') month,date_format(create_time, '%d') day,date_format(create_time, '%h') hour,'null' as season,date_format(create_time, '%Y%m%d%h') date, \n");
|
|
|
+ }
|
|
|
+ if (DateType.SEASON == dateType) {
|
|
|
+ sql.append(" date_format(create_time, '%Y') year,'null' as month,'null' as day,'null' as hour, \n");
|
|
|
+ sql.append(" QUARTER(create_time) season,CONCAT(date_format(create_time, '%Y'),(case QUARTER(create_time) when 1 then '01' when 2 then '04' when 3 then '07' when 4 then '10' end)) as date, \n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据日期类型 返回合适的日期格式
|
|
|
+ */
|
|
|
+ public Map<String, String> getDate(DateType dateType, Date startTime, Date endTime) {
|
|
|
+ Map<String, String> map = new HashMap<>();
|
|
|
+ String start = "";
|
|
|
+ String end = "";
|
|
|
+ if (DateType.YEAR == dateType) {
|
|
|
+ start = DateUtils.format(startTime, DateUtils.PATTERN_yyyy);
|
|
|
+ end = DateUtils.format(endTime, DateUtils.PATTERN_yyyy);
|
|
|
+ }
|
|
|
+ if (DateType.MONTH == dateType) {
|
|
|
+ start = DateUtils.format(startTime, DateUtils.PATTERN_yyyyMM);
|
|
|
+ end = DateUtils.format(endTime, DateUtils.PATTERN_yyyyMM);
|
|
|
+ }
|
|
|
+ if (DateType.DAY == dateType) {
|
|
|
+ start = DateUtils.format(startTime, DateUtils.PATTERN_yyyyMMdd);
|
|
|
+ end = DateUtils.format(endTime, DateUtils.PATTERN_yyyyMMdd);
|
|
|
+ }
|
|
|
+ if (DateType.HOUR == dateType) {
|
|
|
+ start = DateUtils.format(startTime, "yyyyMMddHH");
|
|
|
+ end = DateUtils.format(endTime, "yyyyMMddHH");
|
|
|
+ }
|
|
|
+ if (DateType.SEASON == dateType) {
|
|
|
+ start = DateUtils.format(startTime, DateUtils.PATTERN_yyyyMM);
|
|
|
+ end = DateUtils.format(endTime, DateUtils.PATTERN_yyyyMM);
|
|
|
+ }
|
|
|
+ map.put("start", start);
|
|
|
+ map.put("end", end);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取两个日期之间的所有月份
|
|
|
+ *
|
|
|
+ * @param start 开始日期 yyyyMM
|
|
|
+ * @param end 结束日期 yyyyMM
|
|
|
+ * @return 月份集合 {“yyyyMM”}
|
|
|
+ */
|
|
|
+ private Set<String> getDateList(Date start, Date end, String pattern, Integer field) {
|
|
|
+ Set<String> result = new HashSet<>();
|
|
|
+ Calendar tempStart = Calendar.getInstance();
|
|
|
+ tempStart.setTime(start);
|
|
|
+ tempStart.add(field, 1);
|
|
|
+ Calendar tempEnd = Calendar.getInstance();
|
|
|
+ tempEnd.setTime(end);
|
|
|
+ result.add(DateUtils.format(start, pattern));
|
|
|
+ while (tempStart.before(tempEnd)) {
|
|
|
+ result.add(DateUtils.format(tempStart.getTime(), pattern));
|
|
|
+ tempStart.add(field, 1);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下划线命名转驼峰命名
|
|
|
+ */
|
|
|
+ public String under2camel(String s) {
|
|
|
+ String separator = "_";
|
|
|
+ String under = "";
|
|
|
+ s = s.toLowerCase().replace(separator, " ");
|
|
|
+ String sarr[] = s.split(" ");
|
|
|
+ for (int i = 0; i < sarr.length; i++) {
|
|
|
+ String w = sarr[i].substring(0, 1).toUpperCase() + sarr[i].substring(1);
|
|
|
+ under += w;
|
|
|
+ }
|
|
|
+ return under;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据日期类型返回合适的日期格式
|
|
|
+ */
|
|
|
+ public Map<String, Date> getDateTime(DateType dateType) {
|
|
|
+ Map<String, Date> map = new HashMap<>();
|
|
|
+ Date startTimeDate = null;
|
|
|
+ Date endTimeDate = null;
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(new Date());
|
|
|
+ calendar.set(Calendar.MINUTE, 0);
|
|
|
+ calendar.set(Calendar.SECOND, 0);
|
|
|
+ calendar.set(Calendar.MINUTE, 0);
|
|
|
+ calendar.set(Calendar.SECOND, 0);
|
|
|
+ if (DateType.YEAR == dateType) {
|
|
|
+ calendar.set(Calendar.MONTH, 0);
|
|
|
+ calendar.set(Calendar.DATE, 1);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
+ startTimeDate = calendar.getTime();
|
|
|
+ endTimeDate = DateUtils.add(startTimeDate, Calendar.YEAR, 1);
|
|
|
+ }
|
|
|
+ if (DateType.MONTH == dateType) {
|
|
|
+ calendar.set(Calendar.DATE, 1);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
+ startTimeDate = calendar.getTime();
|
|
|
+ endTimeDate = DateUtils.add(startTimeDate, Calendar.MONTH, 1);
|
|
|
+ }
|
|
|
+ if (DateType.DAY == dateType) {
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
+ startTimeDate = calendar.getTime();
|
|
|
+ endTimeDate = DateUtils.add(startTimeDate, Calendar.DATE, 1);
|
|
|
+ }
|
|
|
+ if (DateType.HOUR == dateType) {
|
|
|
+ startTimeDate = calendar.getTime();
|
|
|
+ endTimeDate = DateUtils.add(startTimeDate, Calendar.HOUR_OF_DAY, 1);
|
|
|
+ }
|
|
|
+ if (DateType.SEASON == dateType) {
|
|
|
+ int month = calendar.get(Calendar.MONTH);
|
|
|
+ if (3 > month) {
|
|
|
+ calendar.set(Calendar.MONTH, 0);
|
|
|
+ }
|
|
|
+ if (3 <= month && 6 > month) {
|
|
|
+ calendar.set(Calendar.MONTH, 3);
|
|
|
+ }
|
|
|
+ if (6 <= month && 9 > month) {
|
|
|
+ calendar.set(Calendar.MONTH, 6);
|
|
|
+ }
|
|
|
+ if (9 <= month) {
|
|
|
+ calendar.set(Calendar.MONTH, 9);
|
|
|
+ }
|
|
|
+ calendar.set(Calendar.DATE, 1);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
+ startTimeDate = calendar.getTime();
|
|
|
+ endTimeDate = DateUtils.add(startTimeDate, Calendar.MONTH, 3);
|
|
|
+ }
|
|
|
+ map.put("startTimeDate", startTimeDate);
|
|
|
+ map.put("endTimeDate", endTimeDate);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+}
|