| | |
| | | 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; |
| | | |
| | |
| | | private final TbBasicDataMapper tbBasicDataMapper; |
| | | private final TbQuestionMapper tbQuestionMapper; |
| | | private final ISysUserService sysUserService; |
| | | @Value("${fdb.quarter}") |
| | | private String quarter; |
| | | |
| | | @Async |
| | | @Override |
| | |
| | | BasicDataFieldEnum.BASIC_DATA_FIELD17); |
| | | res1 = validateDivisorValue(deptDivisorValue); |
| | | if (!res1) { |
| | | score = getScore(deptDividendValue, deptDivisorValue, month, |
| | | score = getScore5(deptDividendValue, deptDivisorValue, month, |
| | | BigDecimal.valueOf(12D), |
| | | vo); |
| | | } else { |
| | |
| | | res2 = validateDivisorValue(provinceDivisorValue); |
| | | score = 0D; |
| | | if (!res1 && !res2) { |
| | | score = getScore(deptDividendValue, deptDivisorValue, |
| | | score = getScore5(deptDividendValue, deptDivisorValue, |
| | | provinceDividendValue, provinceDivisorValue, vo); |
| | | } |
| | | break; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 通用计算公式获取得分 |
| | | * 通用计算公式获取得分(每低1个百分点扣1分) |
| | | * |
| | | * @param deptDividendValue 部门被除数 |
| | | * @param deptDivisorValue 部门除数 |
| | |
| | | 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; |
| | |
| | | @Override |
| | | public void subtractScoreWithFixedRules(String deptAreaCode) throws Exception { |
| | | String previousQuarter = DateUtils.getPreviousQuarter(); |
| | | // previousQuarter = "2024年二季度"; |
| | | previousQuarter = quarter; |
| | | TbBasicData tbBasicData = tbBasicDataMapper.selectOne( |
| | | Wrappers.lambdaQuery(TbBasicData.class).eq(TbBasicData::getQuarter, previousQuarter) |
| | | .eq(TbBasicData::getDeptAreaCode, deptAreaCode)); |