fuliqi
2025-02-14 c6976365d5bfb39a32db8b541b1fe3ceb30c7826
ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java
@@ -30,6 +30,7 @@
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;
@@ -145,33 +146,35 @@
    /**
     * 查询考核积分卡片列表
     *
     * 这里显示当天的成绩如果没有当天成绩则显示最后一次成绩
     * @param checkScore 考核积分
     * @return 考核积分
     */
    @Override
    @DataScope(deptAlias = "d", userAlias = "u")
    public Map<Long, List<CheckScore>> selectCheckScoreList(CheckScore checkScore) {
    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);
        // 如果数据为空,则查询之前的数据
        if (checkScores.isEmpty()) {
        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);
            }
        }
@@ -180,25 +183,16 @@
        return checkScores.stream().collect(Collectors.groupingBy(CheckScore::getDeptId));
    }
    private void getCheckScore(CheckScore checkScore, Calendar calendar) {
        // 0.省厅月度 1.省厅季度 2.市局月度 3.市局季度 4.公安部月度 5.公安部季度
        switch (checkScore.getExamineTag()) {
            case 0, 2 ,4:
                checkScore.setEndDate(calendar.getTime());
                calendar.set(Calendar.DAY_OF_MONTH, 1);
                checkScore.setStartDate(calendar.getTime());
                if(checkScore.getExamineTag() == 0) checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Province+""));
                if(checkScore.getExamineTag() == 2) checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_County+""));
                if(checkScore.getExamineTag() == 4) checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Dept+""));
                break;
            case 1, 3, 5:
                checkScore.setStartDate(DateUtils.getQuarterStart(calendar).getTime());
                checkScore.setEndDate(DateUtils.getQuarterEnd(calendar).getTime());
                if(checkScore.getExamineTag() == 1) checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Province+""));
                if(checkScore.getExamineTag() == 3) checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_County+""));
                if(checkScore.getExamineTag() == 5) checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Dept+""));
                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 + ""));
    }
    /**
@@ -304,35 +298,25 @@
     */
    @Override
    public void exportIndex(HttpServletResponse response, CheckResultExportDTO exportDTO) throws IOException {
//        String date = exportDTO.getDate();
        //如果请求参数时间为空,查这条记录的时间
//        if (StringUtils.isEmpty(exportDTO.getDate()) && CollectionUtils.isEmpty(exportDTO.getQuarter())) {
//            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");
//            if (exportDTO.getId() != null) {
//                CheckScore checkScore = getById(exportDTO.getId());
//                Date createTime = checkScore.getCreateTime();
//                date = formatter.format(createTime);
//            } else {
//                //防止卡片页面导出不传scoreId,导致报错
//                date = formatter.format(new Date());
//            }
//        }
        //没有标签默认全导
        if (CollectionUtils.isEmpty(exportDTO.getExamineTags())) {
            exportDTO.setExamineTags(Arrays.asList(0, 1, 2));
        }
        /** 导三张sheet */
        //车辆
        CheckIndexCar checkIndexCar = new CheckIndexCar();
//        checkIndexCar.setDate(date);
        checkIndexCar.setQuarter(exportDTO.getQuarter());
        checkIndexCar.setDeptId(exportDTO.getDeptId());
        checkIndexCar.setDeptIds(exportDTO.getDeptIds());
        //权限控制 只能查看已发布
        roleControl(checkIndexCar);
        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 + ""));
            if (examineTag == 0) {
                checkIndexCar.setExamineTagQuery(1);
            }
            checkIndexCars.addAll(indexCarService.selectCheckIndexCarList(checkIndexCar));
        }
        //计算平均值放在excel最后
@@ -367,20 +351,19 @@
            checkIndexCarVOS.add(excelVo);
        }
        ExcelExp e1 = new ExcelExp("车辆考核指标数据", checkIndexCarVOS, CheckIndexCarVO.class);
        //人脸
        CheckIndexFace checkIndexFace = new CheckIndexFace();
//        checkIndexFace.setDate(date);
        checkIndexFace.setQuarter(exportDTO.getQuarter());
        checkIndexFace.setDeptId(exportDTO.getDeptId());
        checkIndexFace.setDeptIds(exportDTO.getDeptIds());
        //权限控制 只能查看已发布
        roleControl(checkIndexFace);
        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 + ""));
            if (examineTag == 0) {
                checkIndexFace.setExamineTagQuery(1);
            }
            checkIndexFaces.addAll(indexFaceService.selectCheckIndexFaceList(checkIndexFace));
        }
        //计算平均值放在excel最后
@@ -415,20 +398,18 @@
            checkIndexFaceVOS.add(excelVo);
        }
        ExcelExp e2 = new ExcelExp("人脸考核指标数据", checkIndexFaceVOS, CheckIndexFaceVO.class);
        //视频
        CheckIndexVideo checkIndexVideo = new CheckIndexVideo();
//        checkIndexVideo.setDate(date);
        checkIndexVideo.setQuarter(exportDTO.getQuarter());
        checkIndexVideo.setDeptId(exportDTO.getDeptId());
        checkIndexVideo.setDeptIds(exportDTO.getDeptIds());
        //权限控制 只能查看已发布
        roleControl(checkIndexVideo);
        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 + ""));
            if (examineTag == 0) {
                checkIndexVideo.setExamineTagQuery(1);
            }
            checkIndexVideos.addAll(indexVideoService.selectCheckIndexVideoList(checkIndexVideo));
        }
        //计算平均值放在excel最后
@@ -448,6 +429,17 @@
            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);
@@ -518,7 +510,11 @@
    @Override
    public List<Map<String, Object>> home() {
        return baseMapper.home();
        Date now = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DATE, -7);
        Date startTime = calendar.getTime();
        return baseMapper.home(startTime,now);
    }
@@ -535,20 +531,29 @@
    @Override
    public Map<String, Map<String, Object>> dashboard(DashboardQuery dashboardQuery) {
        Date now = new Date();
        dashboardQuery.setStartTime(DateUtils.getMouthStart(now));
        dashboardQuery.setEndTime(DateUtils.getMouthEnd(now));
        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("score", 0);
            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 = new HashMap<>();
            map.put("score", checkScore.getScore().setScale(1,RoundingMode.HALF_UP));
            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;