From 18891c60ab1c06a4acc85d0ec54dee50d1b1a19f Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期一, 07 四月 2025 17:20:07 +0800
Subject: [PATCH] bug修改

---
 finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java |   91 ++++++++++++++++++++++++++-------------------
 1 files changed, 52 insertions(+), 39 deletions(-)

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 a95142f..cbeba71 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
@@ -1,5 +1,7 @@
 package com.finance.system.service.impl;
 
+import static com.finance.common.enums.IndicatorItemEnum.INDICATOR_ITEM8;
+
 import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson2.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -18,6 +20,7 @@
 import com.finance.common.utils.CollUtils;
 import com.finance.common.utils.DateUtils;
 import com.finance.common.utils.StringUtils;
+import com.finance.system.constants.QuarterConstant;
 import com.finance.system.domain.TbBasicData;
 import com.finance.system.domain.TbBasicDataConfig;
 import com.finance.system.domain.TbBasicDataConfigDetail;
@@ -346,23 +349,29 @@
                     score = res ? 0 : vo.getMaxScore();
                     break;
                 case INDICATOR_ITEM9:
+                    // 预算管理方面-“三保”保障情况-“三保”需求占可用财力的比重
                     BigDecimal au = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD45);
                     BigDecimal r = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD13);
                     res1 = validateDivisorValue(r);
                     score = 0D;
-                    if (!res1) {
-                        BigDecimal divided = au.divide(r, 2, RoundingMode.HALF_UP);
-                        if (divided.compareTo(BigDecimal.valueOf(0.6D)) > 0) {
-                            BigDecimal add = BigDecimal.valueOf(0.6D).subtract(divided)
-                                    .multiply(BigDecimal.valueOf(100D))
-                                    .divide(BigDecimal.valueOf(4D), 2, RoundingMode.HALF_UP)
-                                    .add(BigDecimal.valueOf(8))
-                                    .setScale(2, RoundingMode.HALF_UP);
-                            score = add.compareTo(BigDecimal.ZERO) >= 0 ? add.doubleValue() : 0D;
-                        } else {
-                            score = vo.getMaxScore();
+                    TbScore tbScore = scoreList.stream().filter(s -> s.getBasicDataConfigId()
+                            .equals(INDICATOR_ITEM8.getCode())).findFirst().orElse(null);
+                    if (tbScore != null) {
+                        if (!res1 && tbScore.getScore() != 0) {
+                            BigDecimal divided = au.divide(r, 4, RoundingMode.HALF_UP);
+                            if (divided.compareTo(BigDecimal.valueOf(0.6D)) > 0) {
+                                BigDecimal add = BigDecimal.valueOf(0.6D).subtract(divided)
+                                        .multiply(BigDecimal.valueOf(100D))
+                                        .divide(BigDecimal.valueOf(4D), 4, RoundingMode.HALF_UP)
+                                        .add(BigDecimal.valueOf(8))
+                                        .setScale(1, RoundingMode.HALF_UP);
+                                score = add.compareTo(BigDecimal.ZERO) >= 0 ? add.doubleValue()
+                                        : 0D;
+                            } else {
+                                score = vo.getMaxScore();
+                            }
                         }
                     }
                     break;
@@ -397,10 +406,10 @@
                     BigDecimal part2 = BigDecimal.ZERO;
                     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)
+                                .divide(BigDecimal.valueOf(0.1D), 4, RoundingMode.HALF_UP)
                                 .multiply(BigDecimal.valueOf(0.6D))
                                 .add(BigDecimal.valueOf(3D))
-                                .setScale(2, RoundingMode.HALF_UP);
+                                .setScale(1, RoundingMode.HALF_UP);
                         part1 = add.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : add;
                     } else {
                         part1 = BigDecimal.valueOf(3D);
@@ -426,14 +435,14 @@
                     String substring = tbBasicData.getQuarter().substring(4);
                     if (substring.equals("四季度")) {
                         // 使用全年评价
-                        BigDecimal divide = deptDividendValue.divide(deptDivisorValue, 2,
+                        BigDecimal divide = deptDividendValue.divide(deptDivisorValue, 4,
                                 RoundingMode.HALF_UP);
                         if (divide.compareTo(BigDecimal.valueOf(0.98D)) < 0) {
                             score = divide.subtract(BigDecimal.valueOf(0.98D))
                                     .multiply(BigDecimal.valueOf(100D))
-                                    .divide(BigDecimal.valueOf(3D), 2, RoundingMode.HALF_UP)
+                                    .divide(BigDecimal.valueOf(3D), 4, RoundingMode.HALF_UP)
                                     .add(BigDecimal.valueOf(vo.getMaxScore()))
-                                    .setScale(2, RoundingMode.HALF_UP).doubleValue();
+                                    .setScale(1, RoundingMode.HALF_UP).doubleValue();
                         } else {
                             score = vo.getMaxScore();
                         }
@@ -456,13 +465,13 @@
                     // 16:预算执行方面-中央直达资金-中央直达资金支付进度
                     deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             BasicDataFieldEnum.BASIC_DATA_FIELD89);
-                    BigDecimal divided1 = month.divide(BigDecimal.valueOf(12D), 2,
+                    BigDecimal divided1 = month.divide(BigDecimal.valueOf(12D), 4,
                             RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100L));
                     if (deptDividendValue.compareTo(divided1) < 0) {
                         BigDecimal add = deptDividendValue.subtract(divided1)
-                                .divide(BigDecimal.valueOf(5D), 2, RoundingMode.HALF_UP)
+                                .divide(BigDecimal.valueOf(5D), 4, RoundingMode.HALF_UP)
                                 .add(BigDecimal.valueOf(vo.getMaxScore()))
-                                .setScale(2, RoundingMode.HALF_UP);
+                                .setScale(1, RoundingMode.HALF_UP);
                         score = add.compareTo(BigDecimal.ZERO) < 0 ? 0D : add.doubleValue();
                     } else {
                         score = vo.getMaxScore();
@@ -489,9 +498,10 @@
                             BasicDataFieldEnum.BASIC_DATA_FIELD15);// 696635
                     BigDecimal ab = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                             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);
+                    BigDecimal add = t.add(ab).divide(month, 4, RoundingMode.HALF_UP)
+                            .multiply(BigDecimal.valueOf(12D))
+                            .multiply(BigDecimal.valueOf(0.05D))
+                            .setScale(1, RoundingMode.HALF_UP);
                     score = bk.compareTo(add) > 0 ? 0D : vo.getMaxScore();
                     break;
                 case INDICATOR_ITEM20:
@@ -503,13 +513,13 @@
                     res1 = validateDivisorValue(deptDivisorValue);
                     score = 0D;
                     if (!res1) {
-                        BigDecimal d1 = deptDividendValue.divide(deptDivisorValue, 2,
+                        BigDecimal d1 = deptDividendValue.divide(deptDivisorValue, 4,
                                 RoundingMode.HALF_UP);
-                        BigDecimal d2 = month.divide(BigDecimal.valueOf(12D), 2,
+                        BigDecimal d2 = month.divide(BigDecimal.valueOf(12D), 4,
                                 RoundingMode.HALF_UP);
-                        score = d1.compareTo(d2) < 0 ? d1.divide(d2, 2, RoundingMode.HALF_UP)
+                        score = d1.compareTo(d2) < 0 ? d1.divide(d2, 4, RoundingMode.HALF_UP)
                                 .multiply(BigDecimal.valueOf(vo.getMaxScore()))
-                                .setScale(2, RoundingMode.HALF_UP).doubleValue()
+                                .setScale(1, RoundingMode.HALF_UP).doubleValue()
                                 : vo.getMaxScore();
                     } else {
                         score = vo.getMaxScore();
@@ -629,19 +639,19 @@
         BigDecimal deptDivided = BigDecimal.ZERO;
 
         if (deptDivisorValue.compareTo(BigDecimal.ZERO) > 0) {
-            deptDivided = deptDividendValue.divide(deptDivisorValue, 2, RoundingMode.HALF_UP);
+            deptDivided = deptDividendValue.divide(deptDivisorValue, 4, RoundingMode.HALF_UP);
         }
         BigDecimal provinceDivided = BigDecimal.ZERO;
 
         if (provinceDivisorValue.compareTo(BigDecimal.ZERO) > 0) {
-            provinceDivided = provinceDividendValue.divide(provinceDivisorValue, 2,
+            provinceDivided = provinceDividendValue.divide(provinceDivisorValue, 4,
                     RoundingMode.HALF_UP);
         }
         if (deptDivided.compareTo(provinceDivided) < 0) {
             score = deptDivided.subtract(provinceDivided)
                     .multiply(BigDecimal.valueOf(100L))
                     .add(BigDecimal.valueOf(vo.getMaxScore()))
-                    .setScale(2, RoundingMode.HALF_UP);
+                    .setScale(1, RoundingMode.HALF_UP);
             score = score.compareTo(BigDecimal.ZERO) >= 0 ? score : BigDecimal.ZERO;
         } else {
             score = BigDecimal.valueOf(vo.getMaxScore());
@@ -657,12 +667,12 @@
         BigDecimal deptDivided = BigDecimal.ZERO;
 
         if (deptDivisorValue.compareTo(BigDecimal.ZERO) > 0) {
-            deptDivided = deptDividendValue.divide(deptDivisorValue, 2, RoundingMode.HALF_UP);
+            deptDivided = deptDividendValue.divide(deptDivisorValue, 4, RoundingMode.HALF_UP);
         }
         BigDecimal provinceDivided = BigDecimal.ZERO;
 
         if (provinceDivisorValue.compareTo(BigDecimal.ZERO) > 0) {
-            provinceDivided = provinceDividendValue.divide(provinceDivisorValue, 2,
+            provinceDivided = provinceDividendValue.divide(provinceDivisorValue, 4,
                     RoundingMode.HALF_UP);
         }
         if (deptDivided.compareTo(provinceDivided) < 0) {
@@ -672,7 +682,7 @@
             score = provinceDivided.subtract(deptDivided)
                     .multiply(BigDecimal.valueOf(100L))
                     .add(BigDecimal.valueOf(vo.getMaxScore()))
-                    .setScale(2, RoundingMode.HALF_UP);
+                    .setScale(1, RoundingMode.HALF_UP);
             score = score.compareTo(BigDecimal.ZERO) >= 0 ? score : BigDecimal.ZERO;
         }
         return score.doubleValue();
@@ -744,18 +754,19 @@
     private Double getScoreByMonth(BigDecimal deptDividendValue, BigDecimal deptDivisorValue,
             BigDecimal currentMonth, BasicDataConfigVO vo) {
         double score;
-        BigDecimal divided1 = deptDividendValue.divide(deptDivisorValue, 2,
+        BigDecimal divided1 = deptDividendValue.divide(deptDivisorValue, 4,
                 RoundingMode.HALF_UP);
-        BigDecimal divided2 = currentMonth.divide(BigDecimal.valueOf(12D), 2,
+        BigDecimal divided2 = currentMonth.divide(BigDecimal.valueOf(12D), 4,
                 RoundingMode.HALF_UP);
         if (divided1.compareTo(
-                currentMonth.divide(BigDecimal.valueOf(12D), 2, RoundingMode.HALF_UP))
+                currentMonth.divide(BigDecimal.valueOf(12D), 4, RoundingMode.HALF_UP))
                 < 0) {
             BigDecimal add = divided1.subtract(divided2)
                     .multiply(BigDecimal.valueOf(100D))
-                    .divide(BigDecimal.valueOf(5D), 2,
+                    .divide(BigDecimal.valueOf(5D), 4,
                             RoundingMode.HALF_UP)
-                    .add(BigDecimal.valueOf(vo.getMaxScore()));
+                    .add(BigDecimal.valueOf(vo.getMaxScore()))
+                    .setScale(1, RoundingMode.HALF_UP);
             score = add.compareTo(BigDecimal.ZERO) < 0 ? 0D : add.doubleValue();
         } else {
             score = vo.getMaxScore();
@@ -783,6 +794,7 @@
     @Override
     public void subtractScoreWithFixedRules(String deptAreaCode) throws Exception {
         String previousQuarter = DateUtils.getPreviousQuarter();
+        previousQuarter = QuarterConstant.CURRENT_QUARTER;
         TbBasicData tbBasicData = tbBasicDataMapper.selectOne(
                 Wrappers.lambdaQuery(TbBasicData.class).eq(TbBasicData::getQuarter, previousQuarter)
                         .eq(TbBasicData::getDeptAreaCode, deptAreaCode));
@@ -829,15 +841,16 @@
                     // 23:风险防控方面-债务管理-隐性债务化解
                     questionList = getQuestList(list, deptAreaCode,
                             QuestionTypeEnum.ENUM6);
-                    score = CollUtils.isNotEmpty(questionList) ? vo.getMaxScore() : -3D;
+                    score = CollUtils.isNotEmpty(questionList) ? -3D : vo.getMaxScore();
                     break;
                 case INDICATOR_ITEM24:
                     // 24:风险防控方面-债务管理-日常监督发现问题
                     questionList = getQuestList(list, deptAreaCode,
                             QuestionTypeEnum.ENUM7);
                     if (CollUtils.isNotEmpty(questionList)) {
-                        score = -18D + questionList.size() * -1D;
+                        score = questionList.size() * -1D;
                     }
+                    break;
                 case INDICATOR_ITEM25:
                     // 25:风险防控方面-日常监督发现问题
                     questionList = getQuestList(list, deptAreaCode,

--
Gitblit v1.7.1