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.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>
|
* 字段表 服务实现类
|
* </p>
|
*
|
* @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;
|
}
|
}
|