mitao
2024-04-07 5980a5fed8092f9866cb2f6a8b74abb7d631c018
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java
@@ -6,27 +6,30 @@
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.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.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
@@ -44,17 +47,19 @@
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) {
        //参数校验
        Integer fieldType = dto.getFieldType();
        FieldTypeEnum fieldType = dto.getFieldType();
        //1:数字 2:文本 3:百分比
        if (FieldTypeEnum.TEXT.getCode().equals(fieldType)) {
        if (FieldTypeEnum.TEXT.equals(fieldType)) {
            if (StringUtils.isNull(dto.getTextInputType())) {
                throw new RuntimeException("输入类型不能为空");
            } else if (FieldInputTypeEnum.FIXED_CONTENT.getCode().equals(dto.getTextInputType()) && StringUtils.isBlank(dto.getTextContent())) {
                throw new RuntimeException("内容设置不能为空");
                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);
@@ -76,7 +81,7 @@
        log.info("======主线程执行showHide{}",Thread.currentThread().getName() );
        TbField field = this.getById(dto.getId());
        if (StringUtils.isNull(field)) {
            throw new RuntimeException("非法参数");
            throw new ServiceException("非法参数");
        }
        //隐藏字段
        this.lambdaUpdate().set(TbField::getStatus, dto.getStatus()).eq(TbField::getId, dto.getId()).update();
@@ -87,7 +92,7 @@
        log.info("======子线程执行handleDataConfig{}",Thread.currentThread().getName() );
        List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery().eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW.getCode()).list();
        if (CollUtils.isNotEmpty(list)) {
            List<Integer> ids = list.stream().map(config -> {
            List<Long> ids = list.stream().map(config -> {
                String fieldIdStr = config.getFieldIdStr();
                String[] split = fieldIdStr.split(",");
                //字符串数组转为List
@@ -119,25 +124,77 @@
    }
    @Override
    public List<String> influencedData(Integer id) {
        //List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery().like(TbBasicDataConfig::getFieldIdStr, id).list();
        List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery().eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW.getCode()).list();
    public String influencedData(Long id) {
        List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery().eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW).list();
        if (CollUtils.isEmpty(list)) {
            return CollUtils.emptyList();
            return "";
        }
        List<String> collect = list.stream().map(config -> {
        String collect = list.stream().map(config -> {
            String fieldIdStr = config.getFieldIdStr();
            String[] split = fieldIdStr.split(",");
            //字符串数组转为List
            List<String> idList = new ArrayList<>(Arrays.asList(split));
            List<String> idList = Arrays.asList(split);
            if (idList.contains(id.toString())) {
                return config.getTypeName();
            }
            return null;
        }).collect(Collectors.toList());
        if (CollUtils.isEmpty(collect)) {
            return CollUtils.emptyList();
        }).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;
    }
}