Commit fdcf679d authored by wanghao's avatar wanghao

1 老化过程中 获取卡号,获取IOT状态调整中

parent 118abb05
......@@ -229,7 +229,7 @@ public class AllCommandHandler {
return;
}
// 1. 查询数据
// 1. 查询数据// 已经过滤掉 空 motherboardCode
List<PalletDeviceBinding> bindings = palletDeviceBindingService.listByStoreyCode(storeyCode);
if (bindings.isEmpty()) {
return;
......@@ -242,16 +242,7 @@ public class AllCommandHandler {
.collect(Collectors.groupingBy(PalletDeviceBinding::getMotherboardCode));
// 处理 nbCode 为空的(直接设状态为 2,加入待更新列表)
List<PalletDeviceBinding> needUpdateList = new ArrayList<>();
for (PalletDeviceBinding binding : bindings) {
if (StringUtils.isBlank(binding.getNbCode())) {
binding.setIotStatus(2);
needUpdateList.add(binding);
}
// 顺便处理网络状态异常(但不要覆盖后续 IOT 查询结果,网络异常只是前置标记)
// 注意:如果网络状态 !=1,但 IOT 查询成功,应该以 IOT 为准,这里先不 set,留给后面判断
}
List<PalletDeviceBinding> needUpdateList = bindings.stream().filter(b -> StringUtils.isBlank(b.getNbCode())).collect(Collectors.toList());
if (groupByMotherboard.isEmpty()) {
// 如果没有需要调接口的,直接批量更新后返回
if (!needUpdateList.isEmpty()) {
......@@ -276,14 +267,13 @@ public class AllCommandHandler {
for (Map.Entry<String, List<PalletDeviceBinding>> entry : groupByMotherboard.entrySet()) {
String motherboardCode = entry.getKey();
List<PalletDeviceBinding> sameBoardDevices = entry.getValue();
// 取任意一个设备的 nbCode(因为同一主板下的 nbCode 理论上一致,但为了严谨取第一个非空的)
String nbCode = sameBoardDevices.stream()
.map(PalletDeviceBinding::getNbCode)
.filter(StringUtils::isNotBlank)
.findFirst()
.orElse(null);
if (nbCode == null) {
PalletDeviceBinding palletDeviceBinding = sameBoardDevices.get(0);
if(palletDeviceBinding == null) {
continue;
}
String nbCode = palletDeviceBinding.getNbCode();
if (StringUtils.isBlank(nbCode)) {
continue;
}
......@@ -304,11 +294,30 @@ public class AllCommandHandler {
Integer statusToSet;
if (StringUtils.isNotBlank(result)) {
Map<String, String> dataMap = iotDataAndTokenUtil.processIotData(result);
// 上报时间必须在 老化时间范围内
if (dataMap != null && !dataMap.isEmpty()) {
statusToSet = 1; // IOT数据正常
String reportTimeStr = dataMap.get("reportTime");
Date bindingTime = palletDeviceBinding.getBindingTime();
if (StringUtils.isNotBlank(reportTimeStr) && bindingTime != null) {
try {
Date reportTime = DateUtils.parseDate(reportTimeStr);
if (reportTime.after(bindingTime)) {
statusToSet = 1;
} else {
statusToSet = 0;
}
} catch (Exception e) {
statusToSet = 0;
}
} else {
statusToSet = 0;
}
} else {
statusToSet = 0; // IOT数据为空
}
} else {
statusToSet = 0; // 请求失败
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment