Browse Source

Merge remote-tracking branch 'origin/dev_data_stats' into dev_data_stats

dev_shibei_match
sunyuchao 5 years ago
parent
commit
93faf6d43e
  1. 94
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java
  2. 15
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DimController.java
  3. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/DimAgencyDao.java
  4. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/DimCustomerDao.java
  5. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/DimDepartmentDao.java
  6. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/DimQuarterService.java
  7. 3
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimAgencyServiceImpl.java
  8. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimCustomerServiceImpl.java
  9. 3
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimDateServiceImpl.java
  10. 3
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimDepartmentServiceImpl.java
  11. 3
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimMonthServiceImpl.java
  12. 115
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimQuarterServiceImpl.java
  13. 6
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/DimAgencyDao.xml
  14. 4
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/DimCustomerDao.xml
  15. 8
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/DimDepartmentDao.xml

94
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java

@ -1,8 +1,8 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* <p>
* https://www.renren.io
*
* <p>
* 版权所有侵权必究
*/
@ -16,8 +16,7 @@ import org.joda.time.format.DateTimeFormatter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.*;
/**
* 日期处理工具类
@ -27,12 +26,18 @@ import java.util.Date;
*/
public class DateUtils {
/** 时间格式(yyyy-MM-dd) */
public final static String DATE_PATTERN = "yyyy-MM-dd";
/** 时间格式(yyyy-MM-dd HH:mm:ss) */
public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
/** 季度月份列表 */
public static final List<Integer> Q1Months = Arrays.asList(1, 2, 3);
public static final List<Integer> Q2Months = Arrays.asList(4, 5, 6);
public static final List<Integer> Q3Months = Arrays.asList(7, 8, 9);
public static final List<Integer> Q4Months = Arrays.asList(10, 11, 12);
/** 时间格式(yyyy-MM-dd) */
public final static String DATE_PATTERN = "yyyy-MM-dd";
/** 时间格式(yyyy-MM-dd HH:mm:ss) */
public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
/** 时间格式(yyyyMMddHHmmss) */
public final static String DATE_TIME_NO_SPLIT = "yyyyMMddHHmmss";
public final static String DATE_TIME_NO_SPLIT = "yyyyMMddHHmmss";
/** 时间格式(yyyy-MM-dd HH:mm) */
public final static String DATE_TIME_PATTERN_END_WITH_MINUTE = "yyyy-MM-dd HH:mm";
@ -48,9 +53,9 @@ public class DateUtils {
/**
* 日期格式化 日期格式为yyyy-MM-dd
* @param date 日期
* @return 返回yyyy-MM-dd格式日期
* @return 返回yyyy-MM-dd格式日期
*/
public static String format(Date date) {
public static String format(Date date) {
return format(date, DATE_PATTERN);
}
@ -58,10 +63,10 @@ public class DateUtils {
* 日期格式化 日期格式为yyyy-MM-dd
* @param date 日期
* @param pattern 格式DateUtils.DATE_TIME_PATTERN
* @return 返回yyyy-MM-dd格式日期
* @return 返回yyyy-MM-dd格式日期
*/
public static String format(Date date, String pattern) {
if(date != null){
if (date != null) {
SimpleDateFormat df = new SimpleDateFormat(pattern);
return df.format(date);
}
@ -72,7 +77,7 @@ public class DateUtils {
* 日期解析
* @param date 日期
* @param pattern 格式DateUtils.DATE_TIME_PATTERN
* @return 返回Date
* @return 返回Date
*/
public static Date parse(String date, String pattern) {
try {
@ -89,7 +94,7 @@ public class DateUtils {
* @param pattern 日期的格式DateUtils.DATE_TIME_PATTERN
*/
public static Date stringToDate(String strDate, String pattern) {
if (StringUtils.isBlank(strDate)){
if (StringUtils.isBlank(strDate)) {
return null;
}
@ -100,7 +105,7 @@ public class DateUtils {
/**
* 根据周数获取开始日期结束日期
* @param week 周期 0本周-1上周-2上上周1下周2下下周
* @return 返回date[0]开始日期date[1]结束日期
* @return 返回date[0]开始日期date[1]结束日期
*/
public static Date[] getWeekStartAndEnd(int week) {
DateTime dateTime = new DateTime();
@ -205,8 +210,8 @@ public class DateUtils {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
String[] chineseWeekDayName = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
String[] englishWeekDayName = { "Sunday", "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" };
String[] chineseWeekDayName = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
String[] englishWeekDayName = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
String weekDayName;
switch (type) {
@ -265,22 +270,65 @@ public class DateUtils {
public static int getQuarterIndex(Date date) {
LocalDate localDate = new LocalDate(date);
int monthOfYear = localDate.getMonthOfYear();
if (monthOfYear == 1 || monthOfYear == 2 || monthOfYear == 3) {
if (Q1Months.contains(monthOfYear)) {
return 1;
}
if (monthOfYear == 4 || monthOfYear == 5 || monthOfYear == 6) {
if (Q2Months.contains(monthOfYear)) {
return 2;
}
if (monthOfYear == 7 || monthOfYear == 8 || monthOfYear == 9) {
if (Q3Months.contains(monthOfYear)) {
return 3;
}
return 4;
}
/**
* 根据季度查询季度的月份列表
* @param quarterIndex
* @return
*/
public static List<Integer> getMonthsByQuarterIndex(Integer quarterIndex) {
switch (quarterIndex) {
case 1:
return Q1Months;
case 2:
return Q2Months;
case 3:
return Q3Months;
default:
return Q4Months;
}
}
/**
* 获取季度的开始date
* @param year
* @param quarterIndex
* @return
*/
public static Date getQuarterStartDate(String year, Integer quarterIndex) {
List<Integer> months = getMonthsByQuarterIndex(quarterIndex);
String yyyyMM = year.concat(String.format("%02d", months.get(0)));
return DateUtils.parse(yyyyMM, DateUtils.DATE_PATTERN_YYYYMM);
}
/**
* 获取季度的结束date
* @param year
* @param quarterIndex
* @return
*/
public static Date getQuarterEndDate(String year, Integer quarterIndex) {
List<Integer> months = getMonthsByQuarterIndex(quarterIndex);
String yyyyMM = year.concat(String.format("%02d", months.get(2)));
Date nextMonth = DateUtils.addDateMonths(DateUtils.parse(yyyyMM, DateUtils.DATE_PATTERN_YYYYMM), 1);
// 用下一个季度开头-1天就是上一个月季度最后一天
return DateUtils.addDateDays(nextMonth, -1);
}
public static void main(String[] args) {
//int weekOfYear = getWeekOfYear(new Date());
int quarterIndex = DateUtils.getQuarterIndex(DateUtils.parse("20201001", DateUtils.DATE_PATTERN_YYYYMMDD));
String format = String.format("%02d", 9);
System.out.println(666);
}

15
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DimController.java

@ -6,7 +6,7 @@ import com.epmet.service.StatsDimService;
import com.epmet.service.stats.DimAgencyService;
import com.epmet.service.stats.DimDateService;
import com.epmet.service.stats.DimMonthService;
import oracle.jdbc.proxy.annotation.Post;
import com.epmet.service.stats.DimQuarterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@ -25,6 +25,9 @@ public class DimController {
@Autowired
private DimMonthService dimMonthService;
@Autowired
private DimQuarterService quarterService;
@Autowired
private StatsDimService statsDimService;
@ -91,6 +94,16 @@ public class DimController {
return new Result();
}
/**
* 季度维度
* @return
*/
@PostMapping("/quarter/init")
public Result initQuarterDim() {
quarterService.initQuarterDim();
return new Result();
}
/**
* @Description 所有机构
* @param

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/DimAgencyDao.java

@ -36,6 +36,8 @@ import java.util.List;
@Mapper
public interface DimAgencyDao extends BaseDao<DimAgencyEntity> {
int insertOne(DimAgencyEntity entity);
/**
* @param dto
* @return

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/DimCustomerDao.java

@ -43,4 +43,6 @@ public interface DimCustomerDao extends BaseDao<DimCustomerEntity> {
* email:liujianjun@git.elinkit.com.cn
*/
List<String> selectCustomerIdPage(@Param("offset") Integer offset, @Param("pageSize") Integer pageSize);
void insertOne(DimCustomerEntity dim);
}

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/DimDepartmentDao.java

@ -29,5 +29,5 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface DimDepartmentDao extends BaseDao<DimDepartmentEntity> {
int insertOne(DimDepartmentEntity dim);
}

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/DimQuarterService.java

@ -92,4 +92,6 @@ public interface DimQuarterService extends BaseService<DimQuarterEntity> {
* @date 2020-06-16
*/
void delete(String[] ids);
void initQuarterDim();
}

3
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimAgencyServiceImpl.java

@ -130,7 +130,8 @@ public class DimAgencyServiceImpl extends BaseServiceImpl<DimAgencyDao, DimAgenc
dimAgencyEntity.setUpdatedTime(now);
dimAgencyEntity.setRevision(0);
dimAgencyEntity.setDelFlag("0");
baseDao.insert(dimAgencyEntity);
dimAgencyEntity.setId(agency.getId());
baseDao.insertOne(dimAgencyEntity);
}
}

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimCustomerServiceImpl.java

@ -125,7 +125,7 @@ public class DimCustomerServiceImpl extends BaseServiceImpl<DimCustomerDao, DimC
dim.setDelFlag("0");
dim.setRevision(0);
dim.setId(customer.getId());
baseDao.insert(dim);
baseDao.insertOne(dim);
}
}
}

3
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimDateServiceImpl.java

@ -28,6 +28,7 @@ import com.epmet.dao.stats.DimDateDao;
import com.epmet.dto.stats.DimDateDTO;
import com.epmet.entity.stats.DimDateEntity;
import com.epmet.service.stats.DimDateService;
import com.epmet.util.DimIdGenerator;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -138,7 +139,7 @@ public class DimDateServiceImpl extends BaseServiceImpl<DimDateDao, DimDateEntit
public DimDateEntity generateDimDate(Date targetDate) {
Date now = new Date();
// 日期id
String id = DateUtils.format(targetDate, DateUtils.DATE_PATTERN_YYYYMMDD);
String id = DimIdGenerator.getDateDimId(targetDate);
// 月份id
String monthId = DateUtils.format(targetDate, DateUtils.DATE_PATTERN_YYYYMM);
// 日期名称字符串

3
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimDepartmentServiceImpl.java

@ -114,7 +114,8 @@ public class DimDepartmentServiceImpl extends BaseServiceImpl<DimDepartmentDao,
dim.setUpdatedTime(now);
dim.setRevision(0);
dim.setDelFlag("0");
baseDao.insert(dim);
dim.setId(department.getId());
baseDao.insertOne(dim);
}
}
}

3
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimMonthServiceImpl.java

@ -31,6 +31,7 @@ import com.epmet.entity.stats.DimMonthEntity;
import com.epmet.entity.stats.LastExecRecordEntity;
import com.epmet.service.stats.DimMonthService;
import com.epmet.service.stats.LastExecRecordService;
import com.epmet.util.DimIdGenerator;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
@ -160,7 +161,7 @@ public class DimMonthServiceImpl extends BaseServiceImpl<DimMonthDao, DimMonthEn
dim.setCreatedTime(now);
dim.setUpdatedTime(now);
dim.setDelFlag("0");
dim.setId(DateUtils.format(startDate, DateUtils.DATE_PATTERN_YYYYMM));
dim.setId(DimIdGenerator.getMonthDimId(startDate));
baseDao.insert(dim);
}

115
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DimQuarterServiceImpl.java

@ -23,18 +23,23 @@ import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.constant.StatsSubject;
import com.epmet.dao.stats.DimQuarterDao;
import com.epmet.dto.stats.DimQuarterDTO;
import com.epmet.entity.stats.DimQuarterEntity;
import com.epmet.entity.stats.LastExecRecordEntity;
import com.epmet.service.stats.DimQuarterService;
import com.epmet.service.stats.LastExecRecordService;
import com.epmet.util.DimIdGenerator;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* 季度维度表
@ -45,6 +50,14 @@ import java.util.Map;
@Service
public class DimQuarterServiceImpl extends BaseServiceImpl<DimQuarterDao, DimQuarterEntity> implements DimQuarterService {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private LastExecRecordService lastExecRecordService;
@Autowired
private DimQuarterDao dimQuarterDao;
@Override
public PageData<DimQuarterDTO> page(Map<String, Object> params) {
IPage<DimQuarterEntity> page = baseDao.selectPage(
@ -97,4 +110,100 @@ public class DimQuarterServiceImpl extends BaseServiceImpl<DimQuarterDao, DimQua
baseDao.deleteBatchIds(Arrays.asList(ids));
}
@Transactional
@Override
public void initQuarterDim() {
LastExecRecordEntity lastExecRecord = lastExecRecordService.getLastExecRecord(StatsSubject.DIM_QUARTER);
if (lastExecRecord == null) {
lastExecRecord = lastExecRecordService.createLastExecRecord(StatsSubject.DIM_QUARTER);
}
//Date now = new Date();
Date now = DateUtils.parse("20210430", DateUtils.DATE_PATTERN_YYYYMMDD);
Date targetQday;
Date startQday;
targetQday = DateUtils.integrate(DateUtils.addDateMonths(now, -3), DateUtils.DATE_PATTERN_YYYYMM);
if (lastExecRecord.getExecTime() == null) {
// 初始化上一个季度
initQuarterDim(targetQday);
} else {
// 连续初始化多个季度
startQday = DateUtils.integrate(lastExecRecord.getExecTime(), DateUtils.DATE_PATTERN_YYYYMM);
initQuarterDim(startQday, targetQday);
}
lastExecRecord.setExecTime(new Date());
// 记录最后一次统计时间
lastExecRecordService.updateById(lastExecRecord);
}
/**
* 连续初始化多个季度维度数据
* @param startQday
* @param targetQday
*/
public void initQuarterDim(Date startQday, Date targetQday) {
Integer startQuarterIdx;
Integer targetQuarterIdx;
while ((startQuarterIdx = Integer.valueOf(DateUtils.format(startQday, DateUtils.DATE_PATTERN_YYYY) + DateUtils.getQuarterIndex(startQday)))
<= (targetQuarterIdx = Integer.valueOf(DateUtils.format(targetQday, DateUtils.DATE_PATTERN_YYYY) + DateUtils.getQuarterIndex(targetQday)))) {
initQuarterDim(startQday);
startQday = DateUtils.addDateMonths(startQday, 3);
}
}
/**
* 初始化指定月份维度数据
*/
public void initQuarterDim(Date targetQday) {
Date now = new Date();
DimQuarterEntity dim = new DimQuarterEntity();
String quarterDimId = DimIdGenerator.getQuarterDimId(targetQday);
dim.setId(quarterDimId);
dim.setQuarterName(getQuarterName(targetQday));
String yyyy = DateUtils.format(targetQday, DateUtils.DATE_PATTERN_YYYY);
int quarter = DateUtils.getQuarterIndex(targetQday);
dim.setStartDate(DateUtils.getQuarterStartDate(yyyy, quarter));
dim.setEndDate(DateUtils.getQuarterEndDate(yyyy, quarter));
dim.setQuarterOrder(quarter);
dim.setYearId(yyyy);
dim.setDelFlag("0");
dim.setRevision(0);
dim.setCreatedBy("APP_USER");
dim.setCreatedTime(now);
dim.setUpdatedBy("APP_USER");
dim.setUpdatedTime(now);
dimQuarterDao.insert(dim);
logger.info("初始化季度数据,基于日期:" + targetQday + ",生成的DimId:" + quarterDimId);
}
/**
* 季度名称
* @param targetQday
* @return
*/
private String getQuarterName(Date targetQday) {
String yyyy = DateUtils.format(targetQday, DateUtils.DATE_PATTERN_YYYY);
int quarterIndex = DateUtils.getQuarterIndex(targetQday);
String quarterName;
switch (quarterIndex) {
case 1:
quarterName = "第一季度";
break;
case 2:
quarterName = "第二季度";
break;
case 3:
quarterName = "第三季度";
break;
default:
quarterName = "第四季度";
}
return yyyy.concat("年").concat(quarterName);
}
}

6
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/DimAgencyDao.xml

@ -3,6 +3,12 @@
<mapper namespace="com.epmet.dao.stats.DimAgencyDao">
<insert id="insertOne">
INSERT INTO dim_agency(id, agency_name, customer_id, pid, pids, all_parent_name, level, del_flag, revision, created_by,
created_time, updated_by, updated_time)
VALUE (#{id}, #{agencyName}, #{customerId}, #{pid}, #{pids}, #{allParentName}, #{level}, #{delFlag}, #{revision}, #{createdBy}, #{createdTime}, #{updatedBy}, #{updatedTime})
</insert>
<select id="selectDimAgencyList" resultType="com.epmet.dto.stats.DimAgencyDTO">
SELECT

4
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/DimCustomerDao.xml

@ -2,6 +2,10 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.dao.stats.DimCustomerDao">
<insert id="insertOne">
INSERT INTO dim_customer(id, customer_name, del_flag, revision, created_by, created_time, updated_by, updated_time)
VALUES (#{id}, #{customerName}, #{delFlag}, #{revision}, #{createdBy}, #{createdTime}, #{updatedBy}, #{updatedTime})
</insert>
<select id="selectCustomerIdPage" resultType="java.lang.String">

8
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/DimDepartmentDao.xml

@ -3,7 +3,9 @@
<mapper namespace="com.epmet.dao.stats.DimDepartmentDao">
<insert id="insertOne">
INSERT INTO dim_department(id, department_name, agency_id, customer_id, del_flag, revision, created_by, created_time,
updated_by, updated_time)
VALUE (#{id}, #{departmentName}, #{agencyId}, #{customerId}, #{delFlag}, #{revision}, #{createdBy}, #{createdTime}, #{updatedBy}, #{updatedTime})
</insert>
</mapper>
Loading…
Cancel
Save