| | |
| | | @Validated @RequestBody CurrentFieldsQuery dto) { |
| | | try { |
| | | String previousQuarter = DateUtils.getPreviousQuarter(); |
| | | previousQuarter = "2024年一季度"; |
| | | // previousQuarter = "2024年一季度"; |
| | | dto.setQuarter(previousQuarter); |
| | | return tbBasicDataService.fieldsStatics(dto); |
| | | } catch (Exception e) { |
| | |
| | | @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) { |
| | |
| | | } |
| | | |
| | | 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) |
| | |
| | | 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("_"); |
| | |
| | | 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(); |
| | |
| | | // 查询风险配置对应得分 |
| | | // List<RiskMapVO> riskMapVOList = tbDataScreenScoreService.queryScore4Map(nowQuarter, |
| | | // riskLevel.getId()); |
| | | |
| | | riskAndTransferVO.setRiskMapVOList(riskMapVOList); |
| | | return riskAndTransferVO; |
| | | } |
| | |
| | | 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; |
| | |
| | | |
| | | 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); |
| | |
| | | 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) |
| | |
| | | // 查询风险等级 |
| | | 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()); |
| | | } |
| | | } |
| | |
| | | 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(); |
| | |
| | | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | |
| | | 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); |
| | | } |
| | |
| | | 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; |
| | |
| | | List<RiskRankingVO> queryRiskRanking(String nowQuarter); |
| | | |
| | | List<RiskMapVO> getScoreByYearType(String areaCode, String quarter); |
| | | |
| | | List<RiskMapVO> getCityScore(String previousQuarter, DataScreenConfigVO riskLevel); |
| | | } |
| | |
| | | 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; |
| | |
| | | } else { |
| | | score = 0D; |
| | | } |
| | | |
| | | break; |
| | | case INDICATOR_ITEM2: |
| | | // 2:财政经济形势-收入执行率-地方一般公共预算收入执行进度(地方一般公共预算收入/年初预算或调整预算); |
| | |
| | | score = getScore(deptDividendValue, deptDivisorValue, |
| | | provinceDividendValue, provinceDivisorValue, vo); |
| | | } |
| | | |
| | | break; |
| | | case INDICATOR_ITEM5: |
| | | // 5: 财政经济形势-重大财税政策落实情况-减税降费落实情况 |
| | |
| | | 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:预算管理方面-“三保”保障情况-“三保”支出保障情况 |
| | |
| | | // 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: |
| | |
| | | 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(); |
| | | } |
| | |
| | | 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(); |
| | |
| | | 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: |
| | |
| | | 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(); |
| | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | private static List<TbQuestion> getQuestList(List<TbQuestion> list, String deptAreaCode, |
| | | QuestionTypeEnum type) { |
| | | return list.stream() |
| | |
| | | } |
| | | |
| | | return BigDecimal.valueOf( |
| | | Double.parseDouble(tbBasicDataField.getFieldValue().replace(",", ""))); |
| | | Double.parseDouble( |
| | | tbBasicDataField.getFieldValue().replace(",", "").replace("%", ""))); |
| | | } |
| | | |
| | | /** |
| | |
| | | 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()); |
| | |
| | | |
| | | 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(); |
| | |
| | | if (tbBasicDataField != null) { |
| | | field.setValue( |
| | | tbBasicDataField.getFieldValue()); |
| | | } else { |
| | | field.setValue(""); |
| | | } |
| | | if (field.getChildren() != null && !field.getChildren().isEmpty()) { |
| | | setFieldValues(field.getChildren(), fieldMap); |
| | |
| | | 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); |
| | |
| | | return; |
| | | } |
| | | String previousQuarter = DateUtils.getPreviousQuarter(); |
| | | previousQuarter = "2024年一季度"; |
| | | // previousQuarter = "2024年一季度"; |
| | | // 查询需要填写的动态字段 |
| | | List<TbField> fieldList = |
| | | tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list(); |
| | |
| | | .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); |
| | |
| | | LoginUser loginUser = SecurityUtils.getLoginUser(); |
| | | String areaCode = loginUser.getUser().getAreaCode(); |
| | | String previousQuarter = DateUtils.getPreviousQuarter(); |
| | | previousQuarter = "2024年一季度"; |
| | | // previousQuarter = "2024年一季度"; |
| | | EasyExcel.read( |
| | | file.getInputStream(), |
| | | new BasicDataListener( |
| | |
| | | Date quarterStart = DateUtil.beginOfQuarter(date); |
| | | Date quarterEnd = DateUtil.endOfQuarter(date); |
| | | String previousQuarter = DateUtils.getPreviousQuarter(); |
| | | previousQuarter = "2024年一季度"; |
| | | // previousQuarter = "2024年一季度"; |
| | | // 查询是否有当前季度的填报记录 |
| | | TbBasicData basicData = |
| | | this.getOne( |
| | |
| | | roots.add(remark); |
| | | vo.setFields(roots); |
| | | String previousQuarter = DateUtils.getPreviousQuarter(); |
| | | previousQuarter = "2024年一季度"; |
| | | // previousQuarter = "2024年一季度"; |
| | | // 查询上报的基础数据 |
| | | List<TbBasicData> basicDataList = |
| | | this.lambdaQuery() |
| | |
| | | if (quarterLocalDate.isAfter(dateLocalDate) || quarterLocalDate.equals(dateLocalDate)) { |
| | | throw new ServiceException("请导入过去季度的数据。"); |
| | | } |
| | | |
| | | long start = System.currentTimeMillis(); |
| | | EasyExcel.read( |
| | | file.getInputStream(), |
| | | new HistoryDataListener( |
| | |
| | | .sheet() |
| | | .headRowNumber(0) |
| | | .doRead(); |
| | | log.info("历史数据导入完成,耗时{}毫秒", System.currentTimeMillis() - start); |
| | | } |
| | | |
| | | @Override |
| | |
| | | // 查询需要填写的动态字段 |
| | | 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) |
| | |
| | | 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()); |
| | | // 保存基础数据动态字段数据 |
| | |
| | | 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()); |
| | |
| | | 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; |
| | |
| | | .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(); |
| | | } |
| | |
| | | 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; |
| | | } |
| | | |
| | |
| | | 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()); |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | TbScoreService { |
| | | |
| | | private final TbBasicDataConfigService basicDataConfigService; |
| | | private final ISysUserService sysUserService; |
| | | |
| | | @Override |
| | | public Page<ScoreVO> pageScore(ScoreQuery query, Page<ScoreVO> page) { |
| | |
| | | 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()); |
| | |
| | | @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)) { |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | private Long id; |
| | | |
| | | @ApiModelProperty(value = "数据详情") |
| | | @JsonInclude(JsonInclude.Include.ALWAYS) |
| | | private String value; |
| | | |
| | | @ApiModelProperty(value = "名称") |
| | |
| | | private List<RiskMapVO> riskMapVOList; |
| | | @ApiModelProperty("风险等级区间") |
| | | private List<RiskLevelVO> riskLevelVOList; |
| | | @ApiModelProperty("得分") |
| | | private Double score; |
| | | @ApiModelProperty("省本级得分排名") |
| | | private ScoreRankVO scoreRankVO; |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | package com.finance.system.vo; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | |
| | | /** |
| | | * 区划代码 |
| | | */ |
| | | @ApiModelProperty("区划代码") |
| | | private String areaCode; |
| | | /** |
| | | * 得分 |
| | | */ |
| | | @ApiModelProperty("得分") |
| | | private Double score; |
| | | |
| | | @ApiModelProperty("排名") |
| | | private Integer rank; |
| | | } |
| | |
| | | <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, |
| | |
| | | <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> |
| | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | 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> |