| | |
| | | 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; |
| | |
| | | } |
| | | |
| | | public RiskAndTransferVO getRiskAndTransfer() throws Exception { |
| | | String nowQuarter = DateUtils.getNowQuarter(); |
| | | String previousQuarter = DateUtils.getPreviousQuarter(); |
| | | previousQuarter = "2024年一季度"; |
| | | RiskAndTransferVO riskAndTransferVO = new RiskAndTransferVO(); |
| | | // 查询转移支付规模总额 |
| | | 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() |
| | |
| | | List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel); |
| | | riskAndTransferVO.setRiskLevelVOList(riskLevelVOList); |
| | | RiskCountVO riskCountVO = new RiskCountVO(); |
| | | List<RiskMapVO> riskMapVOList = tbScoreService.getCurrentScoreList(nowQuarter, null); |
| | | 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.setHighRiskCount((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() |
| | |
| | | } else if (vo.getRiskLevel().equals(RiskLevelEnum.L4)) { |
| | | riskCountVO.setHighRiskCount((int) count); |
| | | } |
| | | } |
| | | }*/ |
| | | // TODO |
| | | // riskCountVO.setNoRiskCount(50); |
| | | // riskCountVO.setLowRiskCount(45); |
| | |
| | | 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++); |
| | |
| | | } |
| | | |
| | | 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); |
| | | } |
| | | |
| | |
| | | } |
| | | 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); |
| | |
| | | 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) |
| | |
| | | } |
| | | // 查询四个指标下的三级指标 |
| | | 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, previousQuarter, 2, 2); |
| | | // 查询四个指标下的三级指标 |
| | | List<FieldAndScoreDataVO> allDeptVoList = |
| | | tbBasicDataService.getFieldAndScoreData(null, nowQuarter, 1); |
| | | tbBasicDataService.getFieldAndScoreData(areaCode, previousQuarter, 1, 1); |
| | | // 查询形式指标得分 |
| | | dataAnalysisVO.setScoreDataList(handleDataIndicators(voList, lastYearList)); |
| | | // 查询数据指标得分 |
| | |
| | | "预算执行方面", "风险防控方面"); |
| | | 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) { |
| | |
| | | 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, |
| | |
| | | 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; |
| | |
| | | }).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) { |
| | |
| | | |
| | | 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 { |
| | |
| | | |
| | | 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) { |