mitao
2024-07-05 7a1e9b29aa74f0ae130f462af7bf2b1f15d17b3c
finance-system/src/main/java/com/finance/system/listener/BasicDataListener.java
@@ -8,7 +8,6 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists;
import com.finance.common.enums.CalculateTypeEnum;
import com.finance.common.enums.DataScreenConfigEnum;
import com.finance.common.enums.FieldInputTypeEnum;
@@ -37,6 +36,7 @@
import com.finance.system.service.TbFieldService;
import com.finance.system.service.TbScoreService;
import com.finance.system.vo.DataScreenConfigVO;
import com.google.common.collect.Lists;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@@ -46,6 +46,7 @@
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
@Slf4j
public class BasicDataListener extends AnalysisEventListener<Map<Integer, String>> {
@@ -157,16 +158,25 @@
        // 查询需要填写的动态字段
        List<TbField> fieldList =
                tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list();
        Map<Integer, String> headMap = cachedDataList.get(cachedDataList.size() - 3);
        Map<Integer, String> dataMap = cachedDataList.get(cachedDataList.size() - 1);
        Map<Integer, String> categoryOneMap = cachedDataList.get(0);
        Map<Integer, String> categoryTwoMap = cachedDataList.get(1);
        Map<Integer, String> categoryThreeMap = cachedDataList.get(2);
        Map<Integer, String> headMap = cachedDataList.get(3);
        Map<Integer, String> dataMap = cachedDataList.get(5);
        log.info("{}条数据,开始存储数据库!", cachedDataList.size());
        log.info("表头:{}", JSON.toJSONString(headMap));
        log.info("填写的数据:{}", JSON.toJSONString(dataMap));
        log.info("所有数据:{}", JSON.toJSONString(cachedDataList));
        int remarkIndex = headMap.size() - 1;
        Map<Integer, String> dynamicFieldsMap = headMap.entrySet().stream()
                .filter(entry -> !(Lists.newArrayList(0, 1, 2, 3).contains(entry.getKey())
                        || entry.getKey() == remarkIndex))
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
        Map<Integer, String> dynamicFieldsMap = getIntegerStringMap(headMap, remarkIndex);
        Map<Integer, String> dynamicCategoryOneMap = getIntegerStringMap(categoryOneMap,
                remarkIndex);
        Map<Integer, String> dynamicCategoryTwoMap = getIntegerStringMap(categoryTwoMap,
                remarkIndex);
        Map<Integer, String> dynamicCategoryThreeMap = getIntegerStringMap(categoryThreeMap,
                remarkIndex);
        List<String> dynamicFields = new ArrayList<>(dynamicFieldsMap.values());
        List<String> collect = fieldList.stream().map(TbField::getFieldName)
                .collect(Collectors.toList());
@@ -208,11 +218,21 @@
        fields.add(currentGdp);
        //遍历动态字段map
        for (Map.Entry<Integer, String> integerStringEntry : dynamicFieldsMap.entrySet()) {
            Optional<TbField> tbField = tbFieldService.lambdaQuery()
                    .eq(TbField::getFieldName, integerStringEntry.getValue())
                    .eq(TbField::getStatus, ShowStatusEnum.SHOW).oneOpt();
            if (tbField.isPresent()) {
                TbField field = tbField.get();
            String categoryOne = dynamicCategoryOneMap.get(integerStringEntry.getKey());
            String categoryTwo = dynamicCategoryTwoMap.get(integerStringEntry.getKey());
            String categoryThree = dynamicCategoryThreeMap.get(integerStringEntry.getKey());
            String fieldStr = integerStringEntry.getValue();
            boolean res = !fieldStr.equals(categoryTwo);
            List<TbField> tbField = tbFieldService.lambdaQuery()
                    .eq(TbField::getFieldName, fieldStr)
                    .eq(TbField::getStatus, ShowStatusEnum.SHOW)
                    .eq(TbField::getLevelOneCategory, categoryOne)
                    .eq(res, TbField::getLevelTwoCategory, categoryTwo)
                    .eq(!fieldStr.equals(categoryThree) && res, TbField::getLevelThreeCategory,
                            categoryThree)
                    .list();
            if (CollUtils.isNotEmpty(tbField)) {
                TbField field = tbField.get(0);
                String value = validateFields(integerStringEntry, dataMap, field);
                TbBasicDataField tbBasicDataField = new TbBasicDataField();
                tbBasicDataField.setBasicDataId(tbBasicData.getId());
@@ -232,6 +252,16 @@
        });
    }
    @NotNull
    private static Map<Integer, String> getIntegerStringMap(Map<Integer, String> headMap,
            int remarkIndex) {
        Map<Integer, String> dynamicFieldsMap = headMap.entrySet().stream()
                .filter(entry -> !(Lists.newArrayList(0, 1, 2, 3).contains(entry.getKey())
                        || entry.getKey() == remarkIndex))
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
        return dynamicFieldsMap;
    }
    private void calculateScore(TbBasicData tbBasicData, List<TbBasicDataField> fields) {
        List<TbScore> scoreList = new ArrayList<>();
        //计算得分