Browse Source

fix: 1.meter算法避雷器只有第一个读数加单位,任意值为null返回缺陷;2.switch算法新增描述内容;3.纠偏算法异常和缺陷状态不在缺陷详情内展示;4.缺陷详情若imageNormalUrlPath为空则赋值为imgAnalyse兜底;5.修复联合任务判断的逻辑;6.infrared算法阀厅T100初筛时也需要判断阈值

master
yinhuaiwei 1 month ago
parent
commit
fd3b61318c
7 changed files with 57 additions and 83 deletions
  1. +1
    -0
      inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/constant/AlgConstants.java
  2. +3
    -2
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/controller/ResultAnalysisController.java
  3. +49
    -29
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/utils/ResultAnalysisUtils.java
  4. +1
    -1
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java
  5. +0
    -11
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/controller/PatrolTaskController.java
  6. +2
    -38
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolData.java
  7. +1
    -2
      inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/controller/PatrolTaskStatusController.java

+ 1
- 0
inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/constant/AlgConstants.java View File

@ -13,6 +13,7 @@ public class AlgConstants {
public static final String INFRA_YU3 = "infra_yu3";
public static final String INFRA_CAMERA = "infra_camera";
public static final String INFRA_CAMERA_REVERSE = "infra_camera_reverse";
// 红外算法如绍兴T100在初筛阶段由设备直接将温度和图片传过来我们直接展示
public static final String INFRARED = "infrared";
public static final String INFRARED2 = "infrared2";
public static final String XB = "xb";


+ 3
- 2
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/controller/ResultAnalysisController.java View File

@ -782,10 +782,11 @@ public class ResultAnalysisController extends BaseController {
List<PatrolData> allList = patrolResultService.selectPatrolDataResultByTaskCodeV2(resultAnalysis);
Map<String, String> imageNormalMap = allList.parallelStream()
.filter(patrolData -> StringUtils.isNotEmpty(patrolData.getImageNormalUrlPath()))
.collect(Collectors.toMap(
patrolData -> patrolData.getObjectId() + "_" + patrolData.getAlgType(),
PatrolData::getImageNormalUrlPath,
patrolData -> StringUtils.isNotEmpty(patrolData.getImageNormalUrlPath())
?patrolData.getImageNormalUrlPath()
:patrolData.getImgAnalyse(),
(existing, replacement) -> existing
));
// 筛出缺陷数据


+ 49
- 29
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/utils/ResultAnalysisUtils.java View File

@ -24,6 +24,7 @@ import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@Slf4j
@Component
@ -60,7 +61,7 @@ public class ResultAnalysisUtils {
resultAnalysis.setResultType("2");
resultAnalysis.setResStatus("0");
resultAnalysis.setCreateTime(new Date());
if(!Arrays.asList(AlgConstants.CORRECTION, AlgConstants.GIS_METER_2).contains(resultAnalysis.getAlgType())) {
if (!Arrays.asList(AlgConstants.CORRECTION, AlgConstants.GIS_METER_2).contains(resultAnalysis.getAlgType())) {
resultAnalysis.setResValue("--");
}
return false;
@ -76,7 +77,7 @@ public class ResultAnalysisUtils {
log.info("PARSE_ALG algType: {}, algValue: {}, value: {}, defaultDesc: {}", algType, algValue, value, defaultDesc);
// 初筛红外
if ("1".equals(resultAnalysis.getFilter()) && AlgConstants.ALG_INFRARED_LIST.contains(algType)) {
if ("1".equals(resultAnalysis.getFilter()) && !AlgConstants.INFRARED.equals(algType) && AlgConstants.ALG_INFRARED_LIST.contains(algType)) {
// 绍兴初筛红外改成正常
resultAnalysis.setResultType("1");
resultAnalysis.setPointStatus("1");
@ -93,8 +94,8 @@ public class ResultAnalysisUtils {
final String correctionValue = value;
// 读取字符串中的整数或浮点数注意集合下只取第一个值有坑原值使用correctionValue
value = algValue.formatValue(value);
// 初筛时不做算法值的具体解析
if ("1".equals(resultAnalysis.getFilter())) {
// 初筛时, infrared算法要做阈值判断
if ("1".equals(resultAnalysis.getFilter()) && !AlgConstants.INFRARED.equals(algType)) {
algType = "";
}
@ -103,6 +104,17 @@ public class ResultAnalysisUtils {
return;
}
if ("meter".equals(algType)) {
boolean hasErrorValue = Arrays.stream(correctionValue.split(StringUtils.COMMA)).anyMatch(v -> StringUtils.isEmpty(v) || "null".equals(v)) ;
if (hasErrorValue) {
resultAnalysis.setResStatus("0");
resultAnalysis.setPointStatus(PointStatusEnum.DEFECT.getCode());
resultAnalysis.setResultType(ResultTypeEnum.DEFECT.getCode());
resultAnalysis.setDescription("读数失败");
return;
}
}
if (value.isEmpty() || value.equals("-1") || "null".equals(value)) {
log.info("PARSE_ALG_EMPTY algType: {}, algValue: {}, value: {}, defaultDesc: {}", algType, algValue, value, defaultDesc);
resultAnalysis.setPointStatus("0");
@ -154,12 +166,13 @@ public class ResultAnalysisUtils {
resultAnalysis.setResultType(ResultTypeEnum.NORMAL.getCode());
resultAnalysis.setResStatus(ResStatusEnum.CONFIRM.getCode());
}
resultAnalysis.setDescription(resultAnalysis.getResValue());
} else if (algType.equals("light")) {
resultAnalysis.setResStatus("1");
resultAnalysis.setPointStatus("1");
resultAnalysis.setResultType("1");
} else if (algType.equals("meter") || algType.equals("gis_meter")) {
log.info("------------------parseAlg : meter|gis_meter value: {}", value);
log.info("------------------parseAlg : meter|gis_meter value: {}, originalValue: {}", value, correctionValue);
if ("open".equalsIgnoreCase(value)
|| "closed".equalsIgnoreCase(value) || "Off".equalsIgnoreCase(value) || "On".equalsIgnoreCase(value)) {
resultAnalysis.setResStatus("0");
@ -349,23 +362,22 @@ public class ResultAnalysisUtils {
Math.abs(value2) < EPSILON &&
Math.abs(value3) < EPSILON) {
log.info("2000 correction no need value0: {}, value1: {}, value2: {}, value3: {}", value0, value1, value2, value3);
resultAnalysis.setPointStatus("1");
resultAnalysis.setResultType("1");
resultAnalysis.setPointStatus(PointStatusEnum.NORMAL.getCode());
resultAnalysis.setResultType(ResultTypeEnum.NORMAL.getCode());
resultAnalysis.setResStatus("2");
resultAnalysis.setResValue("");
defaultDesc = messageUtils.get("无需纠偏");
} else {
log.info("2000 correction need value0: {}, value1: {}, value2: {}, value3: {}", value0, value1, value2, value3);
resultAnalysis.setPointStatus("1");
resultAnalysis.setResultType("1");
//defaultDesc = "请进行纠偏";
resultAnalysis.setPointStatus(PointStatusEnum.NORMAL.getCode());
resultAnalysis.setResultType(ResultTypeEnum.NORMAL.getCode());
resultAnalysis.setResStatus("2");
resultAnalysis.setResValue("");
defaultDesc = "无需纠偏";
}
} else {
log.info("parseAlg algType correction correctionValue abnormal");
resultAnalysis.setPointStatus(PointStatusEnum.DEFECT.getCode());
resultAnalysis.setPointStatus(PointStatusEnum.ABNORMAL.getCode());
resultAnalysis.setResultType("0");
resultAnalysis.setResStatus("0");
defaultDesc = "纠偏结果异常";
@ -408,24 +420,24 @@ public class ResultAnalysisUtils {
}
} else {
log.info("2001 parseAlg algType correction correctionValue abnormal");
resultAnalysis.setPointStatus(PointStatusEnum.DEFECT.getCode());
resultAnalysis.setPointStatus(PointStatusEnum.ABNORMAL.getCode());
resultAnalysis.setResultType("0");
resultAnalysis.setResStatus("0");
defaultDesc = "纠偏码和值均异常";
}
} else if ("2002".equals(resultAnalysis.getResCode())) {
resultAnalysis.setPointStatus(PointStatusEnum.DEFECT.getCode());
resultAnalysis.setPointStatus(PointStatusEnum.ABNORMAL.getCode());
resultAnalysis.setResultType("0");
resultAnalysis.setResStatus("0");
defaultDesc = "超出比对范围";
} else if ("2003".equals(resultAnalysis.getResCode())) {
resultAnalysis.setPointStatus(PointStatusEnum.DEFECT.getCode());
resultAnalysis.setPointStatus(PointStatusEnum.ABNORMAL.getCode());
resultAnalysis.setResultType("0");
resultAnalysis.setResStatus("0");
defaultDesc = "图像数据错误";
} else {
resultAnalysis.setPointStatus(PointStatusEnum.DEFECT.getCode());
resultAnalysis.setPointStatus(PointStatusEnum.ABNORMAL.getCode());
resultAnalysis.setResultType("0");
resultAnalysis.setResStatus("0");
defaultDesc = messageUtils.get("未知异常");
@ -433,7 +445,6 @@ public class ResultAnalysisUtils {
}
// 纠偏分析结果均为正常
resultAnalysis.setResultType(ResultTypeEnum.NORMAL.getCode());
resultAnalysis.setPointStatus(PointStatusEnum.NORMAL.getCode());
} else {
log.info("parseAlg algType: {}", algType);
if (value.equals("0")) {
@ -478,27 +489,36 @@ public class ResultAnalysisUtils {
}
/**
* 添加单位
* 给可读数算法的值添加单位
*
* @param resValue 读数
* @param algType 算法类型
* @param unit 单位
* @param algType 算法类型
* @param unit 单位
* @return
*/
public String addUnit2Value(String resValue, String algType, String unit) {
if (StringUtils.isNotEmpty(resValue) && StringUtils.isNotEmpty(unit) && AlgConstants.READABLE_ALG_LIST.contains(algType)) {
log.info("addUnit2Value resValue: {}, algType: {}, unit: {}", resValue, algType, unit);
String[] valueArr = resValue.split(",");
String values = Arrays.stream(valueArr).map(val -> {
boolean isNumber = val.matches("^-?\\d+(\\.\\d+)?$");
if (isNumber) {
if (AlgConstants.ALG_INFRARED_LIST.contains(algType)) {
return BigDecimalUtil.toOneDecimal(val, 1) + unit;
}
return val + unit;
}
return val;
}).collect(Collectors.joining(","));
String values = IntStream.range(0, valueArr.length)
.mapToObj(i -> {
String val = valueArr[i];
if (!NumberUtils.isCreatable(val)) {
return val;
}
if (AlgConstants.ALG_INFRARED_LIST.contains(algType)) {
return BigDecimalUtil.toOneDecimal(val, 1) + unit;
}
// 表计算法避雷器只有第一个值带单位
if (AlgConstants.METER.equals(algType)) {
return i == 0 ? val + unit : val;
}
return val + unit;
})
.collect(Collectors.joining(","));
return values;
}
return resValue;


+ 1
- 1
inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java View File

@ -1228,7 +1228,7 @@ public class PatrolResultController extends BaseController {
String taskCode = patrolTaskDb.getTaskCode();
String[] devTypeArray = Arrays.stream(devType.split(",")).distinct().toArray(String[]::new);
// note 联合任务任务包含多个设备类型 或者 单个非摄像头的设备类型有多个设备编码
if (devTypeArray.length > 1 || (devTypeArray.length == 1 && devTypeArray[0]!= "2" && patrolTaskDb.getDevNo().split(",").length > 1 )) {
if (devTypeArray.length > 1 || (devTypeArray.length == 1 && !"2".equals(devTypeArray[0]) && patrolTaskDb.getDevNo().split(",").length > 1)) {
// 当taskCode为多设备且redis中正在执行该taskCode的任务时新增或ignore主任务
final String taskCurrentCode = redisService.getCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode);
logger.info(Color.CYAN + "task is union task, taskCode: {}, devType: {}, taskCurrentCode: {}" + Color.END, taskCode, devType, taskCurrentCode);


+ 0
- 11
inspect-main/inspect-main-task/src/main/java/com/inspect/task/controller/PatrolTaskController.java View File

@ -357,17 +357,6 @@ public class PatrolTaskController extends BaseController {
}
}
// 6.1 纠偏算法的状态处理
for (PatrolData item : newList) {
if (AlgConstants.CORRECTION.equals(item.getAlgType())) {
// 纠偏状态包装异常点位异常需要纠偏点位缺陷其他点位正常无需处理
if (ResStatusEnum.UNCONFIRM.getCode().equals(item.getResStatus())) {
item.setPointStatus(PointStatusEnum.ABNORMAL.getCode());
} else if (ResStatusEnum.CORRECT.getCode().equals(item.getResStatus())) {
item.setPointStatus(PointStatusEnum.DEFECT.getCode()); }
}
}
// 7. 所有过滤条件合并为一个 stream避免多次 filter + collect
newList = newList.stream()
.filter(element -> StringUtils.isEmpty(patrolTaskStatus.getAlgName())


+ 2
- 38
inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolData.java View File

@ -1,9 +1,10 @@
package com.inspect.task.domain;
import com.inspect.base.core.annotation.Excel;
import lombok.ToString;
import java.util.Objects;
@ToString
public class PatrolData implements Comparable<PatrolData> {
@Excel(
name = "设备"
@ -400,41 +401,4 @@ public class PatrolData implements Comparable<PatrolData> {
public int hashCode() {
return Objects.hash(deviceName, channelName, deviceSource, pointName, pointId, warnStatus, algName, resValue, img, filterDesc, brightDesc, imgAnalyse, brightImgAnalyse, desc, lineId, patrolTime, pointStatus, imgType, dataType, filter, requestId, resStatus, brightResStatus, areaName, algType, objectId, imageNormalUrlPath, suggestion, filePath);
}
@Override
public String toString() {
return "PatrolDataEx{" +
"deviceName='" + deviceName + '\'' +
", channelName='" + channelName + '\'' +
", deviceSource='" + deviceSource + '\'' +
", pointName='" + pointName + '\'' +
", pointId='" + pointId + '\'' +
", warnStatus='" + warnStatus + '\'' +
", algName='" + algName + '\'' +
", resValue='" + resValue + '\'' +
", img='" + img + '\'' +
", filterDesc='" + filterDesc + '\'' +
", brightDesc='" + brightDesc + '\'' +
", imgAnalyse='" + imgAnalyse + '\'' +
", brightImgAnalyse='" + brightImgAnalyse + '\'' +
", desc='" + desc + '\'' +
", lineId='" + lineId + '\'' +
", patrolTime='" + patrolTime + '\'' +
", pointStatus='" + pointStatus + '\'' +
", imgType='" + imgType + '\'' +
", dataType='" + dataType + '\'' +
", filter='" + filter + '\'' +
", requestId='" + requestId + '\'' +
", resStatus='" + resStatus + '\'' +
", brightResStatus='" + brightResStatus + '\'' +
", areaName='" + areaName + '\'' +
", algType='" + algType + '\'' +
", objectId='" + objectId + '\'' +
", imageNormalUrlPath='" + imageNormalUrlPath + '\'' +
", filePath='" + filePath + '\'' +
", suggestion='" + suggestion + '\'' +
", originalValue='" + originalValue + '\'' +
", taskPatrolId='" + taskPatrolId + '\'' +
'}';
}
}

+ 1
- 2
inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/controller/PatrolTaskStatusController.java View File

@ -819,7 +819,7 @@ public class PatrolTaskStatusController extends BaseController {
}
}
if (!(pilotTaskCmds.isEmpty() || devTypeList.isEmpty() || devNoList.isEmpty())) {
if (!pilotTaskCmds.isEmpty() || (!devTypeList.isEmpty() && !devNoList.isEmpty())) {
String immediatelyExecTaskTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
redisService.setCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, patrolTask.getTaskCode(), RedisConst.TASK_CODE + patrolTask.getTaskCode() + StringUtils.AT + immediatelyExecTaskTime, 1L, TimeUnit.HOURS);
}
@ -1079,7 +1079,6 @@ public class PatrolTaskStatusController extends BaseController {
.devNo(devNo)
.build();
List<PatrolTaskInfo> patrolTaskInfoList = patrolTaskInfoService.selectPatrolTask(patrolTaskInfo);
log.info("[TASK] PATROL TASK INFO: {}", patrolTaskInfoList);
boolean isWithin = false;
for (PatrolTaskInfo info : patrolTaskInfoList) {
final Long areaId = info.getAreaId();


Loading…
Cancel
Save