From a93ad50197f1626a12ba5067639119400542f455 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期六, 11 十月 2025 18:01:52 +0800
Subject: [PATCH] 修改指定季度获取方式

---
 finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java |   50 +++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 45 insertions(+), 5 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 cbeba71..1aa19f7 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
@@ -20,7 +20,6 @@
 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;
@@ -52,6 +51,7 @@
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
@@ -71,6 +71,8 @@
     private final TbBasicDataMapper tbBasicDataMapper;
     private final TbQuestionMapper tbQuestionMapper;
     private final ISysUserService sysUserService;
+    @Value("${fdb.quarter}")
+    private String quarter;
 
     @Async
     @Override
@@ -274,7 +276,7 @@
                             BasicDataFieldEnum.BASIC_DATA_FIELD17);
                     res1 = validateDivisorValue(deptDivisorValue);
                     if (!res1) {
-                        score = getScore(deptDividendValue, deptDivisorValue, month,
+                        score = getScore5(deptDividendValue, deptDivisorValue, month,
                                 BigDecimal.valueOf(12D),
                                 vo);
                     } else {
@@ -296,7 +298,7 @@
                     res2 = validateDivisorValue(provinceDivisorValue);
                     score = 0D;
                     if (!res1 && !res2) {
-                        score = getScore(deptDividendValue, deptDivisorValue,
+                        score = getScore5(deptDividendValue, deptDivisorValue,
                                 provinceDividendValue, provinceDivisorValue, vo);
                     }
                     break;
@@ -622,7 +624,7 @@
     }
 
     /**
-     * 通用计算公式获取得分
+     * 通用计算公式获取得分(每低1个百分点扣1分)
      *
      * @param deptDividendValue     部门被除数
      * @param deptDivisorValue      部门除数
@@ -650,6 +652,44 @@
         if (deptDivided.compareTo(provinceDivided) < 0) {
             score = deptDivided.subtract(provinceDivided)
                     .multiply(BigDecimal.valueOf(100L))
+                    .add(BigDecimal.valueOf(vo.getMaxScore()))
+                    .setScale(1, RoundingMode.HALF_UP);
+            score = score.compareTo(BigDecimal.ZERO) >= 0 ? score : BigDecimal.ZERO;
+        } else {
+            score = BigDecimal.valueOf(vo.getMaxScore());
+        }
+        return score.doubleValue();
+    }
+
+    /**
+     * 通用计算公式获取得分(每低5个百分点扣一分)
+     *
+     * @param deptDividendValue     部门被除数
+     * @param deptDivisorValue      部门除数
+     * @param provinceDividendValue 省份被除数
+     * @param provinceDivisorValue  省份除数
+     * @param vo                    基础数据配置
+     * @return 得分
+     */
+    private Double getScore5(BigDecimal deptDividendValue, BigDecimal deptDivisorValue,
+            BigDecimal provinceDividendValue, BigDecimal provinceDivisorValue,
+            BasicDataConfigVO vo) {
+        BigDecimal score = BigDecimal.ZERO;
+        // 开始计算
+        BigDecimal deptDivided = BigDecimal.ZERO;
+
+        if (deptDivisorValue.compareTo(BigDecimal.ZERO) > 0) {
+            deptDivided = deptDividendValue.divide(deptDivisorValue, 4, RoundingMode.HALF_UP);
+        }
+        BigDecimal provinceDivided = BigDecimal.ZERO;
+
+        if (provinceDivisorValue.compareTo(BigDecimal.ZERO) > 0) {
+            provinceDivided = provinceDividendValue.divide(provinceDivisorValue, 4,
+                    RoundingMode.HALF_UP);
+        }
+        if (deptDivided.compareTo(provinceDivided) < 0) {
+            score = deptDivided.subtract(provinceDivided)
+                    .multiply(BigDecimal.valueOf(20))
                     .add(BigDecimal.valueOf(vo.getMaxScore()))
                     .setScale(1, RoundingMode.HALF_UP);
             score = score.compareTo(BigDecimal.ZERO) >= 0 ? score : BigDecimal.ZERO;
@@ -794,7 +834,7 @@
     @Override
     public void subtractScoreWithFixedRules(String deptAreaCode) throws Exception {
         String previousQuarter = DateUtils.getPreviousQuarter();
-        previousQuarter = QuarterConstant.CURRENT_QUARTER;
+        previousQuarter = quarter;
         TbBasicData tbBasicData = tbBasicDataMapper.selectOne(
                 Wrappers.lambdaQuery(TbBasicData.class).eq(TbBasicData::getQuarter, previousQuarter)
                         .eq(TbBasicData::getDeptAreaCode, deptAreaCode));

--
Gitblit v1.7.1