Commit 77dd1c89 LN

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

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