From 4b5624af301dfbdcf54b65dc55aadde1b6a8efd5 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期三, 24 七月 2024 19:55:24 +0800 Subject: [PATCH] bug修改,查询季度写死“2024年一季度” --- finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java | 199 ++++++++++++++++++++++++++++++++----------------- 1 files changed, 130 insertions(+), 69 deletions(-) diff --git a/finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java index 0ec80e2..811f8ab 100644 --- a/finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java +++ b/finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java @@ -5,11 +5,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.finance.common.core.domain.entity.SysUser; import com.finance.common.enums.BasicDataFieldEnum; import com.finance.common.enums.CalculateTypeEnum; import com.finance.common.enums.IndicatorItemEnum; import com.finance.common.enums.QuestionTypeEnum; import com.finance.common.enums.ShowStatusEnum; +import com.finance.common.enums.UserTypeEnum; import com.finance.common.enums.ValueTypeEnum; import com.finance.common.exception.ServiceException; import com.finance.common.utils.CalculateUtil; @@ -27,6 +29,7 @@ import com.finance.system.mapper.TbBasicDataMapper; import com.finance.system.mapper.TbQuestionMapper; import com.finance.system.service.AsyncService; +import com.finance.system.service.ISysUserService; import com.finance.system.service.TbBasicDataCategoryService; import com.finance.system.service.TbBasicDataConfigDetailService; import com.finance.system.service.TbBasicDataConfigService; @@ -63,6 +66,7 @@ private final TbBasicDataConfigDetailService tbBasicDataConfigDetailService; private final TbBasicDataMapper tbBasicDataMapper; private final TbQuestionMapper tbQuestionMapper; + private final ISysUserService sysUserService; @Async @Override @@ -179,11 +183,18 @@ @Override public void calculateScoreWithFixedRules(TbBasicData tbBasicData, List<TbBasicDataField> fields, List<TbField> fieldList) { + if (tbBasicData.getDeptAreaCode().equals("000000")) { + return; + } + SysUser sysUser = sysUserService.lambdaQuery() + .eq(SysUser::getAreaCode, tbBasicData.getDeptAreaCode()) + .eq(SysUser::getUserType, + UserTypeEnum.DEPARTMENT).oneOpt().get(); List<BasicDataConfigVO> fixedRulesConfigList = tbBasicDataConfigService.getFixedRulesConfigList(); // 查询四川省的基础数据 TbBasicData provinceBasicData = tbBasicDataMapper.selectOne( Wrappers.lambdaQuery(TbBasicData.class) - .eq(TbBasicData::getDeptAreaCode, "510000") + .eq(TbBasicData::getDeptAreaCode, "000000") .eq(TbBasicData::getQuarter, tbBasicData.getQuarter())); if (Objects.isNull(provinceBasicData)) { throw new ServiceException("四川省未上传该季度基础数据,请联系管理员"); @@ -213,11 +224,13 @@ Date quarterDate = DateUtils.getQuarterDateEnd(tbBasicData.getQuarter()); BigDecimal month = BigDecimal.valueOf( Double.parseDouble(DateUtil.format(quarterDate, "MM"))); + boolean res1 = false; + boolean res2 = false; switch (Objects.requireNonNull(IndicatorItemEnum.getEnumByCode(vo.getId()))) { case INDICATOR_ITEM1: // 1:财政经济形势-收入占GDP比重-地方一般公共预算收入占GDP的比重; // 获取所需字段 - deptDividendValue = getBigDecimal(deptFieldsMap, + deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD2); deptDivisorValue = BigDecimal.valueOf( Double.parseDouble(tbBasicData.getCurrentGdp())); @@ -225,43 +238,65 @@ BasicDataFieldEnum.BASIC_DATA_FIELD2); provinceDivisorValue = BigDecimal.valueOf( Double.parseDouble(provinceBasicData.getCurrentGdp())); - score = getScore(deptDividendValue, deptDivisorValue, - provinceDividendValue, provinceDivisorValue, vo); + res1 = validateDivisorValue(deptDivisorValue); + res2 = validateDivisorValue(provinceDivisorValue); + if (!res1 && !res2) { + score = getScore(deptDividendValue, deptDivisorValue, + provinceDividendValue, provinceDivisorValue, vo); + } else { + score = 0D; + } + break; case INDICATOR_ITEM2: // 2:财政经济形势-收入执行率-地方一般公共预算收入执行进度(地方一般公共预算收入/年初预算或调整预算); - deptDividendValue = getBigDecimal(deptFieldsMap, + deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD2); - deptDivisorValue = getBigDecimal(deptFieldsMap, + deptDivisorValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD1); - - score = getScore(deptDividendValue, deptDivisorValue, month, - BigDecimal.valueOf(12D), - vo); + res1 = validateDivisorValue(deptDivisorValue); + if (!res1) { + score = getScore(deptDividendValue, deptDivisorValue, month, + BigDecimal.valueOf(12D), + vo); + } else { + score = 0D; + } break; case INDICATOR_ITEM3: // 3:财政经济形势-收入执行率-政府性基金预算收入执行进度(政府性基金预算收入/年初预算或调整预算) - deptDividendValue = getBigDecimal(deptFieldsMap, + deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD18); - deptDivisorValue = getBigDecimal(deptFieldsMap, + deptDivisorValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD17); - score = getScore(deptDividendValue, deptDivisorValue, month, - BigDecimal.valueOf(12D), - vo); + res1 = validateDivisorValue(deptDivisorValue); + if (!res1) { + score = getScore(deptDividendValue, deptDivisorValue, month, + BigDecimal.valueOf(12D), + vo); + } else { + score = 0D; + } break; case INDICATOR_ITEM4: // 4:财政经济形势-收入质量-税收收入占地方一般公共预算收入比重 // 获取所需字段 - deptDividendValue = getBigDecimal(deptFieldsMap, + deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD3); - deptDivisorValue = getBigDecimal(deptFieldsMap, + deptDivisorValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD2); provinceDividendValue = getProvinceBigDecimal(provinceFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD3); provinceDivisorValue = getProvinceBigDecimal(provinceFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD2); - score = getScore(deptDividendValue, deptDivisorValue, - provinceDividendValue, provinceDivisorValue, vo); + res1 = validateDivisorValue(deptDivisorValue); + res2 = validateDivisorValue(provinceDivisorValue); + score = 0D; + if (!res1 && !res2) { + score = getScore(deptDividendValue, deptDivisorValue, + provinceDividendValue, provinceDivisorValue, vo); + } + break; case INDICATOR_ITEM5: // 5: 财政经济形势-重大财税政策落实情况-减税降费落实情况 @@ -277,50 +312,60 @@ break; case INDICATOR_ITEM7: // 7:预算管理方面-转移支付-中央转移支付占地方可用财力比重 - deptDividendValue = getBigDecimal(deptFieldsMap, + deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD7); - deptDivisorValue = getBigDecimal(deptFieldsMap, + deptDivisorValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD13); provinceDividendValue = getProvinceBigDecimal(provinceFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD7); provinceDivisorValue = getProvinceBigDecimal(provinceFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD7); - score = getScore2(deptDividendValue, deptDivisorValue, - provinceDividendValue, provinceDivisorValue, vo); + res1 = validateDivisorValue(deptDivisorValue); + res2 = validateDivisorValue(provinceDivisorValue); + score = 0D; + if (!res1 && res2) { + score = getScore2(deptDividendValue, deptDivisorValue, + provinceDividendValue, provinceDivisorValue, vo); + } break; case INDICATOR_ITEM8: // 8:预算管理方面-“三保”保障情况-“三保”年初预算保障情况 - BigDecimal aw = getBigDecimal(deptFieldsMap, + BigDecimal aw = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD47); - BigDecimal ap = getBigDecimal(deptFieldsMap, + BigDecimal ap = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD40); - BigDecimal az = getBigDecimal(deptFieldsMap, + BigDecimal az = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD50); - BigDecimal aq = getBigDecimal(deptFieldsMap, + BigDecimal aq = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD41); - BigDecimal bc = getBigDecimal(deptFieldsMap, + BigDecimal bc = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD53); - BigDecimal ar = getBigDecimal(deptFieldsMap, + BigDecimal ar = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD42); boolean res = aw.compareTo(ap) < 0 || (az.compareTo(aq) < 0 || (bc.compareTo(ar) < 0)); score = res ? 0 : vo.getMaxScore(); break; case INDICATOR_ITEM9: - BigDecimal au = getBigDecimal(deptFieldsMap, + BigDecimal au = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD45); - BigDecimal r = getBigDecimal(deptFieldsMap, + BigDecimal r = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD13); - BigDecimal divided = au.divide(r, 2, RoundingMode.HALF_UP); - if (divided.compareTo(BigDecimal.valueOf(0.6D)) > 0) { - BigDecimal add = BigDecimal.valueOf(0.6D).subtract(divided) - .multiply(BigDecimal.valueOf(100D)) - .divide(BigDecimal.valueOf(4D), 2, RoundingMode.HALF_UP) - .add(BigDecimal.valueOf(8)); - score = add.compareTo(BigDecimal.ZERO) >= 0 ? add.doubleValue() : 0D; - } else { - score = vo.getMaxScore(); + res1 = validateDivisorValue(r); + score = 0D; + if (!res1) { + BigDecimal divided = au.divide(r, 2, RoundingMode.HALF_UP); + if (divided.compareTo(BigDecimal.valueOf(0.6D)) > 0) { + BigDecimal add = BigDecimal.valueOf(0.6D).subtract(divided) + .multiply(BigDecimal.valueOf(100D)) + .divide(BigDecimal.valueOf(4D), 2, RoundingMode.HALF_UP) + .add(BigDecimal.valueOf(8)); + score = add.compareTo(BigDecimal.ZERO) >= 0 ? add.doubleValue() : 0D; + } else { + score = vo.getMaxScore(); + } } + break; case INDICATOR_ITEM10: // 10:预算管理方面-“三保”保障情况-“三保”支出保障情况 @@ -341,7 +386,7 @@ break; case INDICATOR_ITEM13: // 13:预算执行方面-库款管理-库款保障水平 - BigDecimal currentData = getBigDecimal(deptFieldsMap, + BigDecimal currentData = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD35); BigDecimal part1; BigDecimal part2; @@ -354,11 +399,11 @@ } else { part1 = BigDecimal.valueOf(4D); } - BigDecimal first = getBigDecimal(deptFieldsMap, + BigDecimal first = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD36); - BigDecimal second = getBigDecimal(deptFieldsMap, + BigDecimal second = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD37); - BigDecimal third = getBigDecimal(deptFieldsMap, + BigDecimal third = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD38); part2 = first.compareTo(BigDecimal.valueOf(0.3D)) < 0 || second.compareTo(BigDecimal.valueOf(0.3D)) < 0 || third.compareTo( @@ -368,23 +413,27 @@ break; case INDICATOR_ITEM14: // 14:预算执行方面-预算执行情况-一般公共预算支出执行率 - deptDividendValue = getBigDecimal(deptFieldsMap, + deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD15); - deptDivisorValue = getBigDecimal(deptFieldsMap, + deptDivisorValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD14); score = getScoreByMonth(deptDividendValue, deptDivisorValue, month, vo); break; case INDICATOR_ITEM15: // 15:预算执行方面-预算执行情况-政府性基金预算支出执行率 - deptDividendValue = getBigDecimal(deptFieldsMap, + deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD23); - deptDivisorValue = getBigDecimal(deptFieldsMap, + deptDivisorValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD22); - score = getScoreByMonth(deptDividendValue, deptDivisorValue, month, vo); + res1 = validateDivisorValue(deptDivisorValue); + score = 0D; + if (!res1) { + score = getScoreByMonth(deptDividendValue, deptDivisorValue, month, vo); + } break; case INDICATOR_ITEM16: // 16:预算执行方面-中央直达资金-中央直达资金支付进度 - deptDividendValue = getBigDecimal(deptFieldsMap, + deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD11); BigDecimal divided1 = month.divide(BigDecimal.valueOf(12D), 2, RoundingMode.HALF_UP); @@ -407,18 +456,18 @@ break; case INDICATOR_ITEM18: // 18:风险防控方面-暂付款管理-违规新增暂付款 - deptDividendValue = getBigDecimal(deptFieldsMap, + deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD57); score = deptDividendValue.compareTo(BigDecimal.ZERO) > 0 ? 0D : vo.getMaxScore(); break; case INDICATOR_ITEM19: // 19:风险防控方面-暂付款管理-暂付款累计余额 - BigDecimal bk = getBigDecimal(deptFieldsMap, + BigDecimal bk = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD61); - BigDecimal t = getBigDecimal(deptFieldsMap, + BigDecimal t = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD15); - BigDecimal ab = getBigDecimal(deptFieldsMap, + 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, @@ -427,17 +476,21 @@ break; case INDICATOR_ITEM20: // 20:风险防控方面-暂付款管理-暂付款消化 - deptDividendValue = getBigDecimal(deptFieldsMap, + deptDividendValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD59); - deptDivisorValue = getBigDecimal(deptFieldsMap, + deptDivisorValue = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD58); - BigDecimal d1 = deptDividendValue.divide(deptDivisorValue, 2, - RoundingMode.HALF_UP); - 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() - : vo.getMaxScore(); + res1 = validateDivisorValue(deptDivisorValue); + score = 0D; + if (!res1) { + BigDecimal d1 = deptDividendValue.divide(deptDivisorValue, 2, + RoundingMode.HALF_UP); + 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() + : vo.getMaxScore(); + } break; case INDICATOR_ITEM21: // 21:风险防控方面-债务管理-法定债务率 @@ -453,7 +506,7 @@ // 23:风险防控方面-债务管理-隐性债务化解 questionList = getQuestList(list, deptAreaCode, QuestionTypeEnum.ENUM6); - score = CollUtils.isNotEmpty(questionList) ? vo.getMaxScore() : -3D; + score = CollUtils.isEmpty(questionList) ? vo.getMaxScore() : -3D; break; case INDICATOR_ITEM24: // 24:风险防控方面-债务管理-日常监督发现问题 @@ -494,6 +547,13 @@ } } + private static boolean validateDivisorValue(BigDecimal deptDivisorValue) { + if (deptDivisorValue.compareTo(BigDecimal.ZERO) == 0) { + return true; + } + return false; + } + private static List<TbQuestion> getQuestList(List<TbQuestion> list, String deptAreaCode, QuestionTypeEnum type) { return list.stream() @@ -512,13 +572,14 @@ return BigDecimal.valueOf(Double.parseDouble(tbBasicDataField.getFieldValue())); } - private BigDecimal getBigDecimal(Map<Long, TbBasicDataField> deptFieldsMap, + private BigDecimal getBigDecimal(String areaName, Map<Long, TbBasicDataField> deptFieldsMap, BasicDataFieldEnum key) { TbBasicDataField tbBasicDataField = deptFieldsMap.get(key.getCode()); if (Objects.isNull(tbBasicDataField) || StringUtils.isBlank( tbBasicDataField.getFieldValue())) { throw new ServiceException( - String.format("字段【%s】的数据缺失,请修改后再试", key.getDesc())); + String.format(areaName + "-" + "字段【%s】的数据缺失,请修改后再试", + key.getDesc())); } return BigDecimal.valueOf( @@ -694,9 +755,9 @@ @Override public void subtractScoreWithFixedRules(String deptAreaCode) throws Exception { - String nowQuarter = DateUtils.getNowQuarter(); + String previousQuarter = DateUtils.getPreviousQuarter(); TbBasicData tbBasicData = tbBasicDataMapper.selectOne( - Wrappers.lambdaQuery(TbBasicData.class).eq(TbBasicData::getQuarter, nowQuarter) + Wrappers.lambdaQuery(TbBasicData.class).eq(TbBasicData::getQuarter, previousQuarter) .eq(TbBasicData::getDeptAreaCode, deptAreaCode)); if (Objects.isNull(tbBasicData)) { return; @@ -706,7 +767,7 @@ List<BasicDataConfigVO> fixedRulesConfigList = tbBasicDataConfigService.getSubsractRulesConfigList(); List<TbQuestion> list = tbQuestionMapper.selectList( Wrappers.lambdaQuery(TbQuestion.class) - .eq(TbQuestion::getQuarter, nowQuarter) + .eq(TbQuestion::getQuarter, previousQuarter) .eq(TbQuestion::getDeptAreaCode, deptAreaCode)); List<TbQuestion> questionList; -- Gitblit v1.7.1