mitao
2024-08-30 6af08bad1986a72fa196afeb04c389c005fab673
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: 财政经济形势-重大财税政策落实情况-减税降费落实情况
@@ -319,11 +318,11 @@
                    provinceDividendValue = getProvinceBigDecimal(provinceFieldsMap,
                            BasicDataFieldEnum.BASIC_DATA_FIELD7);
                    provinceDivisorValue = getProvinceBigDecimal(provinceFieldsMap,
                            BasicDataFieldEnum.BASIC_DATA_FIELD7);
                            BasicDataFieldEnum.BASIC_DATA_FIELD13);
                    res1 = validateDivisorValue(deptDivisorValue);
                    res2 = validateDivisorValue(provinceDivisorValue);
                    score = 0D;
                    if (!res1 && res2) {
                    if (!res1 && !res2) {
                        score = getScore2(deptDividendValue, deptDivisorValue,
                                provinceDividendValue, provinceDivisorValue, vo);
                    }
@@ -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,27 +387,34 @@
                    // 13:预算执行方面-库款管理-库款保障水平
                    BigDecimal currentData = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                            BasicDataFieldEnum.BASIC_DATA_FIELD35);
                    BigDecimal part1;
                    BigDecimal part2;
                    if (currentData.compareTo(BigDecimal.valueOf(0.8D)) < 0) {
                        BigDecimal add = currentData.subtract(BigDecimal.valueOf(0.8D))
                                .divide(BigDecimal.valueOf(0.1D), 2, RoundingMode.HALF_UP)
                                .multiply(BigDecimal.valueOf(0.6D))
                                .add(BigDecimal.valueOf(4D));
                        part1 = add.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : add;
                    } else {
                        part1 = BigDecimal.valueOf(4D);
                    }
                    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);
                    part2 = first.compareTo(BigDecimal.valueOf(0.3D)) < 0
                            || second.compareTo(BigDecimal.valueOf(0.3D)) < 0 || third.compareTo(
                            BigDecimal.valueOf(0.3D)) < 0 ? BigDecimal.ZERO
                            : BigDecimal.valueOf(2D);
                    BigDecimal part1;
                    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)
                                .multiply(BigDecimal.valueOf(0.6D))
                                .add(BigDecimal.valueOf(3D))
                                .setScale(2, RoundingMode.HALF_UP);
                        part1 = add.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : add;
                    } else {
                        part1 = 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:
@@ -417,6 +423,21 @@
                            BasicDataFieldEnum.BASIC_DATA_FIELD15);
                    deptDivisorValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap,
                            BasicDataFieldEnum.BASIC_DATA_FIELD14);
                    String substring = tbBasicData.getQuarter().substring(4);
                    if (substring.equals("四季度")) {
                        // 使用全年评价
                        BigDecimal divide = deptDividendValue.divide(deptDivisorValue, 2,
                                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)
                                    .add(BigDecimal.valueOf(vo.getMaxScore()))
                                    .setScale(2, RoundingMode.HALF_UP).doubleValue();
                        } else {
                            score = vo.getMaxScore();
                        }
                    }
                    score = getScoreByMonth(deptDividendValue, deptDivisorValue, month, vo);
                    break;
                case INDICATOR_ITEM15:
@@ -434,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();
@@ -464,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:
@@ -488,8 +508,11 @@
                        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();
                    }
                    break;
                case INDICATOR_ITEM21:
@@ -554,6 +577,7 @@
        return false;
    }
    private static List<TbQuestion> getQuestList(List<TbQuestion> list, String deptAreaCode,
            QuestionTypeEnum type) {
        return list.stream()
@@ -583,7 +607,8 @@
        }
        return BigDecimal.valueOf(
                Double.parseDouble(tbBasicDataField.getFieldValue().replace(",", "")));
                Double.parseDouble(
                        tbBasicDataField.getFieldValue().replace(",", "").replace("%", "")));
    }
    /**
@@ -615,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());
@@ -643,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();