间谐波电压取基波有效值、角型接线时若不存在线电压指标则使用相电压指标、表结构调整以记录配对关系

This commit is contained in:
caozehui
2025-08-21 10:13:16 +08:00
parent ddf6da0855
commit b4bd2e6d1d
30 changed files with 815 additions and 552 deletions

View File

@@ -1,8 +1,11 @@
package com.njcn.gather.detection.controller;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.constant.OperateType;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.LogUtil;
import com.njcn.gather.detection.pojo.param.ContrastDetectionParam;
import com.njcn.gather.detection.pojo.param.PreDetectionParam;
import com.njcn.gather.detection.pojo.param.SimulateDetectionParam;
@@ -17,8 +20,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* @author chendaofei
@@ -145,19 +146,13 @@ public class PreDetectionController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
/**
* 获取比对检测的监测次数信息
*
* @param planId
* @return
*/
@GetMapping("/getContrastTestNumInfo")
@OperateInfo
@ApiOperation("获取比对检测的检测次数信息")
@ApiImplicitParam(name = "planId", value = "计划ID", required = true)
public HttpResult<Map<Integer, Integer>> getContrastTestNumInfo(@RequestParam("planId") String planId) {
String methodDescribe = getMethodDescribe("getContrastTestNumInfo");
Map<Integer, Integer> result = preDetectionService.getContrastTestNumInfo(planId);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
@OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.DOWNLOAD)
@PostMapping("/exportAlignData")
@ApiOperation("实时对齐数据导出为csv文件")
public void exportAlignData() {
String methodDescribe = getMethodDescribe("exportAlignData");
LogUtil.njcnDebug(log, "{}", methodDescribe);
preDetectionService.exportAlignData();
}
}

View File

@@ -1,5 +1,6 @@
package com.njcn.gather.detection.handler;
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;
@@ -7,7 +8,9 @@ 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.param.ContrastDetectionParam;
@@ -32,7 +35,11 @@ import com.njcn.gather.plan.pojo.enums.DataSourceEnum;
import com.njcn.gather.plan.service.IAdPlanService;
import com.njcn.gather.storage.pojo.po.ContrastHarmonicResult;
import com.njcn.gather.storage.pojo.po.ContrastNonHarmonicResult;
import com.njcn.gather.storage.service.ContrastHarmonicService;
import com.njcn.gather.storage.service.ContrastNonHarmonicService;
import com.njcn.gather.storage.service.DetectionDataDealService;
import com.njcn.gather.system.cfg.pojo.po.SysTestConfig;
import com.njcn.gather.system.cfg.service.ISysTestConfigService;
import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum;
import com.njcn.gather.system.dictionary.pojo.po.DictData;
import com.njcn.gather.system.dictionary.pojo.po.DictTree;
@@ -40,7 +47,9 @@ import com.njcn.gather.system.dictionary.service.IDictDataService;
import com.njcn.gather.system.dictionary.service.IDictTreeService;
import com.njcn.gather.system.reg.pojo.po.SysRegRes;
import com.njcn.gather.system.reg.service.ISysRegResService;
import com.njcn.web.utils.ExcelUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
@@ -72,9 +81,11 @@ public class SocketContrastResponseService {
private final DetectionDataDealService detectionDataDealService;
private final ISysRegResService sysRegResService;
private final DetectionServiceImpl detectionService;
private final ContrastNonHarmonicService contrastNonHarmonicService;
private final ContrastHarmonicService contrastHarmonicService;
private final ISysTestConfigService sysTestConfigService;
private final IAdPariService adPairService;
/**
* 定时器
*/
@@ -90,6 +101,11 @@ public class SocketContrastResponseService {
*/
private boolean checkResult = false;
/**
* 是否接收数据
*/
private boolean isReceiveData = true;
/**
* 成功的配对 key:被检设备ip_通道号value:配对设备ip_通道号
*/
@@ -111,22 +127,78 @@ public class SocketContrastResponseService {
private SysRegRes contrastRegRes = null;
@Value("${log.homeDir}")
private String alignDataFilePath;
@Value("${phaseAngle.isEnable}")
private Boolean isPhaseAngle;
private static final Map<String, List<String>> testItemCodeMap = new HashMap() {{
put("FREQ", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.FREQ.getCode()));
// put("V", Arrays.asList("real$VRMS", "real$VA", "real$DELTA_V"));
put("V", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VRMS.getCode()));
put("HV", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V2_50.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.U1.getCode()));
put("HI", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I2_50.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I1.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()));
put("HI", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I2_50.getCode()));
put("HP", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.P2_50.getCode()));
put("HSV", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.SV_1_49.getCode()));
put("HSV", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.SV_1_49.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PSV_1_49.getCode()));
put("HSI", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.SI_1_49.getCode()));
// put("I", Arrays.asList("real$IRMS", "real$IA"));
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()));
}};
/**
* 获取比对式检测次数
*
* @param devMonitorIds 被检设备监测点id列表
* @return
*/
private Map<String, Integer> getContrastTestNum(List<String> devMonitorIds) {
Map<String, Integer> resultMap = new HashMap<>();
for (String devMonitorId : devMonitorIds) {
Integer maxNum = 1;
// DynamicTableNameHandler.setTableName("ad_non_harmonic_" + code);
// List<ContrastNonHarmonicResult> nonHarmonicResultList = contrastNonHarmonicService.lambdaQuery()
// .select(ContrastNonHarmonicResult::getNum)
// .eq(ContrastNonHarmonicResult::getMonitorId, devMonitorId)
// .orderByDesc(ContrastNonHarmonicResult::getNum)
// .last("LIMIT 1").list();
// if (CollUtil.isNotEmpty(nonHarmonicResultList)) {
// if (maxNum <= nonHarmonicResultList.get(0).getNum()) {
// maxNum = nonHarmonicResultList.get(0).getNum() + 1;
// }
// }
// DynamicTableNameHandler.remove();
//
// DynamicTableNameHandler.setTableName("ad_harmonic_" + code);
// List<ContrastHarmonicResult> harmonicResultList = contrastHarmonicService.lambdaQuery()
// .select(ContrastHarmonicResult::getNum)
// .eq(ContrastHarmonicResult::getMonitorId, devMonitorId)
// .orderByDesc(ContrastHarmonicResult::getNum)
// .last("LIMIT 1").list();
// if (CollUtil.isNotEmpty(harmonicResultList)) {
// if (maxNum <= harmonicResultList.get(0).getNum()) {
// maxNum = harmonicResultList.get(0).getNum() + 1;
// }
// }
// DynamicTableNameHandler.remove();
List<AdPair> adPairList = adPairService.lambdaQuery().select(AdPair::getNum)
.eq(AdPair::getDevMonitorId, devMonitorId)
.orderByDesc(AdPair::getNum)
.last("LIMIT 1").list();
if (CollUtil.isNotEmpty(adPairList)) {
if (maxNum <= adPairList.get(0).getNum()) {
maxNum = adPairList.get(0).getNum() + 1;
}
}
resultMap.put(devMonitorId, maxNum);
resultMap.put(FormalTestManager.pairsIdMap.get(devMonitorId), maxNum);
}
return resultMap;
}
/**
* 初始化操作
@@ -134,6 +206,8 @@ public class SocketContrastResponseService {
* @param param
*/
public void init(ContrastDetectionParam param) {
FormalTestManager.currentTestPlan = adPlanService.getById(param.getPlanId());
checkResult = false;
SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L);
SocketManager.contrastClockMap.clear();
@@ -143,10 +217,8 @@ public class SocketContrastResponseService {
FormalTestManager.isRemoveSocket = true;
HashBiMap<String, String> hashBiMap = HashBiMap.create(param.getPairs());
FormalTestManager.currentTestPlan = adPlanService.getById(param.getPlanId());
DictData pattern = dictDataService.getById(FormalTestManager.currentTestPlan.getPattern());
FormalTestManager.patternEnum = PatternEnum.getEnum(pattern.getCode());
FormalTestManager.pairsIdMap.clear();
FormalTestManager.pairsIdMap.putAll(hashBiMap);
List<PreDetection> pqDevList = pqDevService.getDevInfo(param.getDevIds());
// key为被检设备id_通道号value为监测点DTO
@@ -175,7 +247,7 @@ public class SocketContrastResponseService {
List<String> standardDevIds = hashBiMap.values().stream().map(key -> key.split(CnSocketUtil.SPLIT_TAG)[0]).distinct().collect(Collectors.toList());
FormalTestManager.standardDevList.addAll(pqStandardDevService.listStandardDevPreDetection(standardDevIds));
FormalTestManager.pairsMap.clear();
FormalTestManager.pairsIpMap.clear();
// 标准设备根据配对关系设置监测点
FormalTestManager.standardDevList.stream().forEach(x -> {
List<PreDetection.MonitorListDTO> monitorList = new ArrayList<>();
@@ -192,12 +264,34 @@ public class SocketContrastResponseService {
monitorListDTO.setPtStr(monitorListDTO1.getPtStr());
monitorListDTO.setCtStr(monitorListDTO1.getCtStr());
monitorListDTO.setStatInterval(monitorListDTO1.getStatInterval());
FormalTestManager.pairsMap.put(monitorListDTO1.getLineId(), monitorListDTO.getLineId());
FormalTestManager.pairsIpMap.put(monitorListDTO1.getLineId(), monitorListDTO.getLineId());
monitorList.add(monitorListDTO);
});
x.setMonitorList(monitorList);
});
FormalTestManager.devIdMapComm.clear();
FormalTestManager.devIdMapComm.putAll(FormalTestManager.devList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId)));
FormalTestManager.devIdMapComm.putAll(FormalTestManager.standardDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId)));
Map<String, Integer> numMap = getContrastTestNum(param.getPairs().keySet().stream().collect(Collectors.toList()));
param.setNumMap(numMap);
SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
if (param.getTestItemList().get(2)) {
numMap.forEach((devMonitorId, num) -> {
if (oneConfig.getMaxTime() < num) {
throw new BusinessException(DetectionResponseEnum.EXCEED_MAX_TIME);
}
});
}
DictData pattern = dictDataService.getById(FormalTestManager.currentTestPlan.getPattern());
FormalTestManager.patternEnum = PatternEnum.getEnum(pattern.getCode());
FormalTestManager.devNameMapComm.clear();
FormalTestManager.devNameMapComm.putAll(FormalTestManager.devList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevName)));
FormalTestManager.devNameMapComm.putAll(FormalTestManager.standardDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevName)));
FormalTestManager.devDataMap.clear();
FormalTestManager.devDataMap.putAll(FormalTestManager.devList.stream().flatMap(x -> x.getMonitorList().stream()).collect(Collectors.toMap(PreDetection.MonitorListDTO::getLineId, x -> new ArrayList<>())));
FormalTestManager.standardDevDataMap.clear();
@@ -229,13 +323,6 @@ public class SocketContrastResponseService {
FormalTestManager.dataRule = DictDataEnum.SECTION_VALUE;
}
FormalTestManager.devNameMapComm.clear();
FormalTestManager.devNameMapComm.putAll(FormalTestManager.devList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevName)));
FormalTestManager.devNameMapComm.putAll(FormalTestManager.standardDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevName)));
FormalTestManager.devIdMapComm.clear();
FormalTestManager.devIdMapComm.putAll(FormalTestManager.devList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId)));
FormalTestManager.devIdMapComm.putAll(FormalTestManager.standardDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId)));
FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_SBTXJY;
}
@@ -404,7 +491,7 @@ public class SocketContrastResponseService {
socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue());
DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam();
phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()])));
phaseSequenceParam.setDataType(Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VRMS.getCode()));
phaseSequenceParam.setDataType(Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VRMS.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PVRMS.getCode()));
phaseSequenceParam.setReadCount(this.getMaxReadCount(5));
phaseSequenceParam.setIgnoreCount(0);
socketMsg.setData(JSON.toJSONString(phaseSequenceParam));
@@ -472,16 +559,14 @@ public class SocketContrastResponseService {
CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
this.clearData();
Collection<String> disjunction = CollectionUtil.disjunction(FormalTestManager.pairsMap.keySet(), successPair.keySet());
Collection<String> disjunction = CollectionUtil.disjunction(FormalTestManager.pairsIpMap.keySet(), successPair.keySet());
// 向前端推送实时数据对齐失败的配对项
for (String key : disjunction) {
SocketDataMsg webSend = new SocketDataMsg();
webSend.setRequestId(SourceOperateCodeEnum.YJC_ALIGN.getValue());
webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue());
webSend.setCode(SourceResponseCodeEnum.FAIL.getCode());
webSend.setData(MsgUtil.getPairStr(key, FormalTestManager.pairsMap.inverse().get(key), FormalTestManager.devNameMapComm));
webSend.setData(MsgUtil.getPairStr(key, FormalTestManager.pairsIpMap.inverse().get(key), FormalTestManager.devNameMapComm));
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend));
}
// 推送最终失败结果
@@ -493,6 +578,9 @@ public class SocketContrastResponseService {
// 将数据推送给前端
this.sendAlignDataToWeb(param.getUserPageId());
this.saveAlignData();
this.clearData();
return;
}
@@ -504,12 +592,12 @@ public class SocketContrastResponseService {
String devMonitorId = monitorId1;
String standardDevMonitorId = monitorId1;
if (FormalTestManager.devDataMap.containsKey(monitorId1)) {
standardDevMonitorId = FormalTestManager.pairsMap.get(monitorId1);
standardDevMonitorId = FormalTestManager.pairsIpMap.get(monitorId1);
FormalTestManager.devDataMap.get(monitorId1).add(devData);
Collections.sort(FormalTestManager.devDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime())));
}
if (FormalTestManager.standardDevDataMap.containsKey(monitorId1)) {
devMonitorId = FormalTestManager.pairsMap.inverse().get(monitorId1);
devMonitorId = FormalTestManager.pairsIpMap.inverse().get(monitorId1);
FormalTestManager.standardDevDataMap.get(monitorId1).add(devData);
Collections.sort(FormalTestManager.standardDevDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime())));
}
@@ -528,13 +616,14 @@ public class SocketContrastResponseService {
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend));
// 若成功的配对项等于总的配对项,则判定为成功
if (successPair.keySet().containsAll(FormalTestManager.pairsMap.keySet())) {
if (successPair.keySet().containsAll(FormalTestManager.pairsIpMap.keySet())) {
checkResult = true;
scheduledFuture.cancel(true);
scheduler.shutdown();
// 将数据推送给前端
this.sendAlignDataToWeb(param.getUserPageId());
this.saveAlignData();
this.clearData();
@@ -552,9 +641,13 @@ public class SocketContrastResponseService {
phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()])));
phaseSequenceParam.setDataType(Arrays.asList(
DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VRMS.getCode(),
DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PVRMS.getCode(),
DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VA.getCode(),
DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.IRMS.getCode(),
DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.IA.getCode(),
DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.U1A.getCode(),
DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PU1A.getCode(),
DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I1A.getCode(),
DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.IRMS.getCode(),
DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V_UNBAN.getCode(),
DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I_UNBAN.getCode()));
phaseSequenceParam.setReadCount(this.getMaxReadCount(1));
@@ -616,14 +709,14 @@ public class SocketContrastResponseService {
String standardDevMonitorId = monitorId1;
if (FormalTestManager.devDataMap.containsKey(monitorId1)) {
standardDevMonitorId = FormalTestManager.pairsMap.get(monitorId1);
standardDevMonitorId = FormalTestManager.pairsIpMap.get(monitorId1);
if (!successPair.containsKey(devMonitorId)) {
FormalTestManager.devDataMap.get(monitorId1).add(devData);
Collections.sort(FormalTestManager.devDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime())));
}
}
if (FormalTestManager.standardDevDataMap.containsKey(monitorId1)) {
devMonitorId = FormalTestManager.pairsMap.inverse().get(monitorId1);
devMonitorId = FormalTestManager.pairsIpMap.inverse().get(monitorId1);
if (!successPair.containsKey(devMonitorId)) {
FormalTestManager.standardDevDataMap.get(monitorId1).add(devData);
Collections.sort(FormalTestManager.standardDevDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime())));
@@ -635,12 +728,12 @@ public class SocketContrastResponseService {
successComm.add(standardDevMonitorId);
successComm.add(devMonitorId);
// successComm.add(monitorId1);
List<List<DevData>> singleMonitorAlignData = getSingleMonitorAlignData(FormalTestManager.devDataMap.get(devMonitorId), FormalTestManager.standardDevDataMap.get(standardDevMonitorId));
List<List<DevData>> singleMonitorAlignData = getSingleMonitorAlignData(FormalTestManager.devDataMap.get(devMonitorId), FormalTestManager.standardDevDataMap.get(standardDevMonitorId), 1);
PreDetection.MonitorListDTO monitorListDTO = FormalTestManager.monitorMap.get(devMonitorId);
if (this.singleMonitorXuCheck(devMonitorId, standardDevMonitorId, monitorListDTO, singleMonitorAlignData.get(0), singleMonitorAlignData.get(1), FormalTestManager.devNameMapComm, param.getUserPageId())) {
successPair.put(devMonitorId, standardDevMonitorId);
// 若成功的配对项等于总的配对项,则判定为成功
if (successPair.keySet().containsAll(FormalTestManager.pairsMap.keySet())) {
if (successPair.keySet().containsAll(FormalTestManager.pairsIpMap.keySet())) {
this.clearData();
@@ -743,11 +836,11 @@ public class SocketContrastResponseService {
this.clearData();
Collection<String> disjunction = CollectionUtil.disjunction(FormalTestManager.pairsMap.keySet(), successPair.keySet());
Collection<String> disjunction = CollectionUtil.disjunction(FormalTestManager.pairsIpMap.keySet(), successPair.keySet());
// 向前端推送收集数据不完整的配对项
for (String key : disjunction) {
webSend.setCode(SourceResponseCodeEnum.FAIL.getCode());
webSend.setData(MsgUtil.getPairStr(key, FormalTestManager.pairsMap.inverse().get(key), FormalTestManager.devNameMapComm) + " 数据收集不完整!");
webSend.setData(MsgUtil.getPairStr(key, FormalTestManager.pairsIpMap.inverse().get(key), FormalTestManager.devNameMapComm) + " 数据收集不完整!");
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend));
}
// 推送最终失败结果
@@ -765,14 +858,14 @@ public class SocketContrastResponseService {
String standardDevMonitorId = monitorId1;
if (FormalTestManager.devDataMap.containsKey(monitorId1)) {
standardDevMonitorId = FormalTestManager.pairsMap.get(monitorId1);
standardDevMonitorId = FormalTestManager.pairsIpMap.get(monitorId1);
if (!successPair.containsKey(devMonitorId)) {
FormalTestManager.devDataMap.get(monitorId1).add(devData);
Collections.sort(FormalTestManager.devDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime())));
}
}
if (FormalTestManager.standardDevDataMap.containsKey(monitorId1)) {
devMonitorId = FormalTestManager.pairsMap.inverse().get(monitorId1);
devMonitorId = FormalTestManager.pairsIpMap.inverse().get(monitorId1);
if (!successPair.containsKey(devMonitorId)) {
FormalTestManager.standardDevDataMap.get(monitorId1).add(devData);
Collections.sort(FormalTestManager.standardDevDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime())));
@@ -781,7 +874,7 @@ public class SocketContrastResponseService {
if (!successPair.containsKey(devMonitorId)) {
if (FormalTestManager.devDataMap.get(devMonitorId).size() >= realTime && FormalTestManager.standardDevDataMap.get(standardDevMonitorId).size() >= realTime) {
List<List<DevData>> singleMonitorAlignData = getSingleMonitorAlignData(FormalTestManager.devDataMap.get(devMonitorId), FormalTestManager.standardDevDataMap.get(standardDevMonitorId));
List<List<DevData>> singleMonitorAlignData = getSingleMonitorAlignData(FormalTestManager.devDataMap.get(devMonitorId), FormalTestManager.standardDevDataMap.get(standardDevMonitorId), realTime);
if (singleMonitorAlignData.get(0).size() >= realTime && singleMonitorAlignData.get(1).size() >= realTime) {
successPair.put(devMonitorId, standardDevMonitorId);
// 推送收集数据成功的配对项
@@ -789,44 +882,41 @@ public class SocketContrastResponseService {
webSend.setData(MsgUtil.getPairStr(devMonitorId, standardDevMonitorId, FormalTestManager.devNameMapComm) + " 数据收集成功!");
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend));
if (successPair.keySet().containsAll(FormalTestManager.pairsMap.keySet())) {
if (successPair.keySet().containsAll(FormalTestManager.pairsIpMap.keySet())) {
isReceiveData = false;
// 断开与设备的连接,但是不要将Socket移除
CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
checkResult = true;
scheduledFuture.cancel(true);
scheduler.shutdown();
// 断开与设备的连接,但是不要将Socket移除
CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
String errorSysId = FormalTestManager.currentTestPlan.getErrorSysId();
String code = String.valueOf(FormalTestManager.currentTestPlan.getCode());
// 原始数据入库
baseDataInsert(singleMonitorAlignData.get(0), param.getNum(), code, FormalTestManager.testItemMap);
baseDataInsert(singleMonitorAlignData.get(1), param.getNum(), code, FormalTestManager.testItemMap);
// 配对关系入库
List<AdPair> adPairList = new ArrayList<>();
for (String key : FormalTestManager.pairsMap.keySet()) {
String standardDevId = FormalTestManager.pairsMap.get(key);
for (String key : FormalTestManager.pairsIdMap.keySet()) {
AdPair adPair = new AdPair();
adPair.setPlanId(FormalTestManager.currentTestPlan.getId());
String[] split = key.split(CnSocketUtil.SPLIT_TAG);
adPair.setDevMonitorId(FormalTestManager.devIdMapComm.get(split[0]) + CnSocketUtil.SPLIT_TAG + split[1]);
split = standardDevId.split(CnSocketUtil.SPLIT_TAG);
adPair.setStdDevMonitorId(FormalTestManager.devIdMapComm.get(split[0]) + CnSocketUtil.SPLIT_TAG + split[1]);
adPair.setNum(param.getNum());
adPair.setDevMonitorId(key);
adPair.setStdDevMonitorId(FormalTestManager.pairsIdMap.get(key));
adPair.setNum(param.getNumMap().get(key));
adPairList.add(adPair);
}
adPairService.saveBatch(adPairList);
// 原始数据入库
baseDataInsert(false, singleMonitorAlignData.get(0), param.getNumMap(), code);
baseDataInsert(true, singleMonitorAlignData.get(1), param.getNumMap(), code);
// 进行误差计算
List<DevLineTestResult> allResultList = detectionService.processing(
FormalTestManager.devDataMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList()),
FormalTestManager.standardDevDataMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList()),
FormalTestManager.pairsMap,
FormalTestManager.pairsIpMap,
FormalTestManager.devIdMapComm,
FormalTestManager.monitorMap,
FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toList()),
errorSysId, FormalTestManager.dataRule, param.getNum(), code);
errorSysId, FormalTestManager.dataRule, param.getNumMap(), code);
this.clearData();
@@ -834,6 +924,9 @@ public class SocketContrastResponseService {
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());
}
}
}
@@ -932,14 +1025,18 @@ public class SocketContrastResponseService {
* @return
*/
private List<String> getAllDataType() {
List<String> testCodes = FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toList());
if (testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V2_50.getCode())) {
Set<String> testCodes = FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toSet());
if (testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V2_50.getCode())
|| testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PV2_50.getCode())
|| testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.SV_1_49.getCode())
|| testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PSV_1_49.getCode())) {
testCodes.add(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.U1.getCode());
testCodes.add(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PU1.getCode());
}
if (testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I2_50.getCode())) {
testCodes.add(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I1.getCode());
}
return testCodes;
return testCodes.stream().sorted().collect(Collectors.toList());
}
/**
@@ -952,21 +1049,6 @@ public class SocketContrastResponseService {
return (int) (Math.ceil(targetCount / 5.0) * 20);
}
/**
* 向通讯模块发送不再接收数据
*/
private void sendNotReceiveData(String s) {
SocketMsg<String> socketMsg = new SocketMsg<>();
socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue());
socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue());
DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam();
phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()])));
phaseSequenceParam.setReadCount(0);
phaseSequenceParam.setIgnoreCount(0);
socketMsg.setData(JSON.toJSONString(phaseSequenceParam));
SocketManager.sendMsg(s, JSON.toJSONString(socketMsg));
}
/**
* 实时数据对齐-将数据推送给前端
@@ -991,7 +1073,8 @@ public class SocketContrastResponseService {
List<AlignDataVO.ChannelData> channelDataList = new ArrayList<>();
channelDataMap.forEach((channel, channelDevDataList) -> {
String standardDevMonitorId = ip + CnSocketUtil.SPLIT_TAG + channel;
String devMonitorId = FormalTestManager.pairsMap.inverse().get(standardDevMonitorId);
String devMonitorId = FormalTestManager.pairsIpMap.inverse().get(standardDevMonitorId);
PreDetection.MonitorListDTO monitorListDTO = FormalTestManager.monitorMap.get(devMonitorId);
List<DevData> devDataList = BeanUtil.copyToList(FormalTestManager.devDataMap.get(devMonitorId), DevData.class);
channelDevDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime())));
@@ -1000,21 +1083,43 @@ public class SocketContrastResponseService {
String[] split = devMonitorId.split(CnSocketUtil.SPLIT_TAG);
channelData.setDevInfo(FormalTestManager.devNameMapComm.get(split[0]) + "通道" + split[1]);
boolean isStar = DetectionCodeEnum.STAR.getCode().equals(monitorListDTO.getConnection());
boolean isDelta = DetectionCodeEnum.DELTA.getCode().equals(monitorListDTO.getConnection());
List<AlignDataVO.RawData> dataList = channelDevDataList.stream().map(obj -> {
DevData.SqlDataDTO.ListDTO list1 = null;
DevData.SqlDataDTO sqlDataDTO1 = null;
if (isStar) {
sqlDataDTO1 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.VRMS.getCode())).findFirst().orElse(null);
}
if (isDelta) {
sqlDataDTO1 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.PVRMS.getCode())).findFirst().orElse(null);
}
if (ObjectUtil.isNotNull(sqlDataDTO1)) {
list1 = sqlDataDTO1.getList();
}
AlignDataVO.RawData rawData = new AlignDataVO.RawData();
DevData.SqlDataDTO.ListDTO list = obj.getSqlData().get(0).getList();
rawData.setUaStdDev(list.getA());
rawData.setUbStdDev(list.getB());
rawData.setUcStdDev(list.getC());
rawData.setTimeStdDev(obj.getTime());
rawData.setUaStdDev(list1.getA());
rawData.setUbStdDev(list1.getB());
rawData.setUcStdDev(list1.getC());
rawData.setTimeStdDev(obj.getTime().replace("T", " "));
DevData devData = devDataList.stream().filter(obj1 -> DetectionUtil.isAlignData(obj1, obj)).findFirst().orElse(null);
if (ObjectUtil.isNotNull(devData)) {
DevData.SqlDataDTO.ListDTO list1 = devData.getSqlData().get(0).getList();
rawData.setUaDev(list1.getA());
rawData.setUbDev(list1.getB());
rawData.setUcDev(list1.getC());
rawData.setTimeDev(devData.getTime());
DevData.SqlDataDTO.ListDTO list2 = null;
DevData.SqlDataDTO sqlDataDTO2 = null;
if (isStar) {
sqlDataDTO2 = devData.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.VRMS.getCode())).findFirst().orElse(null);
}
if (isDelta) {
sqlDataDTO2 = devData.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.PVRMS.getCode())).findFirst().orElse(null);
}
if (ObjectUtil.isNotNull(sqlDataDTO2)) {
list2 = sqlDataDTO2.getList();
}
rawData.setUaDev(list2.getA());
rawData.setUbDev(list2.getB());
rawData.setUcDev(list2.getC());
rawData.setTimeDev(devData.getTime().replace("T", " "));
devDataList.remove(devData);
}
return rawData;
@@ -1026,7 +1131,7 @@ public class SocketContrastResponseService {
rawData.setUaDev(list.getA());
rawData.setUbDev(list.getB());
rawData.setUcDev(list.getC());
rawData.setTimeDev(obj.getTime());
rawData.setTimeDev(obj.getTime().replace("T", " "));
return rawData;
}).collect(Collectors.toList()));
channelData.setDataList(dataList);
@@ -1040,6 +1145,94 @@ public class SocketContrastResponseService {
WebServiceManager.sendMsg(userPageId, JSON.toJSONString(webSend));
}
/**
* 实时数据对齐-保存数据到excel文件
*/
private void saveAlignData() {
List<Map<String, Object>> sheetsList = new ArrayList<>();
// 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]));
ipDevDataMap.forEach((ip, stdDevDataList) -> {
// 按照通道号分组。key为通道号value为该通道号下所有设备数据
Map<String, List<DevData>> channelDataMap = stdDevDataList.stream().collect(Collectors.groupingBy(obj -> obj.getId().split(CnSocketUtil.SPLIT_TAG)[1]));
channelDataMap.forEach((channel, channelDevDataList) -> {
String standardDevMonitorId = ip + CnSocketUtil.SPLIT_TAG + channel;
String devMonitorId = FormalTestManager.pairsIpMap.inverse().get(standardDevMonitorId);
PreDetection.MonitorListDTO monitorListDTO = FormalTestManager.monitorMap.get(devMonitorId);
List<DevData> devDataList = BeanUtil.copyToList(FormalTestManager.devDataMap.get(devMonitorId), DevData.class);
channelDevDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime())));
HashMap sheet = new HashMap<>();
ExportParams exportParams = new ExportParams();
String standardDevName = FormalTestManager.devNameMapComm.get(ip);
exportParams.setSheetName(standardDevName + "通道" + channel);
sheet.put("title", exportParams);
List<AlignDataExcel> dataList = new ArrayList<>();
boolean isStar = DetectionCodeEnum.STAR.getCode().equals(monitorListDTO.getConnection());
boolean isDelta = DetectionCodeEnum.DELTA.getCode().equals(monitorListDTO.getConnection());
channelDevDataList.stream().forEach(obj -> {
DevData.SqlDataDTO.ListDTO list1 = null;
DevData.SqlDataDTO sqlDataDTO1 = null;
if (isStar) {
sqlDataDTO1 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.VRMS.getCode())).findFirst().orElse(null);
}
if (isDelta) {
sqlDataDTO1 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.PVRMS.getCode())).findFirst().orElse(null);
}
if (ObjectUtil.isNotNull(sqlDataDTO1)) {
list1 = sqlDataDTO1.getList();
}
AlignDataExcel alignDataExcel = new AlignDataExcel();
alignDataExcel.setTimeStdDev(obj.getTime().replace("T", " "));
alignDataExcel.setUaStdDev(list1.getA());
alignDataExcel.setUbStdDev(list1.getB());
alignDataExcel.setUcStdDev(list1.getC());
DevData devData = devDataList.stream().filter(obj1 -> DetectionUtil.isAlignData(obj1, obj)).findFirst().orElse(null);
if (ObjectUtil.isNotNull(devData)) {
DevData.SqlDataDTO.ListDTO list2 = null;
DevData.SqlDataDTO sqlDataDTO2 = null;
if (isStar) {
sqlDataDTO2 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.VRMS.getCode())).findFirst().orElse(null);
}
if (isDelta) {
sqlDataDTO2 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.PVRMS.getCode())).findFirst().orElse(null);
}
if (ObjectUtil.isNotNull(sqlDataDTO2)) {
list2 = sqlDataDTO2.getList();
}
alignDataExcel.setTimeDev(devData.getTime().replace("T", " "));
alignDataExcel.setUaDev(list2.getA());
alignDataExcel.setUbDev(list2.getB());
alignDataExcel.setUcDev(list2.getC());
devDataList.remove(devData);
}
dataList.add(alignDataExcel);
});
devDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime())));
devDataList.stream().forEach(obj -> {
AlignDataExcel alignDataExcel = new AlignDataExcel();
DevData.SqlDataDTO.ListDTO list2 = obj.getSqlData().get(0).getList();
alignDataExcel.setTimeDev(obj.getTime().replace("T", " "));
alignDataExcel.setUaDev(list2.getA());
alignDataExcel.setUbDev(list2.getB());
alignDataExcel.setUcDev(list2.getC());
dataList.add(alignDataExcel);
});
sheet.put("data", dataList);
sheet.put("entity", AlignDataExcel.class);
sheetsList.add(sheet);
});
});
ExcelUtil.saveExcel(alignDataFilePath, "实时数据.xlsx", sheetsList);
}
/**
* 模型一致性校验
*
@@ -1059,7 +1252,10 @@ public class SocketContrastResponseService {
List<String> allTestItem = this.getAllDataType();
if (DetectionCodeEnum.STAR.getCode().equals(monitorListDTO.getConnection())) {
// 移除相关线电压测试项
// allTestItem.remove()
allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PVRMS.getCode());
allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PU1.getCode());
allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PV2_50.getCode());
allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PSV_1_49.getCode());
}
if (DetectionCodeEnum.DELTA.getCode().equals(monitorListDTO.getConnection())) {
// 移除相关相电压测试项
@@ -1067,6 +1263,16 @@ public class SocketContrastResponseService {
allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.U1.getCode());
allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V2_50.getCode());
allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.SV_1_49.getCode());
// 如果是在是没有线电压谐波含有率、线电压间谐波含有率,勉强使其通过
if (!descList.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PV2_50.getCode())) {
allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PU1.getCode());
allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PV2_50.getCode());
}
if (!descList.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PSV_1_49.getCode())) {
allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PU1.getCode());
allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PSV_1_49.getCode());
}
}
if (CollUtil.isNotEmpty(descList) && descList.containsAll(allTestItem)) {
@@ -1089,9 +1295,10 @@ public class SocketContrastResponseService {
*
* @param devDataList 被检设备数据(已经按照时间戳从小到大排过序)
* @param standardDevDataList 标准设备数据(已经按照时间戳从小到大排过序)
* @param num 对齐的组数
* @return 返回一个List集合集合中仅有2个元素。下标为0的元素为被检设备数据下标为1的元素为其一一对齐的标准设备数据
*/
private List<List<DevData>> getSingleMonitorAlignData(List<DevData> devDataList, List<DevData> standardDevDataList) {
private List<List<DevData>> getSingleMonitorAlignData(List<DevData> devDataList, List<DevData> standardDevDataList, Integer num) {
List<List<DevData>> result = new ArrayList<>();
List<DevData> alignDevData = new ArrayList<>();
@@ -1107,6 +1314,10 @@ public class SocketContrastResponseService {
alignDevData.add(devDataList.get(j));
alignStdDevData.add(standardDevDataList.get(i));
jStart = j + 1;
if (alignDevData.size() >= num && alignStdDevData.size() >= num) {
jStart = devDataList.size();
}
break;
}
}
@@ -1184,8 +1395,8 @@ public class SocketContrastResponseService {
}
if (isDelta) {
// 角型接线方式,则获取线电压
uDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.LINE_VRMS.getCode());
uStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.LINE_VRMS.getCode());
uDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.PVRMS.getCode());
uStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.PVRMS.getCode());
}
if (CollUtil.isNotEmpty(uDev) && CollUtil.isNotEmpty(uStd)) {
@@ -1289,44 +1500,66 @@ public class SocketContrastResponseService {
WebServiceManager.sendMsg(userId, JSON.toJSONString(webSend));
}
// 获取被检设备的额定电流
Double ratedCurrent = Double.valueOf(monitorListDTO.getCtStr().split("\\:")[1]);
// 动态调控是否支持相角差校验
if (isPhaseAngle) {
// 获取被检设备的额定电流
Double ratedCurrent = Double.valueOf(monitorListDTO.getCtStr().split("\\:")[1]);
// 是否存在电流
boolean notHasCurrent = iDev.stream().allMatch(
p -> p.getList().getA() != null && DetectionUtil.isZero(p.getList().getA(), ratedCurrent)
&& p.getList().getB() != null && DetectionUtil.isZero(p.getList().getB(), ratedCurrent)
&& p.getList().getC() != null && DetectionUtil.isZero(p.getList().getC(), ratedCurrent));
if (!notHasCurrent) {
detail = "数据为空!";
// 相角差校验
List<DevData.SqlDataDTO> vaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.VA.getCode());
List<DevData.SqlDataDTO> vaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.VA.getCode());
List<DevData.SqlDataDTO> iaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.IA.getCode());
List<DevData.SqlDataDTO> iaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.IA.getCode());
if (CollUtil.isNotEmpty(vaDev) && CollUtil.isNotEmpty(vaStd) && CollUtil.isNotEmpty(iaDev) && CollUtil.isNotEmpty(iaStd)) {
DevData.SqlDataDTO.ListDTO vaDevList = vaDev.get(0).getList();
DevData.SqlDataDTO.ListDTO vaStdList = vaDev.get(0).getList();
DevData.SqlDataDTO.ListDTO iaDevList = vaDev.get(0).getList();
DevData.SqlDataDTO.ListDTO iaStdList = vaDev.get(0).getList();
// 是否存在电流
boolean notHasCurrent = iDev.stream().allMatch(
p -> p.getList().getA() != null && DetectionUtil.isZero(p.getList().getA(), ratedCurrent)
&& p.getList().getB() != null && DetectionUtil.isZero(p.getList().getB(), ratedCurrent)
&& p.getList().getC() != null && DetectionUtil.isZero(p.getList().getC(), ratedCurrent));
if (!notHasCurrent) {
detail = "数据为空!";
// 相角差校验
List<DevData.SqlDataDTO> vaDev = null;
List<DevData.SqlDataDTO> vaStd = null;
List<DevData.SqlDataDTO> iaDev = null;
List<DevData.SqlDataDTO> iaStd = null;
if (isStar) {
vaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.VA.getCode());
vaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.VA.getCode());
iaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.IA.getCode());
iaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.IA.getCode());
if (CollUtil.isEmpty(vaDev) && CollUtil.isEmpty(vaStd) && CollUtil.isEmpty(iaDev) && CollUtil.isEmpty(iaStd)) {
vaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.U1A.getCode());
vaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.U1A.getCode());
iaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.I1A.getCode());
iaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.I1A.getCode());
}
}
if (isDelta) {
vaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.PU1A.getCode());
vaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.PU1A.getCode());
iaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.I1A.getCode());
iaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.I1A.getCode());
}
detail = "被检设备a=" + (vaDevList.getA() - iaDevList.getA()) + "°,b=" + (vaDevList.getB() - iaDevList.getB()) + "°,c=" + (vaDevList.getC() - iaDevList.getC()) + "标准设备a=" + (vaStdList.getA() - iaStdList.getA()) + "°,b=" + (vaStdList.getB() - iaStdList.getB()) + "°,c=" + (vaStdList.getC() - iaStdList.getC());
if (CollUtil.isNotEmpty(vaDev) && CollUtil.isNotEmpty(vaStd) && CollUtil.isNotEmpty(iaDev) && CollUtil.isNotEmpty(iaStd)) {
DevData.SqlDataDTO.ListDTO vaDevList = vaDev.get(0).getList();
DevData.SqlDataDTO.ListDTO vaStdList = vaDev.get(0).getList();
DevData.SqlDataDTO.ListDTO iaDevList = vaDev.get(0).getList();
DevData.SqlDataDTO.ListDTO iaStdList = vaDev.get(0).getList();
if (!phaseCheck(vaDevList, iaDevList, vaStdList, iaStdList)) {
// 单个检测点相角校验失败,推送失败消息
detail = "被检设备a=" + (vaDevList.getA() - iaDevList.getA()) + "°,b=" + (vaDevList.getB() - iaDevList.getB()) + "°,c=" + (vaDevList.getC() - iaDevList.getC()) + "标准设备a=" + (vaStdList.getA() - iaStdList.getA()) + "°,b=" + (vaStdList.getB() - iaStdList.getB()) + "°,c=" + (vaStdList.getC() - iaStdList.getC());
if (!phaseCheck(vaDevList, iaDevList, vaStdList, iaStdList)) {
// 单个检测点相角校验失败,推送失败消息
flag = false;
webSend.setCode(SourceResponseCodeEnum.FAIL.getCode());
webSend.setData(pairStr + ":相角差校验失败!" + detail);
} else {
webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode());
webSend.setData(pairStr + ":相角差校验成功!" + detail);
}
} else {
flag = false;
webSend.setCode(SourceResponseCodeEnum.FAIL.getCode());
webSend.setData(pairStr + ":相角差校验失败!" + detail);
} else {
webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode());
webSend.setData(pairStr + ":相角差校验成功!" + detail);
webSend.setData(pairStr + ":相角差校验失败!相角差" + detail);
}
} else {
flag = false;
webSend.setCode(SourceResponseCodeEnum.FAIL.getCode());
webSend.setData(pairStr + ":相角差校验失败!相角差" + detail);
WebServiceManager.sendMsg(userId, JSON.toJSONString(webSend));
}
WebServiceManager.sendMsg(userId, JSON.toJSONString(webSend));
}
return flag;
}
@@ -1418,18 +1651,22 @@ public class SocketContrastResponseService {
/**
* 比对式原始数据入库
*
* @param devDataList 原始数据
* @param num 第几次检测
* @param code 表后缀code
* @param checkItemMap 检测项Map key为检测项codevalue为检测项的id
* @param isStdDev 是否为标准设备
* @param devDataList 原始数据
* @param numMap 第几次监测 key为被检设备监测点id,value为第几次监测
* @param code 表后缀code
*/
private void baseDataInsert(List<DevData> devDataList, Integer num, String code, Map<String, String> checkItemMap) {
private void baseDataInsert(boolean isStdDev, List<DevData> devDataList, Map<String, Integer> numMap, String code) {
System.out.println("原始数据插入数据库开始执行=========================================");
List<ContrastNonHarmonicResult> contrastNonHarmonicResults = new ArrayList<>();
List<ContrastHarmonicResult> contrastHarmonicResults = new ArrayList<>();
Map<String, String> harmonicRelationMap = new HashMap<>();
harmonicRelationMap.put(DetectionCodeEnum.V2_50.getCode(), DetectionCodeEnum.U1.getCode());
harmonicRelationMap.put(DetectionCodeEnum.PV2_50.getCode(), DetectionCodeEnum.PU1.getCode());
harmonicRelationMap.put(DetectionCodeEnum.SV_1_49.getCode(), DetectionCodeEnum.U1.getCode());
harmonicRelationMap.put(DetectionCodeEnum.PSV_1_49.getCode(), DetectionCodeEnum.PU1.getCode());
harmonicRelationMap.put(DetectionCodeEnum.I2_50.getCode(), DetectionCodeEnum.I1.getCode());
harmonicRelationMap.put(DetectionCodeEnum.SI_1_49.getCode(), DetectionCodeEnum.I1.getCode());
for (DevData data : devDataList) {
LocalDateTime localDateTime = DetectionUtil.timeFormat(data.getTime(), DetectionUtil.FORMATTER);
if (Objects.nonNull(localDateTime)) {
@@ -1438,15 +1675,20 @@ public class SocketContrastResponseService {
String temId = FormalTestManager.devIdMapComm.get(splitArr[0]) + CnSocketUtil.SPLIT_TAG + splitArr[1];
for (DevData.SqlDataDTO sqlDataDTO : data.getSqlData()) {
if (!DetectionCodeEnum.U1.getCode().equals(sqlDataDTO.getDesc()) && !DetectionCodeEnum.I1.getCode().equals(sqlDataDTO.getDesc())) {
if (!DetectionCodeEnum.U1.getCode().equals(sqlDataDTO.getDesc()) && !DetectionCodeEnum.PU1.getCode().equals(sqlDataDTO.getDesc()) && !DetectionCodeEnum.I1.getCode().equals(sqlDataDTO.getDesc())) {
DevData.SqlDataDTO.ListDTO listDTO = sqlDataDTO.getList();
ContrastNonHarmonicResult adNonHarmonicResult = new ContrastNonHarmonicResult();
adNonHarmonicResult.setTimeId(localDateTime);
adNonHarmonicResult.setMonitorId(temId);
adNonHarmonicResult.setNum(num);
adNonHarmonicResult.setAdType(checkItemMap.get(DetectionCodeEnum.REAL_PREFIX.getCode() + sqlDataDTO.getDesc()));
adNonHarmonicResult.setNum(numMap.get(temId));
adNonHarmonicResult.setAdType(FormalTestManager.testItemMap.get(DetectionCodeEnum.REAL_PREFIX.getCode() + sqlDataDTO.getDesc()));
adNonHarmonicResult.setDataType(DataSourceEnum.REAL_DATA.getValue());
if (isStdDev) {
adNonHarmonicResult.setDevMonitorId(FormalTestManager.pairsIdMap.inverse().get(temId));
adNonHarmonicResult.setStdDevMonitorId(temId);
} else {
adNonHarmonicResult.setDevMonitorId(temId);
adNonHarmonicResult.setStdDevMonitorId(FormalTestManager.pairsIdMap.get(temId));
}
Double a = listDTO.getA();
Double b = listDTO.getB();
@@ -1472,11 +1714,16 @@ public class SocketContrastResponseService {
String dui = harmonicRelationMap.get(sqlDataDTO.getDesc());
ContrastHarmonicResult adHarmonicResult = new ContrastHarmonicResult();
adHarmonicResult.setTimeId(localDateTime);
adHarmonicResult.setMonitorId(temId);
adHarmonicResult.setNum(num);
adHarmonicResult.setAdType(checkItemMap.get(DetectionCodeEnum.REAL_PREFIX.getCode() + sqlDataDTO.getDesc()));
adHarmonicResult.setNum(numMap.get(temId));
adHarmonicResult.setAdType(FormalTestManager.testItemMap.get(DetectionCodeEnum.REAL_PREFIX.getCode() + sqlDataDTO.getDesc()));
adHarmonicResult.setDataType(DataSourceEnum.REAL_DATA.getValue());
if (isStdDev) {
adHarmonicResult.setDevMonitorId(FormalTestManager.pairsIdMap.inverse().get(temId));
adHarmonicResult.setStdDevMonitorId(temId);
} else {
adHarmonicResult.setDevMonitorId(temId);
adHarmonicResult.setStdDevMonitorId(FormalTestManager.pairsIdMap.get(temId));
}
if (ObjectUtil.isNotNull(dui)) {
DevData.SqlDataDTO.ListDTO vvv = data.getSqlData().stream().filter(it -> it.getDesc().equals(dui)).collect(Collectors.toList()).get(0).getList();
@@ -1485,13 +1732,16 @@ public class SocketContrastResponseService {
Double bV = vvv.getB();
Double cV = vvv.getC();
if (Objects.nonNull(aV)) {
adHarmonicResult.setAValue1(String.format("%.7f", aV));
// adHarmonicResult.setAValue1(String.format("%.7f", aV));
adHarmonicResult.setAValue0(String.format("%.7f", aV));
}
if (Objects.nonNull(bV)) {
adHarmonicResult.setBValue1(String.format("%.7f", bV));
// adHarmonicResult.setBValue1(String.format("%.7f", bV));
adHarmonicResult.setBValue0(String.format("%.7f", bV));
}
if (Objects.nonNull(cV)) {
adHarmonicResult.setCValue1(String.format("%.7f", cV));
// adHarmonicResult.setCValue1(String.format("%.7f", cV));
adHarmonicResult.setCValue0(String.format("%.7f", bV));
}
}
}
@@ -1503,7 +1753,7 @@ public class SocketContrastResponseService {
Class<ContrastHarmonicResult> example = (Class<ContrastHarmonicResult>) adHarmonicResult.getClass();
if (DetectionCodeEnum.SV_1_49.getCode().equals(sqlDataDTO.getDesc()) || DetectionCodeEnum.SI_1_49.getCode().equals(sqlDataDTO.getDesc())) {
if (DetectionCodeEnum.SV_1_49.getCode().equals(sqlDataDTO.getDesc()) || DetectionCodeEnum.PSV_1_49.getCode().equals(sqlDataDTO.getDesc()) || DetectionCodeEnum.SI_1_49.getCode().equals(sqlDataDTO.getDesc())) {
for (int i = 1; i < a.size() + 1; i++) {
try {
Field aField = example.getDeclaredField("aValue" + i);
@@ -1543,31 +1793,33 @@ public class SocketContrastResponseService {
}
}
if (CollUtil.isNotEmpty(contrastNonHarmonicResults)) {
Map<String, List<ContrastNonHarmonicResult>> map = contrastNonHarmonicResults.stream().collect(Collectors.groupingBy(x -> x.getMonitorId() + x.getTimeId() + x.getNum() + x.getAdType()));
List<ContrastNonHarmonicResult> info = new ArrayList<>();
map.forEach((key, value) -> {
if (value.size() > 1) {
System.err.println("重复时间戳->" + key + value);
} else {
info.addAll(value);
}
});
detectionDataDealService.acceptAdNon(info, code);
}
if (CollUtil.isNotEmpty(contrastHarmonicResults)) {
Map<String, List<ContrastHarmonicResult>> map = contrastHarmonicResults.stream().collect(Collectors.groupingBy(x -> x.getMonitorId() + x.getTimeId() + x.getNum() + x.getAdType()));
List<ContrastHarmonicResult> info = new ArrayList<>();
map.forEach((key, value) -> {
if (value.size() > 1) {
System.err.println("重复时间戳->" + key + value);
} else {
info.addAll(value);
}
});
detectionDataDealService.acceptAd(info, code);
}
// if (CollUtil.isNotEmpty(contrastNonHarmonicResults)) {
// Map<String, List<ContrastNonHarmonicResult>> map = contrastNonHarmonicResults.stream().collect(Collectors.groupingBy(x -> x.getDevMonitorId() + x.getTimeId() + x.getNum() + x.getAdType()));
// List<ContrastNonHarmonicResult> info = new ArrayList<>();
// map.forEach((key, value) -> {
// if (value.size() > 1) {
// System.err.println("重复时间戳->" + key + value);
// } else {
// info.addAll(value);
// }
// });
//
// detectionDataDealService.acceptNonHarmonic(info, code);
// }
// if (CollUtil.isNotEmpty(contrastHarmonicResults)) {
// Map<String, List<ContrastHarmonicResult>> map = contrastHarmonicResults.stream().collect(Collectors.groupingBy(x -> x.getDevMonitorId() + x.getTimeId() + x.getNum() + x.getAdType()));
// List<ContrastHarmonicResult> info = new ArrayList<>();
// map.forEach((key, value) -> {
// if (value.size() > 1) {
// System.err.println("重复时间戳->" + key + value);
// } else {
// info.addAll(value);
// }
// });
// detectionDataDealService.acceptHarmonic(info, code);
// }
detectionDataDealService.acceptNonHarmonic(contrastNonHarmonicResults, code);
detectionDataDealService.acceptHarmonic(contrastHarmonicResults, code);
System.out.println("原始数据插入数据库执行成功=========================================");
}

View File

@@ -1299,7 +1299,7 @@ public class SocketDevResponseService {
checkDataParam.setIsValueTypeName(false);
List<String> valueType = iPqScriptCheckDataService.getValueType(checkDataParam);
iPqDevService.updateResult(param.getDevIds(), valueType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity());
iPqDevService.updateResult(false,param.getDevIds(), valueType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity());
CnSocketUtil.quitSend(param);
}
successComm.clear();
@@ -1792,7 +1792,7 @@ public class SocketDevResponseService {
DevData.SqlDataDTO.ListDTO listDTO = sqlDataDTO.getList();
SimAndDigNonHarmonicResult adNonHarmonicResult = new SimAndDigNonHarmonicResult();
adNonHarmonicResult.setTimeId(localDateTime);
adNonHarmonicResult.setMonitorId(temId);
adNonHarmonicResult.setDevMonitorId(temId);
adNonHarmonicResult.setScriptId(param.getScriptId());
adNonHarmonicResult.setSort(sourceIssue.getIndex());
@@ -1825,7 +1825,7 @@ public class SocketDevResponseService {
SimAndDigHarmonicResult adHarmonicResult = new SimAndDigHarmonicResult();
adHarmonicResult.setTimeId(localDateTime);
adHarmonicResult.setMonitorId(temId);
adHarmonicResult.setDevMonitorId(temId);
adHarmonicResult.setScriptId(param.getScriptId());
adHarmonicResult.setSort(sourceIssue.getIndex());
adHarmonicResult.setAdType(checkDataMap.get(sqlDataDTO.getDesc()));
@@ -1898,7 +1898,7 @@ public class SocketDevResponseService {
}
if (CollUtil.isNotEmpty(simAndDigNonHarmonicResultList)) {
Map<String, List<SimAndDigNonHarmonicResult>> map = simAndDigNonHarmonicResultList.stream().collect(Collectors.groupingBy(x -> x.getMonitorId() + x.getTimeId() + x.getScriptId() + x.getSort() + x.getAdType() + x.getDataType()));
Map<String, List<SimAndDigNonHarmonicResult>> map = simAndDigNonHarmonicResultList.stream().collect(Collectors.groupingBy(x -> x.getDevMonitorId() + x.getTimeId() + x.getScriptId() + x.getSort() + x.getAdType() + x.getDataType()));
List<SimAndDigNonHarmonicResult> info = new ArrayList<>();
map.forEach((key, value) -> {
if (value.size() > 1) {
@@ -1908,10 +1908,10 @@ public class SocketDevResponseService {
}
});
detectionDataDealService.acceptAdNon(info, param.getCode());
detectionDataDealService.acceptNonHarmonic(info, param.getCode());
}
if (CollUtil.isNotEmpty(adHarmonicResultList)) {
Map<String, List<SimAndDigHarmonicResult>> map = adHarmonicResultList.stream().collect(Collectors.groupingBy(x -> x.getMonitorId() + x.getTimeId() + x.getScriptId() + x.getSort() + x.getAdType() + x.getDataType()));
Map<String, List<SimAndDigHarmonicResult>> map = adHarmonicResultList.stream().collect(Collectors.groupingBy(x -> x.getDevMonitorId() + x.getTimeId() + x.getScriptId() + x.getSort() + x.getAdType() + x.getDataType()));
List<SimAndDigHarmonicResult> info = new ArrayList<>();
map.forEach((key, value) -> {
if (value.size() > 1) {
@@ -1920,7 +1920,7 @@ public class SocketDevResponseService {
info.addAll(value);
}
});
detectionDataDealService.acceptAd(info, param.getCode());
detectionDataDealService.acceptHarmonic(info, param.getCode());
}
System.out.println("原始数据插入数据库执行成功=========================================");
// };

View File

@@ -13,19 +13,25 @@ public enum DetectionCodeEnum {
FREQ("FREQ", "频率"),
VRMS("VRMS", "相电压有效值"),
LINE_VRMS("LINE_VRMS", "线电压有效值"),
PVRMS("PVRMS", "线电压有效值"),
DELTA_V("DELTA_V", "电压偏差"),
VA("VA", "电压相角"),
U1A("U1A", "相电压基波有效值角度值"),
PU1A("PU1A", "线电压基波有效值角度值"),
U1("U1", "基波电压"),
PU1("PU1", "线电压基波电压"),
V2_50("V2-50", "谐波电压"),
PV2_50("PV2-50", "线电压谐波电压"),
I2_50("I2-50", "谐波电流"),
P2_50("P2-50", "谐波有功功率"),
SV_1_49("SV_1-49", "间谐波电压"),
PSV_1_49("PSV_1-49", "线电压间谐波电压"),
SI_1_49("SI_1-49", "间谐波电流"),
MAG("MAG", "电压幅值"),
DUR("DUR", "持续时间"),
IRMS("IRMS", "电流有效值"),
IA("IA", "电流相角"),
I1A("I1A", "电流基波角度值"),
V_UNBAN("V_UNBAN", "三相电压负序不平衡度"),
I_UNBAN("I_UNBAN", "三相电流负序不平衡度"),
PST("PST", "短时间闪变"),

View File

@@ -18,7 +18,8 @@ public enum DetectionResponseEnum {
SOURCE_NOT_CONNECT("A020006", "源未连接"),
SCRIPT_CHECK_DATA_NOT_EXIST("A020040","测试脚本项暂无配置" );
SCRIPT_CHECK_DATA_NOT_EXIST("A020040","测试脚本项暂无配置" ),
EXCEED_MAX_TIME("A020041","检测次数超出最大限制!" );
private final String code;
private final String message;

View File

@@ -43,7 +43,9 @@ public class ContrastDetectionParam {
private List<Boolean> testItemList;
/**
* 当前检测次数
* 第几次监测 key为设备监测点id,value为第几次监测
*/
private Integer num;
private Map<String,Integer> numMap;
private String userId;
}

View File

@@ -5,6 +5,7 @@ import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;
import java.util.Map;
/**
* @author wr
@@ -75,7 +76,7 @@ public class PreDetectionParam {
private List<Boolean> testItemList;
/**
* 第几次监测
* 第几次监测 key为设备监测点id,value为第几次监测
*/
private Integer num;
private Map<String, Integer> numMap;
}

View File

@@ -10,41 +10,29 @@ import lombok.Data;
@Data
public class AlignDataExcel {
private ExcelConfig devDataConfig = new ExcelConfig("");
private ExcelConfig standardDevDataConfig = new ExcelConfig("");
@Excel(name = "时间", width = 20, groupName = "被检设备")
@Excel(name = "时间", orderNum = "1", width = 40, groupName = "被检设备")
private String timeDev;
@Excel(name = "Ua", groupName = "被检设备")
@Excel(name = "Ua", orderNum = "2", groupName = "被检设备")
private Double uaDev;
@Excel(name = "Ub", groupName = "被检设备")
@Excel(name = "Ub", orderNum = "3", groupName = "被检设备")
private Double ubDev;
@Excel(name = "Uc", groupName = "被检设备")
@Excel(name = "Uc", orderNum = "4", groupName = "被检设备")
private Double ucDev;
@Excel(name = "时间", width = 20, groupName = "标准设备")
@Excel(name = "时间", orderNum = "5", width = 40, groupName = "标准设备")
private String timeStdDev;
@Excel(name = "Ua", groupName = "标准设备")
@Excel(name = "Ua", orderNum = "6", groupName = "标准设备")
private Double uaStdDev;
@Excel(name = "Ub", groupName = "标准设备")
@Excel(name = "Ub", orderNum = "7", groupName = "标准设备")
private Double ubStdDev;
@Excel(name = "Uc", groupName = "标准设备")
@Excel(name = "Uc", orderNum = "8", groupName = "标准设备")
private Double ucStdDev;
@Data
public static class ExcelConfig {
private String name;
public ExcelConfig(String name) {
this.name = name;
}
}
}

View File

@@ -60,10 +60,7 @@ public interface PreDetectionService {
void startContrastTest(ContrastDetectionParam param);
/**
* 获取比对式检测次数信息
*
* @param planId
* @return
* 导出实时数据对齐过程中的数据
*/
Map<Integer, Integer> getContrastTestNumInfo(String planId);
void exportAlignData();
}

View File

@@ -15,7 +15,7 @@ import com.njcn.gather.detection.pojo.po.DevData;
import com.njcn.gather.detection.pojo.vo.DetectionData;
import com.njcn.gather.detection.pojo.vo.DevLineTestResult;
import com.njcn.gather.detection.util.DetectionUtil;
import com.njcn.gather.device.pojo.vo.PreDetection;
import com.njcn.gather.detection.util.socket.CnSocketUtil;
import com.njcn.gather.err.pojo.param.PqErrSysParam;
import com.njcn.gather.err.pojo.po.PqErrSysDtls;
import com.njcn.gather.err.pojo.vo.ErrDtlsCheckDataVO;
@@ -236,7 +236,7 @@ public class DetectionServiceImpl {
SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult();
String[] split = dev.get(0).getId().split("_");
String devID = devIdMapComm.get(split[0]);
result.setMonitorId(devID + "_" + split[1]);
result.setDevMonitorId(devID + "_" + split[1]);
result.setScriptId(sourceIssue.getScriptId());
result.setSort(sourceIssue.getIndex());
result.setDataType(sourceIssue.getDataType());
@@ -316,7 +316,7 @@ public class DetectionServiceImpl {
SimAndDigHarmonicResult harmonicResult = new SimAndDigHarmonicResult();
String[] split = dev.get(0).getId().split("_");
String devID = devIdMapComm.get(split[0]);
harmonicResult.setMonitorId(devID + "_" + split[1]);
harmonicResult.setDevMonitorId(devID + "_" + split[1]);
harmonicResult.setScriptId(sourceIssue.getScriptId());
harmonicResult.setSort(sourceIssue.getIndex());
Integer isQualified;
@@ -396,7 +396,7 @@ public class DetectionServiceImpl {
SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult();
String[] split = dev.get(0).getId().split("_");
String devID = devIdMapComm.get(split[0]);
result.setMonitorId(devID + "_" + split[1]);
result.setDevMonitorId(devID + "_" + split[1]);
result.setScriptId(sourceIssue.getScriptId());
result.setSort(sourceIssue.getIndex());
result.setDataType(sourceIssue.getDataType());
@@ -509,7 +509,7 @@ public class DetectionServiceImpl {
SimAndDigHarmonicResult harmonicResult = new SimAndDigHarmonicResult();
String[] split = dev.get(0).getId().split("_");
String devID = devIdMapComm.get(split[0]);
harmonicResult.setMonitorId(devID + "_" + split[1]);
harmonicResult.setDevMonitorId(devID + "_" + split[1]);
harmonicResult.setScriptId(sourceIssue.getScriptId());
harmonicResult.setSort(sourceIssue.getIndex());
List<PqErrSysDtls> pqErrSysDtls = new ArrayList<>();
@@ -573,7 +573,7 @@ public class DetectionServiceImpl {
SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult();
String[] split = dev.get(0).getId().split("_");
String devID = devIdMapComm.get(split[0]);
result.setMonitorId(devID + "_" + split[1]);
result.setDevMonitorId(devID + "_" + split[1]);
result.setScriptId(sourceIssue.getScriptId());
result.setSort(sourceIssue.getIndex());
List<PqErrSysDtls> pqErrSysDtls = new ArrayList<>();
@@ -755,7 +755,7 @@ public class DetectionServiceImpl {
SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult();
String[] split = devId.split("_");
String devID = devIdMapComm.get(split[0]);
result.setMonitorId(devID + "_" + split[1]);
result.setDevMonitorId(devID + "_" + split[1]);
result.setScriptId(sourceIssue.getScriptId());
result.setSort(sourceIssue.getIndex());
result.setDataType(sourceIssue.getDataType());
@@ -1384,6 +1384,7 @@ public class DetectionServiceImpl {
public void harmPut(String type, Map<String, Map<Double, List<Double>>> map, List<Double> harmNum, DevData.SqlDataHarmDTO harm, String fund, Integer num) {
if (map.containsKey(type)) {
Map<Double, List<Double>> integerListMap = map.get(type);
integerListMap.get(0.0).add(multiply(fund, fund));
for (Double i : harmNum) {
if (integerListMap.containsKey(i)) {
if (i.equals(1.0) && num != 1) {
@@ -1411,8 +1412,11 @@ public class DetectionServiceImpl {
}
} else {
Map<Double, List<Double>> integerListMap = new LinkedHashMap<>(50);
List<Double> integerList = new ArrayList<>();
integerList.add(multiply(fund, fund));
integerListMap.put(0.0, integerList);
for (Double i : harmNum) {
List<Double> integerList = new ArrayList<>();
integerList = new ArrayList<>();
if (i.equals(1.0) && num != 1) {
integerList.add(multiply(fund, fund));
integerListMap.put(1.0, integerList);
@@ -1435,7 +1439,6 @@ public class DetectionServiceImpl {
}
integerListMap.put(i, integerList);
}
}
map.put(type, integerListMap);
}
@@ -1495,17 +1498,16 @@ public class DetectionServiceImpl {
*
* @param devDataList 被检设备数据
* @param standardDevDataList 与之对齐的标准设备数据
* @param pars 配对关系 key为被检设备ip_通道号value为标准设备ip_通道号
* @param parsIp 配对关系 key为被检设备ip_通道号value为标准设备ip_通道号
* @param devIdMapComm 设备id映射关系 key为被检设备ipvalue为被检设备id
* @param monitorMap 监测器映射关系 key为被检设备ip_通道号value为监测器信息
* @param testItemCodeList 检测项code列表
* @param errorSysId 误差体系id
* @param dataRule 数据处理原则
* @param num 第几次检测
* @param numMap 第几次检测 key为设备id_通道号value为第几次检测
* @param code 结果表code
* @return key为被检设备ip_通道号、value为是否合格1合格 2不合格 4无法处理
*/
public List<DevLineTestResult> processing(List<DevData> devDataList, List<DevData> standardDevDataList, Map<String, String> pars, Map<String, String> devIdMapComm, Map<String, PreDetection.MonitorListDTO> monitorMap, List<String> testItemCodeList, String errorSysId, DictDataEnum dataRule, Integer num, String code) {
public List<DevLineTestResult> processing(List<DevData> devDataList, List<DevData> standardDevDataList, Map<String, String> parsIp, Map<String, String> devIdMapComm, List<String> testItemCodeList, String errorSysId, DictDataEnum dataRule, Map<String, Integer> numMap, String code) {
Map<String, List<DevData>> devDataMap = devDataList.stream().collect(Collectors.groupingBy(obj -> obj.getId().split("_")[0]));
Map<String, List<DevData>> standardDevDataMap = standardDevDataList.stream().collect(Collectors.groupingBy(DevData::getId));
@@ -1516,12 +1518,14 @@ public class DetectionServiceImpl {
List<DevLineTestResult> resultList = new ArrayList<>();
Map<String, List<DevData>> devMonitorMap = devValueList.stream().collect(Collectors.groupingBy(DevData::getId, TreeMap::new, Collectors.toList()));
String devId = devIdMapComm.get(devIp);
Map<String, List<Integer>> chnResultMap = new HashMap<>();
devMonitorMap.forEach((devMoniterId, devData) -> {
Map<String, Integer> map = singleMonitorProcessing(devData, standardDevDataMap.get(pars.get(devMoniterId)), devIdMapComm, testItemCodeList, errorSysId, dataRule, num, code);
String[] split = devMoniterId.split(CnSocketUtil.SPLIT_TAG);
Map<String, Integer> map = singleMonitorProcessing(devData, standardDevDataMap.get(parsIp.get(devMoniterId)), devIdMapComm, testItemCodeList, errorSysId, dataRule, numMap.get(devId + CnSocketUtil.SPLIT_TAG + split[1]), code);
map.forEach((key, value) -> {
DevLineTestResult devLineTestResult = new DevLineTestResult();
devLineTestResult.setDeviceId(devIdMapComm.get(devIp));
devLineTestResult.setDeviceId(devId);
devLineTestResult.setScriptName(key);
List<Integer> chnResult = chnResultMap.getOrDefault(key, new ArrayList<>());
chnResult.add(value);
@@ -1557,34 +1561,42 @@ public class DetectionServiceImpl {
private Map<String, Integer> singleMonitorProcessing(List<DevData> devDataList, List<DevData> standardDevDataList, Map<String, String> devIdMapComm, List<String> testItemCodeList, String errorSysId, DictDataEnum dataRule, Integer num, String code) {
Map<String, Integer> resultMap = new HashMap<>();
if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(testItemCodeList)) {
SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
String[] split1 = devDataList.get(0).getId().split("_");
String devMonitorId = devIdMapComm.get(split1[0]) + "_" + split1[1];
PqMonitor pqMonitor = pqMonitorService.getByDevMonitorId(devMonitorId);
boolean isStar = DetectionCodeEnum.STAR.getCode().equals(pqMonitor.getConnection());
boolean isDelta = DetectionCodeEnum.DELTA.getCode().equals(pqMonitor.getConnection());
Double fUn = pqMonitorService.getRatedVoltage(devMonitorId);
if (isStar) {
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) {
// if ("real$U1".equals(testItemCode) || "real$I1".equals(testItemCode)) {
// continue;
// }
String[] split = testItemCode.split("\\$");
SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
List<PqErrSysDtls> pqErrSysDtls = pqErrSysDtlsService.listPqErrSysDtlsByPqErrSysIdAndScriptType(errorSysId, split[1]);
DetectionCodeEnum anEnum = DetectionCodeEnum.getDetectionCodeByCode(split[1]);
PqMonitor pqMonitor = pqMonitorService.getByDevMonitorId(devMonitorId);
boolean isStar = DetectionCodeEnum.STAR.getCode().equals(pqMonitor.getConnection());
boolean isDelta = DetectionCodeEnum.DELTA.getCode().equals(pqMonitor.getConnection());
Double fUn = pqMonitorService.getRatedVoltage(devMonitorId);
if (isStar) {
fUn = BigDecimal.valueOf(fUn).divide(BigDecimal.valueOf(Math.sqrt(3)), oneConfig.getScale(), RoundingMode.HALF_UP).doubleValue();
if (isStar && (anEnum == DetectionCodeEnum.PVRMS || anEnum == DetectionCodeEnum.PV2_50 || anEnum == DetectionCodeEnum.PSV_1_49) || isDelta && (anEnum == DetectionCodeEnum.VRMS || anEnum == DetectionCodeEnum.V2_50 || anEnum == DetectionCodeEnum.SV_1_49)) {
continue;
}
Double fIn = pqMonitorService.getRatedCurrent(devMonitorId);
Double fHz = 50.0;
String scriptType = split[1];
if (isDelta) {
if (DetectionCodeEnum.PV2_50.getCode().equals(scriptType)) {
scriptType = DetectionCodeEnum.V2_50.getCode();
}
if (DetectionCodeEnum.PSV_1_49.getCode().equals(scriptType)) {
scriptType = DetectionCodeEnum.SV_1_49.getCode();
}
}
List<PqErrSysDtls> pqErrSysDtls = pqErrSysDtlsService.listPqErrSysDtlsByPqErrSysIdAndScriptType(errorSysId, scriptType);
switch (anEnum) {
case FREQ:
resultMap.put(PowerIndexEnum.FREQ.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fHz, DetectionCodeEnum.FREQ.getCode(), dataRule, num, code, oneConfig.getScale()));
break;
case VRMS:
case LINE_VRMS:
resultMap.put(PowerIndexEnum.V.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn, (isStar ? DetectionCodeEnum.VRMS.getCode() : DetectionCodeEnum.LINE_VRMS.getCode()), dataRule, num, code, oneConfig.getScale()));
case PVRMS:
resultMap.put(PowerIndexEnum.V.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn, (isStar ? DetectionCodeEnum.VRMS.getCode() : DetectionCodeEnum.PVRMS.getCode()), dataRule, num, code, oneConfig.getScale()));
break;
case IRMS:
resultMap.put(PowerIndexEnum.I.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fIn, DetectionCodeEnum.IRMS.getCode(), dataRule, num, code, oneConfig.getScale()));
@@ -1599,19 +1611,21 @@ public class DetectionServiceImpl {
resultMap.put(PowerIndexEnum.IMBA.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fIn, DetectionCodeEnum.I_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale()));
break;
case V2_50:
resultMap.put(PowerIndexEnum.HV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, HARMONIC_FLAG, dataRule, num, code, oneConfig.getScale()));
case PV2_50:
resultMap.put(PowerIndexEnum.HV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, HARMONIC_FLAG, isDelta, dataRule, num, code, oneConfig.getScale()));
break;
case I2_50:
resultMap.put(PowerIndexEnum.HI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, HARMONIC_FLAG, dataRule, num, code, oneConfig.getScale()));
resultMap.put(PowerIndexEnum.HI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, HARMONIC_FLAG, isDelta, dataRule, num, code, oneConfig.getScale()));
break;
case P2_50:
resultMap.put(PowerIndexEnum.HP.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn * fIn, HARMONIC_FLAG, dataRule, num, code, oneConfig.getScale()));
resultMap.put(PowerIndexEnum.HP.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn * fIn, HARMONIC_FLAG, isDelta, dataRule, num, code, oneConfig.getScale()));
break;
case SV_1_49:
resultMap.put(PowerIndexEnum.HSV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, INHARMONIC_FLAG, dataRule, num, code, oneConfig.getScale()));
case PSV_1_49:
resultMap.put(PowerIndexEnum.HSV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, INHARMONIC_FLAG, isDelta, dataRule, num, code, oneConfig.getScale()));
break;
case SI_1_49:
resultMap.put(PowerIndexEnum.HSI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, INHARMONIC_FLAG, dataRule, num, code, oneConfig.getScale()));
resultMap.put(PowerIndexEnum.HSI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, INHARMONIC_FLAG, isDelta, dataRule, num, code, oneConfig.getScale()));
break;
case UNKNOWN_ERROR:
break;
@@ -1621,6 +1635,7 @@ public class DetectionServiceImpl {
return resultMap;
}
/**
* 处理非谐波数据
*
@@ -1654,9 +1669,11 @@ public class DetectionServiceImpl {
Map<String, List<List<Double>>> map = devListMap(devDataList, standardDevDataList, desc, dataRule);
ContrastNonHarmonicResult result = new ContrastNonHarmonicResult();
String[] split1 = devDataList.get(0).getId().split("_");
String[] split1 = devDataList.get(0).getId().split(CnSocketUtil.SPLIT_TAG);
String[] split2 = standardDevDataList.get(0).getId().split(CnSocketUtil.SPLIT_TAG);
result.setNum(num);
result.setMonitorId(devIdMapComm.get(split1[0]) + "_" + split1[1]);
result.setDevMonitorId(devIdMapComm.get(split1[0]) + "_" + split1[1]);
result.setStdDevMonitorId(devIdMapComm.get(split2[0]) + "_" + split2[1]);
result.setAdType(errSysDtls.get(0).getScriptType());
result.setDataType(DataSourceEnum.REAL_DATA.getValue());
@@ -1704,6 +1721,7 @@ public class DetectionServiceImpl {
* @param fData 额定值
* @param type U或I、用来区分电压或电流
* @param harmonicFlag 1间谐波2谐波
* @param isDelta 是否角型接法
* @param dataRule 数据处理原则
* @param num 第几次检测
* @param code 结果表code
@@ -1717,21 +1735,30 @@ public class DetectionServiceImpl {
String type,
Double fData,
Integer harmonicFlag,
boolean isDelta,
DictDataEnum dataRule,
Integer num,
String code,
Integer scale) {
List<ContrastHarmonicResult> info = new ArrayList<>();
if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(errSysDtls)) {
String fundCode = "";
String harmCode = "";
if (U.equals(type)) {
fundCode = DetectionCodeEnum.U1.getCode();
if (isDelta) {
fundCode = DetectionCodeEnum.PU1.getCode();
}
if (harmonicFlag == 1) {
harmCode = DetectionCodeEnum.SV_1_49.getCode();
if (isDelta) {
harmCode = DetectionCodeEnum.PSV_1_49.getCode();
}
} else {
harmCode = DetectionCodeEnum.V2_50.getCode();
if (isDelta) {
harmCode = DetectionCodeEnum.PV2_50.getCode();
}
}
}
if (I.equals(type)) {
@@ -1750,9 +1777,11 @@ public class DetectionServiceImpl {
Map<String, List<Map<Double, List<Double>>>> devMap = devHarmListMap(devDataList, standardDevDataList, fundCode, harmCode, harmonicFlag, dataRule);
ContrastHarmonicResult result = new ContrastHarmonicResult();
String[] split = devDataList.get(0).getId().split("_");
String[] split1 = devDataList.get(0).getId().split("_");
String[] split2 = standardDevDataList.get(0).getId().split("_");
result.setNum(num);
result.setMonitorId(devIdMapComm.get(split[0]) + "_" + split[1]);
result.setDevMonitorId(devIdMapComm.get(split1[0]) + "_" + split1[1]);
result.setStdDevMonitorId(devIdMapComm.get(split2[0]) + "_" + split2[1]);
result.setAdType(errSysDtls.get(0).getScriptType());
result.setDataType(DataSourceEnum.REAL_DATA.getValue());
@@ -1804,6 +1833,20 @@ public class DetectionServiceImpl {
List<DevData.SqlDataDTO.ListDTO> standardDevList = standardDevSqlData.stream().filter(j -> desc.equals(j.getDesc()))
.map(DevData.SqlDataDTO::getList).collect(Collectors.toList());
// 如果角型接法中,不存在线电压有效值,则取相电压有效值进行计算
if (CollUtil.isEmpty(devList)) {
if (desc.equals(DetectionCodeEnum.PVRMS.getCode())) {
devList = devSqlData.stream().filter(j -> DetectionCodeEnum.VRMS.getCode().equals(j.getDesc()))
.map(DevData.SqlDataDTO::getList).collect(Collectors.toList());
}
}
if (CollUtil.isEmpty(standardDevList)) {
if (desc.equals(DetectionCodeEnum.PVRMS.getCode())) {
standardDevList = standardDevSqlData.stream().filter(j -> DetectionCodeEnum.VRMS.getCode().equals(j.getDesc()))
.map(DevData.SqlDataDTO::getList).collect(Collectors.toList());
}
}
aDev.addAll(devList.stream().filter(x -> ObjectUtil.isNotNull(x.getA()))
.map(x -> x.getA().doubleValue())
.collect(Collectors.toList()));
@@ -1927,6 +1970,7 @@ public class DetectionServiceImpl {
String harmCode,
Integer harmonicFlag,
DictDataEnum dataRule) {
System.out.println("aaa" + dev.size() + " " + standardDev.size());
Map<String, List<Map<Double, List<Double>>>> resultMap = new HashMap<>(3);
// key为相别、value{key为谐波次数value为按数据处理原则处理后的数据}
@@ -1947,9 +1991,21 @@ public class DetectionServiceImpl {
Optional<DevData.SqlDataDTO> first1 = Optional.empty();
Optional<DevData.SqlDataDTO> first2 = Optional.empty();
if (CollUtil.isNotEmpty(devSqlData) && CollUtil.isNotEmpty(standardDevSqlData)) {
first1 = devSqlData.stream().filter(j -> j.getDesc().equals(fundCode)).collect(Collectors.toList()).stream().findFirst();
first2 = standardDevSqlData.stream().filter(j -> j.getDesc().equals(fundCode)).collect(Collectors.toList()).stream().findFirst();
first1 = devSqlData.stream().filter(j -> fundCode.equals(j.getDesc())).collect(Collectors.toList()).stream().findFirst();
first2 = standardDevSqlData.stream().filter(j -> fundCode.equals(j.getDesc())).collect(Collectors.toList()).stream().findFirst();
}
// 如果角型接法中,不存在线电压谐波电压基波有效值,则取相电压谐波电压基波有效值进行计算
if (!first1.isPresent()) {
if (DetectionCodeEnum.PU1.getCode().equals(fundCode)) {
first1 = devSqlData.stream().filter(j -> DetectionCodeEnum.U1.getCode().equals(j.getDesc())).collect(Collectors.toList()).stream().findFirst();
}
}
if (!first2.isPresent()) {
if (DetectionCodeEnum.PU1.getCode().equals(fundCode)) {
first2 = devSqlData.stream().filter(j -> DetectionCodeEnum.U1.getCode().equals(j.getDesc())).collect(Collectors.toList()).stream().findFirst();
}
}
DevData.SqlDataDTO fund1 = null;
DevData.SqlDataDTO fund2 = null;
if (first1.isPresent()) {
@@ -1958,8 +2014,28 @@ public class DetectionServiceImpl {
if (first2.isPresent()) {
fund2 = first2.get();
}
List<DevData.SqlDataHarmDTO> devHarmList = dev.get(i).getSqlDataHarm().stream().filter(x -> x.getDesc().equals(harmCode)).collect(Collectors.toList());
List<DevData.SqlDataHarmDTO> stdDevHarmList = dev.get(i).getSqlDataHarm().stream().filter(x -> x.getDesc().equals(harmCode)).collect(Collectors.toList());
List<DevData.SqlDataHarmDTO> stdDevHarmList = standardDev.get(i).getSqlDataHarm().stream().filter(x -> x.getDesc().equals(harmCode)).collect(Collectors.toList());
// 如果角型接法中,不存在线电压谐波电压含有率,则取相电压谐波电压含有率进行计算
if (CollUtil.isEmpty(devHarmList)) {
if (DetectionCodeEnum.PV2_50.getCode().equals(harmCode)) {
devHarmList = dev.get(i).getSqlDataHarm().stream().filter(x -> DetectionCodeEnum.V2_50.getCode().equals(x.getDesc())).collect(Collectors.toList());
}
if (DetectionCodeEnum.PSV_1_49.getCode().equals(harmCode)) {
devHarmList = dev.get(i).getSqlDataHarm().stream().filter(x -> DetectionCodeEnum.SV_1_49.getCode().equals(x.getDesc())).collect(Collectors.toList());
}
}
if (CollUtil.isEmpty(stdDevHarmList)) {
if (DetectionCodeEnum.PV2_50.getCode().equals(harmCode)) {
stdDevHarmList = standardDev.get(i).getSqlDataHarm().stream().filter(x -> DetectionCodeEnum.V2_50.getCode().equals(x.getDesc())).collect(Collectors.toList());
}
if (DetectionCodeEnum.PSV_1_49.getCode().equals(harmCode)) {
stdDevHarmList = standardDev.get(i).getSqlDataHarm().stream().filter(x -> DetectionCodeEnum.SV_1_49.getCode().equals(x.getDesc())).collect(Collectors.toList());
}
}
if (CollUtil.isNotEmpty(devHarmList) && CollUtil.isNotEmpty(stdDevHarmList)) {
DevData.SqlDataHarmDTO devHarm = devHarmList.get(0);
DevData.SqlDataHarmDTO stdDevHarm = stdDevHarmList.get(0);
@@ -2058,12 +2134,13 @@ public class DetectionServiceImpl {
Integer scale) {
List<DetectionData> detectionDataList = new ArrayList<>();
List<Double> U1List = new ArrayList<>();
if (U.equals(type)) {
U1List.addAll(standardDevMap.get(0.0));
}
standardDevMap.forEach((harmonicNum, stdDataList) -> {
if (U.equals(type)) {
// todo 间谐波电压使用U1???
U1List.addAll(standardDevMap.get(1.0));
if (harmonicNum != 0.0) {
detectionDataList.addAll(this.getDetectionDataList(devMap.get(harmonicNum), stdDataList, U1List, pqErrSysDtls, fData, harmonicNum, scale));
}
detectionDataList.addAll(this.getDetectionDataList(devMap.get(harmonicNum), stdDataList, U1List, pqErrSysDtls, fData, harmonicNum, scale));
});
return detectionDataList;
}

View File

@@ -6,7 +6,6 @@ import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.db.mybatisplus.handler.DynamicTableNameHandler;
import com.njcn.gather.detection.handler.SocketContrastResponseService;
import com.njcn.gather.detection.handler.SocketDevResponseService;
import com.njcn.gather.detection.handler.SocketSourceResponseService;
@@ -37,20 +36,21 @@ import com.njcn.gather.script.service.IPqScriptCheckDataService;
import com.njcn.gather.script.service.IPqScriptDtlsService;
import com.njcn.gather.source.pojo.po.SourceInitialize;
import com.njcn.gather.source.service.IPqSourceService;
import com.njcn.gather.storage.pojo.po.ContrastHarmonicResult;
import com.njcn.gather.storage.pojo.po.ContrastNonHarmonicResult;
import com.njcn.gather.storage.service.ContrastHarmonicService;
import com.njcn.gather.storage.service.ContrastNonHarmonicService;
import com.njcn.gather.system.cfg.pojo.po.SysTestConfig;
import com.njcn.gather.system.cfg.service.ISysTestConfigService;
import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum;
import com.njcn.gather.system.dictionary.service.IDictDataService;
import com.njcn.web.utils.HttpServletUtil;
import com.njcn.web.utils.RequestUtil;
import io.netty.channel.Channel;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -69,16 +69,16 @@ public class PreDetectionServiceImpl implements PreDetectionService {
private final IAdPlanSourceService adPlanSourceService;
private final IPqSourceService pqSourceService;
private final IPqScriptDtlsService pqScriptDtlsService;
private final ISysTestConfigService testConfigService;
private final SocketDevResponseService socketDevResponseService;
private final SocketSourceResponseService socketSourceResponseService;
private final SocketContrastResponseService socketContrastResponseService;
private final IPqScriptCheckDataService iPqScriptCheckDataService;
private final ContrastNonHarmonicService contrastNonHarmonicService;
private final ContrastHarmonicService contrastHarmonicService;
private final SocketManager socketManager;
@Value("${log.homeDir}")
private String alignDataFilePath;
@Override
public void sourceCommunicationCheck(PreDetectionParam param) {
@@ -251,9 +251,9 @@ public class PreDetectionServiceImpl implements PreDetectionService {
PqScriptCheckDataParam checkDataParam = new PqScriptCheckDataParam();
checkDataParam.setScriptId(param.getScriptId());
checkDataParam.setIsValueTypeName(false);
List<String> valueType = iPqScriptCheckDataService.getValueType(checkDataParam);
List<String> adType = iPqScriptCheckDataService.getValueType(checkDataParam);
iPqDevService.updateResult(param.getDevIds(), valueType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity());
iPqDevService.updateResult(false, param.getDevIds(), adType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity());
CnSocketUtil.quitSend(param);
}
@@ -330,36 +330,26 @@ public class PreDetectionServiceImpl implements PreDetectionService {
}
@Override
public Map<Integer, Integer> getContrastTestNumInfo(String planId) {
AdPlan plan = iAdPlanService.getById(planId);
SysTestConfig oneConfig = testConfigService.getOneConfig();
Integer maxNum = 1;
String code = String.valueOf(plan.getCode());
String adNonTable = "ad_non_harmonic_";
String adTable = "ad_harmonic_";
DynamicTableNameHandler.setTableName(adNonTable + code);
ContrastNonHarmonicResult result1 = contrastNonHarmonicService.lambdaQuery().select(ContrastNonHarmonicResult::getNum).orderByDesc().last("LIMIT 1").one();
if (ObjectUtil.isNotNull(result1)) {
if (result1.getNum().compareTo(maxNum) > 0) {
maxNum = result1.getNum() + 1;
public void exportAlignData() {
String fileName = "实时数据.xlsx";
HttpServletResponse response = HttpServletUtil.getResponse();
response.reset();
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
response.setContentType("application/octet-stream;charset=UTF-8");
try {
InputStream inputStream = new FileInputStream(alignDataFilePath + "\\" + fileName);
byte[] buffer = new byte[1024];
int len = 0;
ServletOutputStream outputStream = response.getOutputStream();
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
outputStream.flush();
outputStream.close();
inputStream.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
DynamicTableNameHandler.remove();
DynamicTableNameHandler.setTableName(adTable + code);
ContrastHarmonicResult result2 = contrastHarmonicService.lambdaQuery().select(ContrastHarmonicResult::getNum).orderByDesc().last("LIMIT 1").one();
if (ObjectUtil.isNotNull(result2)) {
if (result2.getNum().compareTo(maxNum) > 0) {
maxNum = result2.getNum() + 1;
}
}
DynamicTableNameHandler.remove();
Map<Integer, Integer> map = new HashMap<>();
map.put(oneConfig.getMaxTime(), maxNum);
return map;
}
/**
@@ -394,6 +384,10 @@ public class PreDetectionServiceImpl implements PreDetectionService {
socketMsg.setData(jsonString);
PreDetectionParam preDetectionParam = new PreDetectionParam();
preDetectionParam.setUserPageId(param.getLoginName());
preDetectionParam.setTestItemList(param.getTestItemList());
preDetectionParam.setNumMap(param.getNumMap());
preDetectionParam.setDevIds(param.getDevIds());
preDetectionParam.setUserId(param.getUserId());
WebServiceManager.addPreDetectionParam(param.getLoginName(), preDetectionParam);
socketManager.smartSendToContrast(param, JSON.toJSONString(socketMsg));
}

View File

@@ -92,7 +92,7 @@ public class FormalTestManager {
/**
* 比对式检测-检测项。key为检测项id,value为检测项code
*/
public static Map<String,String> testItemMap = new HashMap<>();
public static Map<String, String> testItemMap = new HashMap<>();
/**
* 数据处理原则
@@ -102,7 +102,12 @@ public class FormalTestManager {
/**
* 所有参与比对式检测的被检设备、标准设备配对关系。key:被检设备ip_通道号,value:标准设备ip_通道号
*/
public static HashBiMap<String, String> pairsMap = HashBiMap.create();
public static HashBiMap<String, String> pairsIpMap = HashBiMap.create();
/**
* 所有参与比对式检测的被检设备、标准设备配对关系。key:被检设备id_通道号,value:标准设备id_通道号
*/
public static HashBiMap<String, String> pairsIdMap = HashBiMap.create();
/**
* 被检设备的数据。key:设备ip_通道号,value:DevData数据集合

View File

@@ -22,7 +22,6 @@ import io.netty.handler.codec.string.StringEncoder;
import io.netty.handler.timeout.IdleStateHandler;
import io.netty.util.CharsetUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@@ -127,7 +126,9 @@ public class NettyClient {
PreDetectionParam preDetectionParam = new PreDetectionParam();
preDetectionParam.setUserPageId(param.getLoginName());
preDetectionParam.setTestItemList(param.getTestItemList());
preDetectionParam.setNum(param.getNum());
preDetectionParam.setNumMap(param.getNumMap());
preDetectionParam.setDevIds(param.getDevIds());
preDetectionParam.setUserId(param.getUserId());
NettyContrastClientHandler handler = new NettyContrastClientHandler(preDetectionParam, socketContrastResponseService);
executeSocketConnection(ip, port, preDetectionParam, msg, handler);
}

View File

@@ -109,15 +109,16 @@ public interface IPqDevService extends IService<PqDev> {
/**
* 正式监测完成,修改中断状态
*
* @param isContrast
* @param ids
* @param valueType
* @param adType
* @param code
* @param userId
* @param temperature
* @param humidity
* @return
*/
boolean updateResult(List<String> ids, List<String> valueType, String code, String userId, Float temperature, Float humidity);
boolean updateResult(boolean isContrast,List<String> ids, List<String> adType, String code,String userId, Float temperature, Float humidity);
void updatePqDevReportState(String devId, int i);

View File

@@ -21,6 +21,7 @@ import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.poi.PullDown;
import com.njcn.common.utils.EncryptionUtil;
import com.njcn.common.utils.JwtUtil;
import com.njcn.db.mybatisplus.constant.DbConstant;
import com.njcn.gather.device.mapper.PqDevMapper;
import com.njcn.gather.device.pojo.enums.*;
@@ -48,6 +49,7 @@ import com.njcn.gather.user.user.service.ISysUserService;
import com.njcn.web.factory.PageFactory;
import com.njcn.web.utils.ExcelUtil;
import com.njcn.web.utils.PoiUtil;
import com.njcn.web.utils.RequestUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
@@ -434,10 +436,11 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
@Override
public boolean updateResult(List<String> ids, List<String> valueType, String code, String userId, Float temperature, Float humidity) {
public boolean updateResult(boolean isContrast, List<String> ids, List<String> adType, String code,String userId, Float temperature, Float humidity) {
if (CollUtil.isNotEmpty(ids)) {
SysTestConfig config = sysTestConfigService.getOneConfig();
Map<String, Integer> result = detectionDataDealService.devResult(ids, valueType, code);
Map<String, Integer> result = detectionDataDealService.devResult(isContrast, ids, adType, code);
List<PqDevVO> list = new ArrayList<>();
if (CollUtil.isNotEmpty(ids)) {
list.addAll(this.baseMapper.listByDevIds(ids));

View File

@@ -33,18 +33,8 @@
and Num = #{num}
</select>
<select id="listByDevIds" resultType="com.njcn.gather.monitor.pojo.po.PqMonitor">
select pq_monitor.Id,
pq_monitor.Dev_Id,
pq_monitor.Name,
pq_monitor.Busbar,
pq_monitor.Num,
pq_monitor.Pt,
pq_monitor.Ct,
pq_monitor.Stat_Interval,
pq_monitor.Harm_Sys_Id,
sys_dict_data.Code as `Connection`
select *
from pq_monitor
inner join sys_dict_data on pq_monitor.Connection = sys_dict_data.id
where Dev_Id in
<foreach collection="devIds" item="devId" open="(" separator="," close=")">
#{devId}

View File

@@ -120,13 +120,4 @@ public class ResultController extends BaseController {
resultService.deleteTempTable(code);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.DOWNLOAD)
@PostMapping("/exportAlignData")
@ApiOperation("实时对齐数据导出为csv文件")
public void exportAlignData() {
String methodDescribe = getMethodDescribe("exportAlignData");
LogUtil.njcnDebug(log, "{}", methodDescribe);
resultService.exportAlignData();
}
}

View File

@@ -97,9 +97,4 @@ public interface IResultService {
* @param pKeys 待填充的值
*/
Map<String, String> getParagraphKeysValue(String itemCode, List<String> pKeys);
/**
* 导出实时数据对齐过程中的数据
*/
void exportAlignData();
}

View File

@@ -16,12 +16,8 @@ import com.njcn.common.utils.PubUtils;
import com.njcn.gather.detection.pojo.enums.DetectionCodeEnum;
import com.njcn.gather.detection.pojo.param.PreDetectionParam;
import com.njcn.gather.detection.pojo.po.DevData;
import com.njcn.gather.detection.pojo.vo.AlignDataExcel;
import com.njcn.gather.detection.pojo.vo.DetectionData;
import com.njcn.gather.detection.service.impl.DetectionServiceImpl;
import com.njcn.gather.detection.util.DetectionUtil;
import com.njcn.gather.detection.util.socket.CnSocketUtil;
import com.njcn.gather.detection.util.socket.FormalTestManager;
import com.njcn.gather.device.pojo.enums.CommonEnum;
import com.njcn.gather.device.service.IPqDevService;
import com.njcn.gather.plan.pojo.po.AdPlan;
@@ -139,7 +135,7 @@ public class ResultServiceImpl implements IResultService {
if (ObjectUtil.isNotEmpty(allResultList)) {
Map<String, List<SimAndDigBaseResult>> chnMap = allResultList.stream().collect(
Collectors.groupingBy(obj -> obj.getMonitorId().substring(obj.getMonitorId().lastIndexOf("_") + 1))
Collectors.groupingBy(obj -> obj.getDevMonitorId().substring(obj.getDevMonitorId().lastIndexOf("_") + 1))
);
chnMap.forEach((chn, list) -> {
Map<String, String> map = new HashMap<>();
@@ -1495,73 +1491,6 @@ public class ResultServiceImpl implements IResultService {
return map;
}
@Override
public void exportAlignData() {
List<Map<String, Object>> sheetsList = new ArrayList<>();
// 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]));
ipDevDataMap.forEach((ip, stdDevDataList) -> {
// 按照通道号分组。key为通道号value为该通道号下所有设备数据
Map<String, List<DevData>> channelDataMap = stdDevDataList.stream().collect(Collectors.groupingBy(obj -> obj.getId().split(CnSocketUtil.SPLIT_TAG)[1]));
channelDataMap.forEach((channel, channelDevDataList) -> {
String standardDevMonitorId = ip + CnSocketUtil.SPLIT_TAG + channel;
String devMonitorId = FormalTestManager.pairsMap.inverse().get(standardDevMonitorId);
List<DevData> devDataList = BeanUtil.copyToList(FormalTestManager.devDataMap.get(standardDevMonitorId), DevData.class);
channelDevDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime())));
HashMap sheet = new HashMap<>();
ExportParams exportParams = new ExportParams();
String standardDevName = FormalTestManager.devNameMapComm.get(ip);
String[] split = devMonitorId.split(CnSocketUtil.SPLIT_TAG);
String devName = FormalTestManager.devNameMapComm.get(split[0]);
exportParams.setSheetName(devName + "通道" + channel);
sheet.put("title", exportParams);
List<AlignDataExcel> dataList = new ArrayList<>();
channelDevDataList.stream().forEach(obj -> {
AlignDataExcel alignDataExcel = new AlignDataExcel();
alignDataExcel.getDevDataConfig().setName(devName + "通道" + split[1]);
alignDataExcel.getStandardDevDataConfig().setName(standardDevName + "通道" + channel);
DevData.SqlDataDTO.ListDTO list1 = obj.getSqlData().get(0).getList();
alignDataExcel.setTimeStdDev(obj.getTime());
alignDataExcel.setUaStdDev(list1.getA());
alignDataExcel.setUbStdDev(list1.getB());
alignDataExcel.setUcStdDev(list1.getC());
DevData devData = devDataList.stream().filter(obj1 -> DetectionUtil.isAlignData(obj1, obj)).findFirst().get();
if (ObjectUtil.isNotNull(devData)) {
DevData.SqlDataDTO.ListDTO list2 = devData.getSqlData().get(0).getList();
alignDataExcel.setTimeDev(devData.getTime());
alignDataExcel.setUaDev(list2.getA());
alignDataExcel.setUbDev(list2.getB());
alignDataExcel.setUcDev(list2.getC());
devDataList.remove(devData);
}
dataList.add(alignDataExcel);
});
devDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime())));
devDataList.stream().forEach(obj -> {
AlignDataExcel alignDataExcel = new AlignDataExcel();
alignDataExcel.getDevDataConfig().setName(devName + "通道" + split[1]);
alignDataExcel.getStandardDevDataConfig().setName(standardDevName + "通道" + channel);
DevData.SqlDataDTO.ListDTO list2 = obj.getSqlData().get(0).getList();
alignDataExcel.setTimeDev(obj.getTime());
alignDataExcel.setUaDev(list2.getA());
alignDataExcel.setUbDev(list2.getB());
alignDataExcel.setUcDev(list2.getC());
dataList.add(alignDataExcel);
});
sheet.put("data", dataList);
sheet.put("entity", AlignDataExcel.class);
});
});
ExcelUtil.exportExcel("实时数据.xlsx", sheetsList);
}
private Integer conform(Set<Integer> numbers) {
if (CollUtil.isNotEmpty(numbers)) {
@@ -1709,7 +1638,7 @@ public class ResultServiceImpl implements IResultService {
checkDataParam.setIsValueTypeName(false);
List<String> valueType = iPqScriptCheckDataService.getValueType(checkDataParam);
iPqDevService.updateResult(param.getDevIds(), valueType, param.getCode(), null, param.getTemperature(), param.getHumidity());
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) {
@@ -1717,7 +1646,7 @@ public class ResultServiceImpl implements IResultService {
// if (CollUtil.isNotEmpty(nonHarm)) {
if (CollUtil.isNotEmpty(nonHarm)) {
Map<String, List<SimAndDigNonHarmonicResult>> noHarmMap = nonHarm.stream()
.collect(Collectors.groupingBy(x -> x.getMonitorId() + "_" + x.getTimeId().format(DateTimeFormatter.ofPattern(DatePattern.UTC_SIMPLE_MS_PATTERN)) + "_" + x.getSort()));
.collect(Collectors.groupingBy(x -> x.getDevMonitorId() + "_" + x.getTimeId().format(DateTimeFormatter.ofPattern(DatePattern.UTC_SIMPLE_MS_PATTERN)) + "_" + x.getSort()));
noHarmMap.forEach((key, value) -> {
String[] split = key.split("_");
DevData data = new DevData();
@@ -1743,7 +1672,7 @@ public class ResultServiceImpl implements IResultService {
}
if (CollUtil.isNotEmpty(harm)) {
Map<String, List<SimAndDigHarmonicResult>> harmMap = harm.stream()
.collect(Collectors.groupingBy(x -> x.getMonitorId() + "_" + x.getTimeId().format(DateTimeFormatter.ofPattern(DatePattern.UTC_SIMPLE_MS_PATTERN))));
.collect(Collectors.groupingBy(x -> x.getDevMonitorId() + "_" + x.getTimeId().format(DateTimeFormatter.ofPattern(DatePattern.UTC_SIMPLE_MS_PATTERN))));
harmMap.forEach((key, value) -> {
List<DevData> collect = info.stream().filter(x -> key.equals(x.getId() + "_" + x.getTime())).collect(Collectors.toList());
List<DevData.SqlDataDTO> sqlDataDTOS = new ArrayList<>();

View File

@@ -103,8 +103,3 @@ qr:
db:
type: mysql
detection:
xujy:
volOrCur: 6
phase: 3

View File

@@ -38,7 +38,7 @@ public class DataDealController extends BaseController {
SimAndDigHarmonicResult.setDataType("aa");
SimAndDigHarmonicResult.setAdType("aaaa");
SimAndDigHarmonicResult.setMonitorId("ss");
SimAndDigHarmonicResult.setDevMonitorId("ss");
SimAndDigHarmonicResult.setScriptId("ddd");
SimAndDigHarmonicResult.setTimeId(LocalDateTime.now());
@@ -47,12 +47,12 @@ public class DataDealController extends BaseController {
SimAndDigHarmonicResult2.setDataType("aabb");
SimAndDigHarmonicResult2.setAdType("aaaabb");
SimAndDigHarmonicResult2.setMonitorId("ssbb");
SimAndDigHarmonicResult2.setDevMonitorId("ssbb");
SimAndDigHarmonicResult2.setScriptId("dddbb");
SimAndDigHarmonicResult2.setTimeId(LocalDateTime.now());
list2.add(SimAndDigHarmonicResult2);
detectionDataDealService.acceptAd(list2,"1");
detectionDataDealService.acceptHarmonic(list2,"1");
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);

View File

@@ -4,26 +4,31 @@
<update id="genNonHarmonicTable">
CREATE TABLE ad_non_harmonic_${code}
(
Monitor_Id CHAR(34) NOT NULL COMMENT '监测点Id',
Time_Id DATETIME(3) NOT NULL COMMENT '时间',
AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',
Data_Type CHAR(32) NOT NULL COMMENT '数据指标只有数据源为分钟统计时候才会使用最大、最小、平均、CP95默认平均值字典表',
A_Value float DEFAULT NULL COMMENT 'A相值',
B_Value float DEFAULT NULL COMMENT 'B相值',
C_Value float DEFAULT NULL COMMENT 'C相值',
T_Value float DEFAULT NULL COMMENT 'T相值(没有相别的则存这里)',
Result_Flag int(1) NULL COMMENT '1合格 2不合格 4无法处理',
<choose>
<when test="isContrast">
Num tinyint(1) unsigned DEFAULT 0 COMMENT '第几次检测',
PRIMARY KEY (Monitor_Id, Time_Id, AD_Type, Num)
</when>
<otherwise>
Script_Id CHAR(32) NOT NULL COMMENT '检测脚本表Id',
Sort int(4) NOT NULL COMMENT '总检测脚本中的测试项序号',
PRIMARY KEY (Monitor_Id, Time_Id, Script_Id, Sort, AD_Type)
</otherwise>
</choose>
Dev_Monitor_Id CHAR(34) NOT NULL COMMENT '监测点Id',
Time_Id DATETIME(3) NOT NULL COMMENT '时间',
AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',
Data_Type CHAR(32) NOT NULL COMMENT '数据指标只有数据源为分钟统计时候才会使用最大、最小、平均、CP95默认平均值字典表',
A_Value float DEFAULT NULL COMMENT 'A相值',
B_Value float DEFAULT NULL COMMENT 'B相值',
C_Value float DEFAULT NULL COMMENT 'C相值',
T_Value float DEFAULT NULL COMMENT 'T相值(没有相别的则存这里)',
Result_Flag int(1) NULL COMMENT '1合格 2不合格 4无法处理',
<choose>
<when test="isContrast">
Id char(32) COLLATE utf8mb4_bin NOT NULL COMMENT '主键Id',
Std_Dev_Monitor_Id CHAR(34) NOT NULL COMMENT '标准设备监测点Id',
Num tinyint(1) unsigned DEFAULT 0 COMMENT '第几次检测',
A_Value_0 float NULL COMMENT 'A相基波有效值',
B_Value_0 float NULL COMMENT 'B相基波有效值',
C_Value_0 float NULL COMMENT 'B相基波有效值',
PRIMARY KEY (Id)
</when>
<otherwise>
Script_Id CHAR(32) NOT NULL COMMENT '检测脚本表Id',
Sort int(4) NOT NULL COMMENT '总检测脚本中的测试项序号',
PRIMARY KEY (Monitor_Id, Time_Id, Script_Id, Sort, AD_Type)
</otherwise>
</choose>
) COMMENT='非谐波类原始数据表';
</update>
@@ -35,27 +40,32 @@
<update id="genNonHarmonicResultTable">
CREATE TABLE if not exists ad_non_harmonic_result_${code} (
Monitor_Id CHAR(34) NOT NULL COMMENT '监测点Id',
Time_Id DATETIME NULL COMMENT '时间',
AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',
Data_Type CHAR(32) NOT NULL COMMENT '数据指标只有数据源为分钟统计时候才会使用最大、最小、平均、CP95默认平均值字典表',
A_Value json NULL COMMENT 'A相值',
B_Value json NULL COMMENT 'B相值',
C_Value json NULL COMMENT 'C相值',
T_Value json NULL COMMENT 'T相值(没有相别的则存这里)',
Result_Flag int(1) NOT NULL COMMENT '1合格 2不合格 4无法处理',
<choose>
<when test="isContrast">
Num tinyint(1) unsigned DEFAULT 0 COMMENT '第几次检测',
PRIMARY KEY (Monitor_Id, AD_Type, Num)
</when>
<otherwise>
Script_Id CHAR(32) NOT NULL COMMENT '检测脚本表Id',
Sort int(4) NOT NULL COMMENT '总检测脚本中的测试项序号',
PRIMARY KEY (Monitor_Id, Script_Id, Sort, AD_Type)
</otherwise>
</choose>
) COMMENT='非谐波类检测结果表';
Dev_Monitor_Id CHAR(34) NOT NULL COMMENT '监测点Id',
Time_Id DATETIME NULL COMMENT '时间',
AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',
Data_Type CHAR(32) NOT NULL COMMENT '数据指标只有数据源为分钟统计时候才会使用最大、最小、平均、CP95默认平均值字典表',
A_Value json NULL COMMENT 'A相值',
B_Value json NULL COMMENT 'B相值',
C_Value json NULL COMMENT 'C相值',
T_Value json NULL COMMENT 'T相值(没有相别的则存这里)',
Result_Flag int(1) NOT NULL COMMENT '1合格 2不合格 4无法处理',
<choose>
<when test="isContrast">
Id char(32) COLLATE utf8mb4_bin NOT NULL COMMENT '主键Id',
Std_Dev_Monitor_Id CHAR(34) NOT NULL COMMENT '标准设备监测点Id',
Num tinyint(1) unsigned DEFAULT 0 COMMENT '第几次检测',
A_Value_0 json NULL COMMENT 'A相基波有效值',
B_Value_0 json NULL COMMENT 'B相基波有效值',
C_Value_0 json NULL COMMENT 'B相基波有效值',
PRIMARY KEY (Id)
</when>
<otherwise>
Script_Id CHAR(32) NOT NULL COMMENT '检测脚本表Id',
Sort int(4) NOT NULL COMMENT '总检测脚本中的测试项序号',
PRIMARY KEY (Monitor_Id, Script_Id, Sort, AD_Type)
</otherwise>
</choose>
) COMMENT='非谐波类检测结果表';
</update>

View File

@@ -13,7 +13,7 @@ public class BaseResult {
/**
* 监测点Id
*/
private String monitorId;
private String devMonitorId;
/**
* 时间

View File

@@ -10,8 +10,15 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class ContrastBaseResult extends BaseResult {
private String id;
/**
* 第几次检测
*/
private Integer num;
/**
* 标准设备监测点id
*/
private String stdDevMonitorId;
}

View File

@@ -15,6 +15,15 @@ import lombok.EqualsAndHashCode;
public class ContrastHarmonicResult extends ContrastBaseResult {
private static final long serialVersionUID = 1L;
@TableField(value = "A_Value_0")
private String aValue0;
@TableField(value = "B_Value_0")
private String bValue0;
@TableField(value = "C_Value_0")
private String cValue0;
/**
* A相基波
*/

View File

@@ -13,9 +13,9 @@ public interface DetectionDataDealService extends IReplenishMybatisService<SimAn
Boolean acceptAdNon(List<? extends BaseResult> nonHarmonicResultList,String code);
Boolean acceptNonHarmonic(List<? extends BaseResult> nonHarmonicResultList,String code);
Boolean acceptAd(List<? extends BaseResult> harmonicResultList,String code);
Boolean acceptHarmonic(List<? extends BaseResult> harmonicResultList,String code);
Boolean acceptNonHarmonicResult(List<? extends BaseResult> nonHarmonicResultList, String code);
@@ -23,10 +23,12 @@ public interface DetectionDataDealService extends IReplenishMybatisService<SimAn
/**
* 根据终端id查询终端所有监测项目是否合格
*
* @param isContrast
* @param ids
* @param valueType
* @param adType
* @param code
* @return
*/
Map<String,Integer> devResult(List<String> ids,List<String> valueType,String code);
Map<String,Integer> devResult(boolean isContrast,List<String> ids,List<String> adType,String code);
}

View File

@@ -36,16 +36,16 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl<Detect
@Override
@Transactional
public Boolean acceptAdNon(List<? extends BaseResult> nonHarmonicResultList, String code) {
public Boolean acceptNonHarmonic(List<? extends BaseResult> nonHarmonicResultList, String code) {
if (CollUtil.isNotEmpty(nonHarmonicResultList)) {
String adNonTable = "ad_non_harmonic_";
DynamicTableNameHandler.setTableName(adNonTable + code);
if (nonHarmonicResultList.get(0) instanceof SimAndDigNonHarmonicResult) {
List<SimAndDigNonHarmonicResult> simAndDigNonHarmonicResults = BeanUtil.copyToList(nonHarmonicResultList, SimAndDigNonHarmonicResult.class);
List<String> monitorIds = simAndDigNonHarmonicResults.stream().map(SimAndDigNonHarmonicResult::getMonitorId).distinct().collect(Collectors.toList());
List<String> monitorIds = simAndDigNonHarmonicResults.stream().map(SimAndDigNonHarmonicResult::getDevMonitorId).distinct().collect(Collectors.toList());
if (CollUtil.isNotEmpty(monitorIds)) {
simAndDigNonHarmonicService.remove(new LambdaQueryWrapper<SimAndDigNonHarmonicResult>().in(SimAndDigNonHarmonicResult::getMonitorId, monitorIds)
simAndDigNonHarmonicService.remove(new LambdaQueryWrapper<SimAndDigNonHarmonicResult>().in(SimAndDigNonHarmonicResult::getDevMonitorId, monitorIds)
.eq(SimAndDigNonHarmonicResult::getScriptId, simAndDigNonHarmonicResults.get(0).getScriptId())
.eq(SimAndDigNonHarmonicResult::getSort, simAndDigNonHarmonicResults.get(0).getSort()));
simAndDigNonHarmonicService.saveBatch(simAndDigNonHarmonicResults, 100);
@@ -54,12 +54,7 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl<Detect
if (nonHarmonicResultList.get(0) instanceof ContrastNonHarmonicResult) {
List<ContrastNonHarmonicResult> contrastNonHarmonicResults = BeanUtil.copyToList(nonHarmonicResultList, ContrastNonHarmonicResult.class);
List<String> monitorIds = contrastNonHarmonicResults.stream().map(ContrastNonHarmonicResult::getMonitorId).distinct().collect(Collectors.toList());
if (CollUtil.isNotEmpty(monitorIds)) {
contrastNonHarmonicService.remove(new LambdaQueryWrapper<ContrastNonHarmonicResult>().in(ContrastNonHarmonicResult::getMonitorId, monitorIds)
.eq(ContrastNonHarmonicResult::getNum, contrastNonHarmonicResults.get(0).getNum()));
contrastNonHarmonicService.saveBatch(contrastNonHarmonicResults, 100);
}
contrastNonHarmonicService.saveBatch(contrastNonHarmonicResults);
}
DynamicTableNameHandler.remove();
@@ -70,30 +65,25 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl<Detect
@Override
@Transactional
public Boolean acceptAd(List<? extends BaseResult> harmonicResultList, String code) {
public Boolean acceptHarmonic(List<? extends BaseResult> harmonicResultList, String code) {
if (CollUtil.isNotEmpty(harmonicResultList)) {
String adTable = "ad_harmonic_";
DynamicTableNameHandler.setTableName(adTable + code);
if (harmonicResultList.get(0) instanceof SimAndDigHarmonicResult) {
List<SimAndDigHarmonicResult> simAndDigHarmonicResultList = BeanUtil.copyToList(harmonicResultList, SimAndDigHarmonicResult.class);
List<String> monitorIds = simAndDigHarmonicResultList.stream().map(SimAndDigHarmonicResult::getMonitorId).distinct().collect(Collectors.toList());
List<String> monitorIds = simAndDigHarmonicResultList.stream().map(SimAndDigHarmonicResult::getDevMonitorId).distinct().collect(Collectors.toList());
if (CollUtil.isNotEmpty(monitorIds)) {
simAndDigHarmonicService.remove(new LambdaQueryWrapper<SimAndDigHarmonicResult>().in(SimAndDigHarmonicResult::getMonitorId, monitorIds)
simAndDigHarmonicService.remove(new LambdaQueryWrapper<SimAndDigHarmonicResult>().in(SimAndDigHarmonicResult::getDevMonitorId, monitorIds)
.eq(SimAndDigHarmonicResult::getScriptId, simAndDigHarmonicResultList.get(0).getScriptId())
.eq(SimAndDigHarmonicResult::getSort, simAndDigHarmonicResultList.get(0).getSort()));
simAndDigHarmonicService.saveBatch(simAndDigHarmonicResultList, 100);
simAndDigHarmonicService.saveBatch(simAndDigHarmonicResultList);
}
}
if (harmonicResultList.get(0) instanceof ContrastHarmonicResult) {
List<ContrastHarmonicResult> contrastHarmonicResultList = BeanUtil.copyToList(harmonicResultList, ContrastHarmonicResult.class);
List<String> monitorIds = contrastHarmonicResultList.stream().map(ContrastHarmonicResult::getMonitorId).distinct().collect(Collectors.toList());
if (CollUtil.isNotEmpty(monitorIds)) {
contrastHarmonicService.remove(new LambdaQueryWrapper<ContrastHarmonicResult>().in(ContrastHarmonicResult::getMonitorId, monitorIds)
.eq(ContrastHarmonicResult::getNum, contrastHarmonicResultList.get(0).getNum()));
contrastHarmonicService.saveBatch(contrastHarmonicResultList, 100);
}
contrastHarmonicService.saveBatch(contrastHarmonicResultList);
}
DynamicTableNameHandler.remove();
@@ -110,9 +100,9 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl<Detect
DynamicTableNameHandler.setTableName(adNonTableResult + code);
if (nonHarmonicResultList.get(0) instanceof SimAndDigNonHarmonicResult) {
List<SimAndDigNonHarmonicResult> simAndDigNonHarmonicResultList = BeanUtil.copyToList(nonHarmonicResultList, SimAndDigNonHarmonicResult.class);
List<String> monitorIds = simAndDigNonHarmonicResultList.stream().map(SimAndDigNonHarmonicResult::getMonitorId).distinct().collect(Collectors.toList());
List<String> monitorIds = simAndDigNonHarmonicResultList.stream().map(SimAndDigNonHarmonicResult::getDevMonitorId).distinct().collect(Collectors.toList());
if (CollUtil.isNotEmpty(monitorIds)) {
simAndDigNonHarmonicService.remove(new LambdaQueryWrapper<SimAndDigNonHarmonicResult>().in(SimAndDigNonHarmonicResult::getMonitorId, monitorIds)
simAndDigNonHarmonicService.remove(new LambdaQueryWrapper<SimAndDigNonHarmonicResult>().in(SimAndDigNonHarmonicResult::getDevMonitorId, monitorIds)
.eq(SimAndDigNonHarmonicResult::getScriptId, simAndDigNonHarmonicResultList.get(0).getScriptId())
.eq(SimAndDigNonHarmonicResult::getSort, simAndDigNonHarmonicResultList.get(0).getSort()));
simAndDigNonHarmonicService.saveBatch(simAndDigNonHarmonicResultList, 100);
@@ -120,13 +110,8 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl<Detect
}
if (nonHarmonicResultList.get(0) instanceof ContrastNonHarmonicResult) {
List<ContrastNonHarmonicResult> contrastNonHarmonicResultList = BeanUtil.copyToList(nonHarmonicResultList, ContrastNonHarmonicResult.class);
List<String> monitorIds = contrastNonHarmonicResultList.stream().map(ContrastNonHarmonicResult::getMonitorId).distinct().collect(Collectors.toList());
if (CollUtil.isNotEmpty(monitorIds)) {
contrastNonHarmonicService.remove(new LambdaQueryWrapper<ContrastNonHarmonicResult>().in(ContrastNonHarmonicResult::getMonitorId, monitorIds)
.eq(ContrastNonHarmonicResult::getAdType, contrastNonHarmonicResultList.get(0).getAdType())
.eq(ContrastNonHarmonicResult::getNum, contrastNonHarmonicResultList.get(0).getNum()));
contrastNonHarmonicService.saveBatch(contrastNonHarmonicResultList, 100);
}
contrastNonHarmonicService.saveBatch(contrastNonHarmonicResultList);
}
DynamicTableNameHandler.remove();
}
@@ -141,9 +126,9 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl<Detect
DynamicTableNameHandler.setTableName(adTableResult + code);
if (harmonicResultList.get(0) instanceof SimAndDigHarmonicResult) {
List<SimAndDigHarmonicResult> simAndDigHarmonicResultList = BeanUtil.copyToList(harmonicResultList, SimAndDigHarmonicResult.class);
List<String> monitorIds = simAndDigHarmonicResultList.stream().map(SimAndDigHarmonicResult::getMonitorId).distinct().collect(Collectors.toList());
List<String> monitorIds = simAndDigHarmonicResultList.stream().map(SimAndDigHarmonicResult::getDevMonitorId).distinct().collect(Collectors.toList());
if (CollUtil.isNotEmpty(monitorIds)) {
simAndDigHarmonicService.remove(new LambdaQueryWrapper<SimAndDigHarmonicResult>().in(SimAndDigHarmonicResult::getMonitorId, monitorIds)
simAndDigHarmonicService.remove(new LambdaQueryWrapper<SimAndDigHarmonicResult>().in(SimAndDigHarmonicResult::getDevMonitorId, monitorIds)
.eq(SimAndDigHarmonicResult::getScriptId, simAndDigHarmonicResultList.get(0).getScriptId())
.eq(SimAndDigHarmonicResult::getSort, simAndDigHarmonicResultList.get(0).getSort()));
simAndDigHarmonicService.saveBatch(simAndDigHarmonicResultList, 100);
@@ -152,13 +137,7 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl<Detect
if (harmonicResultList.get(0) instanceof ContrastHarmonicResult) {
List<ContrastHarmonicResult> contrastHarmonicResultList = BeanUtil.copyToList(harmonicResultList, ContrastHarmonicResult.class);
List<String> monitorIds = contrastHarmonicResultList.stream().map(ContrastHarmonicResult::getMonitorId).distinct().collect(Collectors.toList());
if (CollUtil.isNotEmpty(monitorIds)) {
contrastHarmonicService.remove(new LambdaQueryWrapper<ContrastHarmonicResult>().in(ContrastHarmonicResult::getMonitorId, monitorIds)
.eq(ContrastHarmonicResult::getAdType, contrastHarmonicResultList.get(0).getAdType())
.eq(ContrastHarmonicResult::getNum, contrastHarmonicResultList.get(0).getNum()));
contrastHarmonicService.saveBatch(contrastHarmonicResultList, 100);
}
contrastHarmonicService.saveBatch(contrastHarmonicResultList);
}
DynamicTableNameHandler.remove();
return true;
@@ -167,33 +146,56 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl<Detect
}
@Override
public Map<String, Integer> devResult(List<String> ids, List<String> valueType, String code) {
List<Integer> disabledScriptDtlIndexs = detectionDataDealMapper.listDisabledScriptDtlIndexs(ids.get(0));
List<SimAndDigNonHarmonicResult> noHarm = new ArrayList<>();
for (String id : ids) {
DynamicTableNameHandler.setTableName("ad_non_harmonic_result_" + code);
noHarm.addAll(simAndDigNonHarmonicService.list(new LambdaQueryWrapper<SimAndDigNonHarmonicResult>()
.like(SimAndDigNonHarmonicResult::getMonitorId, id)
.notIn(CollUtil.isNotEmpty(disabledScriptDtlIndexs), SimAndDigNonHarmonicResult::getSort, disabledScriptDtlIndexs)
.in(CollUtil.isNotEmpty(valueType), SimAndDigNonHarmonicResult::getAdType, valueType)
));
}
DynamicTableNameHandler.remove();
List<SimAndDigHarmonicResult> harm = new ArrayList<>();
for (String id : ids) {
DynamicTableNameHandler.setTableName("ad_harmonic_result_" + code);
harm.addAll(this.list(new LambdaQueryWrapper<SimAndDigHarmonicResult>()
.like(SimAndDigHarmonicResult::getMonitorId, id)
.notIn(CollUtil.isNotEmpty(disabledScriptDtlIndexs), SimAndDigHarmonicResult::getSort, disabledScriptDtlIndexs)
.in(CollUtil.isNotEmpty(valueType), SimAndDigHarmonicResult::getAdType, valueType)
));
}
DynamicTableNameHandler.remove();
Map<String, List<Integer>> noHarmMap = noHarm.stream().collect(Collectors.groupingBy(x -> x.getMonitorId().split("_")[0],
Collectors.mapping(SimAndDigNonHarmonicResult::getResultFlag, Collectors.toList())));
Map<String, List<Integer>> harmMap = harm.stream().collect(Collectors.groupingBy(x -> x.getMonitorId().split("_")[0],
Collectors.mapping(SimAndDigHarmonicResult::getResultFlag, Collectors.toList())));
public Map<String, Integer> devResult(boolean isContrast, List<String> ids, List<String> adType, String code) {
Map<String, Integer> map = new HashMap<>(2);
List<BaseResult> noHarm = new ArrayList<>();
List<BaseResult> harm = new ArrayList<>();
if (isContrast) {
DynamicTableNameHandler.setTableName("ad_non_harmonic_result_" + code);
LambdaQueryWrapper<ContrastNonHarmonicResult> wrapper1 = new LambdaQueryWrapper<ContrastNonHarmonicResult>()
.in(CollUtil.isNotEmpty(adType), ContrastNonHarmonicResult::getAdType, adType);
for (String id : ids) {
wrapper1.like(ContrastNonHarmonicResult::getDevMonitorId, id);
}
noHarm.addAll(contrastNonHarmonicService.list(wrapper1));
DynamicTableNameHandler.remove();
DynamicTableNameHandler.setTableName("ad_harmonic_result_" + code);
LambdaQueryWrapper<ContrastHarmonicResult> wrapper2 = new LambdaQueryWrapper<ContrastHarmonicResult>()
.in(CollUtil.isNotEmpty(adType), ContrastHarmonicResult::getAdType, adType);
for (String id : ids) {
wrapper2.like(ContrastHarmonicResult::getDevMonitorId, id);
}
harm.addAll(contrastHarmonicService.list(wrapper2));
DynamicTableNameHandler.remove();
} else {
List<Integer> disabledScriptDtlIndexs = detectionDataDealMapper.listDisabledScriptDtlIndexs(ids.get(0));
DynamicTableNameHandler.setTableName("ad_non_harmonic_result_" + code);
LambdaQueryWrapper<SimAndDigNonHarmonicResult> wrapper1 = new LambdaQueryWrapper<SimAndDigNonHarmonicResult>()
.notIn(CollUtil.isNotEmpty(disabledScriptDtlIndexs), SimAndDigNonHarmonicResult::getSort, disabledScriptDtlIndexs)
.in(CollUtil.isNotEmpty(adType), SimAndDigNonHarmonicResult::getAdType, adType);
for (String id : ids) {
wrapper1.like(SimAndDigNonHarmonicResult::getDevMonitorId, id);
}
noHarm.addAll(simAndDigNonHarmonicService.list(wrapper1));
DynamicTableNameHandler.remove();
DynamicTableNameHandler.setTableName("ad_harmonic_result_" + code);
LambdaQueryWrapper<SimAndDigHarmonicResult> wrapper2 = new LambdaQueryWrapper<SimAndDigHarmonicResult>()
.notIn(CollUtil.isNotEmpty(disabledScriptDtlIndexs), SimAndDigHarmonicResult::getSort, disabledScriptDtlIndexs)
.in(CollUtil.isNotEmpty(adType), SimAndDigHarmonicResult::getAdType, adType);
for (String id : ids) {
wrapper2.like(SimAndDigHarmonicResult::getDevMonitorId, id);
}
harm.addAll(this.list(wrapper2));
DynamicTableNameHandler.remove();
}
Map<String, List<Integer>> noHarmMap = noHarm.stream().collect(Collectors.groupingBy(x -> x.getDevMonitorId().split("_")[0],
Collectors.mapping(BaseResult::getResultFlag, Collectors.toList())));
Map<String, List<Integer>> harmMap = harm.stream().collect(Collectors.groupingBy(x -> x.getDevMonitorId().split("_")[0],
Collectors.mapping(BaseResult::getResultFlag, Collectors.toList())));
for (String id : ids) {
List<Integer> resultFlags = new ArrayList<>();
if (noHarmMap.containsKey(id)) {

View File

@@ -57,7 +57,7 @@ public class SimAndDigHarmonicServiceImpl extends ServiceImpl<SimAndDigHarmonicM
if ("-1".equals(chnNum)) {
monitorId = deviceId;
}
wrapper.like(SimAndDigHarmonicResult::getMonitorId, monitorId)
wrapper.like(SimAndDigHarmonicResult::getDevMonitorId, monitorId)
.eq(ObjectUtil.isNotNull(scriptId), SimAndDigHarmonicResult::getScriptId, scriptId)
.in(CollUtil.isNotEmpty(sort), SimAndDigHarmonicResult::getSort, sort);
List<SimAndDigHarmonicResult> list = this.getBaseMapper().selectJoinList(SimAndDigHarmonicResult.class, wrapper);
@@ -70,7 +70,7 @@ public class SimAndDigHarmonicServiceImpl extends ServiceImpl<SimAndDigHarmonicM
String prefix = "ad_harmonic_";
DynamicTableNameHandler.setTableName(prefix + param.getCode());
MPJLambdaWrapper<SimAndDigHarmonicResult> wrapper = new MPJLambdaWrapper<>();
wrapper.like(SimAndDigHarmonicResult::getMonitorId, param.getDevId() + "_" + param.getDevNum())
wrapper.like(SimAndDigHarmonicResult::getDevMonitorId, param.getDevId() + "_" + param.getDevNum())
.eq(ObjectUtil.isNotNull(param.getScriptId()), SimAndDigHarmonicResult::getScriptId, param.getScriptId())
.in(ObjectUtil.isNotEmpty(param.getIndex()), SimAndDigHarmonicResult::getSort, param.getIndex())
.orderByAsc(SimAndDigHarmonicResult::getTimeId)
@@ -137,7 +137,7 @@ public class SimAndDigHarmonicServiceImpl extends ServiceImpl<SimAndDigHarmonicM
String prefix = "ad_harmonic_result_";
DynamicTableNameHandler.setTableName(prefix + param.getCode());
MPJLambdaWrapper<SimAndDigHarmonicResult> wrapper = new MPJLambdaWrapper<>();
wrapper.like(SimAndDigHarmonicResult::getMonitorId, param.getDevId() + "_" + param.getDevNum())
wrapper.like(SimAndDigHarmonicResult::getDevMonitorId, param.getDevId() + "_" + param.getDevNum())
.eq(ObjectUtil.isNotNull(param.getScriptId()), SimAndDigHarmonicResult::getScriptId, param.getScriptId())
.in(ObjectUtil.isNotEmpty(param.getIndex()), SimAndDigHarmonicResult::getSort, param.getIndex())
.orderByAsc(SimAndDigHarmonicResult::getTimeId);
@@ -207,7 +207,7 @@ public class SimAndDigHarmonicServiceImpl extends ServiceImpl<SimAndDigHarmonicM
DynamicTableNameHandler.setTableName(prefix + param.getCode());
LambdaQueryWrapper<SimAndDigHarmonicResult> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.select(SimAndDigHarmonicResult::getSort)
.likeRight(StrUtil.isNotBlank(param.getDevId()), SimAndDigHarmonicResult::getMonitorId, param.getDevId())
.likeRight(StrUtil.isNotBlank(param.getDevId()), SimAndDigHarmonicResult::getDevMonitorId, param.getDevId())
.ne(SimAndDigHarmonicResult::getResultFlag, 1)
.ne(SimAndDigHarmonicResult::getResultFlag, 4)
.ne(SimAndDigHarmonicResult::getResultFlag, 5)
@@ -218,7 +218,7 @@ public class SimAndDigHarmonicServiceImpl extends ServiceImpl<SimAndDigHarmonicM
DynamicTableNameHandler.setTableName(prefixNon + param.getCode());
LambdaQueryWrapper<SimAndDigNonHarmonicResult> resultLambdaQueryWrapper = new LambdaQueryWrapper<>();
resultLambdaQueryWrapper.select(SimAndDigNonHarmonicResult::getSort)
.likeRight(StrUtil.isNotBlank(param.getDevId()), SimAndDigNonHarmonicResult::getMonitorId, param.getDevId())
.likeRight(StrUtil.isNotBlank(param.getDevId()), SimAndDigNonHarmonicResult::getDevMonitorId, param.getDevId())
.ne(SimAndDigNonHarmonicResult::getResultFlag, 1)
.ne(SimAndDigNonHarmonicResult::getResultFlag, 4)
.ne(SimAndDigNonHarmonicResult::getResultFlag, 5)
@@ -235,7 +235,7 @@ public class SimAndDigHarmonicServiceImpl extends ServiceImpl<SimAndDigHarmonicM
String prefix = "ad_harmonic_result_";
DynamicTableNameHandler.setTableName(prefix + singleNonHarmParam.getPlanCode());
MPJLambdaWrapper<SimAndDigHarmonicResult> wrapper = new MPJLambdaWrapper<>();
wrapper.like(SimAndDigHarmonicResult::getMonitorId, singleNonHarmParam.getDevId() + "_" + singleNonHarmParam.getChannelNo())
wrapper.like(SimAndDigHarmonicResult::getDevMonitorId, singleNonHarmParam.getDevId() + "_" + singleNonHarmParam.getChannelNo())
.eq(SimAndDigHarmonicResult::getSort, singleNonHarmParam.getSort())
.eq(SimAndDigHarmonicResult::getAdType, singleNonHarmParam.getAdType());
List<SimAndDigHarmonicResult> adHarmonicResults = this.getBaseMapper().selectJoinList(SimAndDigHarmonicResult.class, wrapper);
@@ -255,7 +255,7 @@ public class SimAndDigHarmonicServiceImpl extends ServiceImpl<SimAndDigHarmonicM
wrapper.selectAll(SimAndDigHarmonicResult.class)
.selectAs(DictTree::getCode, SimAndDigHarmonicResult::getAdType)
.leftJoin(DictTree.class, DictTree::getId, SimAndDigHarmonicResult::getAdType).eq(SimAndDigHarmonicResult::getScriptId, scriptId)
.likeRight(SimAndDigHarmonicResult::getMonitorId, devId);
.likeRight(SimAndDigHarmonicResult::getDevMonitorId, devId);
List<SimAndDigHarmonicResult> results = this.getBaseMapper().selectJoinList(SimAndDigHarmonicResult.class, wrapper);
DynamicTableNameHandler.remove();
return results;
@@ -269,7 +269,7 @@ public class SimAndDigHarmonicServiceImpl extends ServiceImpl<SimAndDigHarmonicM
wrapper.selectAll(SimAndDigHarmonicResult.class)
.selectAs(DictTree::getCode, SimAndDigHarmonicResult::getAdType)
.leftJoin(DictTree.class, DictTree::getId, SimAndDigHarmonicResult::getAdType).eq(SimAndDigHarmonicResult::getScriptId, scriptId)
.likeRight(SimAndDigHarmonicResult::getMonitorId, devId);
.likeRight(SimAndDigHarmonicResult::getDevMonitorId, devId);
List<SimAndDigHarmonicResult> results = this.getBaseMapper().selectJoinList(SimAndDigHarmonicResult.class, wrapper);
DynamicTableNameHandler.remove();
return results;

View File

@@ -48,7 +48,7 @@ public class SimAndDigNonHarmonicServiceImpl extends ServiceImpl<SimAndDigNonHar
if ("-1".equals(chnNum)) {
monitorId = deviceId;
}
wrapper.like(SimAndDigNonHarmonicResult::getMonitorId, monitorId)
wrapper.like(SimAndDigNonHarmonicResult::getDevMonitorId, monitorId)
.eq(ObjectUtil.isNotNull(scriptId), SimAndDigNonHarmonicResult::getScriptId, scriptId)
.in(CollUtil.isNotEmpty(sort), SimAndDigNonHarmonicResult::getSort, sort);
List<SimAndDigNonHarmonicResult> list = this.getBaseMapper().selectJoinList(SimAndDigNonHarmonicResult.class, wrapper);
@@ -61,7 +61,7 @@ public class SimAndDigNonHarmonicServiceImpl extends ServiceImpl<SimAndDigNonHar
String prefix = "ad_non_harmonic_";
DynamicTableNameHandler.setTableName(prefix + param.getCode());
MPJLambdaWrapper<SimAndDigNonHarmonicResult> wrapper = new MPJLambdaWrapper<>();
wrapper.like(SimAndDigNonHarmonicResult::getMonitorId, param.getDevId() + "_" + param.getDevNum())
wrapper.like(SimAndDigNonHarmonicResult::getDevMonitorId, param.getDevId() + "_" + param.getDevNum())
.eq(ObjectUtil.isNotNull(param.getScriptId()), SimAndDigNonHarmonicResult::getScriptId, param.getScriptId())
.in(ObjectUtil.isNotEmpty(param.getIndex()), SimAndDigNonHarmonicResult::getSort, param.getIndex());
List<SimAndDigNonHarmonicResult> SimAndDigHarmonicResults = this.getBaseMapper().selectJoinList(SimAndDigNonHarmonicResult.class, wrapper);
@@ -95,7 +95,7 @@ public class SimAndDigNonHarmonicServiceImpl extends ServiceImpl<SimAndDigNonHar
String prefix = "ad_non_harmonic_result_";
DynamicTableNameHandler.setTableName(prefix + param.getCode());
MPJLambdaWrapper<SimAndDigNonHarmonicResult> wrapper = new MPJLambdaWrapper<>();
wrapper.like(SimAndDigNonHarmonicResult::getMonitorId, param.getDevId() + "_" + param.getDevNum())
wrapper.like(SimAndDigNonHarmonicResult::getDevMonitorId, param.getDevId() + "_" + param.getDevNum())
.eq(ObjectUtil.isNotNull(param.getScriptId()), SimAndDigNonHarmonicResult::getScriptId, param.getScriptId())
.in(ObjectUtil.isNotEmpty(param.getIndex()), SimAndDigNonHarmonicResult::getSort, param.getIndex());
@@ -141,7 +141,7 @@ public class SimAndDigNonHarmonicServiceImpl extends ServiceImpl<SimAndDigNonHar
String prefix = "ad_non_harmonic_result_";
DynamicTableNameHandler.setTableName(prefix + singleNonHarmParam.getPlanCode());
MPJLambdaWrapper<SimAndDigNonHarmonicResult> wrapper = new MPJLambdaWrapper<>();
wrapper.like(SimAndDigNonHarmonicResult::getMonitorId, singleNonHarmParam.getDevId() + "_" + singleNonHarmParam.getChannelNo())
wrapper.like(SimAndDigNonHarmonicResult::getDevMonitorId, singleNonHarmParam.getDevId() + "_" + singleNonHarmParam.getChannelNo())
.eq(SimAndDigNonHarmonicResult::getSort, singleNonHarmParam.getSort())
.eq(SimAndDigNonHarmonicResult::getAdType, singleNonHarmParam.getAdType());
List<SimAndDigNonHarmonicResult> SimAndDigHarmonicResults = this.getBaseMapper().selectJoinList(SimAndDigNonHarmonicResult.class, wrapper);
@@ -161,7 +161,7 @@ public class SimAndDigNonHarmonicServiceImpl extends ServiceImpl<SimAndDigNonHar
.selectAs(DictTree::getCode, SimAndDigNonHarmonicResult::getAdType)
.leftJoin(DictTree.class, DictTree::getId, SimAndDigNonHarmonicResult::getAdType)
.eq(SimAndDigNonHarmonicResult::getScriptId, scriptId)
.likeRight(SimAndDigNonHarmonicResult::getMonitorId, devId);
.likeRight(SimAndDigNonHarmonicResult::getDevMonitorId, devId);
List<SimAndDigNonHarmonicResult> results = this.getBaseMapper().selectJoinList(SimAndDigNonHarmonicResult.class, wrapper);
DynamicTableNameHandler.remove();
return results;
@@ -172,7 +172,7 @@ public class SimAndDigNonHarmonicServiceImpl extends ServiceImpl<SimAndDigNonHar
String prefix = "ad_non_harmonic_result_";
DynamicTableNameHandler.setTableName(prefix + param.getPlanCode());
MPJLambdaWrapper<SimAndDigNonHarmonicResult> wrapper = new MPJLambdaWrapper<>();
wrapper.like(SimAndDigNonHarmonicResult::getMonitorId, param.getDevId() + "_" + param.getChannelNo())
wrapper.like(SimAndDigNonHarmonicResult::getDevMonitorId, param.getDevId() + "_" + param.getChannelNo())
.in(SimAndDigNonHarmonicResult::getSort, param.getSortList())
.in(SimAndDigNonHarmonicResult::getAdType, param.getValueTypeList());
List<SimAndDigNonHarmonicResult> adNonHarmonicResults = this.getBaseMapper().selectJoinList(SimAndDigNonHarmonicResult.class, wrapper);
@@ -190,7 +190,7 @@ public class SimAndDigNonHarmonicServiceImpl extends ServiceImpl<SimAndDigNonHar
.selectAs(DictTree::getCode, SimAndDigNonHarmonicResult::getAdType)
.leftJoin(DictTree.class, DictTree::getId, SimAndDigNonHarmonicResult::getAdType)
.eq(SimAndDigNonHarmonicResult::getScriptId, scriptId)
.likeRight(SimAndDigNonHarmonicResult::getMonitorId, devId);
.likeRight(SimAndDigNonHarmonicResult::getDevMonitorId, devId);
List<SimAndDigNonHarmonicResult> results = this.getBaseMapper().selectJoinList(SimAndDigNonHarmonicResult.class, wrapper);
DynamicTableNameHandler.remove();
return results;

View File

@@ -35,15 +35,20 @@ public class TableGenServiceImpl implements TableGenService {
}
String sql = "CREATE TABLE AD_Harmonic_" + code + " (\n" +
" Monitor_Id CHAR(34) NOT NULL COMMENT '监测点Id',\n" +
" Dev_Monitor_Id CHAR(34) NOT NULL COMMENT '监测点Id',\n" +
" Time_Id DATETIME(3) 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) NULL COMMENT '0不合格 1合格 4无法处理',\n" +
A + B + C +
(isContrast ?
" Num tinyint(1) unsigned DEFAULT 0 COMMENT '第几次检测',\n" +
" PRIMARY KEY (Monitor_Id,Time_Id, AD_Type, Num)\n"
"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" +
"A_Value_0 float NULL COMMENT 'A相基波有效值',\n" +
"C_Value_0 float NULL COMMENT 'B相基波有效值',\n" +
"B_Value_0 float NULL COMMENT 'B相基波有效值',\n" +
"PRIMARY KEY (Id)\n"
:
" Script_Id CHAR(32) NOT NULL COMMENT '检测脚本表Id',\n" +
" Sort int(4) NOT NULL COMMENT '总检测脚本中的测试项序号',\n" +
@@ -55,15 +60,20 @@ public class TableGenServiceImpl implements TableGenService {
String b = B.toString().replaceAll("float", "json");
String c = C.toString().replaceAll("float", "json");
String sql2 = "CREATE TABLE AD_Harmonic_Result_" + code + " (\n" +
" Monitor_Id CHAR(34) NOT NULL COMMENT '监测点Id',\n" +
" Dev_Monitor_Id CHAR(34) NOT NULL COMMENT '监测点Id',\n" +
" Time_Id DATETIME(3) 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 +
(isContrast ?
" Num tinyint(1) unsigned DEFAULT 0 COMMENT '第几次检测',\n" +
" PRIMARY KEY (Monitor_Id, AD_Type, Num)\n"
"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" +
"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" +