From 3e456f3e812ead6a19e80cfbdbf86ae0263d50b9 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期五, 12 七月 2024 22:39:45 +0800 Subject: [PATCH] 完成7.4迭代内容,通过冒烟测试 --- finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java | 52 + finance-system/src/main/java/com/finance/system/dto/update/RiskLevelUpdDTO.java | 3 finance-system/src/main/java/com/finance/system/dto/QuestionDTO.java | 19 finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml | 28 finance-admin/src/main/java/com/finance/web/controller/api/TbDeptController.java | 8 finance-admin/src/main/resources/application-dev.yml | 2 finance-system/src/main/java/com/finance/system/vo/DataAnalysisVO.java | 10 finance-system/src/main/java/com/finance/system/service/impl/TbDataScreenConfigServiceImpl.java | 18 finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java | 595 +++++++++++++++--- finance-system/src/main/java/com/finance/system/dto/update/QuestionUpdDTO.java | 13 finance-system/src/main/resources/mapper/system/TbScoreMapper.xml | 49 + finance-system/src/main/java/com/finance/system/listener/BasicDataListener.java | 2 finance-system/src/main/java/com/finance/system/service/ISysUserService.java | 2 finance-system/src/main/java/com/finance/system/vo/FieldAndScoreDataVO.java | 12 finance-common/src/main/java/com/finance/common/enums/QuestionTypeEnum.java | 33 + finance-system/src/main/resources/mapper/system/TbDataScreenScoreMapper.xml | 2 finance-admin-dept/src/main/resources/application-dev.yml | 6 finance-admin/src/test/java/com/finance/FinanceManageApplicationTest.java | 44 + finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataConfigServiceImpl.java | 50 + finance-system/src/main/java/com/finance/system/service/impl/TbDeptServiceImpl.java | 14 finance-system/src/main/java/com/finance/system/service/TbBasicDataService.java | 5 finance-system/src/main/java/com/finance/system/service/TbScoreService.java | 8 finance-common/src/main/java/com/finance/common/core/domain/entity/SysUser.java | 7 finance-system/src/main/java/com/finance/system/service/impl/SysUserServiceImpl.java | 13 finance-system/src/main/java/com/finance/system/service/TbBasicDataConfigService.java | 2 finance-system/src/main/java/com/finance/system/service/AsyncService.java | 2 finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java | 26 finance-common/src/main/java/com/finance/common/enums/AreaLevelEnum.java | 9 finance-system/src/main/java/com/finance/system/vo/RiskMapVO.java | 6 finance-common/src/main/java/com/finance/common/enums/IndicatorItemEnum.java | 53 finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java | 41 + finance-system/src/main/java/com/finance/system/vo/QuestionVO.java | 13 finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java | 10 finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java | 300 ++++++++- finance-common/src/main/java/com/finance/common/utils/DateUtils.java | 46 + finance-system/src/main/java/com/finance/system/domain/TbBasicDataField.java | 12 finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java | 246 +++++-- finance-common/src/main/java/com/finance/common/enums/BasicDataFieldEnum.java | 21 finance-system/src/main/java/com/finance/system/mapper/TbBasicDataMapper.java | 3 finance-system/src/main/java/com/finance/system/vo/DeptVO.java | 8 finance-system/src/main/java/com/finance/system/domain/TbQuestion.java | 9 41 files changed, 1,443 insertions(+), 359 deletions(-) diff --git a/finance-admin-dept/src/main/resources/application-dev.yml b/finance-admin-dept/src/main/resources/application-dev.yml index 5c9b1c1..d658886 100644 --- a/finance-admin-dept/src/main/resources/application-dev.yml +++ b/finance-admin-dept/src/main/resources/application-dev.yml @@ -102,9 +102,9 @@ druid: # 主库数据源 master: - url: jdbc:mysql://1.95.13.179:3306/financialdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + url: jdbc:mysql://127.0.0.1:3306/financialdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root - password: Si8bnm5KPGSZkF3F + password: 123456 # url: jdbc:mysql://8.137.10.192:3306/sys_config?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8 # username: root # password: shms#123~ @@ -165,7 +165,7 @@ # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) - expireTime: 60 * 12 + expireTime: 720 # MyBatis配置 #mybatis: diff --git a/finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java b/finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java index 1c18d5e..9ecbf1c 100644 --- a/finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java +++ b/finance-admin/src/main/java/com/finance/web/controller/api/CurrentQuarterController.java @@ -13,23 +13,28 @@ import com.finance.system.query.QuestionQuery; import com.finance.system.query.ScoreCalculateDetailQuery; import com.finance.system.query.ScoreCalculateQuery; +import com.finance.system.service.ISysUserService; import com.finance.system.service.TbBasicDataService; import com.finance.system.service.TbQuestionService; import com.finance.system.service.TbScoreService; import com.finance.system.vo.CurrentFieldsAllVO; import com.finance.system.vo.CurrentFieldsDetailVO; import com.finance.system.vo.CurrentFieldsVO; +import com.finance.system.vo.DeptVO; import com.finance.system.vo.QuestionVO; import com.finance.system.vo.ScoreCalculateDetailVO; import com.finance.system.vo.ScoreCalculateVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -50,13 +55,14 @@ private final TbBasicDataService tbBasicDataService; private final TbQuestionService tbQuestionService; private final TbScoreService tbScoreService; + private final ISysUserService sysUserService; /** * 字段统计 * * @return R<PageDTO < CurrentFieldsVO>> */ - @ApiOperation(value = "字段统计" , notes = "字段统计") + @ApiOperation(value = "字段统计", notes = "字段统计") @PostMapping("/fields-statics") public R<PageDTO<CurrentFieldsVO>> fieldsStatics( @Validated @RequestBody CurrentFieldsQuery dto) { @@ -64,7 +70,7 @@ dto.setQuarter(DateUtils.getNowQuarter()); return tbBasicDataService.fieldsStatics(dto); } catch (Exception e) { - log.error("获取字段统计相关信息异常" , e); + log.error("获取字段统计相关信息异常", e); return R.fail(); } } @@ -76,8 +82,8 @@ * @return R<CurrentFieldsDetailVO> */ @GetMapping("/fields-details") - @ApiOperation(value = "字段统计-查看详情" , notes = "字段统计") - @ApiImplicitParam(name = "id" , value = "基础数据id" , required = true, dataType = "int" , paramType = "query" , dataTypeClass = Long.class) + @ApiOperation(value = "字段统计-查看详情", notes = "字段统计") + @ApiImplicitParam(name = "id", value = "基础数据id", required = true, dataType = "int", paramType = "query", dataTypeClass = Long.class) public R<CurrentFieldsDetailVO> fieldsDetails(@RequestParam("id") Long id) { try { return tbBasicDataService.fieldsDetails(id); @@ -85,7 +91,7 @@ if (e instanceof ServiceException) { return R.fail(e.getMessage()); } - log.error("保存当前季度数据异常" , e); + log.error("保存当前季度数据异常", e); return R.fail(); } } @@ -105,7 +111,7 @@ if (e instanceof ServiceException) { return R.fail(e.getMessage()); } - log.error("保存数据异常" , e); + log.error("保存数据异常", e); return R.fail(); } return R.ok(); @@ -117,7 +123,7 @@ * @return R<CurrentFieldsAllVO> */ @GetMapping("/fields-statics-all") - @ApiOperation(value = "字段统计-查看全部" , notes = "字段统计") + @ApiOperation(value = "字段统计-查看全部", notes = "字段统计") public R<CurrentFieldsAllVO> fieldsStaticsAll() { try { return R.ok(tbBasicDataService.fieldsStaticsAll()); @@ -125,7 +131,7 @@ if (e instanceof ServiceException) { return R.fail(e.getMessage()); } - log.error("查看全部异常" , e); + log.error("查看全部异常", e); return R.fail(); } } @@ -144,7 +150,7 @@ query.setQuarter(DateUtils.getNowQuarter()); return R.ok(tbBasicDataService.scoreCalculatePage(query)); } catch (Exception e) { - log.error("获取得分计算异常" , e); + log.error("获取得分计算异常", e); return R.fail(); } } @@ -157,7 +163,7 @@ */ @PostMapping("/score-calculate-detail") @ApiOperation("得分计算-查看详情") - @ApiImplicitParam(name = "areaName" , value = "部门名称" , required = false, dataType = "string" , paramType = "query" , dataTypeClass = String.class) + @ApiImplicitParam(name = "areaName", value = "部门名称", required = false, dataType = "string", paramType = "query", dataTypeClass = String.class) public R<ScoreCalculateDetailVO> scoreCalculateDetail( @Validated @RequestBody ScoreCalculateDetailQuery query) { return R.ok(tbScoreService.scoreCalculateDetail(query)); @@ -170,7 +176,7 @@ * @return R<Void> */ @PostMapping("add-question") - @ApiOperation(value = "发现问题-添加问题" , notes = "发现问题") + @ApiOperation(value = "发现问题-添加问题", notes = "发现问题") public R<Void> addQuestion(@Validated @RequestBody QuestionDTO dto) { try { tbQuestionService.addQuestion(dto); @@ -179,7 +185,7 @@ if (e instanceof ServiceException) { return R.fail(e.getMessage()); } - log.error("添加问题异常" , e); + log.error("添加问题异常", e); return R.fail(); } } @@ -191,7 +197,7 @@ * @return R<Void> */ @PostMapping("/edit-question") - @ApiOperation(value = "发现问题-编辑问题" , notes = "发现问题") + @ApiOperation(value = "发现问题-编辑问题", notes = "发现问题") public R<Void> editQuestion(@Validated @RequestBody QuestionUpdDTO dto) { try { tbQuestionService.editQuestion(dto); @@ -200,7 +206,7 @@ if (e instanceof ServiceException) { return R.fail(e.getMessage()); } - log.error("编辑问题异常" , e); + log.error("编辑问题异常", e); return R.fail(); } } @@ -212,7 +218,7 @@ * @return R<PageDTO < QuestionVO>> */ @PostMapping("/page-question") - @ApiOperation(value = "发现问题-分页查询问题" , notes = "发现问题") + @ApiOperation(value = "发现问题-分页查询问题", notes = "发现问题") public R<PageDTO<QuestionVO>> pageQuestion(@Validated @RequestBody QuestionQuery dto) { return R.ok(tbQuestionService.pageQuestion(dto)); } @@ -224,10 +230,10 @@ * @return R<QuestionDTO> */ @GetMapping("/detail-question") - @ApiOperation(value = "发现问题-问题详情" , notes = "发现问题") - public R<QuestionDTO> detailQuestion(@RequestParam("id") Long id) { + @ApiOperation(value = "发现问题-问题详情", notes = "发现问题") + public R<QuestionVO> detailQuestion(@RequestParam("id") Long id) { TbQuestion question = tbQuestionService.getById(id); - return R.ok(BeanUtils.copyBean(question, QuestionDTO.class)); + return R.ok(BeanUtils.copyBean(question, QuestionVO.class)); } /** @@ -237,9 +243,17 @@ * @return R<Void> */ @DeleteMapping("/delete") - @ApiOperation(value = "发现问题-删除问题" , notes = "发现问题") + @ApiOperation(value = "发现问题-删除问题", notes = "发现问题") public R<Void> delete(@RequestParam("id") Long id) { tbQuestionService.removeById(id); return R.ok(); } + + @GetMapping(value = {"/dept/list/{deptName}", "/dept/list"}) + @ApiOperation(value = "发现问题-获取部门列表", notes = "发现问题") + public R<List<DeptVO>> deptList( + @ApiParam(value = "部门名称", required = false) @PathVariable(value = "deptName", required = false) String deptName) { + return R.ok(sysUserService.queryDeptListByName(deptName)); + } + } diff --git a/finance-admin/src/main/java/com/finance/web/controller/api/TbDeptController.java b/finance-admin/src/main/java/com/finance/web/controller/api/TbDeptController.java index 4fe02c4..616e3ea 100644 --- a/finance-admin/src/main/java/com/finance/web/controller/api/TbDeptController.java +++ b/finance-admin/src/main/java/com/finance/web/controller/api/TbDeptController.java @@ -67,8 +67,8 @@ @ApiOperation("模板下载") public void download() { try { - //ArrayList<TbDept> list = new ArrayList<>(); - //ExcelUtil.exportExcel(list, "部门导入模板", "部门导入模板", TbDept.class, "部门导入模板", response); + // ArrayList<TbDept> list = new ArrayList<>(); + // ExcelUtil.exportExcel(list, "部门导入模板", "部门导入模板", TbDept.class, "部门导入模板", response); // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); @@ -76,7 +76,7 @@ String fileName = URLEncoder.encode("部门导入模板", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); Map<Integer, String[]> selectedMap = new HashMap<>(); - selectedMap.put(3, new String[]{"省本级", "市", "开发区", "县"}); + selectedMap.put(3, new String[]{"省", "市", "开发区", "县"}); selectedMap.put(4, new String[]{"是", "否"}); EasyExcel.write(response.getOutputStream(), DeptExcel.class).sheet("模板") .registerWriteHandler(EasyExcelUtil.getStyleStrategy()) @@ -100,7 +100,7 @@ @Transactional(rollbackFor = Exception.class) public R<Void> importExcel(@RequestPart("file") MultipartFile file) { try { - //tbDeptService.importExcel(file); + // tbDeptService.importExcel(file); InputStream inputStream = file.getInputStream(); EasyExcel.read(inputStream, DeptExcel.class, new DeptImportListener(sysUserService)) .sheet().doRead(); 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 d699985..acf53a9 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 @@ -14,9 +14,9 @@ import com.finance.common.utils.BeanUtils; import com.finance.common.utils.CollUtils; import com.finance.common.utils.DateUtils; +import com.finance.common.utils.StringUtils; import com.finance.system.domain.TbBasicData; import com.finance.system.domain.TbBasicDataCategory; -import com.finance.system.domain.TbDataScreenScore; import com.finance.system.domain.TbQuestion; import com.finance.system.query.CalculateDetailQuery; import com.finance.system.query.DeptCalculateDetailQuery; @@ -48,8 +48,13 @@ import com.finance.system.vo.ScoreRankVO; import com.finance.system.vo.ScoreRateDataVO; import com.finance.system.vo.TransferPaymentScaleVO; +import com.google.common.collect.Lists; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; @@ -77,10 +82,10 @@ public ProvinceStaticsVO provinceStatics() { ProvinceStaticsVO vo = new ProvinceStaticsVO(); - int provinceCount = getCount("省本级"); - int cityCount = getCount("市"); - int developmentZonesCount = getCount("开发区"); - int countyCount = getCount("县"); + int provinceCount = getCount(AreaLevelEnum.PROVINCE); + int cityCount = getCount(AreaLevelEnum.CITY); + int developmentZonesCount = getCount(AreaLevelEnum.DEVELOPMENT_ZONES); + int countyCount = getCount(AreaLevelEnum.COUNTY); vo.setProvinceCount(provinceCount); vo.setCityCount(cityCount); @@ -89,7 +94,7 @@ return vo; } - private int getCount(String level) { + private int getCount(AreaLevelEnum level) { return (int) sysUserService.count( Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT) .eq(SysUser::getAreaLevel, level)); @@ -113,28 +118,29 @@ public RiskAndTransferVO getRiskAndTransfer() throws Exception { String nowQuarter = DateUtils.getNowQuarter(); RiskAndTransferVO riskAndTransferVO = new RiskAndTransferVO(); - //查询转移支付规模总额 + // 查询转移支付规模总额 List<TbBasicData> list = tbBasicDataService.lambdaQuery() .select(TbBasicData::getTransferPaymentScale) .eq(TbBasicData::getQuarter, nowQuarter) - .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED) + // .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED) .list(); Optional<Double> reduce = list.stream() .map(tbBasicData -> Double.parseDouble(tbBasicData.getTransferPaymentScale())) .reduce(Double::sum); riskAndTransferVO.setTransferPaymentScale(reduce.orElse(0D)); - //查询风险等级设置 + // 查询风险等级设置 DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel(); List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel); riskAndTransferVO.setRiskLevelVOList(riskLevelVOList); RiskCountVO riskCountVO = new RiskCountVO(); + List<RiskMapVO> riskMapVOList = tbScoreService.getCurrentScoreList(nowQuarter, null); - List<TbDataScreenScore> dataScreenScoreList = tbDataScreenScoreService.selectRiskByQuarter( - nowQuarter, riskLevel.getId(), null); for (RiskLevelVO vo : riskLevelVOList) { - long count = dataScreenScoreList.stream() + long count = riskMapVOList.stream() + .filter(r -> r.getAreaLevel().equals(AreaLevelEnum.CITY)) .filter(item -> item.getScore() >= vo.getMin() && item.getScore() <= vo.getMax()).count(); + if (vo.getRiskLevel().equals(RiskLevelEnum.L1)) { riskCountVO.setNoRiskCount((int) count); } else if (vo.getRiskLevel().equals(RiskLevelEnum.L2)) { @@ -145,24 +151,24 @@ riskCountVO.setHighRiskCount((int) count); } } - //TODO - riskCountVO.setNoRiskCount(50); - riskCountVO.setLowRiskCount(45); - riskCountVO.setMediumRiskCount(30); - riskCountVO.setHighRiskCount(80); + // TODO + // riskCountVO.setNoRiskCount(50); + // riskCountVO.setLowRiskCount(45); + // riskCountVO.setMediumRiskCount(30); + // riskCountVO.setHighRiskCount(80); riskAndTransferVO.setRiskCountVO(riskCountVO); - //查询风险配置对应得分 - List<RiskMapVO> riskMapVOList = tbDataScreenScoreService.queryScore4Map(nowQuarter, - riskLevel.getId()); + // 查询风险配置对应得分 + // 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); } @@ -204,8 +210,7 @@ public List<RiskRankingVO> riskRanking() throws Exception { DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel(); List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel); - List<RiskRankingVO> voList = tbDataScreenScoreService.queryRiskRanking(riskLevel.getId(), - DateUtils.getNowQuarter(), AreaLevelEnum.COUNTY); + List<RiskRankingVO> voList = tbScoreService.queryRiskRanking(DateUtils.getNowQuarter()); int rank = 1; for (RiskRankingVO riskRankingVO : voList) { riskRankingVO.setRank(rank++); @@ -235,7 +240,7 @@ public DataAnalysisVO getDataAnalysis(String areaCode) throws Exception { DataAnalysisVO dataAnalysisVO = new DataAnalysisVO(); - //查询得分排名 + // 查询得分排名 ScoreRankVO scoreRankVO = tbScoreService.queryRankAndScoreByAreaCode(areaCode); if (Objects.isNull(scoreRankVO)) { return dataAnalysisVO; @@ -243,9 +248,10 @@ dataAnalysisVO.setRank(scoreRankVO.getRank()); dataAnalysisVO.setScore(scoreRankVO.getScore()); String nowQuarter = DateUtils.getNowQuarter(); - //查询问题 + // 查询问题 List<TbQuestion> list = tbQuestionService.lambdaQuery() - .eq(TbQuestion::getQuarter, nowQuarter).list(); + .eq(TbQuestion::getQuarter, nowQuarter).eq(TbQuestion::getDeptAreaCode, areaCode) + .list(); List<QuestionVO> questionVOS = BeanUtils.copyList(list, QuestionVO.class); dataAnalysisVO.setQuestions(questionVOS); SysUser user = sysUserService.lambdaQuery() @@ -255,24 +261,16 @@ return dataAnalysisVO; } dataAnalysisVO.setAreaName(user.getDeptName()); - //查询风险得分 + // 查询风险得分 DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel(); List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel); - List<DataScreenScoreVO> thisYearScore = tbDataScreenScoreService.queryScoreByAreaAndYear( - areaCode, riskLevel.getId(), 1); - Optional<Double> thisYear = thisYearScore.stream().map(DataScreenScoreVO::getScore) - .reduce(Double::sum); - dataAnalysisVO.setYearScore(thisYear.orElse(0D)); - List<DataScreenScoreVO> lastYearScore = tbDataScreenScoreService.queryScoreByAreaAndYear( - areaCode, riskLevel.getId(), 2); - Optional<Double> lastYear = lastYearScore.stream().map(DataScreenScoreVO::getScore) - .reduce(Double::sum); - dataAnalysisVO.setLastYearScore(lastYear.orElse(0D)); - //查询风险等级 - List<TbDataScreenScore> dataScreenScoreList = tbDataScreenScoreService.selectRiskByQuarter( - nowQuarter, - riskLevel.getId(), areaCode); - for (TbDataScreenScore tbDataScreenScore : dataScreenScoreList) { + + dataAnalysisVO.setYearScore(getYearScore(areaCode, 1)); + + dataAnalysisVO.setLastYearScore(getYearScore(areaCode, 2)); + // 查询风险等级 + List<RiskMapVO> currentScoreList = tbScoreService.getCurrentScoreList(nowQuarter, areaCode); + for (RiskMapVO tbDataScreenScore : currentScoreList) { for (RiskLevelVO vo : riskLevelVOList) { if (vo.getRiskLevel().equals(RiskLevelEnum.L1) && tbDataScreenScore.getScore() <= vo.getMin()) { @@ -288,58 +286,142 @@ } } } - //查询形式指标得分 - List<ScoreDataVO> scoreDataVOList = new ArrayList<>(); - handleDataIndicators(areaCode, scoreDataVOList); - dataAnalysisVO.setScoreDataList(scoreDataVOList); - //查询数据指标得分 - List<ScoreRateDataVO> scoreRateDataVOList = new ArrayList<>(); - handleDataIndicators(areaCode, scoreRateDataVOList, nowQuarter); - dataAnalysisVO.setScoreRateDataList(scoreRateDataVOList); - //查询大屏下方字段列表 + // 查询四个指标下的三级指标 + List<FieldAndScoreDataVO> voList = + tbBasicDataService.getFieldAndScoreData(areaCode, nowQuarter, 1); + List<FieldAndScoreDataVO> lastYearList = + tbBasicDataService.getFieldAndScoreData(areaCode, nowQuarter, 2); + // 查询四个指标下的三级指标 + List<FieldAndScoreDataVO> allDeptVoList = + tbBasicDataService.getFieldAndScoreData(null, nowQuarter, 1); + // 查询形式指标得分 + dataAnalysisVO.setScoreDataList(handleDataIndicators(voList, lastYearList)); + // 查询数据指标得分 + dataAnalysisVO.setScoreRateDataList(handleDataIndicatorsRate(allDeptVoList, voList)); + // 查询大屏下方字段列表 List<TbBasicDataCategory> categoryList = tbBasicDataCategoryService.lambdaQuery() - .eq(TbBasicDataCategory::getStatus, ShowStatusEnum.SHOW).last("limit 4").list(); - List<FieldAndScoreDataVO> voList = tbBasicDataService.selectBasicDataFieldsConfig(areaCode, - nowQuarter); + .eq(TbBasicDataCategory::getParentId, -1) + .eq(TbBasicDataCategory::getStatus, ShowStatusEnum.SHOW) + .last("limit 4").list(); + if (categoryList.isEmpty()) { dataAnalysisVO.setScoreRateDataListOne(CollUtils.emptyList()); dataAnalysisVO.setScoreRateDataListTwo(CollUtils.emptyList()); dataAnalysisVO.setScoreRateDataListThree(CollUtils.emptyList()); dataAnalysisVO.setScoreRateDataListFour(CollUtils.emptyList()); } else { - int size = categoryList.size(); - for (int i = 0; i < 4; i++) { - List<FieldAndScoreDataVO> dataList; - if (i < size) { - dataList = getFieldAndScoreData(voList, - categoryList.get(i).getBasicDataCategoryName()); - } else { - dataList = CollUtils.emptyList(); - } - switch (i) { - case 0: - dataAnalysisVO.setScoreRateDataListOne(dataList); - break; - case 1: - dataAnalysisVO.setScoreRateDataListTwo(dataList); - break; - case 2: - dataAnalysisVO.setScoreRateDataListThree(dataList); - break; - case 3: - dataAnalysisVO.setScoreRateDataListFour(dataList); - break; - } - } + dataAnalysisVO.setScoreRateDataListOne(getLevelThreeIndicators(voList, "财政经济形势")); + dataAnalysisVO.setScoreRateDataListTwo(getLevelThreeIndicators(voList, "预算管理方面")); + dataAnalysisVO.setScoreRateDataListThree( + getLevelThreeIndicators(voList, "预算执行方面")); + dataAnalysisVO.setScoreRateDataListFour( + getLevelThreeIndicators(voList, "风险防控方面")); } return dataAnalysisVO; + } + + private List<ScoreRateDataVO> handleDataIndicatorsRate(List<FieldAndScoreDataVO> allDeptVoList, + List<FieldAndScoreDataVO> voList) { + List<ScoreRateDataVO> result = new ArrayList<>(); + + List<String> indicatorList = Lists.newArrayList("财政经济形势", "预算管理方面", + "预算执行方面", "风险防控方面"); + 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()); + 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) { + Map<String, List<FieldAndScoreDataVO>> collect = allDeptVoList.stream() + .collect(Collectors.groupingBy(FieldAndScoreDataVO::getDeptAreaCode)); + return collect.keySet().stream().map(key -> { + Double score = getLevelThreeIndicators(collect.get(key), indicatorName).stream() + .map(FieldAndScoreDataVO::getScore).reduce(Double::sum).orElse(0D); + return score; + }).collect(Collectors.toList()); + } + + private List<ScoreDataVO> handleDataIndicators(List<FieldAndScoreDataVO> voList, + List<FieldAndScoreDataVO> lastYearList) { + List<ScoreDataVO> scoreDataVOList = new ArrayList<>(); + 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)); + scoreDataVOList.add(scoreDataVO); + } + return scoreDataVOList; + } + + private List<FieldAndScoreDataVO> getLevelThreeIndicators(List<FieldAndScoreDataVO> voList, + String indicatorName) { + return voList.stream().map(vo -> { + if (StringUtils.isNotBlank(vo.getLevelOneIndicator())) { + if (StringUtils.trim(vo.getLevelOneIndicator()).equals(indicatorName)) { + return vo; + } else { + if (StringUtils.isNotBlank(vo.getLevelTwoIndicator()) + && StringUtils.trim(vo.getLevelTwoIndicator()).equals(indicatorName)) { + return vo; + } + } + } + return null; + }).filter(Objects::nonNull).collect(Collectors.toList()); + } + + private Double getYearScore(String areaCode, Integer yearType) { + List<RiskMapVO> thisYearScoreList = tbScoreService.getScoreByYearType(areaCode, yearType); + return thisYearScoreList.stream().map(RiskMapVO::getScore) + .reduce(Double::sum).orElse(0D); } private void handleDataIndicators(String areaCode, List<ScoreDataVO> scoreDataVOList) { List<DataScreenScoreVO> formalIndicatorsYear = tbDataScreenScoreService.selectIndicators( areaCode, null, DataScreenConfigEnum.FORMAL_INDICATORS, 1); if (CollUtils.isNotEmpty(formalIndicatorsYear)) { - //形式指标一 + // 形式指标一 for (SubTypeEnum value : SubTypeEnum.values()) { ScoreDataVO scoreDataVO = new ScoreDataVO(); scoreDataVO.setSubType(value); diff --git a/finance-admin/src/main/resources/application-dev.yml b/finance-admin/src/main/resources/application-dev.yml index ff11971..9a12672 100644 --- a/finance-admin/src/main/resources/application-dev.yml +++ b/finance-admin/src/main/resources/application-dev.yml @@ -166,7 +166,7 @@ # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) - expireTime: 120 + expireTime: 720 # MyBatis配置 #mybatis: diff --git a/finance-admin/src/test/java/com/finance/FinanceManageApplicationTest.java b/finance-admin/src/test/java/com/finance/FinanceManageApplicationTest.java index f8f920a..b70cd26 100644 --- a/finance-admin/src/test/java/com/finance/FinanceManageApplicationTest.java +++ b/finance-admin/src/test/java/com/finance/FinanceManageApplicationTest.java @@ -5,15 +5,25 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.finance.common.enums.ShowStatusEnum; +import com.finance.common.utils.BeanUtils; import com.finance.system.domain.TbBasicData; +import com.finance.system.domain.TbBasicDataCategory; +import com.finance.system.domain.TbBasicDataConfig; import com.finance.system.domain.TbBasicDataField; import com.finance.system.domain.TbField; import com.finance.system.mapper.TbBasicDataFieldMapper; import com.finance.system.mapper.TbBasicDataMapper; import com.finance.system.service.AsyncService; +import com.finance.system.service.TbBasicDataCategoryService; +import com.finance.system.service.TbBasicDataConfigService; import com.finance.system.service.TbFieldService; +import com.finance.system.vo.BasicDataConfigVO; import com.finance.web.controller.service.DepartmentRanking; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; import javax.annotation.Resource; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @@ -35,6 +45,10 @@ private TbBasicDataFieldMapper basicDataFieldMapper; @Resource private TbFieldService tbFieldService; + @Resource + private TbBasicDataConfigService tbBasicDataConfigService; + @Resource + private TbBasicDataCategoryService tbBasicDataCategoryService; @Test public void test() { @@ -88,5 +102,35 @@ tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list(); asyncService.calculateScoreWithFixedRules(one, list, fieldList); } + + @Test + public void test3() { + List<TbBasicDataConfig> configList = tbBasicDataConfigService.lambdaQuery() + .le(TbBasicDataConfig::getId, 25).list(); + List<BasicDataConfigVO> configVOList = BeanUtils.copyList(configList, + BasicDataConfigVO.class); + Map<Long, TbBasicDataCategory> configCategoryMap = tbBasicDataCategoryService.list() + .stream() + .collect(Collectors.toMap(TbBasicDataCategory::getId, + Function.identity())); + configVOList = configVOList.stream().peek(c -> { + TbBasicDataCategory tbBasicDataCategory2 = configCategoryMap.get( + c.getBasicDataCategoryId()); + if (Objects.nonNull(tbBasicDataCategory2)) { + if (tbBasicDataCategory2.getParentId() == -1) { + c.setBasicDataCategoryOne(tbBasicDataCategory2.getBasicDataCategoryName()); + } else { + c.setBasicDataCategory(tbBasicDataCategory2.getBasicDataCategoryName()); + TbBasicDataCategory tbBasicDataCategory1 = configCategoryMap.get( + tbBasicDataCategory2.getParentId()); + if (Objects.nonNull(tbBasicDataCategory1)) { + c.setBasicDataCategoryOne( + tbBasicDataCategory1.getBasicDataCategoryName()); + } + } + } + }).collect(Collectors.toList()); + System.err.println(configVOList); + } } diff --git a/finance-common/src/main/java/com/finance/common/core/domain/entity/SysUser.java b/finance-common/src/main/java/com/finance/common/core/domain/entity/SysUser.java index 9b4c9d2..39c1ce6 100644 --- a/finance-common/src/main/java/com/finance/common/core/domain/entity/SysUser.java +++ b/finance-common/src/main/java/com/finance/common/core/domain/entity/SysUser.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import com.finance.common.core.domain.BaseEntity; +import com.finance.common.enums.AreaLevelEnum; import com.finance.common.enums.DisabledEnum; import com.finance.common.enums.UserTypeEnum; import com.finance.common.xss.Xss; @@ -192,10 +193,10 @@ @ApiModelProperty(value = "区划代码") @TableField("area_code") private String areaCode; - - @ApiModelProperty(value = "级次(省、市、县)") + // 1:省 2:市 3:开发区 4:县 + @ApiModelProperty(value = "级次(省、市、开发区、县)") @TableField("area_level") - private String areaLevel; + private AreaLevelEnum areaLevel; @ApiModelProperty(value = "县级标志(不包含直辖市的区 0:否 1:是)") @TableField("county_flag") diff --git a/finance-common/src/main/java/com/finance/common/enums/AreaLevelEnum.java b/finance-common/src/main/java/com/finance/common/enums/AreaLevelEnum.java index 772e632..bddf836 100644 --- a/finance-common/src/main/java/com/finance/common/enums/AreaLevelEnum.java +++ b/finance-common/src/main/java/com/finance/common/enums/AreaLevelEnum.java @@ -1,17 +1,20 @@ package com.finance.common.enums; +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; import lombok.AllArgsConstructor; import lombok.Getter; @Getter @AllArgsConstructor public enum AreaLevelEnum { - PROVINCE(1, "省本级"), + PROVINCE(1, "省"), CITY(2, "市"), DEVELOPMENT_ZONES(3, "开发区"), - COUNTY(3, "县"); - + COUNTY(4, "县"); + @EnumValue private final Integer code; + @JsonValue private final String desc; public static AreaLevelEnum getEnumByCode(Integer code) { diff --git a/finance-common/src/main/java/com/finance/common/enums/BasicDataFieldEnum.java b/finance-common/src/main/java/com/finance/common/enums/BasicDataFieldEnum.java index 6407504..f8abfc0 100644 --- a/finance-common/src/main/java/com/finance/common/enums/BasicDataFieldEnum.java +++ b/finance-common/src/main/java/com/finance/common/enums/BasicDataFieldEnum.java @@ -19,9 +19,9 @@ BASIC_DATA_FIELD10(10L, "(一)一般公共预算-动用预算稳定调节基金-预算数"), BASIC_DATA_FIELD11(11L, "(一)一般公共预算-动用预算稳定调节基金-执行数"), BASIC_DATA_FIELD12(12L, - "(一)一般公共预算-综合财力 (本级收入+上级补助-上解+下级上解收入-补助下级支出)-预算数"), + "(一)一般公共预算-综合财力(本级收入+上级补助-上解+下级上解收入-补助下级支出)-预算数"), BASIC_DATA_FIELD13(13L, - "(一)一般公共预算-综合财力 (本级收入+上级补助-上解+下级上解收入-补助下级支出)-执行数"), + "(一)一般公共预算-综合财力(本级收入+上级补助-上解+下级上解收入-补助下级支出)-执行数"), BASIC_DATA_FIELD14(14L, "(一)一般公共预算-一般公共预算支出-预算数"), BASIC_DATA_FIELD15(15L, "(一)一般公共预算-一般公共预算支出-当期执行数"), BASIC_DATA_FIELD16(16L, "(一)一般公共预算-一般公共预算支出-上年同期执行数"), @@ -29,9 +29,9 @@ BASIC_DATA_FIELD18(18L, "(二)政府性基金预算-政府性基金预算收入-当期执行数"), BASIC_DATA_FIELD19(19L, "(二)政府性基金预算-政府性基金预算收入-上年同期执行数"), BASIC_DATA_FIELD20(20L, - "(二)政府性基金预算-可用财力 (本级收入+上级补助-上解+下级上解收入-补助下级支出)-预算数"), + "(二)政府性基金预算-可用财力(本级收入+上级补助-上解+下级上解收入-补助下级支出)-预算数"), BASIC_DATA_FIELD21(21L, - "(二)政府性基金预算-可用财力 (本级收入+上级补助-上解+下级上解收入-补助下级支出)-执行数"), + "(二)政府性基金预算-可用财力(本级收入+上级补助-上解+下级上解收入-补助下级支出)-执行数"), BASIC_DATA_FIELD22(22L, "(二)政府性基金预算-政府性基金预算支出-预算数"), BASIC_DATA_FIELD23(23L, "(二)政府性基金预算-政府性基金预算支出-当期执行数"), BASIC_DATA_FIELD24(24L, "(二)政府性基金预算-政府性基金预算支出-上年同期执行数"), @@ -85,8 +85,9 @@ BASIC_DATA_FIELD56(56L, "(五)暂付款情况-截至上年底暂付性款项余额-其中:2018年底前形成的暂付款"), BASIC_DATA_FIELD57(57L, "(五)暂付款情况-当年新增暂付性款项金额"), BASIC_DATA_FIELD58(58L, "(五)暂付款情况-当年消化情况-当年拟消化金额"), - BASIC_DATA_FIELD59(59L, "(五)暂付款情况-当年消化情况-金额"), - BASIC_DATA_FIELD60(60L, "(五)暂付款情况-当年消化情况-其中:已消化2018年底存量暂付款"), + BASIC_DATA_FIELD59(59L, "(五)暂付款情况-当年消化情况-当年已消化金额-金额"), + BASIC_DATA_FIELD60(60L, + "(五)暂付款情况-当年消化情况-当年已消化金额-其中:已消化2018年底存量暂付款"), BASIC_DATA_FIELD61(61L, "(五)暂付款情况-累计暂付性款项余额"), BASIC_DATA_FIELD62(62L, "(六)存量资金情况-结转结余-总额"), BASIC_DATA_FIELD63(63L, "(六)存量资金情况-结转结余-其中:-一般公共预算结转结余"), @@ -111,10 +112,10 @@ BASIC_DATA_FIELD82(82L, "(七)债务管理情况-当年需付息金额-一般债-预算数"), BASIC_DATA_FIELD83(83L, "(七)债务管理情况-当年需付息金额-专项债-需求数"), BASIC_DATA_FIELD84(84L, "(七)债务管理情况-当年需付息金额-专项债-预算数"), - BASIC_DATA_FIELD85(85L, "(七)债务管理情况', '当年已付息金额-一般债"), - BASIC_DATA_FIELD86(86L, "(七)债务管理情况', '当年已付息金额-专项债"), - BASIC_DATA_FIELD87(87L, "(七)债务管理情况', '当年已付息金额-一般债"), - BASIC_DATA_FIELD88(88L, "(七)债务管理情况', '当年已付息金额-专项债"); + BASIC_DATA_FIELD85(85L, "(七)债务管理情况-当年已付息金额-一般债"), + BASIC_DATA_FIELD86(86L, "(七)债务管理情况-当年已付息金额-专项债"), + BASIC_DATA_FIELD87(87L, "(七)债务管理情况-当年已付息金额-一般债"), + BASIC_DATA_FIELD88(88L, "(七)债务管理情况-当年已付息金额-专项债"); private final Long code; private final String desc; diff --git a/finance-common/src/main/java/com/finance/common/enums/IndicatorItemEnum.java b/finance-common/src/main/java/com/finance/common/enums/IndicatorItemEnum.java index 2533213..4eab6a7 100644 --- a/finance-common/src/main/java/com/finance/common/enums/IndicatorItemEnum.java +++ b/finance-common/src/main/java/com/finance/common/enums/IndicatorItemEnum.java @@ -6,37 +6,38 @@ @Getter @AllArgsConstructor public enum IndicatorItemEnum { - INDICATOR_ITEM1(1, "财政经济形势-收入占GDP比重-地方一般公共预算收入占GDP的比重"), - INDICATOR_ITEM2(2, + INDICATOR_ITEM1(1L, "财政经济形势-收入占GDP比重-地方一般公共预算收入占GDP的比重"), + INDICATOR_ITEM2(2L, "财政经济形势-收入执行率-地方一般公共预算收入执行进度(地方一般公共预算收入/年初预算或调整预算)"), - INDICATOR_ITEM3(3, + INDICATOR_ITEM3(3L, "财政经济形势-收入执行率-政府性基金预算收入执行进度(政府性基金预算收入/年初预算或调整预算)"), - INDICATOR_ITEM4(4, "财政经济形势-收入质量-税收收入占地方一般公共预算收入比重"), - INDICATOR_ITEM5(5, "财政经济形势-重大财税政策落实情况-减税降费落实情况"), - INDICATOR_ITEM6(6, "财政经济形势-重大财税政策落实情况-其他重大政策落实情况"), - INDICATOR_ITEM7(7, "预算管理方面-转移支付-中央转移支付占地方可用财力比重"), - INDICATOR_ITEM8(8, "预算管理方面-“三保”保障情况-“三保”年初预算保障情况"), - INDICATOR_ITEM9(9, "预算管理方面-“三保”保障情况-“三保”需求占可用财力的比重"), - INDICATOR_ITEM10(10, "预算管理方面-“三保”保障情况-“三保”支出保障情况"), - INDICATOR_ITEM11(11, "预算管理方面-强化预算约束-存量资金盘活"), - INDICATOR_ITEM12(12, "预算管理方面-强化预算约束-不得无预算、超预算拨款"), - INDICATOR_ITEM13(13, "预算执行方面-库款管理-库款保障水平"), - INDICATOR_ITEM14(14, "预算执行方面-预算执行情况-一般公共预算支出执行率"), - INDICATOR_ITEM15(15, "预算执行方面-预算执行情况-政府性基金预算支出执行率"), - INDICATOR_ITEM16(16, "预算执行方面-中央直达资金-中央直达资金支付进度"), - INDICATOR_ITEM17(17, "预算执行方面-中央直达资金-直达资金规范使用"), - INDICATOR_ITEM18(18, "风险防控方面-暂付款管理-违规新增暂付款"), - INDICATOR_ITEM19(19, "风险防控方面-暂付款管理-暂付款累计余额"), - INDICATOR_ITEM20(20, "风险防控方面-暂付款管理-暂付款消化"), - INDICATOR_ITEM21(21, "风险防控方面-债务管理-法定债务率"), - INDICATOR_ITEM22(22, "风险防控方面-债务管理-隐性债务率"), - INDICATOR_ITEM23(23, "风险防控方面-债务管理-日常监督发现问题"), - INDICATOR_ITEM24(24, "风险防控方面-日常监督发现问题"); + INDICATOR_ITEM4(4L, "财政经济形势-收入质量-税收收入占地方一般公共预算收入比重"), + INDICATOR_ITEM5(5L, "财政经济形势-重大财税政策落实情况-减税降费落实情况"), + INDICATOR_ITEM6(6L, "财政经济形势-重大财税政策落实情况-其他重大政策落实情况"), + INDICATOR_ITEM7(7L, "预算管理方面-转移支付-中央转移支付占地方可用财力比重"), + INDICATOR_ITEM8(8L, "预算管理方面-“三保”保障情况-“三保”年初预算保障情况"), + INDICATOR_ITEM9(9L, "预算管理方面-“三保”保障情况-“三保”需求占可用财力的比重"), + INDICATOR_ITEM10(10L, "预算管理方面-“三保”保障情况-“三保”支出保障情况"), + INDICATOR_ITEM11(11L, "预算管理方面-强化预算约束-存量资金盘活"), + INDICATOR_ITEM12(12L, "预算管理方面-强化预算约束-不得无预算、超预算拨款"), + INDICATOR_ITEM13(13L, "预算执行方面-库款管理-库款保障水平"), + INDICATOR_ITEM14(14L, "预算执行方面-预算执行情况-一般公共预算支出执行率"), + INDICATOR_ITEM15(15L, "预算执行方面-预算执行情况-政府性基金预算支出执行率"), + INDICATOR_ITEM16(16L, "预算执行方面-中央直达资金-中央直达资金支付进度"), + INDICATOR_ITEM17(17L, "预算执行方面-中央直达资金-直达资金规范使用"), + INDICATOR_ITEM18(18L, "风险防控方面-暂付款管理-违规新增暂付款"), + INDICATOR_ITEM19(19L, "风险防控方面-暂付款管理-暂付款累计余额"), + INDICATOR_ITEM20(20L, "风险防控方面-暂付款管理-暂付款消化"), + INDICATOR_ITEM21(21L, "风险防控方面-债务管理-法定债务率"), + INDICATOR_ITEM22(22L, "风险防控方面-债务管理-隐性债务率"), + INDICATOR_ITEM23(23L, "风险防控方面-债务管理-隐性债务化解"), + INDICATOR_ITEM24(24L, "风险防控方面-债务管理-日常监督发现问题"), + INDICATOR_ITEM25(25L, "风险防控方面-日常监督发现问题"); - private final Integer code; + private final Long code; private final String desc; - public static IndicatorItemEnum getEnumByCode(Integer code) { + public static IndicatorItemEnum getEnumByCode(Long code) { for (IndicatorItemEnum e : IndicatorItemEnum.values()) { if (e.code.equals(code)) { return e; diff --git a/finance-common/src/main/java/com/finance/common/enums/QuestionTypeEnum.java b/finance-common/src/main/java/com/finance/common/enums/QuestionTypeEnum.java new file mode 100644 index 0000000..3e223e1 --- /dev/null +++ b/finance-common/src/main/java/com/finance/common/enums/QuestionTypeEnum.java @@ -0,0 +1,33 @@ +package com.finance.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum QuestionTypeEnum { + ENUM0(1, "减税降费政策未落实情况"), + ENUM1(2, "其他重大财税政策"), + ENUM2(3, "“三保”支出保障情况"), + ENUM3(4, "盘活存量资金"), + ENUM4(5, "无预算、超预算拨款"), + ENUM5(6, "直达资金规范使用"), + ENUM6(7, "隐形债务化解"), + ENUM7(8, "债务日常监管"), + ENUM8(9, "日常监管发现问题"); + @EnumValue + private final Integer code; + @JsonValue + private final String desc; + + public static QuestionTypeEnum getEnumByCode(Integer code) { + for (QuestionTypeEnum e : QuestionTypeEnum.values()) { + if (e.code.equals(code)) { + return e; + } + } + return null; + } +} \ No newline at end of file diff --git a/finance-common/src/main/java/com/finance/common/utils/DateUtils.java b/finance-common/src/main/java/com/finance/common/utils/DateUtils.java index 16bf656..742eb03 100644 --- a/finance-common/src/main/java/com/finance/common/utils/DateUtils.java +++ b/finance-common/src/main/java/com/finance/common/utils/DateUtils.java @@ -1,6 +1,7 @@ package com.finance.common.utils; import cn.hutool.core.convert.NumberChineseFormatter; +import cn.hutool.core.date.DateUtil; import java.lang.management.ManagementFactory; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -206,14 +207,14 @@ public static Map<String, Date> getMonthDate(Date date) { Map<String, Date> map = new HashMap<>(2); Calendar cal = Calendar.getInstance(); - //设置指定日期 + // 设置指定日期 cal.setTime(date); - //获取当月第一天日期 + // 获取当月第一天日期 int first = cal.getActualMinimum(Calendar.DAY_OF_MONTH); cal.set(Calendar.DAY_OF_MONTH, first); Date firstDay = cal.getTime(); map.put("first", firstDay); - //获取当月最后一天日期 + // 获取当月最后一天日期 int last = cal.getActualMaximum(Calendar.DAY_OF_MONTH); cal.set(Calendar.DAY_OF_MONTH, last); Date lastDay = cal.getTime(); @@ -279,14 +280,14 @@ public static Map<String, Date> getYearDate(Date date) { Map<String, Date> map = new HashMap<>(2); Calendar cal = Calendar.getInstance(); - //设置指定日期 + // 设置指定日期 cal.setTime(date); - //获取本年第一天日期 + // 获取本年第一天日期 int first = cal.getActualMinimum(Calendar.DAY_OF_YEAR); cal.set(Calendar.DAY_OF_YEAR, first); Date firstDay = cal.getTime(); map.put("first", firstDay); - //获取本年最后一天日期 + // 获取本年最后一天日期 int last = cal.getActualMaximum(Calendar.DAY_OF_YEAR); cal.set(Calendar.DAY_OF_YEAR, last); Date lastDay = cal.getTime(); @@ -376,7 +377,7 @@ * @throws Exception 异常 */ public static String getNowQuarter() throws Exception { - //当前所在季度 + // 当前所在季度 Date date = new Date(); char quarterOfYear = String.valueOf(getQuarterOfYear(date)).toCharArray()[0]; String quarterOfYearStr = NumberChineseFormatter.numberCharToChinese(quarterOfYear, false); @@ -409,13 +410,40 @@ return DateUtils.toDate(startDate); } - //测试 getNowQuarter + public static Date getQuarterDateEnd(String quarter) { + // 提取年份和季度信息 + int year = Integer.parseInt(quarter.substring(0, 4)); + int quarterNumber = NumberChineseFormatter.chineseToNumber(quarter.substring(5, 6)); // 季度数字 + // 计算季度初的日期 + LocalDate startDate; + switch (quarterNumber) { + case 1: + startDate = LocalDate.of(year, 3, 1); + break; + case 2: + startDate = LocalDate.of(year, 6, 1); + break; + case 3: + startDate = LocalDate.of(year, 9, 1); + break; + case 4: + startDate = LocalDate.of(year, 12, 1); + break; + default: + throw new IllegalArgumentException("Invalid quarter number: " + quarterNumber); + } + return DateUtils.toDate(startDate); + } + + // 测试 getNowQuarter public static void main(String[] args) throws Exception { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String nowQuarter = getNowQuarter(); System.out.println(nowQuarter); System.out.println(NumberChineseFormatter.chineseToNumber("一")); - System.out.println(simpleDateFormat.format(getQuarterDate("2024年一季度"))); + System.out.println(simpleDateFormat.format(getQuarterDateEnd("2024年一季度"))); + String month = DateUtil.format(getQuarterDateEnd("2024年一季度"), "MM"); + System.out.println(Double.parseDouble(month)); System.out.println(simpleDateFormat.format(getQuarterDate("2024年二季度"))); System.out.println(simpleDateFormat.format(getQuarterDate("2024年三季度"))); System.out.println(simpleDateFormat.format(getQuarterDate("2024年四季度"))); diff --git a/finance-system/src/main/java/com/finance/system/domain/TbBasicDataField.java b/finance-system/src/main/java/com/finance/system/domain/TbBasicDataField.java index 245b9c1..22c6232 100644 --- a/finance-system/src/main/java/com/finance/system/domain/TbBasicDataField.java +++ b/finance-system/src/main/java/com/finance/system/domain/TbBasicDataField.java @@ -48,18 +48,6 @@ @TableField("field_value") private String fieldValue; - @ApiModelProperty(value = "第一月数据") - @TableField("first_month_value") - private String firstMonthValue; - - @ApiModelProperty(value = "第二月数据") - @TableField("second_month_value") - private String secondMonthValue; - - @ApiModelProperty(value = "第三月数据") - @TableField("third_month_value") - private String thirdMonthValue; - @ApiModelProperty(value = "创建人") @TableField(value = "create_by", fill = FieldFill.INSERT) private String createBy; diff --git a/finance-system/src/main/java/com/finance/system/domain/TbQuestion.java b/finance-system/src/main/java/com/finance/system/domain/TbQuestion.java index f503552..59d3fe2 100644 --- a/finance-system/src/main/java/com/finance/system/domain/TbQuestion.java +++ b/finance-system/src/main/java/com/finance/system/domain/TbQuestion.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; +import com.finance.common.enums.QuestionTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; @@ -45,6 +46,14 @@ @TableField("`quarter`") private String quarter; + @ApiModelProperty(value = "问题类型") + @TableField("`type`") + private QuestionTypeEnum type; + + @ApiModelProperty(value = "区划代码") + @TableField("dept_area_code") + private String deptAreaCode; + @ApiModelProperty(value = "删除标志(0代表存在 1代表删除)") @TableField("del_flag") @TableLogic diff --git a/finance-system/src/main/java/com/finance/system/dto/QuestionDTO.java b/finance-system/src/main/java/com/finance/system/dto/QuestionDTO.java index 89b9ad4..c66d786 100644 --- a/finance-system/src/main/java/com/finance/system/dto/QuestionDTO.java +++ b/finance-system/src/main/java/com/finance/system/dto/QuestionDTO.java @@ -1,11 +1,12 @@ package com.finance.system.dto; +import com.finance.common.enums.QuestionTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; /** * @author mitao @@ -14,11 +15,23 @@ @Data @ApiModel(value = "发现问题数据传输对象") public class QuestionDTO implements Serializable { + private static final long serialVersionUID = -8074469734465858811L; @ApiModelProperty(value = "问题标题") @NotBlank(message = "问题标题不能为空") private String title; + @ApiModelProperty(value = "问题内容") @NotBlank(message = "问题内容不能为空") private String content; + + @ApiModelProperty(value = "问题类型", notes = "问题类型 1:减税降费政策未落实情况 2:其他重大财税政策 " + + "3:“三保”支出保障情况4:盘活存量资金5:无预算、超预算拨款6:直达资金规范使用7:隐形债务化解" + + "8:债务日常监管9:日常监管发现问题") + @NotNull(message = "问题内容不能为空") + private QuestionTypeEnum type; + + @ApiModelProperty("区划代码") + @NotBlank(message = "区划代码不能为空") + private String deptAreaCode; } diff --git a/finance-system/src/main/java/com/finance/system/dto/update/QuestionUpdDTO.java b/finance-system/src/main/java/com/finance/system/dto/update/QuestionUpdDTO.java index 999c638..da1d945 100644 --- a/finance-system/src/main/java/com/finance/system/dto/update/QuestionUpdDTO.java +++ b/finance-system/src/main/java/com/finance/system/dto/update/QuestionUpdDTO.java @@ -1,5 +1,6 @@ package com.finance.system.dto.update; +import com.finance.common.enums.QuestionTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; @@ -19,10 +20,22 @@ @ApiModelProperty(value = "id") @NotNull(message = "id不能为空") private Long id; + @ApiModelProperty(value = "问题标题") @NotBlank(message = "问题标题不能为空") private String title; + @ApiModelProperty(value = "问题内容") @NotBlank(message = "问题内容不能为空") private String content; + + @ApiModelProperty(value = "问题类型", notes = "问题类型 1:减税降费政策未落实情况 2:其他重大财税政策 " + + "3:“三保”支出保障情况4:盘活存量资金5:无预算、超预算拨款6:直达资金规范使用7:隐形债务化解" + + "8:债务日常监管9:日常监管发现问题") + @NotNull(message = "问题内容不能为空") + private QuestionTypeEnum type; + + @ApiModelProperty("区划代码") + @NotBlank(message = "区划代码不能为空") + private String deptAreaCode; } diff --git a/finance-system/src/main/java/com/finance/system/dto/update/RiskLevelUpdDTO.java b/finance-system/src/main/java/com/finance/system/dto/update/RiskLevelUpdDTO.java index 16e9f88..2491b0f 100644 --- a/finance-system/src/main/java/com/finance/system/dto/update/RiskLevelUpdDTO.java +++ b/finance-system/src/main/java/com/finance/system/dto/update/RiskLevelUpdDTO.java @@ -6,7 +6,6 @@ import java.io.Serializable; import java.util.List; import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; import lombok.Data; /** @@ -20,7 +19,7 @@ private static final long serialVersionUID = -4878457973955230627L; @ApiModelProperty(value = "计算规则") - @NotEmpty(message = "计算规则不能为空") + // @NotEmpty(message = "计算规则不能为空") private List<CalculateItemDTO> calculateItemList; @ApiModelProperty(value = "风险等级范围-高风险得分") diff --git a/finance-system/src/main/java/com/finance/system/listener/BasicDataListener.java b/finance-system/src/main/java/com/finance/system/listener/BasicDataListener.java index faba84a..660f01f 100644 --- a/finance-system/src/main/java/com/finance/system/listener/BasicDataListener.java +++ b/finance-system/src/main/java/com/finance/system/listener/BasicDataListener.java @@ -279,7 +279,7 @@ tbBasicDataFieldService.saveBatch(fields); log.info(String.format("%s导入基础数据成功!", dataMap.get(0))); // asyncService.calculateScore(tbBasicData, fields); - asyncService.asyncTask(); + asyncService.calculateScoreWithFixedRules(tbBasicData, fields, fieldList); } diff --git a/finance-system/src/main/java/com/finance/system/mapper/TbBasicDataMapper.java b/finance-system/src/main/java/com/finance/system/mapper/TbBasicDataMapper.java index 6133c4d..875b166 100644 --- a/finance-system/src/main/java/com/finance/system/mapper/TbBasicDataMapper.java +++ b/finance-system/src/main/java/com/finance/system/mapper/TbBasicDataMapper.java @@ -29,4 +29,7 @@ List<FieldAndScoreDataVO> selectBasicDataFieldsConfig(@Param("areaCode") String areaCode, @Param("nowQuarter") String nowQuarter); + + List<FieldAndScoreDataVO> getFieldAndScoreData(@Param("areaCode") String areaCode, + @Param("nowQuarter") String nowQuarter, @Param("yearType") Integer yearType); } diff --git a/finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java b/finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java index 069d754..5fda4f8 100644 --- a/finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java +++ b/finance-system/src/main/java/com/finance/system/mapper/TbScoreMapper.java @@ -8,6 +8,8 @@ import com.finance.system.query.ScoreCalculateDetailQuery; import com.finance.system.query.ScoreQuery; 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; @@ -38,4 +40,12 @@ Page<ScoreDetailVO> fieldsDetail(@Param("query") CalculateDetailQuery query, @Param("page") Page<ScoreDetailVO> page, @Param("countyList") List<String> countyList); + + List<RiskMapVO> getCurrentScoreList(@Param("nowQuarter") String nowQuarter, + @Param("areaCode") String areaCode); + + List<RiskRankingVO> queryRiskRanking(@Param("nowQuarter") String nowQuarter); + + List<RiskMapVO> getScoreByYearType(@Param("areaCode") String areaCode, + @Param("yearType") Integer yearType); } diff --git a/finance-system/src/main/java/com/finance/system/service/AsyncService.java b/finance-system/src/main/java/com/finance/system/service/AsyncService.java index d228152..6121d87 100644 --- a/finance-system/src/main/java/com/finance/system/service/AsyncService.java +++ b/finance-system/src/main/java/com/finance/system/service/AsyncService.java @@ -17,4 +17,6 @@ void calculateScoreWithFixedRules(TbBasicData tbBasicData, List<TbBasicDataField> fields, List<TbField> fieldList); + + void subtractScoreWithFixedRules(String deptAreaCode) throws Exception; } diff --git a/finance-system/src/main/java/com/finance/system/service/ISysUserService.java b/finance-system/src/main/java/com/finance/system/service/ISysUserService.java index 2b94552..418285f 100644 --- a/finance-system/src/main/java/com/finance/system/service/ISysUserService.java +++ b/finance-system/src/main/java/com/finance/system/service/ISysUserService.java @@ -4,6 +4,7 @@ import com.finance.common.basic.PageDTO; import com.finance.common.core.domain.entity.SysUser; import com.finance.system.query.SysUserQuery; +import com.finance.system.vo.DeptVO; import com.finance.system.vo.SysUserVO; import java.util.List; @@ -270,4 +271,5 @@ SysUser selectPlatUserByUserName(String username); + List<DeptVO> queryDeptListByName(String deptName); } diff --git a/finance-system/src/main/java/com/finance/system/service/TbBasicDataConfigService.java b/finance-system/src/main/java/com/finance/system/service/TbBasicDataConfigService.java index f3d5111..7be6af4 100644 --- a/finance-system/src/main/java/com/finance/system/service/TbBasicDataConfigService.java +++ b/finance-system/src/main/java/com/finance/system/service/TbBasicDataConfigService.java @@ -43,4 +43,6 @@ BasicDataConfigQuery query); List<BasicDataConfigVO> getFixedRulesConfigList(); + + List<BasicDataConfigVO> getSubsractRulesConfigList(); } diff --git a/finance-system/src/main/java/com/finance/system/service/TbBasicDataService.java b/finance-system/src/main/java/com/finance/system/service/TbBasicDataService.java index 6d3f918..164adf5 100644 --- a/finance-system/src/main/java/com/finance/system/service/TbBasicDataService.java +++ b/finance-system/src/main/java/com/finance/system/service/TbBasicDataService.java @@ -60,4 +60,9 @@ List<FieldAndScoreDataVO> selectBasicDataFieldsConfig(String areaCode, String nowQuarter); void editBasicData(BasicDataUpdDTO dto) throws Exception; + + void exportDataV2(List<String> quarterList) throws IOException; + + List<FieldAndScoreDataVO> getFieldAndScoreData(String areaCode, String nowQuarter, + Integer yearType); } diff --git a/finance-system/src/main/java/com/finance/system/service/TbScoreService.java b/finance-system/src/main/java/com/finance/system/service/TbScoreService.java index 6c0b39e..4e43466 100644 --- a/finance-system/src/main/java/com/finance/system/service/TbScoreService.java +++ b/finance-system/src/main/java/com/finance/system/service/TbScoreService.java @@ -11,6 +11,8 @@ import com.finance.system.query.ScoreCalculateDetailQuery; import com.finance.system.query.ScoreQuery; import com.finance.system.vo.DeptCalculateDetailVO; +import com.finance.system.vo.RiskMapVO; +import com.finance.system.vo.RiskRankingVO; import com.finance.system.vo.ScoreCalculateDetailVO; import com.finance.system.vo.ScoreRankVO; import com.finance.system.vo.ScoreVO; @@ -40,4 +42,10 @@ String nowQuarter); ScoreCalculateDetailVO fieldsDetail(CalculateDetailQuery query, List<SysUser> countyList); + + List<RiskMapVO> getCurrentScoreList(String nowQuarter, String areaCode); + + List<RiskRankingVO> queryRiskRanking(String nowQuarter); + + List<RiskMapVO> getScoreByYearType(String areaCode, Integer yearType); } 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 46451c7..0ec80e2 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 @@ -1,5 +1,6 @@ package com.finance.system.service.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson2.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; @@ -7,20 +8,24 @@ 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.ValueTypeEnum; import com.finance.common.exception.ServiceException; import com.finance.common.utils.CalculateUtil; import com.finance.common.utils.CollUtils; +import com.finance.common.utils.DateUtils; import com.finance.common.utils.StringUtils; import com.finance.system.domain.TbBasicData; import com.finance.system.domain.TbBasicDataConfig; import com.finance.system.domain.TbBasicDataConfigDetail; import com.finance.system.domain.TbBasicDataField; import com.finance.system.domain.TbField; +import com.finance.system.domain.TbQuestion; import com.finance.system.domain.TbScore; import com.finance.system.dto.CalculateItemDTO; import com.finance.system.mapper.TbBasicDataMapper; +import com.finance.system.mapper.TbQuestionMapper; import com.finance.system.service.AsyncService; import com.finance.system.service.TbBasicDataCategoryService; import com.finance.system.service.TbBasicDataConfigDetailService; @@ -31,6 +36,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -56,6 +62,7 @@ private final TbBasicDataCategoryService tbBasicDataCategoryService; private final TbBasicDataConfigDetailService tbBasicDataConfigDetailService; private final TbBasicDataMapper tbBasicDataMapper; + private final TbQuestionMapper tbQuestionMapper; @Async @Override @@ -189,123 +196,349 @@ // 待计算的基础数据字段 Map<Long, TbBasicDataField> deptFieldsMap = fields.stream() .collect(Collectors.toMap(TbBasicDataField::getFieldId, Function.identity())); - List<TbScore> scoreList = new ArrayList<>(); + List<TbQuestion> list = tbQuestionMapper.selectList( + Wrappers.lambdaQuery(TbQuestion.class) + .eq(TbQuestion::getQuarter, tbBasicData.getQuarter())); + String deptAreaCode = tbBasicData.getDeptAreaCode(); + List<TbScore> scoreList = tbScoreService.lambdaQuery() + .eq(TbScore::getBasicDataId, tbBasicData.getId()).list(); for (BasicDataConfigVO vo : fixedRulesConfigList) { double score = 0D; - // 1:财政经济形势-收入占GDP比重-地方一般公共预算收入占GDP的比重; - if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM1.getCode()) { - // 获取所需字段 - TbBasicDataField provinceField = provinceFieldsMap.get( - BasicDataFieldEnum.BASIC_DATA_FIELD2.getCode()); - TbBasicDataField deptField = deptFieldsMap.get( - BasicDataFieldEnum.BASIC_DATA_FIELD2.getCode()); - score = getScore(deptField.getFieldValue(), tbBasicData.getCurrentGdp(), - provinceField.getFieldValue(), provinceBasicData.getCurrentGdp(), vo); - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM2.getCode()) { - // 2:财政经济形势-收入执行率-地方一般公共预算收入执行进度(地方一般公共预算收入/年初预算或调整预算); + BigDecimal deptDividendValue; + BigDecimal deptDivisorValue; + BigDecimal provinceDividendValue; + BigDecimal provinceDivisorValue; + List<TbQuestion> questionList; + // 季度末时间 + Date quarterDate = DateUtils.getQuarterDateEnd(tbBasicData.getQuarter()); + BigDecimal month = BigDecimal.valueOf( + Double.parseDouble(DateUtil.format(quarterDate, "MM"))); + switch (Objects.requireNonNull(IndicatorItemEnum.getEnumByCode(vo.getId()))) { + case INDICATOR_ITEM1: + // 1:财政经济形势-收入占GDP比重-地方一般公共预算收入占GDP的比重; + // 获取所需字段 + deptDividendValue = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD2); + deptDivisorValue = BigDecimal.valueOf( + Double.parseDouble(tbBasicData.getCurrentGdp())); + provinceDividendValue = getProvinceBigDecimal(provinceFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD2); + provinceDivisorValue = BigDecimal.valueOf( + Double.parseDouble(provinceBasicData.getCurrentGdp())); + score = getScore(deptDividendValue, deptDivisorValue, + provinceDividendValue, provinceDivisorValue, vo); + break; + case INDICATOR_ITEM2: + // 2:财政经济形势-收入执行率-地方一般公共预算收入执行进度(地方一般公共预算收入/年初预算或调整预算); + deptDividendValue = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD2); + deptDivisorValue = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD1); - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM3.getCode()) { - // 3:财政经济形势-收入执行率-政府性基金预算收入执行进度(政府性基金预算收入/年初预算或调整预算) - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM4.getCode()) { - // 4:财政经济形势-收入质量-税收收入占地方一般公共预算收入比重 - // 获取所需字段 - TbBasicDataField provinceField = provinceFieldsMap.get( - BasicDataFieldEnum.BASIC_DATA_FIELD3.getCode()); - TbBasicDataField deptField = deptFieldsMap.get( - BasicDataFieldEnum.BASIC_DATA_FIELD3.getCode()); - TbBasicDataField provinceField2 = provinceFieldsMap.get( - BasicDataFieldEnum.BASIC_DATA_FIELD2.getCode()); - TbBasicDataField deptField2 = deptFieldsMap.get( - BasicDataFieldEnum.BASIC_DATA_FIELD2.getCode()); - score = getScore(deptField.getFieldValue(), deptField2.getFieldValue(), - provinceField.getFieldValue(), provinceField2.getFieldValue(), vo); - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM5.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM6.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM7.getCode()) { - TbField field = getFieldByFieldName(fieldList, "(一)一般公共预算", - "上级补助收入", "", - "执行数"); - - TbField field2 = getFieldByFieldName(fieldList, "(一)一般公共预算", - "综合财力(本级收入+上级补助-上解+下级上解收入-补助下级支出)", "", - "执行数"); - if (Objects.nonNull(field) && Objects.nonNull(field2)) { - TbBasicDataField provinceField = provinceFieldsMap.get(field.getId()); - TbBasicDataField deptField = deptFieldsMap.get(field.getId()); - TbBasicDataField provinceField2 = provinceFieldsMap.get(field2.getId()); - TbBasicDataField deptField2 = deptFieldsMap.get(field2.getId()); - score = getScore(deptField.getFieldValue(), deptField2.getFieldValue(), - provinceField.getFieldValue(), provinceField2.getFieldValue(), vo); - } - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM8.getCode()) { - TbField field = getFieldByFieldName(fieldList, "(四)“三保”保障情况", - "地方标准“三保”支出(以地方实际结构填列,含国标)", "保基本民生", - "保基本民生"); - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM9.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM10.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM11.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM12.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM13.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM14.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM15.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM16.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM17.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM18.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM19.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM20.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM21.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM22.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM23.getCode()) { - - } else if (vo.getId().intValue() == IndicatorItemEnum.INDICATOR_ITEM24.getCode()) { - + score = getScore(deptDividendValue, deptDivisorValue, month, + BigDecimal.valueOf(12D), + vo); + break; + case INDICATOR_ITEM3: + // 3:财政经济形势-收入执行率-政府性基金预算收入执行进度(政府性基金预算收入/年初预算或调整预算) + deptDividendValue = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD18); + deptDivisorValue = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD17); + score = getScore(deptDividendValue, deptDivisorValue, month, + BigDecimal.valueOf(12D), + vo); + break; + case INDICATOR_ITEM4: + // 4:财政经济形势-收入质量-税收收入占地方一般公共预算收入比重 + // 获取所需字段 + deptDividendValue = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD3); + deptDivisorValue = getBigDecimal(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); + break; + case INDICATOR_ITEM5: + // 5: 财政经济形势-重大财税政策落实情况-减税降费落实情况 + questionList = getQuestList(list, deptAreaCode, + QuestionTypeEnum.ENUM0); + score = CollUtils.isNotEmpty(questionList) ? -5D : 0D; + break; + case INDICATOR_ITEM6: + // 6:财政经济形势-重大财税政策落实情况-其他重大政策落实情况 + questionList = getQuestList(list, deptAreaCode, + QuestionTypeEnum.ENUM1); + score = CollUtils.isNotEmpty(questionList) ? questionList.size() * -3D : 0D; + break; + case INDICATOR_ITEM7: + // 7:预算管理方面-转移支付-中央转移支付占地方可用财力比重 + deptDividendValue = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD7); + deptDivisorValue = getBigDecimal(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); + break; + case INDICATOR_ITEM8: + // 8:预算管理方面-“三保”保障情况-“三保”年初预算保障情况 + BigDecimal aw = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD47); + BigDecimal ap = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD40); + BigDecimal az = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD50); + BigDecimal aq = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD41); + BigDecimal bc = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD53); + BigDecimal ar = getBigDecimal(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, + BasicDataFieldEnum.BASIC_DATA_FIELD45); + BigDecimal r = getBigDecimal(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(); + } + break; + case INDICATOR_ITEM10: + // 10:预算管理方面-“三保”保障情况-“三保”支出保障情况 + questionList = getQuestList(list, deptAreaCode, QuestionTypeEnum.ENUM2); + score = CollUtils.isNotEmpty(questionList) ? 0D : vo.getMaxScore(); + break; + case INDICATOR_ITEM11: + // 11:预算管理方面-强化预算约束-存量资金盘活 + questionList = getQuestList(list, deptAreaCode, + QuestionTypeEnum.ENUM3); + score = CollUtils.isNotEmpty(questionList) ? -3D : 0D; + break; + case INDICATOR_ITEM12: + // 12:预算管理方面-强化预算约束-不得无预算、超预算拨款 + questionList = getQuestList(list, deptAreaCode, + QuestionTypeEnum.ENUM4); + score = CollUtils.isNotEmpty(questionList) ? -3D : 0D; + break; + case INDICATOR_ITEM13: + // 13:预算执行方面-库款管理-库款保障水平 + BigDecimal currentData = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD35); + BigDecimal part1; + BigDecimal part2; + if (currentData.compareTo(BigDecimal.valueOf(0.8D)) < 0) { + BigDecimal add = currentData.subtract(BigDecimal.valueOf(0.8D)) + .divide(BigDecimal.valueOf(0.1D), 2, RoundingMode.HALF_UP) + .multiply(BigDecimal.valueOf(0.6D)) + .add(BigDecimal.valueOf(4D)); + part1 = add.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : add; + } else { + part1 = BigDecimal.valueOf(4D); + } + BigDecimal first = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD36); + BigDecimal second = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD37); + BigDecimal third = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD38); + part2 = first.compareTo(BigDecimal.valueOf(0.3D)) < 0 + || second.compareTo(BigDecimal.valueOf(0.3D)) < 0 || third.compareTo( + BigDecimal.valueOf(0.3D)) < 0 ? BigDecimal.ZERO + : BigDecimal.valueOf(2D); + score = part1.add(part2).doubleValue(); + break; + case INDICATOR_ITEM14: + // 14:预算执行方面-预算执行情况-一般公共预算支出执行率 + deptDividendValue = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD15); + deptDivisorValue = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD14); + score = getScoreByMonth(deptDividendValue, deptDivisorValue, month, vo); + break; + case INDICATOR_ITEM15: + // 15:预算执行方面-预算执行情况-政府性基金预算支出执行率 + deptDividendValue = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD23); + deptDivisorValue = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD22); + score = getScoreByMonth(deptDividendValue, deptDivisorValue, month, vo); + break; + case INDICATOR_ITEM16: + // 16:预算执行方面-中央直达资金-中央直达资金支付进度 + deptDividendValue = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD11); + BigDecimal divided1 = month.divide(BigDecimal.valueOf(12D), 2, + RoundingMode.HALF_UP); + 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())); + score = add.compareTo(BigDecimal.ZERO) < 0 ? 0D : add.doubleValue(); + } else { + score = vo.getMaxScore(); + } + break; + case INDICATOR_ITEM17: + // 17:预算执行方面-中央直达资金-直达资金规范使用 + questionList = getQuestList(list, deptAreaCode, + QuestionTypeEnum.ENUM5); + score = CollUtils.isNotEmpty(questionList) ? 0D : vo.getMaxScore(); + break; + case INDICATOR_ITEM18: + // 18:风险防控方面-暂付款管理-违规新增暂付款 + deptDividendValue = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD57); + score = deptDividendValue.compareTo(BigDecimal.ZERO) > 0 ? 0D + : vo.getMaxScore(); + break; + case INDICATOR_ITEM19: + // 19:风险防控方面-暂付款管理-暂付款累计余额 + BigDecimal bk = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD61); + BigDecimal t = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD15); + BigDecimal ab = getBigDecimal(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)); + score = bk.compareTo(add) > 0 ? 0D : vo.getMaxScore(); + break; + case INDICATOR_ITEM20: + // 20:风险防控方面-暂付款管理-暂付款消化 + deptDividendValue = getBigDecimal(deptFieldsMap, + BasicDataFieldEnum.BASIC_DATA_FIELD59); + deptDivisorValue = getBigDecimal(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(); + break; + case INDICATOR_ITEM21: + // 21:风险防控方面-债务管理-法定债务率 + score = getTextFieldScore(deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD74, + vo); + break; + case INDICATOR_ITEM22: + // 22:风险防控方面-债务管理-隐性债务率 + score = getTextFieldScore(deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD76, + vo); + break; + case INDICATOR_ITEM23: + // 23:风险防控方面-债务管理-隐性债务化解 + questionList = getQuestList(list, deptAreaCode, + QuestionTypeEnum.ENUM6); + score = CollUtils.isNotEmpty(questionList) ? vo.getMaxScore() : -3D; + break; + case INDICATOR_ITEM24: + // 24:风险防控方面-债务管理-日常监督发现问题 + questionList = getQuestList(list, deptAreaCode, + QuestionTypeEnum.ENUM7); + if (CollUtils.isNotEmpty(questionList)) { + score = -18D + questionList.size() * -1D; + } + break; + case INDICATOR_ITEM25: + // 25:风险防控方面-日常监督发现问题 + questionList = getQuestList(list, deptAreaCode, + QuestionTypeEnum.ENUM8); + if (CollUtils.isNotEmpty(questionList)) { + score = questionList.size() * -1D; + } + break; + default: + // Handle default case if needed + break; } - TbScore tbScore = new TbScore(); - tbScore.setScore((double) score); - tbScore.setBasicDataId(tbBasicData.getId()); - tbScore.setBasicDataConfigId(vo.getId()); - scoreList.add(tbScore); + Optional<TbScore> scoreOpt = scoreList.stream() + .filter(s -> s.getBasicDataConfigId().equals(vo.getId())) + .findFirst(); + if (scoreOpt.isPresent()) { + TbScore tbScore = scoreOpt.get(); + tbScore.setScore(score); + } else { + TbScore tbScore = new TbScore(); + tbScore.setScore(score); + tbScore.setBasicDataId(tbBasicData.getId()); + tbScore.setBasicDataConfigId(vo.getId()); + scoreList.add(tbScore); + } } + if (CollUtils.isNotEmpty(scoreList)) { + tbScoreService.saveOrUpdateBatch(scoreList); + } + } + + private static List<TbQuestion> getQuestList(List<TbQuestion> list, String deptAreaCode, + QuestionTypeEnum type) { + return list.stream() + .filter(q -> q.getDeptAreaCode().equals(deptAreaCode) && q.getType() + .equals(type)) + .collect(Collectors.toList()); + } + + private BigDecimal getProvinceBigDecimal(Map<Long, TbBasicDataField> provinceFieldsMap, + BasicDataFieldEnum key) { + TbBasicDataField tbBasicDataField = provinceFieldsMap.get(key.getCode()); + if (Objects.isNull(tbBasicDataField)) { + throw new ServiceException( + String.format("四川省的字段【%s】的数据缺失,请修改后再试", key.getDesc())); + } + return BigDecimal.valueOf(Double.parseDouble(tbBasicDataField.getFieldValue())); + } + + private BigDecimal getBigDecimal(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())); + } + + return BigDecimal.valueOf( + Double.parseDouble(tbBasicDataField.getFieldValue().replace(",", ""))); } /** * 通用计算公式获取得分 * - * @param deptDividendValueStr 部门被除数字段值 - * @param deptDivisorValueStr 部门除数字段值 - * @param provinceDividendValueStr 省份被除数字段值 - * @param provinceDivisorValueStr 省份除数字段值 - * @param vo 基础数据配置 + * @param deptDividendValue 部门被除数 + * @param deptDivisorValue 部门除数 + * @param provinceDividendValue 省份被除数 + * @param provinceDivisorValue 省份除数 + * @param vo 基础数据配置 * @return 得分 */ - private Double getScore(String deptDividendValueStr, String deptDivisorValueStr, - String provinceDividendValueStr, String provinceDivisorValueStr, BasicDataConfigVO vo) { + private Double getScore(BigDecimal deptDividendValue, BigDecimal deptDivisorValue, + BigDecimal provinceDividendValue, BigDecimal provinceDivisorValue, + BasicDataConfigVO vo) { BigDecimal score = BigDecimal.ZERO; - BigDecimal provinceDividendValue = BigDecimal.valueOf( - Long.parseLong(provinceDividendValueStr)); - BigDecimal provinceDivisorValue = BigDecimal.valueOf( - Long.parseLong(provinceDivisorValueStr)); - BigDecimal deptDividendValue = BigDecimal.valueOf( - Long.parseLong(deptDividendValueStr)); - BigDecimal deptDivisorValue = BigDecimal.valueOf( - Long.parseLong(deptDivisorValueStr)); // 开始计算 BigDecimal deptDivided = BigDecimal.ZERO; @@ -325,6 +558,34 @@ score = score.compareTo(BigDecimal.ZERO) >= 0 ? score : BigDecimal.ZERO; } else { score = BigDecimal.valueOf(vo.getMaxScore()); + } + return score.doubleValue(); + } + + private Double getScore2(BigDecimal deptDividendValue, BigDecimal deptDivisorValue, + BigDecimal provinceDividendValue, BigDecimal provinceDivisorValue, + BasicDataConfigVO vo) { + BigDecimal score = BigDecimal.ZERO; + // 开始计算 + BigDecimal deptDivided = BigDecimal.ZERO; + + if (deptDivisorValue.compareTo(BigDecimal.ZERO) > 0) { + deptDivided = deptDividendValue.divide(deptDivisorValue, 2, RoundingMode.HALF_UP); + } + BigDecimal provinceDivided = BigDecimal.ZERO; + + if (provinceDivisorValue.compareTo(BigDecimal.ZERO) > 0) { + provinceDivided = provinceDividendValue.divide(provinceDivisorValue, 2, + RoundingMode.HALF_UP); + } + if (deptDivided.compareTo(provinceDivided) < 0) { + + score = BigDecimal.valueOf(vo.getMaxScore()); + } else { + score = deptDivided.subtract(provinceDivided) + .multiply(BigDecimal.valueOf(100L)) + .add(BigDecimal.valueOf(vo.getMaxScore())); + score = score.compareTo(BigDecimal.ZERO) >= 0 ? score : BigDecimal.ZERO; } return score.doubleValue(); } @@ -391,4 +652,130 @@ } return field; } + + private Double getScoreByMonth(BigDecimal deptDividendValue, BigDecimal deptDivisorValue, + BigDecimal currentMonth, BasicDataConfigVO vo) { + double score; + BigDecimal divided1 = deptDividendValue.divide(deptDivisorValue, 2, + RoundingMode.HALF_UP); + BigDecimal divided2 = currentMonth.divide(BigDecimal.valueOf(12D), 2, + RoundingMode.HALF_UP); + if (divided1.compareTo( + currentMonth.divide(BigDecimal.valueOf(12D), 2, RoundingMode.HALF_UP)) + < 0) { + BigDecimal add = divided1.subtract(divided2) + .multiply(BigDecimal.valueOf(100D)) + .divide(BigDecimal.valueOf(5D), 2, + RoundingMode.HALF_UP) + .add(BigDecimal.valueOf(vo.getMaxScore())); + score = add.compareTo(BigDecimal.ZERO) < 0 ? 0D : add.doubleValue(); + } else { + score = vo.getMaxScore(); + } + return score; + } + + private Double getTextFieldScore(Map<Long, TbBasicDataField> deptFieldsMap, + BasicDataFieldEnum key, + BasicDataConfigVO vo) { + double score = 0D; + TbBasicDataField tbBasicDataField = deptFieldsMap.get( + key.getCode()); + if (Objects.isNull(tbBasicDataField) || StringUtils.isBlank( + tbBasicDataField.getFieldValue())) { + throw new ServiceException(String.format("字段【%s】的数据缺失,请修改后再试", + key.getDesc())); + } + score = tbBasicDataField.getFieldValue().equals("绿") ? vo.getMaxScore() + : tbBasicDataField.getFieldValue().equals("黄") ? 6D + : tbBasicDataField.getFieldValue().equals("橙") ? 3D : 0D; + return score; + } + + @Override + public void subtractScoreWithFixedRules(String deptAreaCode) throws Exception { + String nowQuarter = DateUtils.getNowQuarter(); + TbBasicData tbBasicData = tbBasicDataMapper.selectOne( + Wrappers.lambdaQuery(TbBasicData.class).eq(TbBasicData::getQuarter, nowQuarter) + .eq(TbBasicData::getDeptAreaCode, deptAreaCode)); + if (Objects.isNull(tbBasicData)) { + return; + } + List<TbScore> scoreList = tbScoreService.lambdaQuery() + .eq(TbScore::getBasicDataId, tbBasicData.getId()).list(); + List<BasicDataConfigVO> fixedRulesConfigList = tbBasicDataConfigService.getSubsractRulesConfigList(); + List<TbQuestion> list = tbQuestionMapper.selectList( + Wrappers.lambdaQuery(TbQuestion.class) + .eq(TbQuestion::getQuarter, nowQuarter) + .eq(TbQuestion::getDeptAreaCode, deptAreaCode)); + List<TbQuestion> questionList; + + for (BasicDataConfigVO vo : fixedRulesConfigList) { + double score = 0D; + switch (Objects.requireNonNull(IndicatorItemEnum.getEnumByCode(vo.getId()))) { + case INDICATOR_ITEM5: + // 5: 财政经济形势-重大财税政策落实情况-减税降费落实情况 + questionList = getQuestList(list, deptAreaCode, + QuestionTypeEnum.ENUM0); + score = CollUtils.isNotEmpty(questionList) ? -5D : 0D; + break; + case INDICATOR_ITEM6: + // 6:财政经济形势-重大财税政策落实情况-其他重大政策落实情况 + questionList = getQuestList(list, deptAreaCode, + QuestionTypeEnum.ENUM1); + score = CollUtils.isNotEmpty(questionList) ? questionList.size() * -3D : 0D; + break; + case INDICATOR_ITEM11: + // 11:预算管理方面-强化预算约束-存量资金盘活 + questionList = getQuestList(list, deptAreaCode, + QuestionTypeEnum.ENUM3); + score = CollUtils.isNotEmpty(questionList) ? -3D : 0D; + break; + case INDICATOR_ITEM12: + // 12:预算管理方面-强化预算约束-不得无预算、超预算拨款 + questionList = getQuestList(list, deptAreaCode, + QuestionTypeEnum.ENUM4); + score = CollUtils.isNotEmpty(questionList) ? -3D : 0D; + break; + case INDICATOR_ITEM23: + // 23:风险防控方面-债务管理-隐性债务化解 + questionList = getQuestList(list, deptAreaCode, + QuestionTypeEnum.ENUM6); + score = CollUtils.isNotEmpty(questionList) ? vo.getMaxScore() : -3D; + break; + case INDICATOR_ITEM24: + // 24:风险防控方面-债务管理-日常监督发现问题 + questionList = getQuestList(list, deptAreaCode, + QuestionTypeEnum.ENUM7); + if (CollUtils.isNotEmpty(questionList)) { + score = -18D + questionList.size() * -1D; + } + case INDICATOR_ITEM25: + // 25:风险防控方面-日常监督发现问题 + questionList = getQuestList(list, deptAreaCode, + QuestionTypeEnum.ENUM8); + if (CollUtils.isNotEmpty(questionList)) { + score = questionList.size() * -1D; + } + break; + + } + Optional<TbScore> scoreOpt = scoreList.stream() + .filter(s -> s.getBasicDataConfigId().equals(vo.getId())) + .findFirst(); + if (scoreOpt.isPresent()) { + TbScore tbScore = scoreOpt.get(); + tbScore.setScore(score); + } else { + TbScore tbScore = new TbScore(); + tbScore.setScore(score); + tbScore.setBasicDataId(tbBasicData.getId()); + tbScore.setBasicDataConfigId(vo.getId()); + scoreList.add(tbScore); + } + } + if (CollUtils.isNotEmpty(scoreList)) { + tbScoreService.saveOrUpdateBatch(scoreList); + } + } } diff --git a/finance-system/src/main/java/com/finance/system/service/impl/SysUserServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/SysUserServiceImpl.java index 0bdf529..ce57ad9 100644 --- a/finance-system/src/main/java/com/finance/system/service/impl/SysUserServiceImpl.java +++ b/finance-system/src/main/java/com/finance/system/service/impl/SysUserServiceImpl.java @@ -7,7 +7,9 @@ import com.finance.common.constant.UserConstants; import com.finance.common.core.domain.entity.SysRole; import com.finance.common.core.domain.entity.SysUser; +import com.finance.common.enums.UserTypeEnum; import com.finance.common.exception.ServiceException; +import com.finance.common.utils.BeanUtils; import com.finance.common.utils.SecurityUtils; import com.finance.common.utils.StringUtils; import com.finance.common.utils.bean.BeanValidators; @@ -23,6 +25,7 @@ import com.finance.system.query.SysUserQuery; import com.finance.system.service.ISysConfigService; import com.finance.system.service.ISysUserService; +import com.finance.system.vo.DeptVO; import com.finance.system.vo.SysUserVO; import java.util.ArrayList; import java.util.List; @@ -612,4 +615,14 @@ return userMapper.selectPlatUserByUserName(userName); } + @Override + public List<DeptVO> queryDeptListByName(String deptName) { + List<SysUser> list = this.lambdaQuery() + .eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT.getCode()) + .like(StringUtils.isNotBlank(deptName), SysUser::getAreaName, + deptName) + .orderByDesc(SysUser::getCreateTime) + .list(); + return BeanUtils.copyList(list, DeptVO.class); + } } diff --git a/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataConfigServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataConfigServiceImpl.java index 8d7d98d..2334a5b 100644 --- a/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataConfigServiceImpl.java +++ b/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataConfigServiceImpl.java @@ -266,25 +266,59 @@ @Override public List<BasicDataConfigVO> getFixedRulesConfigList() { List<TbBasicDataConfig> configList = this.lambdaQuery() - .le(TbBasicDataConfig::getId, 24).list(); + .le(TbBasicDataConfig::getId, 25).list(); Map<Long, TbBasicDataCategory> configCategoryMap = tbBasicDataCategoryService.list() .stream() .collect(Collectors.toMap(TbBasicDataCategory::getId, Function.identity())); List<BasicDataConfigVO> configVOList = BeanUtils.copyList(configList, BasicDataConfigVO.class); - configVOList = configVOList.stream().map(c -> { + configVOList = configVOList.stream().peek(c -> { TbBasicDataCategory tbBasicDataCategory2 = configCategoryMap.get( c.getBasicDataCategoryId()); if (Objects.nonNull(tbBasicDataCategory2)) { - c.setBasicDataCategory(tbBasicDataCategory2.getBasicDataCategoryName()); - TbBasicDataCategory tbBasicDataCategory1 = configCategoryMap.get( - tbBasicDataCategory2.getParentId()); - if (Objects.nonNull(tbBasicDataCategory1)) { - c.setBasicDataCategoryOne(tbBasicDataCategory1.getBasicDataCategoryName()); + if (tbBasicDataCategory2.getParentId() == -1) { + c.setBasicDataCategoryOne(tbBasicDataCategory2.getBasicDataCategoryName()); + } else { + c.setBasicDataCategory(tbBasicDataCategory2.getBasicDataCategoryName()); + TbBasicDataCategory tbBasicDataCategory1 = configCategoryMap.get( + tbBasicDataCategory2.getParentId()); + if (Objects.nonNull(tbBasicDataCategory1)) { + c.setBasicDataCategoryOne( + tbBasicDataCategory1.getBasicDataCategoryName()); + } } } - return c; + }).collect(Collectors.toList()); + return configVOList; + } + + @Override + public List<BasicDataConfigVO> getSubsractRulesConfigList() { + List<TbBasicDataConfig> configList = this.lambdaQuery() + .in(TbBasicDataConfig::getId, 5, 6, 11, 12, 23, 24, 25).list(); + Map<Long, TbBasicDataCategory> configCategoryMap = tbBasicDataCategoryService.list() + .stream() + .collect(Collectors.toMap(TbBasicDataCategory::getId, + Function.identity())); + List<BasicDataConfigVO> configVOList = BeanUtils.copyList(configList, + BasicDataConfigVO.class); + configVOList = configVOList.stream().peek(c -> { + TbBasicDataCategory tbBasicDataCategory2 = configCategoryMap.get( + c.getBasicDataCategoryId()); + if (Objects.nonNull(tbBasicDataCategory2)) { + if (tbBasicDataCategory2.getParentId() == -1) { + c.setBasicDataCategoryOne(tbBasicDataCategory2.getBasicDataCategoryName()); + } else { + c.setBasicDataCategory(tbBasicDataCategory2.getBasicDataCategoryName()); + TbBasicDataCategory tbBasicDataCategory1 = configCategoryMap.get( + tbBasicDataCategory2.getParentId()); + if (Objects.nonNull(tbBasicDataCategory1)) { + c.setBasicDataCategoryOne( + tbBasicDataCategory1.getBasicDataCategoryName()); + } + } + } }).collect(Collectors.toList()); return configVOList; } diff --git a/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java index 6c97002..984e34b 100644 --- a/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java +++ b/finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java @@ -50,6 +50,7 @@ import com.finance.system.query.ScoreQuery; 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; import com.finance.system.service.TbBasicDataFieldService; @@ -60,6 +61,7 @@ import com.finance.system.service.TbOperLogService; import com.finance.system.service.TbScoreService; import com.finance.system.utils.FieldBuildUtil; +import com.finance.system.vo.BasicDataConfigVO; import com.finance.system.vo.BasicDataReportingVO; import com.finance.system.vo.CurrentFieldsAllVO; import com.finance.system.vo.CurrentFieldsDetailVO; @@ -80,6 +82,7 @@ import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -116,6 +119,7 @@ private final TbDataScreenScoreService tbDataScreenScoreService; private final TbDataScreenConfigService tbDataScreenConfigService; private final AsyncService asyncService; + private final TbBasicDataCategoryService tbBasicDataCategoryService; public static void setFieldValues( List<FieldsTreeVO> fields, Map<Long, TbBasicDataField> fieldMap) { @@ -162,6 +166,10 @@ Wrappers.<TbBasicData>lambdaQuery() .eq(TbBasicData::getDeptAreaCode, dept.getAreaCode()) .between(TbBasicData::getReportingTime, quarterStart, quarterEnd)); + if (Objects.nonNull(basicData)) { + vo.setCreateTime(basicData.getCreateTime()); + vo.setUpdateTime(basicData.getUpdateTime()); + } // 查询需要填写的字段 List<TbField> list = tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list(); @@ -231,6 +239,8 @@ if (basicDataOpt.isPresent()) { tbBasicData.setId(basicDataOpt.get().getId()); tbBasicData.setDeptAreaCode(areaCode); + tbBasicData.setQuarter(basicDataOpt.get().getQuarter()); + tbBasicData.setUpdateTime(new Date()); this.updateById(tbBasicData); // 查询该基础数据的动态字端 List<TbBasicDataField> originFields = tbBasicDataFieldService.lambdaQuery() @@ -321,12 +331,13 @@ tbBasicData.setStatus(ReportingStatusEnum.FILLED); this.updateById(tbBasicData); } - if (ReportingStatusEnum.FILLED.equals(tbBasicData.getStatus())) { + /*if (ReportingStatusEnum.FILLED.equals(tbBasicData.getStatus())) { CompletableFuture.runAsync(() -> { calculateScore(tbBasicData, tbBasicDataFields); calculateScreenScore(tbBasicData, tbBasicDataFields); }); - } + }*/ + asyncService.calculateScoreWithFixedRules(tbBasicData, tbBasicDataFields, fieldList); } private void calculateScreenScore(TbBasicData tbBasicData, @@ -565,7 +576,7 @@ } if (CalculateTypeEnum.PERCENTAGE.equals( textAndPercentage.getCalculateType())) { - for (Map.Entry<String, String> stringStringEntry : scoreMap.entrySet()) { + for (Entry<String, String> stringStringEntry : scoreMap.entrySet()) { String[] split = stringStringEntry.getKey().split("_"); double v = Double.parseDouble( textAndPercentageData.getFieldValue()); @@ -630,7 +641,7 @@ vo.setPhoneNumber(item.getPhoneNumber()); vo.setPersonInCharge(item.getPersonInCharge()); }); - // 查询动态字段 + /* // 查询动态字段 List<TbBasicDataField> basicDataFields = tbBasicDataFieldService .lambdaQuery() @@ -687,7 +698,44 @@ fieldsTreeVO.setCategory(Boolean.FALSE); root.add(fieldsTreeVO); }); - vo.setFields(root); + vo.setFields(root);*/ + // 查询需要填写的字段 + List<TbField> list = + tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list(); + List<FieldsTreeVO> roots = new ArrayList<>(); + FieldsTreeVO fieldsTreeVO = new FieldsTreeVO(); + fieldsTreeVO.setId(-1L); + fieldsTreeVO.setName("转移支付规模"); + fieldsTreeVO.setCategory(Boolean.FALSE); + FieldsTreeVO fieldsTreeVO2 = new FieldsTreeVO(); + fieldsTreeVO2.setId(-2L); + fieldsTreeVO2.setName("当期GDP"); + fieldsTreeVO2.setCategory(Boolean.FALSE); + roots.add(fieldsTreeVO); + roots.add(fieldsTreeVO2); + if (CollUtils.isNotEmpty(list)) { + FieldBuildUtil.buildTreeFromTbFieldList(list, roots); + FieldsTreeVO remark = new FieldsTreeVO(); + remark.setId(-3L); + remark.setName("备注"); + roots.add(remark); + vo.setFields(roots); + } + vo.setStatus(basicData.getStatus()); + // 查询已填报数据 包含数据缺失和已填报 + List<TbBasicDataField> basicDataFields = + tbBasicDataFieldService + .lambdaQuery() + .eq(TbBasicDataField::getBasicDataId, basicData.getId()) + .list(); + + if (CollUtils.isNotEmpty(basicDataFields)) { + Map<Long, TbBasicDataField> fieldMap = + basicDataFields.stream() + .collect(Collectors.toMap(TbBasicDataField::getFieldId, + Function.identity())); + setFieldValues(vo.getFields(), fieldMap); + } return R.ok(vo); } @@ -1082,6 +1130,9 @@ String nowQuarter = DateUtils.getNowQuarter(); this.updateById(basicData); // 查询该基础数据的动态字端 + // 查询需要填写的动态字段 + List<TbField> fieldList = + tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list(); List<TbBasicDataField> originFields = tbBasicDataFieldService.lambdaQuery() .eq(TbBasicDataField::getBasicDataId, basicData.getId()).list(); Set<Long> fieldIdList = originFields.stream().map(TbBasicDataField::getFieldId) @@ -1097,42 +1148,45 @@ // 保存基础数据动态字段数据 List<TbBasicDataField> tbBasicDataFields = BeanUtils.copyList(dto.getFields(), TbBasicDataField.class); - - for (TbBasicDataField item : tbBasicDataFields) { - TbField tbField = fieldMap.get(item.getFieldId()); - Integer numMax = tbField.getNumMax(); - Integer numMin = tbField.getNumMin(); - Integer textMaxNum = tbField.getTextMaxNum(); - Integer textMinNum = tbField.getTextMinNum(); - if (FieldTypeEnum.NUMBER.equals(tbField.getFieldType()) && Objects.nonNull( - numMax) && Objects.nonNull(numMin)) { - double fieldValue = Double.parseDouble(item.getFieldValue()); - if (fieldValue < numMin || fieldValue > numMax) { - throw new ServiceException( - String.format("字段%s的值不在范围%d-%d内", tbField.getFieldName(), - numMin, numMax)); - } - } - if (FieldTypeEnum.TEXT.equals(tbField.getFieldType()) - && FieldInputTypeEnum.MANUAL_INPUT.equals(tbField.getTextInputType()) - && Objects.nonNull( - textMaxNum) && Objects.nonNull(textMinNum)) { - String fieldValue = item.getFieldValue(); - if (fieldValue.length() < numMin || fieldValue.length() > numMax) { - throw new ServiceException( - String.format("字段%s的值的长度不在范围%d-%d内", tbField.getFieldName(), - textMinNum, textMaxNum)); - } - } - } - tbBasicDataFields.forEach( - item -> { - item.setBasicDataId(tbBasicData.getId()); + tbBasicDataFields = tbBasicDataFields.stream().filter(f -> Objects.nonNull(f.getFieldId())) + .peek(item -> { TbField tbField = fieldMap.get(item.getFieldId()); if (Objects.nonNull(tbField)) { + Integer numMax = tbField.getNumMax(); + Integer numMin = tbField.getNumMin(); + Integer textMaxNum = tbField.getTextMaxNum(); + Integer textMinNum = tbField.getTextMinNum(); + if (FieldTypeEnum.NUMBER.equals(tbField.getFieldType()) && Objects.nonNull( + numMax) && Objects.nonNull(numMin)) { + double fieldValue = Double.parseDouble(item.getFieldValue()); + if (fieldValue < numMin || fieldValue > numMax) { + throw new ServiceException( + String.format("字段%s的值不在范围%d-%d内", + tbField.getFieldName(), + numMin, numMax)); + } + } + if (FieldTypeEnum.TEXT.equals(tbField.getFieldType()) + && FieldInputTypeEnum.MANUAL_INPUT.equals( + tbField.getTextInputType()) + && Objects.nonNull( + textMaxNum) && Objects.nonNull(textMinNum)) { + String fieldValue = item.getFieldValue(); + if (fieldValue.length() < numMin || fieldValue.length() > numMax) { + throw new ServiceException( + String.format("字段%s的值的长度不在范围%d-%d内", + tbField.getFieldName(), + textMinNum, textMaxNum)); + } + } + item.setBasicDataId(tbBasicData.getId()); item.setFieldName(tbField.getFieldName()); + if (StringUtils.isNotBlank(item.getFieldValue())) { + item.setFieldValue(item.getFieldValue().replace(",", "")); + } } - }); + + }).collect(Collectors.toList()); // 添加固定字段 转移支付规模、当期GDP TbBasicDataField transferPaymentScale = new TbBasicDataField(); transferPaymentScale.setBasicDataId(tbBasicData.getId()); @@ -1153,12 +1207,182 @@ tbBasicDataFieldService.remove( Wrappers.<TbBasicDataField>lambdaQuery() .eq(TbBasicDataField::getBasicDataId, tbBasicData.getId())); + Optional<TbBasicDataField> any = tbBasicDataFields.stream() + .filter(t -> StringUtils.isBlank(t.getFieldValue())).findAny(); + if (!any.isPresent()) { + tbBasicData.setStatus(ReportingStatusEnum.FILLED); + this.updateById(tbBasicData); + } tbBasicDataFieldService.saveBatch(tbBasicDataFields); - if (ReportingStatusEnum.FILLED.equals(tbBasicData.getStatus())) { + /*if (ReportingStatusEnum.FILLED.equals(tbBasicData.getStatus())) { CompletableFuture.runAsync(() -> { calculateScore(tbBasicData, tbBasicDataFields); calculateScreenScore(tbBasicData, tbBasicDataFields); }); + }*/ + asyncService.calculateScoreWithFixedRules(tbBasicData, tbBasicDataFields, fieldList); + } + + @Override + public void exportDataV2(List<String> quarterList) throws IOException { + { + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + String fileName = "财政运行分析指标评价表"; + response.setHeader( + "Content-disposition", + "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xlsx"); + List<TbBasicData> tbBasicDataList = this.lambdaQuery() + .in(TbBasicData::getQuarter, quarterList) + .groupBy(TbBasicData::getQuarter).list(); + // 符合导出条件的基础数据 + List<TbBasicData> tbBasicDataListAll = this.lambdaQuery() + .in(TbBasicData::getQuarter, quarterList) + .list(); + Set<Long> basicDataSet = tbBasicDataListAll.stream().map(TbBasicData::getId) + .collect(Collectors.toSet()); + List<TbScore> scoreList = null; + if (CollUtils.isNotEmpty(basicDataSet)) { + // 符合导出条件的得分 + scoreList = tbScoreService.lambdaQuery() + .in(TbScore::getBasicDataId, basicDataSet) + .list(); + } + List<BasicDataConfigVO> configVOList = tbBasicDataConfigService.getFixedRulesConfigList(); + // 基础数据id列表 + Set<Long> basicDataIdList = tbBasicDataList.stream().map(TbBasicData::getId) + .collect(Collectors.toSet()); + // 涉及到的部门编码 + Set<String> userAreaCodeList = tbBasicDataList.stream() + .map(TbBasicData::getDeptAreaCode) + .collect(Collectors.toSet()); + // 用户信息map + Map<String, SysUser> userMap = sysUserService.lambdaQuery() + .in(SysUser::getAreaCode, userAreaCodeList).list().stream() + .collect(Collectors.toMap(SysUser::getAreaCode, e -> e)); + // 构建Excel写对象 + try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()) + .registerWriteHandler(new CustomCellWriteHandler()) + .registerWriteHandler(EasyExcelUtil.getStyleStrategy()).build()) { + WriteSheet writeSheet; + // 遍历季度基础数据 + for (String quarter : quarterList) { + List<TbBasicData> currentBasicData = tbBasicDataListAll.stream() + .filter(d -> d.getQuarter().equals(quarter)).collect( + Collectors.toList()); + Set<Long> cbdIdSet = currentBasicData.stream().map(TbBasicData::getId) + .collect(Collectors.toSet()); + + // 表头 + List<List<String>> head = headV2(configVOList); + if (CollUtils.isNotEmpty(scoreList)) { + List<List<Object>> dataList = dataListV2(scoreList, currentBasicData, + userMap, head); + // 构建sheet对象 + writeSheet = EasyExcel.writerSheet(quarter).head(head).build(); + // 写出sheet数据 + excelWriter.write(dataList, writeSheet); + } + } + } } } + + private List<List<String>> headV2(List<BasicDataConfigVO> configVOList) { + List<List<String>> headTitles = Lists.newArrayList(); + // 固定字段 + headTitles.add(Lists.newArrayList("财政运行分析指标评价表", "财政运行分析指标评价表", + "财政运行分析指标评价表", "财政运行分析指标评价表", "财政运行分析指标评价表", + "财政运行分析指标评价表", "财政运行分析指标评价表", "财政运行分析指标评价表", + "财政运行分析指标评价表", "财政运行分析指标评价表", "财政运行分析指标评价表", + "财政运行分析指标评价表", "财政运行分析指标评价表", "财政运行分析指标评价表", + "财政运行分析指标评价表", "财政运行分析指标评价表", "财政运行分析指标评价表", + "财政运行分析指标评价表", "财政运行分析指标评价表", "财政运行分析指标评价表", + "财政运行分析指标评价表", "财政运行分析指标评价表", "财政运行分析指标评价表", + "财政运行分析指标评价表", "财政运行分析指标评价表")); + headTitles.add(Lists.newArrayList("地区")); + headTitles.add(Lists.newArrayList("级次")); + headTitles.add(Lists.newArrayList("得分合计")); + headTitles.add(Lists.newArrayList("一级指标", "财政经济形式", + "预算管理方面", "预算执行方面", "风险防控方面")); + headTitles.add( + Lists.newArrayList("分值", "27", "重大财税政策落实情况", + "26", "20", "27")); + headTitles.add(Lists.newArrayList("二级指标", "收入占GDP比重", + "收入执行率", "收入质量", "重大财税落实情况", "重大财税政策落实情况", "转移支付", + "\"三保\"保障情况", "强化预算约束", "库款管理", "预算执行情况", "中央直达资金", + "暂付款管理", "债务管理", "日常监督发现问题")); + headTitles.add(Lists.newArrayList("分值", "8", "11", "8", "--", "重大财税政策落实情况", "9", + "17", "--", "6", "8", "6", "9", "18", "日常监督发现问题")); + headTitles.add( + Lists.newArrayList("三级指标", "地方一般公共预算收入占GDP的比重", + "地方一般公共预算收入执行进度(地方一般公共预算收入/年初预算或调整预算)", + "政府性基金预算收入执行进度(政府性基金预算收入/年初预算或调整预算)", + "税收收入占地方一般公共预算收入比重", "减税降费落实情况", + "其他重大政策落实情况", "中央转移支付占地方可用财力比重", + "“三保”年初预算保障情况", "“三保”需求占可用财力的比重", + "“三保”支出保障情况", "存量资金盘活", "不得无预算、超预算拨款", + "库款保障水平", "一般公共预算支出执行率", "政府性基金预算支出执行率", + "中央直达资金支付进度", "直达资金规范使用", "违规新增暂付款", + "暂付款累计余额", "暂付款消化", "法定债务率", "隐性债务率", "隐性债务化解", + "日常监督发现问题", "日常监督发现问题")); + headTitles.add( + Lists.newArrayList("分值", "8", "7", "4", "8", "--", "--", "9", "6", "8", "3", "——", + "--", "6", "5", "3", "3", "3", "3", "3", "3", "9", "9", "--", "--", "--")); + + return headTitles; + } + + private List<List<Object>> dataListV2(List<TbScore> scoreList, + List<TbBasicData> list, + Map<String, SysUser> userMap, + List<List<String>> head) { + // 所有数据集合 + List<List<Object>> excellist = new ArrayList<>(); + // 构建栏号行 + List<Object> columnNo = Lists.newArrayList("栏号"); + for (int i = 1; i < head.size(); i++) { + columnNo.add(String.valueOf(i)); + } + excellist.add(columnNo); + // 动态字段数据行 + for (TbBasicData tbBasicData : list) { + // 转换为map,方便遍历的时候取 + /* Map<Long, TbBasicDataField> basicDataFieldMap = tbBasicDataFieldList.stream() + .filter(item -> tbBasicData.getId().equals(item.getBasicDataId())) + .collect(Collectors.toMap(TbBasicDataField::getFieldId, e -> e)); + SysUser sysUser = userMap.get(tbBasicData.getDeptAreaCode()); + if (CollUtils.isEmpty(basicDataFieldMap) || Objects.isNull(sysUser)) { + continue; + }*/ + /* List<Object> valueList = Lists.newArrayList(sysUser.getAreaName(), + tbBasicData.getQuarter()); + TbBasicDataField transferPaymentScale = basicDataFieldMap.get(-1L); + valueList.add( + Objects.nonNull(transferPaymentScale) + ? transferPaymentScale.getFieldValue() + : ""); + TbBasicDataField currentGdp = basicDataFieldMap.get(-2L); + valueList.add( + Objects.nonNull(currentGdp) + ? currentGdp.getFieldValue() + : ""); + for (TbField tbField : fieldList) { + TbBasicDataField tbBasicDataField = basicDataFieldMap.get(tbField.getId()); + valueList.add( + Objects.nonNull(tbBasicDataField) + ? tbBasicDataField.getFieldValue() + : ""); + } + excellist.add(valueList); + valueList.add(tbBasicData.getRemark());*/ + } + return excellist; + } + + @Override + public List<FieldAndScoreDataVO> getFieldAndScoreData(String areaCode, String nowQuarter, + Integer yearType) { + return baseMapper.getFieldAndScoreData(areaCode, nowQuarter, yearType); + } } diff --git a/finance-system/src/main/java/com/finance/system/service/impl/TbDataScreenConfigServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/TbDataScreenConfigServiceImpl.java index 8647d2e..6aaa352 100644 --- a/finance-system/src/main/java/com/finance/system/service/impl/TbDataScreenConfigServiceImpl.java +++ b/finance-system/src/main/java/com/finance/system/service/impl/TbDataScreenConfigServiceImpl.java @@ -63,20 +63,20 @@ if (dto.areRiskLevelsDistinct()) { throw new ServiceException("得分范围不能重叠"); } - //查询是否有该指标配置 + // 查询是否有该指标配置 TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery() .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.RISK_LEVEL) .oneOpt().orElseGet(() -> BeanUtils.copyBean(dto, TbDataScreenConfig.class)); List<CalculateItemDTO> calculateItemList = dto.getCalculateItemList(); - validateCalculateItemList(calculateItemList); + // validateCalculateItemList(calculateItemList); String numberCalculateFormulaJsonStr = JSON.toJSONString(calculateItemList); - tbDataScreenConfig.setCalculateFormula(numberCalculateFormulaJsonStr); + // tbDataScreenConfig.setCalculateFormula(numberCalculateFormulaJsonStr); tbDataScreenConfig.setType(DataScreenConfigEnum.RISK_LEVEL); this.saveOrUpdate(tbDataScreenConfig); DataScreenConfigVO dataScreenConfigVO = BeanUtils.copyBean(tbDataScreenConfig, DataScreenConfigVO.class); - dataScreenConfigVO.setRateCalculateList(calculateItemList); + // dataScreenConfigVO.setRateCalculateList(calculateItemList); return dataScreenConfigVO; } @@ -99,11 +99,11 @@ if (result) { throw new ServiceException("计算表达式有误,请修改"); } - //参数校验 + // 参数校验 String numberCalculateFormulaStr = calculateItemList.stream() .map(CalculateItemDTO::getContent) .collect(Collectors.joining()); - //校验表达式是否正确 + // 校验表达式是否正确 try { CalculateUtil.calculate(numberCalculateFormulaStr); } catch (Exception e) { @@ -111,7 +111,7 @@ } } - //表达式校验 + // 表达式校验 public boolean hasConsecutiveDuplicates(List<CalculateItemDTO> calculateItemList) { return IntStream.range(1, calculateItemList.size()) .anyMatch(i -> calculateItemList.get(i - 1).getValueType() @@ -142,7 +142,7 @@ public List<DataScreenConfigVO> editDataIndicatorsConfig(List<DataIndicatorsUpdDTO> dtoList) { List<DataScreenConfigVO> vosList = new ArrayList<>(); for (DataIndicatorsUpdDTO dto : dtoList) { - //查询是否有该指标配置 + // 查询是否有该指标配置 TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery() .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.DATA_INDICATORS) .eq(TbDataScreenConfig::getSubType, @@ -173,7 +173,7 @@ List<FormalIndicatorsUpdDTO> dtoList) { List<DataScreenConfigVO> vosList = new ArrayList<>(); for (FormalIndicatorsUpdDTO dto : dtoList) { - //查询是否有该指标配置 + // 查询是否有该指标配置 TbDataScreenConfig tbDataScreenConfig = this.lambdaQuery() .eq(TbDataScreenConfig::getType, DataScreenConfigEnum.FORMAL_INDICATORS) .eq(TbDataScreenConfig::getSubType, diff --git a/finance-system/src/main/java/com/finance/system/service/impl/TbDeptServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/TbDeptServiceImpl.java index f929d61..5b09cdc 100644 --- a/finance-system/src/main/java/com/finance/system/service/impl/TbDeptServiceImpl.java +++ b/finance-system/src/main/java/com/finance/system/service/impl/TbDeptServiceImpl.java @@ -84,11 +84,11 @@ @Transactional(rollbackFor = Exception.class) public void importExcel(MultipartFile file) throws Exception { ImportParams importParams = new ImportParams(); - //表格标题行数,默认0 + // 表格标题行数,默认0 importParams.setTitleRows(1); - //是否需要校验上传的Excel + // 是否需要校验上传的Excel importParams.setNeedVerify(true); - //使用自定义校验规则 + // 使用自定义校验规则 importParams.setVerifyHandler(deptVerifyHandler); InputStream inputStream = file.getInputStream(); ExcelImportResult<DeptExcel> result = ExcelImportUtil.importExcelMore(inputStream, @@ -147,19 +147,19 @@ Date date = new Date(); Date quarterStart = DateUtil.beginOfQuarter(date); Date quarterEnd = DateUtil.endOfQuarter(date); - //判断当前时间是否在季度初1-15号 + // 判断当前时间是否在季度初1-15号 Instant instant = quarterStart.toInstant(); LocalDate quarterStartLocalDate = instant.atZone(ZoneId.systemDefault()).toLocalDate(); LocalDate fifteenDaysLimit = quarterStartLocalDate.plusDays(14); LocalDate now = LocalDate.now(); - //如果当前时间不在规定范围内:季度初1-15号 + // 如果当前时间不在规定范围内:季度初1-15号 if (now.isAfter(quarterStartLocalDate) || now.isBefore(fifteenDaysLimit)) { - //查询所有的部门 + // 查询所有的部门 List<SysUser> list = sysUserService.lambdaQuery() .eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT.getCode()).list(); Set<String> deptAreaCodeList = list.stream().map(SysUser::getAreaCode) .collect(Collectors.toSet()); - //查询当前季度填报了数据的部门 + // 查询当前季度填报了数据的部门 List<TbBasicData> filledBasicData = tbBasicDataService.lambdaQuery() .between(TbBasicData::getReportingTime, quarterStartLocalDate, fifteenDaysLimit) .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED).list(); diff --git a/finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java index 335f6db..a99170e 100644 --- a/finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java +++ b/finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java @@ -1,9 +1,12 @@ package com.finance.system.service.impl; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.utils.BeanUtils; +import com.finance.common.utils.CollUtils; import com.finance.common.utils.DateUtils; import com.finance.common.utils.StringUtils; import com.finance.system.domain.TbQuestion; @@ -11,9 +14,17 @@ import com.finance.system.dto.update.QuestionUpdDTO; import com.finance.system.mapper.TbQuestionMapper; import com.finance.system.query.QuestionQuery; +import com.finance.system.service.AsyncService; +import com.finance.system.service.ISysUserService; import com.finance.system.service.TbQuestionService; import com.finance.system.vo.QuestionVO; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** * <p> @@ -24,19 +35,27 @@ * @since 2024-03-13 */ @Service +@RequiredArgsConstructor public class TbQuestionServiceImpl extends ServiceImpl<TbQuestionMapper, TbQuestion> implements TbQuestionService { + private final ISysUserService sysUserService; + private final AsyncService asyncService; + @Override + @Transactional(rollbackFor = Exception.class) public void addQuestion(QuestionDTO dto) throws Exception { TbQuestion tbQuestion = BeanUtils.copyBean(dto, TbQuestion.class); + tbQuestion.setType(dto.getType()); tbQuestion.setQuarter(DateUtils.getNowQuarter()); this.save(tbQuestion); + asyncService.subtractScoreWithFixedRules(dto.getDeptAreaCode()); } @Override public void editQuestion(QuestionUpdDTO dto) { TbQuestion tbQuestion = BeanUtils.copyBean(dto, TbQuestion.class); + tbQuestion.setType(dto.getType()); this.updateById(tbQuestion); } @@ -48,6 +67,26 @@ .like(StringUtils.isNotBlank(dto.getTitle()), TbQuestion::getTitle, dto.getTitle()) .orderByDesc(TbQuestion::getCreateTime) .page(new Page<>(dto.getPageNum(), dto.getPageSize())); - return PageDTO.of(page, QuestionVO.class); + if (StringUtils.isEmpty(page.getRecords())) { + return PageDTO.empty(page.getTotal(), page.getPages()); + } + PageDTO<QuestionVO> questionVOPageDTO = PageDTO.of(page, QuestionVO.class); + Set<String> areaCodeSet = questionVOPageDTO.getList().stream() + .map(QuestionVO::getDeptAreaCode) + .collect(Collectors.toSet()); + if (CollUtils.isNotEmpty(areaCodeSet)) { + List<SysUser> sysUsers = sysUserService.list( + Wrappers.lambdaQuery(SysUser.class).in(SysUser::getAreaCode, areaCodeSet)); + Map<String, String> deptNameMap = sysUsers.stream() + .collect(Collectors.toMap(SysUser::getAreaCode, SysUser::getAreaName)); + if (CollUtils.isNotEmpty(deptNameMap)) { + for (QuestionVO questionVO : questionVOPageDTO.getList()) { + String deptName = deptNameMap.get(questionVO.getDeptAreaCode()); + questionVO.setDeptName(StringUtils.isNotBlank(deptName) ? deptName : ""); + } + } + } + + return questionVOPageDTO; } } diff --git a/finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java b/finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java index d293948..ed22d8b 100644 --- a/finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java +++ b/finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java @@ -18,6 +18,8 @@ import com.finance.system.service.TbBasicDataConfigService; import com.finance.system.service.TbScoreService; import com.finance.system.vo.DeptCalculateDetailVO; +import com.finance.system.vo.RiskMapVO; +import com.finance.system.vo.RiskRankingVO; import com.finance.system.vo.ScoreCalculateDetailVO; import com.finance.system.vo.ScoreDetailVO; import com.finance.system.vo.ScoreRankVO; @@ -60,7 +62,7 @@ @Override public ScoreCalculateDetailVO scoreCalculateDetail(ScoreCalculateDetailQuery query) { - //查询计算类型 + // 查询计算类型 TbBasicDataConfig config = basicDataConfigService.getById(query.getId()); if (Objects.isNull(config)) { throw new ServiceException("非法参数"); @@ -96,7 +98,7 @@ @Override public ScoreCalculateDetailVO fieldsDetail(CalculateDetailQuery query, List<SysUser> countyList) { - //查询计算类型 + // 查询计算类型 TbBasicDataConfig config = basicDataConfigService.getById(query.getId()); if (Objects.isNull(config)) { throw new ServiceException("非法参数"); @@ -116,4 +118,24 @@ vo.setList(pageVO.getRecords()); return vo; } + + @Override + public List<RiskMapVO> getCurrentScoreList(String nowQuarter, String areaCode) { + return baseMapper.getCurrentScoreList(nowQuarter, areaCode); + } + + @Override + public List<RiskRankingVO> queryRiskRanking(String nowQuarter) { + return baseMapper.queryRiskRanking(nowQuarter); + } + + /** + * @param areaCode 区划代码 + * @param yearType 年份类型 1=今年 2=去年 + * @return + */ + @Override + public List<RiskMapVO> getScoreByYearType(String areaCode, Integer yearType) { + return baseMapper.getScoreByYearType(areaCode, yearType); + } } diff --git a/finance-system/src/main/java/com/finance/system/vo/DataAnalysisVO.java b/finance-system/src/main/java/com/finance/system/vo/DataAnalysisVO.java index a941a0f..79d5fee 100644 --- a/finance-system/src/main/java/com/finance/system/vo/DataAnalysisVO.java +++ b/finance-system/src/main/java/com/finance/system/vo/DataAnalysisVO.java @@ -20,7 +20,7 @@ @ApiModelProperty("区划代码") private String areaCode; - + @ApiModelProperty("得分") private Double score; @@ -45,16 +45,16 @@ @ApiModelProperty("数据指标得分") private List<ScoreRateDataVO> scoreRateDataList; - @ApiModelProperty("字段列表一") + @ApiModelProperty("财政经济形势") private List<FieldAndScoreDataVO> scoreRateDataListOne; - @ApiModelProperty("字段列表二") + @ApiModelProperty("预算管理方面") private List<FieldAndScoreDataVO> scoreRateDataListTwo; - @ApiModelProperty("字段列表三") + @ApiModelProperty("预算执行方面") private List<FieldAndScoreDataVO> scoreRateDataListThree; - @ApiModelProperty("字段列表四") + @ApiModelProperty("风险防控方面") private List<FieldAndScoreDataVO> scoreRateDataListFour; } diff --git a/finance-system/src/main/java/com/finance/system/vo/DeptVO.java b/finance-system/src/main/java/com/finance/system/vo/DeptVO.java index f4769d1..1304bea 100644 --- a/finance-system/src/main/java/com/finance/system/vo/DeptVO.java +++ b/finance-system/src/main/java/com/finance/system/vo/DeptVO.java @@ -1,18 +1,18 @@ package com.finance.system.vo; +import com.finance.common.enums.AreaLevelEnum; import com.finance.common.enums.DisabledEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - import java.io.Serializable; +import lombok.Data; /** * @author mitao * @date 2024/3/13 */ @Data -@ApiModel(value="部门VO") +@ApiModel(value = "部门VO") public class DeptVO implements Serializable { private static final long serialVersionUID = 459136043020691805L; @@ -30,7 +30,7 @@ private String areaCode; @ApiModelProperty(value = "级次(省、市、县)") - private String areaLevel; + private AreaLevelEnum areaLevel; @ApiModelProperty(value = "县级标志(不包含直辖市的区 0:否 1:是)") private DisabledEnum countyFlag; diff --git a/finance-system/src/main/java/com/finance/system/vo/FieldAndScoreDataVO.java b/finance-system/src/main/java/com/finance/system/vo/FieldAndScoreDataVO.java index ad2c0c5..5a74699 100644 --- a/finance-system/src/main/java/com/finance/system/vo/FieldAndScoreDataVO.java +++ b/finance-system/src/main/java/com/finance/system/vo/FieldAndScoreDataVO.java @@ -19,6 +19,9 @@ @ApiModelProperty(value = "计算类型id") private Long id; + @ApiModelProperty(value = "区划代码") + private String deptAreaCode; + @ApiModelProperty("类型名称") private String typeName; @@ -34,4 +37,13 @@ @ApiModelProperty("分类id") private String basicDataCategoryId; + + @ApiModelProperty("一级指标") + private String levelOneIndicator; + + @ApiModelProperty("二级指标") + private String levelTwoIndicator; + + @ApiModelProperty("最大分值") + private Double levelOneIndicatorMaxScore; } diff --git a/finance-system/src/main/java/com/finance/system/vo/QuestionVO.java b/finance-system/src/main/java/com/finance/system/vo/QuestionVO.java index a73af62..ea6e626 100644 --- a/finance-system/src/main/java/com/finance/system/vo/QuestionVO.java +++ b/finance-system/src/main/java/com/finance/system/vo/QuestionVO.java @@ -1,12 +1,12 @@ package com.finance.system.vo; import com.fasterxml.jackson.annotation.JsonFormat; +import com.finance.common.enums.QuestionTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - import java.io.Serializable; import java.util.Date; +import lombok.Data; /** * @author mitao @@ -27,6 +27,15 @@ @ApiModelProperty(value = "问题内容") private String content; + @ApiModelProperty(value = "问题类型") + private QuestionTypeEnum type; + + @ApiModelProperty("区划代码") + private String deptAreaCode; + + @ApiModelProperty(value = "部门名称") + private String deptName; + @ApiModelProperty(value = "填报时间") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date createTime; diff --git a/finance-system/src/main/java/com/finance/system/vo/RiskMapVO.java b/finance-system/src/main/java/com/finance/system/vo/RiskMapVO.java index 24d12b4..611739b 100644 --- a/finance-system/src/main/java/com/finance/system/vo/RiskMapVO.java +++ b/finance-system/src/main/java/com/finance/system/vo/RiskMapVO.java @@ -1,5 +1,6 @@ package com.finance.system.vo; +import com.finance.common.enums.AreaLevelEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,8 +11,13 @@ @ApiModelProperty("区划代码") private String areaCode; + @ApiModelProperty("部门名称") private String areaName; + @ApiModelProperty("风险得分") private Double score; + + @ApiModelProperty("风险等级") + private AreaLevelEnum areaLevel; } \ No newline at end of file diff --git a/finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml b/finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml index db7b384..0ab121e 100644 --- a/finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml +++ b/finance-system/src/main/resources/mapper/system/TbBasicDataMapper.xml @@ -92,5 +92,33 @@ AND tbd.dept_area_code = #{areaCode} AND tbd.quarter = #{nowQuarter} </select> + <select id="getFieldAndScoreData" resultType="com.finance.system.vo.FieldAndScoreDataVO"> + SELECT tbdc.id, + tbdc.type_name, + ts.score, + tbdc.max_score, + tbd.dept_area_code, + tbdc.basic_data_category_id AS basicDataCategoryId, + tbdc2.basic_data_category_name AS levelTwoIndicator, + tbdc3.basic_data_category_name AS levelOneIndicator, + tbdc3.score AS levelOneIndicatorMaxScore + FROM tb_basic_data tbd + LEFT JOIN tb_score ts ON tbd.id = ts.basic_data_id + LEFT JOIN tb_basic_data_config tbdc ON ts.basic_data_config_id = tbdc.id + LEFT JOIN tb_basic_data_category tbdc2 ON tbdc2.id = tbdc.basic_data_category_id + LEFT JOIN tb_basic_data_category tbdc3 ON tbdc2.parent_id = tbdc3.id + <where> + tbd.`quarter` = #{nowQuarter} + <if test="areaCode!=null and areaCode != ''"> + AND tbd.dept_area_code = #{areaCode} + </if> + <if test="yearType==1"> + AND YEAR(tbd.reporting_time) = YEAR(CURDATE()) + </if> + <if test="yearType==2"> + AND YEAR(tbd.reporting_time) = YEAR(CURDATE())-1 + </if> + </where> + </select> </mapper> diff --git a/finance-system/src/main/resources/mapper/system/TbDataScreenScoreMapper.xml b/finance-system/src/main/resources/mapper/system/TbDataScreenScoreMapper.xml index 35df15e..c63688a 100644 --- a/finance-system/src/main/resources/mapper/system/TbDataScreenScoreMapper.xml +++ b/finance-system/src/main/resources/mapper/system/TbDataScreenScoreMapper.xml @@ -37,7 +37,7 @@ WHERE 1 = 1 AND tbd.quarter = #{nowQuarter} AND tbsc.id = #{dataScreenConfigId} - AND su.area_level LIKE '县' + AND su.area_level = 'com.finance.common.enums.AreaLevelEnum@COUNTY.getCode()' ORDER BY tdss.score DESC </select> <select id="selectRiskByQuarter" resultType="com.finance.system.domain.TbDataScreenScore"> diff --git a/finance-system/src/main/resources/mapper/system/TbScoreMapper.xml b/finance-system/src/main/resources/mapper/system/TbScoreMapper.xml index f4d2eea..60c0875 100644 --- a/finance-system/src/main/resources/mapper/system/TbScoreMapper.xml +++ b/finance-system/src/main/resources/mapper/system/TbScoreMapper.xml @@ -113,4 +113,53 @@ </if> </where> </select> + <select id="getCurrentScoreList" resultType="com.finance.system.vo.RiskMapVO"> + SELECT SUM(ts.score) score, + su.area_code, + su.area_name, + su.area_level + FROM tb_score ts + LEFT JOIN tb_basic_data tbd ON ts.basic_data_id = tbd.id + LEFT JOIN sys_user su ON tbd.dept_area_code = su.area_code + <where> + tbd.`quarter` = #{nowQuarter} + <if test="areaCode != null and areaCode != ''"> + AND tbd.dept_area_code = #{areaCode} + </if> + </where> + GROUP BY tbd.id + </select> + <select id="queryRiskRanking" resultType="com.finance.system.vo.RiskRankingVO" + parameterType="java.lang.String"> + SELECT * + FROM (SELECT SUM(ts.score) score, su.area_code, su.area_name + FROM tb_score ts + LEFT JOIN tb_basic_data tbd ON tbd.id = ts.basic_data_id + 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()}' + </where> + GROUP BY tbd.id) rs + ORDER BY rs.score DESC + </select> + <select id="getScoreByYearType" resultType="com.finance.system.vo.RiskMapVO"> + SELECT * + FROM (SELECT SUM(ts.score) score, su.area_code, su.area_name + FROM tb_score ts + LEFT JOIN tb_basic_data tbd ON tbd.id = ts.basic_data_id + LEFT JOIN sys_user su ON su.area_code = tbd.dept_area_code + <where> + tbd.dept_area_code = #{areaCode} + <if test="yearType!=null and yearType==1"> + AND YEAR(tbd.reporting_time) = YEAR(CURDATE()) + </if> + <if test="yearType!=null and yearType==2"> + AND YEAR(tbd.reporting_time) = YEAR(CURDATE())-1 + </if> + </where> + GROUP BY tbd.id) rs + ORDER BY rs.score DESC + </select> + </mapper> -- Gitblit v1.7.1