Commit 925fbf53 zshaohui

料盘从料箱中出库

1 个父辈 eec0d5ef
......@@ -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.device.enums.OP;
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.po.StoragePos;
import com.neotel.smfcore.core.system.service.po.DataLog;
......@@ -31,6 +37,8 @@ import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -59,6 +67,15 @@ public class SpBoxCheckOutController {
@Autowired
private OrderNoCache orderNoCache;
@Autowired
private ILiteOrderManager liteOrderManager;
@Autowired
private LiteOrderCache liteOrderCache;
@Autowired
private ILiteOrderItemManager liteOrderItemManager;
......@@ -96,70 +113,24 @@ public class SpBoxCheckOutController {
return ResultBean.newErrorResult(-1, "", codeStr + "不是有效的条码");
}
//判断有没有正在执行出库单
Unclaimed orderNo = orderNoCache.getExecutingOrderNo();
if (ObjectUtil.isAllEmpty(orderNo)) {
return ResultBean.newErrorResult(-1,"","没有找到正在执行的出库单");
//3.判断当前需不需要出库
String itemId = binBarcode.getOrderItemId();
if (StringUtils.isEmpty(itemId)){
return ResultBean.newErrorResult(-1,"",codeStr+"没有要出库的任务");
}
boolean isOk = false;
String codePartNumber = codeBarcode.getPartNumber();
for (Barcode barcode : boxBarcode.getSubCodeList()) {
String pn = barcode.getPartNumber();
int binNum = Integer.parseInt(barcode.getBarcode().split("-")[1]);
if (pn.equals(codePartNumber) && (binNum == Integer.parseInt(binCodeStr.split("-")[1]))) {
isOk = true;
break;
}
}
if (!isOk) {
return ResultBean.newErrorResult(-1, "", codeStr + "与隔口:" + binCodeStr + "的料号不匹配");
//4.获取当前预约单
String orderId = binBarcode.getOrderId();
LiteOrder liteOrder = liteOrderManager.get(orderId);
LiteOrder newLiteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo());
if (newLiteOrder == null){
newLiteOrder = liteOrderManager.findByOrderNo(liteOrder.getOrderNo());
}
//判断是否已经完成了
boolean finish = true;
//判断当前出库的是否和出库单一样
if (orderNo != null) {
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);
//判断所属的工单任务是否完成
String result = handleOrderNo(newLiteOrder, itemId, codeBarcode.getQty());
if (StringUtils.isNotEmpty(result)){
return ResultBean.newErrorResult(-1,"",result);
}
......@@ -192,4 +163,50 @@ public class SpBoxCheckOutController {
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!