Commit eec0d5ef zshaohui

预约单出库

1 个父辈 13bd28d9
...@@ -850,7 +850,7 @@ public class LiteOrderCache { ...@@ -850,7 +850,7 @@ public class LiteOrderCache {
Collection<LiteOrder> liteOrders = getAllLiteOrder(); Collection<LiteOrder> liteOrders = getAllLiteOrder();
if (liteOrders != null && !liteOrders.isEmpty()) { if (liteOrders != null && !liteOrders.isEmpty()) {
for (LiteOrder liteOrder : liteOrders) { for (LiteOrder liteOrder : liteOrders) {
if (!liteOrder.isTaskFinished() && !liteOrder.isNew() && !liteOrder.isClosed()) { if (liteOrder.isOutTails()) {
return liteOrder.getOrderNo(); return liteOrder.getOrderNo();
} }
} }
...@@ -1358,4 +1358,98 @@ public class LiteOrderCache { ...@@ -1358,4 +1358,98 @@ public class LiteOrderCache {
public synchronized void rawTicketOut(String orderNo) { public synchronized void rawTicketOut(String orderNo) {
} }
public synchronized String checkOutUnclaimed(LiteOrder liteOrder) {
String orderNo = liteOrder.getOrderNo();
LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) {
cacheOrder = liteOrderManager.findByOrderNo(orderNo);
}
if (cacheOrder == null) {
log.info("未找到工单:" + orderNo + "的信息");
return "预约单不存在";
}
if (cacheOrder.isClosed()) {
log.info("工单:" + orderNo + "已经关闭");
return "预约单已关闭";
}
if (cacheOrder.isOutTails()) {
log.info("工单:" + orderNo + "正在执行中");
return "预约单正在执行中";
}
log.info("开始执行预约单");
cacheOrder.setStatus(LITEORDER_STATUS.TAILS);
int boxCheckOutNum = 0;
for (LiteOrderItem item : liteOrder.getOrderItems()) {
String pn = item.getPn();
int needNum = item.getNeedNum();
int totalOutNum = item.getTotalOutNum();
int assignNum = 0;
int needOutNum = totalOutNum - needNum;
while (assignNum < needOutNum) {
List<String> storageIdList = new ArrayList<>();
for (Storage storage : dataCache.getAllStorage().values()) {
storageIdList.add(storage.getId());
}
Collection<String> excludePosIds = excludeOutPosIds();
CHECKOUT_TYPE checkOutType = dataCache.getCheckOutType();
//获取可用库位
StoragePos pos = storagePosManager.findPartNumberInStorages(storageIdList, pn, excludePosIds, checkOutType, "");
if (pos == null) {
log.info(item.getPn() + "未找到可用库位,跳过");
continue;
}
//进行标记
boolean hasSmpPn = false;
Barcode barcode = pos.getBarcode();
List<Barcode> subCodeList = barcode.getSubCodeList();
for (Barcode subCode : subCodeList) {
if (pn.equals(subCode.getPartNumber())){
subCode.setOut(true);
subCode.setOrderItemId(item.getId());
subCode.setOrderId(cacheOrder.getId());
barcodeManager.save(subCode);
barcode.updateSubCodes(subCode);
barcodeManager.save(barcode);
assignNum = assignNum + subCode.getAmount();
hasSmpPn = true;
break;
}
}
if (hasSmpPn){
boxCheckOutNum = boxCheckOutNum + 1;
Storage storage = dataCache.getStorageById(pos.getId());
DataLog dataLog = new DataLog(storage, barcode, pos);
dataLog.setSourceId(cacheOrder.getId());
dataLog.setSourceName(cacheOrder.getOrderNo());
dataLog.setType(OP.CHECKOUT);
dataLog.setStatus(OP_STATUS.WAIT.name());
taskService.updateQueueTask(dataLog);
}
}
}
if (boxCheckOutNum <= 0){
finishedOrderTasks(liteOrder);
return orderNo+"未找到可以执行的任务";
}
liteOrderMap.put(orderNo,cacheOrder);
liteOrderManager.save(cacheOrder);
return "";
}
} }
...@@ -429,7 +429,7 @@ public class SpAgvDeviceClientController { ...@@ -429,7 +429,7 @@ public class SpAgvDeviceClientController {
/** /**
* 仓位状态 * 仓位状态
*/ */
//storagePos.setBarcode(barcode); storagePos.setBarcode(barcode);
storagePos.setUsed(true); storagePos.setUsed(true);
storagePos.setCanCheckOutTime(System.currentTimeMillis()); storagePos.setCanCheckOutTime(System.currentTimeMillis());
storagePosManager.save(storagePos); storagePosManager.save(storagePos);
......
...@@ -6,6 +6,8 @@ import com.neotel.smfcore.common.utils.StringUtils; ...@@ -6,6 +6,8 @@ import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager; import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.utils.CodeResolve; import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.inList.service.manager.IInListManager; import com.neotel.smfcore.core.inList.service.manager.IInListManager;
import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager; import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder; import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem; import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
...@@ -57,6 +59,9 @@ public class SpUnclaimedController { ...@@ -57,6 +59,9 @@ public class SpUnclaimedController {
@Autowired @Autowired
private TaskService taskService; private TaskService taskService;
@Autowired
private LiteOrderCache liteOrderCache;
@ApiOperation("获取正在执行出库单") @ApiOperation("获取正在执行出库单")
@RequestMapping("/getActiveOrderNo") @RequestMapping("/getActiveOrderNo")
@AnonymousAccess @AnonymousAccess
...@@ -71,35 +76,41 @@ public class SpUnclaimedController { ...@@ -71,35 +76,41 @@ public class SpUnclaimedController {
@AnonymousAccess @AnonymousAccess
public ResultBean getAllUnclaimed(String no) { public ResultBean getAllUnclaimed(String no) {
List<GetUnclaimedResult> resultList = LuxsanSpApi.getUnclaimedDetails(new GetUnclaimedRequest(SpareNostatus.DEPT_ID, SpareNostatus.FUNCTION_DEPT)); List<GetUnclaimedResult> resultList = LuxsanSpApi.getUnclaimedDetails(new GetUnclaimedRequest(SpareNostatus.DEPT_ID, SpareNostatus.FUNCTION_DEPT));
List<Unclaimed> unclaimedList = new ArrayList<>(); List<Unclaimed> unclaimedList = new ArrayList<>();
for (GetUnclaimedResult result : resultList) { for (GetUnclaimedResult result : resultList) {
Unclaimed unclaimed = orderNoCache.getByOrderNo(result.getOrderNo()); String orderNo = result.getOrderNo();
if (unclaimed == null) { LiteOrder liteOrder = liteOrderCache.getLiteOrder(orderNo);
unclaimed = orderNoCache.getOrderNoResultToUnclaimed(result); if (liteOrder == null) {
orderNoCache.addToMap(unclaimed); liteOrder = liteOrderManager.findByOrderNo(orderNo);
unclaimedManager.save(unclaimed);
} }
unclaimedList.add(unclaimed); if (liteOrder == null) {
String orderNo = unclaimed.getOrderNo(); liteOrder = new LiteOrder();
// if (ObjectUtil.isNotNull(liteOrderManager.findByOrderNo(orderNo))) { liteOrder.setOrderNo(orderNo);
// continue;
// } List<LiteOrderItem> itemList = new ArrayList<>();
/* List<LiteOrderItem> liteOrderItems = new ArrayList<>(); for (UnclaimedDetail detail : result.getSpareApplyDetail()) {
for (UnclaimedDetail unclaimedDetail : unclaimed.getDetailList()) { LiteOrderItem item = new LiteOrderItem();
LiteOrderItem liteOrderItem = new LiteOrderItem(); item.setPn(detail.getPartno());
liteOrderItem.setPn(unclaimedDetail.getPartno()); item.setNeedNum(detail.getApplyQty());
// 需求数量 itemList.add(item);
liteOrderItem.setNeedReelCount(unclaimedDetail.getApplyQty()); }
liteOrderItem.setNeedNum(unclaimedDetail.getApplyQty());
liteOrderItem.setLine("s1"); liteOrder.setOrderItems(itemList);
liteOrderItems.add(liteOrderItem); liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
} }
LiteOrder liteOrder = new LiteOrder(orderNo, liteOrderItems); Unclaimed unclaimed = orderNoCache.getOrderNoResultToUnclaimed(result);
liteOrder.setLine("s1"); if (liteOrder.isOutTails()){
liteOrderManager.createWithItems(liteOrder);*/ unclaimed.setUnclaimedStatus(SpareNostatus.EXECUTING_STATUS);
} else if (liteOrder.isClosed()){
unclaimed.setUnclaimedStatus(SpareNostatus.CLOSE_STATUS);
}
unclaimedList.add(unclaimed);
} }
if (StringUtils.isNotBlank(no)) { if (StringUtils.isNotEmpty(no)) {
unclaimedList = unclaimedList.stream().filter(spareNo -> spareNo.getOrderNo().equals(no)).collect(Collectors.toList()); unclaimedList = unclaimedList.stream().filter(spareNo -> spareNo.getOrderNo().equals(no)).collect(Collectors.toList());
} }
return ResultBean.newOkResult(unclaimedList); return ResultBean.newOkResult(unclaimedList);
...@@ -111,19 +122,31 @@ public class SpUnclaimedController { ...@@ -111,19 +122,31 @@ public class SpUnclaimedController {
@AnonymousAccess @AnonymousAccess
public ResultBean checkOrderNo(String orderNoStr) { public ResultBean checkOrderNo(String orderNoStr) {
//判断有没有正在执行的任务单 //判断有没有正在执行的任务单
String no = orderNoCache.getExecutingOrderNoStr(); String no = liteOrderCache.hasExecutingOrder();
if (StringUtils.isNotEmpty(no)) { if (StringUtils.isNotEmpty(no)) {
return ResultBean.newErrorResult(-1, "", "有正在执行的出库单:" + no); return ResultBean.newErrorResult(-1, "", "有正在执行的出库单:" + no);
} }
Unclaimed unclaimed = orderNoCache.getByOrderNo(orderNoStr); //判断工单有没有关闭
if (unclaimed == null) { LiteOrder liteOrder = liteOrderCache.getLiteOrder(orderNoStr);
return ResultBean.newErrorResult(-1, "", "未找到对应的出库单信息"); if (liteOrder == null){
liteOrder = liteOrderManager.findByOrderNo(orderNoStr);
}
if (liteOrder == null){
return ResultBean.newErrorResult(-1,"",orderNoStr+"预约单不存在");
}
if (liteOrder.isOutTails()){
return ResultBean.newErrorResult(-1,"",orderNoStr+"预约单正在执行中");
}
if (liteOrder.isClosed()){
return ResultBean.newErrorResult(-1,"",orderNoStr+"预约单已经关闭");
}
String result = liteOrderCache.checkOutUnclaimed(liteOrder);
if (StringUtils.isNotEmpty(result)){
return ResultBean.newErrorResult(-1,"",orderNoStr+"执行报错:"+result);
} }
unclaimed.setUnclaimedStatus(SpareNostatus.EXECUTING_STATUS);
orderNoCache.addToMap(unclaimed);
unclaimedManager.save(unclaimed);
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
...@@ -133,18 +156,26 @@ public class SpUnclaimedController { ...@@ -133,18 +156,26 @@ public class SpUnclaimedController {
@AnonymousAccess @AnonymousAccess
public ResultBean abandonOrderNo(String orderNoStr) { public ResultBean abandonOrderNo(String orderNoStr) {
Unclaimed unclaimed = orderNoCache.getByOrderNo(orderNoStr); //判断工单有没有关闭
if (unclaimed == null) { LiteOrder liteOrder = liteOrderCache.getLiteOrder(orderNoStr);
return ResultBean.newErrorResult(-1, "", "未找到对应的出库单信息"); if (liteOrder == null){
liteOrder = liteOrderManager.findByOrderNo(orderNoStr);
} }
if (liteOrder == null){
if (!unclaimed.isExecuting()) { return ResultBean.newErrorResult(-1,"",orderNoStr+"预约单不存在");
return ResultBean.newErrorResult(-1, "", orderNoStr + "不是正在执行中,不允许放弃"); }
if (liteOrder.isOutTails()){
return ResultBean.newErrorResult(-1,"",orderNoStr+"预约单正在执行中");
} }
if (liteOrder.isClosed()){
return ResultBean.newErrorResult(-1,"",orderNoStr+"预约单已经关闭");
}
liteOrder.setStatus(LITEORDER_STATUS.CLOSED);
liteOrder.setClosed(true);
liteOrderCache.addOrderToMap(liteOrder);
liteOrderManager.save(liteOrder);
unclaimed.setUnclaimedStatus(SpareNostatus.ABANDON_STATUS);
orderNoCache.addToMap(unclaimed);
unclaimedManager.save(unclaimed);
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!