mitao
2024-08-30 6af08bad1986a72fa196afeb04c389c005fab673
bug修改
15个文件已修改
349 ■■■■ 已修改文件
finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
finance-common/src/main/java/com/finance/common/enums/BasicDataFieldEnum.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
finance-system/src/main/java/com/finance/system/service/TbScoreService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java 87 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
finance-system/src/main/java/com/finance/system/service/impl/TbFieldServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
finance-system/src/main/java/com/finance/system/vo/FieldsTreeVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
finance-system/src/main/java/com/finance/system/vo/RiskAndTransferVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
finance-system/src/main/java/com/finance/system/vo/ScoreRankVO.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
finance-system/src/main/resources/mapper/system/TbScoreMapper.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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) {
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;
    }
}
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;
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);
}
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);
}
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();
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());
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;
    }
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());
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;
    }
}
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 = "名称")
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;
}
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;
}
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>
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>