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 0000000..3b87b79 Binary files /dev/null and b/lab-service/lab-lims/lib/param.dat differ 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);