加固代码提交
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
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();
|
||||
});
|
||||
}
|
||||
|
||||
processData(param,xiSocket);
|
||||
}
|
||||
|
||||
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());
|
||||
@@ -1274,7 +1389,7 @@ public class SocketDevResponseService {
|
||||
|
||||
/**
|
||||
* 判断相角(-180° ~ 180°)
|
||||
* (+360° ~ -360°)
|
||||
* (+360° ~ -360°)
|
||||
*
|
||||
* @param channelListDTO 源下发角度
|
||||
* @param devPhase 装置返回角度
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
SocketManager.removeUser(param.getUserPageId() + source);
|
||||
SocketManager.removeUser(param.getUserPageId() + dev);
|
||||
try {
|
||||
Thread.sleep(4000);
|
||||
} catch (InterruptedException e) {
|
||||
log.error(e.getMessage());
|
||||
}
|
||||
|
||||
try {
|
||||
Thread.sleep(2000);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
SocketManager.removeUser(param.getUserPageId() + source);
|
||||
SocketManager.removeUser(param.getUserPageId() + dev);
|
||||
|
||||
try {
|
||||
Thread.sleep(2000);
|
||||
} catch (InterruptedException e) {
|
||||
log.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<>();
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<>();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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,7 +107,8 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
|
||||
Boolean fly = false;
|
||||
if (evt instanceof IdleStateEvent) {
|
||||
if (((IdleStateEvent) evt).state() == IdleState.READER_IDLE) {
|
||||
if(!FormalTestManager.hasStopFlag) {
|
||||
System.out.println(LocalDateTime.now() + "devHandler触发读超时函数**************************************");
|
||||
if (!FormalTestManager.hasStopFlag) {
|
||||
if (CollUtil.isNotEmpty(SocketManager.getSourceList())) {
|
||||
SourceIssue sourceIssue = SocketManager.getSourceList().get(0);
|
||||
if (SocketManager.clockMap.containsKey(sourceIssue.getIndex())) {
|
||||
@@ -114,7 +120,7 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
|
||||
if (sourceIssue.getType().equals(DicDataEnum.F.getCode())) {
|
||||
//闪变,正常抛一轮最大等待20分钟超时
|
||||
if (SocketManager.clockMap.get(sourceIssue.getIndex()) > 1300) {
|
||||
fly=true;
|
||||
fly = true;
|
||||
System.out.println("超时处理-----》" + sourceIssue.getType() + "已超时----------------关闭");
|
||||
CnSocketUtil.quitSend(param);
|
||||
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())) {
|
||||
//统计数据项,正常抛一轮数据,超时
|
||||
if (SocketManager.clockMap.get(sourceIssue.getIndex()) > 180) {
|
||||
fly=true;
|
||||
fly = true;
|
||||
CnSocketUtil.quitSend(param);
|
||||
System.out.println("超时处理-----》" + sourceIssue.getType() + "已超时----------------关闭");
|
||||
timeoutSend(sourceIssue);
|
||||
}
|
||||
|
||||
} else {
|
||||
//实时数据
|
||||
if (SocketManager.clockMap.get(sourceIssue.getIndex()) > 60) {
|
||||
fly=true;
|
||||
fly = true;
|
||||
CnSocketUtil.quitSend(param);
|
||||
System.out.println("超时处理-----》" + sourceIssue.getType() + "已超时----------------关闭");
|
||||
timeoutSend(sourceIssue);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
fly=true;
|
||||
fly = true;
|
||||
//为空则认为是常规步骤,设定一分钟超时
|
||||
CnSocketUtil.quitSend(param);
|
||||
}
|
||||
if(fly){
|
||||
if (fly) {
|
||||
socketResponseService.backCheckState(param);
|
||||
}
|
||||
System.out.println("已经等了一分钟了。。。。。。。。。。。。");
|
||||
}else {
|
||||
} else {
|
||||
//如果是暂停操作后
|
||||
FormalTestManager.stopTime+=60;
|
||||
System.out.println("当前进入暂停操作超时函数-----------------"+FormalTestManager.stopTime);
|
||||
if(FormalTestManager.stopTime > 600){
|
||||
FormalTestManager.stopTime += 60;
|
||||
System.out.println("当前进入暂停操作超时函数-----------------" + FormalTestManager.stopTime);
|
||||
if (FormalTestManager.stopTime > 600) {
|
||||
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
|
||||
public void handlerAdded(ChannelHandlerContext ctx) {
|
||||
System.out.println("有通道准备接入" + ctx.channel());
|
||||
@@ -183,7 +185,7 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
|
||||
} else if (cause instanceof IOException) {
|
||||
// 处理I/O异常,例如读写错误
|
||||
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错误信息
|
||||
} 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<>();
|
||||
FormalTestManager.devList.forEach(dev -> {
|
||||
DevLineTestResult devLineTestResult = new DevLineTestResult();
|
||||
@@ -221,7 +240,7 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
|
||||
devListRes.add(devLineTestResult);
|
||||
});
|
||||
WebSocketVO<List<DevLineTestResult>> socketVO = new WebSocketVO<>();
|
||||
socketVO.setRequestId(sourceIssue.getType()+"_End");
|
||||
socketVO.setRequestId(sourceIssue.getType() + "_End");
|
||||
socketVO.setOperateCode(sourceIssue.getType());
|
||||
socketVO.setData(devListRes);
|
||||
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketVO));
|
||||
|
||||
@@ -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) {
|
||||
// 处理超时异常
|
||||
|
||||
@@ -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()+" 断开连接");
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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()+" 断开连接");
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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()+" 断开连接");
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user