From 4d5a0213352c1e5fd9410241668cbd06ea47e4c6 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 18 四月 2025 14:56:30 +0800
Subject: [PATCH] 拉力机数采

---
 cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java            |    3 
 cnas-device/src/main/java/com/ruoyi/device/pojo/DataConfig.java                    |   13 ++
 cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java          |    2 
 cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java        |   25 +++-
 cnas-device/src/main/resources/mapper/DataConfigMapper.xml                         |   38 +++++++
 cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java                        |   10 +-
 cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java              |  145 ++++++++++++++++++++++++++++-
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java |   10 +
 8 files changed, 222 insertions(+), 24 deletions(-)

diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java
index 8abd1a0..1a451db 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java
@@ -53,13 +53,14 @@
 
     @ApiOperation(value = "鏌ョ湅璁惧浜岀淮鐮佹寜閽�")
     @GetMapping("/showDeviceQrCodeButton")
-    public void showDeviceQrCodeButton() { }
+    public void showDeviceQrCodeButton() {
+    }
 
     //璁惧宸ュ叿鏄庣粏
 
     @ApiOperation(value = "鏌ヨ璁惧璇︽儏鍒楄〃")
     @GetMapping("/selectDeviceParameter")
-    public Result selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull){
+    public Result selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull) {
         return Result.success(deviceService.selectDeviceParameter(page, itemParameter, laboratoryNameIsNull));
     }
 
@@ -137,8 +138,8 @@
 
     @ApiOperation(value = "閫氳繃椤圭洰鑾峰彇璁惧鍒楄〃")
     @GetMapping("/selectDeviceByCategory")
-    public Result selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass,String laboratory) {
-        return Result.success(deviceService.selectDeviceByCategory(inspectionItem, inspectionItemSubclass,laboratory));
+    public Result selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass, String laboratory) {
+        return Result.success(deviceService.selectDeviceByCategory(inspectionItem, inspectionItemSubclass, laboratory));
     }
 
     @ApiOperation(value = "閫氳繃璁惧缂栧彿鑾峰彇璁惧鍒楄〃")
@@ -150,7 +151,7 @@
 
     @ApiOperation("/鏁伴噰-鏁版嵁閲囬泦")
     @PostMapping("/dataCollection")
-    public Result<?> dataAcquisition(HttpServletRequest request,@RequestBody DeviceCollectionDto dto) {
+    public Result<?> dataAcquisition(HttpServletRequest request, @RequestBody DeviceCollectionDto dto) {
         return deviceService.dataAcquisition(request, dto);
     }
 
@@ -167,6 +168,12 @@
         return dataConfigService.queryDataAcquisitionConfiguration(dataConfig);
     }
 
+    @ApiOperation(value = "鏌ヨ鏁伴噰閰嶇疆")
+    @GetMapping("/queryDataAcquisitionConfigurationTwo")
+    public Result<?> queryDataAcquisitionConfigurationTwo(DataConfig dataConfig) {
+        return dataConfigService.queryDataAcquisitionConfigurationTwo(dataConfig);
+    }
+
 
     @ApiOperation(value = "鍒犻櫎鏁伴噰閰嶇疆")
     @DeleteMapping("/deleteDataAcquisitionConfiguration")
@@ -176,7 +183,6 @@
         dataConfigService.removeBatchByIds(collect);
         return Result.success();
     }
-
 
 
     @ApiOperation(value = "宸︿晶璁惧鏍戝舰鏍�")
@@ -189,7 +195,7 @@
     @ApiOperation(value = "璁惧妗f瀵煎嚭")
     @GetMapping("/exportDeviceFile")
     public void exportDeviceFile(@RequestParam Integer deviceId, HttpServletResponse response) throws Exception {
-        deviceService.exportDeviceFile(deviceId,response);
+        deviceService.exportDeviceFile(deviceId, response);
     }
 
     @ApiOperation(value = "浠櫒璁惧涓�瑙堣〃瀵煎嚭")
@@ -200,11 +206,12 @@
 
     /**
      * 瀵煎叆璁惧
+     *
      * @return
      */
     @ApiOperation(value = "瀵煎叆璁惧")
     @PostMapping("/importDevice")
-    public Result importDevice(@RequestParam("file") MultipartFile file){
+    public Result importDevice(@RequestParam("file") MultipartFile file) {
         try {
             EasyExcel.read(file.getInputStream(), Device.class, new DeviceListener(deviceService))
                     .registerConverter(new LocalDateTimeStringConverters())
@@ -218,7 +225,7 @@
 
     @ApiOperation(value = "鍒ゆ柇璇ヨ澶囨槸鍚﹀彲浠ユ暟閲�")
     @GetMapping("/determineWhetherToCollectData")
-    public Result<?> determineWhetherToCollectData(@RequestParam(value = "managementNumber",defaultValue = "") String managementNumber, HttpServletRequest request) {
+    public Result<?> determineWhetherToCollectData(@RequestParam(value = "managementNumber", defaultValue = "") String managementNumber, HttpServletRequest request) {
         return deviceService.determineWhetherToCollectData(managementNumber, request);
     }
 }
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java
index e810e5c..d215a22 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.device.dto.DeviceConfigDtoPage;
 import com.ruoyi.device.pojo.DataConfig;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -18,5 +19,7 @@
 
     List<DeviceConfigDtoPage> selectDataConfigList(Integer deviceId);
 
+    List<DeviceConfigDtoPage> selectDataConfigListTwo(@Param("deviceName")String deviceName,@Param("managementNumber")String managementNumber);
+
     List<Integer> deleteDataConfig();
 }
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DataConfig.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DataConfig.java
index 547679d..aa630ac 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/pojo/DataConfig.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DataConfig.java
@@ -77,4 +77,17 @@
     @TableField(select = false, exist = false)
     private Boolean isDevice;
 
+    @TableField(select = false, exist = false)
+    private String deviceName;
+
+    @TableField(select = false, exist = false)
+    private String managementNumber;
+
+    @ApiModelProperty("杩涘彛閫氶亾")
+    private String importedChannel;
+
+    @ApiModelProperty("杩涘彛閮ㄤ綅")
+    private String importedParts;
+
+
 }
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java
index a3eba07..1463745 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java
@@ -180,10 +180,10 @@
     @ApiModelProperty("閫氶亾")
     private String channel;
 
-    @ApiModelProperty("杩涘彛閫氶亾")
-    private String importedChannel;
-
-    @ApiModelProperty("杩涘彛閮ㄤ綅")
-    private String importedParts;
+//    @ApiModelProperty("杩涘彛閫氶亾")
+//    private String importedChannel;
+//
+//    @ApiModelProperty("杩涘彛閮ㄤ綅")
+//    private String importedParts;
 
 }
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java
index e680c0e..73f9d66 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java
@@ -20,4 +20,6 @@
     void saveDataAcquisitionConfiguration(Integer deviceId, DataConfigDto dataConfigList);
 
     Result<?> queryDataAcquisitionConfiguration(DataConfig dataConfig);
+
+    Result<?> queryDataAcquisitionConfigurationTwo(DataConfig dataConfig);
 }
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java
index b20778c..b287220 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java
@@ -20,7 +20,7 @@
 
 /**
  * <p>
- *  鏈嶅姟瀹炵幇绫�
+ * 鏈嶅姟瀹炵幇绫�
  * </p>
  *
  * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
@@ -48,7 +48,7 @@
             Device device = new Device();
             BeanUtils.copyProperties(dataConfigList, device);
             List<String> channelList = dataConfigList.getChannel();
-            if (channelList != null &&!channelList.isEmpty()) {
+            if (channelList != null && !channelList.isEmpty()) {
                 String channelString = String.join(",", channelList);
                 device.setChannel(channelString);
             }
@@ -79,4 +79,10 @@
             return Result.success(deviceConfigDtoPages);
         }
     }
+
+    @Override
+    public Result<?> queryDataAcquisitionConfigurationTwo(DataConfig dataConfig) {
+        List<DeviceConfigDtoPage> deviceConfigDtoPages = dataConfigMapper.selectDataConfigListTwo(dataConfig.getDeviceName(), dataConfig.getManagementNumber());
+        return Result.success(deviceConfigDtoPages);
+    }
 }
diff --git a/cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java b/cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java
index 5065c0b..44a20e5 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java
@@ -48,7 +48,7 @@
             if (device.getFileType().equals(".xlsx")) {
                 String url = device.getCollectUrl() + "\\" + sampleCode.replace("/", "");
                 if (StringUtils.isNotBlank(dataConfig.get(0).getAnotherName())) {
-                    url += dataConfig.get(0).getAnotherName() ;
+                    url += dataConfig.get(0).getAnotherName();
                 }
                 url += ".xlsx";
                 device.setCollectUrl(url);
@@ -86,7 +86,7 @@
         JSONObject jsonObject = JSON.parseObject(result);
         if (Objects.equals(jsonObject.get("code"), 1)) {
             if (ObjectUtils.isEmpty(jsonObject.get("msg"))) {
-                throw new ErrorException("鏈煡璇㈠埌鏂囦欢锛佸彲鑳借璺緞锛�" + device.getCollectUrl() + "锛変笅骞舵病鏈夋墍闇�(" + device.getFileType() +")鏂囦欢锛�");
+                throw new ErrorException("鏈煡璇㈠埌鏂囦欢锛佸彲鑳借璺緞锛�" + device.getCollectUrl() + "锛変笅骞舵病鏈夋墍闇�(" + device.getFileType() + ")鏂囦欢锛�");
             } else {
                 throw new ErrorException(jsonObject.get("msg") + "");
             }
@@ -113,6 +113,9 @@
                 case ".xlsx":
                     map = analysisList(data, userMap, device, entrustCode, sampleCode);
                     break;
+                case ".xls":
+                    map = analysisXlsList(data, userMap, device, entrustCode, sampleCode);
+                    break;
                 case ".txt":
                     map = analysisTxt(data, userMap, device, entrustCode, sampleCode);
                     break;
@@ -133,6 +136,9 @@
                 case ".png":
                     map = readPngString(data, userMap, device);
                     break;
+                case ".pdf":
+                    map = readPdfString(data, userMap, device);
+                    break;
                 default:
                     map = null;
                     break;
@@ -144,6 +150,42 @@
             }
             return map;
         }
+    }
+
+    private static Map<String, Object> readPdfString(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++) {
+                String referx = getRefer(v.get(config).getReferx());
+                String result = null;
+                // 閫氳繃\n灏嗗瓧绗︿覆鍒嗗壊涓鸿
+                String[] aColumnY = data.split("\n");
+                List<String> list1 = new ArrayList<>();
+                // 璇ュ惊鐜緱鍑虹敤鎴烽厤缃殑y杞�
+                for (int i = 0; i < aColumnY.length; i++) {
+                    String addDataWithSpaces = referx.replaceAll("", " ");
+                    int x = getXOrY(v.get(config).getX(), k, "X");
+                    if (aColumnY[i].contains(addDataWithSpaces)) {
+                        Matcher matcher = SPATTERN.matcher(aColumnY[i]);
+                        while (matcher.find()) {
+                            String group = matcher.group();
+                            list1.add(group);
+                        }
+                    }
+                    if (ObjectUtils.isNotEmpty(list1)) {
+                        result = list1.get(x);
+                    }
+                }
+                if (ObjectUtils.isNotEmpty(result)) {
+                    list.add(result);
+                }
+            }
+            // 杩涜鍏紡璁$畻
+            Object resultValue = calculationFormula(list, v.get(0), k, device);
+            map.put(k, resultValue);
+        });
+        return map;
     }
 
     public static Map<String, Object> createFrequency(String entrustCode, String sampleCode, Map<String, Object> map) {
@@ -528,7 +570,33 @@
             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);
+                list = analyzeXlsData(data, v, k, splitIdentifier);
+                // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙峰瓨鍦�
+            } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) {
+                list = analyzeDataEntrustCodAndSampleCode(data, v, k, splitIdentifier, device, entrustCode, sampleCode);
+            }
+            // 杩涜鍏紡璁$畻
+            Object resultValue = calculationFormula(list, v.get(0), k, device);
+            map.put(k, resultValue);
+        });
+        return map;
+    }
+
+    /**
+     * 鍙朮瀹氫綅
+     *
+     * @param data       閲囬泦鍒扮殑鏂囦欢瀛楃涓�
+     * @param dataConfig 鐢ㄦ埛閰嶇疆濂界殑x瀹氫綅鏁版嵁涓庡弬鐓х墿
+     * @return
+     */
+    public static Map<String, Object> analysisXlsList(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 = new ArrayList<>();
+            // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙蜂笉瀛樺湪锛屽畾锛�1銆乊瀹氳寖鍥达紝X瀹氭í鍧愭爣锛�2銆佸彧瀛樺湪Y锛�3銆佸彧瀛樺湪X
+            if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) {
+                list = analyzeXlsData(data, v, k, splitIdentifier);
                 // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙峰瓨鍦�
             } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) {
                 list = analyzeDataEntrustCodAndSampleCode(data, v, k, splitIdentifier, device, entrustCode, sampleCode);
@@ -569,7 +637,7 @@
                         if (aLine[j].contains(entrustCode)) {
                             entrustCodeY = j;
                         }
-                        if (aLine[j].contains(sampleCode) ) {
+                        if (aLine[j].contains(sampleCode)) {
                             sampleCodeY = j;
                         }
                         if (aLine[j].contains(refery)) {
@@ -588,7 +656,8 @@
                                 list.add(result);
                             }
                         }
-                    } catch (Exception e) {}
+                    } catch (Exception e) {
+                    }
                 }
             }
         }
@@ -720,6 +789,72 @@
         return list;
     }
 
+    public static List<Object> analyzeXlsData(String data, List<DataConfig> v, String k, String split) {
+        List<Object> finalResult = new ArrayList<>(); // 鏈�缁堣繑鍥炵殑缁撴灉鍒楄〃
+
+        for (DataConfig config : v) {
+            // 鍙栫敤鎴烽厤缃殑鍙傜収鐗�
+            String referx = getRefer(config.getReferx());
+            if (ObjectUtils.isEmpty(referx)) {
+                continue;
+            }
+
+            // 绗竴姝ワ細瑙f瀽鏁版嵁锛屾壘鍒扮鍚堟潯浠剁殑琛岋紙绗簩涓垎闅旂鍓嶅拰鍐掑彿鍚庝负鏁板瓧锛�
+            List<String> validLines = new ArrayList<>();
+            String[] lines = data.replaceAll(" ", "").split("\n");
+            for (String line : lines) {
+                String[] parts = line.split(split);
+                if (parts.length > 1) {
+                    // 妫�鏌ョ浜屼釜鍒嗛殧绗﹀墠闈㈠拰鍐掑彿鍚庨潰鏄惁涓烘暟瀛�
+                    String beforeSplit = parts[1];
+                    String afterColon = "";
+                    if (beforeSplit.contains(":")) {
+                        String[] colonParts = beforeSplit.split(":");
+                        if (colonParts.length > 1) {
+                            afterColon = colonParts[1].trim();
+                        }
+                    }
+                    try {
+                        Double.parseDouble(afterColon); // 鍐掑彿鍚庢槸鍚︿负鏁板瓧
+                        validLines.add(line); // 濡傛灉绗﹀悎鏉′欢锛屾坊鍔犲埌涓存椂鍒楄〃涓�
+                    } catch (NumberFormatException e) {
+                        // 涓嶇鍚堟暟瀛楁潯浠讹紝蹇界暐
+                    }
+                }
+            }
+
+            // 绗簩姝ワ細浠庝复鏃跺垪琛ㄤ腑鎻愬彇鍖呭惈 referx 鐨勮锛屽苟鑾峰彇鍏跺悗闈㈢殑鏁板瓧鍊�
+            List<Object> result = new ArrayList<>();
+            for (String line : validLines) {
+                if (line.contains(referx)) {
+                    String[] parts = line.split(referx);
+                    if (parts.length > 1) {
+                        String xValue = parts[1].trim();
+                        // 鎻愬彇 referx 鍚庨潰鍒颁笅涓�涓垎闅旂涔嬮棿鐨勬暟瀛�
+                        String[] splitParts = xValue.split(split);
+                        if (splitParts.length > 0) {
+                            try {
+                                String trim = splitParts[0].trim();
+                                if (trim.contains(":")) {
+                                    trim = trim.replaceAll(":", "");
+                                }
+                                Double.parseDouble(trim); // 鍒ゆ柇鏄惁涓烘暟瀛�
+                                result.add(trim);
+                            } catch (NumberFormatException e) {
+                                // 涓嶆槸鏁板瓧锛屽拷鐣�
+                            }
+                        }
+                    }
+                }
+            }
+            // 闃叉璁$畻鍏紡鐨勬椂鍊欏嚭鐜帮細[null] 杩欑鏁版嵁
+            if (!result.isEmpty()) {
+                finalResult.addAll(result);
+            }
+        }
+        return finalResult;
+    }
+
     public static String getFormatProcessing(String value) {
         value = value.replaceAll("%", "");
         if (value.contains("=")) {
diff --git a/cnas-device/src/main/resources/mapper/DataConfigMapper.xml b/cnas-device/src/main/resources/mapper/DataConfigMapper.xml
index c9c97e9..660ff9d 100644
--- a/cnas-device/src/main/resources/mapper/DataConfigMapper.xml
+++ b/cnas-device/src/main/resources/mapper/DataConfigMapper.xml
@@ -19,8 +19,6 @@
                d.storage_url,
                d.ip,
                d.port,
-               d.imported_channel,
-               d.imported_parts,
                d.channel,
                d.entrust_code,
                d.sample_code,
@@ -38,7 +36,9 @@
                ddc.another_name,
                ddc.matching_name,
                ddc.id,
-               ip.id                                                                          structureItemParameterId
+               ip.id                                                                          structureItemParameterId ,
+               ddc.imported_parts,
+               ddc.imported_channel
         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
@@ -51,4 +51,36 @@
                  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
     </select>
+    <select id="selectDataConfigListTwo" resultType="com.ruoyi.device.dto.DeviceConfigDtoPage">
+        SELECT d.device_name,
+               d.file_type,
+               d.collect_url,
+               d.storage_url,
+               d.ip,
+               d.port,
+               d.channel,
+               d.entrust_code,
+               d.sample_code,
+               d.db_file_name,
+               ip.inspection_item,
+               ip.inspection_item_class,
+               if(ip.inspection_item_subclass is not null and ip.inspection_item_subclass != '',
+                  ip.inspection_item_subclass, ip.inspection_item)                            inspection_item_subclass,
+               ip.sample,
+               ddc.formula,
+               ddc.referx,
+               ddc.refery,
+               ddc.x,
+               ddc.y,
+               ddc.another_name,
+               ddc.matching_name,
+               ddc.id,
+               ip.id                                                                          structureItemParameterId ,
+               ddc.imported_parts,
+               ddc.imported_channel
+        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
+        where d.device_name = #{deviceName} and d.management_number = #{managementNumber}
+    </select>
 </mapper>

--
Gitblit v1.9.3