三项不平衡补充序分量
This commit is contained in:
@@ -105,7 +105,7 @@ public class PreDetectionController extends BaseController {
|
|||||||
@ApiOperation("启动")
|
@ApiOperation("启动")
|
||||||
@ApiImplicitParam(name = "param", value = "查询参数", required = true)
|
@ApiImplicitParam(name = "param", value = "查询参数", required = true)
|
||||||
public HttpResult<?> startTestSimulate(@RequestBody @Validated SimulateDetectionParam param) {
|
public HttpResult<?> startTestSimulate(@RequestBody @Validated SimulateDetectionParam param) {
|
||||||
String methodDescribe = getMethodDescribe("startTestSimulate");
|
String methodDescribe = getMethodDescribe("startSimulateTest");
|
||||||
// ContrastDetectionParam 无 userPageId 字段,用 loginName 作为会话标识(与 WS 会话 key 一致)
|
// ContrastDetectionParam 无 userPageId 字段,用 loginName 作为会话标识(与 WS 会话 key 一致)
|
||||||
HttpResult<DetectionLockHolderVO> busy = tryAcquireLock(param.getUserPageId());
|
HttpResult<DetectionLockHolderVO> busy = tryAcquireLock(param.getUserPageId());
|
||||||
if (busy != null) {
|
if (busy != null) {
|
||||||
@@ -121,7 +121,7 @@ public class PreDetectionController extends BaseController {
|
|||||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
|
||||||
} finally {
|
} finally {
|
||||||
if (!keepLock) {
|
if (!keepLock) {
|
||||||
releaseLockSelf("START_CONTRAST_SYNC_FAILED");
|
releaseLockSelf("START_SIMULATE_TEST_SYNC_FAILED");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,9 @@ public enum DetectionCodeEnum {
|
|||||||
IA("IA", "电流相角"),
|
IA("IA", "电流相角"),
|
||||||
I1A("I1A", "电流基波角度值"),
|
I1A("I1A", "电流基波角度值"),
|
||||||
V_UNBAN("V_UNBAN", "三相电压负序不平衡度"),
|
V_UNBAN("V_UNBAN", "三相电压负序不平衡度"),
|
||||||
|
SeqV("SeqV", "电压序分量"),
|
||||||
I_UNBAN("I_UNBAN", "三相电流负序不平衡度"),
|
I_UNBAN("I_UNBAN", "三相电流负序不平衡度"),
|
||||||
|
SeqA("SeqA", "电流序分量"),
|
||||||
PST("PST", "短时间闪变"),
|
PST("PST", "短时间闪变"),
|
||||||
W("W", "有功功率"),
|
W("W", "有功功率"),
|
||||||
VARW("VARW", "无功功率"),
|
VARW("VARW", "无功功率"),
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import cn.hutool.core.bean.BeanUtil;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.NumberUtil;
|
import cn.hutool.core.util.NumberUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||||
import com.njcn.gather.detection.pojo.enums.DetectionCodeEnum;
|
import com.njcn.gather.detection.pojo.enums.DetectionCodeEnum;
|
||||||
@@ -205,22 +204,12 @@ public class DetectionServiceImpl {
|
|||||||
* 三相电压不平衡度
|
* 三相电压不平衡度
|
||||||
*/
|
*/
|
||||||
case IMBV:
|
case IMBV:
|
||||||
SimAndDigNonHarmonicResult vUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, "V_UNBAN", oneConfig.getScale());
|
return isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, code, oneConfig.getScale());
|
||||||
if (ObjectUtil.isNotNull(vUnban)) {
|
|
||||||
detectionDataDealService.acceptNonHarmonicResult(Arrays.asList(vUnban), code);
|
|
||||||
return vUnban.getResultFlag();
|
|
||||||
}
|
|
||||||
return 4;
|
|
||||||
/**
|
/**
|
||||||
* 三相电流不平衡度
|
* 三相电流不平衡度
|
||||||
*/
|
*/
|
||||||
case IMBA:
|
case IMBA:
|
||||||
SimAndDigNonHarmonicResult iUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, "I_UNBAN", oneConfig.getScale());
|
return isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, code, oneConfig.getScale());
|
||||||
if (ObjectUtil.isNotNull(iUnban)) {
|
|
||||||
detectionDataDealService.acceptNonHarmonicResult(Arrays.asList(iUnban), code);
|
|
||||||
return iUnban.getResultFlag();
|
|
||||||
}
|
|
||||||
return 4;
|
|
||||||
/**
|
/**
|
||||||
* 谐波有功功率
|
* 谐波有功功率
|
||||||
*/
|
*/
|
||||||
@@ -235,12 +224,7 @@ public class DetectionServiceImpl {
|
|||||||
* 闪变
|
* 闪变
|
||||||
*/
|
*/
|
||||||
case F:
|
case F:
|
||||||
SimAndDigNonHarmonicResult pst = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, null, sourceIssue, dataRule, "PST", oneConfig.getScale());
|
return isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, DetectionCodeEnum.PST.getCode(), sourceIssue, dataRule, code, oneConfig.getScale());
|
||||||
if (ObjectUtil.isNotNull(pst)) {
|
|
||||||
detectionDataDealService.acceptNonHarmonicResult(Arrays.asList(pst), code);
|
|
||||||
return pst.getResultFlag();
|
|
||||||
}
|
|
||||||
return 4;
|
|
||||||
/**
|
/**
|
||||||
* 暂态
|
* 暂态
|
||||||
*/
|
*/
|
||||||
@@ -435,6 +419,10 @@ public class DetectionServiceImpl {
|
|||||||
}
|
}
|
||||||
// 根据数据处理规则取值。key为相别,value为值列表
|
// 根据数据处理规则取值。key为相别,value为值列表
|
||||||
Map<String, List<Double>> map = devListMap(dev, dataRule, s.split("\\$")[1]);
|
Map<String, List<Double>> map = devListMap(dev, dataRule, s.split("\\$")[1]);
|
||||||
|
List<ErrDtlsCheckDataVO> dtlsCheckData = null;
|
||||||
|
if (CollUtil.isNotEmpty(errDtlsCheckData)) {
|
||||||
|
dtlsCheckData = errDtlsCheckData.stream().filter(x -> x.getValueTypeCode().equals(s.split("\\$")[1])).collect(Collectors.toList());
|
||||||
|
}
|
||||||
Double fData = 1.0;
|
Double fData = 1.0;
|
||||||
if (U.equals(type)) {
|
if (U.equals(type)) {
|
||||||
fData = sourceIssue.getFUn();
|
fData = sourceIssue.getFUn();
|
||||||
@@ -448,7 +436,7 @@ public class DetectionServiceImpl {
|
|||||||
if (P.equals(type)) {
|
if (P.equals(type)) {
|
||||||
fData = sourceIssue.getFUn() * sourceIssue.getFIn() * 0.01;
|
fData = sourceIssue.getFUn() * sourceIssue.getFIn() * 0.01;
|
||||||
Double finalFData = fData;
|
Double finalFData = fData;
|
||||||
errDtlsCheckData.stream().forEach(x -> x.setValue(x.getValue() * finalFData));
|
dtlsCheckData.stream().forEach(x -> x.setValue(x.getValue() * finalFData));
|
||||||
}
|
}
|
||||||
SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult();
|
SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult();
|
||||||
String[] split = dev.get(0).getId().split("_");
|
String[] split = dev.get(0).getId().split("_");
|
||||||
@@ -459,52 +447,50 @@ public class DetectionServiceImpl {
|
|||||||
result.setDataType(sourceIssue.getDataType());
|
result.setDataType(sourceIssue.getDataType());
|
||||||
List<PqErrSysDtls> pqErrSysDtls = new ArrayList<>();
|
List<PqErrSysDtls> pqErrSysDtls = new ArrayList<>();
|
||||||
Integer isQualified = 4;
|
Integer isQualified = 4;
|
||||||
if (CollUtil.isNotEmpty(errDtlsCheckData)) {
|
if (CollUtil.isNotEmpty(dtlsCheckData)) {
|
||||||
List<ErrDtlsCheckDataVO> dtlsCheckData = errDtlsCheckData.stream().filter(x -> x.getValueTypeCode().equals(s.split("\\$")[1])).collect(Collectors.toList());
|
result.setAdType(dtlsCheckData.get(0).getValueType());
|
||||||
if (CollUtil.isNotEmpty(dtlsCheckData)) {
|
isQualified = dtlsCheckData.get(0).getIsQualified();
|
||||||
result.setAdType(dtlsCheckData.get(0).getValueType());
|
if (CollUtil.isNotEmpty(dtlsCheckData.get(0).getErrSysDtls())) {
|
||||||
isQualified = dtlsCheckData.get(0).getIsQualified();
|
pqErrSysDtls = dtlsCheckData.get(0).getErrSysDtls();
|
||||||
if (CollUtil.isNotEmpty(dtlsCheckData.get(0).getErrSysDtls())) {
|
|
||||||
pqErrSysDtls = dtlsCheckData.get(0).getErrSysDtls();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (map.containsKey(TYPE_T)) {
|
}
|
||||||
List<ErrDtlsCheckDataVO> checkDataT = dtlsCheckData.stream().filter(x -> TYPE_T.equals(x.getPhase())).collect(Collectors.toList());
|
result.setResultFlag(isQualified);
|
||||||
if (CollUtil.isNotEmpty(checkDataT)) {
|
if (map.containsKey(TYPE_T)) {
|
||||||
DetectionData t = rangeComparisonList(map.get(TYPE_T), isQualified, pqErrSysDtls, fData, checkDataT.get(0).getValue(), dataRule, scale);
|
List<ErrDtlsCheckDataVO> checkDataT = dtlsCheckData.stream().filter(x -> TYPE_T.equals(x.getPhase())).collect(Collectors.toList());
|
||||||
result.setTValue(JSON.toJSONString(t));
|
if (CollUtil.isNotEmpty(checkDataT)) {
|
||||||
result.setResultFlag(t.getIsData());
|
DetectionData t = rangeComparisonList(map.get(TYPE_T), isQualified, pqErrSysDtls, fData, checkDataT.get(0).getValue(), dataRule, scale);
|
||||||
}
|
result.setTValue(JSON.toJSONString(t));
|
||||||
} else {
|
result.setResultFlag(t.getIsData());
|
||||||
List<DetectionData> resultFlag = new ArrayList<>();
|
}
|
||||||
Map<String, BiConsumer<SimAndDigNonHarmonicResult, DetectionData>> setters = new HashMap<>();
|
} else {
|
||||||
setters.put(TYPE_A, (r, d) -> r.setAValue(JSON.toJSONString(d)));
|
List<DetectionData> resultFlag = new ArrayList<>();
|
||||||
setters.put(TYPE_B, (r, d) -> r.setBValue(JSON.toJSONString(d)));
|
Map<String, BiConsumer<SimAndDigNonHarmonicResult, DetectionData>> setters = new HashMap<>();
|
||||||
setters.put(TYPE_C, (r, d) -> r.setCValue(JSON.toJSONString(d)));
|
setters.put(TYPE_A, (r, d) -> r.setAValue(JSON.toJSONString(d)));
|
||||||
|
setters.put(TYPE_B, (r, d) -> r.setBValue(JSON.toJSONString(d)));
|
||||||
|
setters.put(TYPE_C, (r, d) -> r.setCValue(JSON.toJSONString(d)));
|
||||||
|
|
||||||
List<String> phases = Arrays.asList(TYPE_A, TYPE_B, TYPE_C);
|
List<String> phases = Arrays.asList(TYPE_A, TYPE_B, TYPE_C);
|
||||||
for (String phase : phases) {
|
for (String phase : phases) {
|
||||||
List<ErrDtlsCheckDataVO> checkData = dtlsCheckData.stream()
|
List<ErrDtlsCheckDataVO> checkData = dtlsCheckData.stream()
|
||||||
.filter(x -> phase.equals(x.getPhase()))
|
.filter(x -> phase.equals(x.getPhase()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
if (CollUtil.isNotEmpty(checkData)) {
|
if (CollUtil.isNotEmpty(checkData)) {
|
||||||
List<Double> phaseValue = map.get(phase);
|
List<Double> phaseValue = map.get(phase);
|
||||||
// 注意:如果map中不存在该phase的键,phaseValue可能为null,需确保map包含该键
|
// 注意:如果map中不存在该phase的键,phaseValue可能为null,需确保map包含该键
|
||||||
DetectionData detectionData = rangeComparisonList(phaseValue, isQualified, pqErrSysDtls, fData, checkData.get(0).getValue(), dataRule, scale);
|
DetectionData detectionData = rangeComparisonList(phaseValue, isQualified, pqErrSysDtls, fData, checkData.get(0).getValue(), dataRule, scale);
|
||||||
resultFlag.add(detectionData);
|
resultFlag.add(detectionData);
|
||||||
BiConsumer<SimAndDigNonHarmonicResult, DetectionData> setter = setters.get(phase);
|
BiConsumer<SimAndDigNonHarmonicResult, DetectionData> setter = setters.get(phase);
|
||||||
if (setter != null) {
|
if (setter != null) {
|
||||||
setter.accept(result, detectionData);
|
setter.accept(result, detectionData);
|
||||||
} else {
|
} else {
|
||||||
// 处理未定义的setter的情况
|
// 处理未定义的setter的情况
|
||||||
throw new IllegalArgumentException("Setter not defined for phase: " + phase);
|
throw new IllegalArgumentException("Setter not defined for phase: " + phase);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result.setResultFlag(setResultFlag(resultFlag));
|
|
||||||
}
|
}
|
||||||
info.add(result);
|
result.setResultFlag(setResultFlag(resultFlag));
|
||||||
}
|
}
|
||||||
|
info.add(result);
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(info)) {
|
if (CollUtil.isNotEmpty(info)) {
|
||||||
detectionDataDealService.acceptNonHarmonicResult(info, code);
|
detectionDataDealService.acceptNonHarmonicResult(info, code);
|
||||||
@@ -607,74 +593,110 @@ public class DetectionServiceImpl {
|
|||||||
* @param dataRule 数据处理原则
|
* @param dataRule 数据处理原则
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public SimAndDigNonHarmonicResult isUnBalanceOrFlickerQualified(List<DevData> dev,
|
public Integer isUnBalanceOrFlickerQualified(List<DevData> dev,
|
||||||
Map<String, String> devIdMapComm,
|
Map<String, String> devIdMapComm,
|
||||||
List<ErrDtlsCheckDataVO> errDtlsCheckData,
|
List<ErrDtlsCheckDataVO> errDtlsCheckData,
|
||||||
String type,
|
String type,
|
||||||
SourceIssue sourceIssue,
|
SourceIssue sourceIssue,
|
||||||
DictDataEnum dataRule,
|
DictDataEnum dataRule,
|
||||||
String code, Integer scale) {
|
String code, Integer scale) {
|
||||||
|
List<SimAndDigNonHarmonicResult> info = new ArrayList<>();
|
||||||
List<PqScriptCheckData> checkData = pqScriptCheckDataService.list(new MPJLambdaWrapper<PqScriptCheckData>()
|
List<PqScriptCheckData> checkData = pqScriptCheckDataService.list(new MPJLambdaWrapper<PqScriptCheckData>()
|
||||||
.eq(PqScriptCheckData::getScriptIndex, sourceIssue.getIndex())
|
.eq(PqScriptCheckData::getScriptIndex, sourceIssue.getIndex())
|
||||||
.eq(PqScriptCheckData::getScriptId, sourceIssue.getScriptId())
|
.eq(PqScriptCheckData::getScriptId, sourceIssue.getScriptId())
|
||||||
);
|
);
|
||||||
Map<String, List<Double>> map = devListMap(dev, dataRule, code);
|
List<String> devValueTypeList = sourceIssue.getDevValueTypeList();
|
||||||
if (CollUtil.isNotEmpty(map)) {
|
for (String s : devValueTypeList) {
|
||||||
Double fData = 1.0;
|
String[] splitArr = s.split("\\$");
|
||||||
if (U.equals(type)) {
|
Map<String, List<Double>> map = devListMap(dev, dataRule, splitArr[1]);
|
||||||
fData = sourceIssue.getFUn();
|
if (CollUtil.isNotEmpty(map)) {
|
||||||
}
|
List<ErrDtlsCheckDataVO> dtlsCheckData = null;
|
||||||
if (I.equals(type)) {
|
if (CollUtil.isNotEmpty(errDtlsCheckData)) {
|
||||||
fData = sourceIssue.getFIn();
|
dtlsCheckData = errDtlsCheckData.stream().filter(x -> x.getValueTypeCode().equals(s.split("\\$")[1])).collect(Collectors.toList());
|
||||||
}
|
|
||||||
SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult();
|
|
||||||
String[] split = dev.get(0).getId().split("_");
|
|
||||||
String devID = devIdMapComm.get(split[0]);
|
|
||||||
result.setDevMonitorId(devID + "_" + split[1]);
|
|
||||||
result.setScriptId(sourceIssue.getScriptId());
|
|
||||||
result.setSort(sourceIssue.getIndex());
|
|
||||||
List<PqErrSysDtls> pqErrSysDtls = new ArrayList<>();
|
|
||||||
Integer isQualified = 4;
|
|
||||||
if (CollUtil.isNotEmpty(errDtlsCheckData)) {
|
|
||||||
result.setAdType(errDtlsCheckData.get(0).getValueType());
|
|
||||||
isQualified = errDtlsCheckData.get(0).getIsQualified();
|
|
||||||
if (CollUtil.isNotEmpty(errDtlsCheckData.get(0).getErrSysDtls())) {
|
|
||||||
pqErrSysDtls = errDtlsCheckData.get(0).getErrSysDtls();
|
|
||||||
}
|
}
|
||||||
|
Double fData = 1.0;
|
||||||
|
if (U.equals(type)) {
|
||||||
|
fData = sourceIssue.getFUn();
|
||||||
|
}
|
||||||
|
if (I.equals(type)) {
|
||||||
|
fData = sourceIssue.getFIn();
|
||||||
|
}
|
||||||
|
SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult();
|
||||||
|
String[] split = dev.get(0).getId().split("_");
|
||||||
|
String devID = devIdMapComm.get(split[0]);
|
||||||
|
result.setDevMonitorId(devID + "_" + split[1]);
|
||||||
|
result.setScriptId(sourceIssue.getScriptId());
|
||||||
|
result.setSort(sourceIssue.getIndex());
|
||||||
|
result.setDataType(sourceIssue.getDataType());
|
||||||
|
List<PqErrSysDtls> pqErrSysDtls = new ArrayList<>();
|
||||||
|
Integer isQualified = 4;
|
||||||
|
if (CollUtil.isNotEmpty(dtlsCheckData)) {
|
||||||
|
result.setAdType(dtlsCheckData.get(0).getValueType());
|
||||||
|
isQualified = dtlsCheckData.get(0).getIsQualified();
|
||||||
|
if (CollUtil.isNotEmpty(dtlsCheckData.get(0).getErrSysDtls())) {
|
||||||
|
pqErrSysDtls = dtlsCheckData.get(0).getErrSysDtls();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result.setResultFlag(isQualified);
|
||||||
|
// 闪变
|
||||||
|
if (DetectionCodeEnum.PST.getCode().equals(splitArr[1]) || DetectionCodeEnum.SeqV.getCode().equals(splitArr[1]) || DetectionCodeEnum.SeqA.getCode().equals(splitArr[1])) {
|
||||||
|
|
||||||
|
//取出源所对应的相别信息
|
||||||
|
List<PqScriptCheckData> channelTypeAList = checkData.stream()
|
||||||
|
.filter(x -> TYPE_A.equals(x.getPhase()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
Double channelDataA = channelTypeAList.get(0).getValue();
|
||||||
|
if (DetectionCodeEnum.SeqV.getCode().equals(splitArr[1]) || DetectionCodeEnum.SeqA.getCode().equals(splitArr[1])) {
|
||||||
|
channelDataA = BigDecimal.valueOf(channelDataA / 100 * fData)
|
||||||
|
.setScale(scale, RoundingMode.HALF_UP)
|
||||||
|
.doubleValue();
|
||||||
|
}
|
||||||
|
DetectionData a = rangeComparisonList(map.get(TYPE_A), isQualified, pqErrSysDtls, fData, channelDataA, dataRule, scale);
|
||||||
|
result.setAValue(JSON.toJSONString(a));
|
||||||
|
|
||||||
|
List<PqScriptCheckData> channelTypeBList = checkData.stream()
|
||||||
|
.filter(x -> TYPE_B.equals(x.getPhase()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
Double channelDataB = channelTypeBList.get(0).getValue();
|
||||||
|
if (DetectionCodeEnum.SeqV.getCode().equals(splitArr[1]) || DetectionCodeEnum.SeqA.getCode().equals(splitArr[1])) {
|
||||||
|
channelDataB = BigDecimal.valueOf(channelDataB / 100 * fData)
|
||||||
|
.setScale(scale, RoundingMode.HALF_UP)
|
||||||
|
.doubleValue();
|
||||||
|
}
|
||||||
|
DetectionData b = rangeComparisonList(map.get(TYPE_B), isQualified, pqErrSysDtls, fData, channelDataB, dataRule, scale);
|
||||||
|
result.setBValue(JSON.toJSONString(b));
|
||||||
|
|
||||||
|
List<PqScriptCheckData> channelTypeCList = checkData.stream()
|
||||||
|
.filter(x -> TYPE_C.equals(x.getPhase()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
Double channelDataC = channelTypeCList.get(0).getValue();
|
||||||
|
if (DetectionCodeEnum.SeqV.getCode().equals(splitArr[1]) || DetectionCodeEnum.SeqA.getCode().equals(splitArr[1])) {
|
||||||
|
channelDataC = BigDecimal.valueOf(channelDataC / 100 * fData)
|
||||||
|
.setScale(scale, RoundingMode.HALF_UP)
|
||||||
|
.doubleValue();
|
||||||
|
}
|
||||||
|
DetectionData c = rangeComparisonList(map.get(TYPE_C), isQualified, pqErrSysDtls, fData, channelDataC, dataRule, scale);
|
||||||
|
result.setCValue(JSON.toJSONString(c));
|
||||||
|
|
||||||
|
result.setResultFlag(setResultFlag(Arrays.asList(a, b, c)));
|
||||||
|
} else {
|
||||||
|
// 三项不平衡
|
||||||
|
List<PqScriptCheckData> channelTypeBList = checkData.stream()
|
||||||
|
.filter(x -> TYPE_T.equals(x.getPhase()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
DetectionData t = rangeComparisonList(map.get(TYPE_B), isQualified, pqErrSysDtls, fData, channelTypeBList.get(0).getValue(), dataRule, scale);
|
||||||
|
result.setTValue(JSON.toJSONString(t));
|
||||||
|
result.setResultFlag(setResultFlag(Arrays.asList(t)));
|
||||||
|
}
|
||||||
|
info.add(result);
|
||||||
}
|
}
|
||||||
result.setDataType(sourceIssue.getDataType());
|
|
||||||
if (StrUtil.isBlank(type)) {
|
|
||||||
//取出源所对应的相别信息
|
|
||||||
List<PqScriptCheckData> channelTypeAList = checkData.stream()
|
|
||||||
.filter(x -> TYPE_A.equals(x.getPhase()))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
DetectionData a = rangeComparisonList(map.get(TYPE_A), isQualified, pqErrSysDtls, fData, channelTypeAList.get(0).getValue(), dataRule, scale);
|
|
||||||
result.setAValue(JSON.toJSONString(a));
|
|
||||||
|
|
||||||
List<PqScriptCheckData> channelTypeBList = checkData.stream()
|
|
||||||
.filter(x -> TYPE_B.equals(x.getPhase()))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
DetectionData b = rangeComparisonList(map.get(TYPE_B), isQualified, pqErrSysDtls, fData, channelTypeBList.get(0).getValue(), dataRule, scale);
|
|
||||||
result.setBValue(JSON.toJSONString(b));
|
|
||||||
|
|
||||||
List<PqScriptCheckData> channelTypeCList = checkData.stream()
|
|
||||||
.filter(x -> TYPE_C.equals(x.getPhase()))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
DetectionData c = rangeComparisonList(map.get(TYPE_C), isQualified, pqErrSysDtls, fData, channelTypeCList.get(0).getValue(), dataRule, scale);
|
|
||||||
result.setCValue(JSON.toJSONString(c));
|
|
||||||
|
|
||||||
result.setResultFlag(setResultFlag(Arrays.asList(a, b, c)));
|
|
||||||
} else {
|
|
||||||
List<PqScriptCheckData> channelTypeBList = checkData.stream()
|
|
||||||
.filter(x -> TYPE_T.equals(x.getPhase()))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
DetectionData t = rangeComparisonList(map.get(TYPE_B), isQualified, pqErrSysDtls, fData, channelTypeBList.get(0).getValue(), dataRule, scale);
|
|
||||||
result.setTValue(JSON.toJSONString(t));
|
|
||||||
result.setResultFlag(setResultFlag(Arrays.asList(t)));
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
return null;
|
if (CollUtil.isNotEmpty(info)) {
|
||||||
|
detectionDataDealService.acceptNonHarmonicResult(info, code);
|
||||||
|
List<Integer> resultFlag = info.stream().map(SimAndDigNonHarmonicResult::getResultFlag).distinct().collect(Collectors.toList());
|
||||||
|
return StorageUtil.getInteger(resultFlag);
|
||||||
|
}
|
||||||
|
return 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -593,10 +593,18 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
|
|||||||
channelU = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
|
channelU = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
|
||||||
unbanCheck(info, channelListDTO, channelU, checkArchive);
|
unbanCheck(info, channelListDTO, channelU, checkArchive);
|
||||||
break;
|
break;
|
||||||
|
case SeqV:
|
||||||
|
channelU = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
|
||||||
|
unbanSeqCheck(info, channelListDTO, channelU, checkArchive);
|
||||||
|
break;
|
||||||
case I_UNBAN:
|
case I_UNBAN:
|
||||||
channelI = channelList.stream().filter(x -> x.getChannelType().contains("I")).collect(Collectors.toList());
|
channelI = channelList.stream().filter(x -> x.getChannelType().contains("I")).collect(Collectors.toList());
|
||||||
unbanCheck(info, channelListDTO, channelI, checkArchive);
|
unbanCheck(info, channelListDTO, channelI, checkArchive);
|
||||||
break;
|
break;
|
||||||
|
case SeqA:
|
||||||
|
channelI = channelList.stream().filter(x -> x.getChannelType().contains("I")).collect(Collectors.toList());
|
||||||
|
unbanSeqCheck(info, channelListDTO, channelI, checkArchive);
|
||||||
|
break;
|
||||||
case PST:
|
case PST:
|
||||||
if (CollUtil.isNotEmpty(channelList)) {
|
if (CollUtil.isNotEmpty(channelList)) {
|
||||||
channelU = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
|
channelU = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
|
||||||
@@ -826,6 +834,82 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void unbanSeqCheck(List<PqScriptDtlsParam.CheckData> info,
|
||||||
|
PqScriptDtlsParam.CheckData channelListDTO,
|
||||||
|
List<PqScriptDtlsParam.ChannelListDTO> list,
|
||||||
|
List<PqScriptCheckData> checkArchive
|
||||||
|
) {
|
||||||
|
PqScriptDtlsParam.CheckData checkData;
|
||||||
|
if (CollUtil.isNotEmpty(list)) {
|
||||||
|
List<PqScriptDtlsParam.ChannelListDTO> channelA = list.stream().filter(x -> x.getChannelType().contains("a")).collect(Collectors.toList());
|
||||||
|
List<PqScriptDtlsParam.ChannelListDTO> channelB = list.stream().filter(x -> x.getChannelType().contains("b")).collect(Collectors.toList());
|
||||||
|
List<PqScriptDtlsParam.ChannelListDTO> channelC = list.stream().filter(x -> x.getChannelType().contains("c")).collect(Collectors.toList());
|
||||||
|
if (CollUtil.isEmpty(checkArchive)) {
|
||||||
|
if (CollUtil.isNotEmpty(channelA) && CollUtil.isNotEmpty(channelB) && CollUtil.isNotEmpty(channelC)) {
|
||||||
|
PqScriptDtlsParam.ChannelListDTO a = channelA.get(0);
|
||||||
|
PqScriptDtlsParam.ChannelListDTO b = channelB.get(0);
|
||||||
|
PqScriptDtlsParam.ChannelListDTO c = channelC.get(0);
|
||||||
|
|
||||||
|
BigDecimal vaMagnitude = new BigDecimal(a.getFAmp());
|
||||||
|
BigDecimal vaAngle = new BigDecimal(a.getFPhase());
|
||||||
|
BigDecimal vbMagnitude = new BigDecimal(b.getFAmp());
|
||||||
|
BigDecimal vbAngle = new BigDecimal(b.getFPhase());
|
||||||
|
BigDecimal vcMagnitude = new BigDecimal(c.getFAmp());
|
||||||
|
BigDecimal vcAngle = new BigDecimal(c.getFPhase());
|
||||||
|
|
||||||
|
// 将幅值和角度转换为复数
|
||||||
|
ThreePhaseUnbalance.Complex va = ThreePhaseUnbalance.fromPolar(vaMagnitude, vaAngle);
|
||||||
|
ThreePhaseUnbalance.Complex vb = ThreePhaseUnbalance.fromPolar(vbMagnitude, vbAngle);
|
||||||
|
ThreePhaseUnbalance.Complex vc = ThreePhaseUnbalance.fromPolar(vcMagnitude, vcAngle);
|
||||||
|
|
||||||
|
// 计算对称分量
|
||||||
|
ThreePhaseUnbalance.Complex[] symmetricalComponents = ThreePhaseUnbalance.calculateSymmetricalComponents(va, vb, vc);
|
||||||
|
ThreePhaseUnbalance.Complex v0 = symmetricalComponents[0]; // 零序分量
|
||||||
|
ThreePhaseUnbalance.Complex v1 = symmetricalComponents[1]; // 正序分量
|
||||||
|
ThreePhaseUnbalance.Complex v2 = symmetricalComponents[2]; // 负序分量
|
||||||
|
|
||||||
|
checkData = new PqScriptDtlsParam.CheckData();
|
||||||
|
checkData.setErrorFlag(channelListDTO.getErrorFlag());
|
||||||
|
checkData.setEnable(channelListDTO.getEnable());
|
||||||
|
checkData.setPhase("A");
|
||||||
|
checkData.setValueType(channelListDTO.getValueType());
|
||||||
|
checkData.setPid(channelListDTO.getPid());
|
||||||
|
checkData.setValue(v1.magnitude().doubleValue());
|
||||||
|
info.add(checkData);
|
||||||
|
|
||||||
|
checkData = new PqScriptDtlsParam.CheckData();
|
||||||
|
checkData.setErrorFlag(channelListDTO.getErrorFlag());
|
||||||
|
checkData.setEnable(channelListDTO.getEnable());
|
||||||
|
checkData.setPhase("B");
|
||||||
|
checkData.setValueType(channelListDTO.getValueType());
|
||||||
|
checkData.setPid(channelListDTO.getPid());
|
||||||
|
checkData.setValue(v2.magnitude().doubleValue());
|
||||||
|
info.add(checkData);
|
||||||
|
|
||||||
|
checkData = new PqScriptDtlsParam.CheckData();
|
||||||
|
checkData.setErrorFlag(channelListDTO.getErrorFlag());
|
||||||
|
checkData.setEnable(channelListDTO.getEnable());
|
||||||
|
checkData.setPhase("C");
|
||||||
|
checkData.setValueType(channelListDTO.getValueType());
|
||||||
|
checkData.setPid(channelListDTO.getPid());
|
||||||
|
checkData.setValue(v0.magnitude().doubleValue());
|
||||||
|
info.add(checkData);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (PqScriptCheckData checkArciveData : checkArchive) {
|
||||||
|
checkData = new PqScriptDtlsParam.CheckData();
|
||||||
|
checkData.setErrorFlag(checkArciveData.getErrorFlag());
|
||||||
|
checkData.setEnable(checkArciveData.getEnable());
|
||||||
|
checkData.setPhase(checkArciveData.getPhase());
|
||||||
|
checkData.setValueType(checkArciveData.getValueType());
|
||||||
|
checkData.setPid(channelListDTO.getPid());
|
||||||
|
checkData.setValue(checkArciveData.getValue());
|
||||||
|
info.add(checkData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void rmsCheck(List<PqScriptDtlsParam.CheckData> info,
|
private void rmsCheck(List<PqScriptDtlsParam.CheckData> info,
|
||||||
PqScriptDtlsParam.CheckData channelListDTO,
|
PqScriptDtlsParam.CheckData channelListDTO,
|
||||||
List<PqScriptDtlsParam.ChannelListDTO> list,
|
List<PqScriptDtlsParam.ChannelListDTO> list,
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import java.math.RoundingMode;
|
|||||||
public class ThreePhaseUnbalance {
|
public class ThreePhaseUnbalance {
|
||||||
|
|
||||||
// 定义复数类
|
// 定义复数类
|
||||||
static class Complex {
|
public static class Complex {
|
||||||
BigDecimal real; // 复数的实部
|
BigDecimal real; // 复数的实部
|
||||||
BigDecimal imag; // 复数的虚部
|
BigDecimal imag; // 复数的虚部
|
||||||
|
|
||||||
@@ -108,10 +108,10 @@ public class ThreePhaseUnbalance {
|
|||||||
BigDecimal vaMagnitude = new BigDecimal(Ua0);
|
BigDecimal vaMagnitude = new BigDecimal(Ua0);
|
||||||
BigDecimal vaAngle = new BigDecimal(thetaA);
|
BigDecimal vaAngle = new BigDecimal(thetaA);
|
||||||
|
|
||||||
BigDecimal vbMagnitude =new BigDecimal(Ub0);
|
BigDecimal vbMagnitude = new BigDecimal(Ub0);
|
||||||
BigDecimal vbAngle = new BigDecimal(thetaB);
|
BigDecimal vbAngle = new BigDecimal(thetaB);
|
||||||
|
|
||||||
BigDecimal vcMagnitude =new BigDecimal(Uc0);
|
BigDecimal vcMagnitude = new BigDecimal(Uc0);
|
||||||
BigDecimal vcAngle = new BigDecimal(thetaC);
|
BigDecimal vcAngle = new BigDecimal(thetaC);
|
||||||
|
|
||||||
// 将幅值和角度转换为复数
|
// 将幅值和角度转换为复数
|
||||||
@@ -146,12 +146,12 @@ public class ThreePhaseUnbalance {
|
|||||||
BigDecimal vaAngle = new BigDecimal(0);
|
BigDecimal vaAngle = new BigDecimal(0);
|
||||||
|
|
||||||
System.out.println("请输入B相电压的幅值(单位:V):");
|
System.out.println("请输入B相电压的幅值(单位:V):");
|
||||||
BigDecimal vbMagnitude =new BigDecimal(57.74*0.9);
|
BigDecimal vbMagnitude = new BigDecimal(57.74 * 0.9);
|
||||||
System.out.println("请输入B相电压的相位角(单位:度):");
|
System.out.println("请输入B相电压的相位角(单位:度):");
|
||||||
BigDecimal vbAngle = new BigDecimal(-122);
|
BigDecimal vbAngle = new BigDecimal(-122);
|
||||||
|
|
||||||
System.out.println("请输入C相电压的幅值(单位:V):");
|
System.out.println("请输入C相电压的幅值(单位:V):");
|
||||||
BigDecimal vcMagnitude =new BigDecimal(57.74);
|
BigDecimal vcMagnitude = new BigDecimal(57.74);
|
||||||
System.out.println("请输入C相电压的相位角(单位:度):");
|
System.out.println("请输入C相电压的相位角(单位:度):");
|
||||||
BigDecimal vcAngle = new BigDecimal(118);
|
BigDecimal vcAngle = new BigDecimal(118);
|
||||||
|
|
||||||
|
|||||||
@@ -73,6 +73,12 @@ public class StorageUtil {
|
|||||||
case "IMBA":
|
case "IMBA":
|
||||||
unit = "%";
|
unit = "%";
|
||||||
break;
|
break;
|
||||||
|
case "SeqV":
|
||||||
|
unit = "V";
|
||||||
|
break;
|
||||||
|
case "SeqA":
|
||||||
|
unit = "A";
|
||||||
|
break;
|
||||||
/**
|
/**
|
||||||
* 谐波有功功率
|
* 谐波有功功率
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user