| | |
| | | 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~ |
| | |
| | | # 令牌密钥 |
| | | secret: abcdefghijklmnopqrstuvwxyz |
| | | # 令牌有效期(默认30分钟) |
| | | expireTime: 60 * 12 |
| | | expireTime: 720 |
| | | |
| | | # MyBatis配置 |
| | | #mybatis: |
| | |
| | | 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; |
| | |
| | | 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) { |
| | |
| | | dto.setQuarter(DateUtils.getNowQuarter()); |
| | | return tbBasicDataService.fieldsStatics(dto); |
| | | } catch (Exception e) { |
| | | log.error("获取字段统计相关信息异常" , e); |
| | | log.error("获取字段统计相关信息异常", e); |
| | | return R.fail(); |
| | | } |
| | | } |
| | |
| | | * @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); |
| | |
| | | if (e instanceof ServiceException) { |
| | | return R.fail(e.getMessage()); |
| | | } |
| | | log.error("保存当前季度数据异常" , e); |
| | | log.error("保存当前季度数据异常", e); |
| | | return R.fail(); |
| | | } |
| | | } |
| | |
| | | if (e instanceof ServiceException) { |
| | | return R.fail(e.getMessage()); |
| | | } |
| | | log.error("保存数据异常" , e); |
| | | log.error("保存数据异常", e); |
| | | return R.fail(); |
| | | } |
| | | return R.ok(); |
| | |
| | | * @return R<CurrentFieldsAllVO> |
| | | */ |
| | | @GetMapping("/fields-statics-all") |
| | | @ApiOperation(value = "字段统计-查看全部" , notes = "字段统计") |
| | | @ApiOperation(value = "字段统计-查看全部", notes = "字段统计") |
| | | public R<CurrentFieldsAllVO> fieldsStaticsAll() { |
| | | try { |
| | | return R.ok(tbBasicDataService.fieldsStaticsAll()); |
| | |
| | | if (e instanceof ServiceException) { |
| | | return R.fail(e.getMessage()); |
| | | } |
| | | log.error("查看全部异常" , e); |
| | | log.error("查看全部异常", e); |
| | | return R.fail(); |
| | | } |
| | | } |
| | |
| | | query.setQuarter(DateUtils.getNowQuarter()); |
| | | return R.ok(tbBasicDataService.scoreCalculatePage(query)); |
| | | } catch (Exception e) { |
| | | log.error("获取得分计算异常" , e); |
| | | log.error("获取得分计算异常", e); |
| | | return R.fail(); |
| | | } |
| | | } |
| | |
| | | */ |
| | | @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)); |
| | |
| | | * @return R<Void> |
| | | */ |
| | | @PostMapping("add-question") |
| | | @ApiOperation(value = "发现问题-添加问题" , notes = "发现问题") |
| | | @ApiOperation(value = "发现问题-添加问题", notes = "发现问题") |
| | | public R<Void> addQuestion(@Validated @RequestBody QuestionDTO dto) { |
| | | try { |
| | | tbQuestionService.addQuestion(dto); |
| | |
| | | if (e instanceof ServiceException) { |
| | | return R.fail(e.getMessage()); |
| | | } |
| | | log.error("添加问题异常" , e); |
| | | log.error("添加问题异常", e); |
| | | return R.fail(); |
| | | } |
| | | } |
| | |
| | | * @return R<Void> |
| | | */ |
| | | @PostMapping("/edit-question") |
| | | @ApiOperation(value = "发现问题-编辑问题" , notes = "发现问题") |
| | | @ApiOperation(value = "发现问题-编辑问题", notes = "发现问题") |
| | | public R<Void> editQuestion(@Validated @RequestBody QuestionUpdDTO dto) { |
| | | try { |
| | | tbQuestionService.editQuestion(dto); |
| | |
| | | if (e instanceof ServiceException) { |
| | | return R.fail(e.getMessage()); |
| | | } |
| | | log.error("编辑问题异常" , e); |
| | | log.error("编辑问题异常", e); |
| | | return R.fail(); |
| | | } |
| | | } |
| | |
| | | * @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)); |
| | | } |
| | |
| | | * @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)); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @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)); |
| | | } |
| | | |
| | | } |
| | |
| | | @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"); |
| | |
| | | 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()) |
| | |
| | | @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(); |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | |
| | | 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); |
| | |
| | | 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)); |
| | |
| | | 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)) { |
| | |
| | | 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); |
| | | } |
| | |
| | | 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++); |
| | |
| | | |
| | | public DataAnalysisVO getDataAnalysis(String areaCode) throws Exception { |
| | | DataAnalysisVO dataAnalysisVO = new DataAnalysisVO(); |
| | | //查询得分排名 |
| | | // 查询得分排名 |
| | | ScoreRankVO scoreRankVO = tbScoreService.queryRankAndScoreByAreaCode(areaCode); |
| | | if (Objects.isNull(scoreRankVO)) { |
| | | return dataAnalysisVO; |
| | |
| | | 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() |
| | |
| | | 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()) { |
| | |
| | | } |
| | | } |
| | | } |
| | | //查询形式指标得分 |
| | | 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); |
| | |
| | | # 令牌密钥 |
| | | secret: abcdefghijklmnopqrstuvwxyz |
| | | # 令牌有效期(默认30分钟) |
| | | expireTime: 120 |
| | | expireTime: 720 |
| | | |
| | | # MyBatis配置 |
| | | #mybatis: |
| | |
| | | |
| | | 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; |
| | |
| | | private TbBasicDataFieldMapper basicDataFieldMapper; |
| | | @Resource |
| | | private TbFieldService tbFieldService; |
| | | @Resource |
| | | private TbBasicDataConfigService tbBasicDataConfigService; |
| | | @Resource |
| | | private TbBasicDataCategoryService tbBasicDataCategoryService; |
| | | |
| | | @Test |
| | | public void test() { |
| | |
| | | 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); |
| | | } |
| | | } |
| | | |
| | |
| | | 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; |
| | |
| | | @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") |
| | |
| | | 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) { |
| | |
| | | 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, "(一)一般公共预算-一般公共预算支出-上年同期执行数"), |
| | |
| | | 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, "(二)政府性基金预算-政府性基金预算支出-上年同期执行数"), |
| | |
| | | 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, "(六)存量资金情况-结转结余-其中:-一般公共预算结转结余"), |
| | |
| | | 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; |
| | |
| | | @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; |
New file |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | 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(); |
| | |
| | | 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(); |
| | |
| | | * @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); |
| | |
| | | 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年四季度"))); |
| | |
| | | @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; |
| | |
| | | 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; |
| | |
| | | @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 |
| | |
| | | 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 |
| | |
| | | @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; |
| | | } |
| | |
| | | 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; |
| | |
| | | @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; |
| | | } |
| | |
| | | import java.io.Serializable; |
| | | import java.util.List; |
| | | import javax.validation.constraints.NotBlank; |
| | | import javax.validation.constraints.NotEmpty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | |
| | | private static final long serialVersionUID = -4878457973955230627L; |
| | | |
| | | @ApiModelProperty(value = "计算规则") |
| | | @NotEmpty(message = "计算规则不能为空") |
| | | // @NotEmpty(message = "计算规则不能为空") |
| | | private List<CalculateItemDTO> calculateItemList; |
| | | |
| | | @ApiModelProperty(value = "风险等级范围-高风险得分") |
| | |
| | | tbBasicDataFieldService.saveBatch(fields); |
| | | log.info(String.format("%s导入基础数据成功!", dataMap.get(0))); |
| | | // asyncService.calculateScore(tbBasicData, fields); |
| | | asyncService.asyncTask(); |
| | | asyncService.calculateScoreWithFixedRules(tbBasicData, fields, fieldList); |
| | | |
| | | } |
| | | |
| | |
| | | |
| | | 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); |
| | | } |
| | |
| | | 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; |
| | |
| | | |
| | | 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); |
| | | } |
| | |
| | | |
| | | void calculateScoreWithFixedRules(TbBasicData tbBasicData, List<TbBasicDataField> fields, |
| | | List<TbField> fieldList); |
| | | |
| | | void subtractScoreWithFixedRules(String deptAreaCode) throws Exception; |
| | | } |
| | |
| | | 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; |
| | | |
| | |
| | | |
| | | SysUser selectPlatUserByUserName(String username); |
| | | |
| | | List<DeptVO> queryDeptListByName(String deptName); |
| | | } |
| | |
| | | BasicDataConfigQuery query); |
| | | |
| | | List<BasicDataConfigVO> getFixedRulesConfigList(); |
| | | |
| | | List<BasicDataConfigVO> getSubsractRulesConfigList(); |
| | | } |
| | |
| | | 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); |
| | | } |
| | |
| | | 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; |
| | |
| | | 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); |
| | | } |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | private final TbBasicDataCategoryService tbBasicDataCategoryService; |
| | | private final TbBasicDataConfigDetailService tbBasicDataConfigDetailService; |
| | | private final TbBasicDataMapper tbBasicDataMapper; |
| | | private final TbQuestionMapper tbQuestionMapper; |
| | | |
| | | @Async |
| | | @Override |
| | |
| | | // 待计算的基础数据字段 |
| | | 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; |
| | | |
| | |
| | | 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(); |
| | | } |
| | |
| | | } |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | @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; |
| | | } |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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) { |
| | |
| | | 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(); |
| | |
| | | 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() |
| | |
| | | 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, |
| | |
| | | } |
| | | 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()); |
| | |
| | | vo.setPhoneNumber(item.getPhoneNumber()); |
| | | vo.setPersonInCharge(item.getPersonInCharge()); |
| | | }); |
| | | // 查询动态字段 |
| | | /* // 查询动态字段 |
| | | List<TbBasicDataField> basicDataFields = |
| | | tbBasicDataFieldService |
| | | .lambdaQuery() |
| | |
| | | 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); |
| | | } |
| | | |
| | |
| | | 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) |
| | |
| | | // 保存基础数据动态字段数据 |
| | | 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()); |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | 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; |
| | | } |
| | | |
| | |
| | | if (result) { |
| | | throw new ServiceException("计算表达式有误,请修改"); |
| | | } |
| | | //参数校验 |
| | | // 参数校验 |
| | | String numberCalculateFormulaStr = calculateItemList.stream() |
| | | .map(CalculateItemDTO::getContent) |
| | | .collect(Collectors.joining()); |
| | | //校验表达式是否正确 |
| | | // 校验表达式是否正确 |
| | | try { |
| | | CalculateUtil.calculate(numberCalculateFormulaStr); |
| | | } catch (Exception e) { |
| | |
| | | } |
| | | } |
| | | |
| | | //表达式校验 |
| | | // 表达式校验 |
| | | public boolean hasConsecutiveDuplicates(List<CalculateItemDTO> calculateItemList) { |
| | | return IntStream.range(1, calculateItemList.size()) |
| | | .anyMatch(i -> calculateItemList.get(i - 1).getValueType() |
| | |
| | | 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, |
| | |
| | | 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, |
| | |
| | | @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, |
| | |
| | | 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(); |
| | |
| | | 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; |
| | |
| | | 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> |
| | |
| | | * @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); |
| | | } |
| | | |
| | |
| | | .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; |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | |
| | | @Override |
| | | public ScoreCalculateDetailVO scoreCalculateDetail(ScoreCalculateDetailQuery query) { |
| | | //查询计算类型 |
| | | // 查询计算类型 |
| | | TbBasicDataConfig config = basicDataConfigService.getById(query.getId()); |
| | | if (Objects.isNull(config)) { |
| | | throw new ServiceException("非法参数"); |
| | |
| | | @Override |
| | | public ScoreCalculateDetailVO fieldsDetail(CalculateDetailQuery query, |
| | | List<SysUser> countyList) { |
| | | //查询计算类型 |
| | | // 查询计算类型 |
| | | TbBasicDataConfig config = basicDataConfigService.getById(query.getId()); |
| | | if (Objects.isNull(config)) { |
| | | throw new ServiceException("非法参数"); |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | |
| | | @ApiModelProperty("区划代码") |
| | | private String areaCode; |
| | | |
| | | |
| | | @ApiModelProperty("得分") |
| | | private Double score; |
| | | |
| | |
| | | @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; |
| | | |
| | | } |
| | |
| | | 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; |
| | |
| | | private String areaCode; |
| | | |
| | | @ApiModelProperty(value = "级次(省、市、县)") |
| | | private String areaLevel; |
| | | private AreaLevelEnum areaLevel; |
| | | |
| | | @ApiModelProperty(value = "县级标志(不包含直辖市的区 0:否 1:是)") |
| | | private DisabledEnum countyFlag; |
| | |
| | | @ApiModelProperty(value = "计算类型id") |
| | | private Long id; |
| | | |
| | | @ApiModelProperty(value = "区划代码") |
| | | private String deptAreaCode; |
| | | |
| | | @ApiModelProperty("类型名称") |
| | | private String typeName; |
| | | |
| | |
| | | |
| | | @ApiModelProperty("分类id") |
| | | private String basicDataCategoryId; |
| | | |
| | | @ApiModelProperty("一级指标") |
| | | private String levelOneIndicator; |
| | | |
| | | @ApiModelProperty("二级指标") |
| | | private String levelTwoIndicator; |
| | | |
| | | @ApiModelProperty("最大分值") |
| | | private Double levelOneIndicatorMaxScore; |
| | | } |
| | |
| | | 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 |
| | |
| | | @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; |
| | |
| | | package com.finance.system.vo; |
| | | |
| | | import com.finance.common.enums.AreaLevelEnum; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | |
| | | |
| | | @ApiModelProperty("区划代码") |
| | | private String areaCode; |
| | | |
| | | @ApiModelProperty("部门名称") |
| | | private String areaName; |
| | | |
| | | @ApiModelProperty("风险得分") |
| | | private Double score; |
| | | |
| | | @ApiModelProperty("风险等级") |
| | | private AreaLevelEnum areaLevel; |
| | | } |
| | |
| | | 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> |
| | |
| | | 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"> |
| | |
| | | </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> |