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