zxl
2025-04-17 b85a7f932b9d789a2e9bdb36e366c36c2e1eb3cc
ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java
@@ -1,39 +1,51 @@
package com.ycl.platform.service.impl;
import annotation.DataScope;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.platform.base.CheckIndex;
import com.ycl.platform.domain.dto.CheckResultExportDTO;
import com.ycl.platform.domain.dto.CheckScoreDTO;
import com.ycl.platform.domain.dto.CheckScoreIndexDTO;
import com.ycl.platform.domain.dto.ScoreIndexDTO;
import com.ycl.platform.domain.entity.*;
import com.ycl.platform.domain.vo.CheckScoreDetailVO;
import com.ycl.platform.mapper.CheckRuleMapper;
import com.ycl.platform.mapper.CheckScoreMapper;
import com.ycl.platform.mapper.CheckTemplateMapper;
import com.ycl.platform.mapper.CheckTemplateRuleMapper;
import com.ycl.platform.domain.query.DashboardQuery;
import com.ycl.platform.domain.vo.*;
import com.ycl.platform.mapper.*;
import com.ycl.platform.service.ICheckIndexCarService;
import com.ycl.platform.service.ICheckIndexFaceService;
import com.ycl.platform.service.ICheckIndexVideoService;
import com.ycl.platform.service.ICheckScoreService;
import com.ycl.system.entity.BaseEntity;
import com.ycl.system.entity.SysRole;
import com.ycl.system.entity.SysUser;
import com.ycl.system.service.ISysDeptService;
import com.ycl.utils.DateUtils;
import com.ycl.utils.SecurityUtils;
import com.ycl.utils.StringUtils;
import constant.CheckConstants;
import enumeration.general.AreaDeptEnum;
import enumeration.general.PublishType;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import pojo.ExcelExp;
import utils.poi.ExcelUtilManySheet;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -44,8 +56,7 @@
 */
@Service
@Slf4j
public class CheckScoreServiceImpl extends ServiceImpl<CheckScoreMapper, CheckScore> implements ICheckScoreService
{
public class CheckScoreServiceImpl extends ServiceImpl<CheckScoreMapper, CheckScore> implements ICheckScoreService {
    @Autowired
    private CheckScoreMapper scoreMapper;
    @Autowired
@@ -62,6 +73,9 @@
    private ICheckIndexVideoService indexVideoService;
    @Autowired
    private ISysDeptService deptService;
    @Autowired
    private PlatformMapper platformMapper;
    /**
     * 查询考核积分指标
     *
@@ -69,20 +83,29 @@
     * @return 考核积分
     */
    @Override
    @DataScope(deptAlias = "d",userAlias = "u")
    public CheckScoreDetailVO selectCheckScoreById(CheckScoreIndexDTO checkScoreIndexDTO)
    {
    @DataScope(deptAlias = "d", userAlias = "u")
    public CheckScoreDetailVO selectCheckScoreById(CheckScoreIndexDTO checkScoreIndexDTO) {
        Long checkScoreId = checkScoreIndexDTO.getId();
        CheckScoreDetailVO checkScoreDetailVO = new CheckScoreDetailVO();
        //根据id读取score
        CheckScore checkScore = scoreMapper.selectCheckScoreById(checkScoreId);
        Integer templateId = 0;
        //方便切换改为:根据score考核类别和dto考核标签查模板规则和权重,注意同种类同标签只能有一个模板
        QueryWrapper<CheckTemplate> wrapper = new QueryWrapper<>();
        wrapper.eq("examine_tag", checkScoreIndexDTO.getExamineTag());
        wrapper.eq("examine_category", checkScore.getExamineCategory());
        Optional<CheckTemplate> first = templateMapper.selectList(wrapper).stream().findFirst();
        if (first.isPresent()) {
            CheckTemplate checkTemplate = first.get();
            templateId = checkTemplate.getId();
        }
        //读取规则以及权重
        List<CheckTemplateRule> templateRuleList = templateRuleMapper.selectListByTemplateId(checkScore.getTemplateId());
        List<CheckTemplateRule> templateRuleList = templateRuleMapper.selectListByTemplateId(templateId);
        List<CheckRule> checkRules = new ArrayList<>();
        //读取模板对应所有规则
        Map<String,Object> scoreMap = new HashMap<>();
        Map<String, Object> scoreMap = new HashMap<>();
        List<Integer> ruleIds = templateRuleList.stream().map(checkTemplateRule -> checkTemplateRule.getCheckRuleId())
                .collect(Collectors.toList());
        List<CheckRule> ruleIndex = ruleMapper.selectBatchIds(ruleIds);
@@ -90,7 +113,7 @@
        checkRules.addAll(ruleIndex);
        //根据examineCategory 读取不同index表
        Short examineCategory = checkScore.getExamineCategory();
        String[] indexTableArr ={"","t_check_index_video","t_check_index_car","t_check_index_face"};
        String[] indexTableArr = {"", "t_check_index_video", "t_check_index_car", "t_check_index_face"};
        String tableName = indexTableArr[examineCategory];
        ScoreIndexDTO scoreIndexDTO = new ScoreIndexDTO()
@@ -99,19 +122,21 @@
                .setDate(checkScoreIndexDTO.getDate())
                .setQuarter(checkScoreIndexDTO.getQuarter());
        scoreIndexDTO.setParams(checkScoreIndexDTO.getParams());
        scoreIndexDTO.setExamineTag(checkScoreIndexDTO.getExamineTag());
        //获当月份
        if(StringUtils.isEmpty(scoreIndexDTO.getDate()) && CollectionUtils.isEmpty(checkScoreIndexDTO.getQuarter())){
        if (StringUtils.isEmpty(scoreIndexDTO.getDate()) && CollectionUtils.isEmpty(checkScoreIndexDTO.getQuarter())) {
            //如果查询条件不含参数,查询积分对应创建时间
            Date createTime = checkScore.getCreateTime();
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");
            scoreIndexDTO.setDate(formatter.format(createTime));
        }
        //权限控制
        roleControl(scoreIndexDTO);
        List<Map> map = scoreMapper.selectScoreIndex(scoreIndexDTO);
        scoreMap.put("tableData",checkRules);
        scoreMap.put("dataMap",map);
        scoreMap.put("tableData", checkRules);
        scoreMap.put("dataMap", map);
        checkScoreDetailVO.setCheckRuleList(templateRuleList);
        checkScoreDetailVO.setScoreMap(scoreMap);
@@ -121,70 +146,95 @@
    /**
     * 查询考核积分卡片列表
     *
     * 这里显示当天的成绩如果没有当天成绩则显示最后一次成绩
     * @param checkScore 考核积分
     * @return 考核积分
     */
    @Override
    @DataScope(deptAlias = "d",userAlias = "u")
    public Map<Long, List<CheckScore>> selectCheckScoreList(CheckScore checkScore)
    {
    @DataScope(deptAlias = "d", userAlias = "u")
    public Map<Long, List<CheckScore>> selectCheckScoreList(CheckScore query) {
        CheckScore checkScore = new CheckScore();
        BeanUtils.copyProperties(query,checkScore);
        //区县只能看已发布
        roleControl(checkScore);
        // 获取数据日期时间
        Calendar calendar = Calendar.getInstance();
        getCheckScore(checkScore, calendar);
        // 转换数据日期时间、标签
        getCheckScore(checkScore);
        // 一号查询之前的数据
        if (LocalDateTime.now().getDayOfMonth() == 1) { calendar.add(Calendar.DAY_OF_MONTH, -1); }
//        // 一号查询之前的数据
//        if (LocalDateTime.now().getDayOfMonth() == 1) {
//            calendar.add(Calendar.DAY_OF_MONTH, -1);
//        }
        List<CheckScore> checkScores = scoreMapper.selectCheckScoreMap(checkScore);
        log.error("打印:{}",checkScores);
        // 如果数据为空,则查询之前的数据
        if (checkScores.isEmpty()) {
            CheckScore one = new LambdaQueryChainWrapper<>(baseMapper).select(CheckScore::getCreateTime).last("order by create_time desc limit 1").one();
        if (CollectionUtils.isEmpty(checkScores) && (query.getStartDate() ==null || query.getStartDate() ==null)) {
            CheckScore one = scoreMapper.getLast(checkScore);
            if (Objects.nonNull(one)) {
                calendar.setTime(one.getCreateTime());
                getCheckScore(checkScore, calendar);
                checkScore.setStartDate(one.getCreateTime());
                checkScore.setEndDate(one.getCreateTime());
                getCheckScore(checkScore);
                checkScores = scoreMapper.selectCheckScoreMap(checkScore);
            }
        }
        return checkScores.stream().collect(Collectors.groupingBy(CheckScore::getDeptId));
        //分数保留一位小数
        checkScores.stream().forEach(item -> item.setScore(item.getScore().setScale(1, RoundingMode.HALF_UP)));
        Map<Long, List<CheckScore>> map = checkScores.stream().collect(Collectors.groupingBy(CheckScore::getDeptId));
        log.error("map :{}",map);
        for (Map.Entry<Long, List<CheckScore>> entry : map.entrySet()) {
            List<CheckScore> tempList = new ArrayList<>(); // 临时存储需要添加的元素
            Iterator<CheckScore> iterator = entry.getValue().iterator();
            while (iterator.hasNext()) {
                CheckScore listCheckScore = iterator.next();
                if (listCheckScore.getExamineCategory() == 1 && entry.getValue().size() == 1) {
                    CheckScore face = new CheckScore();
                    face.setExamineCategory((short) 2);
                    face.setScore(new BigDecimal("0.0"));
                    CheckScore car = new CheckScore();
                    car.setExamineCategory((short) 3);
                    car.setScore(new BigDecimal("0.0"));
                    tempList.add(face);
                    tempList.add(car);
                }
            }
            // 迭代结束后,将新元素添加到原始列表中
            entry.getValue().addAll(tempList);
        }
        return map;
    }
    private void getCheckScore(CheckScore checkScore, Calendar calendar)
    {
        // 0 省厅月度 1 市局月度 2 省厅季度 3 市局季度
        switch (checkScore.getExamineTag()) {
            case 0, 1:
                checkScore.setEndDate(calendar.getTime());
                calendar.set(Calendar.DAY_OF_MONTH, 1);
                checkScore.setStartDate(calendar.getTime());
                break;
            case 2, 3:
                checkScore.setStartDate(DateUtils.getQuarterStart(calendar).getTime());
                checkScore.setEndDate(DateUtils.getQuarterEnd(calendar).getTime());
                checkScore.setExamineTag(checkScore.getExamineTag() == 2 ? 0 : 1);
                break;
        }
    private void getCheckScore(CheckScore checkScore) {
        checkScore.setStartDate(DateUtils.getDayStart(checkScore.getStartDate()));
        checkScore.setEndDate(DateUtils.getDayEnd(checkScore.getEndDate()));
        // 0.省厅 1.市局 2.公安部
        if (checkScore.getExamineTag() == 0)
            checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Province + ""));
        if (checkScore.getExamineTag() == 1)
            checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_County + ""));
        if (checkScore.getExamineTag() == 2)
            checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Dept + ""));
    }
    /**
     * 查询考核积分卡片列表
     * 查询考核积分卡片折线图
     *
     * @param checkScore 考核积分
     * @return 考核积分
     */
    @Override
    @DataScope(deptAlias = "d",userAlias = "u")
    public Map<Long, List<CheckScore>> selectCheckScoreChart(CheckScore checkScore)
    {
    @DataScope(deptAlias = "d", userAlias = "u")
    public Map<Long, List<CheckScore>> selectCheckScoreChart(CheckScore checkScore) {
        //区县只能看已发布
        roleControl(checkScore);
        //查询成绩
        String date = checkScore.getDate();
        if(StringUtils.isEmpty(date)){
        if (StringUtils.isEmpty(date)) {
            //如果为空查本月的数据
            Calendar now = Calendar.getInstance();
            //取昨天
@@ -195,6 +245,8 @@
            checkScore.setDate(date);
        }
        List<CheckScore> checkScores = scoreMapper.selectCheckScoreList(checkScore);
        //分数保留一位小数
        checkScores.stream().forEach(item -> item.setScore(item.getScore().setScale(1, RoundingMode.HALF_UP)));
        return checkScores.stream().collect(Collectors.groupingBy(CheckScore::getDeptId));
    }
@@ -205,11 +257,13 @@
     * @return 考核积分
     */
    @Override
    @DataScope(deptAlias = "d",userAlias = "u")
    @DataScope(deptAlias = "d", userAlias = "u")
    public List<CheckScore> page(CheckScore checkScore) {
        //区县只能看已发布
        roleControl(checkScore);
        return scoreMapper.selectCheckScoreList(checkScore);
        List<CheckScore> scoreList = scoreMapper.selectCheckScoreList(checkScore);
        scoreList.stream().forEach(item -> item.setScore(item.getScore().setScale(1, RoundingMode.HALF_UP)));
        return scoreList;
    }
    /**
@@ -219,8 +273,9 @@
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int publishCheckScore(CheckScoreDTO checkScoreDTO) {
        if(CollectionUtils.isEmpty(checkScoreDTO.getId())){
        if (CollectionUtils.isEmpty(checkScoreDTO.getId())) {
            return 0;
        }
        PublishType publishType = null;
@@ -231,8 +286,33 @@
        }
        String code = publishType.getCode();
        checkScoreDTO.setPublish(code);
        return scoreMapper.publishCheckScore(checkScoreDTO);
        int i = scoreMapper.publishCheckScore(checkScoreDTO);
        //控制index表的发布状态
        List<Integer> ids = checkScoreDTO.getId();
        QueryWrapper<CheckScore> queryWrapper = new QueryWrapper<>();
        queryWrapper.in("id", ids);
        List<CheckScore> scoreList = scoreMapper.selectList(queryWrapper);
        //最多为3次循环
        for (CheckScore checkScore : scoreList) {
            Short examineCategory = checkScore.getExamineCategory();
            if (CheckConstants.Rule_Category_Video.equals(examineCategory)) {
                UpdateWrapper<CheckIndexVideo> updateWrapper = new UpdateWrapper<>();
                updateWrapper.set("publish", code);
                updateWrapper.eq("id", checkScore.getIndexId());
                indexVideoService.update(updateWrapper);
            } else if (CheckConstants.Rule_Category_Car.equals(examineCategory)) {
                UpdateWrapper<CheckIndexCar> updateWrapper = new UpdateWrapper<>();
                updateWrapper.set("publish", code);
                updateWrapper.eq("id", checkScore.getIndexId());
                indexCarService.update(updateWrapper);
            } else if (CheckConstants.Rule_Category_Face.equals(examineCategory)) {
                UpdateWrapper<CheckIndexFace> updateWrapper = new UpdateWrapper<>();
                updateWrapper.set("publish", code);
                updateWrapper.eq("id", checkScore.getIndexId());
                indexFaceService.update(updateWrapper);
            }
        }
        return i;
    }
    /**
@@ -242,54 +322,267 @@
     * @return 考核积分
     */
    @Override
    public void exportIndex(HttpServletResponse response,CheckScore checkScoreDTO) throws IOException {
        String date = checkScoreDTO.getDate();
        //如果请求参数时间为空,查这条记录的时间
        if(StringUtils.isEmpty(checkScoreDTO.getDate()) && CollectionUtils.isEmpty(checkScoreDTO.getQuarter())){
            CheckScore checkScore = getById(checkScoreDTO.getId());
            Date createTime = checkScore.getCreateTime();
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");
            date = formatter.format(createTime);
    public void exportIndex(HttpServletResponse response, CheckResultExportDTO exportDTO) throws IOException {
        //没有标签默认全导
        if (CollectionUtils.isEmpty(exportDTO.getExamineTags())) {
            exportDTO.setExamineTags(Arrays.asList(0, 1, 2));
        }
        /** 导三张sheet */
        //车辆
        CheckIndexCar checkIndexCar = new CheckIndexCar();
        checkIndexCar.setDate(date);
        checkIndexCar.setQuarter(checkScoreDTO.getQuarter());
        List<CheckIndexCar> checkIndexCars = indexCarService.selectCheckIndexCarList(checkIndexCar);
        ExcelExp e1 = new ExcelExp("车辆考核指标数据",checkIndexCars,CheckIndexCar.class);
        List<CheckIndexCar> checkIndexCars = new ArrayList<>();
        //车辆和人脸没有公安部
        for (Integer examineTag : exportDTO.getExamineTags()) {
            if (examineTag == 2) continue;
            CheckIndexCar checkIndexCar = new CheckIndexCar();
//        checkIndexCar.setDate(date);
            checkIndexCar.setQuarter(exportDTO.getQuarter());
            checkIndexCar.setDeptId(exportDTO.getDeptId());
            checkIndexCar.setDeptIds(exportDTO.getDeptIds());
            //权限控制 只能查看已发布
            roleControl(checkIndexCar);
            checkIndexCar.setExamineTag(Short.valueOf(examineTag + ""));
            checkIndexCars.addAll(indexCarService.selectCheckIndexCarList(checkIndexCar));
        }
        //计算平均值放在excel最后
        if (exportDTO.getAverage() != null && exportDTO.getAverage() && !CollectionUtils.isEmpty(checkIndexCars)) {
            //先区分考核标签,再区分区县
            List<CheckIndexCar> countyList = checkIndexCars.stream().filter(car -> CheckConstants.Examine_Tag_County.equals(car.getExamineTag())).collect(Collectors.toList());
            if (!CollectionUtils.isEmpty(countyList)) {
                Map<Long, List<CheckIndexCar>> carMap = countyList.stream().collect(Collectors.groupingBy(CheckIndexCar::getDeptId));
                List<CheckIndexCar> cars = new ArrayList<>();
                carMap.forEach((deptId, list) -> {
                    CheckIndexCar car = CheckIndexCar.calculateAverage(list);
                    cars.add(car);
                });
                //根据积分降序
                checkIndexCars.addAll(cars.stream().sorted(Comparator.comparing(CheckIndexCar::getScore).reversed()).collect(Collectors.toList()));
            }
            List<CheckIndexCar> provinceList = checkIndexCars.stream().filter(car -> CheckConstants.Examine_Tag_Province.equals(car.getExamineTag())).collect(Collectors.toList());
            if (!CollectionUtils.isEmpty(provinceList)) {
                Map<Long, List<CheckIndexCar>> carMap = provinceList.stream().collect(Collectors.groupingBy(CheckIndexCar::getDeptId));
                List<CheckIndexCar> cars = new ArrayList<>();
                carMap.forEach((deptId, list) -> {
                    CheckIndexCar car = CheckIndexCar.calculateAverage(list);
                    cars.add(car);
                });
                //根据积分降序
                checkIndexCars.addAll(cars.stream().sorted(Comparator.comparing(CheckIndexCar::getScore).reversed()).collect(Collectors.toList()));
            }
        }
        List<CheckIndexCarVO> checkIndexCarVOS = new ArrayList<>();
        for (CheckIndexCar indexCar : checkIndexCars) {
            CheckIndexCarVO excelVo = CheckIndexCar.getExcelVo(indexCar);
            checkIndexCarVOS.add(excelVo);
        }
        ExcelExp e1 = new ExcelExp("车辆考核指标数据", checkIndexCarVOS, CheckIndexCarVO.class);
        //人脸
        CheckIndexFace checkIndexFace = new CheckIndexFace();
        checkIndexFace.setDate(date);
        checkIndexFace.setQuarter(checkScoreDTO.getQuarter());
        List<CheckIndexFace> checkIndexFaces = indexFaceService.selectCheckIndexFaceList(checkIndexFace);
        ExcelExp e2 = new ExcelExp("人脸考核指标数据",checkIndexFaces,CheckIndexFace.class);
        List<CheckIndexFace> checkIndexFaces = new ArrayList<>();
        for (Integer examineTag : exportDTO.getExamineTags()) {
            if (examineTag == 2) continue;
            CheckIndexFace checkIndexFace = new CheckIndexFace();
//        checkIndexFace.setDate(date);
            checkIndexFace.setQuarter(exportDTO.getQuarter());
            checkIndexFace.setDeptId(exportDTO.getDeptId());
            checkIndexFace.setDeptIds(exportDTO.getDeptIds());
            //权限控制 只能查看已发布
            roleControl(checkIndexFace);
            checkIndexFace.setExamineTag(Short.valueOf(examineTag + ""));
            checkIndexFaces.addAll(indexFaceService.selectCheckIndexFaceList(checkIndexFace));
        }
        //计算平均值放在excel最后
        if (exportDTO.getAverage() != null && exportDTO.getAverage() && !CollectionUtils.isEmpty(checkIndexFaces)) {
            //先区分考核标签,再区分区县
            List<CheckIndexFace> countyList = checkIndexFaces.stream().filter(face -> CheckConstants.Examine_Tag_County.equals(face.getExamineTag())).collect(Collectors.toList());
            if (!CollectionUtils.isEmpty(countyList)) {
                Map<Long, List<CheckIndexFace>> faceMap = countyList.stream().collect(Collectors.groupingBy(CheckIndexFace::getDeptId));
                List<CheckIndexFace> faces = new ArrayList<>();
                faceMap.forEach((deptId, list) -> {
                    CheckIndexFace face = CheckIndexFace.calculateAverage(list);
                    faces.add(face);
                });
                //根据积分降序
                checkIndexFaces.addAll(faces.stream().sorted(Comparator.comparing(CheckIndexFace::getScore).reversed()).collect(Collectors.toList()));
            }
            List<CheckIndexFace> provinceList = checkIndexFaces.stream().filter(face -> CheckConstants.Examine_Tag_Province.equals(face.getExamineTag())).collect(Collectors.toList());
            if (!CollectionUtils.isEmpty(provinceList)) {
                Map<Long, List<CheckIndexFace>> faceMap = provinceList.stream().collect(Collectors.groupingBy(CheckIndexFace::getDeptId));
                List<CheckIndexFace> faces = new ArrayList<>();
                faceMap.forEach((deptId, list) -> {
                    CheckIndexFace face = CheckIndexFace.calculateAverage(list);
                    faces.add(face);
                });
                //根据积分降序
                checkIndexFaces.addAll(faces.stream().sorted(Comparator.comparing(CheckIndexFace::getScore).reversed()).collect(Collectors.toList()));
            }
        }
        List<CheckIndexFaceVO> checkIndexFaceVOS = new ArrayList<>();
        for (CheckIndexFace indexFace : checkIndexFaces) {
            CheckIndexFaceVO excelVo = CheckIndexFace.getExcelVo(indexFace);
            checkIndexFaceVOS.add(excelVo);
        }
        ExcelExp e2 = new ExcelExp("人脸考核指标数据", checkIndexFaceVOS, CheckIndexFaceVO.class);
        //视频
        CheckIndexVideo checkIndexVideo = new CheckIndexVideo();
        checkIndexVideo.setDate(date);
        checkIndexVideo.setQuarter(checkScoreDTO.getQuarter());
        List<CheckIndexVideo> checkIndexVideos = indexVideoService.selectCheckIndexVideoList(checkIndexVideo);
        ExcelExp e3 = new ExcelExp("视频考核指标数据",checkIndexVideos,CheckIndexVideo.class);
        List<CheckIndexVideo> checkIndexVideos = new ArrayList<>();
        for (Integer examineTag : exportDTO.getExamineTags()) {
            CheckIndexVideo checkIndexVideo = new CheckIndexVideo();
//        checkIndexVideo.setDate(date);
            checkIndexVideo.setQuarter(exportDTO.getQuarter());
            checkIndexVideo.setDeptId(exportDTO.getDeptId());
            checkIndexVideo.setDeptIds(exportDTO.getDeptIds());
            //权限控制 只能查看已发布
            roleControl(checkIndexVideo);
            checkIndexVideo.setExamineTag(Short.valueOf(examineTag + ""));
            checkIndexVideos.addAll(indexVideoService.selectCheckIndexVideoList(checkIndexVideo));
        }
        //计算平均值放在excel最后
        if (exportDTO.getAverage() != null && exportDTO.getAverage() && !CollectionUtils.isEmpty(checkIndexVideos)) {
            //先区分考核标签,再区分区县
            List<CheckIndexVideo> countyList = checkIndexVideos.stream().filter(video -> CheckConstants.Examine_Tag_County.equals(video.getExamineTag())).collect(Collectors.toList());
            if (!CollectionUtils.isEmpty(countyList)) {
                Map<Long, List<CheckIndexVideo>> videoMap = countyList.stream().collect(Collectors.groupingBy(CheckIndexVideo::getDeptId));
                List<CheckIndexVideo> videos = new ArrayList<>();
                videoMap.forEach((deptId, list) -> {
                    CheckIndexVideo video = CheckIndexVideo.calculateAverage(list);
                    videos.add(video);
                });
                //根据积分降序
                checkIndexVideos.addAll(videos.stream().sorted(Comparator.comparing(CheckIndexVideo::getScore).reversed()).collect(Collectors.toList()));
            }
            List<CheckIndexVideo> provinceList = checkIndexVideos.stream().filter(video -> CheckConstants.Examine_Tag_Province.equals(video.getExamineTag())).collect(Collectors.toList());
            if (!CollectionUtils.isEmpty(provinceList)) {
                Map<Long, List<CheckIndexVideo>> videoMap = provinceList.stream().collect(Collectors.groupingBy(CheckIndexVideo::getDeptId));
                List<CheckIndexVideo> videos = new ArrayList<>();
                videoMap.forEach((deptId, list) -> {
                    CheckIndexVideo video = CheckIndexVideo.calculateAverage(list);
                    videos.add(video);
                });
                //根据积分降序
                checkIndexVideos.addAll(videos.stream().sorted(Comparator.comparing(CheckIndexVideo::getScore).reversed()).collect(Collectors.toList()));
            }
            List<CheckIndexVideo> deptList = checkIndexVideos.stream().filter(video -> CheckConstants.Examine_Tag_Dept.equals(video.getExamineTag())).collect(Collectors.toList());
            if (!CollectionUtils.isEmpty(deptList)) {
                Map<Long, List<CheckIndexVideo>> videoMap = deptList.stream().collect(Collectors.groupingBy(CheckIndexVideo::getDeptId));
                List<CheckIndexVideo> videos = new ArrayList<>();
                videoMap.forEach((deptId, list) -> {
                    CheckIndexVideo video = CheckIndexVideo.calculateAverage(list);
                    videos.add(video);
                });
                //根据积分降序
                checkIndexVideos.addAll(videos.stream().sorted(Comparator.comparing(CheckIndexVideo::getScore).reversed()).collect(Collectors.toList()));
            }
        }
        List<CheckIndexVideoVO> checkIndexVideoVOS = new ArrayList<>();
        for (CheckIndexVideo indexVideo : checkIndexVideos) {
            CheckIndexVideoVO excelVo = CheckIndexVideo.getExcelVo(indexVideo);
            checkIndexVideoVOS.add(excelVo);
        }
        ExcelExp e3 = new ExcelExp("视频考核指标数据", checkIndexVideoVOS, CheckIndexVideoVO.class);
        List<ExcelExp> mysheet = new ArrayList<>();
        mysheet.add(e1);
        mysheet.add(e2);
        mysheet.add(e3);
        //规则明细
        List<RuleExcelVO> allRuleTemplate = templateRuleMapper.getAllRuleTemplate();
        //整合数据
        List<RuleExcelVO> countyRuleList = allRuleTemplate.stream().filter(vo -> vo.getExamineTag().equals(Integer.parseInt(CheckConstants.Examine_Tag_County + ""))).collect(Collectors.toList());
        List<RuleExcelVO> provinceRuleList = allRuleTemplate.stream().filter(vo -> vo.getExamineTag().equals(Integer.parseInt(CheckConstants.Examine_Tag_Province + ""))).collect(Collectors.toList());
        //用区县规则做主体展示
        for (RuleExcelVO countyRule : countyRuleList) {
            countyRule.setCountyWeight(countyRule.getWeight());
            //筛选同种规则权重
            for (RuleExcelVO provinceRule : provinceRuleList) {
                if (provinceRule.getRuleId().equals(countyRule.getRuleId()) && provinceRule.getExamineCategory().equals(countyRule.getExamineCategory())) {
                    countyRule.setProvinceWeight(provinceRule.getWeight());
                }
            }
        }
        ExcelExp e4 = new ExcelExp("规则明细", countyRuleList, RuleExcelVO.class);
        mysheet.add(e4);
        ExcelUtilManySheet<List<ExcelExp>> util = new ExcelUtilManySheet<>(mysheet);
        util.exportExcelManySheet(response,mysheet);
        util.exportExcelManySheet(response, mysheet);
    }
    private void roleControl(CheckScore checkScore) {
    private void roleControl(CheckIndex checkIndex) {
        List<SysRole> roles = SecurityUtils.getLoginUser().getUser().getRoles();
        SysRole sysRole = roles.get(0);
        if("zg_province".equals(sysRole.getRoleKey())){
            Map<String, Object> params = checkScore.getParams();
            params.put("publish",PublishType.PUBLISHED.getCode());
        SysUser user = SecurityUtils.getLoginUser().getUser();
        if (!user.isAdmin()) {
            for (SysRole role : roles) {
                if (role.getPermissions().contains("check:score:role:publish")) {
                    Map<String, Object> params = checkIndex.getParams();
                    params.put("publish", PublishType.PUBLISHED.getCode());
                }
            }
        }
    }
    private void roleControl(BaseEntity checkScore) {
        List<SysRole> roles = SecurityUtils.getLoginUser().getUser().getRoles();
        SysUser user = SecurityUtils.getLoginUser().getUser();
        if (!user.isAdmin()) {
            for (SysRole role : roles) {
                if (role.getPermissions().contains("check:score:role:publish")) {
                    Map<String, Object> params = checkScore.getParams();
                    params.put("publish", PublishType.PUBLISHED.getCode());
                }
            }
        }
    }
    @Override
    public List<Map<String, Object>> home() {
        Date now = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DATE, -7);
        Date startTime = calendar.getTime();
        return baseMapper.home(startTime,now);
    }
    @Override
    public List<Map<String, Object>> calculate(String category) {
        Calendar calendar = Calendar.getInstance();
        Date endDate = calendar.getTime();
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        Date startDate = calendar.getTime();
        return scoreMapper.calculate(startDate, endDate, category);
    }
    //大屏展示考核得分
    @Override
    public Map<String, Map<String, Object>> dashboard(DashboardQuery dashboardQuery) {
        Date now = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        dashboardQuery.setStartTime(format.format(DateUtils.getDayStart(now)));
        dashboardQuery.setEndTime(format.format(DateUtils.getDayEnd(now)));
        List<CheckScore> dashboard = scoreMapper.dashboard(dashboardQuery);
        //初始化各个区县数据
        Map<String, Map<String, Object>> resultMap = new HashMap<>();
        for (AreaDeptEnum value : AreaDeptEnum.values()) {
            Map<String, Object> map = new HashMap<>();
            map.put("video", 0);
            map.put("car", 0);
            map.put("face", 0);
            resultMap.put(value.getName(), map);
        }
        //填充各个区县数据
        for (CheckScore checkScore : dashboard) {
            Map<String, Object> map = resultMap.get(checkScore.getDeptName());
            if (CheckConstants.Rule_Category_Video.equals(checkScore.getExamineCategory())) {
                map.put("video", checkScore.getScore().setScale(1, RoundingMode.HALF_UP));
            } else if (CheckConstants.Rule_Category_Car.equals(checkScore.getExamineCategory())) {
                map.put("car", checkScore.getScore().setScale(1, RoundingMode.HALF_UP));
            } else if (CheckConstants.Rule_Category_Face.equals(checkScore.getExamineCategory())) {
                map.put("face", checkScore.getScore().setScale(1, RoundingMode.HALF_UP));
            }
            resultMap.put(checkScore.getDeptName(), map);
        }
        return resultMap;
    }
    //    /**
//     * 新增考核积分