Commit 925fbf53 zshaohui

料盘从料箱中出库

1 个父辈 eec0d5ef
...@@ -10,6 +10,12 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode; ...@@ -10,6 +10,12 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve; import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.enums.OP; import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS; import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager;
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;
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.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.po.DataLog; import com.neotel.smfcore.core.system.service.po.DataLog;
...@@ -31,6 +37,8 @@ import com.neotel.smfcore.security.annotation.AnonymousAccess; ...@@ -31,6 +37,8 @@ import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
...@@ -59,6 +67,15 @@ public class SpBoxCheckOutController { ...@@ -59,6 +67,15 @@ public class SpBoxCheckOutController {
@Autowired @Autowired
private OrderNoCache orderNoCache; private OrderNoCache orderNoCache;
@Autowired
private ILiteOrderManager liteOrderManager;
@Autowired
private LiteOrderCache liteOrderCache;
@Autowired
private ILiteOrderItemManager liteOrderItemManager;
...@@ -96,70 +113,24 @@ public class SpBoxCheckOutController { ...@@ -96,70 +113,24 @@ public class SpBoxCheckOutController {
return ResultBean.newErrorResult(-1, "", codeStr + "不是有效的条码"); return ResultBean.newErrorResult(-1, "", codeStr + "不是有效的条码");
} }
//判断有没有正在执行出库单 //3.判断当前需不需要出库
Unclaimed orderNo = orderNoCache.getExecutingOrderNo(); String itemId = binBarcode.getOrderItemId();
if (ObjectUtil.isAllEmpty(orderNo)) { if (StringUtils.isEmpty(itemId)){
return ResultBean.newErrorResult(-1,"","没有找到正在执行的出库单"); return ResultBean.newErrorResult(-1,"",codeStr+"没有要出库的任务");
} }
boolean isOk = false; //4.获取当前预约单
String codePartNumber = codeBarcode.getPartNumber(); String orderId = binBarcode.getOrderId();
for (Barcode barcode : boxBarcode.getSubCodeList()) { LiteOrder liteOrder = liteOrderManager.get(orderId);
String pn = barcode.getPartNumber(); LiteOrder newLiteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo());
int binNum = Integer.parseInt(barcode.getBarcode().split("-")[1]); if (newLiteOrder == null){
if (pn.equals(codePartNumber) && (binNum == Integer.parseInt(binCodeStr.split("-")[1]))) { newLiteOrder = liteOrderManager.findByOrderNo(liteOrder.getOrderNo());
isOk = true;
break;
}
}
if (!isOk) {
return ResultBean.newErrorResult(-1, "", codeStr + "与隔口:" + binCodeStr + "的料号不匹配");
} }
//判断是否已经完成了 //判断所属的工单任务是否完成
boolean finish = true; String result = handleOrderNo(newLiteOrder, itemId, codeBarcode.getQty());
//判断当前出库的是否和出库单一样 if (StringUtils.isNotEmpty(result)){
if (orderNo != null) { return ResultBean.newErrorResult(-1,"",result);
List<UnclaimedDetail> detailList = orderNo.getDetailList();
UnclaimedDetail unclaimedDetail = null;
for (UnclaimedDetail detail : detailList) {
//如果相同的话,判断数量是否大于需求数量
if (detail.getPartno().equals(codePartNumber)) {
if (detail.getAlrInQty() + codeBarcode.getQty() <= detail.getApplyQty()) {
unclaimedDetail = detail;
break;
}
}
}
if (unclaimedDetail == null) {
return ResultBean.newErrorResult(-1,"",codePartNumber+"没有入出库需求,请检查是否存在或者不符合入出库数量");
}
// 出库单已出库数量加
unclaimedDetail.setAlrInQty(unclaimedDetail.getAlrInQty()+ codeBarcode.getQty());
orderNo.updateDetailList(unclaimedDetail);
log.info("开始判断是否完成出库单");
for (UnclaimedDetail noDetail : orderNo.getDetailList()) {
if (noDetail.getApplyQty() > noDetail.getAlrInQty()) {
log.info("出库未完成");
finish = false;
break;
}
log.info("出料noDetail.getApplyQty()"+noDetail.getApplyQty()+"noDetail.getAlrInQty()"+noDetail.getAlrInQty());
}
if (finish){
orderNo.setUnclaimedStatus(SpareNostatus.CLOSE_STATUS);
}
orderNoCache.addToMap(orderNo);
unclaimedManager.save(orderNo);
} }
...@@ -192,4 +163,50 @@ public class SpBoxCheckOutController { ...@@ -192,4 +163,50 @@ public class SpBoxCheckOutController {
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
private String handleOrderNo(LiteOrder liteOrder, String orderItemId, int amount) {
List<LiteOrderItem> newOrderItemList = new ArrayList<>();
List<LiteOrderItem> orderItemList = liteOrder.getOrderItems();
for (LiteOrderItem item : orderItemList) {
if (item.getId().equals(orderItemId)) {
if (item.getTotalOutNum() - item.getNeedNum() <= 0) {
return liteOrder.getOrderNo() + "预约单中:" + item.getPn() + "已经出库完成,不允许出库";
}
int totalOutNum = item.getTotalOutNum();
item.setTotalOutNum(totalOutNum + amount);
liteOrderItemManager.save(item);
}
newOrderItemList.add(item);
}
liteOrder.setOrderItems(newOrderItemList);
handleStatusOrderNo(liteOrder);
return "";
}
private void handleStatusOrderNo(LiteOrder liteOrder) {
boolean close = true;
for (LiteOrderItem orderItem : liteOrder.getOrderItems()) {
if (orderItem.getTotalOutNum() < orderItem.getNeedNum()){
close = false;
break;
}
}
if (close){
liteOrder.setClosed(true);
liteOrder.setStatus(LITEORDER_STATUS.CLOSED);
}
//判断是否还有其他任务
int count = barcodeManager.countByQuery(new Query(Criteria.where("orderId").is(liteOrder.getId())));
if (count <= 0){
liteOrderCache.finishedOrderTasks(liteOrder);
}
liteOrderCache.addOrderToMap(liteOrder);
liteOrderManager.save(liteOrder);
}
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!