|
|
@ -1,5 +1,6 @@ |
|
|
package com.inspect.analysis.utils; |
|
|
package com.inspect.analysis.utils; |
|
|
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
import com.fasterxml.jackson.core.type.TypeReference; |
|
|
import com.fasterxml.jackson.core.type.TypeReference; |
|
|
import com.fasterxml.jackson.databind.ObjectMapper; |
|
|
import com.fasterxml.jackson.databind.ObjectMapper; |
|
|
import com.inspect.analysis.constant.AnalyseConstants; |
|
|
import com.inspect.analysis.constant.AnalyseConstants; |
|
|
@ -8,6 +9,8 @@ import com.inspect.analysis.domain.AnalyseResPoint; |
|
|
import com.inspect.analysis.domain.ResultAnalysis; |
|
|
import com.inspect.analysis.domain.ResultAnalysis; |
|
|
import com.inspect.base.core.constant.AlgConstants; |
|
|
import com.inspect.base.core.constant.AlgConstants; |
|
|
import com.inspect.base.core.enums.PointStatusEnum; |
|
|
import com.inspect.base.core.enums.PointStatusEnum; |
|
|
|
|
|
import com.inspect.base.core.enums.ResultTypeEnum; |
|
|
|
|
|
import com.inspect.base.core.utils.BigDecimalUtil; |
|
|
import com.inspect.base.core.utils.StringUtils; |
|
|
import com.inspect.base.core.utils.StringUtils; |
|
|
import com.inspect.message.MessageUtils; |
|
|
import com.inspect.message.MessageUtils; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
@ -16,8 +19,10 @@ import org.springframework.beans.factory.annotation.Autowired; |
|
|
import org.springframework.stereotype.Component; |
|
|
import org.springframework.stereotype.Component; |
|
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
import java.util.ArrayList; |
|
|
|
|
|
import java.util.Arrays; |
|
|
import java.util.Date; |
|
|
import java.util.Date; |
|
|
import java.util.List; |
|
|
import java.util.List; |
|
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
@Slf4j |
|
|
@Slf4j |
|
|
@Component |
|
|
@Component |
|
|
@ -28,7 +33,8 @@ public class ResultAnalysisUtils { |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 检查返回结果 |
|
|
* 检查返回结果 |
|
|
* code除了2000,其他值均为异常 |
|
|
|
|
|
|
|
|
* code: 2000-正确 2001-图像数据错误 2002-算法分析失败 |
|
|
|
|
|
* 图像数据错误是指未能获取到图像数据;算法分析失败是指算法本身分析过程中出错 |
|
|
*/ |
|
|
*/ |
|
|
public boolean checkCode(String code, String desc, ResultAnalysis resultAnalysis) { |
|
|
public boolean checkCode(String code, String desc, ResultAnalysis resultAnalysis) { |
|
|
if (AnalyseConstants.ANALYSE_OK.equals(code)) { |
|
|
if (AnalyseConstants.ANALYSE_OK.equals(code)) { |
|
|
@ -60,7 +66,7 @@ public class ResultAnalysisUtils { |
|
|
* 解析算法结果 |
|
|
* 解析算法结果 |
|
|
* pointStatus点位状态: 点位状态 0-异常 1-正常 2-待人工确认 3-已撤销(忽略) 4-跟踪(告警) 5-确认(告警) 6-缺陷 |
|
|
* pointStatus点位状态: 点位状态 0-异常 1-正常 2-待人工确认 3-已撤销(忽略) 4-跟踪(告警) 5-确认(告警) 6-缺陷 |
|
|
* resultType分析结果: 0-缺陷 1-正常 2-异常 |
|
|
* resultType分析结果: 0-缺陷 1-正常 2-异常 |
|
|
* resStatus告警确认状态: 0-未确认 1-已确认 2-已撤销 |
|
|
|
|
|
|
|
|
* resStatus告警确认状态: 0-未确认 1-已确认 2-已撤销 3-需要纠偏 4-完成纠偏 |
|
|
*/ |
|
|
*/ |
|
|
public void parseAlg(String algType, AlgValue algValue, String value, String defaultDesc, ResultAnalysis resultAnalysis) { |
|
|
public void parseAlg(String algType, AlgValue algValue, String value, String defaultDesc, ResultAnalysis resultAnalysis) { |
|
|
log.info("PARSE_ALG algType: {}, algValue: {}, value: {}, defaultDesc: {}", algType, algValue, value, defaultDesc); |
|
|
log.info("PARSE_ALG algType: {}, algValue: {}, value: {}, defaultDesc: {}", algType, algValue, value, defaultDesc); |
|
|
@ -76,7 +82,7 @@ public class ResultAnalysisUtils { |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (value == null) { |
|
|
|
|
|
|
|
|
if (value == null || value == "null") { |
|
|
value = ""; |
|
|
value = ""; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -201,47 +207,45 @@ public class ResultAnalysisUtils { |
|
|
boolean hasDefect = false; |
|
|
boolean hasDefect = false; |
|
|
boolean hasAbnormal = false; |
|
|
boolean hasAbnormal = false; |
|
|
try { |
|
|
try { |
|
|
ObjectMapper mapper = new ObjectMapper(); |
|
|
|
|
|
// 1. 解析 JSON |
|
|
// 1. 解析 JSON |
|
|
List<String> originalList = mapper.readValue(correctionValue, new TypeReference<List<String>>() { |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
String[] values = JSON.parseArray(correctionValue, String.class).toArray(new String[0]); |
|
|
// 2. 转换:非空 → "正常",空值 → "读数失败",超限 → "表计超限" |
|
|
// 2. 转换:非空 → "正常",空值 → "读数失败",超限 → "表计超限" |
|
|
List<String> descList = new ArrayList<>(originalList.size()); |
|
|
|
|
|
for (String item : originalList) { |
|
|
|
|
|
|
|
|
String[] descs = new String[values.length]; |
|
|
|
|
|
for (int i = 0; i < values.length; i++) { |
|
|
|
|
|
String item = values[i]; |
|
|
if (StringUtils.isEmpty(item)) { |
|
|
if (StringUtils.isEmpty(item)) { |
|
|
hasAbnormal = true; |
|
|
hasAbnormal = true; |
|
|
descList.add("读数失败"); |
|
|
|
|
|
|
|
|
values[i] = "--"; |
|
|
|
|
|
descs[i] = "读数失败"; |
|
|
} else { |
|
|
} else { |
|
|
if (algValue.isAlarm(item)) { |
|
|
if (algValue.isAlarm(item)) { |
|
|
hasDefect = true; |
|
|
hasDefect = true; |
|
|
descList.add("表计超限"); |
|
|
|
|
|
|
|
|
descs[i] = "表计超限"; |
|
|
} else { |
|
|
} else { |
|
|
descList.add("正常"); |
|
|
|
|
|
|
|
|
descs[i] = "正常"; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
String descStr = mapper.writeValueAsString(descList); |
|
|
|
|
|
if (hasDefect) { |
|
|
|
|
|
|
|
|
String valueStr = String.join(",", values); |
|
|
|
|
|
String descStr = String.join(",", descs); |
|
|
|
|
|
resultAnalysis.setResValue(valueStr); |
|
|
|
|
|
resultAnalysis.setResDesc(descStr); |
|
|
|
|
|
// 无人机表计所有读数失败都应该是缺陷 |
|
|
|
|
|
if (hasDefect || hasAbnormal) { |
|
|
resultAnalysis.setPointStatus(PointStatusEnum.DEFECT.getCode()); |
|
|
resultAnalysis.setPointStatus(PointStatusEnum.DEFECT.getCode()); |
|
|
resultAnalysis.setResStatus("0"); |
|
|
resultAnalysis.setResStatus("0"); |
|
|
resultAnalysis.setResultType("0"); |
|
|
resultAnalysis.setResultType("0"); |
|
|
defaultDesc = descStr; |
|
|
|
|
|
} else { |
|
|
} else { |
|
|
if (hasAbnormal) { |
|
|
|
|
|
resultAnalysis.setPointStatus("0"); |
|
|
|
|
|
resultAnalysis.setResStatus("0"); |
|
|
|
|
|
resultAnalysis.setResultType("2"); |
|
|
|
|
|
defaultDesc = descStr; |
|
|
|
|
|
} else { |
|
|
|
|
|
resultAnalysis.setPointStatus("1"); |
|
|
|
|
|
resultAnalysis.setResStatus("0"); |
|
|
|
|
|
resultAnalysis.setResultType("1"); |
|
|
|
|
|
defaultDesc = messageUtils.get("正常"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
resultAnalysis.setPointStatus("1"); |
|
|
|
|
|
resultAnalysis.setResStatus("0"); |
|
|
|
|
|
resultAnalysis.setResultType("1"); |
|
|
} |
|
|
} |
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
|
log.error("PARSE_ALG_GIS_METER_2_ERROR correctionValue: {}", correctionValue, e); |
|
|
log.error("PARSE_ALG_GIS_METER_2_ERROR correctionValue: {}", correctionValue, e); |
|
|
defaultDesc = "解析异常"; |
|
|
defaultDesc = "解析异常"; |
|
|
|
|
|
resultAnalysis.setPointStatus(PointStatusEnum.DEFECT.getCode()); |
|
|
|
|
|
resultAnalysis.setResStatus("0"); |
|
|
|
|
|
resultAnalysis.setResultType("0"); |
|
|
} |
|
|
} |
|
|
} else if (algType.equals("sound")) { |
|
|
} else if (algType.equals("sound")) { |
|
|
if (value.equals("1")) { |
|
|
if (value.equals("1")) { |
|
|
@ -257,22 +261,7 @@ public class ResultAnalysisUtils { |
|
|
} |
|
|
} |
|
|
} else if ( |
|
|
} else if ( |
|
|
AlgConstants.ALG_INFRARED_LIST.contains(algType) || |
|
|
AlgConstants.ALG_INFRARED_LIST.contains(algType) || |
|
|
algType.equals("xb")) { |
|
|
|
|
|
// String device = ""; |
|
|
|
|
|
// if (algType.equals("infrared")) { |
|
|
|
|
|
// device = messageUtils.get("红外"); |
|
|
|
|
|
// } else if (algType.equals("infra_1800")) { |
|
|
|
|
|
// log.info("红外1800==============="); |
|
|
|
|
|
// device = messageUtils.get("红外1800"); |
|
|
|
|
|
// } else if (algType.equals("infra_yu3")) { |
|
|
|
|
|
// device = messageUtils.get("无人机红外"); |
|
|
|
|
|
// } else if (algType.equals("infra_camera")) { |
|
|
|
|
|
// device = messageUtils.get("摄像头红外"); |
|
|
|
|
|
// } else if (algType.equals("infra_camera_reverse")) { |
|
|
|
|
|
// device = messageUtils.get("摄像头红外灰度反算"); |
|
|
|
|
|
// } else if (algType.equals("xb")) { |
|
|
|
|
|
// device = messageUtils.get("形变"); |
|
|
|
|
|
// } |
|
|
|
|
|
|
|
|
algType.equals("xb")) { |
|
|
if (!algValue.isAlarm(value)) { |
|
|
if (!algValue.isAlarm(value)) { |
|
|
log.info("infrared no alarm value: {}, algValue: {}", value, algValue); |
|
|
log.info("infrared no alarm value: {}, algValue: {}", value, algValue); |
|
|
resultAnalysis.setResStatus("1"); |
|
|
resultAnalysis.setResStatus("1"); |
|
|
@ -289,10 +278,8 @@ public class ResultAnalysisUtils { |
|
|
//defaultDesc = device + messageUtils.get("告警"); |
|
|
//defaultDesc = device + messageUtils.get("告警"); |
|
|
defaultDesc = messageUtils.get("温度异常告警"); |
|
|
defaultDesc = messageUtils.get("温度异常告警"); |
|
|
} |
|
|
} |
|
|
// 红外类型的算法读数保留一位小数 |
|
|
|
|
|
resultAnalysis.setResValue(algValue.toOneDecimal(value)); |
|
|
|
|
|
if (messageUtils.get("分析失败").equals(defaultDesc)) { |
|
|
if (messageUtils.get("分析失败").equals(defaultDesc)) { |
|
|
defaultDesc = "-"; |
|
|
|
|
|
|
|
|
defaultDesc = "--"; |
|
|
} |
|
|
} |
|
|
} else if (algType.equals("isolator")) { |
|
|
} else if (algType.equals("isolator")) { |
|
|
log.info("ALG_TYPE isolator value: {}", value); |
|
|
log.info("ALG_TYPE isolator value: {}", value); |
|
|
@ -346,7 +333,7 @@ public class ResultAnalysisUtils { |
|
|
resultAnalysis.setResultType("1"); |
|
|
resultAnalysis.setResultType("1"); |
|
|
resultAnalysis.setResStatus("2"); |
|
|
resultAnalysis.setResStatus("2"); |
|
|
resultAnalysis.setResValue(""); |
|
|
resultAnalysis.setResValue(""); |
|
|
defaultDesc = messageUtils.get("正常"); |
|
|
|
|
|
|
|
|
defaultDesc = messageUtils.get("无需纠偏"); |
|
|
} else { |
|
|
} else { |
|
|
log.info("2000 correction need value0: {}, value1: {}, value2: {}, value3: {}", value0, value1, value2, value3); |
|
|
log.info("2000 correction need value0: {}, value1: {}, value2: {}, value3: {}", value0, value1, value2, value3); |
|
|
resultAnalysis.setPointStatus("1"); |
|
|
resultAnalysis.setPointStatus("1"); |
|
|
@ -355,7 +342,7 @@ public class ResultAnalysisUtils { |
|
|
//defaultDesc = "请进行纠偏"; |
|
|
//defaultDesc = "请进行纠偏"; |
|
|
resultAnalysis.setResStatus("2"); |
|
|
resultAnalysis.setResStatus("2"); |
|
|
resultAnalysis.setResValue(""); |
|
|
resultAnalysis.setResValue(""); |
|
|
defaultDesc = "正常"; |
|
|
|
|
|
|
|
|
defaultDesc = "无需纠偏"; |
|
|
} |
|
|
} |
|
|
} else { |
|
|
} else { |
|
|
log.info("parseAlg algType correction correctionValue abnormal"); |
|
|
log.info("parseAlg algType correction correctionValue abnormal"); |
|
|
@ -364,6 +351,9 @@ public class ResultAnalysisUtils { |
|
|
resultAnalysis.setResStatus("0"); |
|
|
resultAnalysis.setResStatus("0"); |
|
|
defaultDesc = "纠偏结果异常"; |
|
|
defaultDesc = "纠偏结果异常"; |
|
|
} |
|
|
} |
|
|
|
|
|
// 纠偏分析结果均为正常 |
|
|
|
|
|
resultAnalysis.setResultType(ResultTypeEnum.NORMAL.getCode()); |
|
|
|
|
|
resultAnalysis.setPointStatus(PointStatusEnum.NORMAL.getCode()); |
|
|
} else if ("2001".equals(resultAnalysis.getResCode())) { |
|
|
} else if ("2001".equals(resultAnalysis.getResCode())) { |
|
|
ObjectMapper mapper = new ObjectMapper(); |
|
|
ObjectMapper mapper = new ObjectMapper(); |
|
|
List<List<Double>> list; |
|
|
List<List<Double>> list; |
|
|
@ -425,6 +415,9 @@ public class ResultAnalysisUtils { |
|
|
defaultDesc = messageUtils.get("未知异常"); |
|
|
defaultDesc = messageUtils.get("未知异常"); |
|
|
resultAnalysis.setResDesc(defaultDesc); |
|
|
resultAnalysis.setResDesc(defaultDesc); |
|
|
} |
|
|
} |
|
|
|
|
|
// 纠偏分析结果均为正常 |
|
|
|
|
|
resultAnalysis.setResultType(ResultTypeEnum.NORMAL.getCode()); |
|
|
|
|
|
resultAnalysis.setPointStatus(PointStatusEnum.NORMAL.getCode()); |
|
|
} else { |
|
|
} else { |
|
|
log.info("parseAlg algType: {}", algType); |
|
|
log.info("parseAlg algType: {}", algType); |
|
|
if (value.equals("0")) { |
|
|
if (value.equals("0")) { |
|
|
@ -451,6 +444,7 @@ public class ResultAnalysisUtils { |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 将分析结果的辅助值进行合并展示 |
|
|
* 将分析结果的辅助值进行合并展示 |
|
|
|
|
|
* |
|
|
* @param analyseResPoint |
|
|
* @param analyseResPoint |
|
|
* @param resultAnalysis |
|
|
* @param resultAnalysis |
|
|
*/ |
|
|
*/ |
|
|
@ -459,7 +453,7 @@ public class ResultAnalysisUtils { |
|
|
if (StringUtils.isNotEmpty(value2)) { |
|
|
if (StringUtils.isNotEmpty(value2)) { |
|
|
log.info("mergeValue analyseResPoint value2: {}", value2); |
|
|
log.info("mergeValue analyseResPoint value2: {}", value2); |
|
|
String value = analyseResPoint.getValue(); |
|
|
String value = analyseResPoint.getValue(); |
|
|
if(!NumberUtils.isCreatable(value2)) { |
|
|
|
|
|
|
|
|
if (!NumberUtils.isCreatable(value2)) { |
|
|
value2 = "null"; |
|
|
value2 = "null"; |
|
|
} |
|
|
} |
|
|
String val = String.join(",", value, value2); |
|
|
String val = String.join(",", value, value2); |
|
|
@ -467,21 +461,30 @@ public class ResultAnalysisUtils { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public static void main(String[] args) { |
|
|
|
|
|
String value = "[[121,108],[121,108]]"; |
|
|
|
|
|
ObjectMapper mapper = new ObjectMapper(); |
|
|
|
|
|
List<List<Double>> list; |
|
|
|
|
|
try { |
|
|
|
|
|
list = mapper.readValue(value, new TypeReference<List<List<Double>>>() { |
|
|
|
|
|
}); |
|
|
|
|
|
System.out.println("parseAlg algType correction value: " + list); |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
System.out.println("parseAlg algType correction value exception"); |
|
|
|
|
|
list = new ArrayList<>(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if(list.size() == 2 && list.get(0).size() == 2 && list.get(1).size() == 2) { |
|
|
|
|
|
System.out.println("parseAlg algType correction value"); |
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 添加单位 |
|
|
|
|
|
* |
|
|
|
|
|
* @param resValue 读数 |
|
|
|
|
|
* @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(",")); |
|
|
|
|
|
return values; |
|
|
} |
|
|
} |
|
|
|
|
|
return resValue; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |