加固代码提交

This commit is contained in:
2025-02-18 14:58:52 +08:00
parent 0c012152bb
commit 8cef3c8358
18 changed files with 950 additions and 515 deletions

View File

@@ -1,12 +1,21 @@
package com.njcn.gather.detection.controller; package com.njcn.gather.detection.controller;
import com.alibaba.fastjson.JSON;
import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.gather.detection.handler.SocketDevResponseService;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
import com.njcn.gather.detection.pojo.param.PreDetectionParam; import com.njcn.gather.detection.pojo.param.PreDetectionParam;
import com.njcn.gather.detection.pojo.vo.SocketMsg;
import com.njcn.gather.detection.service.PreDetectionService; import com.njcn.gather.detection.service.PreDetectionService;
import com.njcn.gather.detection.service.impl.DetectionServiceImpl; import com.njcn.gather.detection.service.impl.DetectionServiceImpl;
import com.njcn.gather.detection.util.socket.MsgUtil; import com.njcn.gather.detection.util.socket.MsgUtil;
import com.njcn.gather.detection.util.socket.SocketManager;
import com.njcn.gather.detection.util.socket.XiNumberManager;
import com.njcn.gather.detection.util.socket.cilent.NettyClient;
import com.njcn.gather.detection.util.socket.cilent.NettyDevClientHandler;
import com.njcn.gather.detection.util.socket.cilent.NettySourceClientHandler;
import com.njcn.gather.device.pojo.vo.PreDetection; import com.njcn.gather.device.pojo.vo.PreDetection;
import com.njcn.gather.device.service.IPqDevService; import com.njcn.gather.device.service.IPqDevService;
import com.njcn.gather.script.pojo.param.PqScriptIssueParam; import com.njcn.gather.script.pojo.param.PqScriptIssueParam;
@@ -22,6 +31,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -42,6 +52,8 @@ public class PreDetectionController extends BaseController {
private final IPqDevService iPqDevService; private final IPqDevService iPqDevService;
private final SocketDevResponseService socketDevResponseService;
@@ -113,104 +125,24 @@ public class PreDetectionController extends BaseController {
String methodDescribe = getMethodDescribe("startTest"); String methodDescribe = getMethodDescribe("startTest");
//preDetectionService.startTest(param); //preDetectionService.startTest(param);
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:49:50.815\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:49:50.815\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001100\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:49:50.815\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001100\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:49:53.815\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:49:53.815\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:49:53.815\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:49:53.815\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:49:56.815\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:49:56.815\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:49:56.815\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:49:56.815\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:49:59.815\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001100\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:49:59.815\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:49:59.815\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:49:59.815\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:02.8\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:02.8\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:02.8\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:02.8\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:03\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:03\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:03\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:03\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:06\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001100\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:06\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001100\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:06\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:06\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001100\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:09\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:09\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:09\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:09\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:12\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:12\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:12\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:12\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:15\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001100\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:15\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001100\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:15\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:15\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001100\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:18\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:18\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:18\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:18\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:21\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:21\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:21\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:21\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:24\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:24\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:24\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001100\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:24\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:27\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:27\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:27\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:27\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:30\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:30\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:30\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:30\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:33\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:33\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:33\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:33\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:36\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:36\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:36\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:36\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:39\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:39\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:39\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:39\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:42.001\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:42.001\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:42.001\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:42.001\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:45.001\",\"ID\":\"172.17.102.204_1\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:45.001\",\"ID\":\"172.17.102.204_2\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:45.001\",\"ID\":\"172.17.102.204_3\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001000\"}}],\"SqlDataHarm\":[]}");
MsgUtil.socketDataMsg("{\"Time\":\"2025-01-15T15:50:45.001\",\"ID\":\"172.17.102.204_4\",\"result\":false,\"SqlData\":[{\"type\":\"real\",\"desc\":\"FREQ\",\"list\":{\"A\":null,\"B\":null,\"C\":null,\"T\":\"50.001100\"}}],\"SqlDataHarm\":[]}");
PqScriptIssueParam issueParam = new PqScriptIssueParam();
issueParam.setPlanId(param.getPlanId());
issueParam.setSourceId(param.getSourceId());
issueParam.setDevIds(param.getDevIds());
issueParam.setScriptId("a303b2224845fcc6f60198b8ca23dca9");
//issueParam.setIsPhaseSequence(false);
SourceIssue sourceIssues = pqScriptDtlsService.listSourceIssue(issueParam).get(0);
List<PreDetection> pqDevList = iPqDevService.getDevInfo(param.getDevIds()); List<PreDetection> pqDevList = iPqDevService.getDevInfo(param.getDevIds());
Map<String, String> devIdMapComm = pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId)); XiNumberManager.xiDevList = pqDevList;
String s = param.getUserPageId() + "_Dev";
SocketMsg<String> socketMsg = new SocketMsg<>();
socketMsg.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue());
socketMsg.setOperateCode(SourceOperateCodeEnum.DATA_CHNFACTOR$01.getValue());
PreDetection preDetection = pqDevList.get(0);
Map<String,Object> map = new HashMap<>();
map.put("devIP",preDetection.getDevIP());
map.put("chnNum",preDetection.getDevChns());
socketMsg.setData(JSON.toJSONString(map));
NettyClient.socketClient("192.168.1.138", 61000, param, JSON.toJSONString(socketMsg), new NettyDevClientHandler(param, socketDevResponseService));
//detectionServiceImpl.processing(devDataList,param,devIdMapComm,sourceIssues, DictDataEnum.AT_WILL_VALUE);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
} }

View File

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.njcn.gather.detection.pojo.dto.DevXiNumData; import com.njcn.gather.detection.pojo.dto.DevXiNumData;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
import com.njcn.gather.detection.pojo.enums.SourceResponseCodeEnum; import com.njcn.gather.detection.pojo.enums.SourceResponseCodeEnum;
import com.njcn.gather.detection.pojo.param.DevPhaseSequenceParam;
import com.njcn.gather.detection.pojo.param.PreDetectionParam; import com.njcn.gather.detection.pojo.param.PreDetectionParam;
import com.njcn.gather.detection.pojo.po.DevData; import com.njcn.gather.detection.pojo.po.DevData;
import com.njcn.gather.detection.pojo.po.SourceCompareDev; import com.njcn.gather.detection.pojo.po.SourceCompareDev;
@@ -142,12 +143,13 @@ public class SocketDevResponseService {
case QUITE: case QUITE:
quitDeal(socketDataMsg, param, msg); quitDeal(socketDataMsg, param, msg);
break; break;
case YXT:
break;
} }
} }
//用于存储所有测点的试试数据
private final List<DevData> realDataXiList = new ArrayList<>();
/** /**
* 系数校验 * 系数校验
@@ -161,6 +163,39 @@ public class SocketDevResponseService {
switch (Objects.requireNonNull(sourceOperateCodeEnum)) { switch (Objects.requireNonNull(sourceOperateCodeEnum)) {
case DATA_CHNFACTOR$01: case DATA_CHNFACTOR$01:
//获取系数 //获取系数
switch (Objects.requireNonNull(dictDataEnumByCode)) {
case SUCCESS:
if (CollUtil.isNotEmpty(XiNumberManager.xiDevList)) {
List<DevXiNumData.GF> gfList = JSON.parseArray(socketDataMsg.getData(), DevXiNumData.GF.class);
DevXiNumData devXiNumData = new DevXiNumData();
devXiNumData.setDevIP(XiNumberManager.xiDevList.get(0).getDevIP());
devXiNumData.setGf(gfList);
XiNumberManager.devXiNumDataMap.put(XiNumberManager.xiDevList.get(0).getDevIP(), devXiNumData);
XiNumberManager.xiDevList.remove(0);
if (CollUtil.isEmpty(XiNumberManager.xiDevList)) {
xiSocket.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue());
xiSocket.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
xiSocket.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(0)));
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, JSON.toJSONString(xiSocket));
}
}
break;
case UNPROCESSED_BUSINESS:
break;
case NORMAL_RESPONSE:
break;
case DATA_RESOLVE:
break;
case COMMUNICATION_ERR:
break;
default:
break;
}
break; break;
case DATA_CHNFACTOR$02: case DATA_CHNFACTOR$02:
@@ -183,7 +218,6 @@ public class SocketDevResponseService {
//为空则认为所有装置都已经下发,开始进行小电压的申请,步骤进行+1 //为空则认为所有装置都已经下发,开始进行小电压的申请,步骤进行+1
XiNumberManager.stepNumber = 1; XiNumberManager.stepNumber = 1;
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.big_end.getValue(), XiNumberManager.devParameterList.get(0)); sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.big_end.getValue(), XiNumberManager.devParameterList.get(0));
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_start.getValue(), XiNumberManager.devParameterList.get(1)); sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_start.getValue(), XiNumberManager.devParameterList.get(1));
System.out.println("第一步结束开始配置小电压电流参数下发给源----------------------"); System.out.println("第一步结束开始配置小电压电流参数下发给源----------------------");
@@ -200,7 +234,7 @@ public class SocketDevResponseService {
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, JSON.toJSONString(xiSocket)); SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, JSON.toJSONString(xiSocket));
XiNumberManager.stepNumber = 2; XiNumberManager.stepNumber = 2;
} }
realDataXiList.clear(); FormalTestManager.realDataXiList.clear();
successComm.clear(); successComm.clear();
XiNumberManager.devXiList.clear(); XiNumberManager.devXiList.clear();
} }
@@ -222,7 +256,7 @@ public class SocketDevResponseService {
case COMMUNICATION_ERR: case COMMUNICATION_ERR:
break; break;
default: default:
break;
} }
break; break;
case DEV_DATA_REQUEST_02: case DEV_DATA_REQUEST_02:
@@ -232,195 +266,19 @@ public class SocketDevResponseService {
if (ObjectUtil.isNotNull(dictDataEnumByCode)) { if (ObjectUtil.isNotNull(dictDataEnumByCode)) {
switch (dictDataEnumByCode) { switch (dictDataEnumByCode) {
case SUCCESS: case SUCCESS:
realDataXiList.add(devData); FormalTestManager.realDataXiList.add(devData);
successComm.add(devData.getId()); successComm.add(devData.getId());
System.out.println(successComm.size() + " ==" + FormalTestManager.monitorIdListComm.size() + "FormalTestManager.realDataXiList:" + FormalTestManager.realDataXiList.size() + "当前步骤" + XiNumberManager.stepNumber);
System.out.println(successComm.size() + " ==" + FormalTestManager.monitorIdListComm.size() + "realDataXiList:" + realDataXiList.size() + "当前步骤" + XiNumberManager.stepNumber);
if (successComm.size() == FormalTestManager.monitorIdListComm.size()) { if (successComm.size() == FormalTestManager.monitorIdListComm.size()) {
System.out.println("从装置中已经完成获取原始数据,准备开始计算----------------------"); processData(param,xiSocket);
//获取数据流程结束,先把所有数据存到内存中
Map<String, List<DevData>> realDataXiMap = realDataXiList.stream().collect(Collectors.groupingBy(it -> it.getId().split(splitTag)[0]));
realDataXiMap.forEach((devIp, dataList) -> {
AtomicBoolean xiFlag = new AtomicBoolean(true);
XiNumberManager.devXiList.add(devIp);
Map<String, List<DevData>> monitorMap = dataList.stream().collect(Collectors.groupingBy(DevData::getId));
List<DevXiNumData.GF> gf = new ArrayList<>();
monitorMap.forEach((monitorId, list) -> {
DevXiNumData.F F = new DevXiNumData.F();
CoefficientVO.DevParameter devParameter;
CoefficientVO coefficientVO = new CoefficientVO();
if (XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 2) {
devParameter = XiNumberManager.devParameterList.get(0);
coefficientVO.setType("big");
} else {
devParameter = XiNumberManager.devParameterList.get(1);
coefficientVO.setType("small");
}
String[] splitStr = monitorId.split(splitTag);
coefficientVO.setMonitorNum(splitStr[1]);
coefficientVO.setDevName(FormalTestManager.devNameMapComm.get(splitStr[0]));
coefficientVO.setDesc((XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 1) ? "系数下装" : "系数校准");
assemblyEntity(list, F, coefficientVO, devParameter);
if (Objects.nonNull(coefficientVO.getResultFlag()) && coefficientVO.getResultFlag() == 0) {
xiFlag.set(false);
}
DevXiNumData.GF gfItem = new DevXiNumData.GF();
gfItem.setUMonitorPoint(Integer.parseInt(splitStr[1]) - 1);
gfItem.setF(F);
gf.add(gfItem);
//表格数据
WebSocketVO<Object> webSocketVO = new WebSocketVO<>();
webSocketVO.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue());
webSocketVO.setOperateCode(SourceOperateCodeEnum.DATA_CHNFACTOR$02.getValue());
webSocketVO.setData(coefficientVO);
WebServiceManager.sendMessage(param.getUserPageId(), webSocketVO);
});
DevXiNumData devXiNumData = new DevXiNumData();
devXiNumData.setChnNum(0);
devXiNumData.setDevIP(devIp);
devXiNumData.setGf(gf);
if (xiFlag.get()) {
devXiNumData.setResultFlag(1);
} else {
devXiNumData.setResultFlag(0);
}
if (XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 2) {
XiNumberManager.devXiNumDataMap.put(devIp, devXiNumData);
} else if (XiNumberManager.stepNumber == 1 || XiNumberManager.stepNumber == 3) {
XiNumberManager.smallDevXiNumDataMap.put(devIp, devXiNumData);
}
});
if (XiNumberManager.stepNumber == 0) {
//开始发送修改系数命令
xiSocket.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue());
xiSocket.setOperateCode(SourceOperateCodeEnum.DATA_CHNFACTOR$02.getValue());
xiSocket.setData(JSON.toJSONString(XiNumberManager.devXiNumDataMap.get(XiNumberManager.devXiList.get(0))));
SocketManager.sendMsg(param.getUserPageId() + handlerStr, JSON.toJSONString(xiSocket));
} else if (XiNumberManager.stepNumber == 1) {
System.out.println("进入小电压步骤》》》》》》》》》》》》》》》》》》》》》》》》");
//判断小电压是否系数超过大电压10%
double limit = 0.1;
XiNumberManager.smallDevXiNumDataMap.forEach((devIp, devXiNumDataSmall) -> {
//定义一个标识: false:表示小电流系数和大电流系数
boolean flag = true;
DevXiNumData devXiNumDataBig = XiNumberManager.devXiNumDataMap.get(devIp);
Map<Integer, DevXiNumData.GF> gfMapSmall = devXiNumDataSmall.getGf().stream().collect(Collectors.toMap(DevXiNumData.GF::getUMonitorPoint, Function.identity()));
for (DevXiNumData.GF bigGf : devXiNumDataBig.getGf()) {
DevXiNumData.F smallF = gfMapSmall.get(bigGf.getUMonitorPoint()).getF();
DevXiNumData.F bigF = bigGf.getF();
boolean ia = isWithinTenPercent(smallF.getIa_gain(), bigF.getIa_gain(), limit);
boolean ib = isWithinTenPercent(smallF.getIb_gain(), bigF.getIb_gain(), limit);
boolean ic = isWithinTenPercent(smallF.getIc_gain(), bigF.getIc_gain(), limit);
boolean va = isWithinTenPercent(smallF.getUa_gain(), bigF.getUa_gain(), limit);
boolean vb = isWithinTenPercent(smallF.getUb_gain(), bigF.getUb_gain(), limit);
boolean vc = isWithinTenPercent(smallF.getUc_gain(), bigF.getUc_gain(), limit);
if (ia && ib && ic && va && vb && vc) {
} else {
flag = false;
//继续下发一轮
if (!ia) {
Integer newIa = (smallF.getIa_gain() + bigF.getIa_gain()) / 2;
bigF.setIa_gain(newIa);
}
if (!ib) {
Integer newIb = (smallF.getIb_gain() + bigF.getIb_gain()) / 2;
bigF.setIb_gain(newIb);
}
if (!ic) {
Integer newIc = (smallF.getIc_gain() + bigF.getIc_gain()) / 2;
bigF.setIc_gain(newIc);
}
if (!va) {
Integer newVa = (smallF.getUa_gain() + bigF.getUa_gain()) / 2;
bigF.setUa_gain(newVa);
}
if (!vb) {
Integer newUb = (smallF.getUb_gain() + bigF.getUb_gain()) / 2;
bigF.setUb_gain(newUb);
}
if (!vc) {
Integer newUc = (smallF.getUc_gain() + bigF.getUc_gain()) / 2;
bigF.setUc_gain(newUc);
}
}
}
if (flag) {
//如果系数没问题则不需要
XiNumberManager.devXiList.removeIf(it -> it.equals(devIp));
}
});
//如果差距超过10%则再次下发系数
if (CollUtil.isNotEmpty(XiNumberManager.devXiList)) {
xiSocket.setOperateCode(SourceOperateCodeEnum.DATA_CHNFACTOR$02.getValue());
xiSocket.setData(JSON.toJSONString(XiNumberManager.devXiNumDataMap.get(XiNumberManager.devXiList.get(0))));
SocketManager.sendMsg(param.getUserPageId() + handlerStr, JSON.toJSONString(xiSocket));
} else {
//存在小电压系数在误差范围内情况,直接结束。
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_end.getValue(), XiNumberManager.devParameterList.get(1));
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.big_comp_start.getValue(), XiNumberManager.devParameterList.get(0));
//小电流系数下发完毕;开始重新测试一次大电压
xiSocket.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
xiSocket.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(0)));
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, JSON.toJSONString(xiSocket));
XiNumberManager.stepNumber = 2;
realDataXiList.clear();
successComm.clear();
}
} else if (XiNumberManager.stepNumber == 2) {
//大电压处理
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.big_comp_end.getValue(), XiNumberManager.devParameterList.get(0));
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_comp_start.getValue(), XiNumberManager.devParameterList.get(1));
xiSocket.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
xiSocket.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(1)));
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, JSON.toJSONString(xiSocket));
XiNumberManager.stepNumber = 3;
realDataXiList.clear();
successComm.clear();
} else if (XiNumberManager.stepNumber == 3) {
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_comp_end.getValue(), XiNumberManager.devParameterList.get(1));
System.out.println("-------------------------已经全部结束----------------------");
CnSocketUtil.quitSend(param);
//修改设备表Factor_Check_Result字段
XiNumberManager.devXiNumDataMap.forEach((key, val) -> {
DevXiNumData small = XiNumberManager.smallDevXiNumDataMap.get(key);
LambdaUpdateWrapper<PqDev> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(PqDev::getId, FormalTestManager.devIdMapComm.get(key));
if (val.getResultFlag() == 0 || small.getResultFlag() == 0) {
updateWrapper.set(PqDev::getFactorCheckResult, 0);
} else {
updateWrapper.set(PqDev::getFactorCheckResult, 1);
}
iPqDevService.update(updateWrapper);
updateWrapper.clear();
});
}
} }
break; break;
case UNPROCESSED_BUSINESS: case UNPROCESSED_BUSINESS:
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
break; break;
case NORMAL_RESPONSE: case NORMAL_RESPONSE:
realDataXiList.add(devData); FormalTestManager.realDataXiList.add(devData);
break; break;
default: default:
xiSocket.setRequestId(socketDataMsg.getRequestId()); xiSocket.setRequestId(socketDataMsg.getRequestId());
@@ -440,9 +298,224 @@ public class SocketDevResponseService {
} }
private void processData(PreDetectionParam param,SocketMsg<String> xiSocket) {
System.out.println(XiNumberManager.stepNumber+"从装置中已经完成获取测试数据,准备开始计算----------------------");
Map<String, List<DevData>> realDataXiMap = FormalTestManager.realDataXiList.stream().collect(Collectors.groupingBy(it -> it.getId().split(splitTag)[0]));
realDataXiMap.forEach((devIp, dataList) -> processDeviceData(devIp, dataList,param));
handleStep(XiNumberManager.stepNumber,param,xiSocket);
}
private void handleStep(int stepNumber, PreDetectionParam param,SocketMsg<String> xiSocket) {
switch (stepNumber) {
case 0:
sendModifyCoefficientCommand(param, xiSocket);
break;
case 1:
handleSmallVoltageStep(param,xiSocket);
break;
case 2:
handleBigVoltageStep(param,xiSocket);
break;
case 3:
handleFinalStep(param);
break;
}
}
/** /**
* 系数校验 * 修改系数命令下发
*/ */
private void sendModifyCoefficientCommand(PreDetectionParam param,SocketMsg<String> xiSocket) {
xiSocket.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue());
xiSocket.setOperateCode(SourceOperateCodeEnum.DATA_CHNFACTOR$02.getValue());
xiSocket.setData(JSON.toJSONString(XiNumberManager.devXiNumDataMap.get(XiNumberManager.devXiList.get(0))));
SocketManager.sendMsg(param.getUserPageId() + handlerStr, JSON.toJSONString(xiSocket));
}
private void handleSmallVoltageStep(PreDetectionParam param,SocketMsg<String> xiSocket) {
System.out.println("进入小电压步骤》》》》》》》》》》》》》》》》》》》》》》》》");
double limit = 0.1;
XiNumberManager.smallDevXiNumDataMap.forEach((devIp, devXiNumDataSmall) -> {
boolean flag = checkCoefficientDifference(devIp, devXiNumDataSmall, limit);
if (flag) {
XiNumberManager.devXiList.removeIf(it -> it.equals(devIp));
}
});
//如果差距超过10%则再次下发系数
if (CollUtil.isNotEmpty(XiNumberManager.devXiList)) {
xiSocket.setOperateCode(SourceOperateCodeEnum.DATA_CHNFACTOR$02.getValue());
xiSocket.setData(JSON.toJSONString(XiNumberManager.devXiNumDataMap.get(XiNumberManager.devXiList.get(0))));
SocketManager.sendMsg(param.getUserPageId() + handlerStr, JSON.toJSONString(xiSocket));
} else {
//存在小电压系数在误差范围内情况,直接结束。
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_end.getValue(), XiNumberManager.devParameterList.get(1));
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.big_comp_start.getValue(), XiNumberManager.devParameterList.get(0));
//小电流系数下发完毕;开始重新测试一次大电压
xiSocket.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
xiSocket.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(0)));
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, JSON.toJSONString(xiSocket));
XiNumberManager.stepNumber = 2;
FormalTestManager.realDataXiList.clear();
successComm.clear();
}
}
private void handleBigVoltageStep(PreDetectionParam param,SocketMsg<String> xiSocket){
//大电压处理
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.big_comp_end.getValue(), XiNumberManager.devParameterList.get(0));
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_comp_start.getValue(), XiNumberManager.devParameterList.get(1));
xiSocket.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
xiSocket.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(1)));
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, JSON.toJSONString(xiSocket));
XiNumberManager.stepNumber = 3;
FormalTestManager.realDataXiList.clear();
successComm.clear();
}
private void handleFinalStep(PreDetectionParam param){
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_comp_end.getValue(), XiNumberManager.devParameterList.get(1));
System.out.println("-------------------------已经全部结束----------------------");
CnSocketUtil.quitSend(param);
//修改设备表Factor_Check_Result字段
XiNumberManager.devXiNumDataMap.forEach((key, val) -> {
DevXiNumData small = XiNumberManager.smallDevXiNumDataMap.get(key);
LambdaUpdateWrapper<PqDev> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(PqDev::getId, FormalTestManager.devIdMapComm.get(key));
if (val.getResultFlag() == 0 || small.getResultFlag() == 0) {
updateWrapper.set(PqDev::getFactorCheckResult, 0);
} else {
updateWrapper.set(PqDev::getFactorCheckResult, 1);
}
iPqDevService.update(updateWrapper);
updateWrapper.clear();
});
}
private boolean checkCoefficientDifference(String devIp, DevXiNumData devXiNumDataSmall, double limit) {
boolean flag = true;
DevXiNumData devXiNumDataBig = XiNumberManager.devXiNumDataMap.get(devIp);
Map<Integer, DevXiNumData.GF> gfMapSmall = devXiNumDataSmall.getGf().stream().collect(Collectors.toMap(DevXiNumData.GF::getUMonitorPoint, Function.identity()));
for (DevXiNumData.GF bigGf : devXiNumDataBig.getGf()) {
DevXiNumData.F smallF = gfMapSmall.get(bigGf.getUMonitorPoint()).getF();
DevXiNumData.F bigF = bigGf.getF();
boolean ia = isWithinTenPercent(smallF.getIa_gain(), bigF.getIa_gain(), limit);
boolean ib = isWithinTenPercent(smallF.getIb_gain(), bigF.getIb_gain(), limit);
boolean ic = isWithinTenPercent(smallF.getIc_gain(), bigF.getIc_gain(), limit);
boolean va = isWithinTenPercent(smallF.getUa_gain(), bigF.getUa_gain(), limit);
boolean vb = isWithinTenPercent(smallF.getUb_gain(), bigF.getUb_gain(), limit);
boolean vc = isWithinTenPercent(smallF.getUc_gain(), bigF.getUc_gain(), limit);
if (!(ia && ib && ic && va && vb && vc)) {
flag = false;
adjustCoefficients(smallF, bigF);
}
}
return flag;
}
/**
* 当小电压系数和大电压系数的差距超过 10% 时,对大电压系数进行调整,调整的方式是取小电压系数和大电压系数的平均值。
*/
private void adjustCoefficients(DevXiNumData.F smallF, DevXiNumData.F bigF) {
if (!isWithinTenPercent(smallF.getIa_gain(), bigF.getIa_gain(), 0.1)) {
bigF.setIa_gain((smallF.getIa_gain() + bigF.getIa_gain()) / 2);
}
if (!isWithinTenPercent(smallF.getIb_gain(), bigF.getIb_gain(), 0.1)) {
bigF.setIb_gain((smallF.getIb_gain() + bigF.getIb_gain()) / 2);
}
if (!isWithinTenPercent(smallF.getIc_gain(), bigF.getIc_gain(), 0.1)) {
bigF.setIc_gain((smallF.getIc_gain() + bigF.getIc_gain()) / 2);
}
if (!isWithinTenPercent(smallF.getUa_gain(), bigF.getUa_gain(), 0.1)) {
bigF.setUa_gain((smallF.getUa_gain() + bigF.getUa_gain()) / 2);
}
if (!isWithinTenPercent(smallF.getUb_gain(), bigF.getUb_gain(), 0.1)) {
bigF.setUb_gain((smallF.getUb_gain() + bigF.getUb_gain()) / 2);
}
if (!isWithinTenPercent(smallF.getUc_gain(), bigF.getUc_gain(), 0.1)) {
bigF.setUc_gain((smallF.getUc_gain() + bigF.getUc_gain()) / 2);
}
}
private void processDeviceData(String devIp, List<DevData> dataList,PreDetectionParam param) {
AtomicBoolean xiFlag = new AtomicBoolean(true);
XiNumberManager.devXiList.add(devIp);
DevXiNumData startXiData = XiNumberManager.devXiNumDataMap.get(devIp);
Map<Integer, DevXiNumData.GF> gfMap = startXiData.getGf().stream().collect(Collectors.toMap(DevXiNumData.GF::getUMonitorPoint, Function.identity()));
Map<String, List<DevData>> monitorMap = dataList.stream().collect(Collectors.groupingBy(DevData::getId));
List<DevXiNumData.GF> gf = new ArrayList<>();
monitorMap.forEach((monitorId, list) -> {
CoefficientVO coefficientVO = createCoefficientVO(monitorId);
DevXiNumData.F F = new DevXiNumData.F();
CoefficientVO.DevParameter devParameter = getDevParameter();
assemblyEntity(list, F, gfMap.get(Integer.parseInt(monitorId.split(splitTag)[1]) - 1), coefficientVO, devParameter);
if (Objects.nonNull(coefficientVO.getResultFlag()) && coefficientVO.getResultFlag() == 0) {
xiFlag.set(false);
}
DevXiNumData.GF gfItem = createGFItem(monitorId, F);
gf.add(gfItem);
//表格数据
CnSocketUtil.sendToWebSocket(param.getUserPageId(),SourceOperateCodeEnum.Coefficient_Check.getValue(),SourceOperateCodeEnum.DATA_CHNFACTOR$02.getValue(),coefficientVO,null);
});
DevXiNumData devXiNumData = createDevXiNumData(devIp, gf, xiFlag.get());
saveDevXiNumData(devIp, devXiNumData);
}
private CoefficientVO createCoefficientVO(String monitorId) {
CoefficientVO coefficientVO = new CoefficientVO();
String[] splitStr = monitorId.split(splitTag);
if (XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 2) {
coefficientVO.setType("big");
} else {
coefficientVO.setType("small");
}
coefficientVO.setMonitorNum(splitStr[1]);
coefficientVO.setDevName(FormalTestManager.devNameMapComm.get(splitStr[0]));
coefficientVO.setDesc((XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 1) ? "系数下装" : "系数校准");
return coefficientVO;
}
private CoefficientVO.DevParameter getDevParameter() {
return (XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 2) ? XiNumberManager.devParameterList.get(0) : XiNumberManager.devParameterList.get(1);
}
private DevXiNumData.GF createGFItem(String monitorId, DevXiNumData.F F) {
DevXiNumData.GF gfItem = new DevXiNumData.GF();
gfItem.setUMonitorPoint(Integer.parseInt(monitorId.split(splitTag)[1]) - 1);
gfItem.setF(F);
return gfItem;
}
private DevXiNumData createDevXiNumData(String devIp, List<DevXiNumData.GF> gf, boolean xiFlag) {
DevXiNumData devXiNumData = new DevXiNumData();
devXiNumData.setChnNum(0);
devXiNumData.setDevIP(devIp);
devXiNumData.setGf(gf);
devXiNumData.setResultFlag(xiFlag ? 1 : 0);
return devXiNumData;
}
private void saveDevXiNumData(String devIp, DevXiNumData devXiNumData) {
if (XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 2) {
XiNumberManager.devXiNumDataMap.put(devIp, devXiNumData);
} else if (XiNumberManager.stepNumber == 1 || XiNumberManager.stepNumber == 3) {
XiNumberManager.smallDevXiNumDataMap.put(devIp, devXiNumData);
}
}
/** /**
@@ -466,7 +539,7 @@ public class SocketDevResponseService {
} }
private void assemblyEntity(List<DevData> deList, DevXiNumData.F F, CoefficientVO coefficientVO, CoefficientVO.DevParameter devParameter) { private void assemblyEntity(List<DevData> deList, DevXiNumData.F F, DevXiNumData.GF startF, CoefficientVO coefficientVO, CoefficientVO.DevParameter devParameter) {
//表示接收完成,必须保证10个数 //表示接收完成,必须保证10个数
if (deList.size() >= 10) { if (deList.size() >= 10) {
@@ -494,12 +567,12 @@ public class SocketDevResponseService {
coefficientVO.setCIeData(String.valueOf(optionalIC)); coefficientVO.setCIeData(String.valueOf(optionalIC));
if (XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 1) { if (XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 1) {
Integer aXi = (int) ((2 - (optionalA / devParameter.getDevVolt())) * 10000); Integer aXi = (int) (devParameter.getDevVolt() * startF.getF().getUa_gain() / optionalA);
Integer bXi = (int) ((2 - (optionalB / devParameter.getDevVolt())) * 10000); Integer bXi = (int) (devParameter.getDevVolt() * startF.getF().getUb_gain() / optionalB);
Integer cXi = (int) ((2 - (optionalC / devParameter.getDevVolt())) * 10000); Integer cXi = (int) (devParameter.getDevVolt() * startF.getF().getUc_gain() / optionalC);
Integer aIXi = (int) ((2 - (optionalIA / devParameter.getDevCurr())) * 10000); Integer aIXi = (int) (devParameter.getDevCurr() * startF.getF().getIa_gain() / optionalIA);
Integer bIXi = (int) ((2 - (optionalIB / devParameter.getDevCurr())) * 10000); Integer bIXi = (int) (devParameter.getDevCurr() * startF.getF().getIb_gain() / optionalIB);
Integer cIXi = (int) ((2 - (optionalIC / devParameter.getDevCurr())) * 10000); Integer cIXi = (int) (devParameter.getDevCurr() * startF.getF().getIc_gain() / optionalIC);
coefficientVO.setAVuXi(aXi.toString()); coefficientVO.setAVuXi(aXi.toString());
coefficientVO.setBVuXi(bXi.toString()); coefficientVO.setBVuXi(bXi.toString());
@@ -515,7 +588,7 @@ public class SocketDevResponseService {
F.setIb_gain(bIXi); F.setIb_gain(bIXi);
F.setIc_gain(cIXi); F.setIc_gain(cIXi);
} else { } else {
double vLimit = 0.1 * devParameter.getDevVolt() / 100; double vLimit = 0.1 / 100 * devParameter.getDevVolt();
double iLimit = 0.005; double iLimit = 0.005;
coefficientVO.setAVuXi(isWithinTenPercent(optionalA, devParameter.getDevVolt(), vLimit) ? "合格" : "不合格"); coefficientVO.setAVuXi(isWithinTenPercent(optionalA, devParameter.getDevVolt(), vLimit) ? "合格" : "不合格");
coefficientVO.setBVuXi(isWithinTenPercent(optionalB, devParameter.getDevVolt(), vLimit) ? "合格" : "不合格"); coefficientVO.setBVuXi(isWithinTenPercent(optionalB, devParameter.getDevVolt(), vLimit) ? "合格" : "不合格");
@@ -731,7 +804,7 @@ public class SocketDevResponseService {
//告诉前端当前项开始了 //告诉前端当前项开始了
WebSocketVO<Object> webSocketVO = new WebSocketVO(); WebSocketVO<Object> webSocketVO = new WebSocketVO<>();
webSocketVO.setRequestId(sourceIssues.get(0).getType() + stepBegin); webSocketVO.setRequestId(sourceIssues.get(0).getType() + stepBegin);
webSocketVO.setDesc(null); webSocketVO.setDesc(null);
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO)); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO));
@@ -864,10 +937,17 @@ public class SocketDevResponseService {
webSocketVO.setData(XiNumberManager.devParameterList.get(0)); webSocketVO.setData(XiNumberManager.devParameterList.get(0));
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO)); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO));
//下发命令获取所有装置通道系数,首先需要获取所有装置,通过所有装置下发获取系数命令,目前只支持单台装置获取系数
socketMsg.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); socketMsg.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue());
socketMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); socketMsg.setOperateCode(SourceOperateCodeEnum.DATA_CHNFACTOR$01.getValue());
socketMsg.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(0))); PreDetection preDetection = XiNumberManager.xiDevList.get(0);
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, JSON.toJSONString(socketMsg)); Map<String, Object> map = new HashMap<>();
map.put("devIP", preDetection.getDevIP());
map.put("chnNum", preDetection.getDevChns());
socketMsg.setData(JSON.toJSONString(map));
SocketManager.sendMsg(param.getUserPageId() + handlerStr, JSON.toJSONString(socketMsg));
XiNumberManager.stepNumber = 0; XiNumberManager.stepNumber = 0;
XiNumberManager.devXiList.clear(); XiNumberManager.devXiList.clear();
@@ -919,11 +999,11 @@ public class SocketDevResponseService {
switch (Objects.requireNonNull(dictDataEnumByCode)) { switch (Objects.requireNonNull(dictDataEnumByCode)) {
case SUCCESS: case SUCCESS:
realDataXiList.add(devData); FormalTestManager.realDataXiList.add(devData);
successComm.add(devData.getId()); successComm.add(devData.getId());
if (SocketManager.clockMap.containsKey(sourceIssue.getIndex())) { if (SocketManager.clockMap.containsKey(sourceIssue.getIndex())) {
SocketManager.clockMap.put(sourceIssue.getIndex(), 0L); // SocketManager.clockMap.put(sourceIssue.getIndex(), 0L);
} }
if (successComm.size() == FormalTestManager.monitorIdListComm.size()) { if (successComm.size() == FormalTestManager.monitorIdListComm.size()) {
@@ -931,10 +1011,10 @@ public class SocketDevResponseService {
//修改装置为监测中 //修改装置为监测中
adPlanService.updateTestState(param.getPlanId(), param.getDevIds()); adPlanService.updateTestState(param.getPlanId(), param.getDevIds());
//开启线程进行入库原始数据操作 //开启线程进行入库原始数据操作
baseDataInsert(realDataXiList, sourceIssue, param, SocketManager.valueTypeMap); baseDataInsert(FormalTestManager.realDataXiList, sourceIssue, param, SocketManager.valueTypeMap);
//调用判断方法 //调用判断方法
Map<String, Integer> textResult = detectionServiceImpl.processing(realDataXiList, param, FormalTestManager.devIdMapComm, sourceIssue, dataRule); Map<String, Integer> textResult = detectionServiceImpl.processing(FormalTestManager.realDataXiList, param, FormalTestManager.devIdMapComm, sourceIssue, dataRule);
//组装实体推送给前台 //组装实体推送给前台
assWebJson(param, textResult, socketDataMsg, sourceIssue); assWebJson(param, textResult, socketDataMsg, sourceIssue);
@@ -973,7 +1053,7 @@ public class SocketDevResponseService {
FormalTestManager.stopTime = 0; FormalTestManager.stopTime = 0;
FormalTestManager.hasStopFlag = true; FormalTestManager.hasStopFlag = true;
successComm.clear(); successComm.clear();
realDataXiList.clear(); FormalTestManager.realDataXiList.clear();
sendWebSocket(param.getUserPageId(), "preStopTest", "stop", null); sendWebSocket(param.getUserPageId(), "preStopTest", "stop", null);
return; return;
} }
@@ -1002,7 +1082,7 @@ public class SocketDevResponseService {
CnSocketUtil.quitSend(param); CnSocketUtil.quitSend(param);
} }
successComm.clear(); successComm.clear();
realDataXiList.clear(); FormalTestManager.realDataXiList.clear();
} }
break; break;
@@ -1011,7 +1091,7 @@ public class SocketDevResponseService {
break; break;
case NORMAL_RESPONSE: case NORMAL_RESPONSE:
realDataXiList.add(devData); FormalTestManager.realDataXiList.add(devData);
break; break;
case DEV_ERROR: case DEV_ERROR:
@@ -1031,6 +1111,41 @@ public class SocketDevResponseService {
} }
/*
private void processData(List<DevData> FormalTestManager.realDataXiList, List<String> successComm, SourceIssue sourceIssue, PreDetectionParam param, SocketDataMsg socketDataMsg, Object dataRule, String handlerSourceStr) {
if (SocketManager.clockMap.containsKey(sourceIssue.getIndex())) {
SocketManager.clockMap.put(sourceIssue.getIndex(), 0L);
}
if (successComm.size() == FormalTestManager.monitorIdListComm.size()) {
System.out.println(sourceIssue.getType() + stepTag + sourceIssue.getIndex() + "当前测试小项读取数据已经全部结束。。。。。。。。。");
handleSmallItemCompletion(FormalTestManager.realDataXiList, sourceIssue, param, socketDataMsg, dataRule);
if (handlePauseCondition(param, successComm, FormalTestManager.realDataXiList)) {
return;
}
startNextDetection(sourceIssue, param, socketDataMsg, handlerSourceStr);
successComm.clear();
FormalTestManager.realDataXiList.clear();
}
}
private static void handleSmallItemCompletion(List<DevData> FormalTestManager.realDataXiList, SourceIssue sourceIssue, PreDetectionParam param, SocketDataMsg socketDataMsg, Object dataRule) {
adPlanService.updateTestState(param.getPlanId(), param.getDevIds());
baseDataInsertService.insert(FormalTestManager.realDataXiList, sourceIssue, param, SocketManager.valueTypeMap);
Map<String, Integer> textResult = detectionServiceImpl.processing(FormalTestManager.realDataXiList, param, FormalTestManager.devIdMapComm, sourceIssue, dataRule);
assWebJson(param, textResult, socketDataMsg, sourceIssue);
SocketManager.delSource(sourceIssue.getIndex());
System.out.println("当前小项结束进行删除============" + sourceIssue.getType() + stepTag + sourceIssue.getIndex());
long residueCount = SocketManager.getSourceTarget(sourceIssue.getType()) - 1;
SocketManager.addTargetMap(sourceIssue.getType(), residueCount);
System.out.println("该大项还有" + residueCount + "个小项没有进行检测!!!!!!!!");
if (residueCount == 0) {
handleLargeItemCompletion(sourceIssue, param, socketDataMsg);
}
}
*/
/** /**
* 组装实体推送给前端 * 组装实体推送给前端
*/ */
@@ -1107,7 +1222,7 @@ public class SocketDevResponseService {
case QUIT_INIT_01: case QUIT_INIT_01:
//关闭所有 //关闭所有
SocketManager.removeUser(s); SocketManager.removeUser(s);
CnSocketUtil.quitSendSource(param); // CnSocketUtil.quitSendSource(param);
break; break;
case QUIT_INIT_02: case QUIT_INIT_02:
socketMsg.setRequestId(SourceOperateCodeEnum.QUITE.getValue()); socketMsg.setRequestId(SourceOperateCodeEnum.QUITE.getValue());
@@ -1274,7 +1389,7 @@ public class SocketDevResponseService {
/** /**
* 判断相角(-180° ~ 180° * 判断相角(-180° ~ 180°
* +360° ~ -360° * +360° ~ -360°
* *
* @param channelListDTO 源下发角度 * @param channelListDTO 源下发角度
* @param devPhase 装置返回角度 * @param devPhase 装置返回角度
@@ -1309,7 +1424,7 @@ public class SocketDevResponseService {
*/ */
public void initRestart() { public void initRestart() {
this.successComm.clear(); this.successComm.clear();
this.realDataXiList.clear(); FormalTestManager.realDataXiList.clear();
} }
@@ -1330,7 +1445,7 @@ public class SocketDevResponseService {
//初始化相序集合 //初始化相序集合
this.devInfo.clear(); this.devInfo.clear();
this.devDataMap.clear(); this.devDataMap.clear();
this.realDataXiList.clear(); FormalTestManager.realDataXiList.clear();
this.targetTestMap.clear(); this.targetTestMap.clear();
List<PreDetection> pqDevList = iPqDevService.getDevInfo(param.getDevIds()); List<PreDetection> pqDevList = iPqDevService.getDevInfo(param.getDevIds());
@@ -1493,9 +1608,7 @@ public class SocketDevResponseService {
Class<AdHarmonicResult> example = (Class<AdHarmonicResult>) adHarmonicResult.getClass(); Class<AdHarmonicResult> example = (Class<AdHarmonicResult>) adHarmonicResult.getClass();
for (int i = 2; i <= 50; i++) { for (int i = 2; i <= 50; i++) {
// 通过反射设置name字段的值
try { try {
// 假设这些字段已经以正确的方式定义在AdHarmonicResult类中
Field aField = example.getDeclaredField("aValue" + i); Field aField = example.getDeclaredField("aValue" + i);
Field bField = example.getDeclaredField("bValue" + i); Field bField = example.getDeclaredField("bValue" + i);
Field cField = example.getDeclaredField("cValue" + i); Field cField = example.getDeclaredField("cValue" + i);
@@ -1552,9 +1665,7 @@ public class SocketDevResponseService {
private LocalDateTime timeFormat(String dateTimeStr, DateTimeFormatter formatter) { private LocalDateTime timeFormat(String dateTimeStr, DateTimeFormatter formatter) {
try { try {
// 假设输入是UTC时间将其解析为ZonedDateTime
ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateTimeStr, formatter.withZone(ZoneId.of("UTC"))); ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateTimeStr, formatter.withZone(ZoneId.of("UTC")));
// 将ZonedDateTime转换为LocalDateTime去除时区信息
LocalDateTime localDateTime = zonedDateTime.toLocalDateTime(); LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
return localDateTime; return localDateTime;
} catch (DateTimeParseException e) { } catch (DateTimeParseException e) {

View File

@@ -10,10 +10,7 @@ import com.njcn.gather.detection.pojo.vo.DevLineTestResult;
import com.njcn.gather.detection.pojo.vo.SocketDataMsg; import com.njcn.gather.detection.pojo.vo.SocketDataMsg;
import com.njcn.gather.detection.pojo.vo.SocketMsg; import com.njcn.gather.detection.pojo.vo.SocketMsg;
import com.njcn.gather.detection.pojo.vo.WebSocketVO; import com.njcn.gather.detection.pojo.vo.WebSocketVO;
import com.njcn.gather.detection.util.socket.CnSocketUtil; import com.njcn.gather.detection.util.socket.*;
import com.njcn.gather.detection.util.socket.MsgUtil;
import com.njcn.gather.detection.util.socket.SocketManager;
import com.njcn.gather.detection.util.socket.WebServiceManager;
import com.njcn.gather.detection.util.socket.cilent.NettyClient; import com.njcn.gather.detection.util.socket.cilent.NettyClient;
import com.njcn.gather.detection.util.socket.cilent.NettyDevClientHandler; import com.njcn.gather.detection.util.socket.cilent.NettyDevClientHandler;
import com.njcn.gather.device.pojo.vo.PreDetection; import com.njcn.gather.device.pojo.vo.PreDetection;
@@ -83,7 +80,6 @@ public class SocketSourceResponseService {
break; break;
case YXT: case YXT:
break; break;
} }
} else { } else {
System.out.println("fggggggggggggggggggggg" + enumByCode); System.out.println("fggggggggggggggggggggg" + enumByCode);
@@ -116,7 +112,6 @@ public class SocketSourceResponseService {
socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); socketMsg.setData(JSON.toJSONString(phaseSequenceParam));
SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); SocketManager.sendMsg(s, JSON.toJSONString(socketMsg));
break; break;
case UNPROCESSED_BUSINESS: case UNPROCESSED_BUSINESS:
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
@@ -166,6 +161,7 @@ public class SocketSourceResponseService {
case SOURCE_CONNECTION_ERROR: case SOURCE_CONNECTION_ERROR:
CnSocketUtil.quitSendSource(param); CnSocketUtil.quitSendSource(param);
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
break;
case CONTROLLED_SOURCE_ERROR: case CONTROLLED_SOURCE_ERROR:
CnSocketUtil.quitSendSource(param); CnSocketUtil.quitSendSource(param);
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
@@ -361,6 +357,7 @@ public class SocketSourceResponseService {
this.monitorIdList = devList.stream().flatMap(x -> x.getMonitorList().stream()) this.monitorIdList = devList.stream().flatMap(x -> x.getMonitorList().stream())
.map(PreDetection.MonitorListDTO::getLineId) .map(PreDetection.MonitorListDTO::getLineId)
.collect(Collectors.toList()); .collect(Collectors.toList());
XiNumberManager.xiDevList = devList;
} }
} }

View File

@@ -18,9 +18,11 @@ import com.njcn.gather.detection.util.socket.CnSocketUtil;
import com.njcn.gather.detection.util.socket.FormalTestManager; import com.njcn.gather.detection.util.socket.FormalTestManager;
import com.njcn.gather.detection.util.socket.SocketManager; import com.njcn.gather.detection.util.socket.SocketManager;
import com.njcn.gather.detection.util.socket.cilent.NettyClient; import com.njcn.gather.detection.util.socket.cilent.NettyClient;
import com.njcn.gather.detection.util.socket.cilent.NettyDevClientHandler;
import com.njcn.gather.detection.util.socket.cilent.NettySourceClientHandler; import com.njcn.gather.detection.util.socket.cilent.NettySourceClientHandler;
import com.njcn.gather.device.pojo.enums.DevResponseEnum; import com.njcn.gather.device.pojo.enums.DevResponseEnum;
import com.njcn.gather.device.pojo.po.PqDev; import com.njcn.gather.device.pojo.po.PqDev;
import com.njcn.gather.device.pojo.vo.PreDetection;
import com.njcn.gather.device.service.IPqDevService; import com.njcn.gather.device.service.IPqDevService;
import com.njcn.gather.script.pojo.param.PqScriptCheckDataParam; import com.njcn.gather.script.pojo.param.PqScriptCheckDataParam;
import com.njcn.gather.script.pojo.po.SourceIssue; import com.njcn.gather.script.pojo.po.SourceIssue;
@@ -36,16 +38,20 @@ import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum;
import com.njcn.gather.system.dictionary.service.IDictDataService; import com.njcn.gather.system.dictionary.service.IDictDataService;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j
public class PreDetectionServiceImpl implements PreDetectionService { public class PreDetectionServiceImpl implements PreDetectionService {
private final String source = "_Source"; private final String source = "_Source";
@@ -62,10 +68,10 @@ public class PreDetectionServiceImpl implements PreDetectionService {
private final SocketSourceResponseService socketSourceResponseService; private final SocketSourceResponseService socketSourceResponseService;
private final IPqScriptCheckDataService iPqScriptCheckDataService; private final IPqScriptCheckDataService iPqScriptCheckDataService;
@Value("${socket.source.ip:192.168.1.136}") @Value("${socket.source.ip:192.168.1.138}")
private String ip; private String ip;
@Value("${socket.source.port:10086}") @Value("${socket.source.port:61000}")
private Integer port; private Integer port;
private final SocketSourceResponseService sourceResponseService; private final SocketSourceResponseService sourceResponseService;
@@ -138,12 +144,11 @@ public class PreDetectionServiceImpl implements PreDetectionService {
//开始组装socket报文请求头 //开始组装socket报文请求头
socketDevResponseService.initList(param); socketDevResponseService.initList(param);
socketSourceResponseService.initList(param); socketSourceResponseService.initList(param);
SocketMsg<String> msg = new SocketMsg<>(); SocketMsg<String> socketMsg = new SocketMsg<>();
msg.setRequestId(SourceOperateCodeEnum.YJC_YTXJY.getValue()); socketMsg.setRequestId(SourceOperateCodeEnum.YJC_YTXJY.getValue());
msg.setOperateCode(SourceOperateCodeEnum.INIT_GATHER.getValue()); socketMsg.setOperateCode(SourceOperateCodeEnum.INIT_GATHER.getValue());
msg.setData(JSON.toJSONString(sourceParam)); socketMsg.setData(JSON.toJSONString(sourceParam));
NettyClient.socketClient(ip, port, param, JSON.toJSONString(socketMsg), new NettySourceClientHandler(param, sourceResponseService));
NettyClient.socketClient(ip, port, param, JSON.toJSONString(msg), new NettySourceClientHandler(param, sourceResponseService));
} else { } else {
throw new BusinessException(DetectionResponseEnum.SOURCE_INFO_NOT); throw new BusinessException(DetectionResponseEnum.SOURCE_INFO_NOT);
} }
@@ -170,6 +175,7 @@ public class PreDetectionServiceImpl implements PreDetectionService {
@Override @Override
public boolean restartTemTest(PreDetectionParam param) { public boolean restartTemTest(PreDetectionParam param) {
FormalTestManager.stopFlag = false; FormalTestManager.stopFlag = false;
socketDevResponseService.initRestart();
List<SourceIssue> sourceIssueList = SocketManager.getSourceList(); List<SourceIssue> sourceIssueList = SocketManager.getSourceList();
if (CollUtil.isNotEmpty(sourceIssueList)) { if (CollUtil.isNotEmpty(sourceIssueList)) {
SourceIssue sourceIssues = SocketManager.getSourceList().get(0); SourceIssue sourceIssues = SocketManager.getSourceList().get(0);
@@ -199,23 +205,29 @@ public class PreDetectionServiceImpl implements PreDetectionService {
*/ */
private void specialDeal(PreDetectionParam param) { private void specialDeal(PreDetectionParam param) {
Channel channel = SocketManager.getChannelByUserId(param.getUserPageId() + source); Channel channel = SocketManager.getChannelByUserId(param.getUserPageId() + source);
Channel channelDev = SocketManager.getChannelByUserId(param.getUserPageId() + dev);
if (Objects.nonNull(channel) && channel.isActive()) { if (Objects.nonNull(channel) && channel.isActive()) {
System.out.println("进入关闭源。。//////"); System.out.println("发送关闭源指令。。。。。。。。");
CnSocketUtil.quitSendSource(param); CnSocketUtil.quitSendSource(param);
}
if(Objects.nonNull(channelDev) && channelDev.isActive()){
System.out.println("发送关闭设备通讯指令。。。。。。。。");
CnSocketUtil.quitSend(param);
}
try { try {
Thread.sleep(2000); Thread.sleep(4000);
} catch (InterruptedException e) { } catch (InterruptedException e) {
throw new RuntimeException(e); log.error(e.getMessage());
} }
SocketManager.removeUser(param.getUserPageId() + source);
SocketManager.removeUser(param.getUserPageId() + dev);
try { SocketManager.removeUser(param.getUserPageId() + source);
Thread.sleep(2000); SocketManager.removeUser(param.getUserPageId() + dev);
} catch (InterruptedException e) {
throw new RuntimeException(e); try {
} Thread.sleep(2000);
} catch (InterruptedException e) {
log.error(e.getMessage());
} }
} }

View File

@@ -1,5 +1,6 @@
package com.njcn.gather.detection.util.socket; package com.njcn.gather.detection.util.socket;
import com.njcn.gather.detection.pojo.po.DevData;
import com.njcn.gather.device.pojo.vo.PreDetection; import com.njcn.gather.device.pojo.vo.PreDetection;
import java.util.ArrayList; import java.util.ArrayList;
@@ -33,7 +34,8 @@ public class FormalTestManager {
//用于存储所有测点的试试数据
public static List<DevData> realDataXiList = new ArrayList<>();
/** /**

View File

@@ -35,7 +35,7 @@ public class WebServiceManager {
Iterator<Map.Entry<String, Channel>> iterator = userSessions.entrySet().iterator(); Iterator<Map.Entry<String, Channel>> iterator = userSessions.entrySet().iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
Map.Entry<String, Channel> entry = iterator.next(); Map.Entry<String, Channel> entry = iterator.next();
if (entry.getValue().id().equals(channelId)) { if (entry.getValue().id().toString().equals(channelId)) {
iterator.remove(); iterator.remove();
} }
} }

View File

@@ -2,6 +2,7 @@ package com.njcn.gather.detection.util.socket;
import com.njcn.gather.detection.pojo.dto.DevXiNumData; import com.njcn.gather.detection.pojo.dto.DevXiNumData;
import com.njcn.gather.detection.pojo.vo.CoefficientVO; import com.njcn.gather.detection.pojo.vo.CoefficientVO;
import com.njcn.gather.device.pojo.vo.PreDetection;
import com.njcn.gather.script.pojo.po.SourceIssue; import com.njcn.gather.script.pojo.po.SourceIssue;
import java.util.ArrayList; import java.util.ArrayList;
@@ -27,7 +28,7 @@ public class XiNumberManager {
public static List<String> devXiList = new ArrayList<>(); public static List<String> devXiList = new ArrayList<>();
/** /**
* 存储所有测点的大电压系数 * 最开始存储装置通道原始系数,后续存储大电压计算出来的系数
*/ */
public static Map<String, DevXiNumData> devXiNumDataMap = new ConcurrentHashMap<>(); public static Map<String, DevXiNumData> devXiNumDataMap = new ConcurrentHashMap<>();
@@ -47,5 +48,13 @@ public class XiNumberManager {
/**
* 因为只支持单台装置获取系数,用于记录未获取到系数的装置,获取到一个删除一个
*/
public static List<PreDetection> xiDevList = new ArrayList<>();
} }

View File

@@ -0,0 +1,120 @@
package com.njcn.gather.detection.util.socket.cilent;
import com.alibaba.fastjson.JSON;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
import com.njcn.gather.detection.pojo.param.PreDetectionParam;
import com.njcn.gather.detection.pojo.vo.SocketDataMsg;
import com.njcn.gather.detection.pojo.vo.SocketMsg;
import com.njcn.gather.detection.util.socket.CnSocketUtil;
import com.njcn.gather.detection.util.socket.MsgUtil;
import com.njcn.gather.detection.util.socket.SocketManager;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelDuplexHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import lombok.RequiredArgsConstructor;
import java.time.LocalDateTime;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* @Author: cdf
* @CreateTime: 2025-02-11
* @Description: 心跳处理类
*/
public class HeartbeatHandler extends SimpleChannelInboundHandler<String> {
private final ScheduledExecutorService heartbeatExecutor = Executors.newScheduledThreadPool(1);
private final String dev = "_Dev";
private final String sourceTag = "_Source";
private final PreDetectionParam param;
private final String handlerType;
// 允许连续未收到心跳响应的最大次数
private static final int MAX_HEARTBEAT_MISSES = 3;
// 连续未收到心跳响应的次数
private int consecutiveHeartbeatMisses = 0;
public HeartbeatHandler(PreDetectionParam param,String type){
this.param = param;
this.handlerType = type;
}
@Override
public void channelActive(ChannelHandlerContext ctx) {
// 启动心跳定时任务
scheduleHeartbeat(ctx);
ctx.fireChannelActive();
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
heartbeatExecutor.shutdown();
super.channelInactive(ctx);
}
// 每30秒发送一次心跳
private void scheduleHeartbeat(ChannelHandlerContext ctx) {
heartbeatExecutor.scheduleAtFixedRate(() -> {
if (ctx.channel().isActive()) {
// 发送心跳包
SocketMsg<String> msg = new SocketMsg<>();
msg.setRequestId("yxt");
msg.setOperateCode(SourceOperateCodeEnum.HEARTBEAT.getValue());
msg.setData("");
ctx.channel().writeAndFlush(JSON.toJSONString(msg)+"\n");
System.out.println(handlerType+"♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥send"+LocalDateTime.now());
consecutiveHeartbeatMisses++;
if (consecutiveHeartbeatMisses >= MAX_HEARTBEAT_MISSES) {
// 连续三次未收到心跳响应,断开连接
System.out.println(handlerType+"连续三次未收到心跳响应,断开连接");
if (dev.equals(handlerType)) {
//CnSocketUtil.sendToWebSocket(param.getUserPageId(),);
CnSocketUtil.quitSend(param);
} else {
CnSocketUtil.quitSendSource(param);
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
System.err.println("线程中断异常: " + e.getMessage());
}
String key = dev.equals(handlerType) ? param.getUserPageId() + dev : param.getUserPageId() + sourceTag;
SocketManager.removeUser(key);
consecutiveHeartbeatMisses = 0; // 重置连续心跳丢失次数
}
}
}, 3, 10, TimeUnit.SECONDS);
}
@Override
protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
// 过滤心跳包,避免进入业务逻辑
if (isHeartbeatPacket(msg)) {
System.out.println(handlerType+"♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥response"+LocalDateTime.now());
consecutiveHeartbeatMisses = 0;
return;
}
// 处理业务数据
ctx.fireChannelRead(msg);
}
private boolean isHeartbeatPacket(String msg) {
// 判断是否为心跳包
SocketDataMsg socketDataMsg = MsgUtil.socketDataMsg(msg);
return socketDataMsg.getOperateCode().equals(SourceOperateCodeEnum.HEARTBEAT.getValue());
}
}

View File

@@ -31,6 +31,9 @@ import java.util.concurrent.TimeUnit;
@Getter @Getter
public class NettyClient { public class NettyClient {
private static final String dev = "_Dev";
private static final String source = "_Source";
public static void socketClient(String ip, Integer port, PreDetectionParam param, String msg, SimpleChannelInboundHandler<String> handler) { public static void socketClient(String ip, Integer port, PreDetectionParam param, String msg, SimpleChannelInboundHandler<String> handler) {
NioEventLoopGroup group = new NioEventLoopGroup(); NioEventLoopGroup group = new NioEventLoopGroup();
Bootstrap bootstrap = new Bootstrap(); Bootstrap bootstrap = new Bootstrap();
@@ -46,18 +49,21 @@ public class NettyClient {
//空闲状态的handler //空闲状态的handler
// 添加LineBasedFrameDecoder来按行分割数据 // 添加LineBasedFrameDecoder来按行分割数据
.addLast(new LineBasedFrameDecoder(10240)) .addLast(new LineBasedFrameDecoder(10240))
.addLast(new IdleStateHandler(0, 10, 0, TimeUnit.SECONDS)) // .addLast(new IdleStateHandler(0, 10, 0, TimeUnit.SECONDS))
.addLast(new StringDecoder(CharsetUtil.UTF_8)) .addLast(new StringDecoder(CharsetUtil.UTF_8))
.addLast(new StringEncoder(CharsetUtil.UTF_8)) .addLast(new StringEncoder(CharsetUtil.UTF_8))
.addLast(new HeartbeatHandler(param,source))
.addLast(handler); .addLast(handler);
} else { } else {
ch.pipeline() ch.pipeline()
//空闲状态的handler
// 添加LineBasedFrameDecoder来按行分割数据 // 添加LineBasedFrameDecoder来按行分割数据
.addLast(new LineBasedFrameDecoder(10240)) .addLast(new LineBasedFrameDecoder(10240))
.addLast(new IdleStateHandler(60, 0, 0, TimeUnit.SECONDS))
.addLast(new StringDecoder(CharsetUtil.UTF_8)) .addLast(new StringDecoder(CharsetUtil.UTF_8))
.addLast(new StringEncoder(CharsetUtil.UTF_8)) .addLast(new StringEncoder(CharsetUtil.UTF_8))
.addLast(new HeartbeatHandler(param,dev))
//空闲状态的handler
.addLast(new IdleStateHandler(60, 0, 0, TimeUnit.SECONDS))
.addLast(handler); .addLast(handler);
} }
@@ -69,7 +75,7 @@ public class NettyClient {
System.out.println("链接服务端失败..."); System.out.println("链接服务端失败...");
} else { } else {
System.out.println("链接服务端成功..."); System.out.println("链接服务端成功...");
System.out.println("客户端向服务端发送消息:"+msg); System.out.println("客户端向服务端发送消息:"+port+msg);
channelFuture.channel().writeAndFlush(msg+"\n"); channelFuture.channel().writeAndFlush(msg+"\n");
} }
}); });
@@ -78,9 +84,9 @@ public class NettyClient {
groupByUserId.shutdownGracefully(); groupByUserId.shutdownGracefully();
}else{ }else{
if (handler instanceof NettySourceClientHandler) { if (handler instanceof NettySourceClientHandler) {
SocketManager.addGroup(param.getUserPageId()+"_Source",group); SocketManager.addGroup(param.getUserPageId()+source,group);
}else{ }else{
SocketManager.addGroup(param.getUserPageId()+"_Dev",group); SocketManager.addGroup(param.getUserPageId()+dev,group);
} }
} }
} catch (Exception e) { } catch (Exception e) {

View File

@@ -6,6 +6,8 @@ import com.njcn.gather.detection.handler.SocketDevResponseService;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
import com.njcn.gather.detection.pojo.param.PreDetectionParam; import com.njcn.gather.detection.pojo.param.PreDetectionParam;
import com.njcn.gather.detection.pojo.vo.DevLineTestResult; import com.njcn.gather.detection.pojo.vo.DevLineTestResult;
import com.njcn.gather.detection.pojo.vo.SocketDataMsg;
import com.njcn.gather.detection.pojo.vo.SocketMsg;
import com.njcn.gather.detection.pojo.vo.WebSocketVO; import com.njcn.gather.detection.pojo.vo.WebSocketVO;
import com.njcn.gather.detection.util.socket.*; import com.njcn.gather.detection.util.socket.*;
import com.njcn.gather.device.pojo.vo.PreDetection; import com.njcn.gather.device.pojo.vo.PreDetection;
@@ -22,9 +24,12 @@ import lombok.RequiredArgsConstructor;
import java.io.IOException; import java.io.IOException;
import java.net.ConnectException; import java.net.ConnectException;
import java.net.ProtocolException; import java.net.ProtocolException;
import java.util.ArrayList; import java.time.LocalDateTime;
import java.util.List; import java.util.*;
import java.util.Objects; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/** /**
@@ -102,7 +107,8 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
Boolean fly = false; Boolean fly = false;
if (evt instanceof IdleStateEvent) { if (evt instanceof IdleStateEvent) {
if (((IdleStateEvent) evt).state() == IdleState.READER_IDLE) { if (((IdleStateEvent) evt).state() == IdleState.READER_IDLE) {
if(!FormalTestManager.hasStopFlag) { System.out.println(LocalDateTime.now() + "devHandler触发读超时函数**************************************");
if (!FormalTestManager.hasStopFlag) {
if (CollUtil.isNotEmpty(SocketManager.getSourceList())) { if (CollUtil.isNotEmpty(SocketManager.getSourceList())) {
SourceIssue sourceIssue = SocketManager.getSourceList().get(0); SourceIssue sourceIssue = SocketManager.getSourceList().get(0);
if (SocketManager.clockMap.containsKey(sourceIssue.getIndex())) { if (SocketManager.clockMap.containsKey(sourceIssue.getIndex())) {
@@ -114,7 +120,7 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
if (sourceIssue.getType().equals(DicDataEnum.F.getCode())) { if (sourceIssue.getType().equals(DicDataEnum.F.getCode())) {
//闪变,正常抛一轮最大等待20分钟超时 //闪变,正常抛一轮最大等待20分钟超时
if (SocketManager.clockMap.get(sourceIssue.getIndex()) > 1300) { if (SocketManager.clockMap.get(sourceIssue.getIndex()) > 1300) {
fly=true; fly = true;
System.out.println("超时处理-----》" + sourceIssue.getType() + "已超时----------------关闭"); System.out.println("超时处理-----》" + sourceIssue.getType() + "已超时----------------关闭");
CnSocketUtil.quitSend(param); CnSocketUtil.quitSend(param);
timeoutSend(sourceIssue); timeoutSend(sourceIssue);
@@ -122,37 +128,35 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
} else if (sourceIssue.getType().equals(DicDataEnum.VOLTAGE.getCode()) || sourceIssue.getType().equals(DicDataEnum.HP.getCode())) { } else if (sourceIssue.getType().equals(DicDataEnum.VOLTAGE.getCode()) || sourceIssue.getType().equals(DicDataEnum.HP.getCode())) {
//统计数据项,正常抛一轮数据,超时 //统计数据项,正常抛一轮数据,超时
if (SocketManager.clockMap.get(sourceIssue.getIndex()) > 180) { if (SocketManager.clockMap.get(sourceIssue.getIndex()) > 180) {
fly=true; fly = true;
CnSocketUtil.quitSend(param); CnSocketUtil.quitSend(param);
System.out.println("超时处理-----》" + sourceIssue.getType() + "已超时----------------关闭"); System.out.println("超时处理-----》" + sourceIssue.getType() + "已超时----------------关闭");
timeoutSend(sourceIssue); timeoutSend(sourceIssue);
} }
} else { } else {
//实时数据 //实时数据
if (SocketManager.clockMap.get(sourceIssue.getIndex()) > 60) { if (SocketManager.clockMap.get(sourceIssue.getIndex()) > 60) {
fly=true; fly = true;
CnSocketUtil.quitSend(param); CnSocketUtil.quitSend(param);
System.out.println("超时处理-----》" + sourceIssue.getType() + "已超时----------------关闭"); System.out.println("超时处理-----》" + sourceIssue.getType() + "已超时----------------关闭");
timeoutSend(sourceIssue); timeoutSend(sourceIssue);
} }
} }
} else { } else {
fly=true; fly = true;
//为空则认为是常规步骤,设定一分钟超时 //为空则认为是常规步骤,设定一分钟超时
CnSocketUtil.quitSend(param); CnSocketUtil.quitSend(param);
} }
if(fly){ if (fly) {
socketResponseService.backCheckState(param); socketResponseService.backCheckState(param);
} }
System.out.println("已经等了一分钟了。。。。。。。。。。。。"); } else {
}else {
//如果是暂停操作后 //如果是暂停操作后
FormalTestManager.stopTime+=60; FormalTestManager.stopTime += 60;
System.out.println("当前进入暂停操作超时函数-----------------"+FormalTestManager.stopTime); System.out.println("当前进入暂停操作超时函数-----------------" + FormalTestManager.stopTime);
if(FormalTestManager.stopTime > 600){ if (FormalTestManager.stopTime > 600) {
CnSocketUtil.quitSend(param); CnSocketUtil.quitSend(param);
CnSocketUtil.sendToWebSocket(param.getUserPageId(),SourceOperateCodeEnum.FORMAL_REAL.getValue(),SourceOperateCodeEnum.STOP_TIMEOUT.getValue(),SourceOperateCodeEnum.STOP_TIMEOUT.getMsg(),null); CnSocketUtil.sendToWebSocket(param.getUserPageId(), SourceOperateCodeEnum.FORMAL_REAL.getValue(), SourceOperateCodeEnum.STOP_TIMEOUT.getValue(), SourceOperateCodeEnum.STOP_TIMEOUT.getMsg(), null);
} }
} }
} }
@@ -162,8 +166,6 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
} }
@Override @Override
public void handlerAdded(ChannelHandlerContext ctx) { public void handlerAdded(ChannelHandlerContext ctx) {
System.out.println("有通道准备接入" + ctx.channel()); System.out.println("有通道准备接入" + ctx.channel());
@@ -183,7 +185,7 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
} else if (cause instanceof IOException) { } else if (cause instanceof IOException) {
// 处理I/O异常例如读写错误 // 处理I/O异常例如读写错误
System.out.println("IOException caught: There was an I/O error."); System.out.println("IOException caught: There was an I/O error.");
CnSocketUtil.sendToWebSocket(param.getUserPageId(),SourceOperateCodeEnum.SERVER_ERROR.getValue(),SourceOperateCodeEnum.SERVER_ERROR.getValue(),SourceOperateCodeEnum.SERVER_ERROR.getMsg(),null ); CnSocketUtil.sendToWebSocket(param.getUserPageId(), SourceOperateCodeEnum.SERVER_ERROR.getValue(), SourceOperateCodeEnum.SERVER_ERROR.getValue(), SourceOperateCodeEnum.SERVER_ERROR.getMsg(), null);
// 例如可以记录更详细的I/O错误信息 // 例如可以记录更详细的I/O错误信息
} else if (cause instanceof TimeoutException) { } else if (cause instanceof TimeoutException) {
@@ -206,9 +208,26 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
/** /**
* * 发送业务消息时候开启计时器,
* @param requestId
*/ */
private void timeoutSend(SourceIssue sourceIssue){ /* private void scheduleTimeoutTask(String requestId) {
ScheduledFuture<?> future = scheduler.schedule(() -> {
if (requestTimeoutTasks.containsKey(requestId)) {
// 处理超时逻辑
System.out.println("Business request with ID " + requestId + " timed out.");
requestTimeoutTasks.remove(requestId);
ctx.close();
}
}, BUSINESS_REQUEST_TIMEOUT, TimeUnit.MILLISECONDS);
requestTimeoutTasks.put(requestId, future);
}*/
/**
* 超时后的处理
*/
private void timeoutSend(SourceIssue sourceIssue) {
List<DevLineTestResult> devListRes = new ArrayList<>(); List<DevLineTestResult> devListRes = new ArrayList<>();
FormalTestManager.devList.forEach(dev -> { FormalTestManager.devList.forEach(dev -> {
DevLineTestResult devLineTestResult = new DevLineTestResult(); DevLineTestResult devLineTestResult = new DevLineTestResult();
@@ -221,7 +240,7 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
devListRes.add(devLineTestResult); devListRes.add(devLineTestResult);
}); });
WebSocketVO<List<DevLineTestResult>> socketVO = new WebSocketVO<>(); WebSocketVO<List<DevLineTestResult>> socketVO = new WebSocketVO<>();
socketVO.setRequestId(sourceIssue.getType()+"_End"); socketVO.setRequestId(sourceIssue.getType() + "_End");
socketVO.setOperateCode(sourceIssue.getType()); socketVO.setOperateCode(sourceIssue.getType());
socketVO.setData(devListRes); socketVO.setData(devListRes);
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketVO)); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketVO));

View File

@@ -95,11 +95,11 @@ public class NettySourceClientHandler extends SimpleChannelInboundHandler<String
if (evt instanceof IdleStateEvent) { if (evt instanceof IdleStateEvent) {
if (((IdleStateEvent) evt).state() == IdleState.WRITER_IDLE) { if (((IdleStateEvent) evt).state() == IdleState.WRITER_IDLE) {
//发送ping 保持心跳链接 //发送ping 保持心跳链接
SocketMsg msg = new SocketMsg(); /* SocketMsg<String> msg = new SocketMsg<>();
msg.setRequestId("yxt"); msg.setRequestId("yxt");
msg.setOperateCode(SourceOperateCodeEnum.HEARTBEAT.getValue()); msg.setOperateCode(SourceOperateCodeEnum.HEARTBEAT.getValue());
msg.setData(""); msg.setData("");
ctx.writeAndFlush(JSON.toJSONString(msg)+"\n"); ctx.writeAndFlush(JSON.toJSONString(msg)+"\n");*/
} }
} else { } else {
//防止堆栈溢出 //防止堆栈溢出
@@ -126,6 +126,7 @@ public class NettySourceClientHandler extends SimpleChannelInboundHandler<String
} else if (cause instanceof IOException) { } else if (cause instanceof IOException) {
// 处理I/O异常例如读写错误 // 处理I/O异常例如读写错误
CnSocketUtil.sendToWebSocket(webUser.getUserPageId(),SourceOperateCodeEnum.SERVER_ERROR.getValue(),SourceOperateCodeEnum.SERVER_ERROR.getValue(),SourceOperateCodeEnum.SERVER_ERROR.getMsg(),null ); CnSocketUtil.sendToWebSocket(webUser.getUserPageId(),SourceOperateCodeEnum.SERVER_ERROR.getValue(),SourceOperateCodeEnum.SERVER_ERROR.getValue(),SourceOperateCodeEnum.SERVER_ERROR.getMsg(),null );
// 例如可以记录更详细的I/O错误信息 // 例如可以记录更详细的I/O错误信息
} else if (cause instanceof TimeoutException) { } else if (cause instanceof TimeoutException) {
// 处理超时异常 // 处理超时异常

View File

@@ -0,0 +1,149 @@
package com.njcn.gather.detection.util.socket.service;
import com.alibaba.fastjson.JSONObject;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
import com.njcn.gather.detection.pojo.vo.SocketDataMsg;
import com.njcn.gather.detection.util.socket.MsgUtil;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import java.util.Objects;
/**
* @Description: 客户端业务处理
* @Author: wr
* @Date: 2024/12/10 14:18
*/
public class DevNettyServerHandler extends SimpleChannelInboundHandler<String> {
private final String DEV = "_Dev";
private final String source = "_Source";
private final String stepTag = "&&";
private final String stepBegin = "_Start";
private final String stepEnd = "_End";
public static final DevNettyServerHandler INSTANCE = new DevNettyServerHandler();
/**
* @Description: 当通道进行连接时推送消息
* @Author: wr
* @Date: 2024/12/10 14:19
*/
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
System.out.println("服务端监听到" + ctx.channel().id() + "连接");
super.channelActive(ctx);
}
/**
* 处理消息信息
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, String msg) {
System.out.println(ctx.channel().id() + "NettyServer服务端接收到客户端消息" + msg);
Channel channel = ctx.channel();
SocketDataMsg socketDataMsg = MsgUtil.socketDataMsg(msg);
String[] tem = socketDataMsg.getRequestId().split(stepTag);
SourceOperateCodeEnum sourceOperateCodeEnum = SourceOperateCodeEnum.getDictDataEnumByCode(tem[0]);
switch (Objects.requireNonNull(sourceOperateCodeEnum)) {
//设备通讯校验
case YJC_SBTXJY:
String aa = "{\"requestId\":\"yjc_sbtxjy\",\"operateCode\":\"INIT_GATHER$01\",\"data\":null,\"code\":10201}";
String bb = "{\"requestId\":\"yjc_sbtxjy\",\"operateCode\":\"INIT_GATHER$01\",\"data\":null,\"code\":10201}";
String cc = "{\"requestId\":\"yjc_sbtxjy\",\"operateCode\":\"INIT_GATHER$01\",\"data\":\"192.168.1.237_1\",\"code\":10200}";
channel.writeAndFlush(aa+"\n");
channel.writeAndFlush(bb+"\n");
channel.writeAndFlush(cc+"\n");
break;
//协议校验
case YJC_XYJY:
String dd="{\"requestId\":\"yjc_xyjy\",\"operateCode\":\"INIT_GATHER$02\",\"data\":null,\"code\":10201}";
String ee = "{\"requestId\":\"yjc_xyjy\",\"operateCode\":\"INIT_GATHER$02\",\"data\":\"192.168.1.237_1\",\"code\":10200}";
channel.writeAndFlush(dd+"\n");
channel.writeAndFlush(ee+"\n");
String ff = "{\"requestId\":\"yjc_xyjy\",\"operateCode\":\"INIT_GATHER$03\",\"data\":null,\"code\":10201}";
String gg ="{\"requestId\":\"yjc_xyjy\",\"operateCode\":\"INIT_GATHER$03\",\"data\":\"192.168.1.237_1\",\"code\":10200}";
channel.writeAndFlush(ff+"\n");
channel.writeAndFlush(gg+"\n");
break;
//相序校验
case YJC_XUJY:
String hh = "{\"requestId\":\"YJC_xujy\",\"operateCode\":\"DATA_REQUEST$02\",\"data\":null,\"code\":10201}";
String ii = "{\"requestId\":\"YJC_xujy\",\"operateCode\":\"DATA_REQUEST$02\",\"data\":\"{\\\"Time\\\":\\\"2025-02-14T15:09:06.004\\\",\\\"ID\\\":\\\"192.168.1.237_1\\\",\\\"result\\\":false,\\\"SqlData\\\":[{\\\"type\\\":\\\"real\\\",\\\"desc\\\":\\\"VRMS\\\",\\\"list\\\":{\\\"A\\\":\\\"59.969920\\\",\\\"B\\\":\\\"49.963360\\\",\\\"C\\\":\\\"39.971470\\\",\\\"T\\\":null}},{\\\"type\\\":\\\"real\\\",\\\"desc\\\":\\\"VA\\\",\\\"list\\\":{\\\"A\\\":\\\"0.000000\\\",\\\"B\\\":\\\"-119.864000\\\",\\\"C\\\":\\\"120.052000\\\",\\\"T\\\":null}},{\\\"type\\\":\\\"real\\\",\\\"desc\\\":\\\"IRMS\\\",\\\"list\\\":{\\\"A\\\":\\\"1.000979\\\",\\\"B\\\":\\\"1.998939\\\",\\\"C\\\":\\\"3.000807\\\",\\\"T\\\":null}},{\\\"type\\\":\\\"real\\\",\\\"desc\\\":\\\"IA\\\",\\\"list\\\":{\\\"A\\\":\\\"-0.038000\\\",\\\"B\\\":\\\"-120.052000\\\",\\\"C\\\":\\\"119.941000\\\",\\\"T\\\":null}}],\\\"SqlDataHarm\\\":[]}\",\"code\":10200}\n";
channel.writeAndFlush(hh+"\n");
channel.writeAndFlush(ii+"\n");
break;
//正式检测
case FORMAL_REAL:
break;
//系数校验
case Coefficient_Check:
String a = "{\"requestId\":\"Coefficient_Check\",\"operateCode\":\"DATA_CHNFACTOR$01\",\"data\":null,\"code\":10201}";
String b = "{\"requestId\":\"Coefficient_Check\",\"operateCode\":\"DATA_CHNFACTOR$01\",\"data\":\"[{\\\"uMonitorPoint\\\":0,\\\"f\\\":{\\\"Ua_gain\\\":9999,\\\"Ub_gain\\\":10008,\\\"Uc_gain\\\":10000,\\\"U0_gain\\\":10000,\\\"Ia_gain\\\":9997,\\\"Ib_gain\\\":9997,\\\"Ic_gain\\\":10001,\\\"I0_gain\\\":10000,\\\"Uab_gain\\\":9999,\\\"Ubc_gain\\\":10008,\\\"Uca_gain\\\":10000}}]\",\"code\":10200}";
channel.writeAndFlush(a+"\n");
channel.writeAndFlush(b+"\n");
switch (Objects.requireNonNull(sourceOperateCodeEnum)) {
case DATA_CHNFACTOR$01:
break;
}
break;
//退出关闭
case QUITE:
// quitDeal(socketDataMsg, param, msg);
break;
case YXT:
break;
}
}
@Override
public void handlerAdded(ChannelHandlerContext ctx) {
System.out.println("有新连接加入了++++......" + ctx.channel());
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
cause.printStackTrace();
ctx.close();
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
// Client disconnected, close the server-side channel too
System.out.println("NettyServer服务端监听到" + ctx.channel().id() + "关闭连接");
ctx.close(); // This will trigger the close event on the server side
super.channelInactive(ctx);
}
/**
* 用户事件的回调方法(自定义事件用于心跳机制)
*/
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
//空闲状态的事件
// if (evt instanceof IdleStateEvent) {
// IdleStateEvent event = (IdleStateEvent) evt;
// System.out.println(event.state() + ">>>" + ctx.channel().id());
// //已经10秒钟没有读时间了
// if (event.state().equals(IdleState.READER_IDLE)){
// // 心跳包丢失10秒没有收到客户端心跳 (断开连接)
// ctx.channel().close().sync();
// System.out.println("已与 "+ctx.channel().remoteAddress()+" 断开连接");
// }
// }
}
}

View File

@@ -6,6 +6,11 @@ import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.ServerSocketChannel; import io.netty.channel.socket.ServerSocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.LineBasedFrameDecoder;
import io.netty.handler.codec.string.StringDecoder;
import io.netty.handler.codec.string.StringEncoder;
import io.netty.util.CharsetUtil;
/** /**
@@ -25,11 +30,17 @@ public class NettyServer {
public static void main(String[] args) { public static void main(String[] args) {
NettyServer nettyServer = new NettyServer(); NettyServer nettyServer = new NettyServer();
nettyServer.run(); nettyServer.runSource();
} }
private void run() { public static void sourceMain(String[] args) {
NettyServer nettyServer = new NettyServer();
nettyServer.runDev();
}
private void runSource() {
NioEventLoopGroup boss = new NioEventLoopGroup(1); NioEventLoopGroup boss = new NioEventLoopGroup(1);
NioEventLoopGroup work = new NioEventLoopGroup(); NioEventLoopGroup work = new NioEventLoopGroup();
try { try {
@@ -39,19 +50,30 @@ public class NettyServer {
.handler(new ChannelInitializer<ServerSocketChannel>() { .handler(new ChannelInitializer<ServerSocketChannel>() {
@Override @Override
protected void initChannel(ServerSocketChannel ch) { protected void initChannel(ServerSocketChannel ch) {
System.out.println("服务正在启动中......"); System.out.println("源通讯服务正在启动中......");
} }
}) })
//业务处理 //业务处理
.childHandler(NettyServerChannelInitializer.INSTANCE); .childHandler(new ChannelInitializer<NioSocketChannel>() {
@Override
protected void initChannel(NioSocketChannel ch) {
ch.pipeline()
//空闲状态的handler
// 添加LineBasedFrameDecoder来按行分割数据
.addLast(new LineBasedFrameDecoder(10240))
.addLast(new StringDecoder(CharsetUtil.UTF_8))
.addLast(new StringEncoder(CharsetUtil.UTF_8))
.addLast(new DevNettyServerHandler());
}
});
ChannelFuture future = bootstrap.bind(port).sync(); ChannelFuture future = bootstrap.bind(port).sync();
future.addListener(f -> { future.addListener(f -> {
if (future.isSuccess()) { if (future.isSuccess()) {
System.out.println("服务启动成功"); System.out.println("源通讯服务启动成功");
} else { } else {
System.out.println("服务启动失败"); System.out.println("源通讯服务启动失败");
} }
}); });
future.channel().closeFuture().sync(); future.channel().closeFuture().sync();
@@ -63,4 +85,52 @@ public class NettyServer {
work.shutdownGracefully(); work.shutdownGracefully();
} }
} }
private void runDev() {
NioEventLoopGroup boss = new NioEventLoopGroup(1);
NioEventLoopGroup work = new NioEventLoopGroup();
try {
ServerBootstrap bootstrap = new ServerBootstrap().group(boss, work);
bootstrap.channel(NioServerSocketChannel.class)
//这个处理器可以不写
.handler(new ChannelInitializer<ServerSocketChannel>() {
@Override
protected void initChannel(ServerSocketChannel ch) {
System.out.println("设备通讯服务正在启动中......");
}
})
//业务处理
.childHandler(new ChannelInitializer<NioSocketChannel>() {
@Override
protected void initChannel(NioSocketChannel ch) {
ch.pipeline()
//空闲状态的handler
// 添加LineBasedFrameDecoder来按行分割数据
.addLast(new LineBasedFrameDecoder(10240))
.addLast(new StringDecoder(CharsetUtil.UTF_8))
.addLast(new StringEncoder(CharsetUtil.UTF_8))
.addLast(new SourceNettyServerHandler());
}
});
ChannelFuture future = bootstrap.bind(port).sync();
future.addListener(f -> {
if (future.isSuccess()) {
System.out.println("设备通讯服务启动成功");
} else {
System.out.println("设备通讯服务启动失败");
}
});
future.channel().closeFuture().sync();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
boss.shutdownGracefully();
work.shutdownGracefully();
}
}
} }

View File

@@ -23,7 +23,7 @@ public class NettyServerChannelInitializer extends ChannelInitializer<NioSocketC
// .addLast(new IdleStateHandler(10, 0, 0, TimeUnit.SECONDS)) // .addLast(new IdleStateHandler(10, 0, 0, TimeUnit.SECONDS))
.addLast(new StringDecoder(CharsetUtil.UTF_8)) .addLast(new StringDecoder(CharsetUtil.UTF_8))
.addLast(new StringEncoder(CharsetUtil.UTF_8)) .addLast(new StringEncoder(CharsetUtil.UTF_8))
.addLast(new NettyServerHandler()); .addLast(new DevNettyServerHandler());
} }

View File

@@ -1,130 +0,0 @@
package com.njcn.gather.detection.util.socket.service;
import com.alibaba.fastjson.JSONObject;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
/**
* @Description: 客户端业务处理
* @Author: wr
* @Date: 2024/12/10 14:18
*/
public class NettyServerHandler extends SimpleChannelInboundHandler<String> {
public static final NettyServerHandler INSTANCE = new NettyServerHandler();
/**
* @Description: 当通道进行连接时推送消息
* @Author: wr
* @Date: 2024/12/10 14:19
*/
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
System.out.println("服务端监听到"+ctx.channel().id()+"连接");
super.channelActive(ctx);
}
/**
* 处理消息信息
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, String msg) {
System.out.println(ctx.channel().id()+"NettyServer服务端接收到客户端消息"+msg);
Channel channel = ctx.channel();
/*
if(msg.endsWith("结束")) {
channel.writeAndFlush("socket指令结果"+msg);
for (int i = 0; i < 5; i++) {
channel.writeAndFlush("socket指令结果"+msg);
}
}else{
channel.writeAndFlush("socket指令结果成功指令");
}*/
if(!msg.contains("HeartBeat")){
if(msg.contains("start")){
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("requestId","yjc_ytxjy");
jsonObject1.put("operateCode","INIT_GATHER");
jsonObject1.put("code","10201");
channel.writeAndFlush(jsonObject1.toJSONString()+'\n');
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("requestId","yjc_ytxjy");
jsonObject.put("operateCode","INIT_GATHER");
jsonObject.put("code","10200");
channel.writeAndFlush(jsonObject.toJSONString()+'\n');
}else if(msg.contains("YJC_xujy")){
JSONObject jsonObject = new JSONObject();
jsonObject.put("requestId","YJC_xujy");
jsonObject.put("operateCode","OPER_GATHER");
jsonObject.put("code","10201");
channel.writeAndFlush(jsonObject.toJSONString()+'\n');
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("requestId","YJC_xujy");
jsonObject1.put("operateCode","OPER_GATHER");
jsonObject1.put("code","10200");
channel.writeAndFlush(jsonObject1.toJSONString()+'\n');
}
}
}
@Override
public void handlerAdded(ChannelHandlerContext ctx) {
System.out.println("有新连接加入了++++......" + ctx.channel());
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
cause.printStackTrace();
ctx.close();
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
// Client disconnected, close the server-side channel too
System.out.println("NettyServer服务端监听到"+ctx.channel().id()+"关闭连接");
ctx.close(); // This will trigger the close event on the server side
super.channelInactive(ctx);
}
/**
* 用户事件的回调方法(自定义事件用于心跳机制)
*/
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
//空闲状态的事件
// if (evt instanceof IdleStateEvent) {
// IdleStateEvent event = (IdleStateEvent) evt;
// System.out.println(event.state() + ">>>" + ctx.channel().id());
// //已经10秒钟没有读时间了
// if (event.state().equals(IdleState.READER_IDLE)){
// // 心跳包丢失10秒没有收到客户端心跳 (断开连接)
// ctx.channel().close().sync();
// System.out.println("已与 "+ctx.channel().remoteAddress()+" 断开连接");
// }
// }
}
}

View File

@@ -0,0 +1,133 @@
package com.njcn.gather.detection.util.socket.service;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
import com.njcn.gather.detection.pojo.vo.SocketDataMsg;
import com.njcn.gather.detection.util.socket.MsgUtil;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
/**
* @Description: 客户端业务处理
* @Author: wr
* @Date: 2024/12/10 14:18
*/
public class SourceNettyServerHandler extends SimpleChannelInboundHandler<String> {
private final String DEV = "_Dev";
private final String source = "_Source";
private final String stepTag = "&&";
private final String stepBegin = "_Start";
private final String stepEnd = "_End";
public static final SourceNettyServerHandler INSTANCE = new SourceNettyServerHandler();
/**
* @Description: 当通道进行连接时推送消息
* @Author: wr
* @Date: 2024/12/10 14:19
*/
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
System.out.println("服务端监听到" + ctx.channel().id() + "连接");
super.channelActive(ctx);
}
/**
* 处理消息信息
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, String msg) {
System.out.println(ctx.channel().id() + "NettyServer服务端接收到客户端消息" + msg);
Channel channel = ctx.channel();
SocketDataMsg socketDataMsg = MsgUtil.socketDataMsg(msg);
String[] tem = socketDataMsg.getRequestId().split(stepTag);
SourceOperateCodeEnum enumByCode = SourceOperateCodeEnum.getDictDataEnumByCode(tem[0]);
JSONObject jsonObject1 = new JSONObject();
if (ObjectUtil.isNotNull(enumByCode)) {
switch (enumByCode) {
//源初始化
case YJC_YTXJY:
String aa = "{\"requestId\":\"yjc_ytxjy\",\"operateCode\":\"INIT_GATHER\",\"data\":null,\"code\":10201}";
String bb = "{\"requestId\":\"yjc_ytxjy\",\"operateCode\":\"INIT_GATHER\",\"data\":null,\"code\":10200}";
channel.writeAndFlush(aa+"/n");
channel.writeAndFlush(bb+"/n");
break;
//相序检测
case YJC_XUJY:
String hh = "{\"requestId\":\"YJC_xujy\",\"operateCode\":\"OPER_GATHER\",\"data\":null,\"code\":10201}";
String ii = "{\"requestId\":\"YJC_xujy\",\"operateCode\":\"OPER_GATHER\",\"data\":null,\"code\":10200}";
channel.writeAndFlush(hh+"\n");
channel.writeAndFlush(ii+"\n");
break;
//正式检测
case FORMAL_REAL:
break;
//系数校验
case Coefficient_Check:
String a = "{\"requestId\":\"Coefficient_Check\",\"operateCode\":\"OPER_GATHER\",\"data\":null,\"code\":10201}";
String b= "{\"requestId\":\"Coefficient_Check\",\"operateCode\":\"OPER_GATHER\",\"data\":null,\"code\":10200}";
break;
case QUITE_SOURCE:
break;
case YXT:
jsonObject1.put("requestId", "yjc_ytxjy");
jsonObject1.put("operateCode", "INIT_GATHER");
jsonObject1.put("code", "10201");
channel.writeAndFlush(jsonObject1.toJSONString() + '\n');
break;
}
} else {
System.out.println("未知异常" + enumByCode);
}
}
@Override
public void handlerAdded(ChannelHandlerContext ctx) {
System.out.println("有新连接加入了++++......" + ctx.channel());
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
cause.printStackTrace();
ctx.close();
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
// Client disconnected, close the server-side channel too
System.out.println("NettyServer服务端监听到" + ctx.channel().id() + "关闭连接");
ctx.close(); // This will trigger the close event on the server side
super.channelInactive(ctx);
}
/**
* 用户事件的回调方法(自定义事件用于心跳机制)
*/
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
//空闲状态的事件
// if (evt instanceof IdleStateEvent) {
// IdleStateEvent event = (IdleStateEvent) evt;
// System.out.println(event.state() + ">>>" + ctx.channel().id());
// //已经10秒钟没有读时间了
// if (event.state().equals(IdleState.READER_IDLE)){
// // 心跳包丢失10秒没有收到客户端心跳 (断开连接)
// ctx.channel().close().sync();
// System.out.println("已与 "+ctx.channel().remoteAddress()+" 断开连接");
// }
// }
}
}

View File

@@ -15,6 +15,8 @@ import io.netty.util.CharsetUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/** /**
* @Description: 泛型 代表的是处理数据的单位 * @Description: 泛型 代表的是处理数据的单位
@@ -58,10 +60,12 @@ public class WebSocketHandler extends SimpleChannelInboundHandler<TextWebSocketF
//正常的TEXT消息类型 //正常的TEXT消息类型
TextWebSocketFrame frame = (TextWebSocketFrame) msg; TextWebSocketFrame frame = (TextWebSocketFrame) msg;
//log.info("webSocket服务器收到客户端心跳信息{}", frame.text()); //log.info("webSocket服务器收到客户端心跳信息{}", frame.text());
/*if ("alive".equals(frame.text())) { if ("alive".equals(frame.text())) {
//System.out.println("webSocket心跳收到时间………………………………………………………………"+LocalDateTime.now());
times = 0;
TextWebSocketFrame wd = new TextWebSocketFrame("over"); TextWebSocketFrame wd = new TextWebSocketFrame("over");
ctx.writeAndFlush(wd); ctx.channel().writeAndFlush(wd);
}*/ }
} }
super.channelRead(ctx, msg); super.channelRead(ctx, msg);
@@ -133,11 +137,12 @@ public class WebSocketHandler extends SimpleChannelInboundHandler<TextWebSocketF
switch (event.state()) { switch (event.state()) {
case READER_IDLE: case READER_IDLE:
eventDesc = "读空闲"; eventDesc = "读空闲";
System.out.println(ctx.channel().remoteAddress() + "发生超时事件--" + eventDesc); System.out.println("c端心跳检测发生超时事件--" + eventDesc);
times++; times++;
if (times > 3) { if (times > 3) {
System.out.println("空闲次数超过三次 关闭连接"); System.out.println("c端心跳检测空闲次数超过三次 关闭连接");
ctx.channel().close(); ctx.channel().close();
WebServiceManager.removeChannel(ctx.channel().id().toString());
} }
break; break;
case WRITER_IDLE: case WRITER_IDLE:
@@ -153,12 +158,6 @@ public class WebSocketHandler extends SimpleChannelInboundHandler<TextWebSocketF
} }
/**
* 推送数据至前台
*/
public void sendMsgToUser(String userId, String msg) {
WebServiceManager.sendMsg(userId, msg);
}
@Override @Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {

View File

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.gather.detection.pojo.enums.DetectionCodeEnum; import com.njcn.gather.detection.pojo.enums.DetectionCodeEnum;
import com.njcn.gather.script.mapper.PqScriptCheckDataMapper; import com.njcn.gather.script.mapper.PqScriptCheckDataMapper;
import com.njcn.gather.script.pojo.param.PqScriptCheckDataParam; import com.njcn.gather.script.pojo.param.PqScriptCheckDataParam;
@@ -81,6 +83,9 @@ public class PqScriptCheckDataServiceImpl extends ServiceImpl<PqScriptCheckDataM
.eq(PqScriptCheckData::getScriptId, scriptId) .eq(PqScriptCheckData::getScriptId, scriptId)
.eq(PqScriptCheckData::getEnable, DataStateEnum.ENABLE.getCode()); .eq(PqScriptCheckData::getEnable, DataStateEnum.ENABLE.getCode());
List<PqScriptCheckData> pqScriptCheckData = this.baseMapper.selectList(queryWrapper); List<PqScriptCheckData> pqScriptCheckData = this.baseMapper.selectList(queryWrapper);
if(CollUtil.isEmpty(pqScriptCheckData)){
throw new BusinessException(CommonResponseEnum.FAIL,"测试脚本项暂无配置");
}
List<String> valueTypeList = pqScriptCheckData.stream().map(PqScriptCheckData::getValueType).distinct().collect(Collectors.toList()); List<String> valueTypeList = pqScriptCheckData.stream().map(PqScriptCheckData::getValueType).distinct().collect(Collectors.toList());
LambdaQueryWrapper<DictTree> dictTreeLambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<DictTree> dictTreeLambdaQueryWrapper = new LambdaQueryWrapper<>();
dictTreeLambdaQueryWrapper.in(DictTree::getId,valueTypeList).eq(DictTree::getState,DataStateEnum.DELETED.getCode()); dictTreeLambdaQueryWrapper.in(DictTree::getId,valueTypeList).eq(DictTree::getState,DataStateEnum.DELETED.getCode());