diff --git a/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java b/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java index c564db5a..b774351f 100644 --- a/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java +++ b/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java @@ -68,6 +68,7 @@ public class PreDetectionController extends BaseController { @ApiOperation("开始预检测") @ApiImplicitParam(name = "param", value = "查询参数", required = true) public HttpResult startPreTest(@RequestBody PreDetectionParam param){ + System.out.println("系数校验controller进入================================22"); String methodDescribe = getMethodDescribe("startPreTest"); preDetectionService.sourceCommunicationCheck(param); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); @@ -82,6 +83,7 @@ public class PreDetectionController extends BaseController { @ApiOperation("系数校验") @ApiImplicitParam(name = "param", value = "查询参数", required = true) public HttpResult coefficientCheck(@RequestBody PreDetectionParam param){ + System.out.println("系数校验controller进入================================"); String methodDescribe = getMethodDescribe("coefficientCheck"); preDetectionService.coefficientCheck(param); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); diff --git a/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java b/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java index ea66e7ff..b7a0fd67 100644 --- a/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java +++ b/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java @@ -4,11 +4,9 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; 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; @@ -20,7 +18,6 @@ import com.njcn.gather.detection.util.socket.web.WebSocketHandler; import com.njcn.gather.device.device.pojo.vo.PreDetection; import com.njcn.gather.device.device.service.IPqDevService; import com.njcn.gather.device.script.pojo.param.PqScriptIssueParam; -import com.njcn.gather.device.script.pojo.po.PqScriptCheckData; import com.njcn.gather.device.script.pojo.po.SourceIssue; import com.njcn.gather.device.script.service.IPqScriptCheckDataService; import com.njcn.gather.device.script.service.IPqScriptDtlsService; @@ -29,11 +26,9 @@ import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult; import com.njcn.gather.storage.service.DetectionDataDealService; import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum; import com.njcn.gather.system.pojo.enums.DicDataEnum; -import com.njcn.gather.system.reg.pojo.po.SysRegRes; import com.njcn.gather.system.reg.pojo.vo.SysRegResVO; import com.njcn.gather.system.reg.service.ISysRegResService; import lombok.RequiredArgsConstructor; -import org.apache.poi.ss.formula.functions.T; import org.springframework.stereotype.Service; import java.lang.reflect.Field; @@ -74,7 +69,7 @@ public class SocketDevResponseService { private final DetectionDataDealService detectionDataDealService; private final ISysRegResService iSysRegResService; private final IPqScriptCheckDataService iPqScriptCheckDataService; - private final ExecutorService executorPool = Executors.newFixedThreadPool(5); + private final ExecutorService executorPool = Executors.newFixedThreadPool(10); /** @@ -113,18 +108,15 @@ public class SocketDevResponseService { List successXieyi = new ArrayList<>(); List successXieyi3 = new ArrayList<>(); - // List adNonHarmonicResultList = new ArrayList<>(); - //标识当前检测小项是否结束 - private Integer dtlsFlag = null; public void deal(PreDetectionParam param, String msg) throws Exception { SocketDataMsg socketDataMsg = MsgUtil.socketDataMsg(msg); String[] tem = socketDataMsg.getRequestId().split("&&"); - SourceOperateCodeEnum sourceOperateCodeEnum = SourceOperateCodeEnum.getDictDataEnumByCode(tem[0]); - switch (sourceOperateCodeEnum) { + + switch (Objects.requireNonNull(sourceOperateCodeEnum)) { //设备通讯校验 case YJC_SBTXJY: devComm(socketDataMsg, param, msg); @@ -137,7 +129,7 @@ public class SocketDevResponseService { case YJC_XUJY: devXu(param, socketDataMsg); break; - //获取实时数据 + //正式检测 case FORMAL_REAL: realDeal(param, socketDataMsg); break; @@ -155,14 +147,8 @@ public class SocketDevResponseService { } - private void xiDi(List devDataList, SourceIssue sourceIssue) { - - } - - //用于存储所有测点的试试数据 private final List realDataXiList = new ArrayList<>(); - /** * 系数校验 */ @@ -170,17 +156,17 @@ public class SocketDevResponseService { SourceOperateCodeEnum sourceOperateCodeEnum = SourceOperateCodeEnum.getDictDataEnumByCode(socketDataMsg.getOperateCode()); SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); SocketMsg xiSocket = new SocketMsg<>(); + xiSocket.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); - switch (sourceOperateCodeEnum) { + switch (Objects.requireNonNull(sourceOperateCodeEnum)) { case DATA_CHNFACTOR$01: //获取系数 break; case DATA_CHNFACTOR$02: - //系数下发后的回调 - switch (dictDataEnumByCode) { + //系数下发后的响应 + switch (Objects.requireNonNull(dictDataEnumByCode)) { case SUCCESS: - xiSocket.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); if (CollUtil.isNotEmpty(XiNumberManager.devXiList)) { //单台装置系数下发后,需要删除集合中存在的当前装置 @@ -233,9 +219,10 @@ public class SocketDevResponseService { //quitSend(param); break; + case COMMUNICATION_ERR: + break; default: - } break; case DEV_DATA_REQUEST_02: @@ -243,7 +230,6 @@ public class SocketDevResponseService { String data = socketDataMsg.getData(); DevData devData = JSON.parseObject(data, DevData.class); if (ObjectUtil.isNotNull(dictDataEnumByCode)) { - SocketMsg socketMsg = new SocketMsg<>(); switch (dictDataEnumByCode) { case SUCCESS: realDataXiList.add(devData); @@ -303,9 +289,16 @@ public class SocketDevResponseService { 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("进入小电压步骤》》》》》》》》》》》》》》》》》》》》》》》》"); - if (XiNumberManager.stepNumber == 1) { //判断小电压是否系数超过大电压10% double limit = 0.1; XiNumberManager.smallDevXiNumDataMap.forEach((devIp, devXiNumDataBig) -> { @@ -326,7 +319,10 @@ public class SocketDevResponseService { boolean vc = isWithinTenPercent(smallF.getUc_gain(), bigF.getUc_gain(), limit); if (ia && ib && ic && va && vb && vc) { + } else { + + System.out.println(devIp); flag = false; //继续下发一轮 if (!ia) { @@ -364,19 +360,15 @@ public class SocketDevResponseService { //如果差距超过10%则再次下发系数 if (CollUtil.isNotEmpty(XiNumberManager.devXiList)) { - socketMsg.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); - socketMsg.setOperateCode(SourceOperateCodeEnum.DATA_CHNFACTOR$02.getValue()); - socketMsg.setData(JSON.toJSONString(XiNumberManager.devXiNumDataMap.get(XiNumberManager.devXiList.get(0)))); - SocketManager.sendMsg(param.getUserPageId() + handlerStr, JSON.toJSONString(socketMsg)); + 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.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); xiSocket.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(0))); SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xiSocket)); XiNumberManager.stepNumber = 2; @@ -386,7 +378,6 @@ public class SocketDevResponseService { } 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()); @@ -410,10 +401,10 @@ public class SocketDevResponseService { realDataXiList.add(devData); break; default: - socketMsg.setRequestId(socketDataMsg.getRequestId()); - socketMsg.setOperateCode(socketDataMsg.getOperateCode()); - socketMsg.setData(dictDataEnumByCode.getMessage()); - webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketMsg)); + xiSocket.setRequestId(socketDataMsg.getRequestId()); + xiSocket.setOperateCode(socketDataMsg.getOperateCode()); + xiSocket.setData(dictDataEnumByCode.getMessage()); + webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(xiSocket)); break; } } @@ -425,6 +416,11 @@ public class SocketDevResponseService { } + /** + * 系数校验 + */ + + /** * 比较两个数的差值,是否再limit范围内 */ @@ -464,9 +460,9 @@ public class SocketDevResponseService { coefficientVO.setCIeData(String.valueOf(optionalIC)); if (XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 1) { - Integer aXi = (int) ((optionalA / devParameter.getDevCurr()) * 10000); - Integer bXi = (int) ((optionalB / devParameter.getDevCurr()) * 10000); - Integer cXi = (int) ((optionalC / devParameter.getDevCurr()) * 10000); + Integer aXi = (int) ((optionalA / devParameter.getDevVolt()) * 10000); + Integer bXi = (int) ((optionalB / devParameter.getDevVolt()) * 10000); + Integer cXi = (int) ((optionalC / devParameter.getDevVolt()) * 10000); Integer aIXi = (int) ((optionalIA / devParameter.getDevCurr()) * 10000); Integer bIXi = (int) ((optionalIB / devParameter.getDevCurr()) * 10000); Integer cIXi = (int) ((optionalIC / devParameter.getDevCurr()) * 10000); @@ -518,10 +514,8 @@ public class SocketDevResponseService { case SUCCESS: //通讯校验成功 webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, devNameMapComm, 1)); - String mId = JSON.parseObject(msg).get("data").toString(); - successComm.add(mId); - - System.out.println(successComm.size() + "=====" + monitorIdListComm.size()); + successComm.add(socketDataMsg.getData()); + System.out.println("设备通讯校验全部成功!"+successComm.size() + "=====" + monitorIdListComm.size()); if (successComm.size() == monitorIdListComm.size()) { SocketDataMsg temMsg = new SocketDataMsg(); @@ -541,7 +535,7 @@ public class SocketDevResponseService { socketMsg.setData(jsonString); String json = JSON.toJSONString(socketMsg); - System.out.println("开始协议校验++++++++++"); + System.out.println("开始协议校验》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》"); SocketManager.sendMsg(s, json); } @@ -571,9 +565,10 @@ public class SocketDevResponseService { quitSend(param); break; default: - WebSocketVO webSocketVO = new WebSocketVO(); - - + WebSocketVO webSocketVO = new WebSocketVO<>(); + webSocketVO.setRequestId(SourceOperateCodeEnum.UNKNOWN_OPERATE.getValue()); + webSocketVO.setData(SourceOperateCodeEnum.UNKNOWN_OPERATE.getMsg()); + webSocketHandler.sendMsgToUser(param.getUserPageId(),JSON.toJSONString(webSocketVO)); break; } } @@ -592,10 +587,8 @@ public class SocketDevResponseService { if (socketDataMsg.getOperateCode().equals(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue())) { successXieyi.add(socketDataMsg.getData()); if (successXieyi.size() == monitorIdListComm.size()) { - for (String string : successXieyi) { //模拟统计协议校验,通讯校验已经校验过,模拟直接推送 - SocketDataMsg webSend = new SocketDataMsg(); webSend.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_01.getValue()); webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); @@ -604,34 +597,25 @@ public class SocketDevResponseService { webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(webSend, devNameMapComm, 1)); } - //协议3校验 - //successXieyi = new ArrayList<>(); - - List devList = iPqDevService.getDevInfo(param.getDevIds()); Map> map = new HashMap<>(1); map.put("deviceList", devList); String jsonString = JSON.toJSONString(map); socketMsg.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue()); socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_03.getValue()); socketMsg.setData(jsonString); - String json = JSON.toJSONString(socketMsg); - System.out.println("开始3协议校验++++++++++"); - SocketManager.sendMsg(s, json); - + SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); } } else if (socketDataMsg.getOperateCode().equals(SourceOperateCodeEnum.DEV_INIT_GATHER_03.getValue())) { successXieyi3.add(socketDataMsg.getData()); System.out.println(successXieyi3.size() + "=====" + monitorIdListComm.size()); if (successXieyi3.size() == monitorIdListComm.size()) { - SocketDataMsg temMsg = new SocketDataMsg(); temMsg.setCode(SourceResponseCodeEnum.DEV_COMM_ALL_SUCCESS.getCode()); temMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_03.getValue()); temMsg.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue()); webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(temMsg)); - PqScriptIssueParam issueParam = new PqScriptIssueParam(); issueParam.setPlanId(param.getPlanId()); issueParam.setSourceId(param.getSourceId()); @@ -653,23 +637,18 @@ public class SocketDevResponseService { xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + "&&" + sourceIssues.get(0).getType()); SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xuMsg)); - } else if (SourceOperateCodeEnum.PRE_TEST.getValue().equals(param.getOperateType())) { - //预检测的相序检测 + } else if (SourceOperateCodeEnum.PRE_TEST.getValue().equals(param.getOperateType()) || SourceOperateCodeEnum.COEFFICIENT_TEST.getValue().equals(param.getOperateType())) { + //预检测的相序检测 以及系数校验都需要进行相序检测 issueParam.setIsPhaseSequence(SourceOperateCodeEnum.PHASE_TEST.getValue()); xuMsg.setRequestId(SourceOperateCodeEnum.YJC_XUJY.getValue()); sourceIssues = pqScriptDtlsService.listSourceIssue(issueParam); xuMsg.setData(JSON.toJSONString(sourceIssues.get(0))); SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xuMsg)); - } else if (SourceOperateCodeEnum.COEFFICIENT_TEST.getValue().equals(param.getOperateType())) { - //系数校验 + } else { - /* issueParam.setIsPhaseSequence(SourceOperateCodeEnum.PHASE_TEST.getValue()); - xuMsg.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); - sourceIssues = pqScriptDtlsService.listSourceIssue(issueParam); - xuMsg.setData(JSON.toJSONString(sourceIssues.get(0))); - SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xuMsg));*/ - WebSocketVO webSocketVO = new WebSocketVO<>(); + + /* WebSocketVO webSocketVO = new WebSocketVO<>(); webSocketVO.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); webSocketVO.setOperateCode(SourceOperateCodeEnum.big_start.getValue()); webSocketVO.setData(XiNumberManager.devParameterList.get(0)); @@ -682,7 +661,7 @@ public class SocketDevResponseService { XiNumberManager.stepNumber = 0; XiNumberManager.devXiList.clear(); XiNumberManager.devXiNumDataMap.clear(); - XiNumberManager.smallDevXiNumDataMap.clear(); + XiNumberManager.smallDevXiNumDataMap.clear();*/ //系数校验只支持单个装置修改系数 @@ -700,12 +679,10 @@ public class SocketDevResponseService { case DEV_ERROR: webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, devNameMapComm, 2)); quitSend(param); - quitSendSource(param); break; case DEV_TARGET: webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, devNameMapComm, 2)); quitSend(param); - quitSendSource(param); break; case RE_OPERATE: @@ -714,9 +691,10 @@ public class SocketDevResponseService { quitSend(param); break; default: - WebSocketVO webSocketVO = new WebSocketVO(); - - + WebSocketVO webSocketVO = new WebSocketVO<>(); + webSocketVO.setRequestId(SourceOperateCodeEnum.UNKNOWN_OPERATE.getValue()); + webSocketVO.setData(SourceOperateCodeEnum.UNKNOWN_OPERATE.getMsg()); + webSocketHandler.sendMsgToUser(param.getUserPageId(),JSON.toJSONString(webSocketVO)); break; } } @@ -728,15 +706,18 @@ public class SocketDevResponseService { public void devXu(PreDetectionParam param, SocketDataMsg socketDataMsg) { String data = socketDataMsg.getData(); DevData devData = JSON.parseObject(data, DevData.class); + SocketMsg socketMsg = new SocketMsg<>(); SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); if (ObjectUtil.isNotNull(dictDataEnumByCode)) { - SocketMsg socketMsg = new SocketMsg<>(); switch (dictDataEnumByCode) { case SUCCESS: //webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(MsgUtil.msgToWebData(socketDataMsg,devNameMapComm,1))); devInfo.add(devData); success.add(devData.getId()); + if (success.size() == monitorIdListComm.size()) { + System.out.println("相序校验接受数据完成---------"+success.size()+"__"+monitorIdListComm.size()); + PqScriptIssueParam sourceParam = new PqScriptIssueParam(); sourceParam.setPlanId(param.getPlanId()); sourceParam.setDevIds(param.getDevIds()); @@ -761,20 +742,6 @@ public class SocketDevResponseService { } } - String userSource = param.getUserPageId() + handlerSourceStr; - SocketMsg msg = new SocketMsg<>(); - - - /* msg.setRequestId(SourceOperateCodeEnum.QUITE_SOURCE.getValue()); - msg.setOperateCode(SourceOperateCodeEnum.CLOSE_GATHER.getValue()); - Map map = new HashMap<>(1); - map.put("sourceId", sourceIssues.get(0).getSourceId()); - msg.setData(JSON.toJSONString(map)); - SocketManager.sendMsg(userSource, MsgUtil.toJsonWithNewLinePlain(msg));*/ - - //同时关闭设备三个步骤 - quitSend(param); - //向前端推送消息 SocketDataMsg temMsg = new SocketDataMsg(); temMsg.setCode(SourceResponseCodeEnum.DEV_COMM_ALL_SUCCESS.getCode()); @@ -782,6 +749,31 @@ public class SocketDevResponseService { temMsg.setRequestId(SourceOperateCodeEnum.YJC_XUJY.getValue()); webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(temMsg)); + if(param.getOperateType().equals(SourceOperateCodeEnum.PRE_TEST.getValue())){ + System.out.println("预检测流程接受-----------------关闭源"); + //同时关闭设备三个步骤 + quitSend(param); + }else if(param.getOperateType().equals(SourceOperateCodeEnum.COEFFICIENT_TEST.getValue())){ + WebSocketVO webSocketVO = new WebSocketVO<>(); + webSocketVO.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); + webSocketVO.setOperateCode(SourceOperateCodeEnum.big_start.getValue()); + webSocketVO.setData(XiNumberManager.devParameterList.get(0)); + webSocketHandler.sendMsgToUser(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, MsgUtil.toJsonWithNewLinePlain(socketMsg)); + + XiNumberManager.stepNumber = 0; + XiNumberManager.devXiList.clear(); + XiNumberManager.devXiNumDataMap.clear(); + XiNumberManager.smallDevXiNumDataMap.clear(); + + System.out.println("开始系数校准》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》"); + } + } break; case UNPROCESSED_BUSINESS: @@ -804,10 +796,10 @@ public class SocketDevResponseService { case RE_OPERATE: break; default: - socketMsg.setRequestId(socketDataMsg.getRequestId()); - socketMsg.setOperateCode(socketDataMsg.getOperateCode()); - socketMsg.setData(dictDataEnumByCode.getMessage()); - webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketMsg)); + WebSocketVO webSocketVO = new WebSocketVO<>(); + webSocketVO.setRequestId(SourceOperateCodeEnum.UNKNOWN_OPERATE.getValue()); + webSocketVO.setData(SourceOperateCodeEnum.UNKNOWN_OPERATE.getMsg()); + webSocketHandler.sendMsgToUser(param.getUserPageId(),JSON.toJSONString(webSocketVO)); break; } } @@ -816,128 +808,114 @@ public class SocketDevResponseService { /** - * 实时数据 + * 正式检测 */ - - public void realDeal(PreDetectionParam param, SocketDataMsg socketDataMsg) { String data = socketDataMsg.getData(); DevData devData = JSON.parseObject(data, DevData.class); SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); - SourceIssue sourceIssue = SocketManager.getSourceList().get(0); - if (Objects.nonNull(dtlsFlag)) { - if (!sourceIssue.getIndex().equals(dtlsFlag)) { - } - } - dtlsFlag = sourceIssue.getIndex(); + switch (Objects.requireNonNull(dictDataEnumByCode)) { + case SUCCESS: + realDataXiList.add(devData); + successComm.add(socketDataMsg.getRequestId()); - realDonging(devData, dictDataEnumByCode, sourceIssue, socketDataMsg, param); + if (successComm.size() == monitorIdListComm.size()) { + //TODO 理论上遇到返回code10200的数量与监测点数量一致则认为数据返回结束,但是会存在缺失数据情况,例如有部分装置是没有暂降功能的 + System.out.println(sourceIssue.getType() + "_" + sourceIssue.getIndex() + "当前测试小项读取数据已经全部结束。。。。。。。。。"); + //开启线程进行入库原始数据操作 + baseDataInsert(realDataXiList, sourceIssue, param, SocketManager.valueTypeMap); - } + Map flag = detectionServiceImpl.text(realDataXiList, param.getErrorSysId(), devIdMapComm, sourceIssue, DictDataEnum.AT_WILL_VALUE); + System.out.println(flag); - public void realDonging(DevData devData, SourceResponseCodeEnum dictDataEnumByCode, SourceIssue sourceIssue, SocketDataMsg socketDataMsg, PreDetectionParam param) { - if (ObjectUtil.isNotNull(dictDataEnumByCode)) { - SocketMsg socketMsg = new SocketMsg<>(); - switch (dictDataEnumByCode) { - case SUCCESS: - //List sqlDataDTOList = devData.getSqlData(); - realDataXiList.add(devData); - successComm.add(socketDataMsg.getRequestId()); + long tem = SocketManager.getSourceTarget(sourceIssue.getType()) - 1; + SocketManager.addTargetMap(sourceIssue.getType(), tem); + System.out.println("该大项还有" + tem + "个小项没有进行检测!!!!!!!!"); - if (successComm.size() == monitorIdListComm.size()) { - //TODO 理论上遇到返回code10200的数量与监测点数量一致则认为数据返回结束,但是会存在缺失数据情况,例如有部分装置是没有暂降功能的 - System.out.println(sourceIssue.getType() + "_" + sourceIssue.getIndex() + "当前测试小项读取数据已经全部结束。。。。。。。。。"); + if (tem == 0) { + System.out.println(sourceIssue.getType() + sourceIssue.getIndex() + "当前测试大项已经全部结束》》》》》》》》"); - //开启线程进行入库原始数据操作 - baseDataInsert(realDataXiList, sourceIssue, param, SocketManager.valueTypeMap); - - Map flag = detectionServiceImpl.text(realDataXiList, param.getErrorSysId(), devIdMapComm, sourceIssue, DictDataEnum.AT_WILL_VALUE); - System.out.println(flag); - - long tem = SocketManager.getSourceTarget(sourceIssue.getType()) - 1; - SocketManager.addTargetMap(sourceIssue.getType(), tem); - System.out.println("该大项还有" + tem + "个小项没有进行检测!!!!!!!!"); - - if (tem == 0) { - System.out.println(sourceIssue.getType() + sourceIssue.getIndex() + "当前测试大项已经全部结束》》》》》》》》"); - - //当val为0则认为大项中的小项已经全部跑完,开始组装信息推送给前端 - WebSocketVO> webSocketVO = new WebSocketVO<>(); - webSocketVO.setRequestId(socketDataMsg.getRequestId().split("&&")[1] + "_End"); - //组装实体推送给前台 - List devListRes = new ArrayList<>(); - devList.forEach(dev -> { - DevLineTestResult devLineTestResult = new DevLineTestResult(); - devLineTestResult.setDeviceId(dev.getDevId()); - devLineTestResult.setDeviceName(dev.getDevName()); - - List resultFlagList = new ArrayList<>(); - List monitorListDTOList = dev.getMonitorList(); - for (PreDetection.MonitorListDTO point : monitorListDTOList) { - Integer resultFlag = flag.get(dev.getDevIP() + "_" + point.getLine()); - resultFlagList.add(resultFlag); - } - devLineTestResult.setChnResult(resultFlagList.toArray(new Integer[monitorListDTOList.size()])); - devListRes.add(devLineTestResult); - }); - webSocketVO.setData(devListRes); - webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(webSocketVO)); - } - System.out.println("当前小项结束进行删除============" + sourceIssue.getType() + "_" + sourceIssue.getIndex()); - - //当小项结束后需要删除集合中的小项 - SocketManager.delSource(sourceIssue.getIndex()); - //开始进行下一项检测 - List sourceIssueList = SocketManager.getSourceList(); - if (CollUtil.isNotEmpty(sourceIssueList)) { - SocketMsg xuMsg = new SocketMsg<>(); - xuMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); - - //正式检测 - SourceIssue sourceIssues = SocketManager.getSourceList().get(0); - xuMsg.setData(JSON.toJSONString(sourceIssues)); - xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + "&&" + sourceIssues.getType()); - SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xuMsg)); - } else { - //TODO 是否最终检测完成需要推送给用户 - quitSend(param); - } - - successComm.clear(); - realDataXiList.clear(); + //当val为0则认为大项中的小项已经全部跑完,开始组装信息推送给前端 + WebSocketVO> webSocketVO = new WebSocketVO<>(); + webSocketVO.setRequestId(socketDataMsg.getRequestId().split("&&")[1] + "_End"); + //组装实体推送给前台 + List devListRes = new ArrayList<>(); + devList.forEach(dev -> { + DevLineTestResult devLineTestResult = new DevLineTestResult(); + devLineTestResult.setDeviceId(dev.getDevId()); + devLineTestResult.setDeviceName(dev.getDevName()); + List resultFlagList = new ArrayList<>(); + List monitorListDTOList = dev.getMonitorList(); + for (PreDetection.MonitorListDTO point : monitorListDTOList) { + Integer resultFlag = flag.get(dev.getDevIP() + "_" + point.getLine()); + resultFlagList.add(resultFlag); + } + devLineTestResult.setChnResult(resultFlagList.toArray(new Integer[monitorListDTOList.size()])); + devListRes.add(devLineTestResult); + }); + webSocketVO.setData(devListRes); + webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(webSocketVO)); } - break; + System.out.println("当前小项结束进行删除============" + sourceIssue.getType() + "_" + sourceIssue.getIndex()); - case UNPROCESSED_BUSINESS: - break; + //当小项结束后需要删除集合中的小项 + SocketManager.delSource(sourceIssue.getIndex()); + //开始进行下一项检测 + List sourceIssueList = SocketManager.getSourceList(); + if (CollUtil.isNotEmpty(sourceIssueList)) { + SocketMsg xuMsg = new SocketMsg<>(); + xuMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); - case NORMAL_RESPONSE: - realDataXiList.add(devData); + //正式检测 + SourceIssue sourceIssues = SocketManager.getSourceList().get(0); + xuMsg.setData(JSON.toJSONString(sourceIssues)); + xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + "&&" + sourceIssues.getType()); + SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xuMsg)); + } else { + //TODO 是否最终检测完成需要推送给用户 + quitSend(param); + } - break; - case DEV_ERROR: + successComm.clear(); + realDataXiList.clear(); - break; - case DEV_TARGET: + } + break; - break; - case RE_OPERATE: - break; - default: - socketMsg.setRequestId(socketDataMsg.getRequestId()); - socketMsg.setOperateCode(socketDataMsg.getOperateCode()); - socketMsg.setData(dictDataEnumByCode.getMessage()); - webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketMsg)); - break; - } + case UNPROCESSED_BUSINESS: + break; + + case NORMAL_RESPONSE: + realDataXiList.add(devData); + + break; + case DEV_ERROR: + + break; + case DEV_TARGET: + + break; + case RE_OPERATE: + break; + case MESSAGE_PARSING_ERROR: + break; + default: + WebSocketVO webSocketVO = new WebSocketVO<>(); + webSocketVO.setRequestId(socketDataMsg.getRequestId()); + webSocketVO.setOperateCode(socketDataMsg.getOperateCode()); + webSocketVO.setData(dictDataEnumByCode.getMessage()); + webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(webSocketVO)); + break; } } + + /** * 退出检测返回 */ @@ -1137,7 +1115,6 @@ public class SocketDevResponseService { //初始化有效数据数 Map sysRegResMap = iSysRegResService.listRegRes(); - SocketManager.temXiDevList = new ArrayList<>(devList); //字典树 SocketManager.valueTypeMap.clear(); @@ -1171,7 +1148,7 @@ public class SocketDevResponseService { issueParam.setIsPhaseSequence(SourceOperateCodeEnum.COEFFICIENT_TEST.getValue()); List sourceIssues = pqScriptDtlsService.listSourceIssue(issueParam); for (int j = 0; j < sourceIssues.size(); j++) { - if (i == 0) { + if (j == 0) { sourceIssues.get(j).getChannelList().forEach(it -> { if (it.getChannelType().contains("U")) { it.setFAmp(XiNumberManager.devParameterList.get(0).getDevVolt()); @@ -1190,6 +1167,8 @@ public class SocketDevResponseService { } } XiNumberManager.xiSourceIssueList = sourceIssues; + + System.out.println(XiNumberManager.xiSourceIssueList); } @@ -1222,7 +1201,6 @@ public class SocketDevResponseService { adNonHarmonicResult.setAdType(checkDataMap.get(sqlDataDTO.getDesc())); adNonHarmonicResult.setDataType("avg"); - Double a = listDTO.getA(); Double b = listDTO.getB(); Double c = listDTO.getC(); @@ -1288,7 +1266,6 @@ public class SocketDevResponseService { bField.set(adHarmonicResult, b.get(i - 2)); cField.setAccessible(true); cField.set(adHarmonicResult, c.get(i - 2)); - } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } diff --git a/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java b/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java index 302f77db..e1593c90 100644 --- a/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java +++ b/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java @@ -11,6 +11,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.cilent.NettyClient; @@ -77,7 +78,6 @@ public class SocketSourceResponseService { break; case QUITE_SOURCE: quitDeal(socketDataMsg,param); - // System.out.println("关闭源回调:"+msg); break; } @@ -109,7 +109,7 @@ public class SocketSourceResponseService { phaseSequenceParam.setMoniterIdList(monitorIdList); phaseSequenceParam.setDataType(Arrays.asList("real$VRMS","real$IRMS")); phaseSequenceParam.setReadCount(10); - phaseSequenceParam.setIgnoreCount(2); + phaseSequenceParam.setIgnoreCount(7); socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); @@ -148,7 +148,7 @@ public class SocketSourceResponseService { String s = param.getUserPageId() + DEV; //开始设备通讯检测(发送设备初始化) List devList = iPqDevService.getDevInfo(param.getDevIds()); - Map> map = new HashMap(1); + Map> map = new HashMap<>(1); map.put("deviceList", devList); String jsonString = JSON.toJSONString(map); socketMsg.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue()); @@ -161,6 +161,9 @@ public class SocketSourceResponseService { case UNPROCESSED_BUSINESS: webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); break; + case SOURCE_CONNECTION_ERROR: + webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; default: socketMsg = new SocketMsg<>(); socketMsg.setRequestId(socketDataMsg.getRequestId()); @@ -181,7 +184,7 @@ public class SocketSourceResponseService { private void phaseSequenceDev(PreDetectionParam param, SocketDataMsg socketDataMsg) { SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); if (ObjectUtil.isNotNull(dictDataEnumByCode)) { - SocketMsg socketMsg = new SocketMsg(); + SocketMsg socketMsg = new SocketMsg<>(); switch (dictDataEnumByCode) { case SUCCESS: //向前端推送信息 @@ -206,6 +209,9 @@ public class SocketSourceResponseService { case UNPROCESSED_BUSINESS: webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); break; + case MESSAGE_PARSING_ERROR: + CnSocketUtil.quitSendSource(param); + break; default: socketMsg.setRequestId(socketDataMsg.getRequestId()); socketMsg.setOperateCode(socketDataMsg.getOperateCode()); @@ -239,11 +245,15 @@ public class SocketSourceResponseService { socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue()+"&&"+sourceIssue.getType()); + int ignoreCount; if(sourceIssue.getType().equals(DicDataEnum.HP.getCode())||sourceIssue.getType().equals(DicDataEnum.F.getCode())){ + ignoreCount = 1; socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_01.getValue()); }else if(DicDataEnum.VOLTAGE.getCode().equals(sourceIssue.getType())){ + ignoreCount = 1; socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_03.getValue()); }else { + ignoreCount = 7; socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); } @@ -253,8 +263,10 @@ public class SocketSourceResponseService { System.out.println("向装置下发的参数"+comm); phaseSequenceParam.setMoniterIdList(moniterIdList); phaseSequenceParam.setDataType(comm); - phaseSequenceParam.setReadCount(1); - phaseSequenceParam.setIgnoreCount(1); + phaseSequenceParam.setReadCount(2); + + + phaseSequenceParam.setIgnoreCount(ignoreCount); socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); @@ -292,9 +304,7 @@ public class SocketSourceResponseService { */ private void quitDeal(SocketDataMsg socketDataMsg, PreDetectionParam param) { SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); - SourceOperateCodeEnum operateCodeEnum = SourceOperateCodeEnum.getDictDataEnumByCode(socketDataMsg.getOperateCode()); - SocketMsg socketMsg = new SocketMsg(); - switch (dictDataEnumByCode) { + switch (Objects.requireNonNull(dictDataEnumByCode)) { case SUCCESS: //通讯校验成功 SocketManager.removeUser(param.getUserPageId() + source); @@ -303,9 +313,7 @@ public class SocketSourceResponseService { break; case MESSAGE_PARSING_ERROR: break; - default: - WebSocketVO webSocketVO = new WebSocketVO(); break; } diff --git a/detection/src/main/java/com/njcn/gather/detection/handler/XiNumberManager.java b/detection/src/main/java/com/njcn/gather/detection/handler/XiNumberManager.java index 705b9545..6c07521a 100644 --- a/detection/src/main/java/com/njcn/gather/detection/handler/XiNumberManager.java +++ b/detection/src/main/java/com/njcn/gather/detection/handler/XiNumberManager.java @@ -17,15 +17,29 @@ import java.util.concurrent.ConcurrentHashMap; */ public class XiNumberManager { + /** + * 存储大电压,小电压源控制脚本 + */ public static List xiSourceIssueList = new ArrayList<>(); + /** + * 存储校验系数的装置ip,校验完一个则删除一个 + */ public static List devXiList = new ArrayList<>(); + /** + * 存储所有测点的大电压系数 + */ public static Map devXiNumDataMap = new ConcurrentHashMap<>(); + /** + * 存储所有测点的小电压系数 + */ public static Map smallDevXiNumDataMap = new ConcurrentHashMap<>(); - //系数校验步数计数器 0.大电压 1.小电压 2.小电压 3.大电压 + /** + * 系数校验步数计数器 0.大电压 1.小电压 2.小电压 3.大电压 + */ public static Integer stepNumber = 0; @@ -33,7 +47,6 @@ public class XiNumberManager { - public static List rateDevParameterList = new ArrayList<>(); } diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceOperateCodeEnum.java b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceOperateCodeEnum.java index f43350fe..64711b51 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceOperateCodeEnum.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceOperateCodeEnum.java @@ -46,16 +46,17 @@ public enum SourceOperateCodeEnum { YJC_SBTXJY("yjc_sbtxjy", "预检测_设备通讯检测"), YJC_XYJY("yjc_xyjy", "预检测_协议校验"), YJC_XUJY("YJC_xujy", "相序校验"), - FORMAL_REAL("formal_real","正式检测_获取实时数据"), FORMAL_STATISTIC("formal_statistic","正式检测_获取统计数据"), FORMAL_EVENT("formal_event","正式检测_获取暂态数据"), - + Coefficient_Check("Coefficient_Check","系数校验"), QUITE("quit","预监测_关闭设备通讯初始化"), QUITE_SOURCE("close_source","预监测_关闭源通讯"), + UNKNOWN_OPERATE("unknown_operate","未知的操作返回,请联系管理员排查"), + SOCKET_TIMEOUT("socket_timeout","与源或者装置通讯等待超时"), + - Coefficient_Check("Coefficient_Check","系数校验"), /** diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceResponseCodeEnum.java b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceResponseCodeEnum.java index 3b2b08d8..265d12fe 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceResponseCodeEnum.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceResponseCodeEnum.java @@ -35,7 +35,8 @@ public enum SourceResponseCodeEnum { //自定义前端展示消息 SOCKET_ERROR(25000,"服务端连接失败"), - DEV_COMM_ALL_SUCCESS(25001,"校验成功") + DEV_COMM_ALL_SUCCESS(25001,"校验成功"), + diff --git a/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java b/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java index 260b953c..8ad2a0be 100644 --- a/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java @@ -215,7 +215,7 @@ public class DetectionServiceImpl { result.setAdType(pqErrSysDtls.get(0).getScriptType()); result.setDataType("avg"); if (map.containsKey(TYPE_T)) { - DetectionData t = rangeComparisonList(map.get(TYPE_T), pqErrSysDtls, fData, 1.0, dataRule); + DetectionData t = rangeComparisonList(map.get(TYPE_T), pqErrSysDtls, fData, fData, dataRule); result.setTValue(JSON.toJSONString(t)); result.setResultFlag(t.getIsData()); } else { @@ -281,9 +281,9 @@ public class DetectionServiceImpl { harmonicResult.setSort(sourceIssue.getIndex()); harmonicResult.setAdType(pqErrSysDtls.get(0).getScriptType()); harmonicResult.setDataType("avg"); - reflectHarmonic("a", integerBooleanA, harmonicResult); - reflectHarmonic("b", integerBooleanB, harmonicResult); - reflectHarmonic("c", integerBooleanC, harmonicResult); + reflectHarmonic("a", integerBooleanA, harmonicResult, num); + reflectHarmonic("b", integerBooleanB, harmonicResult, num); + reflectHarmonic("c", integerBooleanC, harmonicResult, num); List list = new ArrayList<>(); list.addAll(integerBooleanA.stream().map(DetectionData::getIsData).distinct().collect(Collectors.toList())); list.addAll(integerBooleanB.stream().map(DetectionData::getIsData).distinct().collect(Collectors.toList())); @@ -556,12 +556,12 @@ public class DetectionServiceImpl { return map; } - private void reflectHarmonic(String phase, List integerBooleanA, AdHarmonicResult harmonicResult) { + private void reflectHarmonic(String phase, List integerBooleanA, AdHarmonicResult harmonicResult, Integer num) { Map dataMap = integerBooleanA.stream().collect(Collectors.toMap(DetectionData::getNum, Function.identity())); dataMap.forEach((key, value) -> { try { - // 设置 id 字段 - Field idField = AdHarmonicResult.class.getDeclaredField(phase + "Value" + key.intValue()); + // 设置 id 字段; + Field idField = AdHarmonicResult.class.getDeclaredField(phase + "Value" + (num == 1 ? (int) (key + 0.5) : key.intValue())); idField.setAccessible(true); if (ObjectUtil.isNull(value.getIsData())) { idField.set(harmonicResult, value.getData()); @@ -633,7 +633,7 @@ public class DetectionServiceImpl { } }); devMap.forEach((harm, harmDataList) -> { - PqErrSysDtls errSysDtl = errSysDtlMap.get(num == 1 ? harm + 0.5 : harm); + PqErrSysDtls errSysDtl = errSysDtlMap.get(harm); DetectionData data = new DetectionData(); data.setIsData(4); data.setNum(harm); @@ -665,7 +665,7 @@ public class DetectionServiceImpl { */ private void setDetection(DictDataEnum dataRule, List harmDataList, PqErrSysDtls errSysDtl, DetectionData data, Double v) { List qualifiedList = harmDataList.stream() - .filter(x -> x>0 && NumberUtil.isIn(devSubtractChannelData(x, v, errSysDtl.getErrorValueType()), + .filter(x -> v == 0 ? x == v : NumberUtil.isIn(devSubtractChannelData(x, v, errSysDtl.getErrorValueType()), BigDecimal.valueOf(-errSysDtl.getMaxErrorValue()), BigDecimal.valueOf(errSysDtl.getMaxErrorValue()))).collect(Collectors.toList()); data.setRadius(-errSysDtl.getMaxErrorValue() + "~" + errSysDtl.getMaxErrorValue()); @@ -721,8 +721,8 @@ public class DetectionServiceImpl { DevData.SqlDataHarmDTO harm = devData.getSqlDataHarm().stream().filter(x -> 49 == x.getNum()).collect(Collectors.toList()).stream().findFirst().get(); if (ObjectUtil.isNotNull(fund)) { harmPut(TYPE_A, map, harmNum, harm, String.valueOf(fund.getList().getA()), num); - harmPut(TYPE_B, map, harmNum, harm, String.valueOf(fund.getList().getA()), num); - harmPut(TYPE_C, map, harmNum, harm, String.valueOf(fund.getList().getA()), num); + harmPut(TYPE_B, map, harmNum, harm, String.valueOf(fund.getList().getB()), num); + harmPut(TYPE_C, map, harmNum, harm, String.valueOf(fund.getList().getC()), num); } else { harmPut(TYPE_A, map, harmNum, harm, "1.0", num); harmPut(TYPE_B, map, harmNum, harm, "1.0", num); @@ -845,15 +845,18 @@ public class DetectionServiceImpl { * @return */ public BigDecimal devSubtractChannelData(Double devData, Double channelData, Integer errorValueType) { - switch (errorValueType) { - case 2: - return BigDecimal.valueOf(devData - channelData) - .divide(BigDecimal.valueOf(devData), 4, RoundingMode.HALF_UP); - case 3: - return BigDecimal.valueOf(devData - channelData) - .divide(BigDecimal.valueOf(channelData), 4, RoundingMode.HALF_UP); + if (devData != 0) { + switch (errorValueType) { + case 2: + return BigDecimal.valueOf(devData - channelData) + .divide(BigDecimal.valueOf(devData), 4, RoundingMode.HALF_UP); + case 3: + return BigDecimal.valueOf(devData - channelData) + .divide(BigDecimal.valueOf(channelData), 4, RoundingMode.HALF_UP); + } + return BigDecimal.valueOf(devData - channelData); } - return BigDecimal.valueOf(devData - channelData); + return BigDecimal.valueOf(devData); } public BigDecimal divide(Double devData, Double channelData) { @@ -901,13 +904,13 @@ public class DetectionServiceImpl { for (Double i : harmNum) { if (integerListMap.containsKey(i)) { if (type.equals("A")) { - integerListMap.get(num != 1 ? i : i + 0.5).add(multiply(harm.getList().getA().get((int) (i - num)), fund)); + integerListMap.get(i).add(multiply(harm.getList().getA().get((int) (i - num)), fund)); } if (type.equals("B")) { - integerListMap.get(num != 1 ? i : i + 0.5).add(multiply(harm.getList().getB().get((int) (i - num)), fund)); + integerListMap.get(i).add(multiply(harm.getList().getB().get((int) (i - num)), fund)); } if (type.equals("C")) { - integerListMap.get(num != 1 ? i : i + 0.5).add(multiply(harm.getList().getC().get((int) (i - num)), fund)); + integerListMap.get(i).add(multiply(harm.getList().getC().get((int) (i - num)), fund)); } } } @@ -924,7 +927,7 @@ public class DetectionServiceImpl { if (type.equals("C")) { integerList.add(multiply(harm.getList().getC().get((int) (i - num)), fund)); } - integerListMap.put(num != 1 ? i : i + 0.5, integerList); + integerListMap.put(i, integerList); } map.put(type, integerListMap); } diff --git a/detection/src/main/java/com/njcn/gather/detection/service/impl/PreDetectionServiceImpl.java b/detection/src/main/java/com/njcn/gather/detection/service/impl/PreDetectionServiceImpl.java index d2052866..eb14ff46 100644 --- a/detection/src/main/java/com/njcn/gather/detection/service/impl/PreDetectionServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/detection/service/impl/PreDetectionServiceImpl.java @@ -146,6 +146,7 @@ public class PreDetectionServiceImpl implements PreDetectionService { } catch (InterruptedException e) { throw new RuntimeException(e); } + } AdPlanSource planSource = adPlanSourceService.getOne(new LambdaQueryWrapper() @@ -173,7 +174,7 @@ public class PreDetectionServiceImpl implements PreDetectionService { - } + private void sendYtxSocket(PreDetectionParam param) { AdPlanSource planSource = adPlanSourceService.getOne(new LambdaQueryWrapper() diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/SocketManager.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/SocketManager.java index 40f4fa89..6b53810f 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/SocketManager.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/SocketManager.java @@ -79,12 +79,16 @@ public class SocketManager { */ private static List sourceIssueList = new CopyOnWriteArrayList<>(); - //用于存储pq_script_checkdata表里Value_Type与树字典表code + /** + * 用于存储pq_script_checkdata表里Value_Type与树字典表code + */ public static Map valueTypeMap = new HashMap<>(); - public static List temXiDevList = new ArrayList<>(); - private static volatile Boolean paused = false; + /** + * 用于存储 + */ + public static volatile Map clockMap = new ConcurrentHashMap<>(); diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java index 698704a6..e2766828 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java @@ -54,7 +54,7 @@ public class NettyClient { //空闲状态的handler // 添加LineBasedFrameDecoder来按行分割数据 .addLast(new LineBasedFrameDecoder(10240)) - .addLast(new IdleStateHandler(10, 0, 0, TimeUnit.SECONDS)) + .addLast(new IdleStateHandler(180, 0, 0, TimeUnit.SECONDS)) .addLast(new StringDecoder(CharsetUtil.UTF_8)) .addLast(new StringEncoder(CharsetUtil.UTF_8)) .addLast(handler); diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyDevClientHandler.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyDevClientHandler.java index dbd7deed..8d605f22 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyDevClientHandler.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyDevClientHandler.java @@ -1,12 +1,23 @@ package com.njcn.gather.detection.util.socket.cilent; +import cn.hutool.core.collection.CollUtil; +import com.alibaba.fastjson.JSON; 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.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.device.script.pojo.po.SourceIssue; +import com.njcn.gather.system.pojo.enums.DicDataEnum; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.handler.timeout.IdleState; +import io.netty.handler.timeout.IdleStateEvent; import io.netty.handler.timeout.TimeoutException; import lombok.RequiredArgsConstructor; @@ -80,7 +91,32 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler { */ @Override public void userEventTriggered(ChannelHandlerContext ctx, Object evt) { - System.out.println("进入超时。。。。。。"); + if (evt instanceof IdleStateEvent) { + if (((IdleStateEvent) evt).state() == IdleState.READER_IDLE) { + + if(CollUtil.isNotEmpty(SocketManager.getSourceList())) { + SourceIssue sourceIssue = SocketManager.getSourceList().get(0); + if (sourceIssue.getType().equals(DicDataEnum.F.getCode())) { + //闪变 + //CnSocketUtil.quitSend(param); + } else if (sourceIssue.getType().equals(DicDataEnum.VOLTAGE.getCode()) || sourceIssue.getType().equals(DicDataEnum.HP.getCode())) { + CnSocketUtil.quitSend(param); + + WebSocketVO socketVO = new WebSocketVO<>(); + socketVO.setRequestId(SourceOperateCodeEnum.SOCKET_TIMEOUT.getValue()); + socketVO.setOperateCode(sourceIssue.getType()); + socketVO.setData(SourceOperateCodeEnum.SOCKET_TIMEOUT.getMsg()); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketVO)); + //统计数据项 + }else { + //实时数据 + CnSocketUtil.quitSend(param); + } + } + + } + } + System.out.println("进入10S超时。。。。。。"); //当连接超过10S和发送消息后10S无响应时候,关闭channel } diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettySourceClientHandler.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettySourceClientHandler.java index 9e2bc4cf..253b3c0c 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettySourceClientHandler.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettySourceClientHandler.java @@ -51,7 +51,7 @@ public class NettySourceClientHandler extends SimpleChannelInboundHandler>>>>>" + msg); + System.out.println("source接收server端数据>>>>>>" + msg); try { sourceResponseService.deal(webUser, msg); } catch (Exception e) { diff --git a/device/src/main/java/com/njcn/gather/device/device/service/impl/PqDevServiceImpl.java b/device/src/main/java/com/njcn/gather/device/device/service/impl/PqDevServiceImpl.java index 7cd3547d..087949ad 100644 --- a/device/src/main/java/com/njcn/gather/device/device/service/impl/PqDevServiceImpl.java +++ b/device/src/main/java/com/njcn/gather/device/device/service/impl/PqDevServiceImpl.java @@ -405,6 +405,10 @@ public class PqDevServiceImpl extends ServiceImpl implements @Override public List getDevInfo(List devIds) { List preDetections = this.baseMapper.selectDevInfo(devIds); + if(devIds.size() != preDetections.size()){ + throw new BusinessException("返回装置数量与查询装置数量不一致"); + } + for (PreDetection preDetection : preDetections) { List monitorList = preDetection.getMonitorList(); if(CollUtil.isEmpty(monitorList)){ diff --git a/system/src/main/java/com/njcn/gather/system/pojo/enums/DicDataEnum.java b/system/src/main/java/com/njcn/gather/system/pojo/enums/DicDataEnum.java index 675bc2d3..45a54b77 100644 --- a/system/src/main/java/com/njcn/gather/system/pojo/enums/DicDataEnum.java +++ b/system/src/main/java/com/njcn/gather/system/pojo/enums/DicDataEnum.java @@ -20,7 +20,7 @@ public enum DicDataEnum { HI("HI","谐波电流"), HP("HP","谐波有功功率"), HSV("HSV","间谐波电压"), - HSI("V","间谐波电流"), + HSI("HSI","间谐波电流"), VOLTAGE("VOLTAGE","暂态"), F("F","闪变"),