From 6af08bad1986a72fa196afeb04c389c005fab673 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期五, 30 八月 2024 11:52:08 +0800 Subject: [PATCH] bug修改 --- finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java | 224 ++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 139 insertions(+), 85 deletions(-) diff --git a/finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java b/finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java index acf53a9..19e252a 100644 --- a/finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java +++ b/finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java @@ -52,7 +52,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; -import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Objects; @@ -116,12 +116,16 @@ } public RiskAndTransferVO getRiskAndTransfer() throws Exception { - String nowQuarter = DateUtils.getNowQuarter(); 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) - .eq(TbBasicData::getQuarter, nowQuarter) + .eq(TbBasicData::getQuarter, previousQuarter) // .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED) .list(); Optional<Double> reduce = list.stream() @@ -133,9 +137,35 @@ List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel); riskAndTransferVO.setRiskLevelVOList(riskLevelVOList); RiskCountVO riskCountVO = new RiskCountVO(); - List<RiskMapVO> riskMapVOList = tbScoreService.getCurrentScoreList(nowQuarter, 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("_"); + String[] highRiskArr = riskLevel.getHighRisk().split("_"); + List<RiskMapVO> cityRiskVO = riskMapVOList.stream() + .filter(r -> r.getAreaLevel().equals(AreaLevelEnum.CITY)) + .collect(Collectors.toList()); + long noRiskCount = cityRiskVO.stream() + .filter(item -> item.getScore() >= Double.parseDouble(noRiskArr[0]) + && item.getScore() <= Double.parseDouble(noRiskArr[1])).count(); + riskCountVO.setNoRiskCount((int) noRiskCount); + long lowRiskCount = cityRiskVO.stream() + .filter(item -> item.getScore() >= Double.parseDouble(lowRiskArr[0]) + && item.getScore() <= Double.parseDouble(lowRiskArr[1])).count(); + riskCountVO.setLowRiskCount((int) lowRiskCount); + long mediumRiskCount = cityRiskVO.stream() + .filter(item -> item.getScore() >= Double.parseDouble(mediumRiskArr[0]) + && item.getScore() <= Double.parseDouble(mediumRiskArr[1])).count(); + riskCountVO.setMediumRiskCount((int) mediumRiskCount); + long highRiskCount = cityRiskVO.stream() + .filter(item -> item.getScore() >= Double.parseDouble(highRiskArr[0]) + && item.getScore() <= Double.parseDouble(highRiskArr[1])).count(); + riskCountVO.setHighRiskCount((int) highRiskCount); - for (RiskLevelVO vo : riskLevelVOList) { + /*for (RiskLevelVO vo : riskLevelVOList) { long count = riskMapVOList.stream() .filter(r -> r.getAreaLevel().equals(AreaLevelEnum.CITY)) .filter(item -> item.getScore() >= vo.getMin() @@ -150,7 +180,7 @@ } else if (vo.getRiskLevel().equals(RiskLevelEnum.L4)) { riskCountVO.setHighRiskCount((int) count); } - } + }*/ // TODO // riskCountVO.setNoRiskCount(50); // riskCountVO.setLowRiskCount(45); @@ -160,15 +190,16 @@ // 查询风险配置对应得分 // List<RiskMapVO> riskMapVOList = tbDataScreenScoreService.queryScore4Map(nowQuarter, // riskLevel.getId()); + riskAndTransferVO.setRiskMapVOList(riskMapVOList); return riskAndTransferVO; } private List<RiskLevelVO> formatRiskLevel(DataScreenConfigVO riskLevel) { - String[] noRiskArr = riskLevel.getNoRisk().split("-"); - String[] lowRiskArr = riskLevel.getLowRisk().split("-"); - String[] mediumRiskArr = riskLevel.getMediumRisk().split("-"); - String[] highRiskArr = riskLevel.getHighRisk().split("-"); + String[] noRiskArr = riskLevel.getNoRisk().split("_"); + String[] lowRiskArr = riskLevel.getLowRisk().split("_"); + String[] mediumRiskArr = riskLevel.getMediumRisk().split("_"); + String[] highRiskArr = riskLevel.getHighRisk().split("_"); return handleRiskLevel(noRiskArr, lowRiskArr, mediumRiskArr, highRiskArr); } @@ -210,31 +241,36 @@ public List<RiskRankingVO> riskRanking() throws Exception { DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel(); List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel); - List<RiskRankingVO> voList = tbScoreService.queryRiskRanking(DateUtils.getNowQuarter()); + List<RiskRankingVO> voList = tbScoreService.queryRiskRanking( + 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; } public List<QuestionVO> queryQuestions() throws Exception { + String previousQuarter = DateUtils.getPreviousQuarter(); + // previousQuarter = "2024年一季度"; List<TbQuestion> list = tbQuestionService.lambdaQuery() - .eq(TbQuestion::getQuarter, DateUtils.getNowQuarter()).list(); + .eq(TbQuestion::getQuarter, previousQuarter).list(); return BeanUtils.copyList(list, QuestionVO.class); } @@ -247,10 +283,12 @@ } dataAnalysisVO.setRank(scoreRankVO.getRank()); dataAnalysisVO.setScore(scoreRankVO.getScore()); - String nowQuarter = DateUtils.getNowQuarter(); + String previousQuarter = DateUtils.getPreviousQuarter(); + // previousQuarter = "2024年一季度"; // 查询问题 List<TbQuestion> list = tbQuestionService.lambdaQuery() - .eq(TbQuestion::getQuarter, nowQuarter).eq(TbQuestion::getDeptAreaCode, areaCode) + .eq(TbQuestion::getQuarter, previousQuarter) + .eq(TbQuestion::getDeptAreaCode, areaCode) .list(); List<QuestionVO> questionVOS = BeanUtils.copyList(list, QuestionVO.class); dataAnalysisVO.setQuestions(questionVOS); @@ -265,35 +303,29 @@ DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel(); List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel); - dataAnalysisVO.setYearScore(getYearScore(areaCode, 1)); - - dataAnalysisVO.setLastYearScore(getYearScore(areaCode, 2)); + dataAnalysisVO.setYearScore(getYearScore(areaCode, previousQuarter)); + String lastYearQuarter = DateUtils.getLastYearQuarter(previousQuarter); + dataAnalysisVO.setLastYearScore(getYearScore(areaCode, lastYearQuarter)); // 查询风险等级 - List<RiskMapVO> currentScoreList = tbScoreService.getCurrentScoreList(nowQuarter, areaCode); + 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()); } } } // 查询四个指标下的三级指标 List<FieldAndScoreDataVO> voList = - tbBasicDataService.getFieldAndScoreData(areaCode, nowQuarter, 1); + tbBasicDataService.getFieldAndScoreData(areaCode, previousQuarter, 1, 2); List<FieldAndScoreDataVO> lastYearList = - tbBasicDataService.getFieldAndScoreData(areaCode, nowQuarter, 2); + tbBasicDataService.getFieldAndScoreData(areaCode, lastYearQuarter, 2, 2); // 查询四个指标下的三级指标 List<FieldAndScoreDataVO> allDeptVoList = - tbBasicDataService.getFieldAndScoreData(null, nowQuarter, 1); + tbBasicDataService.getFieldAndScoreData(areaCode, previousQuarter, 1, 1); // 查询形式指标得分 dataAnalysisVO.setScoreDataList(handleDataIndicators(voList, lastYearList)); // 查询数据指标得分 @@ -328,39 +360,33 @@ "预算执行方面", "风险防控方面"); for (int i = 0; i < indicatorList.size(); i++) { ScoreRateDataVO scoreRateDataVO = new ScoreRateDataVO(); - Double indicatorOne = getLevelThreeIndicators(voList, indicatorList.get(i)).stream() - .map(FieldAndScoreDataVO::getScore).reduce(Double::sum).orElse(0D); - - List<Double> allIndicatorsScore = getAllIndicatorsScoreByName(allDeptVoList, - indicatorList.get(i)); - scoreRateDataVO.setRank(findPositionInList(allIndicatorsScore, indicatorOne)); - scoreRateDataVO.setScore(indicatorOne); - scoreRateDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1)); - scoreRateDataVO.setScoreRate(BigDecimal.valueOf(indicatorOne) - .divide(BigDecimal.valueOf(voList.get(i).getLevelOneIndicatorMaxScore()), 2, - RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100L)).doubleValue()); + if (CollUtils.isEmpty(voList)) { + scoreRateDataVO.setRank(0); + scoreRateDataVO.setScore(0D); + scoreRateDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1)); + scoreRateDataVO.setScoreRate(0D); + } else { + Double indicatorOne = getLevelThreeIndicators(voList, indicatorList.get(i)).stream() + .map(FieldAndScoreDataVO::getScore).reduce(Double::sum) + .map(BigDecimal::valueOf) + .orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP) + .doubleValue(); + List<Double> allIndicatorsScore = getAllIndicatorsScoreByName(allDeptVoList, + indicatorList.get(i)); + allIndicatorsScore.add(indicatorOne); + allIndicatorsScore.sort(Comparator.comparing(Double::doubleValue).reversed()); + scoreRateDataVO.setRank(allIndicatorsScore.indexOf(indicatorOne) + 1); + scoreRateDataVO.setScore(indicatorOne); + scoreRateDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1)); + scoreRateDataVO.setScoreRate(BigDecimal.valueOf(indicatorOne) + .divide(BigDecimal.valueOf(voList.get(i).getLevelOneIndicatorMaxScore()), 2, + RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100L)) + .doubleValue()); + } result.add(scoreRateDataVO); } - return result; } - - public static int findPositionInList(List<Double> list, Double value) { - // Sorting the list to use binary search - Collections.sort(list); - - // Finding the index using binary search - int index = Collections.binarySearch(list, value); - - if (index < 0) { - // If the value is not found, binarySearch returns (-(insertion point) - 1) - // Convert to the insertion point by doing (-index - 1) - index = -index - 1; - } - - return index + 1; - } - private List<Double> getAllIndicatorsScoreByName(List<FieldAndScoreDataVO> allDeptVoList, String indicatorName) { @@ -370,7 +396,7 @@ Double score = getLevelThreeIndicators(collect.get(key), indicatorName).stream() .map(FieldAndScoreDataVO::getScore).reduce(Double::sum).orElse(0D); return score; - }).collect(Collectors.toList()); + }).sorted(Comparator.comparing(Double::intValue).reversed()).collect(Collectors.toList()); } private List<ScoreDataVO> handleDataIndicators(List<FieldAndScoreDataVO> voList, @@ -379,16 +405,29 @@ List<String> indicatorList = Lists.newArrayList("财政经济形势", "预算管理方面", "预算执行方面", "风险防控方面"); for (int i = 0; i < indicatorList.size(); i++) { - Double indicatorOne = getLevelThreeIndicators(voList, indicatorList.get(i)).stream() - .map(FieldAndScoreDataVO::getScore).reduce(Double::sum).orElse(0D); - Double indicatorOneLastYear = getLevelThreeIndicators(lastYearList, - indicatorList.get(i)).stream() - .map(FieldAndScoreDataVO::getScore).reduce(Double::sum).orElse(0D); ScoreDataVO scoreDataVO = new ScoreDataVO(); - scoreDataVO.setLastScore(indicatorOneLastYear); - scoreDataVO.setScore(indicatorOne); - scoreDataVO.setMaxScore(voList.get(0).getLevelOneIndicatorMaxScore()); - scoreDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1)); + if (CollUtils.isEmpty(voList)) { + scoreDataVO.setLastScore(0D); + scoreDataVO.setScore(0D); + scoreDataVO.setMaxScore(0D); + scoreDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1)); + } else { + Double indicatorOne = getLevelThreeIndicators(voList, + indicatorList.get(i)).stream() + .map(FieldAndScoreDataVO::getScore).reduce(Double::sum) + .map(BigDecimal::valueOf) + .orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP) + .doubleValue(); + Double indicatorOneLastYear = getLevelThreeIndicators(lastYearList, + indicatorList.get(i)).stream() + .map(FieldAndScoreDataVO::getScore).reduce(Double::sum) + .map(BigDecimal::valueOf) + .orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP).doubleValue(); + scoreDataVO.setLastScore(indicatorOneLastYear); + scoreDataVO.setScore(indicatorOne); + scoreDataVO.setMaxScore(voList.get(0).getLevelOneIndicatorMaxScore()); + scoreDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1)); + } scoreDataVOList.add(scoreDataVO); } return scoreDataVOList; @@ -411,10 +450,12 @@ }).filter(Objects::nonNull).collect(Collectors.toList()); } - private Double getYearScore(String areaCode, Integer yearType) { - List<RiskMapVO> thisYearScoreList = tbScoreService.getScoreByYearType(areaCode, yearType); + private Double getYearScore(String areaCode, String previousQuarter) { + List<RiskMapVO> thisYearScoreList = tbScoreService.getScoreByYearType(areaCode, + previousQuarter); return thisYearScoreList.stream().map(RiskMapVO::getScore) - .reduce(Double::sum).orElse(0D); + .reduce(Double::sum).map(BigDecimal::valueOf).orElse(BigDecimal.ZERO) + .setScale(2, RoundingMode.HALF_UP).doubleValue(); } private void handleDataIndicators(String areaCode, List<ScoreDataVO> scoreDataVOList) { @@ -507,14 +548,17 @@ public List<DeptCalculateDetailVO> deptCalculateDetail(DeptCalculateDetailQuery query) throws Exception { - return tbScoreService.deptCalculateDetail(query, DateUtils.getNowQuarter()); + String previousQuarter = DateUtils.getPreviousQuarter(); + // previousQuarter = "2024年一季度"; + return tbScoreService.deptCalculateDetail(query, previousQuarter); } public CurrentFieldsDetailVO viewRawData(String areaCode) throws Exception { + String previousQuarter = DateUtils.getPreviousQuarter(); + // previousQuarter = "2024年一季度"; Optional<TbBasicData> basicDataOptional = tbBasicDataService.lambdaQuery() .eq(TbBasicData::getDeptAreaCode, areaCode) - .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED) - .eq(TbBasicData::getQuarter, DateUtils.getNowQuarter()).oneOpt(); + .eq(TbBasicData::getQuarter, previousQuarter).oneOpt(); if (basicDataOptional.isPresent()) { return tbBasicDataService.fieldsDetails(basicDataOptional.get().getId()).getData(); } else { @@ -524,17 +568,27 @@ public ScoreCalculateDetailVO fieldsDetail(CalculateDetailQuery query) { List<SysUser> countyList = getCountyList(query.getCityAreaCode()); - return tbScoreService.fieldsDetail(query, countyList); + try { + return tbScoreService.fieldsDetail(query, countyList); + } catch (Exception e) { + throw new RuntimeException(e); + } } 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::getAreaCode, areaCode) - .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; } } -- Gitblit v1.7.1