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