比对完善

This commit is contained in:
caozehui
2025-09-01 13:39:52 +08:00
parent 0977a77eed
commit 8963b20dd3
17 changed files with 551 additions and 115 deletions

View File

@@ -4,15 +4,13 @@ import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.HashBiMap;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.gather.detection.pojo.enums.DetectionCodeEnum;
import com.njcn.gather.detection.pojo.enums.DetectionResponseEnum;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
import com.njcn.gather.detection.pojo.enums.SourceResponseCodeEnum;
import com.njcn.gather.detection.pojo.enums.*;
import com.njcn.gather.detection.pojo.param.ContrastDetectionParam;
import com.njcn.gather.detection.pojo.param.DevPhaseSequenceParam;
import com.njcn.gather.detection.pojo.param.PreDetectionParam;
@@ -56,6 +54,7 @@ import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@@ -130,7 +129,7 @@ public class SocketContrastResponseService {
@Value("${log.homeDir}")
private String alignDataFilePath;
private static final Map<String, List<String>> testItemCodeMap = new HashMap() {{
public static final Map<String, List<String>> testItemCodeMap = new HashMap() {{
put("FREQ", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.FREQ.getCode()));
put("V", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VRMS.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PVRMS.getCode()));
put("HV", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V2_50.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PV2_50.getCode()));
@@ -141,7 +140,7 @@ public class SocketContrastResponseService {
put("I", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.IRMS.getCode()));
put("IMBV", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V_UNBAN.getCode()));
put("IMBA", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I_UNBAN.getCode()));
put("P", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.P_FUND.getCode()));
// put("P", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.P_FUND.getCode()));
}};
/**
@@ -348,6 +347,10 @@ public class SocketContrastResponseService {
case FORMAL_REAL:
this.formalDeal(param, socketDataMsg);
break;
// 启动录波
case RECORD_WAVE:
this.recordWave(param, socketDataMsg);
break;
//退出关闭
case QUITE:
quitDeal(socketDataMsg, param);
@@ -819,6 +822,7 @@ public class SocketContrastResponseService {
*/
private void formalDeal(PreDetectionParam param, SocketDataMsg socketDataMsg) {
String data = socketDataMsg.getData();
String s = param.getUserPageId() + CnSocketUtil.CONTRAST_DEV_TAG;
DevData devData = JSON.parseObject(data, DevData.class);
SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode());
@@ -905,7 +909,6 @@ public class SocketContrastResponseService {
scheduledFuture.cancel(true);
scheduler.shutdown();
String errorSysId = FormalTestManager.currentTestPlan.getErrorSysId();
String code = String.valueOf(FormalTestManager.currentTestPlan.getCode());
@@ -936,13 +939,46 @@ public class SocketContrastResponseService {
this.clearData();
List<String> adTypes = FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toList());
// Map<String, Integer> result = detectionDataDealService.devResult(true, FormalTestManager.pairsIdMap.keySet().stream().collect(Collectors.toList()), adTypes, code);
// // 若有不符合的
// if (result.values().stream().anyMatch(r -> r.equals(ResultEnum.NOT_QUALIFIED.getValue()))) {
// // 判断是否启用录波
// String datasourceId = FormalTestManager.currentTestPlan.getDatasourceId();
// if (datasourceId.contains(DataSourceEnum.WAVE_DATA.getValue())) {
// FormalTestManager.currentStep = SourceOperateCodeEnum.RECORD_WAVE;
// SocketMsg<String> socketMsg = new SocketMsg<>();
// socketMsg.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue());
// socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_03.getValue());
// Map<String, List<PreDetection>> map = new HashMap<>(1);
//
// for (int i = 0; i < FormalTestManager.devList.size(); i++) {
// PreDetection preDetection = FormalTestManager.devList.get(i);
//
// }
//
// FormalTestManager.devList.stream().flatMap(obj -> obj.getMonitorList().stream()).forEach(monitor -> {
// String lineId = monitor.getLineId();
// String[] split = lineId.split(CnSocketUtil.SPLIT_TAG);
// Integer i = result.get(FormalTestManager.devIdMapComm.get(split[1]));
// if (i.equals(ResultEnum.NOT_QUALIFIED.getValue())) {
//
// }
// });
//
// map.put("deviceList", FormalTestManager.devList);
// String jsonString = JSON.toJSONString(map);
// socketMsg.setData(jsonString);
// SocketManager.sendMsg(s, JSON.toJSONString(socketMsg));
// }
// } else {
// 最终将检测结果推送到前端
webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode());//最终成功推送
webSend.setData(JSON.toJSONString(allResultList));
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend));
// 修改设备状态
pqDevService.updateResult(true, param.getDevIds(), FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toList()), code, param.getUserId(), param.getTemperature(), param.getHumidity());
pqDevService.updateResult(true, param.getDevIds(), adTypes, code, param.getUserId(), param.getTemperature(), param.getHumidity());
// }
}
}
}
@@ -967,6 +1003,29 @@ public class SocketContrastResponseService {
}
}
/**
* 启动录波功能
*
* @param param
* @param socketDataMsg
*/
private void recordWave(PreDetectionParam param, SocketDataMsg socketDataMsg) {
String data = socketDataMsg.getData();
DevData devData = JSON.parseObject(data, DevData.class);
SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode());
switch (Objects.requireNonNull(dictDataEnumByCode)) {
case SUCCESS:
case NORMAL_RESPONSE:
case RECORD_WAVE_FAILED:
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
break;
}
}
/**
* 退出检测返回
*/
@@ -1075,6 +1134,7 @@ public class SocketContrastResponseService {
webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue());
webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode());
List<AlignDataVO> data = new ArrayList<>();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(DatePattern.ISO8601_PATTERN);
// key为标准设备的ip, value为该ip下所有通道的设备数据
Map<String, List<DevData>> ipDevDataMap = FormalTestManager.standardDevDataMap.values().stream().flatMap(List::stream).collect(Collectors.groupingBy(obj -> obj.getId().split(CnSocketUtil.SPLIT_TAG)[0]));
@@ -1117,7 +1177,9 @@ public class SocketContrastResponseService {
rawData.setUaStdDev(list1.getA());
rawData.setUbStdDev(list1.getB());
rawData.setUcStdDev(list1.getC());
rawData.setTimeStdDev(obj.getTime().replace("T", " "));
LocalDateTime localDateTime = DetectionUtil.timeFormat(obj.getTime(), DetectionUtil.FORMATTER);
rawData.setTimeStdDev(localDateTime.format(dtf));
DevData devData = devDataList.stream().filter(obj1 -> DetectionUtil.isAlignData(obj1, obj)).findFirst().orElse(null);
if (ObjectUtil.isNotNull(devData)) {
@@ -1135,7 +1197,8 @@ public class SocketContrastResponseService {
rawData.setUaDev(list2.getA());
rawData.setUbDev(list2.getB());
rawData.setUcDev(list2.getC());
rawData.setTimeDev(devData.getTime().replace("T", " "));
localDateTime = DetectionUtil.timeFormat(devData.getTime(), DetectionUtil.FORMATTER);
rawData.setTimeDev(localDateTime.format(dtf));
devDataList.remove(devData);
}
return rawData;
@@ -1166,6 +1229,7 @@ public class SocketContrastResponseService {
*/
private void saveAlignData() {
List<Map<String, Object>> sheetsList = new ArrayList<>();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(DatePattern.ISO8601_PATTERN);
// key为被检设备的ip, value为该ip下所有通道的设备数据
Map<String, List<DevData>> ipDevDataMap = FormalTestManager.standardDevDataMap.values().stream().flatMap(List::stream).collect(Collectors.groupingBy(obj -> obj.getId().split(CnSocketUtil.SPLIT_TAG)[0]));
@@ -1203,7 +1267,8 @@ public class SocketContrastResponseService {
list1 = sqlDataDTO1.getList();
}
AlignDataExcel alignDataExcel = new AlignDataExcel();
alignDataExcel.setTimeStdDev(obj.getTime().replace("T", " "));
LocalDateTime localDateTime = DetectionUtil.timeFormat(obj.getTime(), DetectionUtil.FORMATTER);
alignDataExcel.setTimeStdDev(localDateTime.format(dtf));
alignDataExcel.setUaStdDev(list1.getA());
alignDataExcel.setUbStdDev(list1.getB());
alignDataExcel.setUcStdDev(list1.getC());
@@ -1221,7 +1286,8 @@ public class SocketContrastResponseService {
if (ObjectUtil.isNotNull(sqlDataDTO2)) {
list2 = sqlDataDTO2.getList();
}
alignDataExcel.setTimeDev(devData.getTime().replace("T", " "));
localDateTime = DetectionUtil.timeFormat(devData.getTime(), DetectionUtil.FORMATTER);
alignDataExcel.setTimeDev(localDateTime.format(dtf));
alignDataExcel.setUaDev(list2.getA());
alignDataExcel.setUbDev(list2.getB());
alignDataExcel.setUcDev(list2.getC());

View File

@@ -27,6 +27,7 @@ import com.njcn.gather.device.service.IPqDevService;
import com.njcn.gather.device.service.IPqDevSubService;
import com.njcn.gather.plan.pojo.po.AdPlan;
import com.njcn.gather.plan.service.IAdPlanService;
import com.njcn.gather.result.pojo.enums.ResultUnitEnum;
import com.njcn.gather.script.pojo.param.PqScriptCheckDataParam;
import com.njcn.gather.script.pojo.param.PqScriptIssueParam;
import com.njcn.gather.script.pojo.po.SourceIssue;
@@ -436,13 +437,19 @@ public class SocketDevResponseService {
Map<String, Long> sourceIssueMap = sourceIssues.stream().collect(Collectors.groupingBy(SourceIssue::getType, Collectors.counting()));
SocketManager.initMap(sourceIssueMap);
socketMsg.setData(JSON.toJSONString(sourceIssues.get(0)));
socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + sourceIssues.get(0).getType());
SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg));
//告诉前端当前项开始了
WebSocketVO<Object> webSocketVO = new WebSocketVO<>();
String type = sourceIssues.get(0).getType();
if (ResultUnitEnum.P.getCode().equals(type)) {
sourceIssues.get(0).setType(ResultUnitEnum.V_ABSOLUTELY.getCode());
webSocketVO.setRequestId(ResultUnitEnum.P.getCode() + CnSocketUtil.START_TAG);
} else {
webSocketVO.setRequestId(sourceIssues.get(0).getType() + CnSocketUtil.START_TAG);
}
socketMsg.setData(JSON.toJSONString(sourceIssues.get(0)));
socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + type);
SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg));
webSocketVO.setDesc(null);
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO));
} else {
@@ -937,13 +944,20 @@ public class SocketDevResponseService {
Map<String, Long> sourceIssueMap = sourceIssues.stream().collect(Collectors.groupingBy(SourceIssue::getType, Collectors.counting()));
SocketManager.initMap(sourceIssueMap);
socketMsg.setData(JSON.toJSONString(sourceIssues.get(0)));
socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + sourceIssues.get(0).getType());
SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg));
//告诉前端当前项开始了
WebSocketVO<Object> webSocketVO = new WebSocketVO<>();
String type = sourceIssues.get(0).getType();
if (ResultUnitEnum.P.getCode().equals(type)) {
sourceIssues.get(0).setType(ResultUnitEnum.V_ABSOLUTELY.getCode());
webSocketVO.setRequestId(ResultUnitEnum.P.getCode() + CnSocketUtil.START_TAG);
} else {
webSocketVO.setRequestId(sourceIssues.get(0).getType() + CnSocketUtil.START_TAG);
}
socketMsg.setData(JSON.toJSONString(sourceIssues.get(0)));
socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + type);
socketMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg));
webSocketVO.setDesc(null);
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO));
}
@@ -1187,14 +1201,20 @@ public class SocketDevResponseService {
Map<String, Long> sourceIssueMap = sourceIssues.stream().collect(Collectors.groupingBy(SourceIssue::getType, Collectors.counting()));
SocketManager.initMap(sourceIssueMap);
//告诉前端当前项开始了
WebSocketVO<Object> webSocketVO = new WebSocketVO<>();
String type = sourceIssues.get(0).getType();
if (ResultUnitEnum.P.getCode().equals(type)) {
sourceIssues.get(0).setType(ResultUnitEnum.V_ABSOLUTELY.getCode());
webSocketVO.setRequestId(ResultUnitEnum.P.getCode() + CnSocketUtil.START_TAG);
} else {
webSocketVO.setRequestId(sourceIssues.get(0).getType() + CnSocketUtil.START_TAG);
}
socketMsg.setData(JSON.toJSONString(sourceIssues.get(0)));
socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + sourceIssues.get(0).getType());
socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + type);
socketMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg));
//告诉前端当前项开始了
WebSocketVO<Object> webSocketVO = new WebSocketVO<>();
webSocketVO.setRequestId(sourceIssues.get(0).getType() + CnSocketUtil.START_TAG);
webSocketVO.setDesc(null);
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO));
} else {
@@ -1281,8 +1301,14 @@ public class SocketDevResponseService {
System.out.println("当前小项结束进行删除============" + sourceIssue.getType() + CnSocketUtil.SPLIT_TAG + sourceIssue.getIndex());
//小项检测完后小项数减一并更新map
long residueCount = SocketManager.getSourceTarget(sourceIssue.getType()) - 1;
long residueCount = 0;
if (sourceIssue.getIsP()) {
residueCount = SocketManager.getSourceTarget(ResultUnitEnum.P.getCode()) - 1;
SocketManager.addTargetMap(ResultUnitEnum.P.getCode(), residueCount);
} else {
residueCount = SocketManager.getSourceTarget(sourceIssue.getType()) - 1;
SocketManager.addTargetMap(sourceIssue.getType(), residueCount);
}
System.out.println("该大项还有" + residueCount + "个小项没有进行检测!!!!!!!!");
//当该大项中小项数量变为0则任务该大项检测结束
@@ -1326,12 +1352,17 @@ public class SocketDevResponseService {
if (residueCount == 0) {
WebServiceManager.sendDetectionMessage(param.getUserPageId(), sourceIssues.getType() + CnSocketUtil.START_TAG, null, new ArrayList<>(), null);
}
String type = sourceIssues.getType();
if (sourceIssues.getIsP()) {
sourceIssues.setType(ResultUnitEnum.V_ABSOLUTELY.getCode());
type = ResultUnitEnum.P.getCode();
}
//控源下发下一个小项脚本
SocketMsg<String> xuMsg = new SocketMsg<>();
xuMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
xuMsg.setData(JSON.toJSONString(sourceIssues));
xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + sourceIssues.getType());
xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + type);
SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(xuMsg));
} else {
//TODO 是否最终检测完成需要推送给用户
@@ -1836,6 +1867,9 @@ public class SocketDevResponseService {
if (nonHarmonicList.contains(sourceIssue.getType())) {
for (DevData.SqlDataDTO sqlDataDTO : data.getSqlData()) {
if (sqlDataDTO.getDesc().equals("PF")) {
continue;
}
DevData.SqlDataDTO.ListDTO listDTO = sqlDataDTO.getList();
SimAndDigNonHarmonicResult adNonHarmonicResult = new SimAndDigNonHarmonicResult();
adNonHarmonicResult.setTimeId(localDateTime);

View File

@@ -491,7 +491,7 @@ public class SocketSourceResponseService {
log.debug("向设备下发检测参数,用户: {}, 数据类型: {}", param.getUserPageId(), comm);
// 设置请求ID正式检测操作码 + 步骤标识 + 检测类型
socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + sourceIssue.getType());
socketMsg.setRequestId(socketDataMsg.getRequestId());
// 根据检测类型设置不同的读取参数和操作码
int ignoreCount;
@@ -534,6 +534,9 @@ public class SocketSourceResponseService {
DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam();
// 设置监测点ID列表
phaseSequenceParam.setMoniterIdList(monitorIdList);
if (socketDataMsg.getRequestId().equals(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + "P")) {
comm.add("real$PF");
}
// 设置数据类型列表
phaseSequenceParam.setDataType(comm);
// 设置读取次数

View File

@@ -35,7 +35,13 @@ public enum DetectionCodeEnum {
V_UNBAN("V_UNBAN", "三相电压负序不平衡度"),
I_UNBAN("I_UNBAN", "三相电流负序不平衡度"),
PST("PST", "短时间闪变"),
P_FUND("P_FUND", "功率"),
W("W", "有功功率"),
VARW("VARW", "无功功率"),
VAW("VAW", "视在功率"),
// PF("PF", "功率因数"),
// P_FUND("P_FUND", "基波有功功率"),
// P_HVAR("P_HVAR", "基波无功功率"),
// P_HVA("P_HVA", "基波视在功率"),
I1("I1", "基波电流"),
UNKNOWN_ERROR("-1", "未知异常"),
@@ -53,6 +59,7 @@ public enum DetectionCodeEnum {
this.code = code;
this.message = message;
}
public static DetectionCodeEnum getDetectionCodeByCode(String code) {
for (DetectionCodeEnum detectionCodeEnum : DetectionCodeEnum.values()) {
if (ObjectUtil.equals(code, detectionCodeEnum.getCode())) {

View File

@@ -51,6 +51,7 @@ public enum SourceOperateCodeEnum {
YJC_ALIGN("yjc_align","实时数据对齐校验"),
YJC_MXYZXJY("yjc_mxyzxjy", "模型一致性校验"),
FORMAL_REAL("formal_real","正式检测"),
RECORD_WAVE("record_wave","启动录波"),
// SIMULATE_REAL("simulate_real","模拟检测"),
Coefficient_Check("Coefficient_Check","系数校验"),
QUITE("quit","关闭设备通讯初始化"),

View File

@@ -14,6 +14,7 @@ public enum SourceResponseCodeEnum {
UNPROCESSED_BUSINESS(10201, "立即响应,业务还未处理,类似肯定应答"),
NORMAL_RESPONSE(10202, "正常响应中间状态码"),
ICD_NOT_FOUND(10500, "未找到对应ICD"),
RECORD_WAVE_FAILED(10501, "录波失败"),
MESSAGE_PARSING_ERROR(10520, "报文解析有误"),
CONTROLLED_SOURCE_ERROR(10521, "程控源参数有误"),
TEST_ITEM_PARSING_ERROR(10522, "测试项解析有误"),

View File

@@ -3,6 +3,8 @@ package com.njcn.gather.detection.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.gather.detection.pojo.po.AdPair;
import java.util.List;
/**
* @author caozehui
* @data 2025-08-18
@@ -16,4 +18,12 @@ public interface IAdPariService extends IService<AdPair> {
* @return
*/
Integer getMaxNum(String devMonitorId);
/**
* 根据设备id查询配对关系
*
* @param devIds
* @return
*/
List<AdPair> listByDevIds(List<String> devIds);
}

View File

@@ -1,6 +1,7 @@
package com.njcn.gather.detection.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.gather.detection.mapper.AdPairMapper;
import com.njcn.gather.detection.pojo.po.AdPair;
@@ -29,4 +30,11 @@ public class AdPairServiceImpl extends ServiceImpl<AdPairMapper, AdPair> impleme
}
return 1;
}
@Override
public List<AdPair> listByDevIds(List<String> devIds) {
LambdaQueryChainWrapper<AdPair> wrapper = this.lambdaQuery();
devIds.forEach(devId -> wrapper.likeRight(AdPair::getDevMonitorId, devId));
return this.list(wrapper);
}
}

View File

@@ -116,6 +116,9 @@ public class DetectionServiceImpl {
SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
List<ErrDtlsCheckDataVO> errDtlsCheckData = pqErrSysDtlsService.listByPqErrSysIdAndTypes(param);
ResultUnitEnum resultUnitEnumByCode = ResultUnitEnum.getResultUnitEnumByCode(sourceIssue.getType());
if (sourceIssue.getIsP()) {
resultUnitEnumByCode = ResultUnitEnum.P;
}
switch (resultUnitEnumByCode) {
/**
* 频率
@@ -381,6 +384,9 @@ public class DetectionServiceImpl {
List<SimAndDigNonHarmonicResult> info = new ArrayList<>();
List<String> devValueTypeList = sourceIssue.getDevValueTypeList();
for (String s : devValueTypeList) {
if ((DetectionCodeEnum.REAL_PREFIX.getCode() + "PF").equals(s)) {
continue;
}
// 根据数据处理规则取值。key为相别value为值列表
Map<String, List<Double>> map = devListMap(dev, dataRule, s.split("\\$")[1]);
Double fData = 1.0;
@@ -1184,9 +1190,15 @@ public class DetectionServiceImpl {
detectionData.setUnit(errSysDtl.getErrorUnit());
errSysDtl.setMaxErrorValue(maxErrorMultiply(errSysDtl, data, channelData, scale));
detectionData.setRadius(-errSysDtl.getMaxErrorValue() + "~" + errSysDtl.getMaxErrorValue());
// 处理相对值-标准值为0的问题
if (errSysDtl.getValueType() == 2 && errSysDtl.getErrorValueType() == 1 && channelData == 0) {
detectionData.setIsData(ResultEnum.NO_ERROR_SYS.getValue());
} else {
setDetection(dataRule, list, errSysDtl, detectionData, channelData, data, scale);
}
}
}
return detectionData;
}
@@ -1289,6 +1301,9 @@ public class DetectionServiceImpl {
//计算装置值返回值 - 源下发值的数据 = 差值
// BigDecimal subtract = BigDecimal.valueOf(devData).setScale(scale, RoundingMode.HALF_UP).subtract(BigDecimal.valueOf(channelData));
BigDecimal subtract = BigDecimal.valueOf(devData).subtract(BigDecimal.valueOf(channelData));
// if(ratedValue == 0 || channelData == 0){
// return BigDecimal.valueOf(Double.MAX_VALUE);
// }
//只有相对值需要%比较,绝对值直接相减就行
if (2 == error.getValueType()) {
switch (error.getErrorValueType()) {
@@ -1573,9 +1588,12 @@ public class DetectionServiceImpl {
boolean isDelta = DetectionCodeEnum.DELTA.getCode().equals(pqMonitor.getConnection());
Double fUn = pqMonitorService.getRatedVoltage(devMonitorId);
boolean isExitDelta = this.isExitDeltaIndex(devIdMapComm.get(split1[0]), devDataList);
if (isStar || !isExitDelta) {
if (isStar) {
fUn = BigDecimal.valueOf(fUn).divide(BigDecimal.valueOf(Math.sqrt(3)), oneConfig.getScale(), RoundingMode.HALF_UP).doubleValue();
}
// if (isDelta && !isExitDelta) {
// fUn = BigDecimal.valueOf(fUn).divide(BigDecimal.valueOf(Math.sqrt(3)), oneConfig.getScale(), RoundingMode.HALF_UP).doubleValue();
// }
Double fIn = pqMonitorService.getRatedCurrent(devMonitorId);
Double fHz = 50.0;
for (String testItemCode : testItemCodeList) {
@@ -1610,9 +1628,9 @@ public class DetectionServiceImpl {
case IRMS:
resultMap.put(PowerIndexEnum.I.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fIn, DetectionCodeEnum.IRMS.getCode(), dataRule, num, code, oneConfig.getScale()));
break;
case P_FUND:
resultMap.put(PowerIndexEnum.P.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn * fIn, DetectionCodeEnum.P_FUND.getCode(), dataRule, num, code, oneConfig.getScale()));
break;
// case P_FUND:
// resultMap.put(PowerIndexEnum.P.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn * fIn, DetectionCodeEnum.P_FUND.getCode(), dataRule, num, code, oneConfig.getScale()));
// break;
case V_UNBAN:
resultMap.put(PowerIndexEnum.IMBV.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, false, fUn, DetectionCodeEnum.V_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale()));
break;
@@ -1667,6 +1685,8 @@ public class DetectionServiceImpl {
if (descList.containsAll(deltaIndex)) {
List<PreDetection> devInfo = pqDevService.getDevInfo(Collections.singletonList(devId));
if (devInfo.get(0).getUsePhaseIndex() == 1) {
return false;
} else {
return true;
}
}

View File

@@ -29,6 +29,7 @@ import com.njcn.gather.plan.pojo.po.AdPlan;
import com.njcn.gather.plan.pojo.po.AdPlanSource;
import com.njcn.gather.plan.service.IAdPlanService;
import com.njcn.gather.plan.service.IAdPlanSourceService;
import com.njcn.gather.result.pojo.enums.ResultUnitEnum;
import com.njcn.gather.script.pojo.param.PqScriptCheckDataParam;
import com.njcn.gather.script.pojo.param.PqScriptIssueParam;
import com.njcn.gather.script.pojo.po.SourceIssue;
@@ -61,8 +62,6 @@ import java.util.stream.Collectors;
@Slf4j
public class PreDetectionServiceImpl implements PreDetectionService {
private final String stepTag = "&&";
private final IPqDevService iPqDevService;
private final IDictDataService dictDataService;
private final IAdPlanService iAdPlanService;
@@ -274,14 +273,14 @@ public class PreDetectionServiceImpl implements PreDetectionService {
@Override
public void sendScript(SimulateDetectionParam param) {
Channel channel = SocketManager.getChannelByUserId(param.getUserPageId() + DetectionCommunicateConstant.SOURCE);
if (Objects.isNull(channel) || !channel.isActive()) {
// 进行源通信连接
PreDetectionParam preDetectionParam = new PreDetectionParam();
preDetectionParam.setSourceId(param.getSourceId());
preDetectionParam.setUserPageId(param.getUserPageId());
preDetectionParam.setSendWebMsg(false);
this.sendYtxSocketSimulate(preDetectionParam);
}
// if (Objects.isNull(channel) || !channel.isActive()) {
// // 进行源通信连接
// PreDetectionParam preDetectionParam = new PreDetectionParam();
// preDetectionParam.setSourceId(param.getSourceId());
// preDetectionParam.setUserPageId(param.getUserPageId());
// preDetectionParam.setSendWebMsg(false);
// this.sendYtxSocketSimulate(preDetectionParam);
// }
//组装源控制脚本
PqScriptIssueParam issueParam = new PqScriptIssueParam();
issueParam.setSourceId(param.getSourceId());
@@ -295,12 +294,18 @@ public class PreDetectionServiceImpl implements PreDetectionService {
.collect(Collectors.toList());
SourceIssue sourceIssue = sourceIssues.get(0);
String type = sourceIssue.getType();
if (sourceIssue.getIsP()) {
sourceIssue.setType(ResultUnitEnum.V_ABSOLUTELY.getCode());
type = ResultUnitEnum.P.getCode();
}
List<String> comm = sourceIssue.getDevValueTypeList();
System.out.println("向装置下发的参数ddd>>>>>>>>" + comm);
SocketMsg<String> socketMsg = new SocketMsg<>();
socketMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + stepTag + sourceIssue.getType());
socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + type);
socketMsg.setData(JSON.toJSONString(sourceIssues.get(0)));
SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg));
}

View File

@@ -14,7 +14,7 @@ public enum DataSourceEnum {
MINUTE_STATISTICS_MIN("min", "分钟统计数据-最小"),
MINUTE_STATISTICS_AVG("avg", "分钟统计数据-平均"),
MINUTE_STATISTICS_CP95("cp95", "分钟统计数据-CP95"),
RECORDED_DATA("Recorded_data", "录播数据");
WAVE_DATA("wave_data", "录播数据");
private String value;
private String msg;

View File

@@ -75,9 +75,7 @@ public class ResultParam {
@Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.PLAN_ID_FORMAT_ERROR)
private String planId;
@ApiModelProperty(value = "脚本Id", required = true)
@NotBlank(message = DetectionValidMessage.SCRIPT_ID_NOT_BLANK)
@Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.SCRIPT_ID_FORMAT_ERROR)
@ApiModelProperty(value = "脚本Id", required = false)
private String scriptId;
@ApiModelProperty(value = "误差体系Id", required = true)
@@ -90,5 +88,8 @@ public class ResultParam {
private String deviceId;
private String code;
@ApiModelProperty(value = "模式Id", required = true)
private String patternId;
}
}

View File

@@ -63,6 +63,7 @@ public interface IResultService {
* 更换误差体系
*
* @param param
*
*/
void changeErrorSystem(ResultParam.ChangeErrorSystemParam param);

View File

@@ -11,11 +11,15 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.utils.PubUtils;
import com.njcn.gather.detection.handler.SocketContrastResponseService;
import com.njcn.gather.detection.pojo.enums.DetectionCodeEnum;
import com.njcn.gather.detection.pojo.param.PreDetectionParam;
import com.njcn.gather.detection.pojo.po.AdPair;
import com.njcn.gather.detection.pojo.po.DevData;
import com.njcn.gather.detection.pojo.vo.AlignDataVO;
import com.njcn.gather.detection.pojo.vo.DetectionData;
@@ -23,6 +27,7 @@ import com.njcn.gather.detection.service.IAdPariService;
import com.njcn.gather.detection.service.impl.DetectionServiceImpl;
import com.njcn.gather.detection.util.socket.CnSocketUtil;
import com.njcn.gather.device.pojo.enums.CommonEnum;
import com.njcn.gather.device.pojo.enums.PatternEnum;
import com.njcn.gather.device.pojo.po.PqDev;
import com.njcn.gather.device.service.IPqDevService;
import com.njcn.gather.plan.pojo.po.AdPlan;
@@ -72,6 +77,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Function;
@@ -351,6 +358,29 @@ public class ResultServiceImpl implements IResultService {
List<PqScriptDtls> f = scriptDtlIndexList.stream().filter(x -> "Freq".equals(x.getValueType())).collect(Collectors.toList());
dtlType.setScriptTypeName(dictTree.getName() + "=" + f.get(0).getValue() + ResultUnitEnum.FREQ.getUnit());
break;
case P: {
String unitV;
String unitI;
if (isValueType) {
unitV = ResultUnitEnum.V_RELATIVE.getUnit();
unitI = ResultUnitEnum.I_RELATIVE.getUnit();
} else {
unitV = ResultUnitEnum.V_ABSOLUTELY.getUnit();
unitI = ResultUnitEnum.I_ABSOLUTELY.getUnit();
}
List<PqScriptDtls> v = scriptDtlIndexList.stream().filter(x -> "VOL".equals(x.getValueType())).collect(Collectors.toList());
List<PqScriptDtls> i = scriptDtlIndexList.stream().filter(x -> "CUR".equals(x.getValueType())).collect(Collectors.toList());
List<PqScriptDtls> aDtl1 = scriptDtlIndexList.stream().filter(x -> "A".equals(x.getPhase()) && "VOL".equals(x.getValueType())).collect(Collectors.toList());
List<PqScriptDtls> aDtl2 = scriptDtlIndexList.stream().filter(x -> "A".equals(x.getPhase()) && "CUR".equals(x.getValueType())).collect(Collectors.toList());
double cosValue = Math.cos((aDtl1.get(0).getAngle() - aDtl2.get(0).getAngle()) / 180 * Math.PI);
BigDecimal bigDecimal = BigDecimal.valueOf(cosValue).setScale(6, BigDecimal.ROUND_HALF_UP);
dtlType.setScriptTypeName(ResultUnitEnum.V_RELATIVE.getName() + "=" + v.get(0).getValue().intValue() + unitV
+ " " + ResultUnitEnum.I_RELATIVE.getName() + "=" + i.get(0).getValue().intValue() + unitI
+ " cos(φ)=" + bigDecimal.doubleValue());
}
break;
/**
* 电压
*/
@@ -928,8 +958,14 @@ public class ResultServiceImpl implements IResultService {
@Override
@Transactional
public void changeErrorSystem(ResultParam.ChangeErrorSystemParam param) {
this.createTempResultTable(param.getCode() + "_temp");
this.calculateResult(param.getPlanId(), param.getScriptId(), param.getCode() + "_temp", param.getErrorSysId(), param.getDeviceId());
DictData dictData = dictDataService.getDictDataById(param.getPatternId());
if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) {
this.createTempResultTable(param.getCode() + "_temp", true);
this.contrastCalculateResult(param.getPlanId(), param.getCode() + "_temp", param.getErrorSysId(), param.getDeviceId());
} else {
this.createTempResultTable(param.getCode() + "_temp", false);
this.simAndDigCalculateResult(param.getPlanId(), param.getScriptId(), param.getCode() + "_temp", param.getErrorSysId(), param.getDeviceId());
}
}
@Override
@@ -940,7 +976,12 @@ public class ResultServiceImpl implements IResultService {
@Override
public void reCalculate(ResultParam.ChangeErrorSystemParam param) {
this.calculateResult(param.getPlanId(), param.getScriptId(), param.getCode(), param.getErrorSysId(), param.getDeviceId());
DictData dictData = dictDataService.getDictDataById(param.getPatternId());
if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) {
this.contrastCalculateResult(param.getPlanId(), param.getCode(), param.getErrorSysId(), param.getDeviceId());
} else {
this.simAndDigCalculateResult(param.getPlanId(), param.getScriptId(), param.getCode(), param.getErrorSysId(), param.getDeviceId());
}
}
/**
@@ -1809,11 +1850,12 @@ public class ResultServiceImpl implements IResultService {
* 拷贝结果表
*
* @param code
* @param isContrast
*/
private void createTempResultTable(String code) {
private void createTempResultTable(String code, boolean isContrast) {
this.dropTempResultTable(code);
String oldCode = code.replace("_temp", "");
tableGenMapper.genNonHarmonicResultTable(code, false);
tableGenMapper.genNonHarmonicResultTable(code, isContrast);
StringBuilder A = new StringBuilder();
StringBuilder B = new StringBuilder();
StringBuilder C = new StringBuilder();
@@ -1828,17 +1870,28 @@ public class ResultServiceImpl implements IResultService {
C.append("C_Value_").append(i).append(" json NULL COMMENT '").append(i).append("次C相谐波',");
}
}
String sql1 = "CREATE TABLE if not exists AD_Harmonic_Result_" + code + " (\n" +
" Monitor_Id CHAR(60) NOT NULL COMMENT '监测点Id',\n" +
" Dev_Monitor_Id CHAR(34) NOT NULL COMMENT '监测点Id',\n" +
" Time_Id DATETIME(3) NULL COMMENT '时间',\n" +
" Script_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id字典表',\n" +
" Sort int(5) NOT NULL COMMENT '总检测脚本中的测试项序号',\n" +
" AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',\n" +
" Data_Type CHAR(32) NOT NULL COMMENT '数据指标只有数据源为分钟统计时候才会使用最大、最小、平均、CP95默认平均值字典表',\n" +
" Result_Flag int(1) NOT NULL COMMENT '1合格 2不合格 4无法处理',\n" +
A + B + C +
" PRIMARY KEY (Monitor_Id, Script_Id, Sort, AD_Type)\n" +
") COMMENT='监测数据表';";
(isContrast ?
"Id char(32) COLLATE utf8mb4_bin NOT NULL COMMENT '主键Id',\n" +
"Std_Dev_Monitor_Id CHAR(34) NOT NULL COMMENT '标准设备监测点Id',\n" +
"Num tinyint(1) unsigned DEFAULT 0 COMMENT '第几次检测',\n" +
"Flag tinyint(1) unsigned DEFAULT NULL COMMENT '0表示被检设备数据1表示标准设备数据',\n" +
"A_Value_0 json NULL COMMENT 'A相基波有效值',\n" +
"B_Value_0 json NULL COMMENT 'B相基波有效值',\n" +
"C_Value_0 json NULL COMMENT 'B相基波有效值',\n" +
"PRIMARY KEY (Id)\n"
:
" Script_Id CHAR(32) NOT NULL COMMENT '检测脚本表Id',\n" +
" Sort int(4) NOT NULL COMMENT '总检测脚本中的测试项序号',\n" +
" PRIMARY KEY (Dev_Monitor_Id,Script_Id, Sort, AD_Type)\n"
) + ") COMMENT='谐波类检测结果表';";
tableGenMapper.genAdHarmonicTable(sql1);
sql1 = "CREATE TABLE ad_non_harmonic_" + code + " LIKE ad_non_harmonic_" + oldCode;
@@ -1856,14 +1909,14 @@ public class ResultServiceImpl implements IResultService {
}
/**
* 根据原始数据、误差体系id、计算检测结果
* 数模-根据原始数据、误差体系id、计算检测结果
*
* @param planId
* @param code
* @param errorSysId
* @param devId
*/
private void calculateResult(String planId, String scriptId, String code, String errorSysId, String devId) {
private void simAndDigCalculateResult(String planId, String scriptId, String code, String errorSysId, String devId) {
String oldCode = code.replace("_temp", "");
PreDetectionParam param = new PreDetectionParam();
param.setCode(code);
@@ -1912,13 +1965,13 @@ public class ResultServiceImpl implements IResultService {
List<SimAndDigHarmonicResult> harmonicResults = harmonicMap.get(sourceIssue.getIndex());
List<DevData> realDataXiList = new ArrayList<>();
if (CollUtil.isNotEmpty(nonHarmonicResults)) {
realDataXiList.addAll(this.toList(nonHarmonicResults, null, true));
realDataXiList.addAll(this.simAndDigToList(nonHarmonicResults, null, true));
}
if (CollUtil.isNotEmpty(harmonicResults)) {
if (DetectionCodeEnum.V2_50.getCode().equals(harmonicResults.get(0).getAdType()) || DetectionCodeEnum.I2_50.getCode().equals(harmonicResults.get(0).getAdType()) || DetectionCodeEnum.P2_50.getCode().equals(harmonicResults.get(0).getAdType())) {
realDataXiList.addAll(this.toList(null, harmonicResults, true));
realDataXiList.addAll(this.simAndDigToList(null, harmonicResults, true));
} else {
realDataXiList.addAll(this.toList(null, harmonicResults, false));
realDataXiList.addAll(this.simAndDigToList(null, harmonicResults, false));
}
}
@@ -1933,7 +1986,72 @@ public class ResultServiceImpl implements IResultService {
iPqDevService.updateResult(false, param.getDevIds(), valueType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity());
}
private List<DevData> toList(List<SimAndDigNonHarmonicResult> nonHarm, List<SimAndDigHarmonicResult> harm, boolean containBaseHarm) {
/**
* 比对-根据原始数据、误差体系id、计算检测结果
*
* @param planId
* @param code
* @param errorSysId
* @param deviceId
*/
private void contrastCalculateResult(String planId, String code, String errorSysId, String deviceId) {
String oldCode = code.replace("_temp", "");
Map<String, String> devIdMapComm = new HashMap<>();
PqDev dev = pqDevService.getById(deviceId);
devIdMapComm.put(dev.getIp(), deviceId);
AdPlan plan = adPlanService.getById(planId);
BiMap<String, String> testItemMap = HashBiMap.create();
List<String> testItemIds = Arrays.asList(plan.getTestItem().split(","));
List<DictTree> dictTreeList = dictTreeService.getDictTreeById(testItemIds);
List<String> fatherIdList = dictTreeList.stream().map(DictTree::getId).collect(Collectors.toList());
List<DictTree> childDictTreeList = dictTreeService.listByFatherIds(fatherIdList);
if (CollUtil.isNotEmpty(childDictTreeList)) {
List<String> collect1 = SocketContrastResponseService.testItemCodeMap.values().stream().flatMap(Collection::stream).map(x -> x.split("\\$")[1]).collect(Collectors.toList());
testItemMap.putAll(childDictTreeList.stream().filter(x -> collect1.contains(x.getCode())).collect(Collectors.toMap(obj -> DetectionCodeEnum.REAL_PREFIX.getCode() + obj.getCode(), obj -> obj.getId())));
}
DictDataEnum dataRule;
DictData dictData = dictDataService.getDictDataById(plan.getDataRule());
if (ObjectUtil.isNotNull(dictData)) {
dataRule = DictDataEnum.getDictDataEnumByCode(dictData.getCode());
} else {
dataRule = DictDataEnum.SECTION_VALUE;
}
List<AdPair> adPairList = adPairService.listByDevIds(Arrays.asList(deviceId));
Map<Integer, List<AdPair>> numAdPairsMap = adPairList.stream().collect(Collectors.groupingBy(AdPair::getNum, Collectors.toList()));
numAdPairsMap.forEach((num, pairList) -> {
BiMap<String, String> parsIp = HashBiMap.create();
Map<String, Integer> numMap = new HashMap<>();
Map<String, List<AdPair>> devMonitroIdMap = pairList.stream().collect(Collectors.groupingBy(AdPair::getDevMonitorId, Collectors.toList()));
devMonitroIdMap.forEach((devMonitorId, pairList1) -> {
String[] split1 = devMonitorId.split(CnSocketUtil.SPLIT_TAG);
AdPair adPair = pairList1.get(0);
String[] split2 = adPair.getStdDevMonitorId().split(CnSocketUtil.SPLIT_TAG);
PqDev stdDev = pqDevService.getById(split2[1]);
parsIp.put(dev.getIp() + split1[1], stdDev.getIp() + split2[1]);
numMap.put(devMonitorId, num);
numMap.put(adPair.getStdDevMonitorId(), num);
});
List<ContrastNonHarmonicResult> devNonHarmonicRawDataList = contrastNonHarmonicService.listAllRawData(oldCode, num, 0, deviceId, null);
List<ContrastNonHarmonicResult> stdDevNonHarmonicRawDataList = contrastNonHarmonicService.listAllRawData(oldCode, num, 1, deviceId, null);
List<ContrastHarmonicResult> devHarmonicRawDataList = contrastHarmonicService.listAllRawData(oldCode, num, 0, deviceId, null);
List<ContrastHarmonicResult> stdDevHarmonicRawDataList = contrastHarmonicService.listAllRawData(oldCode, num, 1, deviceId, null);
List<DevData> devData = contrastToList(devNonHarmonicRawDataList, devHarmonicRawDataList, testItemMap);
List<DevData> standardDevData = contrastToList(stdDevNonHarmonicRawDataList, stdDevHarmonicRawDataList, testItemMap);
detectionServiceImpl.processing(devData, standardDevData, parsIp, devIdMapComm, testItemMap.keySet().stream().collect(Collectors.toList()), errorSysId, dataRule, numMap, code);
});
}
private List<DevData> simAndDigToList(List<SimAndDigNonHarmonicResult> nonHarm, List<SimAndDigHarmonicResult> harm, boolean containBaseHarm) {
List<DevData> info = new ArrayList<>();
// if (CollUtil.isNotEmpty(nonHarm)) {
if (CollUtil.isNotEmpty(nonHarm)) {
@@ -2018,12 +2136,107 @@ public class ResultServiceImpl implements IResultService {
return info;
}
private List<String> reflectHarmonicValue(String phase, SimAndDigHarmonicResult adHarmonicResult, boolean notContainBaseHarm) {
private List<DevData> contrastToList(List<ContrastNonHarmonicResult> nonHarm, List<ContrastHarmonicResult> harm, BiMap<String, String> testItemMap) {
List<DevData> info = new ArrayList<>();
if (CollUtil.isNotEmpty(nonHarm)) {
Map<String, List<ContrastNonHarmonicResult>> devMonitorIdMap = nonHarm.stream().collect(Collectors.groupingBy(ContrastNonHarmonicResult::getDevMonitorId, Collectors.toList()));
devMonitorIdMap.forEach((devMonitorId, value) -> {
DevData devData = new DevData();
String[] split = devMonitorId.split(CnSocketUtil.SPLIT_TAG);
PqDev dev = pqDevService.getById(split[0]);
devData.setId(dev.getIp() + CnSocketUtil.SPLIT_TAG + split[1]);
Map<LocalDateTime, List<ContrastNonHarmonicResult>> timeListMap = value.stream().collect(Collectors.groupingBy(ContrastNonHarmonicResult::getTimeId, Collectors.toList()));
timeListMap.forEach((time, value1) -> {
List<DevData.SqlDataDTO> sqlData = new ArrayList<>();
devData.setTime(time.format(DateTimeFormatter.ofPattern(DatePattern.ISO8601_PATTERN)));
value1.forEach(x -> {
DevData.SqlDataDTO sqlDataDTO = new DevData.SqlDataDTO();
DevData.SqlDataDTO.ListDTO listDTO = new DevData.SqlDataDTO.ListDTO();
listDTO.setA(StrUtil.isNotBlank(x.getAValue()) ? Double.valueOf(x.getAValue()) : null);
listDTO.setB(StrUtil.isNotBlank(x.getBValue()) ? Double.valueOf(x.getBValue()) : null);
listDTO.setC(StrUtil.isNotBlank(x.getCValue()) ? Double.valueOf(x.getCValue()) : null);
listDTO.setT(StrUtil.isNotBlank(x.getTValue()) ? Double.valueOf(x.getTValue()) : null);
sqlDataDTO.setType(x.getDataType());
sqlDataDTO.setDesc(testItemMap.inverse().get(x.getAdType()).replace(DetectionCodeEnum.REAL_PREFIX.getCode(), ""));
sqlData.add(sqlDataDTO);
});
});
});
}
if (CollUtil.isNotEmpty(harm)) {
Map<String, List<ContrastHarmonicResult>> devMonitorIdMap = harm.stream().collect(Collectors.groupingBy(ContrastHarmonicResult::getDevMonitorId, Collectors.toList()));
devMonitorIdMap.forEach((devMonitorId, value) -> {
DevData devData = new DevData();
String[] split = devMonitorId.split(CnSocketUtil.SPLIT_TAG);
PqDev dev = pqDevService.getById(split[0]);
devData.setId(dev.getIp() + CnSocketUtil.SPLIT_TAG + split[1]);
Map<LocalDateTime, List<ContrastHarmonicResult>> timeListMap = value.stream().collect(Collectors.groupingBy(ContrastHarmonicResult::getTimeId, Collectors.toList()));
timeListMap.forEach((time, value1) -> {
devData.setTime(time.format(DateTimeFormatter.ofPattern(DatePattern.ISO8601_PATTERN)));
List<DevData.SqlDataDTO> sqlData = new ArrayList<>();
List<DevData.SqlDataHarmDTO> sqlDataHarm = new ArrayList<>();
value1.forEach(x -> {
DevData.SqlDataHarmDTO dataHarmDTO = new DevData.SqlDataHarmDTO();
dataHarmDTO.setType(x.getDataType());
String desc = testItemMap.inverse().get(x.getAdType()).replace(DetectionCodeEnum.REAL_PREFIX.getCode(), "");
dataHarmDTO.setDesc(desc);
boolean notContainBaseHarm = false;
if (DetectionCodeEnum.V2_50.getCode().equals(desc) || DetectionCodeEnum.PV2_50.getCode().equals(desc) || DetectionCodeEnum.I2_50.getCode().equals(desc)) {
dataHarmDTO.setNum(49);
notContainBaseHarm = true;
}
if (DetectionCodeEnum.SV_1_49.getCode().equals(desc) || DetectionCodeEnum.PSV_1_49.getCode().equals(desc) || DetectionCodeEnum.SI_1_49.getCode().equals(desc)) {
dataHarmDTO.setNum(50);
notContainBaseHarm = false;
}
DevData.SqlDataHarmDTO.ListDTO listHarmDTO = new DevData.SqlDataHarmDTO.ListDTO();
listHarmDTO.setA(reflectHarmonicValue("a", x, notContainBaseHarm));
listHarmDTO.setB(reflectHarmonicValue("b", x, notContainBaseHarm));
listHarmDTO.setC(reflectHarmonicValue("c", x, notContainBaseHarm));
dataHarmDTO.setList(listHarmDTO);
sqlDataHarm.add(dataHarmDTO);
if (DetectionCodeEnum.V2_50.getCode().equals(desc) || DetectionCodeEnum.PV2_50.getCode().equals(desc) || DetectionCodeEnum.SV_1_49.getCode().equals(desc) || DetectionCodeEnum.PSV_1_49.getCode().equals(desc)) {
DevData.SqlDataDTO sqlDataDTO = new DevData.SqlDataDTO();
sqlDataDTO.setType(x.getDataType());
DevData.SqlDataDTO.ListDTO listDTO = new DevData.SqlDataDTO.ListDTO();
listDTO.setA(StrUtil.isNotBlank(x.getAValue0()) ? Double.valueOf(x.getAValue0()) : null);
listDTO.setB(StrUtil.isNotBlank(x.getBValue0()) ? Double.valueOf(x.getBValue0()) : null);
listDTO.setC(StrUtil.isNotBlank(x.getCValue0()) ? Double.valueOf(x.getAValue0()) : null);
if (DetectionCodeEnum.PV2_50.getCode().equals(desc) || DetectionCodeEnum.PSV_1_49.getCode().equals(desc)) {
sqlDataDTO.setDesc(DetectionCodeEnum.PU1.getCode());
} else {
sqlDataDTO.setDesc(DetectionCodeEnum.U1.getCode());
}
sqlData.add(sqlDataDTO);
}
});
devData.setSqlDataHarm(sqlDataHarm);
devData.setSqlData(sqlData);
});
});
}
return info;
}
private <T extends BaseResult> List<String> reflectHarmonicValue(String phase, T adHarmonicResult, boolean notContainBaseHarm) {
List<String> info = new ArrayList<>();
for (int i = notContainBaseHarm ? 2 : 1; i <= 50; i++) {
String fieldName = phase + "Value" + i;
try {
Field idField = SimAndDigHarmonicResult.class.getDeclaredField(fieldName);
Field idField = null;
if (adHarmonicResult instanceof SimAndDigHarmonicResult) {
idField = SimAndDigHarmonicResult.class.getDeclaredField(fieldName);
}
if (adHarmonicResult instanceof ContrastHarmonicResult) {
idField = ContrastHarmonicResult.class.getDeclaredField(fieldName);
}
idField.setAccessible(true);
String value = idField.get(adHarmonicResult) + "";
info.add(value);

View File

@@ -64,6 +64,12 @@ public class SourceIssue {
@JSONField(name = "type", ordinal = 2)
private String type;
/**
* 是否是功率
*/
@JSONField(serialize = false)
private Boolean isP;
/**
* 多量响量
*/

View File

@@ -16,6 +16,7 @@ import com.njcn.gather.device.pojo.po.PqDev;
import com.njcn.gather.device.service.IPqDevService;
import com.njcn.gather.plan.mapper.AdPlanMapper;
import com.njcn.gather.plan.pojo.po.AdPlan;
import com.njcn.gather.result.pojo.enums.ResultUnitEnum;
import com.njcn.gather.script.mapper.PqScriptCheckDataMapper;
import com.njcn.gather.script.mapper.PqScriptDtlsMapper;
import com.njcn.gather.script.mapper.PqScriptMapper;
@@ -246,6 +247,11 @@ 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 (ResultUnitEnum.P.getCode().equals(issue.getType())) {
issue.setIsP(true);
} else {
issue.setIsP(false);
}
sourceIssues.add(issue);
}
});
@@ -413,6 +419,8 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
@Override
public List<PqScriptDtlsParam.CheckData> scriptDtlsCheckDataList(PqScriptDtlsParam sourceIssue) {
Boolean valueType = pqScriptMapper.selectScriptIsValueType(sourceIssue.getScriptId());
List<PqScriptDtlsParam.CheckData> info = new ArrayList<>();
//获取所有下拉值情况
List<PqScriptDtlsParam.CheckData> checkDataList = sourceIssue.getCheckDataList();
@@ -526,7 +534,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
if (harmIMap.containsKey(harmModel.getHarm())) {
PqScriptDtlsParam.ChannelListDTO.HarmModel i = harmIMap.get(harmModel.getHarm());
//电压*电流*cos电压角度-电流角度)
checkData.setValue(i.getFAmp() * harmModel.getFAmp() / 100 * Math.cos(harmModel.getFPhase() - i.getFPhase()));
checkData.setValue(i.getFAmp() * harmModel.getFAmp() / 100 * Math.cos((harmModel.getFPhase() - i.getFPhase()) * Math.PI / 180));
}
setCheck(info, checkData, channelListDTO, checkArchive, listDTO);
}
@@ -605,13 +613,13 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
break;
case I1:
break;
case P_FUND:
case W:
channelU = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
if (CollUtil.isNotEmpty(channelU)) {
for (PqScriptDtlsParam.ChannelListDTO listDTO : channelU) {
//获取电流通道
channelI = channelList.stream()
.filter(PqScriptDtlsParam.ChannelListDTO::getHarmFlag)
// .filter(PqScriptDtlsParam.ChannelListDTO::getHarmFlag)
.filter(x -> x.getChannelType().contains("I" + listDTO.getChannelType().substring(1, 2)))
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(channelI)) {
@@ -619,7 +627,56 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
checkData.setErrorFlag(channelListDTO.getErrorFlag());
checkData.setEnable(channelListDTO.getEnable());
//电压*电流*cos电压角度-电流角度)
checkData.setValue(channelI.get(0).getFAmp() * listDTO.getFAmp() * Math.cos(listDTO.getFPhase() - channelI.get(0).getFPhase()));
checkData.setValue(channelI.get(0).getFAmp() * listDTO.getFAmp() / 10000 * Math.cos((listDTO.getFPhase() - channelI.get(0).getFPhase()) * Math.PI / 180));
if (valueType) {
checkData.setValue(checkData.getValue() * 57.74 * 5);
}
setCheck(info, checkData, channelListDTO, checkArchive, listDTO);
}
}
}
break;
case VARW:
channelU = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
if (CollUtil.isNotEmpty(channelU)) {
for (PqScriptDtlsParam.ChannelListDTO listDTO : channelU) {
//获取电流通道
channelI = channelList.stream()
// .filter(PqScriptDtlsParam.ChannelListDTO::getHarmFlag)
.filter(x -> x.getChannelType().contains("I" + listDTO.getChannelType().substring(1, 2)))
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(channelI)) {
checkData = new PqScriptDtlsParam.CheckData();
checkData.setErrorFlag(channelListDTO.getErrorFlag());
checkData.setEnable(channelListDTO.getEnable());
//电压*电流*cos电压角度-电流角度)
checkData.setValue(channelI.get(0).getFAmp() * listDTO.getFAmp() / 10000 * Math.sin((listDTO.getFPhase() - channelI.get(0).getFPhase()) * Math.PI / 180));
if (valueType) {
checkData.setValue(checkData.getValue() * 57.74 * 5);
}
setCheck(info, checkData, channelListDTO, checkArchive, listDTO);
}
}
}
break;
case VAW:
channelU = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
if (CollUtil.isNotEmpty(channelU)) {
for (PqScriptDtlsParam.ChannelListDTO listDTO : channelU) {
//获取电流通道
channelI = channelList.stream()
// .filter(PqScriptDtlsParam.ChannelListDTO::getHarmFlag)
.filter(x -> x.getChannelType().contains("I" + listDTO.getChannelType().substring(1, 2)))
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(channelI)) {
checkData = new PqScriptDtlsParam.CheckData();
checkData.setErrorFlag(channelListDTO.getErrorFlag());
checkData.setEnable(channelListDTO.getEnable());
//电压*电流*cos电压角度-电流角度)
checkData.setValue(channelI.get(0).getFAmp() * listDTO.getFAmp() / 10000);
if (valueType) {
checkData.setValue(checkData.getValue() * 57.74 * 5);
}
setCheck(info, checkData, channelListDTO, checkArchive, listDTO);
}
}

View File

@@ -75,6 +75,9 @@ public class StorageUtil {
* 功率
*/
case "P":
case "W":
case "VARW":
case "VAW":
unit = "W";
break;
/**