From fc166eb8941255fbf2f86ee6c5bc4beea5622d06 Mon Sep 17 00:00:00 2001 From: litao Date: Thu, 12 Jan 2023 19:38:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=A9=E6=B9=BF=E5=BA=A6=E6=95=B0=E9=87=87?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springblade/system/enums/DictBizEnum.java | 6 +- .../org/springblade/lims/Cache/LimsCache.java | 17 +++ lab-service/lab-lims/lib/param.dat | Bin 0 -> 190850 bytes lab-service/lab-lims/pom.xml | 5 + .../controller/LargeScreenController.java | 29 ++++ .../lims/demo/DataAcquisition.java | 134 ++++++++++++++++++ .../java/org/springblade/lims/demo/Demo.java | 110 ++++++++++++++ .../org/springblade/lims/demo/RunService.java | 19 +++ .../lims/service/impl/EntrustServiceImpl.java | 11 +- 9 files changed, 329 insertions(+), 2 deletions(-) create mode 100644 lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/Cache/LimsCache.java create mode 100644 lab-service/lab-lims/lib/param.dat create mode 100644 lab-service/lab-lims/src/main/java/org/springblade/lims/demo/DataAcquisition.java create mode 100644 lab-service/lab-lims/src/main/java/org/springblade/lims/demo/Demo.java create mode 100644 lab-service/lab-lims/src/main/java/org/springblade/lims/demo/RunService.java diff --git a/lab-service-api/lab-dict-api/src/main/java/org/springblade/system/enums/DictBizEnum.java b/lab-service-api/lab-dict-api/src/main/java/org/springblade/system/enums/DictBizEnum.java index cf6f35f..3493c0e 100644 --- a/lab-service-api/lab-dict-api/src/main/java/org/springblade/system/enums/DictBizEnum.java +++ b/lab-service-api/lab-dict-api/src/main/java/org/springblade/system/enums/DictBizEnum.java @@ -80,7 +80,11 @@ public enum DictBizEnum { /** * 考核方式 */ - ASSESSMENT_METHOD("assessment_method") + ASSESSMENT_METHOD("assessment_method"), + /** + * 数采 + */ + DATA_ACQUISITION("data_acquisition") ; diff --git a/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/Cache/LimsCache.java b/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/Cache/LimsCache.java new file mode 100644 index 0000000..5851120 --- /dev/null +++ b/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/Cache/LimsCache.java @@ -0,0 +1,17 @@ +package org.springblade.lims.Cache; + +import org.springblade.core.cache.utils.CacheUtil; + +import java.util.Map; + +import static org.springblade.core.cache.constant.CacheConstant.DEFAULT_CACHE; + +public class LimsCache { + + private static final String DATA_ACQUISITION_ID = "dataAcquisition:id:"; + + public static Map getDeptChildIds(String value) { + Map map = CacheUtil.get(DEFAULT_CACHE, DATA_ACQUISITION_ID, value, Map.class); + return map; + } +} diff --git a/lab-service/lab-lims/lib/param.dat b/lab-service/lab-lims/lib/param.dat new file mode 100644 index 0000000000000000000000000000000000000000..3b87b790041daf85f8f132cf09586bb5e3e690d5 GIT binary patch literal 190850 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 literal 0 HcmV?d00001 diff --git a/lab-service/lab-lims/pom.xml b/lab-service/lab-lims/pom.xml index 6280596..2c9d215 100644 --- a/lab-service/lab-lims/pom.xml +++ b/lab-service/lab-lims/pom.xml @@ -199,6 +199,11 @@ documents4j-transformer-msoffice-word 1.0.3 + + sdk + netdevice + 2.2.2 + diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/LargeScreenController.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/LargeScreenController.java index 02aefed..1bf18ad 100644 --- a/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/LargeScreenController.java +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/LargeScreenController.java @@ -6,11 +6,15 @@ import io.swagger.annotations.Api; import lombok.AllArgsConstructor; import org.openxmlformats.schemas.drawingml.x2006.chart.STErrBarType; import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.cache.utils.CacheUtil; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; +import org.springblade.lims.Cache.LimsCache; import org.springblade.lims.entry.*; import org.springblade.lims.service.*; +import org.springblade.system.cache.DictBizCache; +import org.springblade.system.enums.DictBizEnum; import org.springblade.system.feign.ISysClient; import org.springframework.web.bind.annotation.*; @@ -20,6 +24,9 @@ import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; +import static org.springblade.core.cache.constant.CacheConstant.DEFAULT_CACHE; +import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE; + /** * @author swj * @since 2022年6月1日19:49:10 @@ -553,4 +560,26 @@ public class LargeScreenController extends BladeController { return R.data(map); } + /** + * 温湿度 + */ + @GetMapping("/dataAcquisition") + public R dataAcquisition(String num) { +// String value = DictBizCache.getValue(DictBizEnum.DATA_ACQUISITION, num); +// System.out.println("value:" + value); + Map map = LimsCache.getDeptChildIds(num); +// Map map = CacheUtil.get(DEFAULT_CACHE, "dataAcquisition:id:", value, Map.class); +// Map map = CacheUtil.get(SYS_CACHE, "dataAcquisition:id:", 10051504 + "-" + 1, Map.class); + System.out.println("map:" + map); + if (map != null) { + float wd = (float) map.get("wd"); + float sd = (float) map.get("sd"); + map.put("wd", (int) (wd + 0.5)); + map.put("sd", (int) (sd + 0.5)); + } +// System.out.println("温度:" + map.get("wd")); +// System.out.println("湿度:" + map.get("sd")); + System.out.println("map:" + map); + return R.data(map); + } } diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/demo/DataAcquisition.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/demo/DataAcquisition.java new file mode 100644 index 0000000..12e716f --- /dev/null +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/demo/DataAcquisition.java @@ -0,0 +1,134 @@ +package org.springblade.lims.demo; + +import com.jnrsmcu.sdk.netdevice.*; +import org.springblade.core.cache.utils.CacheUtil; + +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.Map; + +import static org.springblade.core.cache.constant.CacheConstant.DEFAULT_CACHE; + +public class DataAcquisition implements Runnable { + + private RSServer rsServer; + + private static final String DATA_ACQUISITION_ID = "dataAcquisition:id:"; + + @Override + public void run() { + rsServer = RSServer.Initiate(2404);// 初始化 + + rsServer.addDataListener(new IDataListener() {// 添加监听 + @Override + public void receiveTimmingAck(TimmingAck data) {// 校时指令应答处理 + System.out.println("校时应答->设备编号:" + data.getDeviceId() + + "\t执行结果:" + data.getStatus()); + } + + @Override + public void receiveTelecontrolAck(TelecontrolAck data) {// 遥控指令应答处理 + System.out.println("遥控应答->设备编号:" + data.getDeviceId() + + "\t继电器编号:" + data.getRelayId() + "\t执行结果:" + + data.getStatus()); + } + + @Override + public void receiveStoreData(StoreData data) {// 已存储数据接收处理 + // 遍历节点数据。数据包括网络设备的数据以及各个节点数据。温湿度数据存放在节点数据中 + for (NodeData nd : data.getNodeList()) { + SimpleDateFormat sdf = new SimpleDateFormat( + "yy-MM-dd HH:mm:ss"); + String str = sdf.format(nd.getRecordTime()); + System.out.println("存储数据->设备地址:" + data.getDeviceId() + + "\t节点:" + nd.getNodeId() + "\t温度:" + nd.getTem() + + "\t湿度:" + nd.getHum() + "\t存储时间:" + str); + } + + } + + @Override + public void receiveRealtimeData(RealTimeData data) {// 实时数据接收处理 + // 遍历节点数据。数据包括网络设备的数据以及各个节点数据。温湿度数据存放在节点数据中 + for (NodeData nd : data.getNodeList()) { + System.out.println("实时数据->设备地址:" + data.getDeviceId() + + "\t节点:" + nd.getNodeId() + "\t温度:" + nd.getTem() + + "\t湿度:" + nd.getHum() + "\t经度:" + data.getLng() + + "\t纬度:" + data.getLat() + "\t坐标类型:" + + data.getCoordinateType() + "\t继电器状态:" + + data.getRelayStatus()); + Map map = new HashMap(); + map.put("wd", nd.getTem()); + map.put("sd", nd.getHum()); + CacheUtil.put(DEFAULT_CACHE, "dataAcquisition:id:", data.getDeviceId() + "-" + nd.getNodeId(), map); + Map map1 = CacheUtil.get(DEFAULT_CACHE, "dataAcquisition:id:", data.getDeviceId() + "-" + nd.getNodeId(), Map.class); + System.out.println(data.getDeviceId() + "-" + nd.getNodeId() + ":" + map1); + } + } + + @Override + public void receiveLoginData(LoginData data) {// 登录数据接收处理 + System.out.println("登录->设备地址:" + data.getDeviceId()); + + } + + @Override + public void receiveParamIds(ParamIdsData data) { + String str = "设备参数编号列表->设备编号:" + data.getDeviceId() + + "\t参数总数量:" + data.getTotalCount() + "\t本帧参数数量:" + + data.getCount() + "\r\n"; + for (int paramId : data.getPararmIdList())// 遍历设备中参数id编号 + { + str += paramId + ","; + } + System.out.println(str); + + } + + @Override + public void receiveParam(ParamData data) { + String str = "设备参数->设备编号:" + data.getDeviceId() + "\r\n"; + + for (ParamItem pararm : data.getParameterList()) { + str += "参数编号:" + + pararm.getParamId() + + "\t参数描述:" + + pararm.getDescription() + + "\t参数值:" + + (pararm.getValueDescription() == null ? pararm + .getValue() : pararm.getValueDescription() + .get(pararm.getValue())) + "\r\n"; + } + System.out.println(str); + + } + + @Override + public void receiveWriteParamAck(WriteParamAck data) { + String str = "下载设备参数->设备编号:" + data.getDeviceId() + "\t参数数量:" + + data.getCount() + "\t" + + (data.isSuccess() ? "下载成功" : "下载失败"); + System.out.println(str); + + } + + @Override + public void receiveTransDataAck(TransDataAck data) { + String str = "数据透传->设备编号:" + data.getDeviceId() + "\t响应结果:" + + data.getData() + "\r\n字节数:" + data.getTransDataLen(); + System.out.println(str); + + } + }); + + start(); + } + + public void start() { + try { + rsServer.start(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/demo/Demo.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/demo/Demo.java new file mode 100644 index 0000000..135507d --- /dev/null +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/demo/Demo.java @@ -0,0 +1,110 @@ +package org.springblade.lims.demo; + + +public class Demo { + +// public static void main(String[] args) throws IOException, InterruptedException { +// +// RSServer rsServer = RSServer.Initiate(2404);// 初始化 +// +// rsServer.addDataListener(new IDataListener() {// 添加监听 +// @Override +// public void receiveTimmingAck(TimmingAck data) {// 校时指令应答处理 +// System.out.println("校时应答->设备编号:" + data.getDeviceId() +// + "\t执行结果:" + data.getStatus()); +// } +// +// @Override +// public void receiveTelecontrolAck(TelecontrolAck data) {// 遥控指令应答处理 +// System.out.println("遥控应答->设备编号:" + data.getDeviceId() +// + "\t继电器编号:" + data.getRelayId() + "\t执行结果:" +// + data.getStatus()); +// } +// +// @Override +// public void receiveStoreData(StoreData data) {// 已存储数据接收处理 +// // 遍历节点数据。数据包括网络设备的数据以及各个节点数据。温湿度数据存放在节点数据中 +// for (NodeData nd : data.getNodeList()) { +// SimpleDateFormat sdf = new SimpleDateFormat( +// "yy-MM-dd HH:mm:ss"); +// String str = sdf.format(nd.getRecordTime()); +// System.out.println("存储数据->设备地址:" + data.getDeviceId() +// + "\t节点:" + nd.getNodeId() + "\t温度:" + nd.getTem() +// + "\t湿度:" + nd.getHum() + "\t存储时间:" + str); +// } +// +// } +// +// @Override +// public void receiveRealtimeData(RealTimeData data) {// 实时数据接收处理 +// // 遍历节点数据。数据包括网络设备的数据以及各个节点数据。温湿度数据存放在节点数据中 +// for (NodeData nd : data.getNodeList()) { +// System.out.println("实时数据->设备地址:" + data.getDeviceId() +// + "\t节点:" + nd.getNodeId() + "\t温度:" + nd.getTem() +// + "\t湿度:" + nd.getHum() + "\t经度:" + data.getLng() +// + "\t纬度:" + data.getLat() + "\t坐标类型:" +// + data.getCoordinateType() + "\t继电器状态:" +// + data.getRelayStatus()); +// } +// +// } +// +// @Override +// public void receiveLoginData(LoginData data) {// 登录数据接收处理 +// System.out.println("登录->设备地址:" + data.getDeviceId()); +// +// } +// +// @Override +// public void receiveParamIds(ParamIdsData data) { +// String str = "设备参数编号列表->设备编号:" + data.getDeviceId() +// + "\t参数总数量:" + data.getTotalCount() + "\t本帧参数数量:" +// + data.getCount() + "\r\n"; +// for (int paramId : data.getPararmIdList())// 遍历设备中参数id编号 +// { +// str += paramId + ","; +// } +// System.out.println(str); +// +// } +// +// @Override +// public void receiveParam(ParamData data) { +// String str = "设备参数->设备编号:" + data.getDeviceId() + "\r\n"; +// +// for (ParamItem pararm : data.getParameterList()) { +// str += "参数编号:" +// + pararm.getParamId() +// + "\t参数描述:" +// + pararm.getDescription() +// + "\t参数值:" +// + (pararm.getValueDescription() == null ? pararm +// .getValue() : pararm.getValueDescription() +// .get(pararm.getValue())) + "\r\n"; +// } +// System.out.println(str); +// +// } +// +// @Override +// public void receiveWriteParamAck(WriteParamAck data) { +// String str = "下载设备参数->设备编号:" + data.getDeviceId() + "\t参数数量:" +// + data.getCount() + "\t" +// + (data.isSuccess() ? "下载成功" : "下载失败"); +// System.out.println(str); +// +// } +// +// @Override +// public void receiveTransDataAck(TransDataAck data) { +// String str = "数据透传->设备编号:" + data.getDeviceId() + "\t响应结果:" +// + data.getData() + "\r\n字节数:" + data.getTransDataLen(); +// System.out.println(str); +// +// } +// }); +// rsServer.start(); +// +// } + +} diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/demo/RunService.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/demo/RunService.java new file mode 100644 index 0000000..cf4d3b0 --- /dev/null +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/demo/RunService.java @@ -0,0 +1,19 @@ +package org.springblade.lims.demo; + +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Component +public class RunService { + + @PostConstruct + public void run() { + DataAcquisition dataAcquisition = new DataAcquisition(); + + Thread thread = new Thread(dataAcquisition); + + thread.start(); + } + +} diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/EntrustServiceImpl.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/EntrustServiceImpl.java index 1780d70..e4879a1 100644 --- a/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/EntrustServiceImpl.java +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/EntrustServiceImpl.java @@ -370,6 +370,7 @@ public class EntrustServiceImpl extends BaseServiceImpl currTemplate = DictBizCache.getKey(DictBizEnum.PRINT_URL.getName(), "print10"); } List resultList = new ArrayList<>(); + System.out.println("examineList: " + examineList); // 根据检验判断有几个name for (int i = 1; i <= examineList.size(); i++) { Examine examine = examineList.get(i - 1); @@ -383,18 +384,21 @@ public class EntrustServiceImpl extends BaseServiceImpl // 根据检测检测项目拿检测结果 ExamineResult examineResult = getExamineResultByExamineId(examine.getId()); - + System.out.println("examineResult: " + examineResult); // 布鲁氏检测 if ("2".equals(examineWay.getInputMode()) || "6".equals(examineWay.getInputMode()) || "7".equals(examineWay.getInputMode())) { List list = JSON.parseArray(examineResult.getExamineDataArr(), ExamineTemplate2Excel.class); + System.out.println("list: " + list); if (list != null && list.size() > 0) { for (int i1 = 0; i1 < list.size(); i1++) { ExamineTemplate2Excel excel = list.get(i1); + System.out.println("excel: " + excel); ExamineResultVo resultVo = new ExamineResultVo(); LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); wrapper1.eq(Simple::getEntrustId, id); wrapper1.eq(Simple::getExperieNum, excel.getExperieNum()); Simple simple = simpleService.getOne(wrapper1); + System.out.println("simple: " + simple); if (simple != null) { resultVo.setOriginalNum(simple.getOriginalNum()); resultVo.setNum(simple.getExperieNum()); @@ -410,8 +414,10 @@ public class EntrustServiceImpl extends BaseServiceImpl // PCR检测 else if ("4".equals(examineWay.getInputMode())) { List list = JSON.parseArray(examineResult.getExamineDataArr(), PCR2Excel.class); + System.out.println("list: " + list); if (list != null && list.size() > 0) { for (PCR2Excel excel : list) { + System.out.println("excel: " + excel); ExamineResultVo resultVo = new ExamineResultVo(); LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); wrapper1.eq(Simple::getEntrustId, id); @@ -650,6 +656,8 @@ public class EntrustServiceImpl extends BaseServiceImpl // 1.生成坐标(给每一个数据单元赋予坐标) + System.out.println("resultList: " + resultList); + // 1.1.根据原始编号分组 // Map> collect = resultList.stream().collect(Collectors.groupingBy(ExamineResultVo::getRecessiveNum)); Map> collect = resultList.stream().collect(Collectors.groupingBy(ExamineResultVo::getNum)); @@ -740,6 +748,7 @@ public class EntrustServiceImpl extends BaseServiceImpl } // 将附表所需list加进最终map reportMainBody.put("list", tempResultList); + System.out.println("reportMainBody: " + tempResultList); // 打印相关流操作 dealAboutPrintStream(response, reportMainBody, entrust, currTemplate);