fix(order): 修复生产订单状态检查和无码收货功能
- 添加订单状态为1时返回空列表的逻辑 - 移除对订单项数量小于等于0的过滤条件 - 修改无码收货接口参数结构,从列表改为单个对象 - 简化无码收货流程中的订单验证和票据创建逻辑 - 优化循环结构,移除重复的订单查询操作 - 统一物料号匹配和二维码存在性检查的处理方式
This commit is contained in:
parent
e3b7642c6b
commit
23f0dd176b
|
|
@ -431,11 +431,13 @@ public class InProduceOrderController extends BaseController {
|
|||
.eq(StrUtil.isNotBlank(no), WmsInProduceOrder::getNo, no)
|
||||
.one();
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
|
||||
if (order.getState()==1){
|
||||
return ApiResult.success(Collections.emptyList());
|
||||
}
|
||||
List<WmsInProduceOrderItem> items = produceOrderItemService.lambdaQuery()
|
||||
.eq(WmsInProduceOrderItem::getOrderId, order.getId())
|
||||
.list();
|
||||
items.removeIf(item -> item.getNum().compareTo(BigDecimal.ZERO) <= 0
|
||||
|| noScanningBaseControllerService.existsQrCode(item.getMaterialNo()));
|
||||
items.removeIf(item -> noScanningBaseControllerService.existsQrCode(item.getMaterialNo()));
|
||||
return ApiResult.success(
|
||||
items.stream()
|
||||
.map(item -> new NoScanItemVO()
|
||||
|
|
|
|||
|
|
@ -433,108 +433,98 @@ public class InProduceOrderSurplusController extends BaseController {
|
|||
|
||||
/**
|
||||
* 无码收货和入库
|
||||
* @param requests 请求参数
|
||||
* @param request 请求参数
|
||||
*/
|
||||
@Transactional
|
||||
@PostMapping("receiveNoScanning")
|
||||
public ApiResult<Void> receiveNoScanning(@Valid @RequestBody @NotEmpty List<NoScanningRequest> requests) {
|
||||
public ApiResult<Void> receiveNoScanning(@Valid @RequestBody NoScanningRequest request) {
|
||||
List<InventoryInDTO> inventories = new ArrayList<>();
|
||||
Map<String, ZWM3A22Input1QO> input1Map = new LinkedHashMap<>();
|
||||
Map<String, ZWM3A22Input2QO> input2Map = new LinkedHashMap<>();
|
||||
Set<Long> orderIds = new HashSet<>();
|
||||
Set<String> warehouseNos = new HashSet<>();
|
||||
WmsInProduceOrderSurplusTicket ticket = null;
|
||||
List<WmsInProduceOrderSurplusItem> orderItemsToUpdate = new ArrayList<>();
|
||||
List<WmsInProduceOrderSurplusTicketItem> ticketItems = new ArrayList<>();
|
||||
WmsInProduceOrderSurplus order = null;
|
||||
|
||||
for (NoScanningRequest request : requests) {
|
||||
order = inProduceOrderSurplusService.lambdaQuery()
|
||||
.eq(Objects.nonNull(request.getId()), WmsInProduceOrderSurplus::getId, request.getId())
|
||||
.eq(StrUtil.isNotBlank(request.getNo()), WmsInProduceOrderSurplus::getNo, request.getNo())
|
||||
.one();
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
|
||||
WmsInProduceOrderSurplus currentOrder = order;
|
||||
List<WmsInProduceOrderSurplusItem> orderItems = inProduceOrderSurplusItemService.lambdaQuery()
|
||||
.eq(WmsInProduceOrderSurplusItem::getOrderId, currentOrder.getId())
|
||||
.list();
|
||||
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orderItems)).throwMessage("订单项不存在");
|
||||
Map<Long, WmsInProduceOrderSurplusItem> orderItemMap = orderItems.stream()
|
||||
.collect(Collectors.toMap(WmsInProduceOrderSurplusItem::getId, item -> item));
|
||||
orderIds.add(currentOrder.getId());
|
||||
VUtil.trueThrowBusinessError(orderIds.size() != 1).throwMessage("请一次只提交同一个订单的无码收货");
|
||||
warehouseNos.addAll(request.getItems().stream().map(NoScanningItemRequest::getWarehouseNo).collect(Collectors.toSet()));
|
||||
VUtil.trueThrowBusinessError(warehouseNos.size() != 1).throwMessage("请一次只提交同一个库存地点的无码收货");
|
||||
if (ticket == null) {
|
||||
ticket = new WmsInProduceOrderSurplusTicket()
|
||||
.setId(IdUtil.getSnowflakeNextId())
|
||||
.setNo(serialNumberControllerService.generateSerialNumber(25))
|
||||
.setOrderId(currentOrder.getId())
|
||||
.setLgort(warehouseNos.iterator().next())
|
||||
.setType(1)
|
||||
.setCreateBy(UserUtil.getUserName())
|
||||
.setCreateTime(LocalDateTime.now());
|
||||
}
|
||||
WmsInProduceOrderSurplus order = inProduceOrderSurplusService.lambdaQuery()
|
||||
.eq(Objects.nonNull(request.getId()), WmsInProduceOrderSurplus::getId, request.getId())
|
||||
.eq(StrUtil.isNotBlank(request.getNo()), WmsInProduceOrderSurplus::getNo, request.getNo())
|
||||
.one();
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
|
||||
List<WmsInProduceOrderSurplusItem> orderItems = inProduceOrderSurplusItemService.lambdaQuery()
|
||||
.eq(WmsInProduceOrderSurplusItem::getOrderId, order.getId())
|
||||
.list();
|
||||
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orderItems)).throwMessage("订单项不存在");
|
||||
Map<Long, WmsInProduceOrderSurplusItem> orderItemMap = orderItems.stream()
|
||||
.collect(Collectors.toMap(WmsInProduceOrderSurplusItem::getId, item -> item));
|
||||
warehouseNos.addAll(request.getItems().stream().map(NoScanningItemRequest::getWarehouseNo).collect(Collectors.toSet()));
|
||||
VUtil.trueThrowBusinessError(warehouseNos.size() != 1).throwMessage("请一次只提交同一个库存地点的无码收货");
|
||||
WmsInProduceOrderSurplusTicket ticket = new WmsInProduceOrderSurplusTicket()
|
||||
.setId(IdUtil.getSnowflakeNextId())
|
||||
.setNo(serialNumberControllerService.generateSerialNumber(25))
|
||||
.setOrderId(order.getId())
|
||||
.setLgort(warehouseNos.iterator().next())
|
||||
.setType(1)
|
||||
.setCreateBy(UserUtil.getUserName())
|
||||
.setCreateTime(LocalDateTime.now());
|
||||
|
||||
for (NoScanningItemRequest item : request.getItems()) {
|
||||
WmsInProduceOrderSurplusItem orderItem = orderItemMap.get(item.getOrderItemId());
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(orderItem)).throwMessage("订单项不存在");
|
||||
VUtil.trueThrowBusinessError(!StrUtil.equals(item.getMaterialNo(), orderItem.getMatnr()))
|
||||
.throwMessage("订单项与物料不匹配:" + item.getMaterialNo());
|
||||
VUtil.trueThrowBusinessError(noScanningBaseControllerService.existsQrCode(orderItem.getMatnr()))
|
||||
.throwMessage("物料" + orderItem.getMatnr() + "已生成二维码,不允许无码收货");
|
||||
for (NoScanningItemRequest item : request.getItems()) {
|
||||
WmsInProduceOrderSurplusItem orderItem = orderItemMap.get(item.getOrderItemId());
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(orderItem)).throwMessage("订单项不存在");
|
||||
VUtil.trueThrowBusinessError(!StrUtil.equals(item.getMaterialNo(), orderItem.getMatnr()))
|
||||
.throwMessage("订单项与物料不匹配:" + item.getMaterialNo());
|
||||
VUtil.trueThrowBusinessError(noScanningBaseControllerService.existsQrCode(orderItem.getMatnr()))
|
||||
.throwMessage("物料" + orderItem.getMatnr() + "已生成二维码,不允许无码收货");
|
||||
|
||||
BigDecimal totalNum = item.getDatas().stream()
|
||||
.peek(data -> VUtil.trueThrowBusinessError(Objects.isNull(data.getNum()) || data.getNum().compareTo(BigDecimal.ZERO) <= 0)
|
||||
.throwMessage("物料" + orderItem.getMatnr() + "的无码收货数量必须大于0"))
|
||||
.map(NoScanningItemDataRequest::getNum)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
VUtil.trueThrowBusinessError(totalNum.compareTo(orderItem.getLeftNum()) > 0)
|
||||
.throwMessage("物料" + orderItem.getMatnr() + "的无码收货数量超出可入库数量");
|
||||
orderItem.setLeftNum(orderItem.getLeftNum().subtract(totalNum));
|
||||
orderItemsToUpdate.add(orderItem);
|
||||
BigDecimal totalNum = item.getDatas().stream()
|
||||
.peek(data -> VUtil.trueThrowBusinessError(Objects.isNull(data.getNum()) || data.getNum().compareTo(BigDecimal.ZERO) <= 0)
|
||||
.throwMessage("物料" + orderItem.getMatnr() + "的无码收货数量必须大于0"))
|
||||
.map(NoScanningItemDataRequest::getNum)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
VUtil.trueThrowBusinessError(totalNum.compareTo(orderItem.getLeftNum()) > 0)
|
||||
.throwMessage("物料" + orderItem.getMatnr() + "的无码收货数量超出可入库数量");
|
||||
orderItem.setLeftNum(orderItem.getLeftNum().subtract(totalNum));
|
||||
orderItemsToUpdate.add(orderItem);
|
||||
|
||||
item.getDatas().forEach(data -> {
|
||||
inventories.add(new InventoryInDTO()
|
||||
.setMaterialNo(orderItem.getMatnr())
|
||||
.setFactoryNo(currentOrder.getDwerk())
|
||||
.setWarehouseNo(item.getWarehouseNo())
|
||||
.setBatchNo(StrUtil.blankToDefault(data.getBatchNo(), ""))
|
||||
.setSerialNo(StrUtil.blankToDefault(data.getSerialNo(), ""))
|
||||
.setBinLocation(StrUtil.blankToDefault(data.getBinNo(), ""))
|
||||
.setNum(data.getNum())
|
||||
);
|
||||
String input1Key = orderItem.getRspos() + "|" + orderItem.getMatnr() + "|" + StrUtil.blankToDefault(data.getBatchNo(), "") + "|" + item.getWarehouseNo();
|
||||
input1Map.merge(input1Key, new ZWM3A22Input1QO()
|
||||
.setRspos(orderItem.getRspos())
|
||||
.setMatnr(orderItem.getMatnr())
|
||||
.setMaktx(orderItem.getMaktx2())
|
||||
.setWerks(currentOrder.getDwerk())
|
||||
.setLgort(item.getWarehouseNo())
|
||||
.setMenge(data.getNum())
|
||||
.setMenge_t(BigDecimal.ZERO)
|
||||
.setMeins(orderItem.getMeins())
|
||||
.setCharg(StrUtil.blankToDefault(data.getBatchNo(), "")), (e, i) -> {
|
||||
e.setMenge(e.getMenge().add(i.getMenge()));
|
||||
return e;
|
||||
});
|
||||
if (StrUtil.isNotBlank(data.getSerialNo())) {
|
||||
String input2Key = orderItem.getRspos() + "|" + data.getSerialNo();
|
||||
input2Map.putIfAbsent(input2Key, new ZWM3A22Input2QO()
|
||||
.setRspos(orderItem.getRspos())
|
||||
.setSernr(data.getSerialNo()));
|
||||
}
|
||||
item.getDatas().forEach(data -> {
|
||||
inventories.add(new InventoryInDTO()
|
||||
.setMaterialNo(orderItem.getMatnr())
|
||||
.setFactoryNo(order.getDwerk())
|
||||
.setWarehouseNo(item.getWarehouseNo())
|
||||
.setBatchNo(StrUtil.blankToDefault(data.getBatchNo(), ""))
|
||||
.setSerialNo(StrUtil.blankToDefault(data.getSerialNo(), ""))
|
||||
.setBinLocation(StrUtil.blankToDefault(data.getBinNo(), ""))
|
||||
.setNum(data.getNum())
|
||||
);
|
||||
String input1Key = orderItem.getRspos() + "|" + orderItem.getMatnr() + "|" + StrUtil.blankToDefault(data.getBatchNo(), "") + "|" + item.getWarehouseNo();
|
||||
input1Map.merge(input1Key, new ZWM3A22Input1QO()
|
||||
.setRspos(orderItem.getRspos())
|
||||
.setMatnr(orderItem.getMatnr())
|
||||
.setMaktx(orderItem.getMaktx2())
|
||||
.setWerks(order.getDwerk())
|
||||
.setLgort(item.getWarehouseNo())
|
||||
.setMenge(data.getNum())
|
||||
.setMenge_t(BigDecimal.ZERO)
|
||||
.setMeins(orderItem.getMeins())
|
||||
.setCharg(StrUtil.blankToDefault(data.getBatchNo(), "")), (e, i) -> {
|
||||
e.setMenge(e.getMenge().add(i.getMenge()));
|
||||
return e;
|
||||
});
|
||||
ticketItems.add(new WmsInProduceOrderSurplusTicketItem()
|
||||
.setId(IdUtil.getSnowflakeNextId())
|
||||
.setTicketId(ticket.getId())
|
||||
.setOrderItemId(orderItem.getId())
|
||||
.setLgpbe(StrUtil.join(",", item.getDatas().stream()
|
||||
.map(NoScanningItemDataRequest::getBinNo)
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.toList()))
|
||||
.setNum(totalNum));
|
||||
}
|
||||
if (StrUtil.isNotBlank(data.getSerialNo())) {
|
||||
String input2Key = orderItem.getRspos() + "|" + data.getSerialNo();
|
||||
input2Map.putIfAbsent(input2Key, new ZWM3A22Input2QO()
|
||||
.setRspos(orderItem.getRspos())
|
||||
.setSernr(data.getSerialNo()));
|
||||
}
|
||||
});
|
||||
ticketItems.add(new WmsInProduceOrderSurplusTicketItem()
|
||||
.setId(IdUtil.getSnowflakeNextId())
|
||||
.setTicketId(ticket.getId())
|
||||
.setOrderItemId(orderItem.getId())
|
||||
.setLgpbe(StrUtil.join(",", item.getDatas().stream()
|
||||
.map(NoScanningItemDataRequest::getBinNo)
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.toList()))
|
||||
.setNum(totalNum));
|
||||
}
|
||||
|
||||
inventoryService.in(mergeInventories(inventories));
|
||||
|
|
|
|||
Loading…
Reference in New Issue