Commit eec0d5ef zshaohui

预约单出库

1 个父辈 13bd28d9
......@@ -850,7 +850,7 @@ public class LiteOrderCache {
Collection<LiteOrder> liteOrders = getAllLiteOrder();
if (liteOrders != null && !liteOrders.isEmpty()) {
for (LiteOrder liteOrder : liteOrders) {
if (!liteOrder.isTaskFinished() && !liteOrder.isNew() && !liteOrder.isClosed()) {
if (liteOrder.isOutTails()) {
return liteOrder.getOrderNo();
}
}
......@@ -1358,4 +1358,98 @@ public class LiteOrderCache {
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 {
/**
* 仓位状态
*/
//storagePos.setBarcode(barcode);
storagePos.setBarcode(barcode);
storagePos.setUsed(true);
storagePos.setCanCheckOutTime(System.currentTimeMillis());
storagePosManager.save(storagePos);
......
......@@ -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.utils.CodeResolve;
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.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
......@@ -57,6 +59,9 @@ public class SpUnclaimedController {
@Autowired
private TaskService taskService;
@Autowired
private LiteOrderCache liteOrderCache;
@ApiOperation("获取正在执行出库单")
@RequestMapping("/getActiveOrderNo")
@AnonymousAccess
......@@ -71,35 +76,41 @@ public class SpUnclaimedController {
@AnonymousAccess
public ResultBean getAllUnclaimed(String no) {
List<GetUnclaimedResult> resultList = LuxsanSpApi.getUnclaimedDetails(new GetUnclaimedRequest(SpareNostatus.DEPT_ID, SpareNostatus.FUNCTION_DEPT));
List<Unclaimed> unclaimedList = new ArrayList<>();
for (GetUnclaimedResult result : resultList) {
Unclaimed unclaimed = orderNoCache.getByOrderNo(result.getOrderNo());
if (unclaimed == null) {
unclaimed = orderNoCache.getOrderNoResultToUnclaimed(result);
orderNoCache.addToMap(unclaimed);
unclaimedManager.save(unclaimed);
String orderNo = result.getOrderNo();
LiteOrder liteOrder = liteOrderCache.getLiteOrder(orderNo);
if (liteOrder == null) {
liteOrder = liteOrderManager.findByOrderNo(orderNo);
}
unclaimedList.add(unclaimed);
String orderNo = unclaimed.getOrderNo();
// if (ObjectUtil.isNotNull(liteOrderManager.findByOrderNo(orderNo))) {
// continue;
// }
/* List<LiteOrderItem> liteOrderItems = new ArrayList<>();
for (UnclaimedDetail unclaimedDetail : unclaimed.getDetailList()) {
LiteOrderItem liteOrderItem = new LiteOrderItem();
liteOrderItem.setPn(unclaimedDetail.getPartno());
// 需求数量
liteOrderItem.setNeedReelCount(unclaimedDetail.getApplyQty());
liteOrderItem.setNeedNum(unclaimedDetail.getApplyQty());
liteOrderItem.setLine("s1");
liteOrderItems.add(liteOrderItem);
if (liteOrder == null) {
liteOrder = new LiteOrder();
liteOrder.setOrderNo(orderNo);
List<LiteOrderItem> itemList = new ArrayList<>();
for (UnclaimedDetail detail : result.getSpareApplyDetail()) {
LiteOrderItem item = new LiteOrderItem();
item.setPn(detail.getPartno());
item.setNeedNum(detail.getApplyQty());
itemList.add(item);
}
liteOrder.setOrderItems(itemList);
liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
}
LiteOrder liteOrder = new LiteOrder(orderNo, liteOrderItems);
liteOrder.setLine("s1");
liteOrderManager.createWithItems(liteOrder);*/
Unclaimed unclaimed = orderNoCache.getOrderNoResultToUnclaimed(result);
if (liteOrder.isOutTails()){
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());
}
return ResultBean.newOkResult(unclaimedList);
......@@ -111,19 +122,31 @@ public class SpUnclaimedController {
@AnonymousAccess
public ResultBean checkOrderNo(String orderNoStr) {
//判断有没有正在执行的任务单
String no = orderNoCache.getExecutingOrderNoStr();
String no = liteOrderCache.hasExecutingOrder();
if (StringUtils.isNotEmpty(no)) {
return ResultBean.newErrorResult(-1, "", "有正在执行的出库单:" + no);
}
Unclaimed unclaimed = orderNoCache.getByOrderNo(orderNoStr);
if (unclaimed == null) {
return ResultBean.newErrorResult(-1, "", "未找到对应的出库单信息");
//判断工单有没有关闭
LiteOrder liteOrder = liteOrderCache.getLiteOrder(orderNoStr);
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("");
}
......@@ -133,18 +156,26 @@ public class SpUnclaimedController {
@AnonymousAccess
public ResultBean abandonOrderNo(String orderNoStr) {
Unclaimed unclaimed = orderNoCache.getByOrderNo(orderNoStr);
if (unclaimed == null) {
return ResultBean.newErrorResult(-1, "", "未找到对应的出库单信息");
//判断工单有没有关闭
LiteOrder liteOrder = liteOrderCache.getLiteOrder(orderNoStr);
if (liteOrder == null){
liteOrder = liteOrderManager.findByOrderNo(orderNoStr);
}
if (!unclaimed.isExecuting()) {
return ResultBean.newErrorResult(-1, "", 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+"预约单已经关闭");
}
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("");
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!