Commit c47f914b 张少辉

1.回库缓存问题提交

1 个父辈 e980910b
...@@ -748,7 +748,10 @@ public class BaseDeviceHandler implements IDeviceHandler { ...@@ -748,7 +748,10 @@ public class BaseDeviceHandler implements IDeviceHandler {
barcode.setInOpor(task.getOperator()); barcode.setInOpor(task.getOperator());
barcode.setCheckOutDate(null, ""); barcode.setCheckOutDate(null, "");
barcode.setPosName(task.getPosName()); barcode.setPosName(task.getPosName());
barcode.setNeedReturnStorage(true); if (!barcode.isNeedReturnStorage()){
task.setNeedReturnStorage(false);
barcode.setNeedReturnStorage(true);
}
if (barcode.isSolder()) { if (barcode.isSolder()) {
if (storagePos.isWarmPos()) { if (storagePos.isWarmPos()) {
//回温仓位 //回温仓位
......
...@@ -271,40 +271,50 @@ public class LiteOrderCache { ...@@ -271,40 +271,50 @@ public class LiteOrderCache {
return order; return order;
} }
private Map<String,String> cacheOrderMap = new ConcurrentHashMap<>();
/** /**
* 更新工单状态信息 * 更新工单状态信息
*/ */
private synchronized void finishedOrderTask(DataLog task) throws ValidateException { private void finishedOrderTask(DataLog task) throws ValidateException {
if (OP.CHECKOUT == task.getType()) { if (OP.CHECKOUT == task.getType()) {
//更新工单状态 //更新工单状态
String orderNo = task.getSourceName(); String orderNo = task.getSourceName();
if (!Strings.isNullOrEmpty(orderNo)) { if (!Strings.isNullOrEmpty(orderNo)) {
LiteOrder order = getLiteOrder(orderNo);
if (order != null) { String lockObj = cacheOrderMap.get(orderNo);
//任务是取消的,需要将总待出库数量-1 if (StringUtils.isEmpty(lockObj)) {
if (task.isCancel()) { lockObj = orderNo;
order.setTaskReelCount(order.getTaskReelCount() - 1); cacheOrderMap.put(orderNo, lockObj);
order.setTotalTaskReelCount(order.getTotalTaskReelCount() - 1); }
log.info("工单[" + orderNo + "]的任务" + task.getPartNumber() + "[" + task.getBarcode() + "]已取消,任务数-1=" + order.getFinishedReelCount() + "/" + order.getTaskReelCount()); synchronized (cacheOrderMap.get(orderNo)) {
//checkoutAgain(task,order); LiteOrder order = getLiteOrder(orderNo);
} else if (task.isFinished() || task.isEnd()) { if (order != null) {
order.setFinishedReelCount(order.getFinishedReelCount() + 1); //任务是取消的,需要将总待出库数量-1
order.setTotalFinishedReelCount(order.getTotalFinishedReelCount() + 1); if (task.isCancel()) {
String orderItemId = task.getSubSourceId(); order.setTaskReelCount(order.getTaskReelCount() - 1);
List<LiteOrderItem> items = new ArrayList<>(); order.setTotalTaskReelCount(order.getTotalTaskReelCount() - 1);
for (LiteOrderItem liteOrderItem : order.getOrderItems()) { log.info("工单[" + orderNo + "]的任务" + task.getPartNumber() + "[" + task.getBarcode() + "]已取消,任务数-1=" + order.getFinishedReelCount() + "/" + order.getTaskReelCount());
if (liteOrderItem.getId().equals(orderItemId)) {
log.info("工单[" + orderNo + "]的任务" + task.getPartNumber() + "[" + task.getBarcode() + "]出库完成,已完成数量+1=" + order.getFinishedReelCount() + "/" + order.getTaskReelCount()); //checkoutAgain(task,order);
//更新对应条目的已出库数量和出库盘数 } else if (task.isFinished() || task.isEnd()) {
liteOrderItem.setOutNum(liteOrderItem.getOutNum() + task.getNum()); order.setFinishedReelCount(order.getFinishedReelCount() + 1);
liteOrderItem.setOutReelCount(liteOrderItem.getOutReelCount() + 1); order.setTotalFinishedReelCount(order.getTotalFinishedReelCount() + 1);
liteOrderItem.setTotalOutNum(liteOrderItem.getTotalOutNum() + task.getNum()); String orderItemId = task.getSubSourceId();
liteOrderItem.setTotalOutReelCount(liteOrderItem.getTotalOutReelCount() + 1); List<LiteOrderItem> items = new ArrayList<>();
liteOrderItem.setBarcodeStr(task.getBarcode(), task.getNum()); for (LiteOrderItem liteOrderItem : order.getOrderItems()) {
liteOrderItem.setOutBarcodeList(task.getBarcode(), task.getPartNumber(), task.getExport()); if (liteOrderItem.getId().equals(orderItemId)) {
liteOrderItem = liteOrderItemManager.save(liteOrderItem); log.info("工单[" + orderNo + "]的任务" + task.getPartNumber() + "[" + task.getBarcode() + "]出库完成,已完成数量+1=" + order.getFinishedReelCount() + "/" + order.getTaskReelCount());
//更新对应条目的已出库数量和出库盘数
liteOrderItem.setOutNum(liteOrderItem.getOutNum() + task.getNum());
liteOrderItem.setOutReelCount(liteOrderItem.getOutReelCount() + 1);
liteOrderItem.setTotalOutNum(liteOrderItem.getTotalOutNum() + task.getNum());
liteOrderItem.setTotalOutReelCount(liteOrderItem.getTotalOutReelCount() + 1);
liteOrderItem.setBarcodeStr(task.getBarcode(), task.getNum());
liteOrderItem.setOutBarcodeList(task.getBarcode(), task.getPartNumber(), task.getExport());
liteOrderItem = liteOrderItemManager.save(liteOrderItem);
// Barcode barcode = barcodeManager.findByBarcode(task.getBarcode()); // Barcode barcode = barcodeManager.findByBarcode(task.getBarcode());
// if (barcode != null) { // if (barcode != null) {
// Float totalNeedNum = liteOrderItem.getNeedNum() * order.getOrderTimes(); // Float totalNeedNum = liteOrderItem.getNeedNum() * order.getOrderTimes();
...@@ -320,43 +330,44 @@ public class LiteOrderCache { ...@@ -320,43 +330,44 @@ public class LiteOrderCache {
// e.printStackTrace(); // e.printStackTrace();
// } // }
// } // }
}
items.add(liteOrderItem);
}
order.setOrderItems(items);
if (!order.isClosed()) {
//工单未关闭的话,检查状态,全部都出完进行关闭
boolean closed = true;
for (LiteOrderItem liteOrderItem : order.getOrderItems()) {
if (!liteOrderItem.isOutFinished()) {
closed = false;
break;
} }
if (closed) { items.add(liteOrderItem);
if (StringUtils.isBlank(liteOrderItem.getRi()) && (StringUtils.isNotBlank(liteOrderItem.getPn()) || StringUtils.isNotBlank(liteOrderItem.getMpn()))) { }
if (!liteOrderItem.isOutReelFinished()) { order.setOrderItems(items);
closed = false; if (!order.isClosed()) {
break; //工单未关闭的话,检查状态,全部都出完进行关闭
boolean closed = true;
for (LiteOrderItem liteOrderItem : order.getOrderItems()) {
if (!liteOrderItem.isOutFinished()) {
closed = false;
break;
}
if (closed) {
if (StringUtils.isBlank(liteOrderItem.getRi()) && (StringUtils.isNotBlank(liteOrderItem.getPn()) || StringUtils.isNotBlank(liteOrderItem.getMpn()))) {
if (!liteOrderItem.isOutReelFinished()) {
closed = false;
break;
}
} }
} }
} }
if (closed) {
order.setClosed(closed);
}
} }
if (closed) { } else {
order.setClosed(closed); log.error("工单[" + orderNo + "]的任务[" + task.getBarcode() + "]完成时,状态为:" + task.getStatus());
}
} }
} else {
log.error("工单[" + orderNo + "]的任务[" + task.getBarcode() + "]完成时,状态为:" + task.getStatus());
}
if (order.getTaskReelCount() > 0 && order.getFinishedReelCount() >= order.getTaskReelCount()) { if (order.getTaskReelCount() > 0 && order.getFinishedReelCount() >= order.getTaskReelCount()) {
log.info("工单[" + orderNo + "]的出库任务已完成,共出库:" + order.getFinishedReelCount() + " 盘"); log.info("工单[" + orderNo + "]的出库任务已完成,共出库:" + order.getFinishedReelCount() + " 盘");
finishedOrderTasks(order); finishedOrderTasks(order);
}
liteOrderManager.save(order);
liteOrderMap.put(orderNo, order);
} else {
log.error("完成任务时,未找到工单[" + orderNo + "]信息");
} }
liteOrderManager.save(order);
liteOrderMap.put(orderNo, order);
} else {
log.error("完成任务时,未找到工单[" + orderNo + "]信息");
} }
} }
} }
......
...@@ -268,6 +268,8 @@ public class DataLog extends BasePo implements Serializable ,Comparable<DataLog> ...@@ -268,6 +268,8 @@ public class DataLog extends BasePo implements Serializable ,Comparable<DataLog>
private String remark = ""; private String remark = "";
private boolean needReturnStorage = true;
public String getBarcode() { public String getBarcode() {
if(barcode == null){ if(barcode == null){
return ""; return "";
......
...@@ -89,10 +89,8 @@ public class ReturnStorageManagerImpl implements IReturnStorageManager { ...@@ -89,10 +89,8 @@ public class ReturnStorageManagerImpl implements IReturnStorageManager {
if (dataLog != null) { if (dataLog != null) {
log.info(dataLog.getBarcode() + "找到上一个任务,对应的工单号为:" + dataLog.getStorageName() + "任务状态为:" + dataLog.getStatus() + ",上次出库的任务数量为:" + dataLog.getNum()); log.info(dataLog.getBarcode() + "找到上一个任务,对应的工单号为:" + dataLog.getStorageName() + "任务状态为:" + dataLog.getStatus() + ",上次出库的任务数量为:" + dataLog.getNum());
//判断是否需要回库 //判断是否需要回库
Barcode barcode = barcodeManager.findByBarcode(dataLog.getBarcode());
if (dataLog.isCheckOutTask() && dataLog.isFinished()) { if (dataLog.isCheckOutTask() && dataLog.isFinished()) {
if (barcode.isNeedReturnStorage()) { if (dataLog.isNeedReturnStorage()) {
//判断两次的partNumber是否相同,如果不同,则跳过 //判断两次的partNumber是否相同,如果不同,则跳过
if (task.getPartNumber().equals(dataLog.getPartNumber())) { if (task.getPartNumber().equals(dataLog.getPartNumber())) {
String sourceId = dataLog.getSourceId(); String sourceId = dataLog.getSourceId();
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!