mitao
2024-03-22 e69dec94fe9763d04425756370760698850f926f
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java
@@ -1,11 +1,12 @@
package com.ruoyi.system.service.impl;
import cn.hutool.json.JSONArray;
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;
@@ -14,19 +15,22 @@
import com.ruoyi.system.domain.TbFieldCategory;
import com.ruoyi.system.dto.FieldDTO;
import com.ruoyi.system.dto.ShowHideDTO;
import com.ruoyi.system.dto.update.FieldUpdateDTO;
import com.ruoyi.system.mapper.TbFieldMapper;
import com.ruoyi.system.query.FieldQuery;
import com.ruoyi.system.service.TbBasicDataConfigService;
import com.ruoyi.system.service.TbFieldCategoryService;
import com.ruoyi.system.service.TbFieldService;
import com.ruoyi.system.vo.FieldVO;
import lombok.Data;
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.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
@@ -51,9 +55,9 @@
        //1:数字 2:文本 3:百分比
        if (FieldTypeEnum.TEXT.getCode().equals(fieldType)) {
            if (StringUtils.isNull(dto.getTextInputType())) {
                throw new RuntimeException("输入类型不能为空");
                throw new ServiceException("输入类型不能为空");
            } else if (FieldInputTypeEnum.FIXED_CONTENT.getCode().equals(dto.getTextInputType()) && StringUtils.isBlank(dto.getTextContent())) {
                throw new RuntimeException("内容设置不能为空");
                throw new ServiceException("内容设置不能为空");
            }
        }
        TbField tbField = BeanUtils.copyBean(dto, TbField.class);
@@ -72,14 +76,32 @@
    @Override
    public void showHide(ShowHideDTO dto) {
        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();
        //隐藏基础数据 TODO
        tbBasicDataConfigService.lambdaUpdate().eq(TbBasicDataConfig::getFieldId, dto.getId()).set(TbBasicDataConfig::getStatus, dto.getStatus()).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<Integer> 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
@@ -100,39 +122,34 @@
    }
    @Override
    public List<String> influencedData(Integer id) {
        List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery().eq(TbBasicDataConfig::getFieldId, id).list();
    public String influencedData(Integer id) {
        List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery().eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW).list();
        if (CollUtils.isEmpty(list)) {
            return CollUtils.emptyList();
            return "";
        }
        return list.stream().map(TbBasicDataConfig::getTypeName).collect(Collectors.toList());
        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;
    }
    public static void main(String[] args) {
        String string = "蓝色_10,红色_20,绿色_30";
        String[] split = string.split(",");
        for (String s : split) {
            String[] split1 = s.split("_");
            System.out.println(split1[1]);
    @Override
    public void update(FieldUpdateDTO dto) {
        TbField field = this.getById(dto.getId());
        if (Objects.isNull(field)) {
            throw new ServiceException("参数异常");
        }
        //百分比1_百分比2:得分
        String string1 = "10_20:50,20_30:50,30_40:60";
        CalculateDTO calculateDTO = new CalculateDTO();
        calculateDTO.setKey("10_20");
        calculateDTO.setValue("20");
        CalculateDTO calculateDTO1 = new CalculateDTO();
        calculateDTO1.setKey("20_30");
        calculateDTO1.setValue("30");
        List<CalculateDTO> list = new ArrayList<>();
        list.add(calculateDTO);
        list.add(calculateDTO1);
        JSONArray objects = new JSONArray(list);
        String jsonString = objects.toJSONString(2);
        System.err.println(jsonString);
        TbField tbField = BeanUtils.copyBean(dto, TbField.class);
        this.updateById(tbField);
    }
}
@Data
class CalculateDTO{
    private String key;
    private String value;
}