cl
2 天以前 ccfa611b6c2e128c0e8191e458302a85cbf8c4ee
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -265,7 +265,7 @@
        }
        WkOrder order = this.getById(id);
        if (Objects.isNull(order)) {
            throw new CoolException("单据不存在!!");
            return R.ok("单据已不存在或已取消");
        }
        if (!order.getExceStatus().equals(AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)) {
            throw new CoolException("当前单据状态为" + AsnExceStatus.getExceStatus(order.getExceStatus()) + ", 不可执行取消操作!!");
@@ -295,10 +295,10 @@
        }
        if (!this.remove(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getId, id))) {
            throw new CoolException("主单删除失败!!");
            return R.ok("单据已不存在或已取消");
        }
        outStockItemService.remove(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, id));
        return R.ok("操作成功");
        return R.ok("取消成功");
    }
    /**
@@ -755,16 +755,11 @@
                        .findFirst()
                        .orElse(null);
                // 严格匹配未找到时:再按「同单号+同物料」宽松匹配,避免原明细 fields_index 为空而分配带票号导致重复创建一条
                // 严格匹配未找到时:按「同单号+同物料+有剩余」匹配,不按批次,避免出库不检查批次时选到不同批次库位却自动新增一条出库单明细
                if (Objects.isNull(orderItem)) {
                    LambdaQueryWrapper<WkOrderItem> relaxedWrapper = new LambdaQueryWrapper<WkOrderItem>()
                            .eq(WkOrderItem::getOrderId, outId)
                            .eq(WkOrderItem::getMatnrId, locItem.getMatnrId());
                    if (StringUtils.isNotBlank(locItem.getSplrBatch())) {
                        relaxedWrapper.eq(WkOrderItem::getSplrBatch, locItem.getSplrBatch());
                    } else if (StringUtils.isNotBlank(locItem.getBatch())) {
                        relaxedWrapper.and(w -> w.eq(WkOrderItem::getBatch, locItem.getBatch()).or().eq(WkOrderItem::getSplrBatch, locItem.getBatch()));
                    }
                    orderItem = outStockItemService.list(relaxedWrapper).stream()
                            .filter(o -> o.getAnfme() != null && o.getWorkQty() != null && o.getAnfme().compareTo(o.getWorkQty()) > 0)
                            .findFirst()
@@ -894,11 +889,13 @@
    @Transactional(rollbackFor = Exception.class)
    public R cancelOutOrderByItems(List<WkOrderItem> orderItems) {
        Map<Long, List<WkOrderItem>> listMap = orderItems.stream().collect(Collectors.groupingBy(WkOrderItem::getOrderId));
        boolean anyProcessed = false;
        for (Long key : listMap.keySet()) {
            WkOrder order = this.getById(key);
            if (Objects.isNull(order)) {
                throw new CoolException("单据不存在!!");
                continue;
            }
            anyProcessed = true;
            List<WkOrderItem> items = listMap.get(key);
            if (!items.isEmpty()) {
                for (WkOrderItem orderItem : items) {
@@ -921,14 +918,11 @@
            }
            if (!this.remove(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getId, key))) {
                throw new CoolException("主单删除失败!!");
                continue;
            }
            if (!outStockItemService.remove(new LambdaQueryWrapper<WkOrderItem>()
                    .eq(WkOrderItem::getOrderId, key))) {
                throw new CoolException("单据明细删除失败!!");
            }
            outStockItemService.remove(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, key));
        }
        return R.ok("操作成功");
        return R.ok(anyProcessed ? "取消成功" : "单据已不存在或已取消");
    }
@@ -943,13 +937,14 @@
            if (issued.compareTo(ISSUED_TOLERANCE) <= 0) {
                continue;
            }
            // 出库分配不按批次过滤,仅按物料编码查库位,便于正常检测到可出库库存
            List<LocItem> locItems = new ArrayList<>();
            if (WaveRuleType.Efficiency_First.type.equals(waveRule.getType())) {
                locItems = LocManageUtil.getEfficiencyFirstItemList(wkOrderItem.getMatnrCode(), wkOrderItem.getSplrBatch(), wkOrderItem.getAnfme());
                locItems = LocManageUtil.getEfficiencyFirstItemList(wkOrderItem.getMatnrCode(), null, wkOrderItem.getAnfme());
            } else if (WaveRuleType.First_In_First_Out.type.equals(waveRule.getType())) {
                locItems = LocManageUtil.getFirstInFirstOutItemList(wkOrderItem.getMatnrCode(), wkOrderItem.getSplrBatch(), wkOrderItem.getAnfme());
                locItems = LocManageUtil.getFirstInFirstOutItemList(wkOrderItem.getMatnrCode(), null, wkOrderItem.getAnfme());
            } else {
                locItems = LocManageUtil.getFirstInFirstOutItemList(wkOrderItem.getMatnrCode(), wkOrderItem.getSplrBatch(), wkOrderItem.getAnfme());
                locItems = LocManageUtil.getFirstInFirstOutItemList(wkOrderItem.getMatnrCode(), null, wkOrderItem.getAnfme());
            }
            for (LocItem locItem : locItems) {
                Loc loc = locService.getById(locItem.getLocId());