From ba421d977e745d18a6264353c739bcaaf44c40d6 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期一, 08 四月 2024 18:39:41 +0800 Subject: [PATCH] 历史数据模块接口 --- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java | 184 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 182 insertions(+), 2 deletions(-) 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 89e2c66..4534eac 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 @@ -1,10 +1,37 @@ package com.ruoyi.system.service.impl; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.system.domain.TbField; +import com.ruoyi.common.basic.PageDTO; +import com.ruoyi.common.enums.FieldInputTypeEnum; +import com.ruoyi.common.enums.FieldTypeEnum; +import com.ruoyi.common.enums.ShowStatusEnum; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.BeanUtils; +import com.ruoyi.common.utils.CollUtils; +import com.ruoyi.common.utils.StringUtils; +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.*; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; /** * <p> @@ -14,7 +41,160 @@ * @author mitao * @since 2024-03-13 */ +@Slf4j @Service +@RequiredArgsConstructor 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) { + //参数校验 + FieldTypeEnum fieldType = dto.getFieldType(); + //1:数字 2:文本 3:百分比 + if (FieldTypeEnum.TEXT.equals(fieldType)) { + if (StringUtils.isNull(dto.getTextInputType())) { + throw new ServiceException("输入类型不能为空"); + } else if (FieldInputTypeEnum.FIXED_CONTENT.equals(dto.getTextInputType()) && StringUtils.isBlank(dto.getTextContent())) { + throw new ServiceException("内容设置不能为空"); + } + } + TbField tbField = BeanUtils.copyBean(dto, TbField.class); + TbFieldCategory category1 = tbFieldCategoryService.getById(dto.getLevelOneCategoryId()); + tbField.setLevelOneCategory(category1.getFieldCategoryName()); + if (StringUtils.isNotNull(dto.getLevelTwoCategoryId())) { + TbFieldCategory category2 = tbFieldCategoryService.getById(dto.getLevelTwoCategoryId()); + tbField.setLevelTwoCategory(category2.getFieldCategoryName()); + } + if (StringUtils.isNotNull(dto.getLevelThreeCategoryId())) { + TbFieldCategory category3 = tbFieldCategoryService.getById(dto.getLevelThreeCategoryId()); + tbField.setLevelThreeCategory(category3.getFieldCategoryName()); + } + this.save(tbField); + } + + @Override + public void showHide(ShowHideDTO dto) { + log.info("======主线程执行showHide{}",Thread.currentThread().getName() ); + TbField field = this.getById(dto.getId()); + if (StringUtils.isNull(field)) { + throw new ServiceException("非法参数"); + } + //隐藏字段 + this.lambdaUpdate().set(TbField::getStatus, dto.getStatus()).eq(TbField::getId, dto.getId()).update(); + //异步隐藏基础数据配置 + CompletableFuture.runAsync(() -> handleDataConfig(dto, field)); + } + private void handleDataConfig(ShowHideDTO dto, TbField field) { + log.info("======子线程执行handleDataConfig{}",Thread.currentThread().getName() ); + List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery().eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW.getCode()).list(); + if (CollUtils.isNotEmpty(list)) { + List<Long> ids = list.stream().map(config -> { + String fieldIdStr = config.getFieldIdStr(); + String[] split = fieldIdStr.split(","); + //字符串数组转为List + List<String> idList = new ArrayList<>(Arrays.asList(split)); + if (idList.contains(field.getId().toString())) { + return config.getId(); + } + return null; + }).collect(Collectors.toList()); + tbBasicDataConfigService.lambdaUpdate().set(TbBasicDataConfig::getStatus, dto.getStatus()).in(TbBasicDataConfig::getId, ids).update(); + } + } + + @Override + public PageDTO<FieldVO> queryPage(FieldQuery query) { + Page<TbField> page = this.lambdaQuery() + .like(StringUtils.isNotEmpty(query.getFieldName()), TbField::getFieldName, query.getFieldName()) + .like(StringUtils.isNotEmpty(query.getLevelOneCategory()), TbField::getLevelOneCategory, query.getLevelOneCategory()) + .like(StringUtils.isNotEmpty(query.getLevelTwoCategory()), TbField::getLevelTwoCategory, query.getLevelTwoCategory()) + .like(StringUtils.isNotEmpty(query.getLevelThreeCategory()), TbField::getLevelThreeCategory, query.getLevelThreeCategory()) + .eq(StringUtils.isNotNull(query.getStatus()), TbField::getStatus, query.getStatus()) + .eq(StringUtils.isNotNull(query.getFieldType()), TbField::getFieldType, query.getFieldType()) + .orderByDesc(TbField::getCreateTime) + .page(new Page<>(query.getPageNum(), query.getPageSize())); + if (CollUtils.isEmpty(page.getRecords())) { + return PageDTO.empty(page); + } + return PageDTO.of(page, FieldVO.class); + } + + @Override + public String influencedData(Long id) { + List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery().eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW).list(); + if (CollUtils.isEmpty(list)) { + return ""; + } + String collect = list.stream().map(config -> { + String fieldIdStr = config.getFieldIdStr(); + String[] split = fieldIdStr.split(","); + //字符串数组转为List + List<String> idList = Arrays.asList(split); + if (idList.contains(id.toString())) { + return config.getTypeName(); + } + return null; + }).filter(Objects::nonNull).collect(Collectors.joining(",")); + if (StringUtils.isBlank(collect)) { + return ""; + } + return collect; + } + + @Override + public void update(FieldUpdateDTO dto) { + TbField field = this.getById(dto.getId()); + if (Objects.isNull(field)) { + throw new ServiceException("参数异常"); + } + 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); + FieldsTreeVO fieldsTreeVO = new FieldsTreeVO(); + fieldsTreeVO.setId(-3L); + fieldsTreeVO.setName("备注"); + fieldsTreeVO.setValue(vo.getRemark()); + fieldsTreeVO.setCategory(Boolean.FALSE); + root.add(fieldsTreeVO); + vo.setFields(root); + return vo; + } +} \ No newline at end of file -- Gitblit v1.7.1