长闪
This commit is contained in:
@@ -796,7 +796,7 @@ public class SocketDevResponseService {
|
||||
boolean isContinue = true;
|
||||
List<String> descList = icdCheckData.getResultData().stream().map(
|
||||
obj -> {
|
||||
if (DetectionCodeEnum.MAG.getCode().equals(obj.getDesc()) || DetectionCodeEnum.DUR.getCode().equals(obj.getDesc()) || DetectionCodeEnum.PST.getCode().equals(obj.getDesc())) {
|
||||
if (DetectionCodeEnum.MAG.getCode().equals(obj.getDesc()) || DetectionCodeEnum.DUR.getCode().equals(obj.getDesc()) || DetectionCodeEnum.PST.getCode().equals(obj.getDesc()) || DetectionCodeEnum.PLT.getCode().equals(obj.getDesc())) {
|
||||
return DetectionCodeEnum.AVG_PREFIX.getCode() + obj.getDesc();
|
||||
} else {
|
||||
return DetectionCodeEnum.REAL_PREFIX.getCode() + obj.getDesc();
|
||||
@@ -1225,7 +1225,7 @@ public class SocketDevResponseService {
|
||||
WebSocketVO<Object> webSocketVO = new WebSocketVO<>();
|
||||
String type = firstIssue.getType();
|
||||
if (StrUtil.isNotBlank(firstIssue.getOtherType())) {
|
||||
firstIssue.setType(PowerIndexEnum.V.getKey());
|
||||
firstIssue.setType(PowerIndexEnum.LF.getKey().equals(firstIssue.getOtherType()) ? PowerIndexEnum.F.getKey() : PowerIndexEnum.V.getKey());
|
||||
webSocketVO.setRequestId(firstIssue.getOtherType() + CnSocketUtil.START_TAG);
|
||||
type = firstIssue.getOtherType();
|
||||
} else {
|
||||
@@ -1244,6 +1244,46 @@ public class SocketDevResponseService {
|
||||
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加并且按照slowValueTimeList中的时间去重
|
||||
*
|
||||
* @param devDataList
|
||||
* @param devData
|
||||
*/
|
||||
private void addAndRemoveDuplicate(List<DevData> devDataList, DevData devData) {
|
||||
if (ObjectUtil.isNotNull(devData) && CollUtil.isNotEmpty(devData.getSlowValueTimeList())) {
|
||||
List<DevData.SlowValueTimeDTO> slowValueTimeList1 = devData.getSlowValueTimeList();
|
||||
|
||||
long count1 = devDataList.stream().flatMap(devData1 -> devData.getSlowValueTimeList().stream()).filter(slowValueTimeDTO -> {
|
||||
long count2 = slowValueTimeList1.stream().filter(slowValueTimeDTO1 -> {
|
||||
if (slowValueTimeDTO.getDesc().equals(slowValueTimeDTO1.getDesc())) {
|
||||
DevData.SlowValueTimeDTO.ListDTO list = slowValueTimeDTO.getList();
|
||||
DevData.SlowValueTimeDTO.ListDTO list1 = slowValueTimeDTO1.getList();
|
||||
String a = list.getA();
|
||||
String b = list.getB();
|
||||
String c = list.getC();
|
||||
String t = list.getT();
|
||||
|
||||
String a1 = list1.getA();
|
||||
String b1 = list1.getB();
|
||||
String c1 = list1.getC();
|
||||
String t1 = list1.getT();
|
||||
if (StrUtil.equals(a, a1) && StrUtil.equals(b, b1) && StrUtil.equals(c, c1) && StrUtil.equals(t, t1)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}).count();
|
||||
|
||||
return count2 > 0;
|
||||
}).count();
|
||||
|
||||
if (count1 <= 0) {
|
||||
devDataList.add(devData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 正式检测
|
||||
*/
|
||||
@@ -1256,12 +1296,31 @@ public class SocketDevResponseService {
|
||||
switch (Objects.requireNonNull(dictDataEnumByCode)) {
|
||||
case SUCCESS:
|
||||
if (devData.getResult()) {
|
||||
FormalTestManager.realDataXiList.add(devData);
|
||||
successComm.add(devData.getId());
|
||||
// 判断是否是长闪数据
|
||||
if (PowerIndexEnum.LF.getKey().equals(sourceIssue.getOtherType())) {
|
||||
List<DevData.SqlDataDTO> sqlData = devData.getSqlData();
|
||||
if (CollUtil.isNotEmpty(sqlData)) {
|
||||
if (isEvenHour(devData.getTime())) {
|
||||
if (FormalTestManager.longFlickerDataCount >= FormalTestManager.monitorIdListComm.size()) {
|
||||
FormalTestManager.realDataXiList.add(devData);
|
||||
successComm.add(devData.getId());
|
||||
}
|
||||
|
||||
//成功收到数据后重置超时统计时间
|
||||
if (SocketManager.clockMap.containsKey(sourceIssue.getIndex())) {
|
||||
SocketManager.clockMap.put(sourceIssue.getIndex(), 0L);
|
||||
//成功收到数据后重置超时统计时间
|
||||
if (SocketManager.clockMap.containsKey(sourceIssue.getIndex())) {
|
||||
SocketManager.clockMap.put(sourceIssue.getIndex(), 0L);
|
||||
}
|
||||
FormalTestManager.longFlickerDataCount++;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
FormalTestManager.realDataXiList.add(devData);
|
||||
successComm.add(devData.getId());
|
||||
|
||||
//成功收到数据后重置超时统计时间
|
||||
if (SocketManager.clockMap.containsKey(sourceIssue.getIndex())) {
|
||||
SocketManager.clockMap.put(sourceIssue.getIndex(), 0L);
|
||||
}
|
||||
}
|
||||
|
||||
//当成功的通道数量和检测通道数量相同时进入
|
||||
@@ -1334,7 +1393,7 @@ public class SocketDevResponseService {
|
||||
|
||||
String type = sourceIssues.getType();
|
||||
if (StrUtil.isNotBlank(sourceIssues.getOtherType())) {
|
||||
sourceIssues.setType(PowerIndexEnum.V.getKey());
|
||||
sourceIssues.setType(PowerIndexEnum.LF.getKey().equals(sourceIssues.getOtherType()) ? PowerIndexEnum.F.getKey() : PowerIndexEnum.V.getKey());
|
||||
type = sourceIssues.getOtherType();
|
||||
}
|
||||
// 如果上一个大项检测完成,则检测下一个大项,并向前端推送消息
|
||||
@@ -1912,6 +1971,16 @@ public class SocketDevResponseService {
|
||||
System.out.println(XiNumberManager.xiSourceIssueList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断时间是否为偶数小时
|
||||
*
|
||||
* @param timeStr
|
||||
* @return
|
||||
*/
|
||||
private boolean isEvenHour(String timeStr) {
|
||||
LocalDateTime localDateTime = DetectionUtil.timeFormat(timeStr, DetectionUtil.FORMATTER);
|
||||
return localDateTime.getHour() % 2 == 0 && localDateTime.getMinute() == 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 原始数据入库
|
||||
|
||||
@@ -543,11 +543,13 @@ public class SocketSourceResponseService {
|
||||
ignoreCount = 1;
|
||||
// 读取2次数据计算闪变值
|
||||
readData = 2;
|
||||
socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_01.getValue());
|
||||
} else if (PowerIndexEnum.LF.getKey().equals(sourceIssue.getType())) {
|
||||
// 长时间闪变检测
|
||||
ignoreCount = 1;
|
||||
readData = 1;
|
||||
|
||||
if (PowerIndexEnum.LF.getKey().equals(sourceIssue.getOtherType())) {
|
||||
FormalTestManager.longFlickerDataCount = 0;
|
||||
// 长时间闪变检测
|
||||
ignoreCount = 0;
|
||||
readData = 0;
|
||||
}
|
||||
socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_01.getValue());
|
||||
} else if (PowerIndexEnum.VOLTAGE.getKey().equals(sourceIssue.getType())) {
|
||||
// 暂态电压检测:需要更多预热时间,但只读取一次快照
|
||||
|
||||
@@ -37,6 +37,7 @@ public enum DetectionCodeEnum {
|
||||
I_UNBAN("I_UNBAN", "三相电流负序不平衡度"),
|
||||
SeqA("SeqA", "电流序分量"),
|
||||
PST("PST", "短时间闪变"),
|
||||
PLT("PLT", "长时间闪变"),
|
||||
W("W", "总有功功率"),
|
||||
VARW("VARW", "总无功功率"),
|
||||
VAW("VAW", "总视在功率"),
|
||||
|
||||
@@ -33,7 +33,7 @@ public class DevData {
|
||||
@JSONField(name = "SqlDataHarm", ordinal = 5)
|
||||
private List<SqlDataHarmDTO> sqlDataHarm;
|
||||
|
||||
@JSONField(name = "SqlDataHarm", ordinal = 6)
|
||||
@JSONField(name = "SlowValueTimeList", ordinal = 6)
|
||||
private List<SlowValueTimeDTO> slowValueTimeList;
|
||||
|
||||
@NoArgsConstructor
|
||||
|
||||
@@ -226,6 +226,7 @@ public class DetectionServiceImpl {
|
||||
* 闪变
|
||||
*/
|
||||
case F:
|
||||
case LF:
|
||||
return isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, DetectionCodeEnum.PST.getCode(), sourceIssue, dataRule, code, oneConfig.getScale());
|
||||
/**
|
||||
* 暂态
|
||||
@@ -667,7 +668,7 @@ public class DetectionServiceImpl {
|
||||
}
|
||||
result.setResultFlag(isQualified);
|
||||
// 闪变
|
||||
if (DetectionCodeEnum.PST.getCode().equals(splitArr[1]) || DetectionCodeEnum.SeqV.getCode().equals(splitArr[1]) || DetectionCodeEnum.SeqA.getCode().equals(splitArr[1])) {
|
||||
if (DetectionCodeEnum.PST.getCode().equals(splitArr[1]) || DetectionCodeEnum.PLT.getCode().equals(splitArr[1]) || DetectionCodeEnum.SeqV.getCode().equals(splitArr[1]) || DetectionCodeEnum.SeqA.getCode().equals(splitArr[1])) {
|
||||
|
||||
//取出源所对应的相别信息
|
||||
List<PqScriptCheckData> channelTypeAList = checkData.stream()
|
||||
|
||||
@@ -306,7 +306,7 @@ public class PreDetectionServiceImpl implements PreDetectionService {
|
||||
String type = resolveFormalIssueType(sourceIssues);
|
||||
sendBigItemStartIfFirstFormalIssue(runtimeParam, sourceIssues, type);
|
||||
if (StrUtil.isNotBlank(sourceIssues.getOtherType())) {
|
||||
sourceIssues.setType(PowerIndexEnum.V.getKey());
|
||||
sourceIssues.setType(PowerIndexEnum.LF.getKey().equals(sourceIssues.getOtherType()) ? PowerIndexEnum.F.getKey() : PowerIndexEnum.V.getKey());
|
||||
}
|
||||
SocketMsg<String> xuMsg = new SocketMsg<>();
|
||||
xuMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
|
||||
@@ -570,7 +570,7 @@ public class PreDetectionServiceImpl implements PreDetectionService {
|
||||
SourceIssue sourceIssue = sourceIssues.get(0);
|
||||
String type = sourceIssue.getType();
|
||||
if (StrUtil.isNotBlank(sourceIssue.getOtherType())) {
|
||||
sourceIssue.setType(PowerIndexEnum.V.getKey());
|
||||
sourceIssue.setType(PowerIndexEnum.LF.getKey().equals(sourceIssue.getOtherType()) ? PowerIndexEnum.F.getKey() : PowerIndexEnum.V.getKey());
|
||||
type = sourceIssue.getOtherType();
|
||||
}
|
||||
|
||||
|
||||
@@ -14,10 +14,7 @@ import com.njcn.gather.script.pojo.po.SourceIssue;
|
||||
import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
@@ -234,6 +231,9 @@ public class FormalTestManager {
|
||||
*/
|
||||
public static String reCheckType;
|
||||
|
||||
public static Integer longFlickerDataCount;
|
||||
|
||||
|
||||
public static void clearFormalRuntime() {
|
||||
stopFlag = false;
|
||||
hasStopFlag = false;
|
||||
|
||||
@@ -59,6 +59,11 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
|
||||
*/
|
||||
private static final long SHORT_FLICKER_TIMEOUT = 1300L;
|
||||
|
||||
/**
|
||||
* 长闪检测超时时间:120分钟+30分
|
||||
*/
|
||||
private static final long LONG_FLICKER_TIMEOUT = 120 * 60 + 30 * 60;
|
||||
|
||||
/**
|
||||
* 统计数据检测超时时间:3分钟+100秒(190秒)
|
||||
*/
|
||||
@@ -303,9 +308,11 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler<String> {
|
||||
private boolean isTimeout(SourceIssue sourceIssue) {
|
||||
long currentTime = SocketManager.clockMap.get(sourceIssue.getIndex());
|
||||
String type = sourceIssue.getType();
|
||||
String otherType = sourceIssue.getOtherType();
|
||||
|
||||
// 根据不同检测类型使用不同的超时阈值
|
||||
if (PowerIndexEnum.F.getKey().equals(type) || PowerIndexEnum.LF.getKey().equals(type)) {
|
||||
if (PowerIndexEnum.LF.getKey().equals(otherType)) {
|
||||
return currentTime >= LONG_FLICKER_TIMEOUT;
|
||||
} else if (PowerIndexEnum.F.getKey().equals(type)) {
|
||||
return currentTime >= SHORT_FLICKER_TIMEOUT;
|
||||
} else if (PowerIndexEnum.VOLTAGE.getKey().equals(type) || PowerIndexEnum.HP.getKey().equals(type)) {
|
||||
// 统计数据类型(电压、谐波):中等时间,3分钟超时
|
||||
|
||||
@@ -203,7 +203,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
|
||||
checkDataParam.setScriptId(freqDtls.getScriptId());
|
||||
checkDataParam.setIndex(freqDtls.getScriptIndex());
|
||||
checkDataParam.setIsValueTypeName(true);
|
||||
if (PowerIndexEnum.F.getKey().equals(issue.getType()) || PowerIndexEnum.VOLTAGE.getKey().equals(issue.getType())) {
|
||||
if (PowerIndexEnum.F.getKey().equals(issue.getType()) || PowerIndexEnum.LF.getKey().equals(issue.getType()) || PowerIndexEnum.VOLTAGE.getKey().equals(issue.getType())) {
|
||||
checkDataParam.setDataType("avg");
|
||||
issue.setDataType("avg");
|
||||
} else {
|
||||
@@ -245,7 +245,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
|
||||
issueAdd(curList, dtlsIList, HARM_I, INHARM_I, freqDtls.getValue(), "I", channelListDTOS, checkDataParam, devFly, isValueType);
|
||||
|
||||
issue.setChannelList(channelListDTOS);
|
||||
if (PowerIndexEnum.P.getKey().equals(issue.getType()) || PowerIndexEnum.ANGLE.getKey().equals(issue.getType())) {
|
||||
if (PowerIndexEnum.P.getKey().equals(issue.getType()) || PowerIndexEnum.ANGLE.getKey().equals(issue.getType()) || PowerIndexEnum.LF.getKey().equals(issue.getType())) {
|
||||
issue.setOtherType(issue.getType());
|
||||
} else {
|
||||
issue.setOtherType(null);
|
||||
@@ -628,6 +628,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
|
||||
unbanSeqCheck(info, channelListDTO, channelI, checkArchive);
|
||||
break;
|
||||
case PST:
|
||||
case PLT:
|
||||
if (CollUtil.isNotEmpty(channelList)) {
|
||||
channelU = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
|
||||
for (PqScriptDtlsParam.ChannelListDTO listDTO : channelU) {
|
||||
|
||||
Reference in New Issue
Block a user