平均值时移除误差较大的几组数据

This commit is contained in:
caozehui
2026-01-21 14:01:07 +08:00
parent 6288aa565e
commit 8c3eba9224
3 changed files with 117 additions and 62 deletions

View File

@@ -42,6 +42,7 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
@@ -87,6 +88,9 @@ public class DetectionServiceImpl {
private static final Integer INHARMONIC_FLAG = 1;
private static final Integer HARMONIC_FLAG = 2;
@Value("${error.removeCount:14}")
private Integer removeErrorValueCount;
@Data
@AllArgsConstructor
public static class VAndIResult {
@@ -1612,6 +1616,23 @@ public class DetectionServiceImpl {
if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(testItemCodeList)) {
devDataList = devDataList.stream().sorted(Comparator.comparing(DevData::getTime)).collect(Collectors.toList());
standardDevDataList = standardDevDataList.stream().sorted(Comparator.comparing(DevData::getTime)).collect(Collectors.toList());
List<Double> freqStdDevData = standardDevDataList.stream().flatMap(standardDevData -> standardDevData.getSqlData().stream())
.filter(sqlDataDTO -> DetectionCodeEnum.FREQ.getCode().equals(sqlDataDTO.getDesc()))
.map(sqlDataDTO -> sqlDataDTO.getList().getT()).collect(Collectors.toList());
Double maxFreq = CollUtil.isNotEmpty(freqStdDevData) ? CollUtil.max(freqStdDevData) : null;
Double minFreq = CollUtil.isNotEmpty(freqStdDevData) ? CollUtil.min(freqStdDevData) : null;
boolean isRemoveMaxElement = false;
if (maxFreq != null && minFreq != null) {
isRemoveMaxElement = DictDataEnum.AVG_VALUE.equals(dataRule);
double freqErrorValue = maxFreq - minFreq;
if (NumberUtil.isGreaterOrEqual(BigDecimal.valueOf(freqErrorValue), BigDecimal.valueOf(0.02))) {
isRemoveMaxElement = isRemoveMaxElement && true;
}
}
// 处理谐波数据
SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
String[] split1 = devDataList.get(0).getId().split("_");
@@ -1684,20 +1705,20 @@ public class DetectionServiceImpl {
break;
case V2_50:
case PV2_50:
resultMap.put(PowerIndexEnum.HV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum));
resultMap.put(PowerIndexEnum.HV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum, isRemoveMaxElement));
break;
case I2_50:
resultMap.put(PowerIndexEnum.HI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum));
resultMap.put(PowerIndexEnum.HI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum, isRemoveMaxElement));
break;
case P2_50:
resultMap.put(PowerIndexEnum.HP.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, HP, fUn * fIn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum));
resultMap.put(PowerIndexEnum.HP.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, HP, fUn * fIn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum, isRemoveMaxElement));
break;
case SV_1_49:
case PSV_1_49:
resultMap.put(PowerIndexEnum.HSV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, INHARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum));
resultMap.put(PowerIndexEnum.HSV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, INHARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum, isRemoveMaxElement));
break;
case SI_1_49:
resultMap.put(PowerIndexEnum.HSI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, INHARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum));
resultMap.put(PowerIndexEnum.HSI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, INHARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum, isRemoveMaxElement));
break;
case PST:
resultMap.put(PowerIndexEnum.F.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn, DetectionCodeEnum.PST.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum, DataSourceEnum.MINUTE_STATISTICS_AVG));
@@ -2117,7 +2138,8 @@ public class DetectionServiceImpl {
String code,
Integer scale,
Integer waveNum,
DataSourceEnum dataSourceEnum) {
DataSourceEnum dataSourceEnum,
boolean isRemoveMaxElement) {
List<ContrastHarmonicResult> info = new ArrayList<>();
if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(errSysDtls)) {
String fundCode = "";
@@ -2152,7 +2174,7 @@ public class DetectionServiceImpl {
harmCode = DetectionCodeEnum.P2_50.getCode();
}
Map<String, List<Map<Double, List<Double>>>> devMap = devHarmListMap(devDataList, standardDevDataList, fundCode, harmCode, harmonicFlag, dataRule);
Map<String, List<Map<Double, List<Double>>>> devMap = devHarmListMap(devDataList, standardDevDataList, fundCode, harmCode, harmonicFlag, dataRule, isRemoveMaxElement);
if (ObjectUtil.isNull(devMap)) {
return 4;
}
@@ -2273,6 +2295,58 @@ public class DetectionServiceImpl {
List<Double> tDev = BeanUtil.copyToList(phaseValueList.get(TYPE_T).get(0), Double.class);
List<Double> tStandardDev = BeanUtil.copyToList(phaseValueList.get(TYPE_T).get(1), Double.class);
// if (isRemoveMaxElement) {
// List<Double> aErrorValueList = new ArrayList<>();
// List<Double> bErrorValueList = new ArrayList<>();
// List<Double> cErrorValueList = new ArrayList<>();
// List<Double> tErrorValueList = new ArrayList<>();
// for (int i = 0; i < aStandardDev.size(); i++) {
// aErrorValueList.add(Math.abs(aStandardDev.get(i) - aDev.get(i)));
// bErrorValueList.add(Math.abs(bStandardDev.get(i) - bDev.get(i)));
// cErrorValueList.add(Math.abs(cStandardDev.get(i) - cDev.get(i)));
// }
// for (int i = 0; i < tStandardDev.size(); i++) {
// tErrorValueList.add(Math.abs(tStandardDev.get(i) - tDev.get(i)));
// }
// List<Integer> aErrorValueIdxs = DetectionUtil.sort(aErrorValueList, false);
// List<Integer> bErrorValueIdxs = DetectionUtil.sort(bErrorValueList, false);
// List<Integer> cErrorValueIdxs = DetectionUtil.sort(cErrorValueList, false);
// List<Integer> tErrorValueIdxs = DetectionUtil.sort(tErrorValueList, false);
//
// int removeCount = aErrorValueIdxs.size() > 2 ? 2 : aErrorValueIdxs.size();
// List<Double> newArray = DetectionUtil.getNewArray(aStandardDev, aErrorValueIdxs.subList(removeCount, aErrorValueIdxs.size()));
// aStandardDev.clear();
// aStandardDev.addAll(newArray);
// newArray = DetectionUtil.getNewArray(aDev, aErrorValueIdxs.subList(removeCount, aErrorValueIdxs.size()));
// aDev.clear();
// aDev.addAll(newArray);
//
//
// newArray = DetectionUtil.getNewArray(bStandardDev, bErrorValueIdxs.subList(removeCount, bErrorValueIdxs.size()));
// bStandardDev.clear();
// bStandardDev.addAll(newArray);
// newArray = DetectionUtil.getNewArray(bDev, bErrorValueIdxs.subList(removeCount, bErrorValueIdxs.size()));
// bDev.clear();
// bDev.addAll(newArray);
//
//
// newArray = DetectionUtil.getNewArray(cStandardDev, cErrorValueIdxs.subList(removeCount, cErrorValueIdxs.size()));
// cStandardDev.clear();
// cStandardDev.addAll(newArray);
// newArray = DetectionUtil.getNewArray(cDev, cErrorValueIdxs.subList(removeCount, cErrorValueIdxs.size()));
// cDev.clear();
// cDev.addAll(newArray);
//
// int tRemoveCount = tErrorValueIdxs.size() > 10 ? 10 : tErrorValueIdxs.size();
// newArray = DetectionUtil.getNewArray(tStandardDev, tErrorValueIdxs.subList(tRemoveCount, tErrorValueIdxs.size()));
// tStandardDev.clear();
// tStandardDev.addAll(newArray);
// newArray = DetectionUtil.getNewArray(tDev, tErrorValueIdxs.subList(tRemoveCount, tErrorValueIdxs.size()));
// tDev.clear();
// tDev.addAll(newArray);
// }
List<Integer> aIdxs = DetectionUtil.sort(aStandardDev, false);
List<Integer> bIdxs = DetectionUtil.sort(bStandardDev, false);
List<Integer> cIdxs = DetectionUtil.sort(cStandardDev, false);
@@ -2437,8 +2511,7 @@ public class DetectionServiceImpl {
String fundCode,
String harmCode,
Integer harmonicFlag,
DictDataEnum dataRule) {
System.out.println("aaa" + dev.size() + " " + standardDev.size());
DictDataEnum dataRule, boolean isRemoveMaxElement) {
Map<String, List<Map<Double, List<Double>>>> resultMap = new HashMap<>(3);
// key为相别、value{key为谐波次数value为按数据处理原则处理后的数据}
@@ -2463,27 +2536,6 @@ public class DetectionServiceImpl {
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();
// }
// } else {
// // 防止出现有PU1而没有PV2_50、SV_1_49的情况
// if ((DetectionCodeEnum.PV2_50.getCode().equals(harmCode) || DetectionCodeEnum.PSV_1_49.getCode().equals(harmCode)) && 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();
// }
// } else {
// // 防止出现有PU1而没有PV2_50、SV_1_49的情况
// if ((DetectionCodeEnum.PV2_50.getCode().equals(harmCode) || DetectionCodeEnum.PSV_1_49.getCode().equals(harmCode)) && 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;
@@ -2500,23 +2552,6 @@ public class DetectionServiceImpl {
if (CollUtil.isEmpty(devHarmList) || CollUtil.isEmpty(stdDevHarmList)) {
return null;
}
// // 如果角型接法中,不存在线电压谐波电压含有率,则取相电压谐波电压含有率进行计算
// 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);
@@ -2538,8 +2573,25 @@ public class DetectionServiceImpl {
}
}
}
standardDevMap.forEach((typeKey, typeValue) -> {
typeValue.forEach((key, value) -> {
standardDevMap.forEach((phase, harmonicMap) -> {
harmonicMap.forEach((harmonicNum, value) -> {
List<Double> devPhaseHarmData = devMap.get(phase).get(harmonicNum);
if (isRemoveMaxElement) {
List<Double> errorValueList = new ArrayList<>();
for (int i = 0; i < value.size(); i++) {
errorValueList.add(Math.abs(value.get(i) - devPhaseHarmData.get(i)));
}
List<Integer> idxErrorValueList = DetectionUtil.sort(errorValueList, false);
int removeCount = idxErrorValueList.size() > removeErrorValueCount ? removeErrorValueCount : idxErrorValueList.size() / 5;
List<Double> newArray = DetectionUtil.getNewArray(value, idxErrorValueList.subList(removeCount, idxErrorValueList.size()));
value.clear();
value.addAll(newArray);
newArray = DetectionUtil.getNewArray(devPhaseHarmData, idxErrorValueList.subList(removeCount, idxErrorValueList.size()));
devPhaseHarmData.clear();
devPhaseHarmData.addAll(newArray);
}
if (CollUtil.isNotEmpty(value)) {
List<Integer> idx = DetectionUtil.sort(value, false);
switch (dataRule) {
@@ -2547,9 +2599,9 @@ public class DetectionServiceImpl {
if (value.size() > 2) {
value.remove(0);
value.remove(value.size() - 1);
List<Double> newArray = DetectionUtil.getNewArray(devMap.get(typeKey).get(key), idx.subList(1, idx.size() - 1));
devMap.get(typeKey).get(key).clear();
devMap.get(typeKey).get(key).addAll(newArray);
List<Double> newArray = DetectionUtil.getNewArray(devPhaseHarmData, idx.subList(1, idx.size() - 1));
devPhaseHarmData.clear();
devPhaseHarmData.addAll(newArray);
}
break;
case CP95_VALUE:
@@ -2558,18 +2610,18 @@ public class DetectionServiceImpl {
List<Double> newValue = Collections.singletonList(value.get(cp95Idx));
value.clear();
value.addAll(newValue);
Double devCP95Data = devMap.get(typeKey).get(key).get(idx.get(cp95Idx));
devMap.get(typeKey).get(key).clear();
devMap.get(typeKey).get(key).add(devCP95Data);
Double devCP95Data = devPhaseHarmData.get(idx.get(cp95Idx));
devPhaseHarmData.clear();
devPhaseHarmData.add(devCP95Data);
}
break;
case AVG_VALUE:
List<Double> avgDoubles = DetectionUtil.getAvgDoubles(value);
value.clear();
value.addAll(avgDoubles);
List<Double> devAvgData = DetectionUtil.getAvgDoubles(devMap.get(typeKey).get(key));
devMap.get(typeKey).get(key).clear();
devMap.get(typeKey).get(key).addAll(devAvgData);
List<Double> devAvgData = DetectionUtil.getAvgDoubles(devMap.get(phase).get(harmonicNum));
devPhaseHarmData.clear();
devPhaseHarmData.addAll(devAvgData);
break;
}
}

View File

@@ -422,7 +422,7 @@ public class DetectionUtil {
}
return newList;
}
return null;
return Collections.emptyList();
}
/**

View File

@@ -36,9 +36,9 @@ mybatis-plus:
#驼峰命名
map-underscore-to-camel-case: true
#配置sql日志输出
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#关闭日志输出
# log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
global-config:
db-config:
#指定主键生成策略
@@ -122,4 +122,7 @@ power-quality:
# 激活配置
activate:
private-key: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCcUyYhVqczGxblL+o/xZzF/8nf+LjrfUE/dS1aRHM7uMDD0cgCArhjtfneFePrMxt+Z7W8yNBzSarub8qsfhaVNikV7Es7oaeTygfjQXTi2n4AFkir3fM07J08RpWhl5M8f8uWTCuvFUYAw00gq55typqmnbkmJa2VIUy/iQf+cMCP7abz4/jNhUzUR3qA7TV4oMRgTdIEDUp63YF8dOC+JH8XxYrCVeHXV6fLCwmesdMzl0lB2VTEKMfLbXhOmF5g7P9y/16VCcN8UBuZlbyYfn+GAxJOSbeHi5HshOKfoSuD7Jz+3WQZpNavOWjIFExKIU38/CvnJCOP7XBCqpSTAgMBAAECggEAYeWokWRE3TpvwiOZnUpR/aVMdVi75a3ROL5XIpqPV61B+t/bU3cEpl0GF9C5pUeiRi0IoStZb3mI9D1KPW/REKyUWkhabQO1gFYbTnRlkNOn6MILzKX4cwJjDaZeeo4EBPU7N+qHyOOXrU6hdH5FfxhMdV983ajm5eeuupxER1C2kAcIklTeVpTX6EKOgZb5LBp5ssOVm2P42pOauvcRozRcvZmqnErXmukv0H4l3EVNt4rHpTn9riHUC63e8JfiYzVaF6zuNUxv6nHEft0/SRMw11XSTnNfDzcKqgjz6ksFBS/6eQQYKESk+ONC53HUuYHFAknkwsPupDCT2W8FIQKBgQDLHT/xCU3nxGr4vFKBDNaO2D5oK20ECbBO4oDvLWWmQG7f+6TsMy8PgVdMnoL4RfqGlwFAKEpS6KVFHnBVqnNEhcdy9uCI7x7Xx8UnyUtxj1EDTm76uta9Ki9OrlqB6tImDM9+Ya3vGktW37ht4WOx2OsJRhG1dbf6RLwFlH7DWwKBgQDFBxvi5I1BR6hg6Tj7xd2SqOT2Y+BED3xuSYENhWbmMhLJDResaB7mjztbxlYaY2mOE0holWm2uDmVFFhMh4jYXik4hYH8nmDzq9mDpZCZ9pyjYqnAP8THoAa8EbgrUWB8A6BPH4iL3KbMnBfBKY0pIr2xrvnjQjNBAgta7KDRKQKBgCe6oe4wxrdF2TKsC2tIqpMoQxS3Icy/ZGgZr+SYuaBKTCWtoDW/UT40K3JGMxIDBhzbXphBCUCsVt9tM8Xd4EwP6tJW7dZ7B0pnve2pVwNwaAVAiz6p2yUHIle+jN+Koe5lZRSwYIg7WW81tWpwwsJfzqFyvjYDP6hJV4mz4ROvAoGAaRcdnKvjXApomShMqJ4lTPChD3q+SA8qg3jZSOj6tZXHx00gb2kp8jg7pPvpOTIFPy6x1Ha9aCRjMk0ju84fA6lVuzwa1S907wOehUVuF3Eeo1cgy9Y3k3KbpPyeixxgpkUY4JslLdSHc2NemD0dee951qhJyRmqVOZOQDUuoeECgYEAqBw2cAFk3vM97WY06TSldGA8ajVHx3BYRjj+zl62NTQthy8fw3tqxb3c5e8toOmZWKjZvDhg2TRLhsDDQWEYg3LZG87REqVIjgEPcpjNLidjygGX8n3JF2o0O5I/EMvl0s/+LVQONfduOBvhwDqr8QNisbLsyneiAq7umewMolo="
public-key: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnFMmIVanMxsW5S/qP8Wcxf/J3/i4631BP3UtWkRzO7jAw9HIAgK4Y7X53hXj6zMbfme1vMjQc0mq7m/KrH4WlTYpFexLO6Gnk8oH40F04tp+ABZIq93zNOydPEaVoZeTPH/LlkwrrxVGAMNNIKuebcqapp25JiWtlSFMv4kH/nDAj+2m8+P4zYVM1Ed6gO01eKDEYE3SBA1Ket2BfHTgviR/F8WKwlXh11enywsJnrHTM5dJQdlUxCjHy214TpheYOz/cv9elQnDfFAbmZW8mH5/hgMSTkm3h4uR7ITin6Erg+yc/t1kGaTWrzloyBRMSiFN/Pwr5yQjj+1wQqqUkwIDAQAB"
public-key: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnFMmIVanMxsW5S/qP8Wcxf/J3/i4631BP3UtWkRzO7jAw9HIAgK4Y7X53hXj6zMbfme1vMjQc0mq7m/KrH4WlTYpFexLO6Gnk8oH40F04tp+ABZIq93zNOydPEaVoZeTPH/LlkwrrxVGAMNNIKuebcqapp25JiWtlSFMv4kH/nDAj+2m8+P4zYVM1Ed6gO01eKDEYE3SBA1Ket2BfHTgviR/F8WKwlXh11enywsJnrHTM5dJQdlUxCjHy214TpheYOz/cv9elQnDfFAbmZW8mH5/hgMSTkm3h4uR7ITin6Erg+yc/t1kGaTWrzloyBRMSiFN/Pwr5yQjj+1wQqqUkwIDAQAB"
error:
removeCount: 14