From 6af08bad1986a72fa196afeb04c389c005fab673 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 30 八月 2024 11:52:08 +0800
Subject: [PATCH] bug修改

---
 finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java |    4 
 finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml                    |    5 
 finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java     |   76 ++++++++++++
 finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java  |    2 
 finance-system/src/main/java/com/finance/system/vo/FieldsTreeVO.java                     |    2 
 finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java                |   20 +++
 finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java       |   87 +++++++-------
 finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java |   25 +++-
 finance-system/src/main/resources/mapper/system/TbScoreMapper.xml                        |   40 ++++++
 finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java        |   65 +++++-----
 finance-system/src/main/java/com/finance/system/vo/ScoreRankVO.java                      |    5 
 finance-common/src/main/java/com/finance/common/enums/BasicDataFieldEnum.java            |    3 
 finance-system/src/main/java/com/finance/system/service/impl/TbFieldServiceImpl.java     |    7 
 finance-system/src/main/java/com/finance/system/vo/RiskAndTransferVO.java                |    5 
 finance-system/src/main/java/com/finance/system/service/TbScoreService.java              |    3 
 15 files changed, 254 insertions(+), 95 deletions(-)

diff --git a/finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java b/finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java
index 1634b9b..145714b 100644
--- a/finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java
+++ b/finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java
@@ -68,7 +68,7 @@
             @Validated @RequestBody CurrentFieldsQuery dto) {
         try {
             String previousQuarter = DateUtils.getPreviousQuarter();
-            previousQuarter = "2024年一季度";
+            // previousQuarter = "2024年一季度";
             dto.setQuarter(previousQuarter);
             return tbBasicDataService.fieldsStatics(dto);
         } catch (Exception e) {
@@ -150,7 +150,7 @@
             @Validated @RequestBody ScoreCalculateQuery query) {
         try {
             String previousQuarter = DateUtils.getPreviousQuarter();
-            previousQuarter = "2024年一季度";
+            // previousQuarter = "2024年一季度";
             query.setQuarter(previousQuarter);
             return R.ok(tbBasicDataService.scoreCalculatePage(query));
         } catch (Exception e) {
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 d48f5cd..19e252a 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
@@ -116,9 +116,12 @@
     }
 
     public RiskAndTransferVO getRiskAndTransfer() throws Exception {
-        String previousQuarter = DateUtils.getPreviousQuarter();
-        previousQuarter = "2024年一季度";
         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)
@@ -134,7 +137,10 @@
         List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel);
         riskAndTransferVO.setRiskLevelVOList(riskLevelVOList);
         RiskCountVO riskCountVO = new RiskCountVO();
-        List<RiskMapVO> riskMapVOList = tbScoreService.getCurrentScoreList(previousQuarter, null);
+        // 地图市域得分
+        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("_");
@@ -153,7 +159,7 @@
         long mediumRiskCount = cityRiskVO.stream()
                 .filter(item -> item.getScore() >= Double.parseDouble(mediumRiskArr[0])
                         && item.getScore() <= Double.parseDouble(mediumRiskArr[1])).count();
-        riskCountVO.setHighRiskCount((int) mediumRiskCount);
+        riskCountVO.setMediumRiskCount((int) mediumRiskCount);
         long highRiskCount = cityRiskVO.stream()
                 .filter(item -> item.getScore() >= Double.parseDouble(highRiskArr[0])
                         && item.getScore() <= Double.parseDouble(highRiskArr[1])).count();
@@ -184,6 +190,7 @@
         // 查询风险配置对应得分
         // List<RiskMapVO> riskMapVOList = tbDataScreenScoreService.queryScore4Map(nowQuarter,
         //         riskLevel.getId());
+
         riskAndTransferVO.setRiskMapVOList(riskMapVOList);
         return riskAndTransferVO;
     }
@@ -234,26 +241,26 @@
     public List<RiskRankingVO> riskRanking() throws Exception {
         DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel();
         List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel);
-        // List<RiskRankingVO> voList = tbScoreService.queryRiskRanking(
-        //         DateUtils.getPreviousQuarter());
         List<RiskRankingVO> voList = tbScoreService.queryRiskRanking(
-                "2024年一季度");
+                DateUtils.getPreviousQuarter());
+        // List<RiskRankingVO> voList = tbScoreService.queryRiskRanking(
+        //         "2024年一季度");
         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;
@@ -261,7 +268,7 @@
 
     public List<QuestionVO> queryQuestions() throws Exception {
         String previousQuarter = DateUtils.getPreviousQuarter();
-        previousQuarter = "2024年一季度";
+        // previousQuarter = "2024年一季度";
         List<TbQuestion> list = tbQuestionService.lambdaQuery()
                 .eq(TbQuestion::getQuarter, previousQuarter).list();
         return BeanUtils.copyList(list, QuestionVO.class);
@@ -277,7 +284,7 @@
         dataAnalysisVO.setRank(scoreRankVO.getRank());
         dataAnalysisVO.setScore(scoreRankVO.getScore());
         String previousQuarter = DateUtils.getPreviousQuarter();
-        previousQuarter = "2024年一季度";
+        // previousQuarter = "2024年一季度";
         // 查询问题
         List<TbQuestion> list = tbQuestionService.lambdaQuery()
                 .eq(TbQuestion::getQuarter, previousQuarter)
@@ -302,18 +309,11 @@
         // 查询风险等级
         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());
                 }
             }
@@ -549,16 +549,15 @@
     public List<DeptCalculateDetailVO> deptCalculateDetail(DeptCalculateDetailQuery query)
             throws Exception {
         String previousQuarter = DateUtils.getPreviousQuarter();
-        previousQuarter = "2024年一季度";
+        // previousQuarter = "2024年一季度";
         return tbScoreService.deptCalculateDetail(query, previousQuarter);
     }
 
     public CurrentFieldsDetailVO viewRawData(String areaCode) throws Exception {
         String previousQuarter = DateUtils.getPreviousQuarter();
-        previousQuarter = "2024年一季度";
+        // previousQuarter = "2024年一季度";
         Optional<TbBasicData> basicDataOptional = tbBasicDataService.lambdaQuery()
                 .eq(TbBasicData::getDeptAreaCode, areaCode)
-                .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED)
                 .eq(TbBasicData::getQuarter, previousQuarter).oneOpt();
         if (basicDataOptional.isPresent()) {
             return tbBasicDataService.fieldsDetails(basicDataOptional.get().getId()).getData();
@@ -578,12 +577,18 @@
 
     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::getAreaLevel, AreaLevelEnum.CITY)
-                .likeRight(SysUser::getAreaCode, cityCode).list();
+                .likeRight(SysUser::getAreaCode, cityCode).or(cityCode.equals("5101"))
+                .in(cityCode.equals("5101"), SysUser::getAreaCode, "510008", "510015", "510017",
+                        "510025")
+                .orderByAsc(!areaCode.equals("510100"), SysUser::getAreaCode)
+                .list();
         return list;
     }
 }
diff --git a/finance-common/src/main/java/com/finance/common/enums/BasicDataFieldEnum.java b/finance-common/src/main/java/com/finance/common/enums/BasicDataFieldEnum.java
index f8abfc0..a18cf13 100644
--- a/finance-common/src/main/java/com/finance/common/enums/BasicDataFieldEnum.java
+++ b/finance-common/src/main/java/com/finance/common/enums/BasicDataFieldEnum.java
@@ -115,7 +115,8 @@
     BASIC_DATA_FIELD85(85L, "(七)债务管理情况-当年已付息金额-一般债"),
     BASIC_DATA_FIELD86(86L, "(七)债务管理情况-当年已付息金额-专项债"),
     BASIC_DATA_FIELD87(87L, "(七)债务管理情况-当年已付息金额-一般债"),
-    BASIC_DATA_FIELD88(88L, "(七)债务管理情况-当年已付息金额-专项债");
+    BASIC_DATA_FIELD88(88L, "(七)债务管理情况-当年已付息金额-专项债"),
+    BASIC_DATA_FIELD89(89L, "(八)中央直达资金-支付进度");
 
     private final Long code;
     private final String desc;
diff --git a/finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java b/finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java
index fff6b26..c5fb45f 100644
--- a/finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java
+++ b/finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java
@@ -49,4 +49,24 @@
 
     List<RiskMapVO> getScoreByYearType(@Param("areaCode") String areaCode,
             @Param("quarter") String quarter);
+
+    /**
+     * 查询市的平均得分
+     *
+     * @param areaCode
+     * @param previousQuarter
+     * @return
+     */
+    Double getCityAverageScore(@Param("areaCode") String areaCode,
+            @Param("previousQuarter") String previousQuarter);
+
+    /**
+     * 根据区划代码前四位查询区县得分列表
+     *
+     * @param areaCode
+     * @param previousQuarter
+     * @return
+     */
+    List<Double> getCountyScoreList(@Param("areaCode") String areaCode,
+            @Param("previousQuarter") String previousQuarter);
 }
diff --git a/finance-system/src/main/java/com/finance/system/service/TbScoreService.java b/finance-system/src/main/java/com/finance/system/service/TbScoreService.java
index 0ff9c03..5871d3e 100644
--- a/finance-system/src/main/java/com/finance/system/service/TbScoreService.java
+++ b/finance-system/src/main/java/com/finance/system/service/TbScoreService.java
@@ -10,6 +10,7 @@
 import com.finance.system.query.HistoryScoreQuery;
 import com.finance.system.query.ScoreCalculateDetailQuery;
 import com.finance.system.query.ScoreQuery;
+import com.finance.system.vo.DataScreenConfigVO;
 import com.finance.system.vo.DeptCalculateDetailVO;
 import com.finance.system.vo.RiskMapVO;
 import com.finance.system.vo.RiskRankingVO;
@@ -52,4 +53,6 @@
     List<RiskRankingVO> queryRiskRanking(String nowQuarter);
 
     List<RiskMapVO> getScoreByYearType(String areaCode, String quarter);
+
+    List<RiskMapVO> getCityScore(String previousQuarter, DataScreenConfigVO riskLevel);
 }
diff --git a/finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java
index 45382d1..a95142f 100644
--- a/finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java
+++ b/finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java
@@ -36,6 +36,7 @@
 import com.finance.system.service.TbBasicDataFieldService;
 import com.finance.system.service.TbScoreService;
 import com.finance.system.vo.BasicDataConfigVO;
+import com.google.common.collect.Lists;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.ArrayList;
@@ -246,7 +247,6 @@
                     } else {
                         score = 0D;
                     }
-
                     break;
                 case INDICATOR_ITEM2:
                     // 2:财政经济形势-收入执行率-地方一般公共预算收入执行进度(地方一般公共预算收入/年初预算或调整预算);
@@ -296,7 +296,6 @@
                         score = getScore(deptDividendValue, deptDivisorValue,
                                 provinceDividendValue, provinceDivisorValue, vo);
                     }
-
                     break;
                 case INDICATOR_ITEM5:
                     // 5: 财政经济形势-重大财税政策落实情况-减税降费落实情况
@@ -359,13 +358,13 @@
                             BigDecimal add = BigDecimal.valueOf(0.6D).subtract(divided)
                                     .multiply(BigDecimal.valueOf(100D))
                                     .divide(BigDecimal.valueOf(4D), 2, RoundingMode.HALF_UP)
-                                    .add(BigDecimal.valueOf(8));
+                                    .add(BigDecimal.valueOf(8))
+                                    .setScale(2, RoundingMode.HALF_UP);
                             score = add.compareTo(BigDecimal.ZERO) >= 0 ? add.doubleValue() : 0D;
                         } else {
                             score = vo.getMaxScore();
                         }
                     }
-
                     break;
                 case INDICATOR_ITEM10:
                     // 10:预算管理方面-“三保”保障情况-“三保”支出保障情况
@@ -388,35 +387,34 @@
                     // 13:预算执行方面-库款管理-库款保障水平
                     BigDecimal currentData = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD35);
+                    BigDecimal first = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
+                            BasicDataFieldEnum.BASIC_DATA_FIELD36);
+                    BigDecimal second = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
+                            BasicDataFieldEnum.BASIC_DATA_FIELD37);
+                    BigDecimal third = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
+                            BasicDataFieldEnum.BASIC_DATA_FIELD38);
                     BigDecimal part1;
                     BigDecimal part2 = BigDecimal.ZERO;
-                    if (currentData.compareTo(BigDecimal.valueOf(0.8D)) < 0) {
-                        BigDecimal add = currentData.subtract(BigDecimal.valueOf(0.8D))
+                    if (third.compareTo(BigDecimal.valueOf(0.8D)) < 0) {
+                        BigDecimal add = third.subtract(BigDecimal.valueOf(0.8D))
                                 .divide(BigDecimal.valueOf(0.1D), 2, RoundingMode.HALF_UP)
                                 .multiply(BigDecimal.valueOf(0.6D))
-                                .add(BigDecimal.valueOf(3D));
+                                .add(BigDecimal.valueOf(3D))
+                                .setScale(2, RoundingMode.HALF_UP);
                         part1 = add.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : add;
                     } else {
                         part1 = BigDecimal.valueOf(3D);
                     }
-                    // BigDecimal first = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
-                    //         BasicDataFieldEnum.BASIC_DATA_FIELD36);
-                    // BigDecimal second = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
-                    //         BasicDataFieldEnum.BASIC_DATA_FIELD37);
-                    // BigDecimal third = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
-                    //         BasicDataFieldEnum.BASIC_DATA_FIELD38);
-                    String year = tbBasicData.getQuarter().substring(0, 4);
-                    List<BigDecimal> kuKuanList = tbBasicDataMapper.getKuKuanBaoZhangShuiPingByAreaCode(
-                                    sysUser.getAreaCode(),
-                                    year).stream()
-                            .map(BigDecimal::new)
-                            .collect(Collectors.toList());
 
-                    part2 = kuKuanList.stream()
-                            .anyMatch(item -> item.compareTo(BigDecimal.valueOf(0.3D)) <= 0)
-                            ? BigDecimal.ZERO
-                            : BigDecimal.valueOf(3D);
-
+                    // String year = tbBasicData.getQuarter().substring(0, 4);
+                    // List<BigDecimal> kuKuanList = tbBasicDataMapper.getKuKuanBaoZhangShuiPingByAreaCode(
+                    //                 sysUser.getAreaCode(),
+                    //                 year).stream()
+                    //         .map(BigDecimal::new)
+                    //         .collect(Collectors.toList());
+                    long count = Lists.newArrayList(first, second, third).stream()
+                            .filter(item -> item.compareTo(BigDecimal.valueOf(0.3D)) >= 0).count();
+                    part2 = BigDecimal.valueOf(count);
                     score = part1.add(part2).doubleValue();
                     break;
                 case INDICATOR_ITEM14:
@@ -434,7 +432,8 @@
                             score = divide.subtract(BigDecimal.valueOf(0.98D))
                                     .multiply(BigDecimal.valueOf(100D))
                                     .divide(BigDecimal.valueOf(3D), 2, RoundingMode.HALF_UP)
-                                    .add(BigDecimal.valueOf(vo.getMaxScore())).doubleValue();
+                                    .add(BigDecimal.valueOf(vo.getMaxScore()))
+                                    .setScale(2, RoundingMode.HALF_UP).doubleValue();
                         } else {
                             score = vo.getMaxScore();
                         }
@@ -456,15 +455,14 @@
                 case INDICATOR_ITEM16:
                     // 16:预算执行方面-中央直达资金-中央直达资金支付进度
                     deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
-                            BasicDataFieldEnum.BASIC_DATA_FIELD11);
+                            BasicDataFieldEnum.BASIC_DATA_FIELD89);
                     BigDecimal divided1 = month.divide(BigDecimal.valueOf(12D), 2,
-                            RoundingMode.HALF_UP);
+                            RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100L));
                     if (deptDividendValue.compareTo(divided1) < 0) {
                         BigDecimal add = deptDividendValue.subtract(divided1)
-                                .multiply(BigDecimal.valueOf(100D))
-                                .divide(BigDecimal.valueOf(5D), 2,
-                                        RoundingMode.HALF_UP)
-                                .add(BigDecimal.valueOf(vo.getMaxScore()));
+                                .divide(BigDecimal.valueOf(5D), 2, RoundingMode.HALF_UP)
+                                .add(BigDecimal.valueOf(vo.getMaxScore()))
+                                .setScale(2, RoundingMode.HALF_UP);
                         score = add.compareTo(BigDecimal.ZERO) < 0 ? 0D : add.doubleValue();
                     } else {
                         score = vo.getMaxScore();
@@ -486,14 +484,14 @@
                 case INDICATOR_ITEM19:
                     // 19:风险防控方面-暂付款管理-暂付款累计余额
                     BigDecimal bk = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
-                            BasicDataFieldEnum.BASIC_DATA_FIELD61);
+                            BasicDataFieldEnum.BASIC_DATA_FIELD61);// 175414
                     BigDecimal t = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
-                            BasicDataFieldEnum.BASIC_DATA_FIELD15);
+                            BasicDataFieldEnum.BASIC_DATA_FIELD15);// 696635
                     BigDecimal ab = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
-                            BasicDataFieldEnum.BASIC_DATA_FIELD23);
-                    BigDecimal add = t.add(ab.divide(month.multiply(
-                                    BigDecimal.valueOf(12D).multiply(BigDecimal.valueOf(0.05D))), 2,
-                            RoundingMode.HALF_UP));
+                            BasicDataFieldEnum.BASIC_DATA_FIELD23); // 56552
+                    BigDecimal add = t.add(ab).divide(month.multiply(
+                                    BigDecimal.valueOf(12D)).multiply(BigDecimal.valueOf(0.05D)), 2,
+                            RoundingMode.HALF_UP);
                     score = bk.compareTo(add) > 0 ? 0D : vo.getMaxScore();
                     break;
                 case INDICATOR_ITEM20:
@@ -510,7 +508,8 @@
                         BigDecimal d2 = month.divide(BigDecimal.valueOf(12D), 2,
                                 RoundingMode.HALF_UP);
                         score = d1.compareTo(d2) < 0 ? d1.divide(d2, 2, RoundingMode.HALF_UP)
-                                .multiply(BigDecimal.valueOf(vo.getMaxScore())).doubleValue()
+                                .multiply(BigDecimal.valueOf(vo.getMaxScore()))
+                                .setScale(2, RoundingMode.HALF_UP).doubleValue()
                                 : vo.getMaxScore();
                     } else {
                         score = vo.getMaxScore();
@@ -578,6 +577,7 @@
         return false;
     }
 
+
     private static List<TbQuestion> getQuestList(List<TbQuestion> list, String deptAreaCode,
             QuestionTypeEnum type) {
         return list.stream()
@@ -607,7 +607,8 @@
         }
 
         return BigDecimal.valueOf(
-                Double.parseDouble(tbBasicDataField.getFieldValue().replace(",", "")));
+                Double.parseDouble(
+                        tbBasicDataField.getFieldValue().replace(",", "").replace("%", "")));
     }
 
     /**
@@ -639,7 +640,8 @@
         if (deptDivided.compareTo(provinceDivided) < 0) {
             score = deptDivided.subtract(provinceDivided)
                     .multiply(BigDecimal.valueOf(100L))
-                    .add(BigDecimal.valueOf(vo.getMaxScore()));
+                    .add(BigDecimal.valueOf(vo.getMaxScore()))
+                    .setScale(2, RoundingMode.HALF_UP);
             score = score.compareTo(BigDecimal.ZERO) >= 0 ? score : BigDecimal.ZERO;
         } else {
             score = BigDecimal.valueOf(vo.getMaxScore());
@@ -667,9 +669,10 @@
 
             score = BigDecimal.valueOf(vo.getMaxScore());
         } else {
-            score = deptDivided.subtract(provinceDivided)
+            score = provinceDivided.subtract(deptDivided)
                     .multiply(BigDecimal.valueOf(100L))
-                    .add(BigDecimal.valueOf(vo.getMaxScore()));
+                    .add(BigDecimal.valueOf(vo.getMaxScore()))
+                    .setScale(2, RoundingMode.HALF_UP);
             score = score.compareTo(BigDecimal.ZERO) >= 0 ? score : BigDecimal.ZERO;
         }
         return score.doubleValue();
diff --git a/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java
index bc7243a..3f9a208 100644
--- a/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java
+++ b/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java
@@ -128,6 +128,8 @@
             if (tbBasicDataField != null) {
                 field.setValue(
                         tbBasicDataField.getFieldValue());
+            } else {
+                field.setValue("");
             }
             if (field.getChildren() != null && !field.getChildren().isEmpty()) {
                 setFieldValues(field.getChildren(), fieldMap);
@@ -155,7 +157,7 @@
         LocalDate fifteenDaysLimit = quarterStartLocalDate.plusDays(14);
         LocalDate now = LocalDate.now();
         String previousQuarter = DateUtils.getPreviousQuarter();
-        previousQuarter = "2024年一季度";
+        // previousQuarter = "2024年一季度";
         DateUtils.getQuarterDate(previousQuarter);
         vo.setQuarter(previousQuarter);
         vo.setStatus(ReportingStatusEnum.UNFILLED);
@@ -230,7 +232,7 @@
             return;
         }
         String previousQuarter = DateUtils.getPreviousQuarter();
-        previousQuarter = "2024年一季度";
+        // previousQuarter = "2024年一季度";
         // 查询需要填写的动态字段
         List<TbField> fieldList =
                 tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list();
@@ -240,6 +242,8 @@
                 .eq(TbBasicData::getDeptAreaCode, areaCode)
                 .eq(TbBasicData::getQuarter, previousQuarter).oneOpt();
         TbBasicData tbBasicData = BeanUtils.copyBean(dto, TbBasicData.class);
+        tbBasicData.setCurrentGdp(tbBasicData.getCurrentGdp().replace(",", ""));
+        tbBasicData.setTransferPaymentScale(tbBasicData.getTransferPaymentScale().replace(",", ""));
         if (basicDataOpt.isPresent()) {
             tbBasicData.setId(basicDataOpt.get().getId());
             tbBasicData.setDeptAreaCode(areaCode);
@@ -493,7 +497,7 @@
         LoginUser loginUser = SecurityUtils.getLoginUser();
         String areaCode = loginUser.getUser().getAreaCode();
         String previousQuarter = DateUtils.getPreviousQuarter();
-        previousQuarter = "2024年一季度";
+        // previousQuarter = "2024年一季度";
         EasyExcel.read(
                         file.getInputStream(),
                         new BasicDataListener(
@@ -613,7 +617,7 @@
         Date quarterStart = DateUtil.beginOfQuarter(date);
         Date quarterEnd = DateUtil.endOfQuarter(date);
         String previousQuarter = DateUtils.getPreviousQuarter();
-        previousQuarter = "2024年一季度";
+        // previousQuarter = "2024年一季度";
         // 查询是否有当前季度的填报记录
         TbBasicData basicData =
                 this.getOne(
@@ -784,7 +788,7 @@
         roots.add(remark);
         vo.setFields(roots);
         String previousQuarter = DateUtils.getPreviousQuarter();
-        previousQuarter = "2024年一季度";
+        // previousQuarter = "2024年一季度";
         // 查询上报的基础数据
         List<TbBasicData> basicDataList =
                 this.lambdaQuery()
@@ -952,7 +956,7 @@
         if (quarterLocalDate.isAfter(dateLocalDate) || quarterLocalDate.equals(dateLocalDate)) {
             throw new ServiceException("请导入过去季度的数据。");
         }
-
+        long start = System.currentTimeMillis();
         EasyExcel.read(
                         file.getInputStream(),
                         new HistoryDataListener(
@@ -966,6 +970,7 @@
                 .sheet()
                 .headRowNumber(0)
                 .doRead();
+        log.info("历史数据导入完成,耗时{}毫秒", System.currentTimeMillis() - start);
     }
 
     @Override
@@ -1142,6 +1147,8 @@
         // 查询需要填写的动态字段
         List<TbField> fieldList =
                 tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list();
+        Map<Long, TbField> allFieldMap = fieldList.stream()
+                .collect(Collectors.toMap(TbField::getId, e -> e));
         List<TbBasicDataField> originFields = tbBasicDataFieldService.lambdaQuery()
                 .eq(TbBasicDataField::getBasicDataId, basicData.getId()).list();
         Set<Long> fieldIdList = originFields.stream().map(TbBasicDataField::getFieldId)
@@ -1153,6 +1160,8 @@
                         BeanUtils.copyBean(dto, BasicDataDTO.class),
                         fieldMap));
         TbBasicData tbBasicData = BeanUtils.copyBean(dto, TbBasicData.class);
+        tbBasicData.setCurrentGdp(tbBasicData.getCurrentGdp().replace(",", ""));
+        tbBasicData.setTransferPaymentScale(tbBasicData.getTransferPaymentScale().replace(",", ""));
         tbBasicData.setDeptAreaCode(basicData.getDeptAreaCode());
         tbBasicData.setQuarter(basicData.getQuarter());
         // 保存基础数据动态字段数据
@@ -1194,6 +1203,10 @@
                         if (StringUtils.isNotBlank(item.getFieldValue())) {
                             item.setFieldValue(item.getFieldValue().replace(",", ""));
                         }
+                    } else {
+                        TbField field = allFieldMap.get(item.getFieldId());
+                        item.setFieldName(field.getFieldName());
+                        item.setBasicDataId(basicData.getId());
                     }
 
                 }).collect(Collectors.toList());
diff --git a/finance-system/src/main/java/com/finance/system/service/impl/TbFieldServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/TbFieldServiceImpl.java
index 7e95dea..416112d 100644
--- a/finance-system/src/main/java/com/finance/system/service/impl/TbFieldServiceImpl.java
+++ b/finance-system/src/main/java/com/finance/system/service/impl/TbFieldServiceImpl.java
@@ -13,6 +13,7 @@
 import com.finance.common.exception.ServiceException;
 import com.finance.common.utils.BeanUtils;
 import com.finance.common.utils.CollUtils;
+import com.finance.common.utils.DateUtils;
 import com.finance.common.utils.EasyExcelUtil;
 import com.finance.common.utils.SecurityUtils;
 import com.finance.common.utils.StringUtils;
@@ -336,7 +337,7 @@
                     .eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT).list();
             String[] userNameArr = userList.stream().map(SysUser::getAreaName)
                     .toArray(String[]::new);
-            selectedMap.put(0, userNameArr);
+            // selectedMap.put(0, userNameArr);
             // 生成下拉框的行数为部门的数量
             rows = userList.size();
         }
@@ -378,8 +379,8 @@
             columnNo.add(String.valueOf(i));
         }
         excellist.add(columnNo);
-        excellist.add(Lists.newArrayList(areaName, isDept ? "2024年一季度" : ""));
-        // excellist.add(Lists.newArrayList(areaName, isDept ? DateUtils.getPreviousQuarter() : ""));
+        // excellist.add(Lists.newArrayList(areaName, isDept ? "2024年一季度" : ""));
+        excellist.add(Lists.newArrayList(areaName, isDept ? DateUtils.getPreviousQuarter() : ""));
         return excellist;
     }
 
diff --git a/finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java
index b217cf3..e50f21a 100644
--- a/finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java
+++ b/finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java
@@ -48,7 +48,7 @@
         TbQuestion tbQuestion = BeanUtils.copyBean(dto, TbQuestion.class);
         tbQuestion.setType(dto.getType());
         String previousQuarter = DateUtils.getPreviousQuarter();
-        previousQuarter = "2024年一季度";
+        // previousQuarter = "2024年一季度";
         tbQuestion.setQuarter(previousQuarter);
         this.save(tbQuestion);
         asyncService.subtractScoreWithFixedRules(dto.getDeptAreaCode());
diff --git a/finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java
index 60174f3..c79ef28 100644
--- a/finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java
+++ b/finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java
@@ -4,6 +4,8 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.finance.common.basic.PageDTO;
 import com.finance.common.core.domain.entity.SysUser;
+import com.finance.common.enums.AreaLevelEnum;
+import com.finance.common.enums.UserTypeEnum;
 import com.finance.common.exception.ServiceException;
 import com.finance.common.utils.BeanUtils;
 import com.finance.common.utils.CollUtils;
@@ -16,8 +18,10 @@
 import com.finance.system.query.HistoryScoreQuery;
 import com.finance.system.query.ScoreCalculateDetailQuery;
 import com.finance.system.query.ScoreQuery;
+import com.finance.system.service.ISysUserService;
 import com.finance.system.service.TbBasicDataConfigService;
 import com.finance.system.service.TbScoreService;
+import com.finance.system.vo.DataScreenConfigVO;
 import com.finance.system.vo.DeptCalculateDetailVO;
 import com.finance.system.vo.RiskMapVO;
 import com.finance.system.vo.RiskRankingVO;
@@ -25,6 +29,8 @@
 import com.finance.system.vo.ScoreDetailVO;
 import com.finance.system.vo.ScoreRankVO;
 import com.finance.system.vo.ScoreVO;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -47,6 +53,7 @@
         TbScoreService {
 
     private final TbBasicDataConfigService basicDataConfigService;
+    private final ISysUserService sysUserService;
 
     @Override
     public Page<ScoreVO> pageScore(ScoreQuery query, Page<ScoreVO> page) {
@@ -74,7 +81,7 @@
         vo.setCalculateType(config.getCalculateType());
         Page<ScoreDetailVO> page = new Page<>(query.getPageNum(), query.getPageSize());
         String previousQuarter = DateUtils.getPreviousQuarter();
-        previousQuarter = "2024年一季度";
+        // previousQuarter = "2024年一季度";
         query.setPreviousQuarter(previousQuarter);
         Page<ScoreDetailVO> pageVO = baseMapper.scoreCalculateDetail(query, page);
         vo.setTotal(pageVO.getTotal());
@@ -110,7 +117,7 @@
     @Override
     public ScoreRankVO queryRankAndScoreByAreaCode(String areaCode) throws Exception {
         String previousQuarter = DateUtils.getPreviousQuarter();
-        previousQuarter = "2024年一季度";
+        // previousQuarter = "2024年一季度";
         List<ScoreRankVO> voList = baseMapper.queryRankAndScoreByAreaCode(areaCode,
                 previousQuarter);
         if (CollUtils.isNotEmpty(voList)) {
@@ -174,4 +181,69 @@
     public List<RiskMapVO> getScoreByYearType(String areaCode, String quarter) {
         return baseMapper.getScoreByYearType(areaCode, quarter);
     }
+
+    @Override
+    public List<RiskMapVO> getCityScore(String previousQuarter, DataScreenConfigVO riskLevel) {
+        // 查询城市部门
+        List<SysUser> cityList = getCityList();
+        List<RiskMapVO> riskMapVOList = new ArrayList<>();
+        for (SysUser sysUser : cityList) {
+            RiskMapVO vo = new RiskMapVO();
+            vo.setAreaCode(sysUser.getAreaCode());
+            vo.setAreaName(sysUser.getAreaName());
+            vo.setAreaLevel(sysUser.getAreaLevel());
+            String areaCode = sysUser.getAreaCode();
+            areaCode = areaCode.substring(0, 4);
+            Double totalAverageScore = baseMapper.getCityAverageScore(areaCode,
+                    previousQuarter);
+            // 查询区县的得分
+            List<Double> countyScoreList = baseMapper.getCountyScoreList(areaCode, previousQuarter);
+            // 将风险范围解析为列表,只解析一次
+            List<Double> mediumRange = Arrays.stream(riskLevel.getMediumRisk().split("_"))
+                    .map(Double::valueOf)
+                    .collect(Collectors.toList());
+
+            List<Double> noRiskRange = Arrays.stream(riskLevel.getNoRisk().split("_"))
+                    .map(Double::valueOf)
+                    .collect(Collectors.toList());
+
+            // 计算中等风险和无风险的数量
+            long mediumCount = 0;
+            long noCount = 0;
+            for (Double score : countyScoreList) {
+                if (score >= mediumRange.get(0) && score <= mediumRange.get(1)) {
+                    mediumCount++;
+                } else if (score >= noRiskRange.get(0) && score <= noRiskRange.get(1)) {
+                    noCount++;
+                }
+            }
+            // 当中等风险的数量大于总数的1/3,总分减一
+            if ((double) mediumCount / (double) countyScoreList.size() > 0.33) {
+                totalAverageScore = totalAverageScore - 1D;
+            }
+            // 当无风险的数量大于总数的1/3,总分加一
+            if ((double) noCount / (double) countyScoreList.size() > 0.33) {
+                totalAverageScore = totalAverageScore + 1D;
+            }
+            vo.setScore(totalAverageScore);
+            riskMapVOList.add(vo);
+        }
+        return riskMapVOList;
+    }
+
+    public List<SysUser> getCityList() {
+        List<SysUser> list = sysUserService.lambdaQuery()
+                .eq(SysUser::getAreaLevel, AreaLevelEnum.CITY)
+                .list();
+        return list;
+    }
+
+    public List<SysUser> getChildrenList(String areaCode) {
+        String cityCode = areaCode.substring(0, 4);
+        List<SysUser> list = sysUserService.lambdaQuery()
+                .select(SysUser::getAreaCode, SysUser::getAreaName, SysUser::getAreaAlias,
+                        SysUser::getUserId).eq(SysUser::getUserType,
+                        UserTypeEnum.DEPARTMENT).likeRight(SysUser::getAreaCode, cityCode).list();
+        return list;
+    }
 }
diff --git a/finance-system/src/main/java/com/finance/system/vo/FieldsTreeVO.java b/finance-system/src/main/java/com/finance/system/vo/FieldsTreeVO.java
index bd7f932..1577ce0 100644
--- a/finance-system/src/main/java/com/finance/system/vo/FieldsTreeVO.java
+++ b/finance-system/src/main/java/com/finance/system/vo/FieldsTreeVO.java
@@ -1,5 +1,6 @@
 package com.finance.system.vo;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.finance.common.enums.FieldTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -22,6 +23,7 @@
     private Long id;
 
     @ApiModelProperty(value = "数据详情")
+    @JsonInclude(JsonInclude.Include.ALWAYS)
     private String value;
 
     @ApiModelProperty(value = "名称")
diff --git a/finance-system/src/main/java/com/finance/system/vo/RiskAndTransferVO.java b/finance-system/src/main/java/com/finance/system/vo/RiskAndTransferVO.java
index b15a5e2..30f0d0e 100644
--- a/finance-system/src/main/java/com/finance/system/vo/RiskAndTransferVO.java
+++ b/finance-system/src/main/java/com/finance/system/vo/RiskAndTransferVO.java
@@ -21,8 +21,9 @@
     private List<RiskMapVO> riskMapVOList;
     @ApiModelProperty("风险等级区间")
     private List<RiskLevelVO> riskLevelVOList;
-    @ApiModelProperty("得分")
-    private Double score;
+    @ApiModelProperty("省本级得分排名")
+    private ScoreRankVO scoreRankVO;
+
 }
 
 
diff --git a/finance-system/src/main/java/com/finance/system/vo/ScoreRankVO.java b/finance-system/src/main/java/com/finance/system/vo/ScoreRankVO.java
index 7d343dc..6167fb5 100644
--- a/finance-system/src/main/java/com/finance/system/vo/ScoreRankVO.java
+++ b/finance-system/src/main/java/com/finance/system/vo/ScoreRankVO.java
@@ -1,5 +1,6 @@
 package com.finance.system.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 /**
@@ -12,11 +13,13 @@
     /**
      * 区划代码
      */
+    @ApiModelProperty("区划代码")
     private String areaCode;
     /**
      * 得分
      */
+    @ApiModelProperty("得分")
     private Double score;
-
+    @ApiModelProperty("排名")
     private Integer rank;
 }
diff --git a/finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml b/finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml
index 93c3f67..5f5bdf7 100644
--- a/finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml
+++ b/finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml
@@ -95,7 +95,7 @@
   <select id="getFieldAndScoreData" resultType="com.finance.system.vo.FieldAndScoreDataVO">
     SELECT tbdc.id,
     tbdc.type_name,
-    ROUND(ts.score,2) AS score,
+    ROUND(ts.score,1) AS score,
     tbdc.max_score,
     tbd.dept_area_code,
     tbdc.basic_data_category_id AS basicDataCategoryId,
@@ -111,7 +111,8 @@
     <where>
       tbd.`quarter` = #{nowQuarter} AND su.user_id IN (SELECT user_id FROM sys_user WHERE
       area_code
-      LIKE CONCAT( SUBSTRING(#{areaCode}, 0, 4 ), '%' ) AND user_type = 2 AND area_level = 4)
+      LIKE CONCAT( SUBSTRING(#{areaCode}, 1, 4 ), '%' ) AND user_type = 2 AND area_level
+      in(1,2,3,4))
       <if test="isAll!=null and isAll == 2">
         AND tbd.dept_area_code = #{areaCode}
       </if>
diff --git a/finance-system/src/main/resources/mapper/system/TbScoreMapper.xml b/finance-system/src/main/resources/mapper/system/TbScoreMapper.xml
index bb66666..1ef4e11 100644
--- a/finance-system/src/main/resources/mapper/system/TbScoreMapper.xml
+++ b/finance-system/src/main/resources/mapper/system/TbScoreMapper.xml
@@ -72,9 +72,19 @@
       CURDATE())
       AND su.user_id in (SELECT user_id
       FROM sys_user
-      WHERE area_code LIKE CONCAT(SUBSTRING(#{areaCode}, 0, 4), '%')
+      WHERE (
+      (
+      #{areaCode} = '510000'
+      AND area_code LIKE CONCAT( SUBSTRING( #{areaCode}, 1, 2 ), '%' ))
+      OR (
+      #{areaCode} != '510000'
+      AND area_code LIKE CONCAT( SUBSTRING( #{areaCode}, 1, 4 ), '%' ))
+      OR (
+      #{areaCode}= '510100'
+      AND area_code IN ( '510008', '510015', '510017', '510025' ))
+      )
       AND user_type = 2
-      AND area_level = 4)
+      AND area_level in (1,2,3,4))
     </where>
 
     GROUP BY tbc.dept_area_code
@@ -153,7 +163,7 @@
     LEFT JOIN sys_user su ON su.area_code = tbd.dept_area_code
     <where>
       AND tbd.quarter = #{nowQuarter}
-      AND su.area_level = '${@com.finance.common.enums.AreaLevelEnum@COUNTY.getCode()}'
+      # AND su.area_level = '${@com.finance.common.enums.AreaLevelEnum@COUNTY.getCode()}'
     </where>
     GROUP BY tbd.id) rs
     ORDER BY rs.score ASC
@@ -170,5 +180,29 @@
     GROUP BY tbd.id) rs
     ORDER BY rs.score DESC
   </select>
+  <select id="getCityAverageScore" resultType="java.lang.Double">
+    SELECT IFNULL(ROUND(SUM(res.score), 2), 0) AS total_score
+    FROM (SELECT SUM(ts.score) / COUNT(DISTINCT ts.basic_data_id) AS score
+          FROM tb_score ts
+                 JOIN tb_basic_data tbd ON tbd.id = ts.basic_data_id
+          WHERE tbd.quarter = #{previousQuarter}
+            AND (
+            tbd.dept_area_code LIKE CONCAT(#{areaCode}, '%')
+              OR (
+              #{areaCode} = '5101'
+                AND tbd.dept_area_code IN ('510008', '510015', '510017', '510025')
+              )
+            )
+          GROUP BY ts.basic_data_config_id) AS res
+
+  </select>
+  <select id="getCountyScoreList" resultType="java.lang.Double">
+    SELECT IFNULL(ROUND(SUM(ts.score), 2), 0) AS score
+    FROM tb_score ts
+           JOIN tb_basic_data tbd ON tbd.id = ts.basic_data_id
+    WHERE tbd.quarter = #{previousQuarter}
+      AND tbd.dept_area_code LIKE CONCAT(#{areaCode}, '%')
+    GROUP BY ts.basic_data_id
+  </select>
 
 </mapper>

--
Gitblit v1.7.1