From ff4d45d57c3d1a1c8d4218dd83023cb7e4c34d7e Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期五, 26 七月 2024 12:45:27 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java          |    6 +
 cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java                   |  186 +++++++++++++++++++++++++++++++++++++++++-----
 inspect-server/src/main/resources/mapper/InsOrderMapper.xml                            |    4 +
 cnas-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java             |    6 -
 cnas-server/src/main/resources/mapper/DataConfigMapper.xml                             |    4 
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java |    2 
 cnas-server/src/main/java/com/yuanchu/mom/mapper/DataConfigMapper.java                 |    2 
 inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java    |    2 
 cnas-server/src/main/java/com/yuanchu/mom/service/DataConfigService.java               |    2 
 cnas-server/src/main/java/com/yuanchu/mom/pojo/Device.java                             |   16 ++-
 cnas-server/src/main/java/com/yuanchu/mom/service/impl/DataConfigServiceImpl.java      |    7 +
 inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderMapper.java                |    3 
 12 files changed, 197 insertions(+), 43 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 c28b9dd..024130c 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
@@ -8,7 +8,6 @@
 import com.yuanchu.mom.annotation.ValueClassify;
 import com.yuanchu.mom.dto.DataConfigDto;
 import com.yuanchu.mom.dto.DeviceDto;
-import com.yuanchu.mom.exception.ErrorException;
 import com.yuanchu.mom.pojo.DataConfig;
 import com.yuanchu.mom.pojo.Device;
 import com.yuanchu.mom.service.DataConfigService;
@@ -198,11 +197,6 @@
     @PostMapping("/saveDataAcquisitionConfiguration")
     public Result<?> saveDataAcquisitionConfiguration(@RequestParam(value = "deviceId") Integer deviceId, @RequestBody DataConfigDto dataConfigList) {
         if (dataConfigList.getIsDevice()) {
-            Device one = deviceService.getOne(Wrappers.<Device>lambdaQuery()
-                    .eq(Device::getIp, dataConfigList.getIp()));
-            if (ObjectUtils.isNotEmpty(one)) {
-                throw new ErrorException("璇P锛�" + dataConfigList.getIp() + "宸茬粡缁戝畾浜嗚澶囷細" + one.getDeviceName());
-            }
             Device device = new Device();
             device.setId(deviceId);
             device.setCollectUrl(dataConfigList.getCollectUrl());
diff --git a/cnas-server/src/main/java/com/yuanchu/mom/mapper/DataConfigMapper.java b/cnas-server/src/main/java/com/yuanchu/mom/mapper/DataConfigMapper.java
index 56572b2..1e0768f 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/mapper/DataConfigMapper.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/mapper/DataConfigMapper.java
@@ -18,5 +18,5 @@
 
     List<DeviceConfigDtoPage> selectDataConfigList(Integer deviceId);
 
-    List<DataConfig> deleteDataConfig();
+    List<Integer> deleteDataConfig();
 }
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 909c79a..7c52e48 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
@@ -119,19 +119,25 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;
 
-    @ApiModelProperty("鏂囦欢鍚庣紑")
+    @ApiModelProperty("鏁伴噰-鏂囦欢鍚庣紑")
     private String fileType;
 
-    @ApiModelProperty("閲囬泦鍦板潃")
+    @ApiModelProperty("鏁伴噰-閲囬泦鍦板潃")
     private String collectUrl;
 
-    @ApiModelProperty("瀛樺偍鍦板潃")
+    @ApiModelProperty("鏁伴噰-瀛樺偍鍦板潃")
     private String storageUrl;
 
-    @ApiModelProperty("璁惧IP")
+    @ApiModelProperty("鏁伴噰-璁惧IP")
     private String ip;
 
-    @ApiModelProperty("鏄惁涓烘暟閲囪澶�")
+    @ApiModelProperty("鏁伴噰-鏄惁涓烘暟閲囪澶�")
     @TableField(exist = false)
     private Boolean isItADataAcquisitionDevice;
+
+    @ApiModelProperty("鏁伴噰-濮旀墭瀛楁")
+    private String mdbEntrustCode;
+
+    @ApiModelProperty("鏁伴噰-鏍峰搧瀛楁")
+    private String mdbSampleCode;
 }
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 32959f0..3ca77f9 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
@@ -18,5 +18,5 @@
 
     List<DeviceConfigDtoPage> selectDataConfigList(Integer deviceId);
 
-    List<DataConfig> deleteDataConfig();
+    void deleteDataConfig();
 }
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 7c8c492..f5ddc08 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
@@ -32,7 +32,10 @@
     }
 
     @Override
-    public List<DataConfig> deleteDataConfig() {
-        return dataConfigMapper.deleteDataConfig();
+    public void deleteDataConfig() {
+        List<Integer> integers = dataConfigMapper.deleteDataConfig();
+        if (!integers.isEmpty()) {
+            dataConfigMapper.deleteBatchIds(integers);
+        }
     }
 }
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 195cd6f..8e19722 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
@@ -150,7 +150,11 @@
         List<Device> device = baseMapper.selectList(Wrappers.<Device>lambdaQuery()
                 .eq(Device::getIp, ip));
         if(device.size() > 1) {
-            throw new ErrorException("IP锛�" + ip + "閰嶇疆浜嗚澶囧涓澶囷紝鏃犳硶杩涜鏁伴噰锛�");
+            String str = "";
+            for (Device device1 : device) {
+                str += device1.getDeviceName() + "锛�";
+            }
+            throw new ErrorException("IP锛�" + ip + "閰嶇疆浜嗚澶囧涓澶囷細" + str + "锛屾棤娉曡繘琛屾暟閲囷紒");
         }
         if (ObjectUtils.isEmpty(device)) {
             throw new ErrorException("鏈粰璇P锛�" + ip + "閰嶇疆璁惧锛屾棤娉曡繘琛屾暟閲囷紒");
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 066c05a..2d8c1fb 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,7 +10,10 @@
 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.regex.Matcher;
 import java.util.regex.Pattern;
@@ -27,6 +30,7 @@
     private static final String splitIdentifier = "@-@"; // 鑷畾涔夊敮涓�鏍囪瘑鍒嗗壊绗�
 
     public static final String frequency = "frequency";
+
     /**
      * 鏁伴噰鍏ュ彛
      *
@@ -35,11 +39,21 @@
      * @return
      */
     public static Map<String, String> dataAcquisitionEntrance(List<DataConfig> dataConfig, Device device, String entrustCode, String sampleCode, String ip) {
+        /**
+         * filePath 鏂囦欢閲囬泦璺緞
+         * fileExtension 鏂囦欢鍚庣紑
+         * entrustCode 濮旀墭缂栧彿
+         * sampleCode 鏍峰搧缂栧彿
+         * mdbEntrustCode mdb鏂囦欢闇�瑕侊細濮旀墭缂栧彿瀛楁
+         * mdbSampleCode mdb鏂囦欢闇�瑕侊細鏍峰搧缂栧彿瀛楁
+         */
         String http = HTTP + ip + GETFILE +
                 "?filePath=" + device.getCollectUrl() +
                 "&fileExtension=" + device.getFileType() +
                 "&entrustCode=" + entrustCode +
-                "&sampleCode=" + sampleCode;
+                "&sampleCode=" + sampleCode +
+                "&mdbEntrustCode=" + device.getMdbEntrustCode() +
+                "&mdbSampleCode=" + device.getMdbSampleCode();
         String result = null;
         try {
             result = HttpUtil.get(http);
@@ -77,10 +91,10 @@
                     map = analysisList(data, userMap);
                     break;
                 case ".mdb":
-                    map = analysisMdb(data, userMap, entrustCode, sampleCode);
+                    map = analysisMdb(data, userMap);
                     break;
                 case ".db":
-                    map = analysisDb(data, userMap, entrustCode, sampleCode);
+                    map = analysisDb(data, userMap);
                     break;
                 case ".png":
                     map = readPngString(data, userMap);
@@ -120,21 +134,22 @@
      * @param dataConfig
      * @return
      */
-    private static Map<String, String> analysisDb(String data, Map<String, List<DataConfig>> dataConfig, String entrustCode, String sampleCode) {
+    private static Map<String, String> analysisDb(String data, Map<String, List<DataConfig>> dataConfig) {
         JSONObject jsonObject = JSON.parseObject(data);
-        JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString());
         Map<String, String> map = new HashMap<>();
+        if (jsonObject.isEmpty()) {
+            return map;
+        }
+        JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString());
         dataConfig.forEach((k, v) -> {
             List<Object> list = new ArrayList<>();
             for (int config = 0; config < v.size(); config++) {
                 String referx = getRefer(v.get(config).getReferx());
                 for (int i = 0; i < dataList.size(); i++) {
                     JSONObject jsonObject1 = JSON.parseObject(dataList.get(i).toString());
-                    if (entrustCode.equals(jsonObject1.get("ExtInfo_Value1"))) {
-                        Object o = jsonObject1.get(referx);
-                        if (ObjectUtils.isNotEmpty(o)) {
-                            list.add(o);
-                        }
+                    Object o = jsonObject1.get(referx);
+                    if (ObjectUtils.isNotEmpty(o)) {
+                        list.add(o);
                     }
                 }
             }
@@ -146,27 +161,26 @@
     }
 
     /**
-     * 闇�瑕侀�氳繃X,Y杞村畾浣�
-     *
      * @param data
      * @param dataConfig
      * @return
      */
-    private static Map<String, String> analysisMdb(String data, Map<String, List<DataConfig>> dataConfig, String entrustCode, String sampleCode) {
+    private static Map<String, String> analysisMdb(String data, Map<String, List<DataConfig>> dataConfig) {
         JSONObject jsonObject = JSON.parseObject(data);
-        JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString());
         Map<String, String> map = new HashMap<>();
+        if (jsonObject.isEmpty()) {
+            return map;
+        }
+        JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString());
         dataConfig.forEach((k, v) -> {
             List<Object> list = new ArrayList<>();
             for (int config = 0; config < v.size(); config++) {
                 String referx = getRefer(v.get(config).getReferx());
                 for (int i = 0; i < dataList.size(); i++) {
                     JSONObject jsonObject1 = JSON.parseObject(dataList.get(i).toString());
-                    if (entrustCode.equals(jsonObject1.get("OrderNumber")) && sampleCode.equals(jsonObject1.get("SampleNumber"))) {
-                        Object o = jsonObject1.get(referx);
-                        if (ObjectUtils.isNotEmpty(o)) {
-                            list.add(o);
-                        }
+                    Object o = jsonObject1.get(referx);
+                    if (ObjectUtils.isNotEmpty(o)) {
+                        list.add(o);
                     }
                 }
             }
@@ -235,8 +249,136 @@
         }
         // 濡傛灉涓嶄负绌猴紝杩涜鍏紡璁$畻
         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);
 
-            return null;
+            //灏嗕腑鏂囩殑(杞崲鑻辨枃鐨�())
+            formula = formula.replace("锛�", "(")
+                    .replace("锛�", ")")
+                    .replace("锛�", ",");
+            //鐒跺悗鎻愬彇鑻辨枃瀛楁瘝,鍏ㄩ儴杞崲涓哄ぇ鍐�
+            String[] strs = formula.split("[^A-Za-z]+");
+            String upperStr = "";
+            for (String str : strs) {
+                upperStr += str.toUpperCase();
+            }
+            if (upperStr.equals("")) {
+                throw new ErrorException(formula + "閲岄潰鐨勫叕寮忔病鏈夊嚱鏁�");
+            }
+            //鐒跺悗鑾峰彇鏈�澶栭潰鎷彿閲岄潰鐨勫��,鍐嶆牴鎹�","鍒嗗壊
+            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 inner = formula.substring(start + 1, end);
+            List<String> arguments = new ArrayList<>();
+            int depth = 0;
+            StringBuilder currentArgument = new StringBuilder();
+            for (
+                    char c : inner.toCharArray()) {
+                if (c == ',' && depth == 0) {
+                    arguments.add(currentArgument.toString());
+                    currentArgument.setLength(0);
+                } else {
+                    if (c == '(') {
+                        depth++;
+                    } else if (c == ')') {
+                        depth--;
+                    }
+                    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("\\b\\d+\\b");
+                Matcher matcher = pattern.matcher(expr);
+                StringBuffer sb = new StringBuffer();
+                while (matcher.find()) {
+                    int index = Integer.parseInt(matcher.group()) - 1;
+                    if (index < bigDecimalList.size()) {
+                        matcher.appendReplacement(sb, bigDecimalList.get(index).toString());
+                    } else {
+                        throw new ErrorException("琛ㄨ揪寮忎腑鐨勪笅鏍� " + 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;
+            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;
+                case "RANGE":
+                    finalResult = results.stream().max(BigDecimal::compareTo)
+                            .orElseThrow(() -> new IllegalArgumentException("鏃犳硶璁$畻RANGE鍊�"))
+                            .subtract(results.stream().min(BigDecimal::compareTo)
+                                    .orElseThrow(() -> new IllegalArgumentException("鏃犳硶璁$畻RANGE鍊�")));
+                    break;
+                default:
+                    throw new UnsupportedOperationException("鏆備笉鏀寔鍑芥暟: " + upperStr);
+            }
+            System.out.println(results);
+            System.out.println("璁$畻缁撴灉: " + finalResult);
+
+            return finalResult.toString();
             // 鍚﹀垯锛氭病鏈夊叕寮忎唬琛ㄤ笉闇�瑕佽绠楋紝鐩存帴鎻愬彇List閲岄潰鐨勬暟鎹�
         } else {
             // 杩欓噷鍙細鍙栧垪琛ㄧ涓�涓暟鎹�
@@ -381,10 +523,10 @@
 
     public static String getFormatProcessing(String value) {
         value = value.replaceAll("%", "");
-        if(value.contains("=")){
+        if (value.contains("=")) {
             String[] split = value.split("=");
             return split[split.length - 1];
-        } else if(value.contains(":")) {
+        } else if (value.contains(":")) {
             String[] split = value.split(":");
             return split[split.length - 1];
         } else {
diff --git a/cnas-server/src/main/resources/mapper/DataConfigMapper.xml b/cnas-server/src/main/resources/mapper/DataConfigMapper.xml
index 592af80..e1188f1 100644
--- a/cnas-server/src/main/resources/mapper/DataConfigMapper.xml
+++ b/cnas-server/src/main/resources/mapper/DataConfigMapper.xml
@@ -35,8 +35,8 @@
         where d.id = #{deviceId}
     </select>
 
-    <select id="deleteDataConfig" resultType="com.yuanchu.mom.pojo.DataConfig">
-        SELECT ddc.*
+    <select id="deleteDataConfig" resultType="integer">
+        SELECT ddc.id
         FROM device d
                  left join structure_item_parameter ip on not FIND_IN_SET(ip.id, d.ins_product_ids)
                  inner 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/controller/InsOrderPlanController.java b/inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java
index 3b166f9..f6f0ab1 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java
@@ -121,7 +121,7 @@
         return num == 1 ? Result.success() : Result.fail("鎻愪氦澶辫触锛岄儴鍒嗛」鐩繕鏈繘琛屾楠�");
     }
 
-    @ValueClassify("妫�楠屼换鍔�")
+    @ValueClassify("璁惧")
     @ApiOperation(value = "鏄惁鍏佽淇敼閲囬泦鍊�")
     @DeleteMapping("/isItAllowedToModifyTheCollectedValues")
     public Result<?> isItAllowedToModifyTheCollectedValues() {
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderMapper.java b/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderMapper.java
index a093759..5144caa 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderMapper.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderMapper.java
@@ -56,5 +56,6 @@
 
     Map<String, Object> getDeviceMessage(@Param("ip")String ip,
                                          @Param("inspectionItem") String inspectionItem,
-                                         @Param("inspectionItemSubclass") String inspectionItemSubclass);
+                                         @Param("inspectionItemSubclass") String inspectionItemSubclass,
+                                         @Param("sample") String sample);
 }
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
index c81c676..f5e2efb 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -227,7 +227,7 @@
         // 闃叉鍥炵幆鍦板潃鍙樹负IPv6
         String ip =  ipAddress.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipAddress;
         insProducts.forEach(i -> {
-            Map<String, Object> devices = baseMapper.getDeviceMessage(ip, i.getInspectionItem(), i.getInspectionItemSubclass());
+            Map<String, Object> devices = baseMapper.getDeviceMessage(ip, i.getInspectionItem(), i.getInspectionItemSubclass(), i.getSampleType());
             if (ObjectUtils.isNotEmpty(devices) && ObjectUtils.isNotEmpty(devices.get("file_type")) && ObjectUtils.isNotEmpty(devices.get("collect_url"))) {
                 InsProductResult insProductResult = i.getInsProductResult();
                 if (ObjectUtils.isEmpty(insProductResult)) {
diff --git a/inspect-server/src/main/resources/mapper/InsOrderMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
index af29ddc..70c2bbf 100644
--- a/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
+++ b/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -462,6 +462,9 @@
         FROM
             device d,
             device_data_config ddc
+        <if test="sample != '' and sample != null">
+            inner join structure_item_parameter sip on sip.sample like concat('%', #{sample}, '%') and sip.id = ddc.structure_item_parameter_id
+        </if>
         where d.ip = #{ip}
           and ddc.inspection_item = #{inspectionItem}
             <if test="inspectionItemSubclass != '' and inspectionItemSubclass != null">
@@ -469,5 +472,6 @@
             </if>
           and d.device_status = 0
           and d.ins_product_ids is not null
+        limit 1
     </select>
 </mapper>

--
Gitblit v1.9.3