From 4b5624af301dfbdcf54b65dc55aadde1b6a8efd5 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 24 七月 2024 19:55:24 +0800
Subject: [PATCH] bug修改,查询季度写死“2024年一季度”

---
 finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java |  173 +++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 111 insertions(+), 62 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 acf53a9..0024565 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
@@ -52,7 +52,7 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.ArrayList;
-import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -116,12 +116,13 @@
     }
 
     public RiskAndTransferVO getRiskAndTransfer() throws Exception {
-        String nowQuarter = DateUtils.getNowQuarter();
+        String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = "2024年一季度";
         RiskAndTransferVO riskAndTransferVO = new RiskAndTransferVO();
         // 查询转移支付规模总额
         List<TbBasicData> list = tbBasicDataService.lambdaQuery()
                 .select(TbBasicData::getTransferPaymentScale)
-                .eq(TbBasicData::getQuarter, nowQuarter)
+                .eq(TbBasicData::getQuarter, previousQuarter)
                 // .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED)
                 .list();
         Optional<Double> reduce = list.stream()
@@ -133,9 +134,32 @@
         List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel);
         riskAndTransferVO.setRiskLevelVOList(riskLevelVOList);
         RiskCountVO riskCountVO = new RiskCountVO();
-        List<RiskMapVO> riskMapVOList = tbScoreService.getCurrentScoreList(nowQuarter, null);
+        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.setHighRiskCount((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);
 
-        for (RiskLevelVO vo : riskLevelVOList) {
+        /*for (RiskLevelVO vo : riskLevelVOList) {
             long count = riskMapVOList.stream()
                     .filter(r -> r.getAreaLevel().equals(AreaLevelEnum.CITY))
                     .filter(item -> item.getScore() >= vo.getMin()
@@ -150,7 +174,7 @@
             } else if (vo.getRiskLevel().equals(RiskLevelEnum.L4)) {
                 riskCountVO.setHighRiskCount((int) count);
             }
-        }
+        }*/
         // TODO
         // riskCountVO.setNoRiskCount(50);
         // riskCountVO.setLowRiskCount(45);
@@ -210,7 +234,10 @@
     public List<RiskRankingVO> riskRanking() throws Exception {
         DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel();
         List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel);
-        List<RiskRankingVO> voList = tbScoreService.queryRiskRanking(DateUtils.getNowQuarter());
+        // List<RiskRankingVO> voList = tbScoreService.queryRiskRanking(
+        //         DateUtils.getPreviousQuarter());
+        List<RiskRankingVO> voList = tbScoreService.queryRiskRanking(
+                "2024年一季度");
         int rank = 1;
         for (RiskRankingVO riskRankingVO : voList) {
             riskRankingVO.setRank(rank++);
@@ -233,8 +260,10 @@
     }
 
     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);
     }
 
@@ -247,10 +276,12 @@
         }
         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).eq(TbQuestion::getDeptAreaCode, areaCode)
+                .eq(TbQuestion::getQuarter, previousQuarter)
+                .eq(TbQuestion::getDeptAreaCode, areaCode)
                 .list();
         List<QuestionVO> questionVOS = BeanUtils.copyList(list, QuestionVO.class);
         dataAnalysisVO.setQuestions(questionVOS);
@@ -265,11 +296,12 @@
         DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel();
         List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel);
 
-        dataAnalysisVO.setYearScore(getYearScore(areaCode, 1));
-
-        dataAnalysisVO.setLastYearScore(getYearScore(areaCode, 2));
+        dataAnalysisVO.setYearScore(getYearScore(areaCode, previousQuarter));
+        String lastYearQuarter = DateUtils.getLastYearQuarter(previousQuarter);
+        dataAnalysisVO.setLastYearScore(getYearScore(areaCode, lastYearQuarter));
         // 查询风险等级
-        List<RiskMapVO> currentScoreList = tbScoreService.getCurrentScoreList(nowQuarter, areaCode);
+        List<RiskMapVO> currentScoreList = tbScoreService.getCurrentScoreList(previousQuarter,
+                areaCode);
         for (RiskMapVO tbDataScreenScore : currentScoreList) {
             for (RiskLevelVO vo : riskLevelVOList) {
                 if (vo.getRiskLevel().equals(RiskLevelEnum.L1)
@@ -288,12 +320,12 @@
         }
         // 查询四个指标下的三级指标
         List<FieldAndScoreDataVO> voList =
-                tbBasicDataService.getFieldAndScoreData(areaCode, nowQuarter, 1);
+                tbBasicDataService.getFieldAndScoreData(areaCode, previousQuarter, 1, 2);
         List<FieldAndScoreDataVO> lastYearList =
-                tbBasicDataService.getFieldAndScoreData(areaCode, nowQuarter, 2);
+                tbBasicDataService.getFieldAndScoreData(areaCode, previousQuarter, 2, 2);
         // 查询四个指标下的三级指标
         List<FieldAndScoreDataVO> allDeptVoList =
-                tbBasicDataService.getFieldAndScoreData(null, nowQuarter, 1);
+                tbBasicDataService.getFieldAndScoreData(areaCode, previousQuarter, 1, 1);
         // 查询形式指标得分
         dataAnalysisVO.setScoreDataList(handleDataIndicators(voList, lastYearList));
         // 查询数据指标得分
@@ -328,39 +360,33 @@
                 "预算执行方面", "风险防控方面");
         for (int i = 0; i < indicatorList.size(); i++) {
             ScoreRateDataVO scoreRateDataVO = new ScoreRateDataVO();
-            Double indicatorOne = getLevelThreeIndicators(voList, indicatorList.get(i)).stream()
-                    .map(FieldAndScoreDataVO::getScore).reduce(Double::sum).orElse(0D);
-
-            List<Double> allIndicatorsScore = getAllIndicatorsScoreByName(allDeptVoList,
-                    indicatorList.get(i));
-            scoreRateDataVO.setRank(findPositionInList(allIndicatorsScore, indicatorOne));
-            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());
+            if (CollUtils.isEmpty(voList)) {
+                scoreRateDataVO.setRank(0);
+                scoreRateDataVO.setScore(0D);
+                scoreRateDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1));
+                scoreRateDataVO.setScoreRate(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());
+            }
             result.add(scoreRateDataVO);
         }
-
         return result;
     }
-
-    public static int findPositionInList(List<Double> list, Double value) {
-        // Sorting the list to use binary search
-        Collections.sort(list);
-
-        // Finding the index using binary search
-        int index = Collections.binarySearch(list, value);
-
-        if (index < 0) {
-            // If the value is not found, binarySearch returns (-(insertion point) - 1)
-            // Convert to the insertion point by doing (-index - 1)
-            index = -index - 1;
-        }
-
-        return index + 1;
-    }
-
 
     private List<Double> getAllIndicatorsScoreByName(List<FieldAndScoreDataVO> allDeptVoList,
             String indicatorName) {
@@ -370,7 +396,7 @@
             Double score = getLevelThreeIndicators(collect.get(key), indicatorName).stream()
                     .map(FieldAndScoreDataVO::getScore).reduce(Double::sum).orElse(0D);
             return score;
-        }).collect(Collectors.toList());
+        }).sorted(Comparator.comparing(Double::intValue).reversed()).collect(Collectors.toList());
     }
 
     private List<ScoreDataVO> handleDataIndicators(List<FieldAndScoreDataVO> voList,
@@ -379,16 +405,29 @@
         List<String> indicatorList = Lists.newArrayList("财政经济形势", "预算管理方面",
                 "预算执行方面", "风险防控方面");
         for (int i = 0; i < indicatorList.size(); i++) {
-            Double indicatorOne = getLevelThreeIndicators(voList, indicatorList.get(i)).stream()
-                    .map(FieldAndScoreDataVO::getScore).reduce(Double::sum).orElse(0D);
-            Double indicatorOneLastYear = getLevelThreeIndicators(lastYearList,
-                    indicatorList.get(i)).stream()
-                    .map(FieldAndScoreDataVO::getScore).reduce(Double::sum).orElse(0D);
             ScoreDataVO scoreDataVO = new ScoreDataVO();
-            scoreDataVO.setLastScore(indicatorOneLastYear);
-            scoreDataVO.setScore(indicatorOne);
-            scoreDataVO.setMaxScore(voList.get(0).getLevelOneIndicatorMaxScore());
-            scoreDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1));
+            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(voList.get(0).getLevelOneIndicatorMaxScore());
+                scoreDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1));
+            }
             scoreDataVOList.add(scoreDataVO);
         }
         return scoreDataVOList;
@@ -411,10 +450,12 @@
         }).filter(Objects::nonNull).collect(Collectors.toList());
     }
 
-    private Double getYearScore(String areaCode, Integer yearType) {
-        List<RiskMapVO> thisYearScoreList = tbScoreService.getScoreByYearType(areaCode, yearType);
+    private Double getYearScore(String areaCode, String previousQuarter) {
+        List<RiskMapVO> thisYearScoreList = tbScoreService.getScoreByYearType(areaCode,
+                previousQuarter);
         return thisYearScoreList.stream().map(RiskMapVO::getScore)
-                .reduce(Double::sum).orElse(0D);
+                .reduce(Double::sum).map(BigDecimal::valueOf).orElse(BigDecimal.ZERO)
+                .setScale(2, RoundingMode.HALF_UP).doubleValue();
     }
 
     private void handleDataIndicators(String areaCode, List<ScoreDataVO> scoreDataVOList) {
@@ -507,14 +548,18 @@
 
     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 {
@@ -524,7 +569,11 @@
 
     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) {

--
Gitblit v1.7.1