ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java
@@ -2,9 +2,7 @@ import com.ruoyi.common.basic.PageDTO; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.system.dto.BasicDataDTO; import com.ruoyi.system.query.ScoreQuery; import com.ruoyi.system.service.TbBasicDataService; @@ -34,9 +32,7 @@ @GetMapping("/basic-fields") public R<BasicDataReportingVO> getBasicFields() { try { SysUser user = SecurityUtils.getLoginUser().getUser(); String areaCode = user.getAreaCode(); return tbBasicDataService.getBasicFields(areaCode); return tbBasicDataService.getBasicFields(); } catch (Exception e) { if (e instanceof ServiceException) { return R.fail(e.getMessage()); ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java
@@ -1,10 +1,26 @@ package com.ruoyi.web.controller.api; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.basic.PageDTO; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.ReportingStatusEnum; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.system.domain.TbBasicData; import com.ruoyi.system.dto.HistoryDataQueryDTO; import com.ruoyi.system.query.HistoryScoreQuery; import com.ruoyi.system.service.TbBasicDataService; import com.ruoyi.system.service.TbFieldService; import com.ruoyi.system.service.TbScoreService; import com.ruoyi.system.vo.BasicDataFieldVO; import com.ruoyi.system.vo.BasicDataVO; import com.ruoyi.system.vo.ScoreVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; /** * @author mitao @@ -17,4 +33,30 @@ @Api(tags = "历史数据相关接口") public class HistoryDataController { private final TbBasicDataService tbBasicDataService; private final TbFieldService tbFieldService; private final TbScoreService tbScoreService; @PostMapping("/list") @ApiOperation("历史数据分页查询") public R<PageDTO<BasicDataVO>> list(HistoryDataQueryDTO dto) { String areaCode = SecurityUtils.getLoginUser().getUser().getAreaCode(); Page<TbBasicData> page = tbBasicDataService.lambdaQuery().eq(TbBasicData::getDeptAreaCode, areaCode) .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED) .page(new Page<TbBasicData>(dto.getPageNum(), dto.getPageSize())); return R.ok(PageDTO.of(page, BasicDataVO.class)); } @GetMapping("/history-fields") @ApiOperation("字段查看") @ApiImplicitParam(name = "id", value = "基础数据id", required = true, dataType = "int", paramType = "query", dataTypeClass = Long.class) public R<BasicDataFieldVO> getHistoryFields(@RequestParam("id") Long id) { return R.ok(tbFieldService.getHistoryFields(id)); } @PostMapping("/history-score") @ApiOperation("得分计算") public R<PageDTO<ScoreVO>> getHistoryScore(@RequestBody HistoryScoreQuery query) { return R.ok(tbScoreService.getHistoryScore(query)); } } ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicData.java
@@ -26,7 +26,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty(value = "分类id") @ApiModelProperty(value = "id") @TableId(value = "id", type = IdType.AUTO) private Long id; ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataField.java
@@ -37,6 +37,10 @@ @TableField("field_id") private Long fieldId; @ApiModelProperty(value = "字段名", notes = "fieldId = -1 转移支付规模 fieldId = -2 当期GDP") @TableField("field_name") private String fieldName; @ApiModelProperty(value = "字段值") @TableField("field_value") private String fieldValue; ruoyi-system/src/main/java/com/ruoyi/system/dto/HistoryDataQueryDTO.java
New file @@ -0,0 +1,31 @@ package com.ruoyi.system.dto; import com.ruoyi.common.core.domain.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; /** * @author mitao * @date 2024/4/3 */ @Data @ApiModel(value = "历史数据查询传输对象") @EqualsAndHashCode(callSuper = true) public class HistoryDataQueryDTO extends BasePage { private static final long serialVersionUID = -4384424407387142261L; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty("开始时间") private Date startTime; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty("结束时间") private Date endTime; } ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java
@@ -118,12 +118,14 @@ TbBasicDataField transferPaymentScale = new TbBasicDataField(); transferPaymentScale.setBasicDataId(tbBasicData.getId()); transferPaymentScale.setFieldId(-1L); transferPaymentScale.setFieldName("转移支付规模"); transferPaymentScale.setFieldValue(tbBasicData.getTransferPaymentScale()); fields.add(transferPaymentScale); TbBasicDataField currentGdp = new TbBasicDataField(); currentGdp.setBasicDataId(tbBasicData.getId()); currentGdp.setFieldId(-2L); currentGdp.setFieldName("当期GDP"); currentGdp.setFieldValue(tbBasicData.getCurrentGdp()); fields.add(currentGdp); //遍历动态字段map @@ -136,6 +138,7 @@ TbBasicDataField tbBasicDataField = new TbBasicDataField(); tbBasicDataField.setBasicDataId(tbBasicData.getId()); tbBasicDataField.setFieldId(field.getId()); tbBasicDataField.setFieldName(field.getFieldName()); tbBasicDataField.setFieldValue(value); fields.add(tbBasicDataField); } ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbScoreMapper.java
@@ -7,8 +7,6 @@ import com.ruoyi.system.vo.ScoreVO; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> * 得分表 Mapper 接口 @@ -19,5 +17,5 @@ */ public interface TbScoreMapper extends BaseMapper<TbScore> { List<ScoreVO> pageScore(@Param("query") ScoreQuery query, @Param("page") Page<ScoreVO> page); Page<ScoreVO> pageScore(@Param("query") ScoreQuery query, @Param("page") Page<ScoreVO> page); } ruoyi-system/src/main/java/com/ruoyi/system/query/HistoryScoreQuery.java
New file @@ -0,0 +1,29 @@ package com.ruoyi.system.query; import com.ruoyi.common.core.domain.BasePage; import com.ruoyi.common.enums.FieldTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; /** * @author mitao * @date 2024/3/27 */ @Data @EqualsAndHashCode(callSuper = true) @ApiModel("得分计算条件查询对象") public class HistoryScoreQuery extends BasePage { private static final long serialVersionUID = -1055887500656271053L; @ApiModelProperty(value = "基础数据Id") private Long basicDataId; @ApiModelProperty(value = "类型名称") private String typeName; @ApiModelProperty(value = "计算方式") private FieldTypeEnum type; } ruoyi-system/src/main/java/com/ruoyi/system/query/ScoreQuery.java
@@ -17,12 +17,13 @@ public class ScoreQuery extends BasePage { private static final long serialVersionUID = -3063606775652464607L; @ApiModelProperty(value = "类型名称") private String typeName; @ApiModelProperty(value = "计算方式") private FieldTypeEnum type; @ApiModelProperty(value = "基础数据Id",hidden = true) @ApiModelProperty(value = "基础数据Id",notes = "不用传",hidden = true) private Long basicDataId; } ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java
@@ -20,7 +20,7 @@ */ public interface TbBasicDataService extends IService<TbBasicData> { R<BasicDataReportingVO> getBasicFields(String deptAreaCode) throws Exception; R<BasicDataReportingVO> getBasicFields() throws Exception; void saveBasicData(BasicDataDTO dto); ruoyi-system/src/main/java/com/ruoyi/system/service/TbFieldService.java
@@ -7,6 +7,7 @@ import com.ruoyi.system.dto.ShowHideDTO; import com.ruoyi.system.dto.update.FieldUpdateDTO; import com.ruoyi.system.query.FieldQuery; import com.ruoyi.system.vo.BasicDataFieldVO; import com.ruoyi.system.vo.FieldVO; /** @@ -28,4 +29,6 @@ String influencedData(Long id); void update(FieldUpdateDTO dto); BasicDataFieldVO getHistoryFields(Long id); } ruoyi-system/src/main/java/com/ruoyi/system/service/TbScoreService.java
@@ -2,11 +2,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.basic.PageDTO; import com.ruoyi.system.domain.TbScore; import com.ruoyi.system.query.HistoryScoreQuery; import com.ruoyi.system.query.ScoreQuery; import com.ruoyi.system.vo.ScoreVO; import java.util.List; /** * <p> @@ -18,5 +18,7 @@ */ public interface TbScoreService extends IService<TbScore> { List<ScoreVO> pageScore(ScoreQuery query, Page<ScoreVO> page); Page<ScoreVO> pageScore(ScoreQuery query, Page<ScoreVO> page); PageDTO<ScoreVO> getHistoryScore(HistoryScoreQuery query); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java
@@ -22,8 +22,9 @@ import com.ruoyi.system.mapper.TbDeptMapper; import com.ruoyi.system.query.ScoreQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.utils.FieldBuildUtil; import com.ruoyi.system.vo.BasicDataReportingVO; import com.ruoyi.system.vo.FieldReportingVO; import com.ruoyi.system.vo.FieldsTreeVO; import com.ruoyi.system.vo.ScoreVO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -62,7 +63,9 @@ private final TbScoreService tbScoreService; @Override public R<BasicDataReportingVO> getBasicFields(String deptAreaCode) throws Exception { public R<BasicDataReportingVO> getBasicFields() throws Exception { SysUser user = SecurityUtils.getLoginUser().getUser(); String deptAreaCode = user.getAreaCode(); BasicDataReportingVO vo = new BasicDataReportingVO(); //校验区划代码 TbDept dept = tbDeptMapper.selectOne(Wrappers.<TbDept>lambdaQuery().eq(TbDept::getAreaCode, deptAreaCode)); @@ -95,9 +98,20 @@ .between(TbBasicData::getCreateTime, quarterStart,quarterEnd)); //查询需要填写的字段 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)) { List<FieldReportingVO> fieldReportingVOS = BeanUtils.copyList(list, FieldReportingVO.class); vo.setFields(fieldReportingVOS); FieldBuildUtil.buildTreeFromTbFieldList(list,roots); vo.setFields(roots); } if (Objects.isNull(basicData)) { vo.setQuarter(String.format("%s年%s季度",now.getYear(),quarterOfYearStr)); @@ -108,19 +122,26 @@ //查询已填报数据 包含数据缺失和已填报 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())); vo.getFields().forEach(item -> { TbBasicDataField tbBasicDataField = fieldMap.get(item.getId()); if (Objects.nonNull(tbBasicDataField)) { item.setValue(tbBasicDataField.getFieldValue()); } }); setFieldValues(vo.getFields(), fieldMap); return R.ok(vo); } } return R.ok(vo); } public static void setFieldValues(List<FieldsTreeVO> fields, Map<Long, TbBasicDataField> fieldMap) { for (FieldsTreeVO field : fields) { TbBasicDataField tbBasicDataField = fieldMap.get(field.getId()); if (tbBasicDataField != null) { field.setValue(tbBasicDataField.getFieldValue()); } if (field.getChildren() != null && !field.getChildren().isEmpty()) { setFieldValues(field.getChildren(), fieldMap); } } } @Override @@ -138,9 +159,16 @@ this.saveOrUpdate(tbBasicData); //保存基础数据动态字段数据 List<TbBasicDataField> tbBasicDataFields = BeanUtils.copyList(dto.getFields(), TbBasicDataField.class); tbBasicDataFields.forEach(item -> item.setBasicDataId(tbBasicData.getId())); //查询需要填写的动态字段 List<TbField> fieldList = tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list(); Map<Long, TbField> fieldMap = fieldList.stream().collect(Collectors.toMap(TbField::getId, e -> e)); tbBasicDataFields.forEach(item -> { item.setBasicDataId(tbBasicData.getId()); TbField tbField = fieldMap.get(item.getFieldId()); if (Objects.nonNull(tbField)) { item.setFieldName(tbField.getFieldName()); } }); //添加固定字段 转移支付规模、当期GDP TbBasicDataField transferPaymentScale = new TbBasicDataField(); transferPaymentScale.setBasicDataId(tbBasicData.getId()); @@ -215,6 +243,7 @@ } return -1; // 返回-1表示未找到 } private List<List<Object>> dataList(List<TbField> list) throws Exception { LoginUser loginUser = SecurityUtils.getLoginUser(); String areaName = loginUser.getUser().getAreaName(); @@ -250,6 +279,7 @@ headTitles.add(Lists.newArrayList("备注")); return headTitles; } @Override @Transactional(rollbackFor = Exception.class) public void importBasicData(MultipartFile file) throws Exception { @@ -261,6 +291,7 @@ tbFieldService,areaCode,tbBasicDataFieldService,tbBasicDataConfigService, tbBasicDataConfigDetailService,tbScoreService)).sheet().doRead(); } private void calculateScore(TbBasicData tbBasicData) { //计算得分 List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery().eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW).list(); @@ -333,6 +364,7 @@ } } } @Override public PageDTO<ScoreVO> pageScore(ScoreQuery query) { Page<ScoreVO> page = new Page<>(query.getPageNum(), query.getPageSize()); @@ -352,7 +384,7 @@ } query.setBasicDataId(basicData.getId()); //查询对应的基础数据配置 List<ScoreVO> vos = tbScoreService.pageScore(query,page); return PageDTO.of(page, vos); Page<ScoreVO> pageVO = tbScoreService.pageScore(query,page); return PageDTO.of(pageVO); } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java
@@ -10,26 +10,26 @@ import com.ruoyi.common.utils.BeanUtils; import com.ruoyi.common.utils.CollUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.TbBasicDataConfig; import com.ruoyi.system.domain.TbField; import com.ruoyi.system.domain.TbFieldCategory; import com.ruoyi.system.domain.*; import com.ruoyi.system.dto.FieldDTO; import com.ruoyi.system.dto.ShowHideDTO; import com.ruoyi.system.dto.update.FieldUpdateDTO; import com.ruoyi.system.mapper.TbBasicDataMapper; import com.ruoyi.system.mapper.TbFieldMapper; import com.ruoyi.system.query.FieldQuery; import com.ruoyi.system.service.TbBasicDataConfigService; import com.ruoyi.system.service.TbBasicDataFieldService; import com.ruoyi.system.service.TbFieldCategoryService; import com.ruoyi.system.service.TbFieldService; import com.ruoyi.system.utils.FieldBuildUtil; import com.ruoyi.system.vo.BasicDataFieldVO; import com.ruoyi.system.vo.FieldVO; import com.ruoyi.system.vo.FieldsTreeVO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; @@ -47,6 +47,8 @@ public class TbFieldServiceImpl extends ServiceImpl<TbFieldMapper, TbField> implements TbFieldService { private final TbFieldCategoryService tbFieldCategoryService; private final TbBasicDataConfigService tbBasicDataConfigService; private final TbBasicDataMapper tbBasicDataMapper; private final TbBasicDataFieldService tbBasicDataFieldService; @Override public void add(FieldDTO dto) { @@ -152,4 +154,41 @@ TbField tbField = BeanUtils.copyBean(dto, TbField.class); this.updateById(tbField); } @Override public BasicDataFieldVO getHistoryFields(Long id) { // 从数据库中获取基本数据 TbBasicData basicData = tbBasicDataMapper.selectById(id); if (Objects.isNull(basicData)) { throw new ServiceException("非法参数"); } BasicDataFieldVO vo = BeanUtils.copyBean(basicData, BasicDataFieldVO.class); // 查询动态字段 List<TbBasicDataField> basicDataFields = tbBasicDataFieldService.lambdaQuery().eq(TbBasicDataField::getBasicDataId, basicData.getId()).list(); // 获取所有字段ID Set<Long> fieldIds = basicDataFields.stream().map(TbBasicDataField::getFieldId).collect(Collectors.toSet()); // 根据字段ID查询字段信息并构建字段ID到字段对象的映射 Map<Long, TbField> fieldMap = this.lambdaQuery().in(!fieldIds.isEmpty(), TbField::getId, fieldIds).list().stream().collect(Collectors.toMap(TbField::getId, e -> e)); // 根节点 List<FieldsTreeVO> root = new ArrayList<>(); basicDataFields.stream().filter(item -> item.getFieldId()==-1).findFirst().ifPresent(item ->{ FieldsTreeVO fieldsTreeVO = new FieldsTreeVO(); fieldsTreeVO.setId(item.getFieldId()); fieldsTreeVO.setName("转移支付规模"); fieldsTreeVO.setValue(item.getFieldValue()); fieldsTreeVO.setCategory(Boolean.FALSE); root.add(fieldsTreeVO); }); basicDataFields.stream().filter(item -> item.getFieldId()==-2).findFirst().ifPresent(item ->{ FieldsTreeVO fieldsTreeVO = new FieldsTreeVO(); fieldsTreeVO.setId(item.getFieldId()); fieldsTreeVO.setName("当期GDP"); fieldsTreeVO.setValue(item.getFieldValue()); fieldsTreeVO.setCategory(Boolean.FALSE); root.add(fieldsTreeVO); }); FieldBuildUtil.buildTreeStructure(basicDataFields, fieldMap, root); vo.setFields(root); return vo; } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbScoreServiceImpl.java
@@ -2,14 +2,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageDTO; import com.ruoyi.common.utils.BeanUtils; import com.ruoyi.system.domain.TbScore; import com.ruoyi.system.mapper.TbScoreMapper; import com.ruoyi.system.query.HistoryScoreQuery; import com.ruoyi.system.query.ScoreQuery; import com.ruoyi.system.service.TbScoreService; import com.ruoyi.system.vo.ScoreVO; import org.springframework.stereotype.Service; import java.util.List; /** * <p> @@ -23,7 +24,14 @@ public class TbScoreServiceImpl extends ServiceImpl<TbScoreMapper, TbScore> implements TbScoreService { @Override public List<ScoreVO> pageScore(ScoreQuery query, Page<ScoreVO> page) { public Page<ScoreVO> pageScore(ScoreQuery query, Page<ScoreVO> page) { return baseMapper.pageScore(query,page); } @Override public PageDTO<ScoreVO> getHistoryScore(HistoryScoreQuery query) { ScoreQuery scoreQuery = BeanUtils.copyBean(query, ScoreQuery.class); Page<ScoreVO> scoreVOPage = baseMapper.pageScore(scoreQuery, new Page<>(query.getPageNum(), query.getPageSize())); return PageDTO.of(scoreVOPage); } } ruoyi-system/src/main/java/com/ruoyi/system/utils/FieldBuildUtil.java
New file @@ -0,0 +1,137 @@ package com.ruoyi.system.utils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.TbBasicDataField; import com.ruoyi.system.domain.TbField; import com.ruoyi.system.vo.FieldsTreeVO; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author mitao * @date 2024/4/3 */ public class FieldBuildUtil { /** * 构建基础数据字段树形层级 * * @param basicDataFields 基础数据字段 * @param fieldMap 字段Map * @param roots 返回的vo */ public static void buildTreeStructure(List<TbBasicDataField> basicDataFields, Map<Long, TbField> fieldMap, List<FieldsTreeVO> roots) { Map<String, FieldsTreeVO> levelTwoMap = new HashMap<>(); Map<String, FieldsTreeVO> levelThreeMap = new HashMap<>(); for (TbBasicDataField item : basicDataFields) { TbField tbField = fieldMap.get(item.getFieldId()); if (tbField != null) { String levelOneCategory = tbField.getLevelOneCategory(); String levelTwoCategory = tbField.getLevelTwoCategory(); String levelThreeCategory = tbField.getLevelThreeCategory(); Long id = tbField.getId(); String fieldName = tbField.getFieldName(); String fieldValue = item.getFieldValue(); FieldsTreeVO field = new FieldsTreeVO(); field.setId(id); field.setName(fieldName); field.setValue(fieldValue); field.setCategory(Boolean.FALSE); FieldsTreeVO levelOneField = null; for (FieldsTreeVO root : roots) { if (root.getName().equals(levelOneCategory)) { levelOneField = root; break; } } if (levelOneField == null) { levelOneField = new FieldsTreeVO(); levelOneField.setName(levelOneCategory); roots.add(levelOneField); } if (StringUtils.isNotBlank(levelTwoCategory)) { FieldsTreeVO levelTwoField = levelTwoMap.getOrDefault(levelTwoCategory, null); if (levelTwoField == null) { levelTwoField = new FieldsTreeVO(); levelTwoField.setName(levelTwoCategory); levelTwoMap.put(levelTwoCategory, levelTwoField); levelOneField.getChildren().add(levelTwoField); } if (StringUtils.isNotBlank(levelThreeCategory)) { FieldsTreeVO levelThreeField = levelThreeMap.getOrDefault(levelThreeCategory, null); if (levelThreeField == null) { levelThreeField = new FieldsTreeVO(); levelThreeField.setName(levelThreeCategory); levelThreeMap.put(levelThreeCategory, levelThreeField); levelTwoField.getChildren().add(levelThreeField); } levelThreeField.getChildren().add(field); } else { levelTwoField.getChildren().add(field); } } else { levelOneField.getChildren().add(field); } } } } /** * 构建字段树形层级 * * @param tbFieldList 字段列表 */ public static void buildTreeFromTbFieldList(List<TbField> tbFieldList, List<FieldsTreeVO> roots) { Map<String, FieldsTreeVO> levelOneMap = new HashMap<>(); Map<String, FieldsTreeVO> levelTwoMap = new HashMap<>(); for (TbField tbField : tbFieldList) { String levelOneCategory = tbField.getLevelOneCategory(); String levelTwoCategory = tbField.getLevelTwoCategory(); String levelThreeCategory = tbField.getLevelThreeCategory(); String fieldName = tbField.getFieldName(); Long id = tbField.getId(); FieldsTreeVO field = new FieldsTreeVO(); field.setId(id); field.setName(fieldName); field.setCategory(Boolean.FALSE); FieldsTreeVO levelOneField = null; for (FieldsTreeVO root : roots) { if (root.getName().equals(levelOneCategory)) { levelOneField = root; break; } } if (levelOneField == null) { levelOneField = new FieldsTreeVO(); levelOneField.setName(levelOneCategory); roots.add(levelOneField); } if (StringUtils.isNotBlank(levelTwoCategory)) { FieldsTreeVO levelTwoField = levelTwoMap.getOrDefault(levelTwoCategory, null); if (levelTwoField == null) { levelTwoField = new FieldsTreeVO(); levelTwoField.setName(levelTwoCategory); levelOneField.getChildren().add(levelTwoField); levelTwoMap.put(levelTwoCategory, levelTwoField); } if (StringUtils.isNotBlank(levelThreeCategory)) { FieldsTreeVO levelThreeField = new FieldsTreeVO(); levelThreeField.setName(levelThreeCategory); levelTwoField.getChildren().add(levelThreeField); levelThreeField.getChildren().add(field); } else { levelTwoField.getChildren().add(field); } } else { levelOneField.getChildren().add(field); } } } } ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataFieldVO.java
@@ -1,8 +1,46 @@ package com.ruoyi.system.vo; import com.ruoyi.common.enums.ReportingStatusEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.time.LocalDateTime; import java.util.List; /** * @author mitao * @date 2024/3/19 */ public class BasicDataFieldVO { @Data @ApiModel(value="字段统计填报视图对象") public class BasicDataFieldVO implements Serializable { private static final long serialVersionUID = -4911170218076417743L; @ApiModelProperty(value = "季度") private String quarter; @ApiModelProperty(value = "转移支付规模") private String transferPaymentScale; @ApiModelProperty(value = "当期GDP") private String currentGdp; @ApiModelProperty(value = "备注") private String remark; @ApiModelProperty(value = "填报状态(1=未填报 2=数据缺失 3=已填报)") private ReportingStatusEnum status; @ApiModelProperty(value = "动态字段") private List<FieldsTreeVO> fields; @ApiModelProperty(value = "首次填报时间") private LocalDateTime createTime; @ApiModelProperty(value = "填报完成时间",notes = "状态为已填报才展示") private LocalDateTime updateTime; } ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataReportingVO.java
@@ -7,7 +7,6 @@ import java.io.Serializable; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; /** @@ -32,10 +31,10 @@ @ApiModelProperty(value = "首次填报时间") private LocalDateTime createTime; @ApiModelProperty(value = "填报完成时间") @ApiModelProperty(value = "填报完成时间",notes = "状态为已填报才展示") private LocalDateTime updateTime; //1:未填报 2:数据缺失 3:已填报 @ApiModelProperty(value = "动态字段") private List<FieldReportingVO> fields = new ArrayList<>(); @ApiModelProperty(value = "字段") private List<FieldsTreeVO> fields; } ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataVO.java
New file @@ -0,0 +1,24 @@ package com.ruoyi.system.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; /** * @author mitao * @date 2024/4/3 */ @Data @ApiModel(value="历史数据视图对象") public class BasicDataVO implements Serializable { private static final long serialVersionUID = -2405812660664664181L; @ApiModelProperty(value = "基础数据id") private Integer id; @ApiModelProperty(value = "季度") private String quarter; } ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldsTreeVO.java
New file @@ -0,0 +1,36 @@ package com.ruoyi.system.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * @author mitao * @date 2024/4/3 */ @Data @ApiModel(value="字段树形层级视图对象") public class FieldsTreeVO implements Serializable { private static final long serialVersionUID = -3825263999732477730L; @ApiModelProperty(value = "字段id") private Long id; @ApiModelProperty(value = "数据详情") private String value; @ApiModelProperty(value = "名称") private String name; @ApiModelProperty(value = "是否为分类") private Boolean category = Boolean.TRUE; @ApiModelProperty(value = "字段列表") private List<FieldsTreeVO> children = new ArrayList<>(); } ruoyi-system/src/main/resources/mapper/system/TbBasicDataFieldMapper.xml
@@ -7,6 +7,7 @@ <id column="id" property="id" /> <result column="basic_data_id" property="basicDataId" /> <result column="field_id" property="fieldId" /> <result column="field_name" property="fieldName" /> <result column="field_value" property="fieldValue" /> <result column="del_flag" property="delFlag" /> <result column="create_by" property="createBy" />