From 4403a428edc18482c5aa561e603b26ebe13d328f Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期二, 02 四月 2024 18:27:02 +0800
Subject: [PATCH] 部门端登录、基础数据导入优化、得分计算优化

---
 ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java |  108 ++++++++++++++++++++++++++++-------------------------
 1 files changed, 57 insertions(+), 51 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java b/ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java
index b38a865..d08192d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/listener/BasicDataListener.java
@@ -16,7 +16,6 @@
 
 import java.time.LocalDate;
 import java.util.*;
-import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -29,7 +28,7 @@
     public TbBasicDataService tbBasicDataService;
     public List<TbField> fieldList;
     public TbFieldService tbFieldService;
-    public TbDept dept;
+    public String areaCode;
     public TbBasicDataFieldService tbBasicDataFieldService;
     public TbBasicDataConfigService tbBasicDataConfigService;
     public TbBasicDataConfigDetailService tbBasicDataConfigDetailService;
@@ -38,12 +37,12 @@
     }
 
     public BasicDataListener(TbBasicDataService tbBasicDataService, List<TbField> fieldList,TbFieldService tbFieldService,
-                             TbDept dept,TbBasicDataFieldService tbBasicDataFieldService,TbBasicDataConfigService tbBasicDataConfigService,
+                             String areaCode,TbBasicDataFieldService tbBasicDataFieldService,TbBasicDataConfigService tbBasicDataConfigService,
                              TbBasicDataConfigDetailService tbBasicDataConfigDetailService,TbScoreService tbScoreService ) {
         this.tbBasicDataService = tbBasicDataService;
         this.fieldList = fieldList;
         this.tbFieldService = tbFieldService;
-        this.dept = dept;
+        this.areaCode = areaCode;
         this.tbBasicDataFieldService = tbBasicDataFieldService;
         this.tbBasicDataConfigService = tbBasicDataConfigService;
         this.tbBasicDataConfigDetailService = tbBasicDataConfigDetailService;
@@ -70,7 +69,8 @@
     @Override
     public void doAfterAllAnalysed(AnalysisContext context) {
         try {
-            saveData();
+            TbBasicData tbBasicData = saveData();
+            calculateScore(tbBasicData);
         } catch (Exception e) {
             if (e instanceof ServiceException) {
                 throw new ServiceException(e.getMessage());
@@ -83,10 +83,9 @@
     /**
      * 加上存储数据库
      */
-    private void saveData() {
-        Map<Integer, String> headMap = cachedDataList.get(2);
-        Map<Integer, String> quarterMap = cachedDataList.get(4);
-        Map<Integer, String> dataMap = cachedDataList.get(5);
+    private TbBasicData saveData() {
+        Map<Integer, String> headMap = cachedDataList.get(cachedDataList.size()-3);
+        Map<Integer, String> dataMap = cachedDataList.get(cachedDataList.size()-1);
         log.info("{}条数据,开始存储数据库!", cachedDataList.size());
         log.info("表头:{}", JSON.toJSONString(headMap));
         log.info("填写的数据:{}", JSON.toJSONString(dataMap));
@@ -103,18 +102,30 @@
         LocalDate now = LocalDate.now();
         TbBasicData tbBasicData;
         Optional<TbBasicData> tbBasicDataOpt = tbBasicDataService.lambdaQuery().
-                eq(TbBasicData::getQuarter, String.format("%s年%s", now.getYear(), quarterMap.get(1)))
-                .eq(TbBasicData::getDeptAreaCode, dept.getAreaCode()).oneOpt();
+                eq(TbBasicData::getQuarter, String.format("%s年%s", now.getYear(), dataMap.get(1)))
+                .eq(TbBasicData::getDeptAreaCode, areaCode).oneOpt();
         tbBasicData = tbBasicDataOpt.orElseGet(TbBasicData::new);
-        tbBasicData.setQuarter(String.format("%s年%s", now.getYear(), quarterMap.get(1)));
+        tbBasicData.setQuarter(String.format("%s年%s", now.getYear(), dataMap.get(1)));
         tbBasicData.setTransferPaymentScale(dataMap.get(2));
         tbBasicData.setCurrentGdp(dataMap.get(3));
-        tbBasicData.setDeptAreaCode(dept.getAreaCode());
+        tbBasicData.setDeptAreaCode(areaCode);
         tbBasicData.setRemark(dataMap.get(remarkIndex));
         tbBasicData.setStatus(ReportingStatusEnum.MISSING_DATA);
         tbBasicDataService.saveOrUpdate(tbBasicData);
         tbBasicDataFieldService.remove(Wrappers.<TbBasicDataField>lambdaQuery().eq(TbBasicDataField::getBasicDataId, tbBasicData.getId()));
         List<TbBasicDataField> fields = new ArrayList<>();
+        //添加固定字段 转移支付规模、当期GDP
+        TbBasicDataField transferPaymentScale = new TbBasicDataField();
+        transferPaymentScale.setBasicDataId(tbBasicData.getId());
+        transferPaymentScale.setFieldId(-1L);
+        transferPaymentScale.setFieldValue(tbBasicData.getTransferPaymentScale());
+        fields.add(transferPaymentScale);
+
+        TbBasicDataField currentGdp = new TbBasicDataField();
+        currentGdp.setBasicDataId(tbBasicData.getId());
+        currentGdp.setFieldId(-2L);
+        currentGdp.setFieldValue(tbBasicData.getCurrentGdp());
+        fields.add(currentGdp);
         //遍历动态字段map
         for (Map.Entry<Integer, String> integerStringEntry : dynamicFieldsMap.entrySet()) {
             Optional<TbField> tbField = tbFieldService.lambdaQuery().eq(TbField::getFieldName, integerStringEntry.getValue())
@@ -129,17 +140,43 @@
                 fields.add(tbBasicDataField);
             }
         }
-        //异步执行批量保存
-        CompletableFuture.runAsync(() -> tbBasicDataFieldService.saveBatch(fields));
+        tbBasicDataFieldService.saveBatch(fields);
         tbBasicData.setStatus(ReportingStatusEnum.FILLED);
         tbBasicDataService.updateById(tbBasicData);
-        log.info(String.format("%s导入基础数据成功!", quarterMap.get(0)));
-        CompletableFuture.runAsync(() -> calculateScore(tbBasicData));
+        log.info(String.format("%s导入基础数据成功!", dataMap.get(0)));
+        return tbBasicData;
     }
-
+    private static String validateFields(Map.Entry<Integer, String> integerStringEntry, Map<Integer, String> dataMap, TbField field) {
+        String value = dataMap.get(integerStringEntry.getKey());
+        if (FieldTypeEnum.NUMBER.equals(field.getFieldType())) {
+            Integer numMin = field.getNumMin();
+            Integer numMax = field.getNumMax();
+            if (Objects.nonNull(numMin) && Objects.nonNull(numMax)) {
+                if (numMin > Integer.parseInt(value) || numMax < Integer.parseInt(value)) {
+                    throw new ServiceException(String.format("字段%s的内容不在%d~%d范围内", field.getFieldName(),numMin,numMax));
+                }
+            }
+        }
+        if (FieldInputTypeEnum.MANUAL_INPUT.equals(field.getTextInputType()) && FieldTypeEnum.TEXT.equals(field.getFieldType())) {
+            Integer textMinNum = field.getTextMinNum();
+            Integer textMaxNum = field.getTextMaxNum();
+            if (Objects.nonNull(textMinNum) && Objects.nonNull(textMaxNum)) {
+                if (textMinNum > value.length() || textMaxNum < value.length()) {
+                    throw new ServiceException(String.format("字段%s的内容长度超出%d~%d的范围", field.getFieldName(),textMinNum,textMaxNum));
+                }
+            }
+        }
+        if (FieldTypeEnum.PERCENTAGE.equals(field.getFieldType())) {
+            if (0 > Double.parseDouble(value) || 100 < Double.parseDouble(value)) {
+                throw new ServiceException(String.format("字段%s的内容不在0~100范围内", field.getFieldName()));
+            }
+        }
+        return value;
+    }
     private void calculateScore(TbBasicData tbBasicData) {
         //计算得分
-        List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery().eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW).list();
+        List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery()
+                .eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW).list();
         if (CollectionUtils.isEmpty(list)) {
             throw new ServiceException("计算得分失败,平台未配置得分计算规则");
         }
@@ -159,10 +196,7 @@
                             .eq(TbBasicDataField::getBasicDataId, tbBasicData.getId())
                             .eq(TbBasicDataField::getFieldId, stringIntegerEntry.getValue())
                             .oneOpt();
-                    if (tbBasicDataField.isPresent()) {
-                        valueMap.put(stringIntegerEntry.getKey(), tbBasicDataField.get().getFieldValue());
-                    }
-
+                    tbBasicDataField.ifPresent(basicDataField -> valueMap.put(stringIntegerEntry.getKey(), basicDataField.getFieldValue()));
                 }
                 double score = CalculateUtil.calculate(numberCalculateFormula, valueMap);
                 TbScore tbScore = new TbScore();
@@ -211,33 +245,5 @@
                 }
             }
         }
-    }
-
-    private static String validateFields(Map.Entry<Integer, String> integerStringEntry, Map<Integer, String> dataMap, TbField field) {
-        String value = dataMap.get(integerStringEntry.getKey());
-        if (FieldTypeEnum.NUMBER.getCode().equals(field.getFieldType())) {
-            Integer numMin = field.getNumMin();
-            Integer numMax = field.getNumMax();
-            if (Objects.nonNull(numMin) && Objects.nonNull(numMax)) {
-                if (numMin > Integer.parseInt(value) || numMax < Integer.parseInt(value)) {
-                    throw new ServiceException(String.format("字段%s的内容不在%d~%d范围内", field.getFieldName(),numMin,numMax));
-                }
-            }
-        }
-        if (FieldInputTypeEnum.MANUAL_INPUT.getCode().equals(field.getTextInputType()) && FieldTypeEnum.TEXT.getCode().equals(field.getFieldType())) {
-            Integer textMinNum = field.getTextMinNum();
-            Integer textMaxNum = field.getTextMaxNum();
-            if (Objects.nonNull(textMinNum) && Objects.nonNull(textMaxNum)) {
-                if (textMinNum > value.length() || textMaxNum < value.length()) {
-                    throw new ServiceException(String.format("字段%s的内容长度超出%d~%d的范围", field.getFieldName(),textMinNum,textMaxNum));
-                }
-            }
-        }
-        if (FieldTypeEnum.PERCENTAGE.getCode().equals(field.getFieldType())) {
-            if (0 > Double.parseDouble(value) || 100 < Double.parseDouble(value)) {
-                throw new ServiceException(String.format("字段%s的内容不在0~100范围内", field.getFieldName()));
-            }
-        }
-        return value;
     }
 }

--
Gitblit v1.7.1