From 950264a579736c1c51f1efe4baf0ac1476d5748c Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期一, 02 十二月 2024 11:06:46 +0800
Subject: [PATCH] bug修改

---
 finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java |  359 ++++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 253 insertions(+), 106 deletions(-)

diff --git a/finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java b/finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java
index d699985..2b63466 100644
--- a/finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java
+++ b/finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java
@@ -14,9 +14,9 @@
 import com.finance.common.utils.BeanUtils;
 import com.finance.common.utils.CollUtils;
 import com.finance.common.utils.DateUtils;
+import com.finance.common.utils.StringUtils;
 import com.finance.system.domain.TbBasicData;
 import com.finance.system.domain.TbBasicDataCategory;
-import com.finance.system.domain.TbDataScreenScore;
 import com.finance.system.domain.TbQuestion;
 import com.finance.system.query.CalculateDetailQuery;
 import com.finance.system.query.DeptCalculateDetailQuery;
@@ -48,8 +48,13 @@
 import com.finance.system.vo.ScoreRankVO;
 import com.finance.system.vo.ScoreRateDataVO;
 import com.finance.system.vo.TransferPaymentScaleVO;
+import com.google.common.collect.Lists;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -77,10 +82,10 @@
 
     public ProvinceStaticsVO provinceStatics() {
         ProvinceStaticsVO vo = new ProvinceStaticsVO();
-        int provinceCount = getCount("省本级");
-        int cityCount = getCount("市");
-        int developmentZonesCount = getCount("开发区");
-        int countyCount = getCount("县");
+        int provinceCount = getCount(AreaLevelEnum.PROVINCE);
+        int cityCount = getCount(AreaLevelEnum.CITY);
+        int developmentZonesCount = getCount(AreaLevelEnum.DEVELOPMENT_ZONES);
+        int countyCount = getCount(AreaLevelEnum.COUNTY);
 
         vo.setProvinceCount(provinceCount);
         vo.setCityCount(cityCount);
@@ -89,7 +94,7 @@
         return vo;
     }
 
-    private int getCount(String level) {
+    private int getCount(AreaLevelEnum level) {
         return (int) sysUserService.count(
                 Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT)
                         .eq(SysUser::getAreaLevel, level));
@@ -111,30 +116,61 @@
     }
 
     public RiskAndTransferVO getRiskAndTransfer() throws Exception {
-        String nowQuarter = DateUtils.getNowQuarter();
         RiskAndTransferVO riskAndTransferVO = new RiskAndTransferVO();
-        //查询转移支付规模总额
+        // 查询省本级得分排名
+        ScoreRankVO scoreRankVO = tbScoreService.queryRankAndScoreByAreaCode("510000");
+        riskAndTransferVO.setScoreRankVO(scoreRankVO);
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        // previousQuarter = "2024年二季度";
+        // 查询转移支付规模总额
         List<TbBasicData> list = tbBasicDataService.lambdaQuery()
                 .select(TbBasicData::getTransferPaymentScale)
-                .eq(TbBasicData::getQuarter, nowQuarter)
-                .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED)
+                .eq(TbBasicData::getQuarter, previousQuarter)
+                // .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED)
                 .list();
         Optional<Double> reduce = list.stream()
                 .map(tbBasicData -> Double.parseDouble(tbBasicData.getTransferPaymentScale()))
                 .reduce(Double::sum);
         riskAndTransferVO.setTransferPaymentScale(reduce.orElse(0D));
-        //查询风险等级设置
+        // 查询风险等级设置
         DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel();
         List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel);
         riskAndTransferVO.setRiskLevelVOList(riskLevelVOList);
         RiskCountVO riskCountVO = new RiskCountVO();
+        // 地图市域得分
+        List<RiskMapVO> riskMapVOList = tbScoreService.getCityScore(previousQuarter,
+                riskLevel);
+        // List<RiskMapVO> riskMapVOList = tbScoreService.getCurrentScoreList(previousQuarter, null);
+        String[] noRiskArr = riskLevel.getNoRisk().split("_");
+        String[] lowRiskArr = riskLevel.getLowRisk().split("_");
+        String[] mediumRiskArr = riskLevel.getMediumRisk().split("_");
+        String[] highRiskArr = riskLevel.getHighRisk().split("_");
+        List<RiskMapVO> cityRiskVO = riskMapVOList.stream()
+                .filter(r -> r.getAreaLevel().equals(AreaLevelEnum.CITY))
+                .collect(Collectors.toList());
+        long noRiskCount = cityRiskVO.stream()
+                .filter(item -> item.getScore() >= Double.parseDouble(noRiskArr[0])
+                        && item.getScore() <= Double.parseDouble(noRiskArr[1])).count();
+        riskCountVO.setNoRiskCount((int) noRiskCount);
+        long lowRiskCount = cityRiskVO.stream()
+                .filter(item -> item.getScore() >= Double.parseDouble(lowRiskArr[0])
+                        && item.getScore() <= Double.parseDouble(lowRiskArr[1])).count();
+        riskCountVO.setLowRiskCount((int) lowRiskCount);
+        long mediumRiskCount = cityRiskVO.stream()
+                .filter(item -> item.getScore() >= Double.parseDouble(mediumRiskArr[0])
+                        && item.getScore() <= Double.parseDouble(mediumRiskArr[1])).count();
+        riskCountVO.setMediumRiskCount((int) mediumRiskCount);
+        long highRiskCount = cityRiskVO.stream()
+                .filter(item -> item.getScore() >= Double.parseDouble(highRiskArr[0])
+                        && item.getScore() <= Double.parseDouble(highRiskArr[1])).count();
+        riskCountVO.setHighRiskCount((int) highRiskCount);
 
-        List<TbDataScreenScore> dataScreenScoreList = tbDataScreenScoreService.selectRiskByQuarter(
-                nowQuarter, riskLevel.getId(), null);
-        for (RiskLevelVO vo : riskLevelVOList) {
-            long count = dataScreenScoreList.stream()
+        /*for (RiskLevelVO vo : riskLevelVOList) {
+            long count = riskMapVOList.stream()
+                    .filter(r -> r.getAreaLevel().equals(AreaLevelEnum.CITY))
                     .filter(item -> item.getScore() >= vo.getMin()
                             && item.getScore() <= vo.getMax()).count();
+
             if (vo.getRiskLevel().equals(RiskLevelEnum.L1)) {
                 riskCountVO.setNoRiskCount((int) count);
             } else if (vo.getRiskLevel().equals(RiskLevelEnum.L2)) {
@@ -144,16 +180,17 @@
             } else if (vo.getRiskLevel().equals(RiskLevelEnum.L4)) {
                 riskCountVO.setHighRiskCount((int) count);
             }
-        }
-        //TODO
-        riskCountVO.setNoRiskCount(50);
-        riskCountVO.setLowRiskCount(45);
-        riskCountVO.setMediumRiskCount(30);
-        riskCountVO.setHighRiskCount(80);
+        }*/
+        // TODO
+        // riskCountVO.setNoRiskCount(50);
+        // riskCountVO.setLowRiskCount(45);
+        // riskCountVO.setMediumRiskCount(30);
+        // riskCountVO.setHighRiskCount(80);
         riskAndTransferVO.setRiskCountVO(riskCountVO);
-        //查询风险配置对应得分
-        List<RiskMapVO> riskMapVOList = tbDataScreenScoreService.queryScore4Map(nowQuarter,
-                riskLevel.getId());
+        // 查询风险配置对应得分
+        // List<RiskMapVO> riskMapVOList = tbDataScreenScoreService.queryScore4Map(nowQuarter,
+        //         riskLevel.getId());
+
         riskAndTransferVO.setRiskMapVOList(riskMapVOList);
         return riskAndTransferVO;
     }
@@ -204,48 +241,55 @@
     public List<RiskRankingVO> riskRanking() throws Exception {
         DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel();
         List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel);
-        List<RiskRankingVO> voList = tbDataScreenScoreService.queryRiskRanking(riskLevel.getId(),
-                DateUtils.getNowQuarter(), AreaLevelEnum.COUNTY);
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        // previousQuarter = "2024年二季度";
+        List<RiskRankingVO> voList = tbScoreService.queryRiskRanking(
+                previousQuarter);
         int rank = 1;
         for (RiskRankingVO riskRankingVO : voList) {
             riskRankingVO.setRank(rank++);
             for (RiskLevelVO vo : riskLevelVOList) {
-                if (vo.getRiskLevel().equals(RiskLevelEnum.L1)
-                        && riskRankingVO.getScore() <= vo.getMin()) {
-                    riskRankingVO.setRiskLevel(vo.getRiskLevel().getCode());
-                }
+                // if (vo.getRiskLevel().equals(RiskLevelEnum.L1)
+                //         && riskRankingVO.getScore() <= vo.getMin()) {
+                //     riskRankingVO.setRiskLevel(vo.getRiskLevel().getCode());
+                // }
                 if (riskRankingVO.getScore() >= vo.getMin()
                         && riskRankingVO.getScore() <= vo.getMax()) {
                     riskRankingVO.setRiskLevel(vo.getRiskLevel().getCode());
                 }
-                if (vo.getRiskLevel().equals(RiskLevelEnum.L4)
-                        && riskRankingVO.getScore() >= vo.getMax()) {
-                    riskRankingVO.setRiskLevel(vo.getRiskLevel().getCode());
-                }
+                // if (vo.getRiskLevel().equals(RiskLevelEnum.L4)
+                //         && riskRankingVO.getScore() >= vo.getMax()) {
+                //     riskRankingVO.setRiskLevel(vo.getRiskLevel().getCode());
+                // }
             }
         }
         return voList;
     }
 
     public List<QuestionVO> queryQuestions() throws Exception {
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        // previousQuarter = "2024年二季度";
         List<TbQuestion> list = tbQuestionService.lambdaQuery()
-                .eq(TbQuestion::getQuarter, DateUtils.getNowQuarter()).list();
+                .eq(TbQuestion::getQuarter, previousQuarter).list();
         return BeanUtils.copyList(list, QuestionVO.class);
     }
 
     public DataAnalysisVO getDataAnalysis(String areaCode) throws Exception {
         DataAnalysisVO dataAnalysisVO = new DataAnalysisVO();
-        //查询得分排名
+        // 查询得分排名
         ScoreRankVO scoreRankVO = tbScoreService.queryRankAndScoreByAreaCode(areaCode);
         if (Objects.isNull(scoreRankVO)) {
             return dataAnalysisVO;
         }
         dataAnalysisVO.setRank(scoreRankVO.getRank());
         dataAnalysisVO.setScore(scoreRankVO.getScore());
-        String nowQuarter = DateUtils.getNowQuarter();
-        //查询问题
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        // previousQuarter = "2024年二季度";
+        // 查询问题
         List<TbQuestion> list = tbQuestionService.lambdaQuery()
-                .eq(TbQuestion::getQuarter, nowQuarter).list();
+                .eq(TbQuestion::getQuarter, previousQuarter)
+                .eq(TbQuestion::getDeptAreaCode, areaCode)
+                .list();
         List<QuestionVO> questionVOS = BeanUtils.copyList(list, QuestionVO.class);
         dataAnalysisVO.setQuestions(questionVOS);
         SysUser user = sysUserService.lambdaQuery()
@@ -255,91 +299,175 @@
             return dataAnalysisVO;
         }
         dataAnalysisVO.setAreaName(user.getDeptName());
-        //查询风险得分
+        // 查询风险得分
         DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel();
         List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel);
-        List<DataScreenScoreVO> thisYearScore = tbDataScreenScoreService.queryScoreByAreaAndYear(
-                areaCode, riskLevel.getId(), 1);
-        Optional<Double> thisYear = thisYearScore.stream().map(DataScreenScoreVO::getScore)
-                .reduce(Double::sum);
-        dataAnalysisVO.setYearScore(thisYear.orElse(0D));
-        List<DataScreenScoreVO> lastYearScore = tbDataScreenScoreService.queryScoreByAreaAndYear(
-                areaCode, riskLevel.getId(), 2);
-        Optional<Double> lastYear = lastYearScore.stream().map(DataScreenScoreVO::getScore)
-                .reduce(Double::sum);
-        dataAnalysisVO.setLastYearScore(lastYear.orElse(0D));
-        //查询风险等级
-        List<TbDataScreenScore> dataScreenScoreList = tbDataScreenScoreService.selectRiskByQuarter(
-                nowQuarter,
-                riskLevel.getId(), areaCode);
-        for (TbDataScreenScore tbDataScreenScore : dataScreenScoreList) {
+
+        dataAnalysisVO.setYearScore(getYearScore(areaCode, previousQuarter));
+        String lastYearQuarter = DateUtils.getLastYearQuarter(previousQuarter);
+        dataAnalysisVO.setLastYearScore(getYearScore(areaCode, lastYearQuarter));
+        // 查询风险等级
+        List<RiskMapVO> currentScoreList = tbScoreService.getCurrentScoreList(previousQuarter,
+                areaCode);
+
+        for (RiskMapVO tbDataScreenScore : currentScoreList) {
             for (RiskLevelVO vo : riskLevelVOList) {
-                if (vo.getRiskLevel().equals(RiskLevelEnum.L1)
-                        && tbDataScreenScore.getScore() <= vo.getMin()) {
-                    dataAnalysisVO.setRiskLevel(vo.getRiskLevel().getCode());
-                }
                 if (tbDataScreenScore.getScore() >= vo.getMin()
                         && tbDataScreenScore.getScore() <= vo.getMax()) {
                     dataAnalysisVO.setRiskLevel(vo.getRiskLevel().getCode());
                 }
-                if (vo.getRiskLevel().equals(RiskLevelEnum.L4)
-                        && tbDataScreenScore.getScore() >= vo.getMax()) {
-                    dataAnalysisVO.setRiskLevel(vo.getRiskLevel().getCode());
-                }
             }
         }
-        //查询形式指标得分
-        List<ScoreDataVO> scoreDataVOList = new ArrayList<>();
-        handleDataIndicators(areaCode, scoreDataVOList);
-        dataAnalysisVO.setScoreDataList(scoreDataVOList);
-        //查询数据指标得分
-        List<ScoreRateDataVO> scoreRateDataVOList = new ArrayList<>();
-        handleDataIndicators(areaCode, scoreRateDataVOList, nowQuarter);
-        dataAnalysisVO.setScoreRateDataList(scoreRateDataVOList);
-        //查询大屏下方字段列表
+        // 查询四个指标下的三级指标
+        List<FieldAndScoreDataVO> voList =
+                tbBasicDataService.getFieldAndScoreData(areaCode, previousQuarter, 1, 2);
+        List<FieldAndScoreDataVO> lastYearList =
+                tbBasicDataService.getFieldAndScoreData(areaCode, lastYearQuarter, 2, 2);
+        // 查询四个指标下的三级指标
+        List<FieldAndScoreDataVO> allDeptVoList =
+                tbBasicDataService.getFieldAndScoreData(areaCode, previousQuarter, 1, 1);
+        // 查询形式指标得分
+        dataAnalysisVO.setScoreDataList(handleDataIndicators(voList, lastYearList));
+        // 查询数据指标得分
+        dataAnalysisVO.setScoreRateDataList(handleDataIndicatorsRate(allDeptVoList, voList));
+        // 查询大屏下方字段列表
         List<TbBasicDataCategory> categoryList = tbBasicDataCategoryService.lambdaQuery()
-                .eq(TbBasicDataCategory::getStatus, ShowStatusEnum.SHOW).last("limit 4").list();
-        List<FieldAndScoreDataVO> voList = tbBasicDataService.selectBasicDataFieldsConfig(areaCode,
-                nowQuarter);
+                .eq(TbBasicDataCategory::getParentId, -1)
+                .eq(TbBasicDataCategory::getStatus, ShowStatusEnum.SHOW)
+                .last("limit 4").list();
+
         if (categoryList.isEmpty()) {
             dataAnalysisVO.setScoreRateDataListOne(CollUtils.emptyList());
             dataAnalysisVO.setScoreRateDataListTwo(CollUtils.emptyList());
             dataAnalysisVO.setScoreRateDataListThree(CollUtils.emptyList());
             dataAnalysisVO.setScoreRateDataListFour(CollUtils.emptyList());
         } else {
-            int size = categoryList.size();
-            for (int i = 0; i < 4; i++) {
-                List<FieldAndScoreDataVO> dataList;
-                if (i < size) {
-                    dataList = getFieldAndScoreData(voList,
-                            categoryList.get(i).getBasicDataCategoryName());
-                } else {
-                    dataList = CollUtils.emptyList();
-                }
-                switch (i) {
-                    case 0:
-                        dataAnalysisVO.setScoreRateDataListOne(dataList);
-                        break;
-                    case 1:
-                        dataAnalysisVO.setScoreRateDataListTwo(dataList);
-                        break;
-                    case 2:
-                        dataAnalysisVO.setScoreRateDataListThree(dataList);
-                        break;
-                    case 3:
-                        dataAnalysisVO.setScoreRateDataListFour(dataList);
-                        break;
-                }
-            }
+            dataAnalysisVO.setScoreRateDataListOne(getLevelThreeIndicators(voList, "财政经济形势"));
+            dataAnalysisVO.setScoreRateDataListTwo(getLevelThreeIndicators(voList, "预算管理方面"));
+            dataAnalysisVO.setScoreRateDataListThree(
+                    getLevelThreeIndicators(voList, "预算执行方面"));
+            dataAnalysisVO.setScoreRateDataListFour(
+                    getLevelThreeIndicators(voList, "风险防控方面"));
         }
         return dataAnalysisVO;
+    }
+
+    private List<ScoreRateDataVO> handleDataIndicatorsRate(List<FieldAndScoreDataVO> allDeptVoList,
+            List<FieldAndScoreDataVO> voList) {
+        List<ScoreRateDataVO> result = new ArrayList<>();
+
+        List<String> indicatorList = Lists.newArrayList("财政经济形势", "预算管理方面",
+                "预算执行方面", "风险防控方面");
+        for (int i = 0; i < indicatorList.size(); i++) {
+            ScoreRateDataVO scoreRateDataVO = new ScoreRateDataVO();
+            if (CollUtils.isEmpty(voList)) {
+                scoreRateDataVO.setRank(0);
+                scoreRateDataVO.setScore(0D);
+                scoreRateDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1));
+                scoreRateDataVO.setScoreRate(0D);
+                scoreRateDataVO.setMaxScore(0D);
+            } else {
+                Double indicatorOne = getLevelThreeIndicators(voList, indicatorList.get(i)).stream()
+                        .map(FieldAndScoreDataVO::getScore).reduce(Double::sum)
+                        .map(BigDecimal::valueOf)
+                        .orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP)
+                        .doubleValue();
+                List<Double> allIndicatorsScore = getAllIndicatorsScoreByName(allDeptVoList,
+                        indicatorList.get(i));
+                allIndicatorsScore.add(indicatorOne);
+                allIndicatorsScore.sort(Comparator.comparing(Double::doubleValue).reversed());
+                scoreRateDataVO.setRank(allIndicatorsScore.indexOf(indicatorOne) + 1);
+                scoreRateDataVO.setScore(indicatorOne);
+                scoreRateDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1));
+                scoreRateDataVO.setScoreRate(BigDecimal.valueOf(indicatorOne)
+                        .divide(BigDecimal.valueOf(voList.get(i).getLevelOneIndicatorMaxScore()), 2,
+                                RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100L))
+                        .doubleValue());
+                scoreRateDataVO.setMaxScore(
+                        getLevelThreeIndicators(voList, indicatorList.get(i)).get(0)
+                                .getLevelOneIndicatorMaxScore());
+            }
+            result.add(scoreRateDataVO);
+        }
+        return result;
+    }
+
+    private List<Double> getAllIndicatorsScoreByName(List<FieldAndScoreDataVO> allDeptVoList,
+            String indicatorName) {
+        Map<String, List<FieldAndScoreDataVO>> collect = allDeptVoList.stream()
+                .collect(Collectors.groupingBy(FieldAndScoreDataVO::getDeptAreaCode));
+        return collect.keySet().stream().map(key -> {
+            Double score = getLevelThreeIndicators(collect.get(key), indicatorName).stream()
+                    .map(FieldAndScoreDataVO::getScore).reduce(Double::sum).orElse(0D);
+            return score;
+        }).sorted(Comparator.comparing(Double::intValue).reversed()).collect(Collectors.toList());
+    }
+
+    private List<ScoreDataVO> handleDataIndicators(List<FieldAndScoreDataVO> voList,
+            List<FieldAndScoreDataVO> lastYearList) {
+        List<ScoreDataVO> scoreDataVOList = new ArrayList<>();
+        List<String> indicatorList = Lists.newArrayList("财政经济形势", "预算管理方面",
+                "预算执行方面", "风险防控方面");
+        for (int i = 0; i < indicatorList.size(); i++) {
+            ScoreDataVO scoreDataVO = new ScoreDataVO();
+            if (CollUtils.isEmpty(voList)) {
+                scoreDataVO.setLastScore(0D);
+                scoreDataVO.setScore(0D);
+                scoreDataVO.setMaxScore(0D);
+                scoreDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1));
+            } else {
+                Double indicatorOne = getLevelThreeIndicators(voList,
+                        indicatorList.get(i)).stream()
+                        .map(FieldAndScoreDataVO::getScore).reduce(Double::sum)
+                        .map(BigDecimal::valueOf)
+                        .orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP)
+                        .doubleValue();
+                Double indicatorOneLastYear = getLevelThreeIndicators(lastYearList,
+                        indicatorList.get(i)).stream()
+                        .map(FieldAndScoreDataVO::getScore).reduce(Double::sum)
+                        .map(BigDecimal::valueOf)
+                        .orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP).doubleValue();
+                scoreDataVO.setLastScore(indicatorOneLastYear);
+                scoreDataVO.setScore(indicatorOne);
+                scoreDataVO.setMaxScore(getLevelThreeIndicators(voList, indicatorList.get(i)).get(0)
+                        .getLevelOneIndicatorMaxScore());
+                scoreDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1));
+            }
+            scoreDataVOList.add(scoreDataVO);
+        }
+        return scoreDataVOList;
+    }
+
+    private List<FieldAndScoreDataVO> getLevelThreeIndicators(List<FieldAndScoreDataVO> voList,
+            String indicatorName) {
+        return voList.stream().map(vo -> {
+            if (StringUtils.isNotBlank(vo.getLevelOneIndicator())) {
+                if (StringUtils.trim(vo.getLevelOneIndicator()).equals(indicatorName)) {
+                    return vo;
+                } else {
+                    if (StringUtils.isNotBlank(vo.getLevelTwoIndicator())
+                            && StringUtils.trim(vo.getLevelTwoIndicator()).equals(indicatorName)) {
+                        return vo;
+                    }
+                }
+            }
+            return null;
+        }).filter(Objects::nonNull).collect(Collectors.toList());
+    }
+
+    private Double getYearScore(String areaCode, String previousQuarter) {
+        List<RiskMapVO> thisYearScoreList = tbScoreService.getScoreByYearType(areaCode,
+                previousQuarter);
+        return thisYearScoreList.stream().map(RiskMapVO::getScore)
+                .reduce(Double::sum).map(BigDecimal::valueOf).orElse(BigDecimal.ZERO)
+                .setScale(2, RoundingMode.HALF_UP).doubleValue();
     }
 
     private void handleDataIndicators(String areaCode, List<ScoreDataVO> scoreDataVOList) {
         List<DataScreenScoreVO> formalIndicatorsYear = tbDataScreenScoreService.selectIndicators(
                 areaCode, null, DataScreenConfigEnum.FORMAL_INDICATORS, 1);
         if (CollUtils.isNotEmpty(formalIndicatorsYear)) {
-            //形式指标一
+            // 形式指标一
             for (SubTypeEnum value : SubTypeEnum.values()) {
                 ScoreDataVO scoreDataVO = new ScoreDataVO();
                 scoreDataVO.setSubType(value);
@@ -425,14 +553,17 @@
 
     public List<DeptCalculateDetailVO> deptCalculateDetail(DeptCalculateDetailQuery query)
             throws Exception {
-        return tbScoreService.deptCalculateDetail(query, DateUtils.getNowQuarter());
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        // previousQuarter = "2024年二季度";
+        return tbScoreService.deptCalculateDetail(query, previousQuarter);
     }
 
     public CurrentFieldsDetailVO viewRawData(String areaCode) throws Exception {
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        // previousQuarter = "2024年二季度";
         Optional<TbBasicData> basicDataOptional = tbBasicDataService.lambdaQuery()
                 .eq(TbBasicData::getDeptAreaCode, areaCode)
-                .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED)
-                .eq(TbBasicData::getQuarter, DateUtils.getNowQuarter()).oneOpt();
+                .eq(TbBasicData::getQuarter, previousQuarter).oneOpt();
         if (basicDataOptional.isPresent()) {
             return tbBasicDataService.fieldsDetails(basicDataOptional.get().getId()).getData();
         } else {
@@ -442,17 +573,33 @@
 
     public ScoreCalculateDetailVO fieldsDetail(CalculateDetailQuery query) {
         List<SysUser> countyList = getCountyList(query.getCityAreaCode());
-        return tbScoreService.fieldsDetail(query, countyList);
+        try {
+            return tbScoreService.fieldsDetail(query, countyList);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
     }
 
     public List<SysUser> getCountyList(String areaCode) {
         String cityCode = areaCode.substring(0, 4);
+        if (areaCode.equals("510000")) {
+            cityCode = areaCode.substring(0, 3);
+        }
         List<SysUser> list = sysUserService.lambdaQuery()
                 .select(SysUser::getAreaCode, SysUser::getAreaName, SysUser::getAreaAlias,
                         SysUser::getUserId).eq(SysUser::getUserType,
                         UserTypeEnum.DEPARTMENT)
-                .ne(SysUser::getAreaCode, areaCode)
-                .likeRight(SysUser::getAreaCode, cityCode).list();
+                .likeRight(SysUser::getAreaCode, cityCode).or(cityCode.equals("5101"))
+                .in(cityCode.equals("5101"), SysUser::getAreaCode, "510008", "510015", "510017",
+                        "510025")
+                .or(cityCode.equals("5106"))
+                .eq(cityCode.equals("5106"), SysUser::getAreaCode, "510049")
+                .or(cityCode.equals("5109"))
+                .eq(cityCode.equals("5109"), SysUser::getAreaCode, "510077")
+                .orderByAsc(!areaCode.equals("510100") && !areaCode.equals("510600")
+                                && !areaCode.equals("510900"),
+                        SysUser::getAreaCode)
+                .list();
         return list;
     }
 }

--
Gitblit v1.7.1