Commit aff7baa2 zshaohui

1.库位异常,添加到message中

1 个父辈 1f6e3d4a
...@@ -11,6 +11,9 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode; ...@@ -11,6 +11,9 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.bean.StatusBean; import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.enums.OP; import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS; import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.message.enums.MessageType;
import com.neotel.smfcore.core.message.service.manager.IMessageManager;
import com.neotel.smfcore.core.message.service.po.Message;
import com.neotel.smfcore.core.order.enums.ORDER_COLOR; import com.neotel.smfcore.core.order.enums.ORDER_COLOR;
import com.neotel.smfcore.core.storage.enums.DeviceType; import com.neotel.smfcore.core.storage.enums.DeviceType;
import com.neotel.smfcore.core.storage.service.po.Storage; import com.neotel.smfcore.core.storage.service.po.Storage;
...@@ -18,9 +21,6 @@ import com.neotel.smfcore.core.storage.service.po.StoragePos; ...@@ -18,9 +21,6 @@ import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.bean.OrderSetting; import com.neotel.smfcore.core.system.bean.OrderSetting;
import com.neotel.smfcore.core.system.service.po.DataLog; import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil; import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.core.system.websocket.MsgType;
import com.neotel.smfcore.core.system.websocket.SocketMsg;
import com.neotel.smfcore.core.system.websocket.WebSocketServer;
import com.neotel.smfcore.security.TokenProvider; import com.neotel.smfcore.security.TokenProvider;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.service.manager.IUserManager; import com.neotel.smfcore.security.service.manager.IUserManager;
...@@ -48,6 +48,9 @@ public class NLPShelfHandler extends BaseDeviceHandler { ...@@ -48,6 +48,9 @@ public class NLPShelfHandler extends BaseDeviceHandler {
@Autowired @Autowired
private IUserManager userManager; private IUserManager userManager;
@Autowired
private IMessageManager messageManager;
/** /**
* 扫码 * 扫码
*/ */
...@@ -327,11 +330,24 @@ public class NLPShelfHandler extends BaseDeviceHandler { ...@@ -327,11 +330,24 @@ public class NLPShelfHandler extends BaseDeviceHandler {
} }
} }
//先获取到上一次缓存的信息
List<List<String>> lastDeviceData = DevicesStatusUtil.getDeviceData(cid);
List<String> lastHasReelPosErrorList = new ArrayList<>();
List<String> lastNoReelPosErrorList = new ArrayList<>();
if (lastDeviceData != null && lastDeviceData.size() == 2){
lastHasReelPosErrorList = lastDeviceData.get(0);
lastNoReelPosErrorList = lastDeviceData.get(1);
}
List<List<String>> data = new ArrayList<>(); List<List<String>> data = new ArrayList<>();
data.add(Arrays.asList(hasReelPosErrorList)); data.add(Arrays.asList(hasReelPosErrorList));
data.add(Arrays.asList(noReelPosErrorList)); data.add(Arrays.asList(noReelPosErrorList));
DevicesStatusUtil.updateDeviceData(cid, data); DevicesStatusUtil.updateDeviceData(cid, data);
//在这里进行对比
compareErrorDataWithMessage(cid, lastHasReelPosErrorList, lastNoReelPosErrorList, data.get(0), data.get(1));
List<String> inOkList = new ArrayList<>(); List<String> inOkList = new ArrayList<>();
List<String> inNgList = new ArrayList<>(); List<String> inNgList = new ArrayList<>();
List<String> outOkList = new ArrayList<>(); List<String> outOkList = new ArrayList<>();
...@@ -574,6 +590,95 @@ public class NLPShelfHandler extends BaseDeviceHandler { ...@@ -574,6 +590,95 @@ public class NLPShelfHandler extends BaseDeviceHandler {
return ResultBean.newOkResult(posList); return ResultBean.newOkResult(posList);
} }
private void compareErrorDataWithMessage(String cid,
List<String> lastHasReelPosErrorList, List<String> lastNoReelPosErrorList,
List<String> currentHasReelPosErrorList, List<String> currentNoReelPosErrorList) {
Storage storage = dataCache.getStorage(cid);
// 处理空值
if (lastHasReelPosErrorList == null) lastHasReelPosErrorList = new ArrayList<>();
if (lastNoReelPosErrorList == null) lastNoReelPosErrorList = new ArrayList<>();
if (currentHasReelPosErrorList == null) currentHasReelPosErrorList = new ArrayList<>();
if (currentNoReelPosErrorList == null) currentNoReelPosErrorList = new ArrayList<>();
// 对比有料异常数据
List<String> hasNewErrors = new ArrayList<>();
List<String> hasRecoveredErrors = new ArrayList<>();
List<String> hasPersistentErrors = new ArrayList<>();
for (String item : currentHasReelPosErrorList) {
if (!lastHasReelPosErrorList.contains(item)) {
hasNewErrors.add(item);
} else {
hasPersistentErrors.add(item);
}
}
for (String item : lastHasReelPosErrorList) {
if (!currentHasReelPosErrorList.contains(item)) {
hasRecoveredErrors.add(item);
}
}
// 对比无料异常数据
List<String> noNewErrors = new ArrayList<>();
List<String> noRecoveredErrors = new ArrayList<>();
List<String> noPersistentErrors = new ArrayList<>();
for (String item : currentNoReelPosErrorList) {
if (!lastNoReelPosErrorList.contains(item)) {
noNewErrors.add(item);
} else {
noPersistentErrors.add(item);
}
}
for (String item : lastNoReelPosErrorList) {
if (!currentNoReelPosErrorList.contains(item)) {
noRecoveredErrors.add(item);
}
}
// 打印有料异常日志
if (!hasNewErrors.isEmpty()) {
log.warn("料架[{}] 有料异常(实际有料但数据库无信息) 新增异常库位: {}", cid, String.join(", ", hasNewErrors));
//smfcode.nlp.posHasReelError=库位[{0}]检测到有物料,但系统无库存记录
for (String hasNewError : hasNewErrors) {
Message message = Message.newMsg(MessageType.ERROR.name(), storage.getName(), storage.getId(), hasNewError, "smfcode.nlp.posHasReelError", "库位[{0}]检测到有物料,但系统无库存记录", new String[]{hasNewError});
messageManager.save(message);
}
}
if (!hasRecoveredErrors.isEmpty()) {
log.info("料架[{}] 有料异常(实际有料但数据库无信息) 恢复正常库位: {}", cid, String.join(", ", hasRecoveredErrors));
for (String hasRecoveredError : hasRecoveredErrors) {
//smfcode.nlp.posRecovered=库位[{0}]恢复正常
Message message = Message.newMsg(MessageType.INFO.name(), storage.getName(), storage.getId(), hasRecoveredError, "smfcode.nlp.posRecovered", "库位[{0}]恢复正常", new String[]{hasRecoveredError});
messageManager.save(message);
}
}
if (!hasPersistentErrors.isEmpty()) {
//log.error("⚠️ 料架[{}] 有料异常(实际有料但数据库无信息) 持续异常库位: {}", cid, String.join(", ", hasPersistentErrors));
}
// 打印无料异常日志
if (!noNewErrors.isEmpty()) {
log.warn("料架[{}] 无料异常(实际无料但数据库有信息) 新增异常库位: {}", cid, String.join(", ", noNewErrors));
for (String noNewError : noNewErrors) {
//smfcode.nlp.posNoReelError=库位[{0}]检测到没有物料,但系统有库存记录
Message message = Message.newMsg(MessageType.ERROR.name(), storage.getName(), storage.getId(), noNewError, "smfcode.nlp.posNoReelError", "库位[{0}]检测到没有物料,但系统有库存记录", new String[]{noNewError});
messageManager.save(message);
}
}
if (!noRecoveredErrors.isEmpty()) {
log.info("料架[{}] 无料异常(实际无料但数据库有信息) 恢复正常库位: {}", cid, String.join(", ", noRecoveredErrors));
for (String noRecoveredError : noRecoveredErrors) {
//smfcode.nlp.posRecovered=库位[{0}]恢复正常
Message message = Message.newMsg(MessageType.INFO.name(), storage.getName(), storage.getId(), noRecoveredError, "smfcode.nlp.posRecovered", "库位[{0}]恢复正常", new String[]{noRecoveredError});
messageManager.save(message);
}
}
if (!noPersistentErrors.isEmpty()) {
//log.error("⚠️ 料架[{}] 无料异常(实际无料但数据库有信息) 持续异常库位: {}", cid, String.join(", ", noPersistentErrors));
}
}
@Override @Override
public DeviceType getDeviceType() { public DeviceType getDeviceType() {
return DeviceType.NLP; return DeviceType.NLP;
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!