cnas-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java
@@ -8,12 +8,10 @@ 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; import com.yuanchu.mom.service.DeviceService; import com.yuanchu.mom.utils.DataAcquisition; import com.yuanchu.mom.utils.JackSonUtil; import com.yuanchu.mom.vo.Result; import io.swagger.annotations.Api; @@ -28,9 +26,11 @@ import java.io.File; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 设å¤(DeviceController)表æ§å¶å± @@ -167,18 +167,10 @@ @ValueClassify("设å¤") @ApiOperation("/æ°é-æ°æ®éé") @GetMapping("/dataCollection") public Result<?> text(HttpServletRequest request, @RequestParam("managementNumber") String managementNumber, public Result<?> dataAcquisition(HttpServletRequest request, @RequestParam("id") Integer id, @RequestParam("entrustCode") String entrustCode, @RequestParam("sampleCode") String sampleCode) { Device device = deviceService.getOne(Wrappers.<Device>lambdaQuery() .eq(Device::getManagementNumber, managementNumber)); if (ObjectUtils.isEmpty(device.getFileType()) || ObjectUtils.isEmpty(device.getCollectUrl())) { throw new ErrorException("æªç»è¯¥ï¼" + device.getDeviceName() + "设å¤é ç½®ééè·¯å¾ææä»¶åç¼ï¼"); } List<DataConfig> list = dataConfigService.list(Wrappers.<DataConfig>lambdaQuery() .eq(DataConfig::getDeviceId, device.getId()) .orderBy(false, false, DataConfig::getId)); return DataAcquisition.dataAcquisitionEntrance(request,list, device, entrustCode, sampleCode); return deviceService.dataAcquisition(request, id, entrustCode, sampleCode); } @ValueAuth @@ -200,26 +192,54 @@ @ValueClassify("设å¤") @ApiOperation(value = "ç»´æ¤æ°éé ç½®") @PostMapping("/saveDataAcquisitionConfiguration") public Result<?> saveDataAcquisitionConfiguration(@RequestBody DataConfigDto dataConfigList) { dataConfigService.saveOrUpdateBatch(dataConfigList.getDataConfigList()); 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(device.getFileType()); deviceService.updateById(device); } else { dataConfigService.saveOrUpdateBatch(dataConfigList.getDataConfigList()); } 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 = "æ¥è¯¢æ°éé ç½®") @GetMapping("/queryDataAcquisitionConfiguration") public Result<?> queryDataAcquisitionConfiguration(@RequestParam("deviceId") Integer deviceId, @RequestParam("insProductItem") String insProductItem) { List<DataConfig> list = dataConfigService.list(Wrappers.<DataConfig>lambdaQuery() public Result<?> queryDataAcquisitionConfiguration(@RequestParam("deviceId") Integer deviceId, @RequestParam("isDevice") Boolean isDevice, @RequestParam(value = "insProductItem", required = false) String insProductItem) { if (isDevice) { List<DataConfig> list = dataConfigService.list(Wrappers.<DataConfig>lambdaQuery() .eq(DataConfig::getDeviceId, deviceId) .eq(DataConfig::getInsProductItem, insProductItem)); return Result.success(list); return Result.success(list); } else { return Result.success(dataConfigService.selectDataConfigList(deviceId)); } } @ValueClassify("设å¤") @ApiOperation(value = "å 餿°éé ç½®") @DeleteMapping("/deleteDataAcquisitionConfiguration") public Result<?> deleteDataAcquisitionConfiguration(@RequestParam("id") Integer id) { dataConfigService.removeById(id); public Result<?> deleteDataAcquisitionConfiguration(@RequestParam("ids") String ids) { List<String> split = Arrays.asList(ids.split(",")); List<String> collect = split.stream().distinct().collect(Collectors.toList()); dataConfigService.removeBatchByIds(collect); return Result.success(); } } cnas-server/src/main/java/com/yuanchu/mom/dto/DataConfigDto.java
@@ -1,6 +1,7 @@ package com.yuanchu.mom.dto; import com.yuanchu.mom.pojo.DataConfig; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @@ -9,4 +10,18 @@ public class DataConfigDto { private List<DataConfig> dataConfigList; private Boolean isDevice; @ApiModelProperty("æä»¶åç¼") private String fileType; @ApiModelProperty("ééå°å") private String collectUrl; @ApiModelProperty("åå¨å°å") private String storageUrl; @ApiModelProperty("设å¤IP") private String ip; } cnas-server/src/main/java/com/yuanchu/mom/dto/DeviceConfigDtoPage.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,66 @@ package com.yuanchu.mom.dto; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.yuanchu.mom.annotation.ValueTableShow; import com.yuanchu.mom.common.OrderBy; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class DeviceConfigDtoPage extends OrderBy { @ValueTableShow(2) @ApiModelProperty(value = "设å¤åç§°") private String deviceName; @ApiModelProperty(value = "åå»ºç¨æ·") @TableField(fill = FieldFill.INSERT) private Integer createUser; @ValueTableShow(3) @ApiModelProperty(value = "æä»¶åç¼") private String fileType; @ValueTableShow(4) @ApiModelProperty(value = "ééå°å") private String collectUrl; @ValueTableShow(5) @ApiModelProperty(value = "åå¨å°å") private String storageUrl; @ValueTableShow(6) @ApiModelProperty(value = "IPå°å") private String ip; @ValueTableShow(7) @ApiModelProperty(value = "æ£éªé¡¹") private String inspectionItem; @ValueTableShow(8) @ApiModelProperty(value = "æ£éªé¡¹å项") private String inspectionItemSubClass; @ValueTableShow(9) @ApiModelProperty(value = "å ¬å¼") private String formula; @ValueTableShow(10) @ApiModelProperty(value = "åç §X") private String referx; @ValueTableShow(11) @ApiModelProperty(value = "X") private String x; @ValueTableShow(12) @ApiModelProperty(value = "åç §Y") private String refery; @ValueTableShow(13) @ApiModelProperty(value = "Y") private String y; private Integer id; } cnas-server/src/main/java/com/yuanchu/mom/mapper/DataConfigMapper.java
@@ -1,7 +1,10 @@ package com.yuanchu.mom.mapper; import com.yuanchu.mom.pojo.DataConfig; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.yuanchu.mom.dto.DeviceConfigDtoPage; import com.yuanchu.mom.pojo.DataConfig; import java.util.List; /** * <p> @@ -13,4 +16,5 @@ */ public interface DataConfigMapper extends BaseMapper<DataConfig> { List<DeviceConfigDtoPage> selectDataConfigList(Integer deviceId); } cnas-server/src/main/java/com/yuanchu/mom/mapper/DeviceMapper.java
@@ -32,5 +32,7 @@ List<Device> selectDevicePrincipal(); IPage<DeviceDto> selectDeviceParameterPage(Page page, @Param("ew") QueryWrapper<DeviceDto> queryWrappers); List<String> getInspectionItemSubclass(@Param("id") Integer id); } cnas-server/src/main/java/com/yuanchu/mom/pojo/Device.java
@@ -131,4 +131,7 @@ @ApiModelProperty("æ¯å¦ä¸ºæ°é设å¤") @TableField(exist = false) private Boolean isItADataAcquisitionDevice; @ApiModelProperty("设å¤IP") private String ip; } cnas-server/src/main/java/com/yuanchu/mom/service/DataConfigService.java
@@ -1,7 +1,10 @@ package com.yuanchu.mom.service; import com.yuanchu.mom.pojo.DataConfig; import com.baomidou.mybatisplus.extension.service.IService; import com.yuanchu.mom.dto.DeviceConfigDtoPage; import com.yuanchu.mom.pojo.DataConfig; import java.util.List; /** * <p> @@ -13,4 +16,5 @@ */ public interface DataConfigService extends IService<DataConfig> { List<DeviceConfigDtoPage> selectDataConfigList(Integer deviceId); } cnas-server/src/main/java/com/yuanchu/mom/service/DeviceService.java
@@ -3,9 +3,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.yuanchu.mom.dto.DeviceDto; import com.yuanchu.mom.dto.DeviceDto1; import com.yuanchu.mom.pojo.Device; import com.yuanchu.mom.vo.Result; import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; @@ -33,4 +34,6 @@ List<Device> selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass); Device selectDeviceByCode(String code); Result<?> dataAcquisition(HttpServletRequest request, Integer id, String entrustCode, String sampleCode); } cnas-server/src/main/java/com/yuanchu/mom/service/impl/DataConfigServiceImpl.java
@@ -1,10 +1,15 @@ package com.yuanchu.mom.service.impl; import com.yuanchu.mom.pojo.DataConfig; import com.yuanchu.mom.mapper.DataConfigMapper; import com.yuanchu.mom.service.DataConfigService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yuanchu.mom.common.GetLook; import com.yuanchu.mom.dto.DeviceConfigDtoPage; import com.yuanchu.mom.mapper.DataConfigMapper; import com.yuanchu.mom.pojo.DataConfig; import com.yuanchu.mom.service.DataConfigService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.util.List; /** * <p> @@ -15,6 +20,14 @@ * @since 2024-07-13 12:23:00 */ @Service @AllArgsConstructor public class DataConfigServiceImpl extends ServiceImpl<DataConfigMapper, DataConfig> implements DataConfigService { private GetLook getLook; private DataConfigMapper dataConfigMapper; @Override public List<DeviceConfigDtoPage> selectDataConfigList(Integer deviceId) { return dataConfigMapper.selectDataConfigList(deviceId); } } cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java
@@ -8,15 +8,22 @@ import com.yuanchu.mom.common.GetLook; import com.yuanchu.mom.common.PrintChina; import com.yuanchu.mom.dto.DeviceDto; import com.yuanchu.mom.exception.ErrorException; import com.yuanchu.mom.mapper.DeviceMapper; import com.yuanchu.mom.mapper.StructureItemParameterMapper; import com.yuanchu.mom.pojo.DataConfig; import com.yuanchu.mom.pojo.Device; import com.yuanchu.mom.pojo.StructureItemParameter; import com.yuanchu.mom.service.DataConfigService; import com.yuanchu.mom.service.DeviceService; import com.yuanchu.mom.utils.DataAcquisition; import com.yuanchu.mom.utils.QueryWrappers; import com.yuanchu.mom.vo.Result; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -34,6 +41,9 @@ private DeviceMapper deviceMapper; private StructureItemParameterMapper structureItemParameterMapper; @Autowired private DataConfigService dataConfigService; @Override public Map<String, Object> selectDeviceParameter(Page page, DeviceDto itemParameter) { @@ -123,5 +133,31 @@ public Device selectDeviceByCode(String code) { return deviceMapper.selectOne(Wrappers.<Device>lambdaQuery().eq(Device::getFactoryNo, code).last("limit 1")); } } @Override public Result<?> dataAcquisition(HttpServletRequest request, Integer id, String entrustCode, String sampleCode) { String ipAddress = request.getRemoteAddr(); // 鲿¢åç¯å°åå为IPv6 String ip = ipAddress.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipAddress; List<Device> device = baseMapper.selectList(Wrappers.<Device>lambdaQuery() .eq(Device::getIp, ip)); if (ObjectUtils.isEmpty(device)) { throw new ErrorException("æªç»è¯¥IPï¼" + ip + "é 置设å¤ï¼æ æ³è¿è¡æ°éï¼"); } List<String> inspectionItemSubclass = baseMapper.getInspectionItemSubclass(id); Map<String, String> hashMap = new HashMap<>(); device.forEach(i -> { if (ObjectUtils.isEmpty(i.getFileType()) || ObjectUtils.isEmpty(i.getCollectUrl())) { throw new ErrorException("æªç»è¯¥ï¼" + i.getDeviceName() + "设å¤é ç½®ééè·¯å¾ææä»¶åç¼ï¼"); } List<DataConfig> list = dataConfigService.list(Wrappers.<DataConfig>lambdaQuery() .eq(DataConfig::getDeviceId, i.getId()) .in(DataConfig::getInsProductItem, inspectionItemSubclass) .orderBy(false, false, DataConfig::getId)); hashMap.putAll(DataAcquisition.dataAcquisitionEntrance(request, list, i, entrustCode, sampleCode, ip)); }); String frequency = DataAcquisition.createFrequency(entrustCode, sampleCode); hashMap.put("frequency", frequency); return Result.success(hashMap); } } cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java
@@ -9,7 +9,6 @@ import com.yuanchu.mom.exception.ErrorException; import com.yuanchu.mom.pojo.DataConfig; import com.yuanchu.mom.pojo.Device; import com.yuanchu.mom.vo.Result; import javax.servlet.http.HttpServletRequest; import java.util.*; @@ -27,17 +26,16 @@ private static final String splitIdentifier = "@-@"; // èªå®ä¹å¯ä¸æ è¯åå²ç¬¦ public static final String frequency = "frequency"; /** * æ°éå ¥å£ * * @param request * @param dataConfig * @param device * @return */ public static Result<?> dataAcquisitionEntrance(HttpServletRequest request, List<DataConfig> dataConfig, Device device, String entrustCode, String sampleCode) { String ipAddress = request.getRemoteAddr(); // 鲿¢åç¯å°åå为IPv6 String ip = ipAddress.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipAddress; public static Map<String, String> dataAcquisitionEntrance(HttpServletRequest request, List<DataConfig> dataConfig, Device device, String entrustCode, String sampleCode, String ip) { String http = HTTP + ip + GETFILE + "?filePath=" + device.getCollectUrl() + "&fileExtension=" + device.getFileType(); String result = null; try { @@ -45,7 +43,7 @@ } catch (IORuntimeException e) { throw new ErrorException("æå¨çµèæªå®è£ ææªå¯å¨ï¼LIMSæä»¶ééå¨ï¼"); } JSONObject jsonObject = JSON.parseObject(result); JSONObject jsonObject = JSON.parseObject(result); if (Objects.equals(jsonObject.get("code"), 1)) { if (ObjectUtils.isEmpty(jsonObject.get("msg"))) { throw new ErrorException("æªæ¥è¯¢å°æ°æ®ï¼å¯è½æä»¶è·¯å¾é ç½®é误ï¼"); @@ -88,7 +86,7 @@ if (ObjectUtils.isNotEmpty(device.getStorageUrl())) { String s = HTTP + ip + MOVEFILE + "?startFilePath=" + device.getCollectUrl() + "&endFilePath=" + device.getStorageUrl(); String storageUrlResult = HttpUtil.get(s); JSONObject storageUrlResultJson = JSON.parseObject(storageUrlResult); JSONObject storageUrlResultJson = JSON.parseObject(storageUrlResult); if (Objects.equals(storageUrlResultJson.get("code"), 1)) { if (ObjectUtils.isEmpty(storageUrlResultJson.get("msg"))) { throw new ErrorException("åå¨å°åé误ï¼å¯è½æä»¶è·¯å¾é ç½®é误ï¼"); @@ -97,10 +95,31 @@ } } } return Result.success(map); return map; } } public static String createFrequency(String entrustCode, String sampleCode) { String key = frequency + ":" + entrustCode + ":" + sampleCode; boolean b = RedisUtil.hasKey(key); String frequencyValue; if (b) { long incr = RedisUtil.incr(key, 1); frequencyValue = String.valueOf(incr); } else { RedisUtil.set(key, 1); frequencyValue = "1"; } return frequencyValue; } /** * éè¦éè¿X,Yè½´å®ä½ * * @param data * @param dataConfig * @return */ 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()); @@ -109,12 +128,9 @@ dataConfig.forEach((k, v) -> { List<Object> list = new ArrayList<>(); for (int config = 0; config < v.size(); config++) { String referx = v.get(config).getReferx(); if(ObjectUtils.isEmpty(v.get(config).getX()) && ObjectUtils.isEmpty(v.get(config).getY())) { throw new ErrorException("æªç»" + k + "è¿è¡æ°éé ç½®xï¼yï¼"); } int x = Integer.parseInt(v.get(config).getX()); int y = Integer.parseInt(v.get(config).getY()); String referx = getRefer(v.get(config).getReferx()); int x = getXOrY(v.get(config).getX(), k, "X"); int y = getXOrY(v.get(config).getY(), k, "Y"); String key = ""; for (int i = 0; i < columnList.size(); i++) { if (columnList.get(i).equals(referx)) { @@ -124,16 +140,32 @@ JSONObject jsonObject1 = JSON.parseObject(dataList.get(y).toString()); Object o = jsonObject1.get(key); if (ObjectUtils.isNotEmpty(o)) { list.add(o); // å°æ°ç¹è¿ä¸ä½ double v1 = 0; try { v1 = Double.parseDouble(o.toString()); double v2 = v1 / 1000; list.add(v2); } catch (NumberFormatException e) { list.add(o); } } } // è¿è¡å ¬å¼è®¡ç® String resultValue = calculationFormula(list, v.get(0)); String resultValue = calculationFormula(list, v.get(0), k); map.put(k, resultValue); }); return map; } /** * éè¦éè¿X,Yè½´å®ä½ * * @param data * @param dataConfig * @return */ private static Map<String, String> analysisMdb(String data, Map<String, List<DataConfig>> dataConfig, String entrustCode, String sampleCode) { JSONObject jsonObject = JSON.parseObject(data); JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString()); @@ -142,8 +174,8 @@ dataConfig.forEach((k, v) -> { List<Object> list = new ArrayList<>(); for (int config = 0; config < v.size(); config++) { String referx = v.get(config).getReferx(); int x = Integer.parseInt(v.get(config).getX()); String referx = getRefer(v.get(config).getReferx()); int x = getXOrY(v.get(config).getX(), k, "X"); String key = ""; for (int i = 0; i < columnList.size(); i++) { if (columnList.get(i).equals(referx)) { @@ -161,16 +193,18 @@ } } // è¿è¡å ¬å¼è®¡ç® String resultValue = calculationFormula(list, v.get(0)); String resultValue = calculationFormula(list, v.get(0), k); map.put(k, resultValue); }); return map; } private static Pattern SPATTERN = Pattern.compile("([-+])?\\d+(\\.\\d+)?"); /** * è§£æStringæ°æ® * @param data ééå°çæä»¶å符串 * åªéXè½´ * * @param data ééå°çæä»¶å符串 * @param dataConfig ç¨æ·é 置好çx,yè½´å®ä½æ°æ®ä¸åç §ç© * @return */ @@ -179,15 +213,15 @@ dataConfig.forEach((k, v) -> { List<Object> list = new ArrayList<>(); for (int config = 0; config < v.size(); config++) { String referx = v.get(config).getReferx(); String xResult = null; 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 = Integer.parseInt(v.get(config).getX()); int x = getXOrY(v.get(config).getX(), k, "X"); if (aColumnY[i].contains(addDataWithSpaces)) { Matcher matcher = SPATTERN.matcher(aColumnY[i]); while (matcher.find()) { @@ -196,15 +230,15 @@ } } if (ObjectUtils.isNotEmpty(list1)) { xResult = list1.get(x); result = list1.get(x); } } if (ObjectUtils.isNotEmpty(xResult)) { list.add(xResult); if (ObjectUtils.isNotEmpty(result)) { list.add(result); } } // è¿è¡å ¬å¼è®¡ç® String resultValue = calculationFormula(list, v.get(0)); String resultValue = calculationFormula(list, v.get(0), k); map.put(k, resultValue); }); return map; @@ -212,185 +246,171 @@ /** * 仿件䏿ååºæ¥çæåï¼å¦ææå ¬å¼ï¼è¿è¡å ¬å¼è®¡ç®ï¼å¦ååå表第ä¸ä¸ªå¼ * @param list æååºçæ°å * * @param list æååºçæ°å * @param dataConfig åå¨å ¬å¼ç对象 * @return */ private static String calculationFormula(List<Object> list, DataConfig dataConfig) { private static String calculationFormula(List<Object> list, DataConfig dataConfig, String insProductItem) { if (list.size() == 0) { return null; } // 妿ä¸ä¸ºç©ºï¼è¿è¡å ¬å¼è®¡ç® if (ObjectUtils.isNotEmpty(dataConfig.getFormula())) { return null; // å¦åï¼æ²¡æå ¬å¼ä»£è¡¨ä¸éè¦è®¡ç®ï¼ç´æ¥æåListéé¢çæ°æ® // å¦åï¼æ²¡æå ¬å¼ä»£è¡¨ä¸éè¦è®¡ç®ï¼ç´æ¥æåListéé¢çæ°æ® } else { // è¿éåªä¼åå表第ä¸ä¸ªæ°æ® if (list.size() > 0) { if (list.size() > 1) { throw new ErrorException("æªç»ï¼" + insProductItem + " é ç½®å ¬å¼ï¼å¯æ¯å´ééå°äº" + list.size() + "个å¼ï¼åå«ä¸ºï¼" + list); } else { return list.get(0).toString(); } return null; } } /** * è§£æStringæ°æ® * @param data ééå°çæä»¶å符串 * * @param data ééå°çæä»¶å符串 * @param dataConfig ç¨æ·é 置好çx,yè½´å®ä½æ°æ®ä¸åç §ç© * @return */ private static Map<String, String> analysisTxt(String data, Map<String, List<DataConfig>> dataConfig) { Map<String, String> map = new HashMap<>(); dataConfig.forEach((k, v) -> { List<Object> list = new ArrayList<>(); for (int config = 0; config < v.size(); config++) { String referx = v.get(config).getReferx(); String refery = v.get(config).getRefery(); String xResult = null; String yResult = null; // éè¿\nå°å符串åå²ä¸ºè¡ String[] aColumnY = data.split("\n"); // 该循ç¯å¾åºç¨æ·é ç½®çyè½´ for (int i = 0; i < aColumnY.length; i++) { // å¾åºç¨æ·é ç½®çxè½´ String[] aLineX = aColumnY[i].split(","); for (int j = 0; j < aLineX.length; j++) { if (ObjectUtils.isNotEmpty(referx) && aLineX[j].contains(referx)) { int x = Integer.parseInt(v.get(config).getX()); try { xResult = aLineX[j + x]; } catch (Exception e) { throw new ErrorException("æ°éé ç½®Xè½´è¶ åºï¼"); } } if (ObjectUtils.isNotEmpty(refery) && aLineX[j].contains(refery)) { int y = Integer.parseInt(v.get(config).getY()); try { String[] split = aColumnY[i + y].split(","); yResult = split[split.length - 1]; } catch (Exception e) { throw new ErrorException("æ°éé ç½®Yè½´è¶ åºï¼"); } } } } if (ObjectUtils.isEmpty(xResult) && ObjectUtils.isEmpty(yResult)) { throw new ErrorException("åç §ç©ä¸ºï¼" + referx + "ä¸" + refery + "æªåå°å¼ï¼è¯·æ£æ¥æ°éé ç½®ï¼"); } list.add(yResult); list.add(xResult); } List<Object> list = analyzeData(data, v, k, ","); // è¿è¡å ¬å¼è®¡ç® String resultValue = calculationFormula(list, v.get(0)); String resultValue = calculationFormula(list, v.get(0), k); map.put(k, resultValue); }); return map; } /** * è§£æStringæ°æ® * @param data ééå°çæä»¶å符串 * @param data ééå°çæä»¶å符串 * @param dataConfig ç¨æ·é 置好çx,yè½´å®ä½æ°æ®ä¸åç §ç© * @return */ private static Map<String, String> analysisString(String data, Map<String, List<DataConfig>> dataConfig) { String processingDataAfterSpaces = data.replaceAll(" +", splitIdentifier).replaceAll("\r", ""); String processingDataAfterSpaces = data .replaceAll(" +", splitIdentifier) .replaceAll("\r", "") .replaceAll(" ", ""); Map<String, String> map = new HashMap<>(); dataConfig.forEach((k, v) -> { List<Object> list = new ArrayList<>(); for (int config = 0; config < v.size(); config++) { String referx = v.get(config).getReferx(); String xResult = null; // éè¿\nå°å符串åå²ä¸ºè¡ String[] aColumnY = processingDataAfterSpaces.split("\n"); // 该循ç¯å¾åºç¨æ·é ç½®çyè½´ for (int i = 0; i < aColumnY.length; i++) { // å¾åºç¨æ·é ç½®çxè½´ String[] aLineX = aColumnY[i].split(splitIdentifier); for (int j = 0; j < aLineX.length; j++) { if (ObjectUtils.isNotEmpty(referx) && aLineX[j].replaceAll(" ", "").contains(referx.replaceAll(" ", ""))) { int x = Integer.parseInt(v.get(config).getX()); try { xResult = aLineX[j + x]; } catch (Exception e) { throw new ErrorException("æ°éé ç½®Xè½´è¶ åºï¼"); } } } } if (ObjectUtils.isEmpty(xResult)) { throw new ErrorException("åç §ç©ä¸ºï¼" + referx + "æªåå°å¼ï¼è¯·æ£æ¥æ°éé ç½®ï¼"); } // ç»æå å«ç¹æ®å符ï¼éè¦å餿 if(xResult.contains("=")) { String[] split = xResult.split("="); list.add(split[split.length - 1]); } else if (xResult.contains(":")) { String[] split = xResult.split(":"); list.add(split[split.length - 1].replaceAll("%", "")); } else { list.add(xResult); } } List<Object> list = analyzeData(processingDataAfterSpaces, v, k, splitIdentifier); // è¿è¡å ¬å¼è®¡ç® String resultValue = calculationFormula(list, v.get(0)); String resultValue = calculationFormula(list, v.get(0), k); map.put(k, resultValue); }); return map; } /** * è§£æStringæ°æ® * @param data ééå°çæä»¶å符串 * åXï¼Y两个å®ä½ * * @param data ééå°çæä»¶å符串 * @param dataConfig ç¨æ·é 置好çx,yè½´å®ä½æ°æ®ä¸åç §ç© * @return */ public static Map<String, String> analysisList(String data, Map<String, List<DataConfig>> dataConfig) { Map<String, String> map = new HashMap<>(); dataConfig.forEach((k, v) -> { List<Object> list = new ArrayList<>(); for (int config = 0; config < v.size(); config++) { String referx = v.get(config).getReferx(); String refery = v.get(config).getRefery(); String xResult = null; String yResult = null; // éè¿\nå°å符串åå²ä¸ºè¡ String[] aColumnY = data.split("\n"); // 该循ç¯å¾åºç¨æ·é ç½®çyè½´ for (int i = 0; i < aColumnY.length; i++) { // å¾åºç¨æ·é ç½®çxè½´ String[] aLineX = aColumnY[i].split(splitIdentifier); for (int j = 0; j < aLineX.length; j++) { if (ObjectUtils.isNotEmpty(referx) && referx.equals(aLineX[j])) { int x = Integer.parseInt(v.get(config).getX()); try { xResult = aLineX[j + x]; } catch (Exception e) { throw new ErrorException("æ°éé ç½®Xè½´è¶ åºï¼"); // ç¨æ·å¯è½ç»ä¸ä¸ªå项ç®é ç½®äºå¤ä¸ªé ç½®ï¼å³ä¸ä¸ªé¡¹ç®åå¤ä¸ªå¼ï¼æä»¥éè¦å¾ªç¯ List<Object> list = analyzeData(data, v, k, splitIdentifier); // è¿è¡å ¬å¼è®¡ç® String resultValue = calculationFormula(list, v.get(0), k); map.put(k, resultValue); }); return map; } // ç±äºå¨æ¹æ³ä¸ä¼å¤§éçå¤æï¼æä»¥åä¸ä¸ªæ¹æ³ private static int getXOrY(String value, String k, String tips) { try { return Integer.parseInt(value); } catch (NumberFormatException e) { throw new ErrorException(k + "ï¼æªé ç½®" + tips + "åæ è½´çå¼ï¼"); } } // 鲿¢åç §ç©ä¸ºç©ºæ¥éï¼è¿è¡å¤æå¦æä¸ºç©ºèµå¼ç©ºå符 private static String getRefer(String refer) { return ObjectUtils.isNotEmpty(refer) ? refer.replaceAll(" ", "") : ""; } 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()); // æç»ç»æ String result = null; // éè¿\nå°å符串åå²ä¸ºè¡ String[] aColumnY = data.replaceAll(" ", "").split("\n"); Integer end = null; // ééæ°æ®ï¼Yè½´ for (int i = 0; i < aColumnY.length; i++) { // åxçå¼ï¼é²æ¢æ¥é int x = getXOrY(v.get(config).getX(), k, "X"); // 妿Yä¸Xç¨æ·é½é ç½®äºåæ§è¡ if (ObjectUtils.isNotEmpty(refery)) { // åYåæ å¼ int y = getXOrY(v.get(config).getY(), k, "Y"); // ç¼åYçç»æå¼ if (ObjectUtils.isEmpty(end) && aColumnY[i].contains(refery)) { end = i + y; } // 夿æ¯å¦å¨åç §ç©ä¸ºèµ·å°ï¼Yåæ å¼ä¸ºæç»èå´ if (ObjectUtils.isNotEmpty(end) && i <= end) { String[] aLineX = aColumnY[i].split(split); for (int j = 0; j < aLineX.length; j++) { if (aLineX[j].contains(referx)) { try { result = aLineX[j + x]; } catch (Exception e) { throw new ErrorException(k + "ï¼Xè½´å®ä½è¶ åºï¼"); } break; } } if (ObjectUtils.isNotEmpty(refery) && refery.equals(aLineX[j])) { int y = Integer.parseInt(v.get(config).getY()); String aColumnData = aColumnY[i + y]; // è·åå°ç¬¬Yè¡çæ°æ® } // 妿åªé ç½®äºXï¼åæ§è¡ä¸é¢ç代ç } else if (aColumnY[i].contains(referx) && ObjectUtils.isEmpty(refery)) { String[] aLineX = aColumnY[i].split(split); for (int j = 0; j < aLineX.length; j++) { if (aLineX[j].contains(referx)) { try { yResult = aColumnData.split(splitIdentifier)[j]; result = aLineX[j + x]; } catch (Exception e) { throw new ErrorException("æ°éé ç½®Yè½´è¶ åºï¼"); throw new ErrorException(k + "ï¼Xè½´å®ä½è¶ åºï¼"); } } } } if (ObjectUtils.isEmpty(xResult) || ObjectUtils.isEmpty(yResult)) { throw new ErrorException("Xè½´æYè½´æªåå°å¼ï¼è¯·æ£æ¥æ°éé ç½®ï¼"); } if(xResult.equals(yResult)) { list.add(xResult); } else { throw new ErrorException("Xè½´ä¸Yè½´åå¾çæ°æ®ä¸ç¸åï¼è¯·æ£æ¥æ°éé ç½®ï¼"); } } // è¿è¡å ¬å¼è®¡ç® String resultValue = calculationFormula(list, v.get(0)); map.put(k, resultValue); }); return map; // 鲿¢è®¡ç®å ¬å¼çæ¶ååºç°ï¼[null] è¿ç§æ°æ® if (ObjectUtils.isNotEmpty(result)) { String formatProcessing = getFormatProcessing(result); list.add(formatProcessing); } } return list; } public static String getFormatProcessing(String value) { value = value.replaceAll("%", ""); if(value.contains("=")){ String[] split = value.split("="); return split[split.length - 1]; } else if(value.contains(":")) { String[] split = value.split(":"); return split[split.length - 1]; } else { return value; } } } cnas-server/src/main/resources/mapper/DataConfigMapper.xml
@@ -12,4 +12,27 @@ <result column="y" property="y" /> </resultMap> <select id="selectDataConfigList" resultType="com.yuanchu.mom.dto.DeviceConfigDtoPage"> SELECT d.device_name, d.file_type, d.collect_url, d.storage_url, d.ip, 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, ddc.formula, ddc.referx, ddc.refery, ddc.x, ddc.y, ddc.id 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 if(ip.inspection_item_subclass is not null and ip.inspection_item_subclass != '', ip.inspection_item_subclass, ip.inspection_item) = ddc.ins_product_item where d.id = #{deviceId} </select> </mapper> cnas-server/src/main/resources/mapper/DeviceMapper.xml
@@ -117,4 +117,9 @@ ${ew.customSqlSegment} </if> </select> <select id="getInspectionItemSubclass" resultType="java.lang.String"> SELECT ip.inspection_item_subclass FROM ins_product ip where ip.ins_sample_id = #{id} </select> </mapper> inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java
@@ -15,10 +15,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.HashMap; @@ -111,8 +108,8 @@ @ValueClassify("æ£éªä»»å¡") @ApiOperation(value = "æ£éªä»»å¡æäº¤") @PostMapping("/submitPlan") public Result<?> submitPlan(Integer orderId, String laboratory, Integer verifyUser) { int num = insOrderPlanService.submitPlan(orderId, laboratory, verifyUser); public Result<?> submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode, String sampleCode) { int num = insOrderPlanService.submitPlan(orderId, laboratory, verifyUser, entrustCode, sampleCode); return num == 1 ? Result.success() : Result.fail("æäº¤å¤±è´¥ï¼é¨å项ç®è¿æªè¿è¡æ£éª"); } inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderPlanService.java
@@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yuanchu.mom.dto.InsOrderPlanDTO; import com.yuanchu.mom.dto.InsProductDto; import com.yuanchu.mom.pojo.InsOrderFile; import com.yuanchu.mom.pojo.InsProduct; import org.springframework.web.multipart.MultipartFile; @@ -28,7 +27,7 @@ int verifyPlan(Integer orderId, String laboratory, Integer type, String tell); int submitPlan(Integer orderId, String laboratory, Integer verifyUser); int submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode, String sampleCode); List<InsProduct> getInsProduct(Integer id, Integer type, String laboratory); inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -33,6 +33,7 @@ import com.yuanchu.mom.utils.JackSonUtil; import com.yuanchu.mom.utils.MatrixToImageWriter; import com.yuanchu.mom.utils.QueryWrappers; import com.yuanchu.mom.utils.RedisUtil; import com.yuanchu.mom.vo.InsOrderPlanTaskSwitchVo; import com.yuanchu.mom.vo.InsOrderPlanVO; import com.yuanchu.mom.vo.ProductVo; @@ -3387,7 +3388,7 @@ } @Override public int submitPlan(Integer orderId, String laboratory, Integer verifyUser) { public int submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode, String sampleCode) { List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId)); List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList()); List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() @@ -3476,6 +3477,9 @@ } return null; }); // å 餿°éé鿬¡æ° String key = "frequency" + ":" + entrustCode + ":" + sampleCode; RedisUtil.del(key); return 1; }