|  | @@ -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() {
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 |