From a0765e814de4526fdd4d949d7e34fcd7e8529ced Mon Sep 17 00:00:00 2001
From: Crunchy <3114200645@qq.com>
Date: 星期五, 02 八月 2024 23:11:07 +0800
Subject: [PATCH] 数采调整·完成

---
 cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java      |  204 +++++++++++++
 cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java               |  442 ++++++++++++++++++-------------
 cnas-server/src/main/java/com/yuanchu/mom/dto/DeviceConfigDtoPage.java             |   10 
 cnas-server/src/main/java/com/yuanchu/mom/dto/DataConfigDto.java                   |    7 
 cnas-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java         |   76 ----
 cnas-server/src/main/resources/mapper/DataConfigMapper.xml                         |    9 
 cnas-server/src/main/java/com/yuanchu/mom/service/DeviceService.java               |    5 
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java |   17 
 cnas-server/src/main/java/com/yuanchu/mom/service/DataConfigService.java           |   11 
 cnas-server/src/main/java/com/yuanchu/mom/pojo/Device.java                         |    7 
 cnas-server/src/main/java/com/yuanchu/mom/service/impl/DataConfigServiceImpl.java  |   43 ++
 cnas-server/src/main/java/com/yuanchu/mom/pojo/DataConfig.java                     |    3 
 12 files changed, 547 insertions(+), 287 deletions(-)

diff --git a/cnas-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java b/cnas-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java
index 3b65002..103fa68 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java
@@ -1,20 +1,16 @@
 package com.yuanchu.mom.controller;
 
 
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yuanchu.mom.annotation.ValueAuth;
 import com.yuanchu.mom.annotation.ValueClassify;
 import com.yuanchu.mom.dto.DataConfigDto;
 import com.yuanchu.mom.dto.DeviceDto;
-import com.yuanchu.mom.pojo.DataConfig;
 import com.yuanchu.mom.pojo.Device;
 import com.yuanchu.mom.pojo.PkMaster;
 import com.yuanchu.mom.service.DataConfigService;
 import com.yuanchu.mom.service.DeviceService;
 import com.yuanchu.mom.service.PkMasterService;
-import com.yuanchu.mom.utils.DataAcquisition;
 import com.yuanchu.mom.utils.JackSonUtil;
 import com.yuanchu.mom.vo.Result;
 import io.swagger.annotations.Api;
@@ -154,24 +150,6 @@
         return Result.success(deviceService.selectDeviceByCode(code));
     }
 
-//    @ValueClassify("璁惧")
-//    @ApiOperation(value = "鏌ヨ鏁伴噰閰嶇疆")
-//    @PostMapping("/getNumberCollect")
-//    public Result<?> getNumberCollect(Integer id) {
-//        DeviceDto1 deviceDto1 = new DeviceDto1();
-//        BeanUtils.copyProperties(deviceService.getById(id),deviceDto1);
-//        return Result.success(deviceDto1);
-//    }
-//
-//    @ValueClassify("璁惧")
-//    @ApiOperation(value = "缁存姢鏁伴噰閰嶇疆")
-//    @PostMapping("/numberCollect")
-//    public Result<?> numberCollect(@RequestBody DeviceDto1 deviceDto1) {
-//        Device device = new Device();
-//        BeanUtils.copyProperties(deviceDto1,device);
-//        return Result.success(deviceService.updateById(device));
-//    }
-
     @ValueAuth
     @ValueClassify("璁惧")
     @ApiOperation("/鏁伴噰-鏁版嵁閲囬泦")
@@ -186,49 +164,16 @@
     @ApiOperation(value = "鍒ゆ柇璇ヨ澶囨槸鍚﹀彲浠ユ暟閲�")
     @GetMapping("/determineWhetherToCollectData")
     public Result<?> determineWhetherToCollectData(@RequestParam("managementNumber") String managementNumber, HttpServletRequest request) {
-        String ip = DataAcquisition.getIp(request);
-        Device device = deviceService.getOne(Wrappers.<Device>lambdaQuery()
-                .eq(Device::getManagementNumber, managementNumber)
-                .eq(Device::getIp, ip));
-        if (ObjectUtils.isEmpty(device)) {
-            return Result.success(false);
-        }
-        if (ObjectUtils.isEmpty(device.getFileType()) || ObjectUtils.isEmpty(device.getCollectUrl())) {
-            return Result.success(false);
-        } else {
-            return Result.success(true);
-        }
+        return deviceService.determineWhetherToCollectData(managementNumber, request);
     }
 
     @ValueClassify("璁惧")
     @ApiOperation(value = "缁存姢鏁伴噰閰嶇疆")
     @PostMapping("/saveDataAcquisitionConfiguration")
     public Result<?> saveDataAcquisitionConfiguration(@RequestParam(value = "deviceId") Integer deviceId, @RequestBody DataConfigDto dataConfigList) {
-        if (dataConfigList.getIsDevice()) {
-            Device device = new Device();
-            device.setId(deviceId);
-            device.setCollectUrl(dataConfigList.getCollectUrl());
-            device.setStorageUrl(dataConfigList.getStorageUrl());
-            device.setIp(dataConfigList.getIp());
-            device.setFileType(dataConfigList.getFileType());
-            device.setMdbEntrustCode(dataConfigList.getMdbEntrustCode());
-            device.setMdbSampleCode(dataConfigList.getMdbSampleCode());
-            deviceService.updateById(device);
-        } else {
-            dataConfigService.saveOrUpdateBatch(dataConfigList.getDataConfigList());
-        }
+        dataConfigService.saveDataAcquisitionConfiguration(deviceId, dataConfigList);
         return Result.success();
     }
-
-//    @ValueClassify("璁惧")
-//    @ApiOperation(value = "鏌ヨ鏁伴噰閰嶇疆")
-//    @GetMapping("/queryDataAcquisitionConfiguration")
-//    public Result<?> queryDataAcquisitionConfiguration(@RequestParam("deviceId") Integer deviceId, @RequestParam("insProductItem") String insProductItem) {
-//        List<DataConfig> list = dataConfigService.list(Wrappers.<DataConfig>lambdaQuery()
-//                .eq(DataConfig::getDeviceId, deviceId)
-//                .eq(DataConfig::getInsProductItem, insProductItem));
-//        return Result.success(list);
-//    }
 
     @ValueClassify("璁惧")
     @ApiOperation(value = "鏌ヨ鏁伴噰閰嶇疆")
@@ -237,15 +182,7 @@
                                                        @RequestParam("isDevice") Boolean isDevice,
                                                        @RequestParam(value = "inspectionItem", required = false) String inspectionItem,
                                                        @RequestParam(value = "inspectionItemSubclass", required = false) String inspectionItemSubclass) {
-        if (isDevice) {
-            List<DataConfig> list = dataConfigService.list(Wrappers.<DataConfig>lambdaQuery()
-                    .eq(DataConfig::getDeviceId, deviceId)
-                    .eq(DataConfig::getInspectionItem, inspectionItem)
-                    .eq(DataConfig::getInspectionItemSubclass, inspectionItemSubclass));
-            return Result.success(list);
-        } else {
-            return Result.success(dataConfigService.selectDataConfigList(deviceId));
-        }
+        return dataConfigService.queryDataAcquisitionConfiguration(deviceId, isDevice, inspectionItem, inspectionItemSubclass);
     }
 
     @ValueClassify("璁惧")
@@ -287,5 +224,12 @@
     public Result<?> temDataAcquisition2(@RequestBody PkMaster pkMaster) {
         return Result.success(pkMasterService.temDataAcquisition2(pkMaster));
     }
+
+    @ApiOperation(value = "鏁伴噰-鍏紡璁$畻")
+    @PostMapping("/formulaCalculation")
+    @ValueAuth
+    public Result<?> formulaCalculation(@RequestBody Map<String, Object> map) {
+        return Result.success(deviceService.formulaCalculation(map));
+    }
 }
 
diff --git a/cnas-server/src/main/java/com/yuanchu/mom/dto/DataConfigDto.java b/cnas-server/src/main/java/com/yuanchu/mom/dto/DataConfigDto.java
index ffb2a0a..13232f2 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/dto/DataConfigDto.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/dto/DataConfigDto.java
@@ -26,8 +26,11 @@
     private String ip;
 
     @ApiModelProperty("鏁伴噰-濮旀墭瀛楁")
-    private String mdbEntrustCode;
+    private String entrustCode;
 
     @ApiModelProperty("鏁伴噰-鏍峰搧瀛楁")
-    private String mdbSampleCode;
+    private String sampleCode;
+
+    @ApiModelProperty("鏁伴噰-db锛宮db鏂囦欢鍚嶇О")
+    private String dbFileName;
 }
diff --git a/cnas-server/src/main/java/com/yuanchu/mom/dto/DeviceConfigDtoPage.java b/cnas-server/src/main/java/com/yuanchu/mom/dto/DeviceConfigDtoPage.java
index d3cbb36..dfe8c52 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/dto/DeviceConfigDtoPage.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/dto/DeviceConfigDtoPage.java
@@ -70,6 +70,12 @@
     @ApiModelProperty(value = "妫�楠岄」鐩甶d")
     private Integer structureItemParameterId;
 
-    private String mdbEntrustCode;
-    private String mdbSampleCode;
+    @ApiModelProperty("鏁伴噰-濮旀墭瀛楁")
+    private String entrustCode;
+
+    @ApiModelProperty("鏁伴噰-鏍峰搧瀛楁")
+    private String sampleCode;
+
+    @ApiModelProperty("鏁伴噰-db锛宮db鏂囦欢鍚嶇О")
+    private String dbFileName;
 }
diff --git a/cnas-server/src/main/java/com/yuanchu/mom/pojo/DataConfig.java b/cnas-server/src/main/java/com/yuanchu/mom/pojo/DataConfig.java
index 6c4c769..6b7c6a2 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/pojo/DataConfig.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/pojo/DataConfig.java
@@ -63,4 +63,7 @@
 
     @ApiModelProperty("妫�楠岄」id")
     private Integer structureItemParameterId;
+
+    @ApiModelProperty("搴忓彿")
+    private String serialNumber;
 }
diff --git a/cnas-server/src/main/java/com/yuanchu/mom/pojo/Device.java b/cnas-server/src/main/java/com/yuanchu/mom/pojo/Device.java
index 7c52e48..2237bc8 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/pojo/Device.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/pojo/Device.java
@@ -136,8 +136,11 @@
     private Boolean isItADataAcquisitionDevice;
 
     @ApiModelProperty("鏁伴噰-濮旀墭瀛楁")
-    private String mdbEntrustCode;
+    private String entrustCode;
 
     @ApiModelProperty("鏁伴噰-鏍峰搧瀛楁")
-    private String mdbSampleCode;
+    private String sampleCode;
+
+    @ApiModelProperty("鏁伴噰-db锛宮db鏂囦欢鍚嶇О")
+    private String dbFileName;
 }
diff --git a/cnas-server/src/main/java/com/yuanchu/mom/service/DataConfigService.java b/cnas-server/src/main/java/com/yuanchu/mom/service/DataConfigService.java
index 3ca77f9..c467495 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/service/DataConfigService.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/service/DataConfigService.java
@@ -1,10 +1,9 @@
 package com.yuanchu.mom.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.yuanchu.mom.dto.DeviceConfigDtoPage;
+import com.yuanchu.mom.dto.DataConfigDto;
 import com.yuanchu.mom.pojo.DataConfig;
-
-import java.util.List;
+import com.yuanchu.mom.vo.Result;
 
 /**
  * <p>
@@ -16,7 +15,9 @@
  */
 public interface DataConfigService extends IService<DataConfig> {
 
-    List<DeviceConfigDtoPage> selectDataConfigList(Integer deviceId);
-
     void deleteDataConfig();
+
+    void saveDataAcquisitionConfiguration(Integer deviceId, DataConfigDto dataConfigList);
+
+    Result<?> queryDataAcquisitionConfiguration(Integer deviceId, Boolean isDevice, String inspectionItem, String inspectionItemSubclass);
 }
diff --git a/cnas-server/src/main/java/com/yuanchu/mom/service/DeviceService.java b/cnas-server/src/main/java/com/yuanchu/mom/service/DeviceService.java
index 9da6d79..f043093 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/service/DeviceService.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/service/DeviceService.java
@@ -5,7 +5,6 @@
 import com.yuanchu.mom.dto.ADto;
 import com.yuanchu.mom.dto.DeviceDto;
 import com.yuanchu.mom.pojo.Device;
-import com.yuanchu.mom.pojo.PkMaster;
 import com.yuanchu.mom.vo.Result;
 
 import javax.servlet.http.HttpServletRequest;
@@ -42,4 +41,8 @@
     List<ADto> menu();
 
     List<Map<String, Object>> treeDevice(String deviceName);
+
+    Result<?> determineWhetherToCollectData(String managementNumber, HttpServletRequest request);
+
+    Object formulaCalculation(Map<String, Object> map);
 }
diff --git a/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DataConfigServiceImpl.java b/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DataConfigServiceImpl.java
index f5ddc08..98586f5 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DataConfigServiceImpl.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DataConfigServiceImpl.java
@@ -1,11 +1,15 @@
 package com.yuanchu.mom.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yuanchu.mom.common.GetLook;
-import com.yuanchu.mom.dto.DeviceConfigDtoPage;
+import com.yuanchu.mom.dto.DataConfigDto;
 import com.yuanchu.mom.mapper.DataConfigMapper;
+import com.yuanchu.mom.mapper.DeviceMapper;
 import com.yuanchu.mom.pojo.DataConfig;
+import com.yuanchu.mom.pojo.Device;
 import com.yuanchu.mom.service.DataConfigService;
+import com.yuanchu.mom.vo.Result;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -25,11 +29,9 @@
 
     private GetLook getLook;
 
+    private DeviceMapper deviceMapper;
+
     private DataConfigMapper dataConfigMapper;
-    @Override
-    public List<DeviceConfigDtoPage> selectDataConfigList(Integer deviceId) {
-        return dataConfigMapper.selectDataConfigList(deviceId);
-    }
 
     @Override
     public void deleteDataConfig() {
@@ -38,4 +40,35 @@
             dataConfigMapper.deleteBatchIds(integers);
         }
     }
+
+    @Override
+    public void saveDataAcquisitionConfiguration(Integer deviceId, DataConfigDto dataConfigList) {
+        if (dataConfigList.getIsDevice()) {
+            Device device = new Device();
+            device.setId(deviceId);
+            device.setCollectUrl(dataConfigList.getCollectUrl());
+            device.setStorageUrl(dataConfigList.getStorageUrl());
+            device.setIp(dataConfigList.getIp());
+            device.setFileType(dataConfigList.getFileType());
+            device.setEntrustCode(dataConfigList.getEntrustCode());
+            device.setSampleCode(dataConfigList.getSampleCode());
+            device.setDbFileName(dataConfigList.getDbFileName());
+            deviceMapper.updateById(device);
+        } else {
+            this.saveOrUpdateBatch(dataConfigList.getDataConfigList());
+        }
+    }
+
+    @Override
+    public Result<?> queryDataAcquisitionConfiguration(Integer deviceId, Boolean isDevice, String inspectionItem, String inspectionItemSubclass) {
+        if (isDevice) {
+            List<DataConfig> list = baseMapper.selectList(Wrappers.<DataConfig>lambdaQuery()
+                    .eq(DataConfig::getDeviceId, deviceId)
+                    .eq(DataConfig::getInspectionItem, inspectionItem)
+                    .eq(DataConfig::getInspectionItemSubclass, inspectionItemSubclass));
+            return Result.success(list);
+        } else {
+            return Result.success(dataConfigMapper.selectDataConfigList(deviceId));
+        }
+    }
 }
diff --git a/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java b/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java
index 0d8377b..c78ea55 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java
@@ -2,7 +2,7 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson2.JSONObject;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -31,11 +31,13 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
 import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -149,6 +151,7 @@
         String ip = DataAcquisition.getIp(request);
         List<Device> device = baseMapper.selectList(Wrappers.<Device>lambdaQuery()
                 .eq(Device::getIp, ip));
+        // 1銆佹楠�
         if(device.size() > 1) {
             String str = "";
             for (Device device1 : device) {
@@ -163,6 +166,7 @@
         if (ObjectUtils.isEmpty(device.get(0).getFileType()) || ObjectUtils.isEmpty(device.get(0).getCollectUrl())) {
             throw new ErrorException("鏈粰璇ワ細" + device.get(0).getDeviceName() + "璁惧閰嶇疆閲囬泦璺緞鎴栨枃浠跺悗缂�锛�");
         }
+        // 2銆佸彇璁惧鍏宠仈鐨勬楠岄」锛屾楠屽瓙椤�
         List<DataConfig> list1 = new ArrayList<>();
         inspectionItemSubclass.forEach(i -> {
              List<DataConfig> list = dataConfigService.list(Wrappers.<DataConfig>lambdaQuery()
@@ -172,12 +176,14 @@
                 .orderBy(false, false, DataConfig::getId));
             list1.addAll(list);
         });
-        Map<String, String> map = DataAcquisition.dataAcquisitionEntrance(list1, device.get(0), entrustCode, sampleCode, ip);
+        // 3銆侀噰闆嗭紝鍙栨暟鎹紝鍙備笌鍏紡璁$畻
+        Map<String, Object> map = DataAcquisition.dataAcquisitionEntrance(list1, device.get(0), entrustCode, sampleCode, ip);
+        // 4銆侀�犲惊鐜鏁�
         if (ObjectUtils.isNotEmpty(map)) {
-            String frequency = DataAcquisition.createFrequency(entrustCode, sampleCode);
-            map.put("frequency", frequency);
+            return Result.success(DataAcquisition.createFrequency(entrustCode, sampleCode, map));
+        } else {
+            return Result.success(null);
         }
-        return Result.success(map);
     }
 
     @Override
@@ -966,4 +972,184 @@
                 ));*/
         return listMap;
     }
+
+    @Override
+    public Result<?> determineWhetherToCollectData(String managementNumber, HttpServletRequest request) {
+        String ip = DataAcquisition.getIp(request);
+        Device device = baseMapper.selectOne(Wrappers.<Device>lambdaQuery()
+                .eq(Device::getManagementNumber, managementNumber)
+                .eq(Device::getIp, ip));
+        if (ObjectUtils.isEmpty(device)) {
+            return Result.success(false);
+        }
+        if (ObjectUtils.isEmpty(device.getFileType()) || ObjectUtils.isEmpty(device.getCollectUrl())) {
+            return Result.success(false);
+        } else {
+            return Result.success(true);
+        }
+    }
+
+    @Override
+    public Object formulaCalculation(Map<String, Object> map) {
+        map.forEach((key, value) -> {
+            Map<String, Object> jsonObject = JSONObject.parseObject(JSON.toJSONString(map.get(key)), Map.class);
+            for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
+                String sonKey = entry.getKey();
+                Object sonValue = entry.getValue();
+                if (!sonKey.equals("frequency")) {
+                    Map<String, Object> formulaData = JSONObject.parseObject(JSON.toJSONString(sonValue), Map.class);
+                    if (formulaData.containsKey("result") && formulaData.containsKey("isCalculation") &&
+                    formulaData.containsKey("formula")) {
+                        String formula = formulaData.get("formula").toString();
+                        Boolean isCalculation = Boolean.valueOf(formulaData.get("isCalculation").toString());
+                        if (isCalculation) {
+                            List<Object> resultList = new ArrayList<>();
+                            try {
+                                resultList = JSONObject.parseArray(JSON.toJSONString(formulaData.get("result")), Object.class);
+                            } catch (Exception e) {
+                                Object result = formulaData.get("result").toString();
+                                resultList.add(result);
+                            }
+                            ArrayList<Object> list = new ArrayList<>();
+                            resultList.forEach(i -> {
+                                List<Object> strings = Arrays.asList(i.toString().split(","));
+                                String result = calculationFormula(strings, formula);
+                                list.add(result);
+                            });
+                            formulaData.put("isCalculation", false);
+                            formulaData.put("result", list);
+                        }
+                    }
+                    jsonObject.put(sonKey, formulaData);
+                }
+            }
+            map.put(key, jsonObject);
+        });
+        return map;
+    }
+
+    public String calculationFormula(List<Object> list, String formula) {
+            //棣栧厛灏唋ist杞崲涓篵igdecmic
+            List<BigDecimal> bigDecimalList = list.stream()
+                    .map(obj -> {
+                        return new BigDecimal((obj).toString());
+                    }).collect(Collectors.toList());
+            System.out.println(bigDecimalList);
+
+            //灏嗕腑鏂囩殑(杞崲鑻辨枃鐨�())
+            formula = formula.replace("锛�", "(")
+                    .replace("锛�", ")")
+                    .replace("锛�", ",");
+            //鐒跺悗鎻愬彇鍏紡
+            String strs = formula.substring(0, formula.indexOf("("));
+            String upperStr = strs.toUpperCase();
+            if (upperStr.matches(".*\\d.*")) {
+                upperStr = "";
+            }
+            System.out.println(upperStr);
+            //鐒跺悗鑾峰彇鏈�澶栭潰鎷彿閲岄潰鐨勫��,鍐嶆牴鎹�","鍒嗗壊
+            int start = formula.indexOf("(");
+            int end = -1;
+            int a = 0;
+            for (int i = start; i < formula.length(); i++) {
+                char c = formula.charAt(i);
+                if (c == '(') {
+                    a++;
+                } else if (c == ')') {
+                    a--;
+                    if (a == 0) {
+                        end = i;
+                    }
+                }
+            }
+            if (start == -1 || end == -1) {
+                throw new ErrorException("鍏紡鎷彿涓嶅尮閰�: " + formula);
+            }
+
+            String argumentsStr = formula.substring(start + 1, end);
+            List<String> arguments = new ArrayList<>();
+            int bracketCount = 0;
+            StringBuilder currentArgument = new StringBuilder();
+            for (char c : argumentsStr.toCharArray()) {
+                if (c == ',' && bracketCount == 0) {
+                    arguments.add(currentArgument.toString());
+                    currentArgument.setLength(0);
+                } else {
+                    if (c == '(') bracketCount++;
+                    if (c == ')') bracketCount--;
+                    currentArgument.append(c);
+                }
+            }
+            arguments.add(currentArgument.toString());
+            String[] bracketStrs = arguments.toArray(new String[0]);
+            List<BigDecimal> results = new ArrayList<>();
+            for (String expr : bracketStrs) {
+                System.out.println("鏇挎崲鍓�" + expr);
+                Pattern pattern = Pattern.compile("([A-Z])(\\d+)");
+                Matcher matcher = pattern.matcher(expr);
+                StringBuffer sb = new StringBuffer();
+                while (matcher.find()) {
+                    String letter = matcher.group(1);
+                    int index = Integer.parseInt(matcher.group(2)) - 1; // 灏�1-based杞负0-based
+                    if (index < bigDecimalList.size()) {
+                        matcher.appendReplacement(sb, bigDecimalList.get(index).toString());
+                    } else {
+                        throw new RuntimeException("鍏紡涓殑涓嬫爣 " + index + " 瓒呭嚭鑼冨洿");
+                    }
+                }
+                matcher.appendTail(sb);
+                System.out.println("鏇挎崲鍚�" + sb.toString());
+
+                // 璁$畻琛ㄨ揪寮�
+                ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
+                try {
+                    Object result = engine.eval(sb.toString());
+                    results.add(new BigDecimal(result.toString()));
+                } catch (Exception e) {
+                    throw new IllegalArgumentException("鏃犳硶璁$畻鍏紡: " + sb, e);
+                }
+            }
+            // 鏍规嵁鍑芥暟鍚嶇О杩涜鐩稿簲璁$畻
+            BigDecimal finalResult;
+            if (upperStr.equals("") || upperStr == null) {
+                finalResult = results.get(0);
+            } else {
+                switch (upperStr) {
+                    case "MAX":
+                        finalResult = results.stream().max(BigDecimal::compareTo)
+                                .orElseThrow(() -> new IllegalArgumentException("鏃犳硶璁$畻MAX鍊�"));
+                        break;
+                    case "MIN":
+                        finalResult = results.stream().min(BigDecimal::compareTo)
+                                .orElseThrow(() -> new IllegalArgumentException("鏃犳硶璁$畻MIN鍊�"));
+                        break;
+                    case "SUM":
+                        finalResult = results.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
+                        break;
+                    case "ABS":
+                        finalResult = results.stream().map(BigDecimal::abs).reduce(BigDecimal.ZERO, BigDecimal::add);
+                        break;
+                    case "AVERAGE":
+                        finalResult = results.stream().reduce(BigDecimal.ZERO, BigDecimal::divide)
+                                .divide(BigDecimal.valueOf(results.size()), 2, BigDecimal.ROUND_HALF_UP);
+                        break;
+                    case "MEDIAN":
+                        int size = results.size();
+                        if (size % 2 == 1) {
+                            finalResult = results.get(size / 2);
+                        } else {
+                            BigDecimal sum = results.get(size / 2 - 1).add(results.get(size / 2));
+                            finalResult = sum.divide(BigDecimal.valueOf(2), 2, BigDecimal.ROUND_HALF_UP);
+                        }
+                        break;
+                    default:
+                        throw new UnsupportedOperationException("鏆備笉鏀寔鍑芥暟: " + upperStr);
+                }
+            }
+            System.out.println(results);
+            System.out.println("璁$畻缁撴灉: " + finalResult);
+
+            return finalResult.toString();
+            // 鍚﹀垯锛氭病鏈夊叕寮忎唬琛ㄤ笉闇�瑕佽绠楋紝鐩存帴鎻愬彇List閲岄潰鐨勬暟鎹�
+    }
 }
diff --git a/cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java b/cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java
index eddd73d..5fcf8da 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java
@@ -10,11 +10,9 @@
 import com.yuanchu.mom.pojo.DataConfig;
 import com.yuanchu.mom.pojo.Device;
 
-import javax.script.ScriptEngine;
-import javax.script.ScriptEngineManager;
 import javax.servlet.http.HttpServletRequest;
-import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -38,13 +36,13 @@
      * @param device
      * @return
      */
-    public static Map<String, String> dataAcquisitionEntrance(List<DataConfig> dataConfig, Device device, String entrustCode, String sampleCode, String ip) {
+    public static Map<String, Object> dataAcquisitionEntrance(List<DataConfig> dataConfig, Device device, String entrustCode, String sampleCode, String ip) {
         /**
          * filePath 鏂囦欢閲囬泦璺緞
          * fileExtension 鏂囦欢鍚庣紑
          * entrustCode 濮旀墭缂栧彿
          * sampleCode 鏍峰搧缂栧彿
-         * mdbEntrustCode mdb鏂囦欢闇�瑕侊細濮旀墭缂栧彿瀛楁
+         * mdbEntrustCode mdb鏂囦欢闇�瑕侊細濮旀墭缂栧彿瀛楁 涓轰粈涔堟病鏈夊幓杩欎釜mdb鍓嶇紑鍛紵鍥犱负宸茬粡缁欏鎴风殑閮ㄥ垎鐢佃剳涓婂畨瑁呬簡閲囬泦鍣紝鑰岀敤鎴蜂笉鎺ュ彈閲嶆柊瀹夎閲囬泦鍣紝鎵�浠ュ氨娌℃湁鍘婚櫎
          * mdbSampleCode mdb鏂囦欢闇�瑕侊細鏍峰搧缂栧彿瀛楁
          */
         String http = HTTP + ip + GETFILE +
@@ -52,8 +50,9 @@
                 "&fileExtension=" + device.getFileType() +
                 "&entrustCode=" + entrustCode +
                 "&sampleCode=" + sampleCode +
-                "&mdbEntrustCode=" + device.getMdbEntrustCode() +
-                "&mdbSampleCode=" + device.getMdbSampleCode();
+                "&mdbEntrustCode=" + device.getEntrustCode() +
+                "&mdbSampleCode=" + device.getSampleCode() +
+                "&dbFileName=" + device.getDbFileName();
         String result = null;
         try {
             result = HttpUtil.get(http);
@@ -62,33 +61,28 @@
         }
         JSONObject jsonObject = JSON.parseObject(result);
         if (Objects.equals(jsonObject.get("code"), 1)) {
-            if (ObjectUtils.isEmpty(jsonObject.get("msg"))) {
-                throw new ErrorException("鏈煡璇㈠埌鏁版嵁锛屽彲鑳芥枃浠惰矾寰勯厤缃敊璇紒");
-            } else {
-                System.out.println(jsonObject);
-                throw new ErrorException("鏈煡閿欒锛岃鑱旂郴绠$悊鍛橈紒");
-            }
+            throw new ErrorException(jsonObject.get("msg") + "");
         } else {
-            String data = jsonObject.get("data").toString();
+            String data = jsonObject.get("data") + "";
             // 鑰冭檻鍒颁竴涓娴嬮」鍙兘浼氬瓨鍦ㄥ涓暟閲囬厤缃紝鎵�浠ラ渶瑕佽繘琛屽垎缁�
             Map<String, List<DataConfig>> userMap = dataConfig.stream()
                     .peek(i -> i.setInsProductItem(
                             i.getInspectionItem().equals(i.getInspectionItemSubclass()) ? i.getInspectionItem() + "," : i.getInspectionItem() + "," + i.getInspectionItemSubclass()
                     ))
                     .collect(Collectors.groupingBy(DataConfig::getInsProductItem));
-            Map<String, String> map;
+            Map<String, Object> map;
             switch (device.getFileType()) {
                 case ".docx":
-                    map = analysisString(data, userMap);
+                    map = analysisString(data, userMap, device, entrustCode, sampleCode);
                     break;
                 case ".xlsx":
-                    map = analysisList(data, userMap);
+                    map = analysisList(data, userMap, device, entrustCode, sampleCode);
                     break;
                 case ".txt":
-                    map = analysisTxt(data, userMap);
+                    map = analysisTxt(data, userMap, device, entrustCode, sampleCode);
                     break;
                 case ".csv":
-                    map = analysisList(data, userMap);
+                    map = analysisList(data, userMap, device, entrustCode, sampleCode);
                     break;
                 case ".mdb":
                     map = analysisMdb(data, userMap);
@@ -97,7 +91,7 @@
                     map = analysisDb(data, userMap);
                     break;
                 case ".png":
-                    map = readPngString(data, userMap);
+                    map = readPngString(data, userMap, device);
                     break;
                 default:
                     map = null;
@@ -106,15 +100,45 @@
             // 濡傛灉瀛樺湪瀛樺偍鍦板潃锛屽垯绉诲姩鍦板潃
             if (ObjectUtils.isNotEmpty(device.getStorageUrl())) {
                 String s = HTTP + ip + MOVEFILE + "?startFilePath=" + device.getCollectUrl() + "&endFilePath=" + device.getStorageUrl() + "&fileType=" + device.getFileType();
-                String storageUrlResult = HttpUtil.get(s);
-                JSONObject storageUrlResultJson = JSON.parseObject(storageUrlResult);
+                HttpUtil.get(s);
             }
             return map;
         }
     }
 
-    public static String createFrequency(String entrustCode, String sampleCode) {
-        String key = frequency + ":" + entrustCode + ":" + sampleCode;
+    public static Map<String, Object> createFrequency(String entrustCode, String sampleCode, Map<String, Object> map) {
+        HashSet<String> set = new HashSet<>();
+        map.forEach((key, value) -> {
+            String[] split = key.split(",");
+            String inspectionItem = split[0];
+            // 鍙鏈変竴涓笉涓虹┖灏眘et杩涘幓
+            if (ObjectUtils.isNotEmpty(value)) {
+                set.add(inspectionItem);
+            }
+        });
+        Map<String, Object> result = new HashMap<>();
+        for (String inspectionItemKey : set) {
+            Map<String, Object> hashMap = new HashMap<>();
+            map.forEach((key, value) -> {
+                String[] split = key.split(",");
+                String inspectionItem = split[0];
+                if (inspectionItemKey.equals(inspectionItem)) {
+                    if (split.length > 1) {
+                        hashMap.put(split[1], value);
+                    } else {
+                        hashMap.put(split[0], value);
+                    }
+                }
+            });
+            String frequency = createKey(entrustCode, sampleCode, inspectionItemKey);
+            hashMap.put("frequency", frequency);
+            result.put(inspectionItemKey, hashMap);
+        }
+        return result;
+    }
+
+    public static String createKey(String entrustCode, String sampleCode, String inspectionItemKey) {
+        String key = frequency + ":" + entrustCode + ":" + sampleCode + ":" + inspectionItemKey;
         boolean b = RedisUtil.hasKey(key);
         String frequencyValue;
         if (b) {
@@ -134,27 +158,46 @@
      * @param dataConfig
      * @return
      */
-    private static Map<String, String> analysisDb(String data, Map<String, List<DataConfig>> dataConfig) {
+    private static Map<String, Object> analysisDb(String data, Map<String, List<DataConfig>> dataConfig) {
         JSONObject jsonObject = JSON.parseObject(data);
-        Map<String, String> map = new HashMap<>();
+        Map<String, Object> map = new HashMap<>();
         if (jsonObject.isEmpty()) {
             return map;
         }
         JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString());
         dataConfig.forEach((k, v) -> {
+            AtomicInteger numberOfDataEntries = new AtomicInteger();
             List<Object> list = new ArrayList<>();
             for (int config = 0; config < v.size(); config++) {
-                String referx = getRefer(v.get(config).getReferx());
+                String refery = getRefer(v.get(config).getRefery());
                 for (int i = 0; i < dataList.size(); i++) {
                     JSONObject jsonObject1 = JSON.parseObject(dataList.get(i).toString());
-                    Object o = jsonObject1.get(referx);
+                    Object o = jsonObject1.get(refery);
                     if (ObjectUtils.isNotEmpty(o)) {
+                        numberOfDataEntries.addAndGet(1);
                         list.add(o);
                     }
                 }
             }
+            // 鎷兼帴鏁伴噰閰嶇疆
+            List<Object> result = new ArrayList<>();
+            for (int i = 0; i < numberOfDataEntries.get(); i++) {
+                String aggregate = "";
+                for (int j = 0; j < v.size(); j++) {
+                    int index;
+                    if (j == 0) {
+                        index = i;
+                    } else {
+                        index = numberOfDataEntries.get() + i;
+                    }
+                    aggregate += list.get(index).toString() + ",";
+                }
+                int lastIndex = aggregate.lastIndexOf(",");
+                String substring = aggregate.substring(0, lastIndex);
+                result.add(substring);
+            }
             // 杩涜鍏紡璁$畻
-            String resultValue = calculationFormula(list, v.get(0), k);
+            Object resultValue = calculationFormula(result, v.get(0), k);
             map.put(k, resultValue);
         });
         return map;
@@ -165,27 +208,46 @@
      * @param dataConfig
      * @return
      */
-    private static Map<String, String> analysisMdb(String data, Map<String, List<DataConfig>> dataConfig) {
+    private static Map<String, Object> analysisMdb(String data, Map<String, List<DataConfig>> dataConfig) {
         JSONObject jsonObject = JSON.parseObject(data);
-        Map<String, String> map = new HashMap<>();
+        Map<String, Object> map = new HashMap<>();
         if (jsonObject.isEmpty()) {
             return map;
         }
         JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString());
         dataConfig.forEach((k, v) -> {
+            AtomicInteger numberOfDataEntries = new AtomicInteger();
             List<Object> list = new ArrayList<>();
             for (int config = 0; config < v.size(); config++) {
-                String referx = getRefer(v.get(config).getReferx());
+                String refery = getRefer(v.get(config).getRefery());
                 for (int i = 0; i < dataList.size(); i++) {
                     JSONObject jsonObject1 = JSON.parseObject(dataList.get(i).toString());
-                    Object o = jsonObject1.get(referx);
+                    Object o = jsonObject1.get(refery);
                     if (ObjectUtils.isNotEmpty(o)) {
+                        numberOfDataEntries.addAndGet(1);
                         list.add(o);
                     }
                 }
             }
+            // 鎷兼帴鏁伴噰閰嶇疆
+            List<Object> result = new ArrayList<>();
+            for (int i = 0; i < numberOfDataEntries.get(); i++) {
+                String aggregate = "";
+                for (int j = 0; j < v.size(); j++) {
+                    int index;
+                    if (j == 0) {
+                        index = i;
+                    } else {
+                        index = numberOfDataEntries.get() + i;
+                    }
+                    aggregate += list.get(index).toString() + ",";
+                }
+                int lastIndex = aggregate.lastIndexOf(",");
+                String substring = aggregate.substring(0, lastIndex);
+                result.add(substring);
+            }
             // 杩涜鍏紡璁$畻
-            String resultValue = calculationFormula(list, v.get(0), k);
+            Object resultValue = calculationFormula(result, v.get(0), k);
             map.put(k, resultValue);
         });
         return map;
@@ -200,8 +262,8 @@
      * @param dataConfig 鐢ㄦ埛閰嶇疆濂界殑x,y杞村畾浣嶆暟鎹笌鍙傜収鐗�
      * @return
      */
-    private static Map<String, String> readPngString(String data, Map<String, List<DataConfig>> dataConfig) {
-        Map<String, String> map = new HashMap<>();
+    private static Map<String, Object> readPngString(String data, Map<String, List<DataConfig>> dataConfig, Device device) {
+        Map<String, Object> map = new HashMap<>();
         dataConfig.forEach((k, v) -> {
             List<Object> list = new ArrayList<>();
             for (int config = 0; config < v.size(); config++) {
@@ -230,7 +292,7 @@
                 }
             }
             // 杩涜鍏紡璁$畻
-            String resultValue = calculationFormula(list, v.get(0), k);
+            Object resultValue = calculationFormula(list, v.get(0), k);
             map.put(k, resultValue);
         });
         return map;
@@ -243,143 +305,26 @@
      * @param dataConfig 瀛樺偍鍏紡鐨勫璞�
      * @return
      */
-    private static String calculationFormula(List<Object> list, DataConfig dataConfig, String insProductItem) {
+    private static Object calculationFormula(List<Object> list, DataConfig dataConfig, String insProductItem) {
         if (list.size() == 0) {
             return null;
         }
+        Map<String, Object> hashMap = new HashMap<>();
         // 濡傛灉涓嶄负绌猴紝杩涜鍏紡璁$畻
         if (ObjectUtils.isNotEmpty(dataConfig.getFormula())) {
-            String formula = dataConfig.getFormula();
-            //棣栧厛灏唋ist杞崲涓篵igdecmic
-            List<BigDecimal> bigDecimalList = list.stream()
-                    .map(obj -> {
-                        return new BigDecimal((obj).toString());
-                    }).collect(Collectors.toList());
-            System.out.println(bigDecimalList);
-
-            //灏嗕腑鏂囩殑(杞崲鑻辨枃鐨�())
-            formula = formula.replace("锛�", "(")
-                    .replace("锛�", ")")
-                    .replace("锛�", ",");
-            //鐒跺悗鎻愬彇鍏紡
-            String strs = formula.substring(0,formula.indexOf("("));
-            String upperStr = strs.toUpperCase();
-            if (upperStr.matches(".*\\d.*")){
-                upperStr="";
-            }
-            System.out.println(upperStr);
-            //鐒跺悗鑾峰彇鏈�澶栭潰鎷彿閲岄潰鐨勫��,鍐嶆牴鎹�","鍒嗗壊
-            int start = formula.indexOf("(");
-            int end = -1;
-            int a = 0;
-            for (int i = start; i < formula.length(); i++) {
-                char c = formula.charAt(i);
-                if (c == '(') {
-                    a++;
-                } else if (c == ')') {
-                    a--;
-                    if (a == 0) {
-                        end = i;
-                    }
-                }
-            }
-            if (start == -1 || end == -1) {
-                throw new ErrorException("鍏紡鎷彿涓嶅尮閰�: " + formula);
-            }
-
-            String argumentsStr = formula.substring(start + 1, end);
-            List<String> arguments = new ArrayList<>();
-            int bracketCount = 0;
-            StringBuilder currentArgument = new StringBuilder();
-            for (char c : argumentsStr.toCharArray()) {
-                if (c == ',' && bracketCount == 0) {
-                    arguments.add(currentArgument.toString());
-                    currentArgument.setLength(0);
-                } else {
-                    if (c == '(') bracketCount++;
-                    if (c == ')') bracketCount--;
-                    currentArgument.append(c);
-                }
-            }
-            arguments.add(currentArgument.toString());
-            String[] bracketStrs = arguments.toArray(new String[0]);
-            List<BigDecimal> results = new ArrayList<>();
-            for (String expr : bracketStrs) {
-                System.out.println("鏇挎崲鍓�" + expr);
-                Pattern pattern = Pattern.compile("([A-Z])(\\d+)");
-                Matcher matcher = pattern.matcher(expr);
-                StringBuffer sb = new StringBuffer();
-                while (matcher.find()) {
-                    String letter = matcher.group(1);
-                    int index = Integer.parseInt(matcher.group(2)) - 1; // 灏�1-based杞负0-based
-                    if (index < bigDecimalList.size()) {
-                        matcher.appendReplacement(sb, bigDecimalList.get(index).toString());
-                    } else {
-                        throw new RuntimeException("鍏紡涓殑涓嬫爣 " + index + " 瓒呭嚭鑼冨洿");
-                    }
-                }
-                matcher.appendTail(sb);
-                System.out.println("鏇挎崲鍚�" + sb.toString());
-
-                // 璁$畻琛ㄨ揪寮�
-                ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
-                try {
-                    Object result = engine.eval(sb.toString());
-                    results.add(new BigDecimal(result.toString()));
-                } catch (Exception e) {
-                    throw new IllegalArgumentException("鏃犳硶璁$畻鍏紡: " + sb, e);
-                }
-            }
-            // 鏍规嵁鍑芥暟鍚嶇О杩涜鐩稿簲璁$畻
-            BigDecimal finalResult;
-            if (upperStr.equals("")||upperStr==null) {
-                finalResult=results.get(0);
-            }else {
-                switch (upperStr) {
-                    case "MAX":
-                        finalResult = results.stream().max(BigDecimal::compareTo)
-                                .orElseThrow(() -> new IllegalArgumentException("鏃犳硶璁$畻MAX鍊�"));
-                        break;
-                    case "MIN":
-                        finalResult = results.stream().min(BigDecimal::compareTo)
-                                .orElseThrow(() -> new IllegalArgumentException("鏃犳硶璁$畻MIN鍊�"));
-                        break;
-                    case "SUM":
-                        finalResult = results.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
-                        break;
-                    case "ABS":
-                        finalResult = results.stream().map(BigDecimal::abs).reduce(BigDecimal.ZERO, BigDecimal::add);
-                        break;
-                    case "AVERAGE":
-                        finalResult = results.stream().reduce(BigDecimal.ZERO, BigDecimal::divide)
-                                .divide(BigDecimal.valueOf(results.size()), 2, BigDecimal.ROUND_HALF_UP);
-                        break;
-                    case "MEDIAN":
-                        int size = results.size();
-                        if (size % 2 == 1) {
-                            finalResult = results.get(size / 2);
-                        } else {
-                            BigDecimal sum = results.get(size / 2 - 1).add(results.get(size / 2));
-                            finalResult = sum.divide(BigDecimal.valueOf(2), 2, BigDecimal.ROUND_HALF_UP);
-                        }
-                        break;
-                    default:
-                        throw new UnsupportedOperationException("鏆備笉鏀寔鍑芥暟: " + upperStr);
-                }
-            }
-            System.out.println(results);
-            System.out.println("璁$畻缁撴灉: " + finalResult);
-
-            return finalResult.toString();
+            hashMap.put("isCalculation", true);
+            hashMap.put("formula", dataConfig.getFormula());
             // 鍚﹀垯锛氭病鏈夊叕寮忎唬琛ㄤ笉闇�瑕佽绠楋紝鐩存帴鎻愬彇List閲岄潰鐨勬暟鎹�
         } else {
-            // 杩欓噷鍙細鍙栧垪琛ㄧ涓�涓暟鎹�
-            if (list.size() > 1) {
-                throw new ErrorException("鏈粰锛�" + insProductItem + " 閰嶇疆鍏紡锛屽彲鏄嵈閲囬泦鍒颁簡" + list.size() + "涓�硷紒鍒嗗埆涓猴細" + list);
-            } else {
-                return list.get(0).toString();
-            }
+            hashMap.put("isCalculation", false);
         }
+        // 涓轰簡缁欏墠绔仛鏁版嵁鍖哄垎
+        if (list.size() > 1) {
+            hashMap.put("result", list);
+        } else {
+            hashMap.put("result", list.get(0).toString());
+        }
+        return hashMap;
     }
 
     /**
@@ -389,12 +334,20 @@
      * @param dataConfig 鐢ㄦ埛閰嶇疆濂界殑x,y杞村畾浣嶆暟鎹笌鍙傜収鐗�
      * @return
      */
-    private static Map<String, String> analysisTxt(String data, Map<String, List<DataConfig>> dataConfig) {
-        Map<String, String> map = new HashMap<>();
+    private static Map<String, Object> analysisTxt(String data, Map<String, List<DataConfig>> dataConfig,
+                                                   Device device, String entrustCode, String sampleCode) {
+        Map<String, Object> map = new HashMap<>();
         dataConfig.forEach((k, v) -> {
-            List<Object> list = analyzeData(data, v, k, ",");
+            List<Object> list = new ArrayList<>();
+            // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙蜂笉瀛樺湪锛屽畾锛�1銆乊瀹氳寖鍥达紝X瀹氭í鍧愭爣锛�2銆佸彧瀛樺湪Y锛�3銆佸彧瀛樺湪X
+            if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) {
+                list = analyzeData(data, v, k, ",");
+                // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙峰瓨鍦�
+            } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) {
+                list = analyzeDataEntrustCodAndSampleCode(data, v, k, ",", device, entrustCode, sampleCode);
+            }
             // 杩涜鍏紡璁$畻
-            String resultValue = calculationFormula(list, v.get(0), k);
+            Object resultValue = calculationFormula(list, v.get(0), k);
             map.put(k, resultValue);
         });
         return map;
@@ -405,16 +358,24 @@
      * @param dataConfig 鐢ㄦ埛閰嶇疆濂界殑x,y杞村畾浣嶆暟鎹笌鍙傜収鐗�
      * @return
      */
-    private static Map<String, String> analysisString(String data, Map<String, List<DataConfig>> dataConfig) {
+    private static Map<String, Object> analysisString(String data, Map<String, List<DataConfig>> dataConfig, Device device,
+                                                      String entrustCode, String sampleCode) {
         String processingDataAfterSpaces = data
                 .replaceAll("  +", splitIdentifier)
                 .replaceAll("\r", "")
                 .replaceAll(" ", "");
-        Map<String, String> map = new HashMap<>();
+        Map<String, Object> map = new HashMap<>();
         dataConfig.forEach((k, v) -> {
-            List<Object> list = analyzeData(processingDataAfterSpaces, v, k, splitIdentifier);
+            List<Object> list = new ArrayList<>();
+            // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙蜂笉瀛樺湪锛屽畾锛�1銆乊瀹氳寖鍥达紝X瀹氭í鍧愭爣锛�2銆佸彧瀛樺湪Y锛�3銆佸彧瀛樺湪X
+            if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) {
+                list = analyzeData(processingDataAfterSpaces, v, k, splitIdentifier);
+                // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙峰瓨鍦�
+            } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) {
+                list = analyzeDataEntrustCodAndSampleCode(processingDataAfterSpaces, v, k, splitIdentifier, device, entrustCode, sampleCode);
+            }
             // 杩涜鍏紡璁$畻
-            String resultValue = calculationFormula(list, v.get(0), k);
+            Object resultValue = calculationFormula(list, v.get(0), k);
             map.put(k, resultValue);
         });
         return map;
@@ -427,16 +388,95 @@
      * @param dataConfig 鐢ㄦ埛閰嶇疆濂界殑x,y杞村畾浣嶆暟鎹笌鍙傜収鐗�
      * @return
      */
-    public static Map<String, String> analysisList(String data, Map<String, List<DataConfig>> dataConfig) {
-        Map<String, String> map = new HashMap<>();
+    public static Map<String, Object> analysisList(String data, Map<String, List<DataConfig>> dataConfig,
+                                                   Device device, String entrustCode, String sampleCode) {
+        Map<String, Object> map = new HashMap<>();
         dataConfig.forEach((k, v) -> {
-            // 鐢ㄦ埛鍙兘缁欎竴涓瓙椤圭洰閰嶇疆浜嗗涓厤缃紝鍗充竴涓」鐩彇澶氫釜鍊硷紝鎵�浠ラ渶瑕佸惊鐜�
-            List<Object> list = analyzeData(data, v, k, splitIdentifier);
+            List<Object> list = new ArrayList<>();
+            // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙蜂笉瀛樺湪锛屽畾锛�1銆乊瀹氳寖鍥达紝X瀹氭í鍧愭爣锛�2銆佸彧瀛樺湪Y锛�3銆佸彧瀛樺湪X
+            if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) {
+                list = analyzeData(data, v, k, splitIdentifier);
+                // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙峰瓨鍦�
+            } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) {
+                list = analyzeDataEntrustCodAndSampleCode(data, v, k, splitIdentifier, device, entrustCode, sampleCode);
+            }
             // 杩涜鍏紡璁$畻
-            String resultValue = calculationFormula(list, v.get(0), k);
+            Object resultValue = calculationFormula(list, v.get(0), k);
             map.put(k, resultValue);
         });
         return map;
+    }
+
+    private static List<Object> analyzeDataEntrustCodAndSampleCode(String data, List<DataConfig> v, String k, String splitIdentifier,
+                                                                   Device device, String entrustCodeValue, String sampleCodeValue) {
+        entrustCodeValue = entrustCodeValue.replaceAll(" ", "");
+        sampleCodeValue = sampleCodeValue.replaceAll(" ", "");
+        // 鏈�缁堢粨鏋�
+        List<Object> list = new ArrayList<>();
+        int numberOfDataEntries = 0;
+        // 鍙杄ntrustCode涓巗ampleCode鎵�鍦ㄤ綅
+        for (int config = 0; config < v.size(); config++) {
+            numberOfDataEntries = 0;
+            Integer entrustCodeY = null;
+            Integer sampleCodeY = null;
+            Integer referYCoordinate = null;
+            String refery = getRefer(v.get(config).getRefery());
+            String entrustCode = getRefer(device.getEntrustCode()); // 濮旀墭缂栧彿瀛楁
+            String sampleCode = getRefer(device.getSampleCode()); // 鏍峰搧缂栧彿瀛楁
+            if (ObjectUtils.isEmpty(refery)) {
+                continue;
+            }
+            // 鍘婚櫎鎵�鏈夌殑绌烘牸锛岄�氳繃\n灏嗗瓧绗︿覆鍒嗗壊涓鸿
+            String[] aColumnY = data.replaceAll(" ", "").split("\n");
+            for (int i = 0; i < aColumnY.length; i++) {
+                // 濡傛灉閫氳繃鍒ゆ柇锛屽畾浣嶅埌Y杞�
+                if (aColumnY[i].contains(entrustCode) && aColumnY[i].contains(sampleCode)) {
+                    String[] aLine = aColumnY[i].split(splitIdentifier);
+                    for (int j = 0; j < aLine.length; j++) {
+                        if (aLine[j].contains(entrustCode)) {
+                            entrustCodeY = j;
+                        }
+                        if (aLine[j].contains(sampleCode) ) {
+                            sampleCodeY = j;
+                        }
+                        if (aLine[j].contains(refery)) {
+                            referYCoordinate = j;
+                        }
+                    }
+                }
+                if (ObjectUtils.isNotEmpty(entrustCodeY) && ObjectUtils.isNotEmpty(sampleCodeY) && ObjectUtils.isNotEmpty(referYCoordinate)) {
+                    String[] aLine = aColumnY[i].split(splitIdentifier);
+                    try {
+                        if (aLine[entrustCodeY].contains(entrustCodeValue) && aLine[sampleCodeY].contains(sampleCodeValue)) {
+                            String result = aLine[referYCoordinate];
+                            // 闃叉璁$畻鍏紡鐨勬椂鍊欏嚭鐜帮細[null] 杩欑鏁版嵁
+                            if (ObjectUtils.isNotEmpty(result)) {
+                                numberOfDataEntries += 1;
+                                list.add(result);
+                            }
+                        }
+                    } catch (Exception e) {}
+                }
+            }
+        }
+        // 鎷兼帴鏁伴噰閰嶇疆
+        List<Object> result = new ArrayList<>();
+        for (int i = 0; i < numberOfDataEntries; i++) {
+            String aggregate = "";
+            for (int j = 0; j < v.size(); j++) {
+                int index;
+                if (j == 0) {
+                    index = i;
+                } else {
+                    index = numberOfDataEntries + i;
+                }
+                aggregate += list.get(index).toString() + ",";
+            }
+            int lastIndex = aggregate.lastIndexOf(",");
+            String substring = aggregate.substring(0, lastIndex);
+            result.add(substring);
+        }
+        return result;
     }
 
     // 鐢变簬鍦ㄦ柟娉曚腑浼氬ぇ閲忕殑鍒ゆ柇锛屾墍浠ュ仛涓�涓柟娉�
@@ -453,12 +493,24 @@
         return ObjectUtils.isNotEmpty(refer) ? refer.replaceAll(" ", "") : "";
     }
 
+    /**
+     * 濮旀墭缂栧彿涓庢牱鍝佺紪鍙烽兘涓虹┖鎵ц
+     *
+     * @param data
+     * @param v
+     * @param k
+     * @param split
+     * @return
+     */
     public static List<Object> analyzeData(String data, List<DataConfig> v, String k, String split) {
         List<Object> list = new ArrayList<>();
         for (int config = 0; config < v.size(); config++) {
             // 鍙栦袱涓敤鎴烽厤缃殑鍙傜収鐗�
             String referx = getRefer(v.get(config).getReferx());
             String refery = getRefer(v.get(config).getRefery());
+            if (ObjectUtils.isEmpty(refery) && ObjectUtils.isEmpty(referx)) {
+                continue;
+            }
             // 鏈�缁堢粨鏋�
             String result = null;
             // 閫氳繃\n灏嗗瓧绗︿覆鍒嗗壊涓鸿
@@ -466,10 +518,30 @@
             Integer end = null;
             // 閲囬泦鏁版嵁锛歒杞�
             for (int i = 0; i < aColumnY.length; i++) {
-                // 鍙杧鐨勫�硷紝闃叉鎶ラ敊
-                int x = getXOrY(v.get(config).getX(), k, "X");
-                // 濡傛灉Y涓嶺鐢ㄦ埛閮介厤缃簡鍒欐墽琛�
-                if (ObjectUtils.isNotEmpty(refery)) {
+                // 濡傛灉Y鍙傜収涓嶄负绌轰笌X鍙傜収涓虹┖鍒欐墽琛岋紝鍚屾椂璇ヨ鍖呭惈Y鍙傜収
+                if (ObjectUtils.isNotEmpty(refery) && ObjectUtils.isEmpty(referx) && aColumnY[i].contains(refery)) {
+                    // 鍙朰鍧愭爣鍊�
+                    int y = getXOrY(v.get(config).getY(), k, "Y");
+                    String[] aLineX = aColumnY[i].split(split);
+                    for (int j = 0; j < aLineX.length; j++) {
+                        if (aLineX[j].contains(refery)) {
+                            String[] split1 = new String[0];
+                            try {
+                                split1 = aColumnY[i + y].split(split);
+                            } catch (Exception e) {
+                                throw new ErrorException(k + "锛歒杞村畾浣嶈秴鍑猴紒");
+                            }
+                            try {
+                                result = split1[j];
+                            } catch (Exception e) {
+                                throw new ErrorException(k + "锛歑杞村畾浣嶈秴鍑猴紒");
+                            }
+                        }
+                    }
+                    // 濡傛灉Y鍙傜収涓嶄负绌轰笌X鍙傜収涓嶄负绌哄垯鎵ц,姝ゅY瀹氬尯鍩�
+                } else if (ObjectUtils.isNotEmpty(refery) && ObjectUtils.isNotEmpty(referx)) {
+                    // 鍙杧鐨勫�硷紝闃叉鎶ラ敊
+                    int x = getXOrY(v.get(config).getX(), k, "X");
                     // 鍙朰鍧愭爣鍊�
                     int y = getXOrY(v.get(config).getY(), k, "Y");
                     // 缂撳瓨Y鐨勭粨鏉熷��
@@ -490,9 +562,11 @@
                             }
                         }
                     }
-                    // 濡傛灉鍙厤缃簡X锛屽垯鎵ц涓嬮潰鐨勪唬鐮�
+                    // 濡傛灉X鍙傜収涓嶄负绌哄悓鏃惰琛屽寘鍚玐鍙傜収锛屽垯鎵ц涓嬮潰鐨勪唬鐮�
                 } else if (aColumnY[i].contains(referx) && ObjectUtils.isEmpty(refery)) {
                     String[] aLineX = aColumnY[i].split(split);
+                    // 鍙杧鐨勫�硷紝闃叉鎶ラ敊
+                    int x = getXOrY(v.get(config).getX(), k, "X");
                     for (int j = 0; j < aLineX.length; j++) {
                         if (aLineX[j].contains(referx)) {
                             try {
diff --git a/cnas-server/src/main/resources/mapper/DataConfigMapper.xml b/cnas-server/src/main/resources/mapper/DataConfigMapper.xml
index 69e1e5f..cb73e83 100644
--- a/cnas-server/src/main/resources/mapper/DataConfigMapper.xml
+++ b/cnas-server/src/main/resources/mapper/DataConfigMapper.xml
@@ -18,11 +18,12 @@
                d.collect_url,
                d.storage_url,
                d.ip,
-            d.mdb_entrust_code,
-            d.mdb_sample_code,
+               d.entrust_code,
+               d.sample_code,
+               d.db_file_name,
                ip.inspection_item,
                if(ip.inspection_item_subclass is not null and ip.inspection_item_subclass != '',
-                  ip.inspection_item_subclass, ip.inspection_item) inspection_item_subclass,
+                  ip.inspection_item_subclass, ip.inspection_item)                            inspection_item_subclass,
                TRIM(BOTH '["]' FROM SUBSTRING_INDEX(REPLACE(ip.sample, '[["', ''), '"]]', 1)) sample,
                ddc.formula,
                ddc.referx,
@@ -30,7 +31,7 @@
                ddc.x,
                ddc.y,
                ddc.id,
-               ip.id structureItemParameterId
+               ip.id                                                                          structureItemParameterId
         FROM device d
                  left join structure_item_parameter ip on FIND_IN_SET(ip.id, d.ins_product_ids)
                  left join device_data_config ddc on ddc.device_id = d.id and ddc.structure_item_parameter_id = ip.id
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
index 6682332..b869df5 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
@@ -5,7 +5,7 @@
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.ExcelWriter;
 import com.alibaba.excel.write.metadata.WriteSheet;
-import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
@@ -36,10 +36,6 @@
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.Function;
-import java.util.function.Predicate;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -648,11 +644,18 @@
                         .collect(Collectors.groupingBy(CostStatisticsDto::getCompany));
         try {
             // 鏂板缓ExcelWriter
-            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+            // 鏂板缓ExcelWriter
+            ExcelWriter excelWriter =
+                    EasyExcel.write(response.getOutputStream())
+                            .registerWriteHandler(new SimpleColumnWidthStyleStrategy(25))
+                            .build();
             for (Map.Entry<String, List<CostStatisticsDto>> companyDataEntry : groupByCompany.entrySet()) {
                 String sheetName = companyDataEntry.getKey();
                 List<CostStatisticsDto> dataList = companyDataEntry.getValue();
-                WriteSheet mainSheet = EasyExcel.writerSheet(sheetName).head(CostStatisticsDto.class).build();
+                WriteSheet mainSheet = EasyExcel.writerSheet(sheetName)
+                        .head(CostStatisticsDto.class)
+                        .registerWriteHandler(new SimpleColumnWidthStyleStrategy(25))
+                        .build();
                 excelWriter.write(dataList, mainSheet);
             }
             // 鍏抽棴娴�

--
Gitblit v1.9.3