From 321d507a5670cb36c1550445c4795a76c9d7d226 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期三, 03 四月 2024 18:06:49 +0800 Subject: [PATCH] 部门端历史数据模块、字段查看模块返回数据层级关系处理 --- ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbScoreMapper.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataFieldVO.java | 40 ++++ ruoyi-system/src/main/java/com/ruoyi/system/dto/HistoryDataQueryDTO.java | 31 +++ ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java | 58 +++++- ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataVO.java | 24 ++ ruoyi-system/src/main/java/com/ruoyi/system/service/TbScoreService.java | 8 ruoyi-system/src/main/resources/mapper/system/TbBasicDataFieldMapper.xml | 1 ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java | 46 ++++ ruoyi-system/src/main/java/com/ruoyi/system/service/TbFieldService.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/utils/FieldBuildUtil.java | 137 +++++++++++++++ ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java | 6 ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java | 53 +++++ ruoyi-system/src/main/java/com/ruoyi/system/query/ScoreQuery.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/query/HistoryScoreQuery.java | 29 +++ ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicData.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataField.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldsTreeVO.java | 36 ++++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbScoreServiceImpl.java | 14 + ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataReportingVO.java | 7 21 files changed, 467 insertions(+), 44 deletions(-) diff --git a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java index d4c52a7..458aa5e 100644 --- a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java +++ b/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()); diff --git a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java index f45555b..40ed183 100644 --- a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java +++ b/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)); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicData.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicData.java index c79f27a..3fd566a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicData.java +++ b/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; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataField.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataField.java index 24a8b0f..18a93aa 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataField.java +++ b/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; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/HistoryDataQueryDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/HistoryDataQueryDTO.java new file mode 100644 index 0000000..6c3c98f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/HistoryDataQueryDTO.java @@ -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; +} + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java b/ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java index d08192d..e94143e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java +++ b/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); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbScoreMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbScoreMapper.java index febcccb..cc895cd 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbScoreMapper.java +++ b/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); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/HistoryScoreQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/HistoryScoreQuery.java new file mode 100644 index 0000000..1d11d5e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/HistoryScoreQuery.java @@ -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; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/ScoreQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/ScoreQuery.java index d85f297..7216e28 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/query/ScoreQuery.java +++ b/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; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java index 3f33c57..983022e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java +++ b/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); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbFieldService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbFieldService.java index b64309a..7b17094 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbFieldService.java +++ b/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); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbScoreService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbScoreService.java index f6e8801..d5a6f47 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbScoreService.java +++ b/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); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java index 77e4182..301ee1b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java +++ b/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); } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java index feab17d..12285e4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java +++ b/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; + } } \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbScoreServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbScoreServiceImpl.java index fd44836..1b5cf69 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbScoreServiceImpl.java +++ b/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); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/FieldBuildUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/FieldBuildUtil.java new file mode 100644 index 0000000..47fbb5a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/FieldBuildUtil.java @@ -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); + } + } + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataFieldVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataFieldVO.java index 85acebb..6417359 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataFieldVO.java +++ b/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; + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataReportingVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataReportingVO.java index 21283ae..71646a5 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataReportingVO.java +++ b/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; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataVO.java new file mode 100644 index 0000000..9313a10 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataVO.java @@ -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; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldsTreeVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldsTreeVO.java new file mode 100644 index 0000000..a03ed3b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldsTreeVO.java @@ -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<>(); + +} diff --git a/ruoyi-system/src/main/resources/mapper/system/TbBasicDataFieldMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TbBasicDataFieldMapper.xml index 98fad3b..edf56a6 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TbBasicDataFieldMapper.xml +++ b/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" /> -- Gitblit v1.7.1