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 |  150 +++++++++++++++++++++++++++++++++++--------------
 1 files changed, 106 insertions(+), 44 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 521952d..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,32 +1,36 @@
 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;
-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 lombok.Data;
+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.List;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
 /**
@@ -43,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);
@@ -72,14 +78,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<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
@@ -100,39 +124,77 @@
     }
 
     @Override
-    public List<String> influencedData(Integer id) {
-        List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery().eq(TbBasicDataConfig::getFieldId, id).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 "";
         }
-        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;
+
+    @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