Commit 77dd1c89 LN

工单锁定的物料,工单关闭时清除锁定。

1 个父辈 cae53928
......@@ -229,7 +229,7 @@ public class Barcode extends BasePo implements Serializable {
private Date produceDate;
/**
* 锁定ID(目前只有指定批次会锁定)
* 锁定ID(目前只有指定批次会锁定) Outside Shelf Dispatch 或 Controlled Dispatch工单会锁定
*/
private String lockId;
......
......@@ -9,6 +9,7 @@ import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.api.SmfApi;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.enums.OP;
......@@ -65,6 +66,10 @@ public class LiteOrderCache {
@Autowired
private IStoragePosManager storagePosManager;
@Autowired
private IBarcodeManager barcodeManager;
@Autowired
private SmfApi smfApi;
......@@ -240,8 +245,41 @@ public class LiteOrderCache {
liteOrder.setTaskFinishedTime(System.currentTimeMillis());
smfApi.onOrderStatusChange(liteOrder);
clearOrderLock(liteOrder);
}
public void clearOrderLock(LiteOrder order) {
try {
if (order == null || (!order.isClosed())) {
return;
}
//清理已出库的物料
Query query = new Query(Criteria.where("lockId").is(order.getOrderNo()));
List<Barcode> barcodes = barcodeManager.findByQuery(query);
if (barcodes.size() > 0) {
for (Barcode code :
barcodes) {
code.setLockId(null);
code.setLockName(null);
code = barcodeManager.saveBarcode(code);
StoragePos pos = storagePosManager.getByBarcode(code.getBarcode());
if (pos == null) {
log.info("工单" + order.getOrderNo() + "已关闭,解除物料锁定:" + code.getBarcode());
} else {
pos.setBarcode(code);
storagePosManager.save(pos);
log.info("工单" + order.getOrderNo() + "已关闭,解除物料锁定:" + code.getBarcode() + ",所在库位:" + pos.getPosName());
}
}
}
} catch (Exception exception) {
log.error("工单" + order.getOrderNo() + "关闭时,解除锁定物料出错:", exception);
}
}
public LiteOrder getLiteOrder(String orderNo) {
LiteOrder order = liteOrderMap.get(orderNo);
if (order == null) {
......@@ -395,6 +433,7 @@ public class LiteOrderCache {
log.info(" mode=" + order.getMode() + "的出库已结束,清空 key=" + key + " 的cache");
dataCache.updateCache(key, "");
}
clearOrderLock(order);
}
}
} else {
......@@ -710,6 +749,7 @@ public class LiteOrderCache {
liteOrder.setClosed(true);
liteOrderManager.save(liteOrder);
smfApi.onOrderStatusChange(liteOrder);
clearOrderLock(liteOrder);
return "smfcore.order.close.success";
}
......
......@@ -4,6 +4,8 @@ import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.storage.rest.dto.CheckOutDto;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
......@@ -31,6 +33,8 @@ public class LockMaterialController {
@Autowired
private DataCache dataCache;
@Autowired
private LiteOrderCache liteOrderCache;
@Autowired
private final IStoragePosManager storagePosManager;
@ApiOperation(value = "锁定物料:增加锁定")
@PutMapping("/lock")
......@@ -92,9 +96,16 @@ public class LockMaterialController {
log.info("锁定物料:解除锁定时物料未锁定: 位置【" + pos.getPosName() + "】条码【"+code.getBarcode()+"】");
continue;
}
if(!code.getLockId().equals(lockId)){
log.info("锁定物料:解除锁定时物料被其他工单锁定: 位置【" + pos.getPosName() + "】条码【"+code.getBarcode()+"】lockId=【"+code.getLockId()+"】");
continue;
if(!code.getLockId().equals(lockId)) {
//判断此工单是否关闭
LiteOrder order = liteOrderCache.getLiteOrder(code.getLockId());
if (order == null || order.isClosed()) {
log.info("锁定物料:解除锁定时物料被其他工单锁定: 位置【" + pos.getPosName() + "】条码【" + code.getBarcode() + "】lockId=【" + code.getLockId() + "】,工单已结束,可解除锁定");
} else {
log.info("锁定物料:解除锁定时物料被其他工单锁定: 位置【" + pos.getPosName() + "】条码【" + code.getBarcode() + "】lockId=【" + code.getLockId() + "】,工单还未结束,暂不解除锁定");
continue;
}
}
code.setLockId(null);
code.setLockName(null);
......
......@@ -644,6 +644,7 @@ private IStoragePosManager storagePosManager;
log.info("abort mode=" + order.getMode() + " 清空 key=" + key + " 的cache");
dataCache.updateCache(key, "");
}
liteOrderCache.clearOrderLock(order);
}
@ApiOperation("放弃出库")
......
......@@ -404,6 +404,8 @@ public class MicronPreTaskController {
String key=Constants.CACHE_DISPATCH+order.getMode();
log.info(" mode="+order.getMode()+"工单已关闭,清空 key="+key+" 的cache");
dataCache.updateCache(key,"");
liteOrderCache.clearOrderLock(order);
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!