|
@@ -1,250 +0,0 @@
|
|
|
-package cn.iocoder.yudao.module.bi.util;
|
|
|
-
|
|
|
-import cn.hutool.core.date.DateUnit;
|
|
|
-import cn.hutool.core.date.DateUtil;
|
|
|
-import cn.hutool.core.util.StrUtil;
|
|
|
-import cn.hutool.extra.spring.SpringUtil;
|
|
|
-import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
|
|
-import cn.iocoder.yudao.module.bi.controller.admin.ranking.vo.BiParams;
|
|
|
-import cn.iocoder.yudao.module.system.api.dept.DeptApi;
|
|
|
-import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
|
|
|
-import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
|
|
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
|
|
-import lombok.Data;
|
|
|
-import lombok.experimental.Accessors;
|
|
|
-
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
-
|
|
|
-/**
|
|
|
- * bi时间工具类
|
|
|
- *
|
|
|
- * @author anhaohao
|
|
|
- */
|
|
|
-public class BiTimeUtil {
|
|
|
-
|
|
|
- public static BiTimeEntity analyzeType(BiParams biParams) {
|
|
|
- // 解析时间
|
|
|
- BiTimeEntity biTimeEntity = analyzeTime(biParams);
|
|
|
- // 解析权限
|
|
|
- // TODO @anhaohao:涉及到数据的读取,不放在 Util 里,还是搞会到 Service 哈;
|
|
|
- biTimeEntity.setUserIds(analyzeAuth(biParams));
|
|
|
- return biTimeEntity;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 解析权限
|
|
|
- *
|
|
|
- * @param biParams bi参数
|
|
|
- * @return List<Long>
|
|
|
- */
|
|
|
- public static List<Long> analyzeAuth(BiParams biParams) {
|
|
|
- List<Long> userIdList = new ArrayList<>();
|
|
|
- Long deptId = biParams.getDeptId();
|
|
|
- Long userId = biParams.getUserId();
|
|
|
- Integer isUser = biParams.getIsUser();
|
|
|
- // 获取部门和用户的api
|
|
|
- DeptApi deptApi = SpringUtil.getBean("deptApiImpl");
|
|
|
- AdminUserApi adminUserApi = SpringUtil.getBean("adminUserApiImpl");
|
|
|
- // 0.部门 1.用户
|
|
|
- if (isUser == 0) {
|
|
|
- if (deptId == null) {
|
|
|
- deptId = adminUserApi.getUser(SecurityFrameworkUtils.getLoginUserId()).getDeptId();
|
|
|
- }
|
|
|
- List<DeptRespDTO> childDeptList = deptApi.getChildDeptList(deptId);
|
|
|
- List<Long> deptIds = new ArrayList<>();
|
|
|
- deptIds.add(deptId);
|
|
|
- if (childDeptList != null && !childDeptList.isEmpty()) {
|
|
|
- for (DeptRespDTO deptRespDTO : childDeptList) {
|
|
|
- deptIds.add(deptRespDTO.getId());
|
|
|
- }
|
|
|
- }
|
|
|
- // 获取部门下的用户
|
|
|
- adminUserApi.getUserListByDeptIds(deptIds).forEach(adminUserRespDTO -> userIdList.add(adminUserRespDTO.getId()));
|
|
|
- } else {
|
|
|
- if (userId == null) {
|
|
|
- List<AdminUserRespDTO> userListBySubordinate = adminUserApi.getUserListBySubordinate(SecurityFrameworkUtils.getLoginUserId());
|
|
|
- userListBySubordinate.forEach(adminUserRespDTO -> userIdList.add(adminUserRespDTO.getId()));
|
|
|
- } else {
|
|
|
- userIdList.add(userId);
|
|
|
- }
|
|
|
- }
|
|
|
- return userIdList;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 解析时间
|
|
|
- *
|
|
|
- * @param biParams bi参数
|
|
|
- * @return BiTimeEntity
|
|
|
- */
|
|
|
- public static BiTimeEntity analyzeTime(BiParams biParams) {
|
|
|
- Date beginDate = DateUtil.date();
|
|
|
- Date endDate = DateUtil.date();
|
|
|
- int cycleNum = 12;
|
|
|
- String sqlDateFormat = "%Y%m";
|
|
|
- String dateFormat = "yyyyMM";
|
|
|
- String type = biParams.getType();
|
|
|
- String startTime = biParams.getStartTime();
|
|
|
- String endTime = biParams.getEndTime();
|
|
|
- if (StrUtil.isNotEmpty(type)) {
|
|
|
- //1.今天 2.昨天 3.本周 4.上周 5.本月 6.上月 7.本季度 8.上季度 9.本年 10 上年
|
|
|
- switch (type) {
|
|
|
- case "1":
|
|
|
- beginDate = DateUtil.beginOfDay(DateUtil.date());
|
|
|
- endDate = DateUtil.endOfDay(DateUtil.date());
|
|
|
- sqlDateFormat = "%Y%m%d";
|
|
|
- dateFormat = "yyyyMMdd";
|
|
|
- cycleNum = 1;
|
|
|
- break;
|
|
|
- case "2":
|
|
|
- beginDate = DateUtil.beginOfDay(new Date(System.currentTimeMillis() - 86400000));
|
|
|
- endDate = DateUtil.endOfDay(new Date(System.currentTimeMillis() - 86400000));
|
|
|
- sqlDateFormat = "%Y%m%d";
|
|
|
- dateFormat = "yyyyMMdd";
|
|
|
- cycleNum = 1;
|
|
|
- break;
|
|
|
- case "3":
|
|
|
- beginDate = DateUtil.beginOfWeek(DateUtil.date());
|
|
|
- endDate = DateUtil.endOfWeek(DateUtil.date());
|
|
|
- sqlDateFormat = "%Y%m%d";
|
|
|
- dateFormat = "yyyyMMdd";
|
|
|
- cycleNum = 7;
|
|
|
- break;
|
|
|
- case "4":
|
|
|
- beginDate = DateUtil.beginOfWeek(DateUtil.offsetWeek(DateUtil.date(), -1));
|
|
|
- endDate = DateUtil.endOfWeek(DateUtil.offsetWeek(DateUtil.date(), -1));
|
|
|
- sqlDateFormat = "%Y%m%d";
|
|
|
- dateFormat = "yyyyMMdd";
|
|
|
- cycleNum = 7;
|
|
|
- break;
|
|
|
- case "5":
|
|
|
- beginDate = DateUtil.beginOfMonth(DateUtil.date());
|
|
|
- endDate = DateUtil.endOfMonth(DateUtil.date());
|
|
|
- sqlDateFormat = "%Y%m%d";
|
|
|
- dateFormat = "yyyyMMdd";
|
|
|
- cycleNum = (int) DateUtil.between(beginDate, endDate, DateUnit.DAY) + 1;
|
|
|
- break;
|
|
|
- case "6":
|
|
|
- beginDate = DateUtil.beginOfMonth(DateUtil.offsetMonth(DateUtil.date(), -1));
|
|
|
- endDate = DateUtil.endOfMonth(DateUtil.offsetMonth(DateUtil.date(), -1));
|
|
|
- sqlDateFormat = "%Y%m%d";
|
|
|
- dateFormat = "yyyyMMdd";
|
|
|
- cycleNum = (int) DateUtil.between(beginDate, endDate, DateUnit.DAY) + 1;
|
|
|
- break;
|
|
|
- case "7":
|
|
|
- beginDate = DateUtil.beginOfQuarter(DateUtil.date());
|
|
|
- endDate = DateUtil.endOfQuarter(DateUtil.date());
|
|
|
- cycleNum = 3;
|
|
|
- break;
|
|
|
- case "8":
|
|
|
- beginDate = DateUtil.beginOfQuarter(DateUtil.offsetMonth(DateUtil.date(), -3));
|
|
|
- endDate = DateUtil.endOfQuarter(DateUtil.offsetMonth(DateUtil.date(), -3));
|
|
|
- cycleNum = 3;
|
|
|
- break;
|
|
|
- case "9":
|
|
|
- beginDate = DateUtil.beginOfYear(DateUtil.date());
|
|
|
- endDate = DateUtil.endOfYear(DateUtil.date());
|
|
|
- break;
|
|
|
- case "10":
|
|
|
- beginDate = DateUtil.beginOfYear(DateUtil.offsetMonth(DateUtil.date(), -12));
|
|
|
- endDate = DateUtil.endOfYear(DateUtil.offsetMonth(DateUtil.date(), -12));
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- } else if (StrUtil.isNotEmpty(startTime) && StrUtil.isNotEmpty(endTime)) {
|
|
|
- Date start;
|
|
|
- Date end;
|
|
|
- if (startTime.length() == 6) {
|
|
|
- start = DateUtil.parse(startTime, "yyyyMM");
|
|
|
- end = DateUtil.endOfMonth(DateUtil.parse(endTime, "yyyyMM"));
|
|
|
- } else {
|
|
|
- start = DateUtil.parse(startTime);
|
|
|
- end = DateUtil.parse(endTime);
|
|
|
- }
|
|
|
- Integer startMonth = Integer.valueOf(DateUtil.format(start, "yyyyMM"));
|
|
|
- int endMonth = Integer.parseInt(DateUtil.format(end, "yyyyMM"));
|
|
|
- if (startMonth.equals(endMonth)) {
|
|
|
- sqlDateFormat = "%Y%m%d";
|
|
|
- dateFormat = "yyyyMMdd";
|
|
|
- long diffDay = DateUtil.between(start, end, DateUnit.DAY);
|
|
|
- cycleNum = (int) diffDay + 1;
|
|
|
- } else {
|
|
|
- sqlDateFormat = "%Y%m";
|
|
|
- dateFormat = "yyyyMM";
|
|
|
- int diffYear = Integer.parseInt(Integer.toString(endMonth).substring(0, 4)) - Integer.parseInt(startMonth.toString().substring(0, 4));
|
|
|
- int diffMonth = endMonth % 100 - startMonth % 100 + 1;
|
|
|
- cycleNum = diffYear * 12 + diffMonth;
|
|
|
- }
|
|
|
- beginDate = start;
|
|
|
- endDate = end;
|
|
|
- }
|
|
|
- Integer beginTime = Integer.valueOf(DateUtil.format(beginDate, dateFormat));
|
|
|
- Integer finalTime = Integer.valueOf(DateUtil.format(endDate, dateFormat));
|
|
|
- return new BiTimeEntity(sqlDateFormat, dateFormat, beginDate, endDate, cycleNum, beginTime, finalTime, new ArrayList<>());
|
|
|
- }
|
|
|
-
|
|
|
- @Data
|
|
|
- @Accessors(chain = true)
|
|
|
- public static class BiTimeEntity {
|
|
|
- /**
|
|
|
- * sql日期格式化
|
|
|
- */
|
|
|
- private String sqlDateFormat;
|
|
|
-
|
|
|
- /**
|
|
|
- * 日期格式化
|
|
|
- */
|
|
|
- private String dateFormat;
|
|
|
-
|
|
|
- /**
|
|
|
- * 开始时间
|
|
|
- */
|
|
|
- private Date beginDate;
|
|
|
-
|
|
|
- /**
|
|
|
- * 结束时间
|
|
|
- */
|
|
|
- private Date endDate;
|
|
|
-
|
|
|
- /**
|
|
|
- * 周期
|
|
|
- */
|
|
|
- private Integer cycleNum;
|
|
|
-
|
|
|
- /**
|
|
|
- * 开始时间 字符串格式 如20200101
|
|
|
- */
|
|
|
- private Integer beginTime;
|
|
|
-
|
|
|
- /**
|
|
|
- * 结束时间 字符串格式 如20200101
|
|
|
- */
|
|
|
- private Integer finalTime;
|
|
|
-
|
|
|
- /**
|
|
|
- * user列表
|
|
|
- */
|
|
|
- private List<Long> userIds = new ArrayList<>();
|
|
|
- private Integer page;
|
|
|
- private Integer limit;
|
|
|
-
|
|
|
- public BiTimeEntity(String sqlDateFormat, String dateFormat, Date beginDate, Date endDate, Integer cycleNum, Integer beginTime, Integer finalTime, List<Long> userIds) {
|
|
|
- this.sqlDateFormat = sqlDateFormat;
|
|
|
- this.dateFormat = dateFormat;
|
|
|
- this.beginDate = beginDate;
|
|
|
- this.endDate = endDate;
|
|
|
- this.cycleNum = cycleNum;
|
|
|
- this.beginTime = beginTime;
|
|
|
- this.finalTime = finalTime;
|
|
|
- this.userIds = userIds;
|
|
|
- }
|
|
|
-
|
|
|
- public BiTimeEntity() {
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-}
|