加固代码提交

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;
import com.alibaba.fastjson.JSON;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
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.vo.SocketMsg;
import com.njcn.gather.detection.service.PreDetectionService;
import com.njcn.gather.detection.service.impl.DetectionServiceImpl;
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.service.IPqDevService;
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.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -42,6 +52,8 @@ public class PreDetectionController extends BaseController {
private final IPqDevService iPqDevService;
private final SocketDevResponseService socketDevResponseService;
@@ -113,104 +125,24 @@ public class PreDetectionController extends BaseController {
String methodDescribe = getMethodDescribe("startTest");
//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());
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);
}

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.enums.SourceOperateCodeEnum;
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.po.DevData;
import com.njcn.gather.detection.pojo.po.SourceCompareDev;
@@ -142,12 +143,13 @@ public class SocketDevResponseService {
case QUITE:
quitDeal(socketDataMsg, param, msg);
break;
case YXT:
break;
}
}
//用于存储所有测点的试试数据
private final List<DevData> realDataXiList = new ArrayList<>();
/**
* 系数校验
@@ -161,6 +163,39 @@ public class SocketDevResponseService {
switch (Objects.requireNonNull(sourceOperateCodeEnum)) {
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;
case DATA_CHNFACTOR$02:
@@ -183,7 +218,6 @@ public class SocketDevResponseService {
//为空则认为所有装置都已经下发,开始进行小电压的申请,步骤进行+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.small_start.getValue(), XiNumberManager.devParameterList.get(1));
System.out.println("第一步结束开始配置小电压电流参数下发给源----------------------");
@@ -200,7 +234,7 @@ public class SocketDevResponseService {
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, JSON.toJSONString(xiSocket));
XiNumberManager.stepNumber = 2;
}
realDataXiList.clear();
FormalTestManager.realDataXiList.clear();
successComm.clear();
XiNumberManager.devXiList.clear();
}
@@ -222,7 +256,7 @@ public class SocketDevResponseService {
case COMMUNICATION_ERR:
break;
default:
break;
}
break;
case DEV_DATA_REQUEST_02:
@@ -232,195 +266,19 @@ public class SocketDevResponseService {
if (ObjectUtil.isNotNull(dictDataEnumByCode)) {
switch (dictDataEnumByCode) {
case SUCCESS:
realDataXiList.add(devData);
FormalTestManager.realDataXiList.add(devData);
successComm.add(devData.getId());
System.out.println(successComm.size() + " ==" + FormalTestManager.monitorIdListComm.size() + "realDataXiList:" + realDataXiList.size() + "当前步骤" + XiNumberManager.stepNumber);
System.out.println(successComm.size() + " ==" + FormalTestManager.monitorIdListComm.size() + "FormalTestManager.realDataXiList:" + FormalTestManager.realDataXiList.size() + "当前步骤" + XiNumberManager.stepNumber);
if (successComm.size() == FormalTestManager.monitorIdListComm.size()) {
System.out.println("从装置中已经完成获取原始数据,准备开始计算----------------------");
//获取数据流程结束,先把所有数据存到内存中
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");
processData(param,xiSocket);
}
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;
case UNPROCESSED_BUSINESS:
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
break;
case NORMAL_RESPONSE:
realDataXiList.add(devData);
FormalTestManager.realDataXiList.add(devData);
break;
default:
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个数
if (deList.size() >= 10) {
@@ -494,12 +567,12 @@ public class SocketDevResponseService {
coefficientVO.setCIeData(String.valueOf(optionalIC));
if (XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 1) {
Integer aXi = (int) ((2 - (optionalA / devParameter.getDevVolt())) * 10000);
Integer bXi = (int) ((2 - (optionalB / devParameter.getDevVolt())) * 10000);
Integer cXi = (int) ((2 - (optionalC / devParameter.getDevVolt())) * 10000);
Integer aIXi = (int) ((2 - (optionalIA / devParameter.getDevCurr())) * 10000);
Integer bIXi = (int) ((2 - (optionalIB / devParameter.getDevCurr())) * 10000);
Integer cIXi = (int) ((2 - (optionalIC / devParameter.getDevCurr())) * 10000);
Integer aXi = (int) (devParameter.getDevVolt() * startF.getF().getUa_gain() / optionalA);
Integer bXi = (int) (devParameter.getDevVolt() * startF.getF().getUb_gain() / optionalB);
Integer cXi = (int) (devParameter.getDevVolt() * startF.getF().getUc_gain() / optionalC);
Integer aIXi = (int) (devParameter.getDevCurr() * startF.getF().getIa_gain() / optionalIA);
Integer bIXi = (int) (devParameter.getDevCurr() * startF.getF().getIb_gain() / optionalIB);
Integer cIXi = (int) (devParameter.getDevCurr() * startF.getF().getIc_gain() / optionalIC);
coefficientVO.setAVuXi(aXi.toString());
coefficientVO.setBVuXi(bXi.toString());
@@ -515,7 +588,7 @@ public class SocketDevResponseService {
F.setIb_gain(bIXi);
F.setIc_gain(cIXi);
} else {
double vLimit = 0.1 * devParameter.getDevVolt() / 100;
double vLimit = 0.1 / 100 * devParameter.getDevVolt();
double iLimit = 0.005;
coefficientVO.setAVuXi(isWithinTenPercent(optionalA, 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.setDesc(null);
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO));
@@ -864,10 +937,17 @@ public class SocketDevResponseService {
webSocketVO.setData(XiNumberManager.devParameterList.get(0));
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO));
//下发命令获取所有装置通道系数,首先需要获取所有装置,通过所有装置下发获取系数命令,目前只支持单台装置获取系数
socketMsg.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue());
socketMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
socketMsg.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(0)));
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, JSON.toJSONString(socketMsg));
socketMsg.setOperateCode(SourceOperateCodeEnum.DATA_CHNFACTOR$01.getValue());
PreDetection preDetection = XiNumberManager.xiDevList.get(0);
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.devXiList.clear();
@@ -919,11 +999,11 @@ public class SocketDevResponseService {
switch (Objects.requireNonNull(dictDataEnumByCode)) {
case SUCCESS:
realDataXiList.add(devData);
FormalTestManager.realDataXiList.add(devData);
successComm.add(devData.getId());
if (SocketManager.clockMap.containsKey(sourceIssue.getIndex())) {
SocketManager.clockMap.put(sourceIssue.getIndex(), 0L);
// SocketManager.clockMap.put(sourceIssue.getIndex(), 0L);
}
if (successComm.size() == FormalTestManager.monitorIdListComm.size()) {
@@ -931,10 +1011,10 @@ public class SocketDevResponseService {
//修改装置为监测中
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);
@@ -973,7 +1053,7 @@ public class SocketDevResponseService {
FormalTestManager.stopTime = 0;
FormalTestManager.hasStopFlag = true;
successComm.clear();
realDataXiList.clear();
FormalTestManager.realDataXiList.clear();
sendWebSocket(param.getUserPageId(), "preStopTest", "stop", null);
return;
}
@@ -1002,7 +1082,7 @@ public class SocketDevResponseService {
CnSocketUtil.quitSend(param);
}
successComm.clear();
realDataXiList.clear();
FormalTestManager.realDataXiList.clear();
}
break;
@@ -1011,7 +1091,7 @@ public class SocketDevResponseService {
break;
case NORMAL_RESPONSE:
realDataXiList.add(devData);
FormalTestManager.realDataXiList.add(devData);
break;
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:
//关闭所有
SocketManager.removeUser(s);
CnSocketUtil.quitSendSource(param);
// CnSocketUtil.quitSendSource(param);
break;
case QUIT_INIT_02:
socketMsg.setRequestId(SourceOperateCodeEnum.QUITE.getValue());
@@ -1309,7 +1424,7 @@ public class SocketDevResponseService {
*/
public void initRestart() {
this.successComm.clear();
this.realDataXiList.clear();
FormalTestManager.realDataXiList.clear();
}
@@ -1330,7 +1445,7 @@ public class SocketDevResponseService {
//初始化相序集合
this.devInfo.clear();
this.devDataMap.clear();
this.realDataXiList.clear();
FormalTestManager.realDataXiList.clear();
this.targetTestMap.clear();
List<PreDetection> pqDevList = iPqDevService.getDevInfo(param.getDevIds());
@@ -1493,9 +1608,7 @@ public class SocketDevResponseService {
Class<AdHarmonicResult> example = (Class<AdHarmonicResult>) adHarmonicResult.getClass();
for (int i = 2; i <= 50; i++) {
// 通过反射设置name字段的值
try {
// 假设这些字段已经以正确的方式定义在AdHarmonicResult类中
Field aField = example.getDeclaredField("aValue" + i);
Field bField = example.getDeclaredField("bValue" + i);
Field cField = example.getDeclaredField("cValue" + i);
@@ -1552,9 +1665,7 @@ public class SocketDevResponseService {
private LocalDateTime timeFormat(String dateTimeStr, DateTimeFormatter formatter) {
try {
// 假设输入是UTC时间将其解析为ZonedDateTime
ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateTimeStr, formatter.withZone(ZoneId.of("UTC")));
// 将ZonedDateTime转换为LocalDateTime去除时区信息
LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
return localDateTime;
} 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.SocketMsg;
import com.njcn.gather.detection.pojo.vo.WebSocketVO;
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 com.njcn.gather.detection.util.socket.WebServiceManager;
import com.njcn.gather.detection.util.socket.*;
import com.njcn.gather.detection.util.socket.cilent.NettyClient;
import com.njcn.gather.detection.util.socket.cilent.NettyDevClientHandler;
import com.njcn.gather.device.pojo.vo.PreDetection;
@@ -83,7 +80,6 @@ public class SocketSourceResponseService {
break;
case YXT:
break;
}
} else {
System.out.println("fggggggggggggggggggggg" + enumByCode);
@@ -116,7 +112,6 @@ public class SocketSourceResponseService {
socketMsg.setData(JSON.toJSONString(phaseSequenceParam));
SocketManager.sendMsg(s, JSON.toJSONString(socketMsg));
break;
case UNPROCESSED_BUSINESS:
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
@@ -166,6 +161,7 @@ public class SocketSourceResponseService {
case SOURCE_CONNECTION_ERROR:
CnSocketUtil.quitSendSource(param);
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
break;
case CONTROLLED_SOURCE_ERROR:
CnSocketUtil.quitSendSource(param);
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
@@ -361,6 +357,7 @@ public class SocketSourceResponseService {
this.monitorIdList = devList.stream().flatMap(x -> x.getMonitorList().stream())
.map(PreDetection.MonitorListDTO::getLineId)
.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.SocketManager;
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.enums.DevResponseEnum;
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.script.pojo.param.PqScriptCheckDataParam;
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 io.netty.channel.Channel;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
@Slf4j
public class PreDetectionServiceImpl implements PreDetectionService {
private final String source = "_Source";
@@ -62,10 +68,10 @@ public class PreDetectionServiceImpl implements PreDetectionService {
private final SocketSourceResponseService socketSourceResponseService;
private final IPqScriptCheckDataService iPqScriptCheckDataService;
@Value("${socket.source.ip:192.168.1.136}")
@Value("${socket.source.ip:192.168.1.138}")
private String ip;
@Value("${socket.source.port:10086}")
@Value("${socket.source.port:61000}")
private Integer port;
private final SocketSourceResponseService sourceResponseService;
@@ -138,12 +144,11 @@ public class PreDetectionServiceImpl implements PreDetectionService {
//开始组装socket报文请求头
socketDevResponseService.initList(param);
socketSourceResponseService.initList(param);
SocketMsg<String> msg = new SocketMsg<>();
msg.setRequestId(SourceOperateCodeEnum.YJC_YTXJY.getValue());
msg.setOperateCode(SourceOperateCodeEnum.INIT_GATHER.getValue());
msg.setData(JSON.toJSONString(sourceParam));
NettyClient.socketClient(ip, port, param, JSON.toJSONString(msg), new NettySourceClientHandler(param, sourceResponseService));
SocketMsg<String> socketMsg = new SocketMsg<>();
socketMsg.setRequestId(SourceOperateCodeEnum.YJC_YTXJY.getValue());
socketMsg.setOperateCode(SourceOperateCodeEnum.INIT_GATHER.getValue());
socketMsg.setData(JSON.toJSONString(sourceParam));
NettyClient.socketClient(ip, port, param, JSON.toJSONString(socketMsg), new NettySourceClientHandler(param, sourceResponseService));
} else {
throw new BusinessException(DetectionResponseEnum.SOURCE_INFO_NOT);
}
@@ -170,6 +175,7 @@ public class PreDetectionServiceImpl implements PreDetectionService {
@Override
public boolean restartTemTest(PreDetectionParam param) {
FormalTestManager.stopFlag = false;
socketDevResponseService.initRestart();
List<SourceIssue> sourceIssueList = SocketManager.getSourceList();
if (CollUtil.isNotEmpty(sourceIssueList)) {
SourceIssue sourceIssues = SocketManager.getSourceList().get(0);
@@ -199,23 +205,29 @@ public class PreDetectionServiceImpl implements PreDetectionService {
*/
private void specialDeal(PreDetectionParam param) {
Channel channel = SocketManager.getChannelByUserId(param.getUserPageId() + source);
Channel channelDev = SocketManager.getChannelByUserId(param.getUserPageId() + dev);
if (Objects.nonNull(channel) && channel.isActive()) {
System.out.println("进入关闭源。。//////");
System.out.println("发送关闭源指令。。。。。。。。");
CnSocketUtil.quitSendSource(param);
}
if(Objects.nonNull(channelDev) && channelDev.isActive()){
System.out.println("发送关闭设备通讯指令。。。。。。。。");
CnSocketUtil.quitSend(param);
}
try {
Thread.sleep(2000);
Thread.sleep(4000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
log.error(e.getMessage());
}
SocketManager.removeUser(param.getUserPageId() + source);
SocketManager.removeUser(param.getUserPageId() + dev);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
log.error(e.getMessage());
}
}

View File

@@ -1,5 +1,6 @@
package com.njcn.gather.detection.util.socket;
import com.njcn.gather.detection.pojo.po.DevData;
import com.njcn.gather.device.pojo.vo.PreDetection;
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();
while (iterator.hasNext()) {
Map.Entry<String, Channel> entry = iterator.next();
if (entry.getValue().id().equals(channelId)) {
if (entry.getValue().id().toString().equals(channelId)) {
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.vo.CoefficientVO;
import com.njcn.gather.device.pojo.vo.PreDetection;
import com.njcn.gather.script.pojo.po.SourceIssue;
import java.util.ArrayList;
@@ -27,7 +28,7 @@ public class XiNumberManager {
public static List<String> devXiList = new ArrayList<>();
/**
* 存储所有测点的大电压系数
* 最开始存储装置通道原始系数,后续存储大电压计算出来的系数
*/
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
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) {
NioEventLoopGroup group = new NioEventLoopGroup();
Bootstrap bootstrap = new Bootstrap();
@@ -46,18 +49,21 @@ public class NettyClient {
//空闲状态的handler
// 添加LineBasedFrameDecoder来按行分割数据
.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 StringEncoder(CharsetUtil.UTF_8))
.addLast(new HeartbeatHandler(param,source))
.addLast(handler);
} else {
ch.pipeline()
//空闲状态的handler
// 添加LineBasedFrameDecoder来按行分割数据
.addLast(new LineBasedFrameDecoder(10240))
.addLast(new IdleStateHandler(60, 0, 0, TimeUnit.SECONDS))
.addLast(new StringDecoder(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);
}
@@ -69,7 +75,7 @@ public class NettyClient {
System.out.println("链接服务端失败...");
} else {
System.out.println("链接服务端成功...");
System.out.println("客户端向服务端发送消息:"+msg);
System.out.println("客户端向服务端发送消息:"+port+msg);
channelFuture.channel().writeAndFlush(msg+"\n");
}
});
@@ -78,9 +84,9 @@ public class NettyClient {
groupByUserId.shutdownGracefully();
}else{
if (handler instanceof NettySourceClientHandler) {
SocketManager.addGroup(param.getUserPageId()+"_Source",group);
SocketManager.addGroup(param.getUserPageId()+source,group);
}else{
SocketManager.addGroup(param.getUserPageId()+"_Dev",group);
SocketManager.addGroup(param.getUserPageId()+dev,group);
}
}
} 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.param.PreDetectionParam;
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.util.socket.*;
import com.njcn.gather.device.pojo.vo.PreDetection;
@@ -22,9 +24,12 @@ import lombok.RequiredArgsConstructor;
import java.io.IOException;
import java.net.ConnectException;
import java.net.ProtocolException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
@@ -102,6 +107,7 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
Boolean fly = false;
if (evt instanceof IdleStateEvent) {
if (((IdleStateEvent) evt).state() == IdleState.READER_IDLE) {
System.out.println(LocalDateTime.now() + "devHandler触发读超时函数**************************************");
if (!FormalTestManager.hasStopFlag) {
if (CollUtil.isNotEmpty(SocketManager.getSourceList())) {
SourceIssue sourceIssue = SocketManager.getSourceList().get(0);
@@ -127,7 +133,6 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
System.out.println("超时处理-----》" + sourceIssue.getType() + "已超时----------------关闭");
timeoutSend(sourceIssue);
}
} else {
//实时数据
if (SocketManager.clockMap.get(sourceIssue.getIndex()) > 60) {
@@ -145,7 +150,6 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
if (fly) {
socketResponseService.backCheckState(param);
}
System.out.println("已经等了一分钟了。。。。。。。。。。。。");
} else {
//如果是暂停操作后
FormalTestManager.stopTime += 60;
@@ -162,8 +166,6 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
}
@Override
public void handlerAdded(ChannelHandlerContext ctx) {
System.out.println("有通道准备接入" + ctx.channel());
@@ -206,7 +208,24 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
/**
*
* 发送业务消息时候开启计时器,
* @param requestId
*/
/* 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<>();

View File

@@ -95,11 +95,11 @@ public class NettySourceClientHandler extends SimpleChannelInboundHandler<String
if (evt instanceof IdleStateEvent) {
if (((IdleStateEvent) evt).state() == IdleState.WRITER_IDLE) {
//发送ping 保持心跳链接
SocketMsg msg = new SocketMsg();
/* SocketMsg<String> msg = new SocketMsg<>();
msg.setRequestId("yxt");
msg.setOperateCode(SourceOperateCodeEnum.HEARTBEAT.getValue());
msg.setData("");
ctx.writeAndFlush(JSON.toJSONString(msg)+"\n");
ctx.writeAndFlush(JSON.toJSONString(msg)+"\n");*/
}
} else {
//防止堆栈溢出
@@ -126,6 +126,7 @@ public class NettySourceClientHandler extends SimpleChannelInboundHandler<String
} else if (cause instanceof IOException) {
// 处理I/O异常例如读写错误
CnSocketUtil.sendToWebSocket(webUser.getUserPageId(),SourceOperateCodeEnum.SERVER_ERROR.getValue(),SourceOperateCodeEnum.SERVER_ERROR.getValue(),SourceOperateCodeEnum.SERVER_ERROR.getMsg(),null );
// 例如可以记录更详细的I/O错误信息
} 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.socket.ServerSocketChannel;
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) {
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 work = new NioEventLoopGroup();
try {
@@ -39,19 +50,30 @@ public class NettyServer {
.handler(new ChannelInitializer<ServerSocketChannel>() {
@Override
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();
future.addListener(f -> {
if (future.isSuccess()) {
System.out.println("服务启动成功");
System.out.println("源通讯服务启动成功");
} else {
System.out.println("服务启动失败");
System.out.println("源通讯服务启动失败");
}
});
future.channel().closeFuture().sync();
@@ -63,4 +85,52 @@ public class NettyServer {
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 StringDecoder(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 org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* @Description: 泛型 代表的是处理数据的单位
@@ -58,10 +60,12 @@ public class WebSocketHandler extends SimpleChannelInboundHandler<TextWebSocketF
//正常的TEXT消息类型
TextWebSocketFrame frame = (TextWebSocketFrame) msg;
//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");
ctx.writeAndFlush(wd);
}*/
ctx.channel().writeAndFlush(wd);
}
}
super.channelRead(ctx, msg);
@@ -133,11 +137,12 @@ public class WebSocketHandler extends SimpleChannelInboundHandler<TextWebSocketF
switch (event.state()) {
case READER_IDLE:
eventDesc = "读空闲";
System.out.println(ctx.channel().remoteAddress() + "发生超时事件--" + eventDesc);
System.out.println("c端心跳检测发生超时事件--" + eventDesc);
times++;
if (times > 3) {
System.out.println("空闲次数超过三次 关闭连接");
System.out.println("c端心跳检测空闲次数超过三次 关闭连接");
ctx.channel().close();
WebServiceManager.removeChannel(ctx.channel().id().toString());
}
break;
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
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.github.yulichang.wrapper.MPJLambdaWrapper;
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.script.mapper.PqScriptCheckDataMapper;
import com.njcn.gather.script.pojo.param.PqScriptCheckDataParam;
@@ -81,6 +83,9 @@ public class PqScriptCheckDataServiceImpl extends ServiceImpl<PqScriptCheckDataM
.eq(PqScriptCheckData::getScriptId, scriptId)
.eq(PqScriptCheckData::getEnable, DataStateEnum.ENABLE.getCode());
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());
LambdaQueryWrapper<DictTree> dictTreeLambdaQueryWrapper = new LambdaQueryWrapper<>();
dictTreeLambdaQueryWrapper.in(DictTree::getId,valueTypeList).eq(DictTree::getState,DataStateEnum.DELETED.getCode());