完善暂存功能

This commit is contained in:
caozehui
2026-07-15 16:23:15 +08:00
parent 95005d2462
commit 0cd8e454fc
4 changed files with 124 additions and 22 deletions

View File

@@ -433,7 +433,7 @@ public class DetectionServiceImpl {
fData = sourceIssue.getFFreq();
}
if (PowerIndexEnum.P.getKey().equals(type)) {
if (!DetectionCodeEnum.PF.getCode().equals(splitArr[1])) {
if (!DetectionCodeEnum.PF.getCode().equals(splitArr[1]) && !DetectionCodeEnum.TOTPF.getCode().equals(splitArr[1])) {
Boolean valueType = pqScriptMapper.selectScriptIsValueType(sourceIssue.getScriptId());
if (valueType) {
fData = sourceIssue.getFUn() * sourceIssue.getFIn() / 100;
@@ -538,11 +538,15 @@ public class DetectionServiceImpl {
SourceIssue sourceIssue,
DictDataEnum dataRule,
Integer num, Integer scale) {
Double fData = 1.0;
Double fDataA = 1.0;
Double fDataB = 1.0;
Double fDataC = 1.0;
String fundCode = "";
String harmCode = "";
if (U.equals(type)) {
fData = sourceIssue.getFUn();
fDataA = sourceIssue.getChannelList().stream().filter(x -> x.getChannelType().contains("Ua")).findFirst().get().getFAmp();
fDataB = sourceIssue.getChannelList().stream().filter(x -> x.getChannelType().contains("Ub")).findFirst().get().getFAmp();
fDataC = sourceIssue.getChannelList().stream().filter(x -> x.getChannelType().contains("Uc")).findFirst().get().getFAmp();
fundCode = DetectionCodeEnum.U1.getCode();
if (num == 1) {
harmCode = DetectionCodeEnum.SV_1_49.getCode();
@@ -551,7 +555,9 @@ public class DetectionServiceImpl {
}
}
if (I.equals(type)) {
fData = sourceIssue.getFIn();
fDataA = sourceIssue.getChannelList().stream().filter(x -> x.getChannelType().contains("Ia")).findFirst().get().getFAmp();
fDataB = sourceIssue.getChannelList().stream().filter(x -> x.getChannelType().contains("Ib")).findFirst().get().getFAmp();
fDataC = sourceIssue.getChannelList().stream().filter(x -> x.getChannelType().contains("Ic")).findFirst().get().getFAmp();
fundCode = DetectionCodeEnum.I1.getCode();
if (num == 1) {
harmCode = DetectionCodeEnum.SI_1_49.getCode();
@@ -560,7 +566,9 @@ public class DetectionServiceImpl {
}
}
if (HP.equals(type)) {
fData = (sourceIssue.getFIn() * sourceIssue.getFUn()) * 0.01;
fDataA = (sourceIssue.getFIn() * sourceIssue.getFUn()) * 0.01;
fDataB = (sourceIssue.getFIn() * sourceIssue.getFUn()) * 0.01;
fDataC = (sourceIssue.getFIn() * sourceIssue.getFUn()) * 0.01;
harmCode = DetectionCodeEnum.P2_50.getCode();
}
// if (P.equals(type)) {
@@ -586,9 +594,9 @@ public class DetectionServiceImpl {
pqErrSysDtls = adDtlsCheckData.get(0).getErrSysDtls();
}
}
List<DetectionData> integerBooleanA = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_A, sourceIssue, dataRule, devMap.get(TYPE_A), fData, num, scale);
List<DetectionData> integerBooleanB = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_B, sourceIssue, dataRule, devMap.get(TYPE_B), fData, num, scale);
List<DetectionData> integerBooleanC = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_C, sourceIssue, dataRule, devMap.get(TYPE_C), fData, num, scale);
List<DetectionData> integerBooleanA = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_A, sourceIssue, dataRule, devMap.get(TYPE_A), fDataA, num, scale);
List<DetectionData> integerBooleanB = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_B, sourceIssue, dataRule, devMap.get(TYPE_B), fDataB, num, scale);
List<DetectionData> integerBooleanC = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_C, sourceIssue, dataRule, devMap.get(TYPE_C), fDataC, num, scale);
harmonicResult.setDataType(sourceIssue.getDataType());
reflectHarmonic(false, "a", integerBooleanA, harmonicResult, num);
reflectHarmonic(false, "b", integerBooleanB, harmonicResult, num);

View File

@@ -284,28 +284,45 @@ public class PreDetectionServiceImpl implements PreDetectionService {
@Override
public boolean restartTemTest(PreDetectionParam param) {
PreDetectionParam runtimeParam = WebServiceManager.getPreDetectionParam(param.getUserPageId());
if (runtimeParam == null) {
if (StrUtil.isBlank(param.getSourceId()) || StrUtil.isBlank(param.getScriptId()) || StrUtil.isBlank(param.getCode())) {
throw new BusinessException(CommonResponseEnum.FAIL, "未找到暂停检测上下文,请重新开始检测");
}
runtimeParam = param;
}
FormalTestManager.stopFlag = false;
socketDevResponseService.initRestart();
List<SourceIssue> sourceIssueList = SocketManager.getSourceList();
SourceInitialize sourceInitialize = pqSourceService.getSourceInitializeParam(param.getSourceId());
param.setSourceName(sourceInitialize.getSourceId());
if (StrUtil.isBlank(runtimeParam.getSourceName()) && StrUtil.isNotBlank(runtimeParam.getSourceId())) {
SourceInitialize sourceInitialize = pqSourceService.getSourceInitializeParam(runtimeParam.getSourceId());
if (sourceInitialize == null) {
throw new BusinessException(DetectionResponseEnum.SOURCE_INFO_NOT);
}
runtimeParam.setSourceName(sourceInitialize.getSourceId());
}
if (CollUtil.isNotEmpty(sourceIssueList)) {
SourceIssue sourceIssues = SocketManager.getSourceList().get(0);
String type = resolveFormalIssueType(sourceIssues);
sendBigItemStartIfFirstFormalIssue(runtimeParam, sourceIssues, type);
if (StrUtil.isNotBlank(sourceIssues.getOtherType())) {
sourceIssues.setType(PowerIndexEnum.V.getKey());
}
SocketMsg<String> xuMsg = new SocketMsg<>();
xuMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
xuMsg.setData(JSON.toJSONString(sourceIssues));
xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + "&&" + sourceIssues.getType());
SocketManager.sendMsg(param.getUserPageId() + DetectionCommunicateConstant.SOURCE, JSON.toJSONString(xuMsg));
xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + "&&" + type);
SocketManager.sendMsg(runtimeParam.getUserPageId() + DetectionCommunicateConstant.SOURCE, JSON.toJSONString(xuMsg));
// Resume_Success
} else {
//TODO 是否最终检测完成需要推送给用户 检测完成
PqScriptCheckDataParam checkDataParam = new PqScriptCheckDataParam();
checkDataParam.setScriptId(param.getScriptId());
checkDataParam.setScriptId(runtimeParam.getScriptId());
checkDataParam.setIsValueTypeName(false);
List<String> adType = iPqScriptCheckDataService.getValueType(checkDataParam);
iPqDevService.updateResult(param.getDevIds(), adType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity(), true);
CnSocketUtil.quitSend(param);
iPqDevService.updateResult(runtimeParam.getDevIds(), adType, runtimeParam.getCode(), runtimeParam.getUserId(), runtimeParam.getTemperature(), runtimeParam.getHumidity(), true);
CnSocketUtil.quitSend(runtimeParam);
}
return true;
@@ -405,6 +422,36 @@ public class PreDetectionServiceImpl implements PreDetectionService {
return pqScriptDtlsService.listSourceIssue(issueParam);
}
private void sendBigItemStartIfFirstFormalIssue(PreDetectionParam param, SourceIssue currentIssue, String type) {
if (param == null || currentIssue == null || currentIssue.getIndex() == null || StrUtil.isBlank(type)) {
return;
}
List<SourceIssue> allIssues = buildAllFormalIssues(param);
if (isFirstFormalIssueOfBigItem(allIssues, currentIssue, type)) {
WebServiceManager.sendDetectionMessage(param.getUserPageId(), type + CnSocketUtil.START_TAG, null, new ArrayList<>(), null);
}
}
static boolean isFirstFormalIssueOfBigItem(List<SourceIssue> allIssues, SourceIssue currentIssue, String type) {
if (CollUtil.isEmpty(allIssues) || currentIssue == null || currentIssue.getIndex() == null || StrUtil.isBlank(type)) {
return false;
}
Integer firstSort = allIssues.stream()
.filter(issue -> type.equals(resolveFormalIssueType(issue)))
.map(SourceIssue::getIndex)
.filter(Objects::nonNull)
.min(Integer::compareTo)
.orElse(null);
return Objects.equals(firstSort, currentIssue.getIndex());
}
static String resolveFormalIssueType(SourceIssue issue) {
if (issue == null) {
return null;
}
return StrUtil.isNotBlank(issue.getOtherType()) ? issue.getOtherType() : issue.getType();
}
private void mergeResultFlags(Map<String, List<Integer>> target, Map<String, List<Integer>> source) {
if (CollUtil.isEmpty(source)) {
return;

View File

@@ -663,7 +663,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
if (v == 90 || v == -90 || v == 270 || v == -270) {
checkData.setValue(0.0);
} else {
checkData.setValue(channelI.get(0).getFAmp() * listDTO.getFAmp() * Math.cos(v * Math.PI / 180));
checkData.setValue(channelI.get(0).getFAmp() * listDTO.getFAmp() / radio * Math.cos(v * Math.PI / 180));
}
setCheck(info, checkData, channelListDTO, checkArchive, listDTO);
}
@@ -688,7 +688,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
if (v == 0 || v == 360 || v == 180 || v == -180) {
checkData.setValue(0.0);
} else {
checkData.setValue(channelI.get(0).getFAmp() * listDTO.getFAmp() * Math.sin(v * Math.PI / 180));
checkData.setValue(channelI.get(0).getFAmp() * listDTO.getFAmp() / radio * Math.sin(v * Math.PI / 180));
}
// if (valueType) {
// checkData.setValue(checkData.getValue() * 57.74 * 5);
@@ -758,7 +758,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
if (v == 90 || v == -90 || v == 270 || v == -270) {
value += 0.0;
} else {
value += channelI.get(0).getFAmp() * listDTO.getFAmp() * Math.cos(v * Math.PI / 180);
value += channelI.get(0).getFAmp() * listDTO.getFAmp() / radio * Math.cos(v * Math.PI / 180);
}
}
}
@@ -787,7 +787,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
if (v == 0 || v == 360 || v == 180 || v == -180) {
value += 0.0;
} else {
value += channelI.get(0).getFAmp() * listDTO.getFAmp() * Math.sin(v * Math.PI / 180);
value += channelI.get(0).getFAmp() * listDTO.getFAmp() / radio * Math.sin(v * Math.PI / 180);
}
}
}
@@ -811,7 +811,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
.filter(x -> x.getChannelType().contains("I" + listDTO.getChannelType().substring(1, 2)))
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(channelI)) {
value += channelI.get(0).getFAmp() * listDTO.getFAmp();
value += channelI.get(0).getFAmp() * listDTO.getFAmp() / radio;
}
}
checkData = new PqScriptDtlsParam.CheckData();
@@ -841,9 +841,9 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
if (v == 90 || v == -90 || v == 270 || v == -270) {
valueTotW += 0.0;
} else {
valueTotW += channelI.get(0).getFAmp() * listDTO.getFAmp() * Math.cos(v * Math.PI / 180);
valueTotW += channelI.get(0).getFAmp() * listDTO.getFAmp() / radio * Math.cos(v * Math.PI / 180);
}
valueTotVA += channelI.get(0).getFAmp() * listDTO.getFAmp();
valueTotVA += channelI.get(0).getFAmp() * listDTO.getFAmp() / radio;
}
}
checkData = new PqScriptDtlsParam.CheckData();

View File

@@ -0,0 +1,47 @@
package com.njcn.gather.detection.service.impl;
import com.njcn.gather.script.pojo.po.SourceIssue;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class PreDetectionServiceImplTest {
@Test
public void isFirstFormalIssueOfBigItem_returnsTrueForFirstIssueOfType() {
List<SourceIssue> allIssues = Arrays.asList(issue(10, "voltage"), issue(20, "voltage"), issue(30, "current"));
assertTrue(PreDetectionServiceImpl.isFirstFormalIssueOfBigItem(allIssues, issue(10, "voltage"), "voltage"));
}
@Test
public void isFirstFormalIssueOfBigItem_returnsFalseWhenResumingInsideSameBigItem() {
List<SourceIssue> allIssues = Arrays.asList(issue(10, "voltage"), issue(20, "voltage"), issue(30, "current"));
assertFalse(PreDetectionServiceImpl.isFirstFormalIssueOfBigItem(allIssues, issue(20, "voltage"), "voltage"));
}
@Test
public void isFirstFormalIssueOfBigItem_usesOtherTypeAsBigItemType() {
List<SourceIssue> allIssues = Arrays.asList(otherTypeIssue(10, "V", "voltage"), otherTypeIssue(20, "V", "voltage"));
assertTrue(PreDetectionServiceImpl.isFirstFormalIssueOfBigItem(allIssues, otherTypeIssue(10, "V", "voltage"), "voltage"));
}
private SourceIssue issue(Integer index, String type) {
SourceIssue issue = new SourceIssue();
issue.setIndex(index);
issue.setType(type);
return issue;
}
private SourceIssue otherTypeIssue(Integer index, String type, String otherType) {
SourceIssue issue = issue(index, type);
issue.setOtherType(otherType);
return issue;
}
}