fix 获取AGV错误信息

This commit is contained in:
张江玮
2023-08-24 09:56:53 +08:00
parent 745978de54
commit 528a44245d

View File

@@ -10,10 +10,7 @@ import org.nl.modules.system.service.impl.DictDetailServiceImpl;
import org.nl.modules.system.service.impl.DictServiceImpl;
import org.nl.modules.wql.util.SpringContextHolder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -68,9 +65,7 @@ public class ErrorUtil {
List<Dict> dictDtos = dictService.queryAll();
for (int i = 0; i < dictDtos.size(); i++) {
Dict dictDto = dictDtos.get(i);
dictMap.put(dictDto.getName(), getDict(dictDto.getName(), t -> {
return dictDetailService.getDictByName(t);
}));
dictMap.put(dictDto.getName(), getDict(dictDto.getName(), dictDetailService::getDictByName));
}
}
}
@@ -79,35 +74,57 @@ public class ErrorUtil {
return f.apply(name);
}
public static Map<String, String> getAgvErrorMsg(Integer ageErrorNum) {
Map<Integer, String> agvMap = getDictDetailByName("agv_error_type");
Integer[] keys = agvMap.keySet().toArray(new Integer[0]);
String message = "";
String code = "";
out:
for (int i = 1; i < 1 << keys.length; i++) {
int sum = 0;
StringBuffer sb = new StringBuffer();
StringBuffer sbCode = new StringBuffer();
inner:
for (int j = 0; j < keys.length; j++) {
if ((i & 1 << j) != 0) {
sum += keys[j];
sb.append(agvMap.get(keys[j])).append(",");
sbCode.append(keys[j]).append(",");
public static Map<String, String> getAgvErrorMsg(Integer agvErrorNum) {
String code;
String message;
if (agvErrorNum == 0) {
code = "0";
message = "正常";
} else if (agvErrorNum < 0) {
code = "-1";
message = "AGV上报报警代码有误";
} else {
Map<Integer, String> agvMap = getDictDetailByName("agv_error_type");
if (agvMap.isEmpty()) {
code = "-1";
message = "字典表未配置 [agv_error_type]";
} else {
List<Map.Entry<Integer, String>> errors = agvMap.entrySet().stream().filter(e -> e.getKey() > 0).sorted(Comparator.comparingInt(Map.Entry::getKey)).collect(Collectors.toList());
if (errors.isEmpty()) {
code = "-1";
message = "字典表 [agv_error_type] 配置有误";
} else if (agvErrorNum >= (int) Math.pow(2, errors.get(errors.size() - 1).getKey())) {
code = "-1";
message = "AGV上报报警代码有误";
} else {
int index = 0;
StringBuilder errorCode = new StringBuilder();
StringBuilder errorMessage = new StringBuilder();
for (int i = agvErrorNum; i != 0; i = i >> 1) {
if (index == errors.size()) {
errorCode.setLength(0);
errorCode.append("-1");
errorMessage.setLength(0);
errorMessage.append("字典表 [agv_error_type] 配置有误");
break;
}
if (i % 2 == 1) {
errorCode.append(errors.get(index).getKey()).append(",");
errorMessage.append(errors.get(index).getValue()).append("");
}
index++;
}
code = errorCode.toString();
message = errorMessage.toString();
}
}
if (sum == ageErrorNum) {
code = sbCode.toString();
message = sb.toString();
break out;
}
}
Map<String, String> map = new HashMap<>();
String info = replace(message);
code = replace(code);
map.put("code", StrUtil.isEmpty(code) ? "-1" : code);
map.put("info", StrUtil.isEmpty(info) ? "AGV上报报警代码有误" : info);
map.put("code", replace(code));
map.put("info", replace(message));
return map;
}
@@ -115,7 +132,7 @@ public class ErrorUtil {
if (StrUtil.isEmpty(message)) {
return null;
}
if (message.endsWith(",")) {
if (message.endsWith(",") || message.endsWith("")) {
return message.substring(0, message.length() - 1);
}
return message;