finance-admin/src/main/java/com/finance/web/controller/service/ScreenService.java
@@ -121,7 +121,7 @@ ScoreRankVO scoreRankVO = tbScoreService.queryRankAndScoreByAreaCode("510000"); riskAndTransferVO.setScoreRankVO(scoreRankVO); String previousQuarter = DateUtils.getPreviousQuarter(); // previousQuarter = "2024年一季度"; // previousQuarter = "2024年二季度"; // 查询转移支付规模总额 List<TbBasicData> list = tbBasicDataService.lambdaQuery() .select(TbBasicData::getTransferPaymentScale) @@ -241,10 +241,10 @@ public List<RiskRankingVO> riskRanking() throws Exception { DataScreenConfigVO riskLevel = tbDataScreenConfigService.getRiskLevel(); List<RiskLevelVO> riskLevelVOList = formatRiskLevel(riskLevel); String previousQuarter = DateUtils.getPreviousQuarter(); // previousQuarter = "2024年二季度"; List<RiskRankingVO> voList = tbScoreService.queryRiskRanking( DateUtils.getPreviousQuarter()); // List<RiskRankingVO> voList = tbScoreService.queryRiskRanking( // "2024年一季度"); previousQuarter); int rank = 1; for (RiskRankingVO riskRankingVO : voList) { riskRankingVO.setRank(rank++); @@ -268,7 +268,7 @@ public List<QuestionVO> queryQuestions() throws Exception { String previousQuarter = DateUtils.getPreviousQuarter(); // previousQuarter = "2024年一季度"; // previousQuarter = "2024年二季度"; List<TbQuestion> list = tbQuestionService.lambdaQuery() .eq(TbQuestion::getQuarter, previousQuarter).list(); return BeanUtils.copyList(list, QuestionVO.class); @@ -284,7 +284,7 @@ dataAnalysisVO.setRank(scoreRankVO.getRank()); dataAnalysisVO.setScore(scoreRankVO.getScore()); String previousQuarter = DateUtils.getPreviousQuarter(); // previousQuarter = "2024年一季度"; // previousQuarter = "2024年二季度"; // 查询问题 List<TbQuestion> list = tbQuestionService.lambdaQuery() .eq(TbQuestion::getQuarter, previousQuarter) @@ -365,6 +365,7 @@ scoreRateDataVO.setScore(0D); scoreRateDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1)); scoreRateDataVO.setScoreRate(0D); scoreRateDataVO.setMaxScore(0D); } else { Double indicatorOne = getLevelThreeIndicators(voList, indicatorList.get(i)).stream() .map(FieldAndScoreDataVO::getScore).reduce(Double::sum) @@ -382,6 +383,9 @@ .divide(BigDecimal.valueOf(voList.get(i).getLevelOneIndicatorMaxScore()), 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100L)) .doubleValue()); scoreRateDataVO.setMaxScore( getLevelThreeIndicators(voList, indicatorList.get(i)).get(0) .getLevelOneIndicatorMaxScore()); } result.add(scoreRateDataVO); } @@ -425,7 +429,8 @@ .orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP).doubleValue(); scoreDataVO.setLastScore(indicatorOneLastYear); scoreDataVO.setScore(indicatorOne); scoreDataVO.setMaxScore(voList.get(0).getLevelOneIndicatorMaxScore()); scoreDataVO.setMaxScore(getLevelThreeIndicators(voList, indicatorList.get(i)).get(0) .getLevelOneIndicatorMaxScore()); scoreDataVO.setSubType(SubTypeEnum.getEnumByCode(i + 1)); } scoreDataVOList.add(scoreDataVO); @@ -549,13 +554,13 @@ public List<DeptCalculateDetailVO> deptCalculateDetail(DeptCalculateDetailQuery query) throws Exception { String previousQuarter = DateUtils.getPreviousQuarter(); // previousQuarter = "2024年一季度"; // previousQuarter = "2024年二季度"; return tbScoreService.deptCalculateDetail(query, previousQuarter); } public CurrentFieldsDetailVO viewRawData(String areaCode) throws Exception { String previousQuarter = DateUtils.getPreviousQuarter(); // previousQuarter = "2024年一季度"; // previousQuarter = "2024年二季度"; Optional<TbBasicData> basicDataOptional = tbBasicDataService.lambdaQuery() .eq(TbBasicData::getDeptAreaCode, areaCode) .eq(TbBasicData::getQuarter, previousQuarter).oneOpt(); @@ -587,7 +592,13 @@ .likeRight(SysUser::getAreaCode, cityCode).or(cityCode.equals("5101")) .in(cityCode.equals("5101"), SysUser::getAreaCode, "510008", "510015", "510017", "510025") .orderByAsc(!areaCode.equals("510100"), SysUser::getAreaCode) .or(cityCode.equals("5106")) .eq(cityCode.equals("5106"), SysUser::getAreaCode, "510049") .or(cityCode.equals("5109")) .eq(cityCode.equals("5109"), SysUser::getAreaCode, "510077") .orderByAsc(!areaCode.equals("510100") && !areaCode.equals("510600") && !areaCode.equals("510900"), SysUser::getAreaCode) .list(); return list; } finance-system/src/main/java/com/finance/system/domain/Region.java
New file @@ -0,0 +1,54 @@ package com.finance.system.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * <p> * 省市区三级联动 * </p> * * @author mitao * @since 2024-05-21 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("t_region") @ApiModel(value = "Region对象", description = "省市区三级联动") public class Region implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "主键ID") @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty(value = "城市名称") @TableField("name") private String name; @TableField("code") private String code; @TableField("citycode") private String citycode; @ApiModelProperty(value = "父级ID") @TableField("parent_id") private Integer parentId; @ApiModelProperty(value = "英文名称") @TableField("english") private String english; } finance-system/src/main/java/com/finance/system/mapper/RegionMapper.java
New file @@ -0,0 +1,22 @@ package com.finance.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.finance.system.domain.Region; import com.finance.system.vo.RegionVo; import java.util.List; /** * <p> * 省市区三级联动 Mapper 接口 * </p> * * @author mitao * @since 2024-05-21 */ public interface RegionMapper extends BaseMapper<Region> { List<RegionVo> listRegionVo(); Region getRegionByCode(String code); } finance-system/src/main/java/com/finance/system/service/IRegionService.java
New file @@ -0,0 +1,17 @@ package com.finance.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.finance.system.domain.Region; /** * <p> * 省市区三级联动 服务类 * </p> * * @author mitao * @since 2024-05-21 */ public interface IRegionService extends IService<Region> { Region getParentByCode(String code); } finance-system/src/main/java/com/finance/system/service/TbQuestionService.java
@@ -20,7 +20,7 @@ void addQuestion(QuestionDTO dto) throws Exception; void editQuestion(QuestionUpdDTO dto); void editQuestion(QuestionUpdDTO dto) throws Exception; PageDTO<QuestionVO> pageQuestion(QuestionQuery dto); finance-system/src/main/java/com/finance/system/service/impl/AsyncServiceImpl.java
@@ -1,5 +1,7 @@ package com.finance.system.service.impl; import static com.finance.common.enums.IndicatorItemEnum.INDICATOR_ITEM8; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson2.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -346,23 +348,29 @@ score = res ? 0 : vo.getMaxScore(); break; case INDICATOR_ITEM9: // 预算管理方面-“三保”保障情况-“三保”需求占可用财力的比重 BigDecimal au = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD45); BigDecimal r = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD13); res1 = validateDivisorValue(r); score = 0D; if (!res1) { BigDecimal divided = au.divide(r, 4, 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), 4, RoundingMode.HALF_UP) .add(BigDecimal.valueOf(8)) .setScale(2, RoundingMode.HALF_UP); score = add.compareTo(BigDecimal.ZERO) >= 0 ? add.doubleValue() : 0D; } else { score = vo.getMaxScore(); TbScore tbScore = scoreList.stream().filter(s -> s.getBasicDataConfigId() .equals(INDICATOR_ITEM8.getCode())).findFirst().orElse(null); if (tbScore != null) { if (!res1 && tbScore.getScore() != 0) { BigDecimal divided = au.divide(r, 4, 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), 4, RoundingMode.HALF_UP) .add(BigDecimal.valueOf(8)) .setScale(1, RoundingMode.HALF_UP); score = add.compareTo(BigDecimal.ZERO) >= 0 ? add.doubleValue() : 0D; } else { score = vo.getMaxScore(); } } } break; @@ -400,7 +408,7 @@ .divide(BigDecimal.valueOf(0.1D), 4, RoundingMode.HALF_UP) .multiply(BigDecimal.valueOf(0.6D)) .add(BigDecimal.valueOf(3D)) .setScale(2, RoundingMode.HALF_UP); .setScale(1, RoundingMode.HALF_UP); part1 = add.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : add; } else { part1 = BigDecimal.valueOf(3D); @@ -433,7 +441,7 @@ .multiply(BigDecimal.valueOf(100D)) .divide(BigDecimal.valueOf(3D), 4, RoundingMode.HALF_UP) .add(BigDecimal.valueOf(vo.getMaxScore())) .setScale(2, RoundingMode.HALF_UP).doubleValue(); .setScale(1, RoundingMode.HALF_UP).doubleValue(); } else { score = vo.getMaxScore(); } @@ -462,7 +470,7 @@ BigDecimal add = deptDividendValue.subtract(divided1) .divide(BigDecimal.valueOf(5D), 4, RoundingMode.HALF_UP) .add(BigDecimal.valueOf(vo.getMaxScore())) .setScale(2, RoundingMode.HALF_UP); .setScale(1, RoundingMode.HALF_UP); score = add.compareTo(BigDecimal.ZERO) < 0 ? 0D : add.doubleValue(); } else { score = vo.getMaxScore(); @@ -489,9 +497,10 @@ BasicDataFieldEnum.BASIC_DATA_FIELD15);// 696635 BigDecimal ab = getBigDecimal(sysUser.getAreaName(), deptFieldsMap, BasicDataFieldEnum.BASIC_DATA_FIELD23); // 56552 BigDecimal add = t.add(ab).divide(month.multiply( BigDecimal.valueOf(12D)).multiply(BigDecimal.valueOf(0.05D)), 2, RoundingMode.HALF_UP); BigDecimal add = t.add(ab).divide(month, 4, RoundingMode.HALF_UP) .multiply(BigDecimal.valueOf(12D)) .multiply(BigDecimal.valueOf(0.05D)) .setScale(1, RoundingMode.HALF_UP); score = bk.compareTo(add) > 0 ? 0D : vo.getMaxScore(); break; case INDICATOR_ITEM20: @@ -509,7 +518,7 @@ RoundingMode.HALF_UP); score = d1.compareTo(d2) < 0 ? d1.divide(d2, 4, RoundingMode.HALF_UP) .multiply(BigDecimal.valueOf(vo.getMaxScore())) .setScale(2, RoundingMode.HALF_UP).doubleValue() .setScale(1, RoundingMode.HALF_UP).doubleValue() : vo.getMaxScore(); } else { score = vo.getMaxScore(); @@ -641,7 +650,7 @@ score = deptDivided.subtract(provinceDivided) .multiply(BigDecimal.valueOf(100L)) .add(BigDecimal.valueOf(vo.getMaxScore())) .setScale(2, RoundingMode.HALF_UP); .setScale(1, RoundingMode.HALF_UP); score = score.compareTo(BigDecimal.ZERO) >= 0 ? score : BigDecimal.ZERO; } else { score = BigDecimal.valueOf(vo.getMaxScore()); @@ -672,7 +681,7 @@ score = provinceDivided.subtract(deptDivided) .multiply(BigDecimal.valueOf(100L)) .add(BigDecimal.valueOf(vo.getMaxScore())) .setScale(2, RoundingMode.HALF_UP); .setScale(1, RoundingMode.HALF_UP); score = score.compareTo(BigDecimal.ZERO) >= 0 ? score : BigDecimal.ZERO; } return score.doubleValue(); @@ -744,18 +753,19 @@ private Double getScoreByMonth(BigDecimal deptDividendValue, BigDecimal deptDivisorValue, BigDecimal currentMonth, BasicDataConfigVO vo) { double score; BigDecimal divided1 = deptDividendValue.divide(deptDivisorValue, 2, BigDecimal divided1 = deptDividendValue.divide(deptDivisorValue, 4, RoundingMode.HALF_UP); BigDecimal divided2 = currentMonth.divide(BigDecimal.valueOf(12D), 2, BigDecimal divided2 = currentMonth.divide(BigDecimal.valueOf(12D), 4, RoundingMode.HALF_UP); if (divided1.compareTo( currentMonth.divide(BigDecimal.valueOf(12D), 2, RoundingMode.HALF_UP)) currentMonth.divide(BigDecimal.valueOf(12D), 4, RoundingMode.HALF_UP)) < 0) { BigDecimal add = divided1.subtract(divided2) .multiply(BigDecimal.valueOf(100D)) .divide(BigDecimal.valueOf(5D), 2, .divide(BigDecimal.valueOf(5D), 4, RoundingMode.HALF_UP) .add(BigDecimal.valueOf(vo.getMaxScore())); .add(BigDecimal.valueOf(vo.getMaxScore())) .setScale(1, RoundingMode.HALF_UP); score = add.compareTo(BigDecimal.ZERO) < 0 ? 0D : add.doubleValue(); } else { score = vo.getMaxScore(); @@ -783,6 +793,7 @@ @Override public void subtractScoreWithFixedRules(String deptAreaCode) throws Exception { String previousQuarter = DateUtils.getPreviousQuarter(); // previousQuarter = "2024年二季度"; TbBasicData tbBasicData = tbBasicDataMapper.selectOne( Wrappers.lambdaQuery(TbBasicData.class).eq(TbBasicData::getQuarter, previousQuarter) .eq(TbBasicData::getDeptAreaCode, deptAreaCode)); @@ -829,15 +840,16 @@ // 23:风险防控方面-债务管理-隐性债务化解 questionList = getQuestList(list, deptAreaCode, QuestionTypeEnum.ENUM6); score = CollUtils.isNotEmpty(questionList) ? vo.getMaxScore() : -3D; score = CollUtils.isNotEmpty(questionList) ? -3D : vo.getMaxScore(); break; case INDICATOR_ITEM24: // 24:风险防控方面-债务管理-日常监督发现问题 questionList = getQuestList(list, deptAreaCode, QuestionTypeEnum.ENUM7); if (CollUtils.isNotEmpty(questionList)) { score = -18D + questionList.size() * -1D; score = questionList.size() * -1D; } break; case INDICATOR_ITEM25: // 25:风险防控方面-日常监督发现问题 questionList = getQuestList(list, deptAreaCode, finance-system/src/main/java/com/finance/system/service/impl/RegionServiceImpl.java
New file @@ -0,0 +1,24 @@ package com.finance.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.finance.system.domain.Region; import com.finance.system.mapper.RegionMapper; import com.finance.system.service.IRegionService; import org.springframework.stereotype.Service; /** * <p> * 省市区三级联动 服务实现类 * </p> * * @author mitao * @since 2024-05-21 */ @Service public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> implements IRegionService { @Override public Region getParentByCode(String code) { return baseMapper.getRegionByCode(code); } } finance-system/src/main/java/com/finance/system/service/impl/SysUserServiceImpl.java
@@ -7,6 +7,7 @@ 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.AreaLevelEnum; import com.finance.common.enums.UserTypeEnum; import com.finance.common.exception.ServiceException; import com.finance.common.utils.BeanUtils; @@ -14,6 +15,7 @@ import com.finance.common.utils.StringUtils; import com.finance.common.utils.bean.BeanValidators; import com.finance.common.utils.spring.SpringUtils; import com.finance.system.domain.Region; import com.finance.system.domain.SysPost; import com.finance.system.domain.SysUserPost; import com.finance.system.domain.SysUserRole; @@ -23,6 +25,7 @@ import com.finance.system.mapper.SysUserPostMapper; import com.finance.system.mapper.SysUserRoleMapper; import com.finance.system.query.SysUserQuery; import com.finance.system.service.IRegionService; import com.finance.system.service.ISysConfigService; import com.finance.system.service.ISysUserService; import com.finance.system.vo.DeptVO; @@ -70,6 +73,8 @@ @Autowired protected Validator validator; @Autowired private IRegionService regionService; /** * 根据条件分页查询用户列表 @@ -623,6 +628,15 @@ deptName) .orderByDesc(SysUser::getCreateTime) .list(); return BeanUtils.copyList(list, DeptVO.class); List<DeptVO> deptVOS = BeanUtils.copyList(list, DeptVO.class); deptVOS = deptVOS.stream() .filter(item -> null != item.getAreaLevel() && item.getAreaLevel() .equals(AreaLevelEnum.COUNTY)).peek(item -> { Region region = regionService.getParentByCode(item.getAreaCode()); if (region != null) { item.setCityName(region.getName()); } }).collect(Collectors.toList()); return deptVOS; } } finance-system/src/main/java/com/finance/system/service/impl/TbQuestionServiceImpl.java
@@ -48,17 +48,18 @@ TbQuestion tbQuestion = BeanUtils.copyBean(dto, TbQuestion.class); tbQuestion.setType(dto.getType()); String previousQuarter = DateUtils.getPreviousQuarter(); // previousQuarter = "2024年一季度"; // previousQuarter = "2024年二季度"; tbQuestion.setQuarter(previousQuarter); this.save(tbQuestion); asyncService.subtractScoreWithFixedRules(dto.getDeptAreaCode()); } @Override public void editQuestion(QuestionUpdDTO dto) { public void editQuestion(QuestionUpdDTO dto) throws Exception { TbQuestion tbQuestion = BeanUtils.copyBean(dto, TbQuestion.class); tbQuestion.setType(dto.getType()); this.updateById(tbQuestion); asyncService.subtractScoreWithFixedRules(dto.getDeptAreaCode()); } @Override finance-system/src/main/java/com/finance/system/service/impl/TbScoreServiceImpl.java
@@ -117,7 +117,7 @@ @Override public ScoreRankVO queryRankAndScoreByAreaCode(String areaCode) throws Exception { String previousQuarter = DateUtils.getPreviousQuarter(); // previousQuarter = "2024年一季度"; // previousQuarter = "2024年二季度"; List<ScoreRankVO> voList = baseMapper.queryRankAndScoreByAreaCode(areaCode, previousQuarter); if (CollUtils.isNotEmpty(voList)) { @@ -155,7 +155,8 @@ vo.setCalculateType(config.getCalculateType()); Page<ScoreDetailVO> page = new Page<>(query.getPageNum(), query.getPageSize()); String previousQuarter = DateUtils.getPreviousQuarter(); previousQuarter = "2023年一季度"; // previousQuarter = "2024年二季度"; query.setPreviousQuarter(previousQuarter); Page<ScoreDetailVO> pageVO = baseMapper.fieldsDetail(query, page, areaCodeList); vo.setTotal(pageVO.getTotal()); vo.setPages(pageVO.getPages()); finance-system/src/main/java/com/finance/system/vo/DeptVO.java
@@ -19,6 +19,9 @@ @ApiModelProperty(value = "部门id") private Long userId; @ApiModelProperty(value = "所属市") private String cityName; @ApiModelProperty(value = "部门地区") private String areaName; finance-system/src/main/java/com/finance/system/vo/RegionVo.java
New file @@ -0,0 +1,27 @@ package com.finance.system.vo; import io.swagger.annotations.ApiModelProperty; import java.util.List; import lombok.Data; @Data public class RegionVo { @ApiModelProperty(value = "区域代码") private String value; @ApiModelProperty(value = "区域名称") private String label; @ApiModelProperty(value = "子级列表") private List<RegionVo> children; @ApiModelProperty(value = "id") private Long id; @ApiModelProperty(value = "父级id") private Long parentId; @ApiModelProperty(value = "层级") private Integer level; } finance-system/src/main/java/com/finance/system/vo/ScoreRateDataVO.java
@@ -19,9 +19,12 @@ @ApiModelProperty("得分率") private Double scoreRate; @ApiModelProperty("总分") private Double maxScore; @ApiModelProperty(value = "配置类型子类型(1=指标一 2=指标二 3=指标三 4=指标四)") private SubTypeEnum subType; @ApiModelProperty("排名") private Integer rank; } finance-system/src/main/resources/mapper/system/RegionMapper.xml
New file @@ -0,0 +1,17 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.finance.system.mapper.RegionMapper"> <select id="listRegionVo" resultType="com.finance.system.vo.RegionVo"> SELECT tr.id id, tr.parent_id parentId, tr.level level, tr.code value, tr.name label FROM t_region tr </select> <select id="getRegionByCode" resultType="com.finance.system.domain.Region" parameterType="java.lang.String"> SELECT t2.* FROM t_region t1 JOIN t_region t2 ON t1.parent_id = t2.id WHERE t1.code = #{code} </select> </mapper> finance-system/src/main/resources/mapper/system/TbScoreMapper.xml
@@ -72,19 +72,9 @@ CURDATE()) AND su.user_id in (SELECT user_id FROM sys_user WHERE ( ( #{areaCode} = '510000' AND area_code LIKE CONCAT( SUBSTRING( #{areaCode}, 1, 2 ), '%' )) OR ( #{areaCode} != '510000' AND area_code LIKE CONCAT( SUBSTRING( #{areaCode}, 1, 4 ), '%' )) OR ( #{areaCode}= '510100' AND area_code IN ( '510008', '510015', '510017', '510025' )) WHERE user_type = 2 AND area_level in (1,2,3,4) ) AND user_type = 2 AND area_level in (1,2,3,4)) </where> GROUP BY tbc.dept_area_code @@ -127,7 +117,7 @@ AND su.area_code=#{query.areaCode} </if> <if test="query.previousQuarter != null and query.previousQuarter != ''"> AND tbd.quarter=#{previousQuarter} AND tbd.quarter=#{query.previousQuarter} </if> group by su.area_code </where>