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