1
昨天 d11eff090fb94927fa98a594b6c7ab4d3f04f3cd
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -481,6 +481,24 @@
        return R.ok(locItems);
    }
    @Override
    public List<OrderOutItemDto>  getOrderOutTaskItemAuto(OrderOutTaskParam param) {
        if (Cools.isEmpty(param.getWaveId())) {
            throw new CoolException("策略参数为空");
        }
        if (Cools.isEmpty(param.getOrderId())) {
            throw new CoolException("单据ID为空");
        }
        WaveRule waveRule = waveRuleService.getOne(new LambdaQueryWrapper<WaveRule>()
                .eq(WaveRule::getId, param.getWaveId()));
        if (Cools.isEmpty(waveRule)) {
            throw new CoolException("未找到当前策略");
        }
        List<OrderOutItemDto> locItems = null;
        locItems = getOutOrderList(param.getOrderId(), waveRule);
        return locItems;
    }
    /**
     * 生成出库任务
     *
@@ -495,37 +513,77 @@
            throw new CoolException("参数不能为空!!");
        }
        //优先生成浅库位任务
        List<OutStockToTaskParams> Items = params.stream()
        List<OutStockToTaskParams> itemList = params.stream()
                .sorted(Comparator.comparing(OutStockToTaskParams::getLocCode)
                        .thenComparing(item -> {
            return LocUtils.isShallowLoc(item.getLocCode()) ? 1 : 0;
        }).reversed()).collect(Collectors.toList());
        for (OutStockToTaskParams param : Items) {
        WkOrder wkOrder = outStockService.getById(outId);
        if (Cools.isEmpty(wkOrder)) {
            throw new CoolException("单据不存在!!");
        }
        List<List<OutStockToTaskParams>> itemLists = new ArrayList<>();
        List<String> locList = new ArrayList<>();
        for (OutStockToTaskParams item : itemList) {
            if (!locList.contains(item.getLocCode())) {
                List<OutStockToTaskParams> items = new ArrayList<>();
                locList.add(item.getLocCode());
                items.add(item);
                itemLists.add(items);
            } else {
                for (List<OutStockToTaskParams> items : itemLists){
                    boolean sign = false;
                    for (OutStockToTaskParams itemOld : items) {
                        if (itemOld.getLocCode().equals(item.getLocCode())) {
                            sign = true;
                            items.add(item);
                        }
                        break;
                    }
                    if (sign) {
                        break;
                    }
                }
            }
        }
        for (List<OutStockToTaskParams> items : itemLists){
            OutStockToTaskParams param = items.get(0);
            if (Objects.isNull(param) || StringUtils.isBlank(param.getLocCode())) {
                continue;
            }
            Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, param.getLocCode()).eq(Loc::getBarcode, param.getBarcode()));
            if (!Objects.isNull(loc)) {
                List<LocItem> locItems = new ArrayList<>();
                LocItem locItem = locItemService.getById(param.getId());
                for (OutStockToTaskParams itemOld : items) {
                    LocItem locItem = locItemService.getById(itemOld.getId());
                WkOrderItem orderItem = outStockItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
                        .eq(WkOrderItem::getOrderId, outId)
                        .eq(StringUtils.isNotBlank(locItem.getBatch()), WkOrderItem::getSplrBatch, locItem.getBatch())
                        .eq(StringUtils.isNotBlank(locItem.getFieldsIndex()), WkOrderItem::getFieldsIndex, locItem.getFieldsIndex())
                        .eq(WkOrderItem::getMatnrId, locItem.getMatnrId()));
                    WkOrderItem orderItem = outStockItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
                            .eq(WkOrderItem::getOrderId, outId)
//                        .eq(StringUtils.isNotBlank(locItem.getBatch()), WkOrderItem::getSplrBatch, locItem.getBatch())
                            .eq(WkOrderItem::getMatnrId, locItem.getMatnrId()));
//                        .eq(StringUtils.isNotBlank(locItem.getFieldsIndex()), WkOrderItem::getFieldsIndex, locItem.getFieldsIndex())
                if (Objects.isNull(orderItem)) {
                    throw new CoolException("单据明细不存在!!");
                    if (Objects.isNull(orderItem)) {
                        throw new CoolException("单据明细不存在!!");
                    }
                    locItem.setOutQty(itemOld.getOutQty())
                            .setBatch(itemOld.getBatch())
                            .setSourceId(outId)
                            .setSourceCode(orderItem.getOrderCode())
                            .setSource(orderItem.getId());
                    locItems.add(locItem);
                    Double workQty = Math.round((orderItem.getWorkQty() + locItem.getOutQty()) * 10000) / 10000.0;
                    orderItem.setUpdateBy(loginUserId).setUpdateTime(new Date()).setWorkQty(workQty);
                    if (!outStockItemService.updateById(orderItem)) {
                        throw new CoolException("单据明细修改失败!!");
                    }
                }
                locItem.setOutQty(param.getOutQty())
                        .setBatch(param.getBatch())
                        .setSourceId(outId)
                        .setSourceCode(orderItem.getOrderCode())
                        .setSource(orderItem.getId());
                locItems.add(locItem);
                LocToTaskParams taskParams = new LocToTaskParams();
                taskParams.setType(Constants.TASK_TYPE_ORDER_OUT_STOCK)
@@ -533,26 +591,21 @@
                        .setItems(locItems)
                        .setSourceId(outId)
                        .setSiteNo(param.getSiteNo());
                //增加备货出库类型判断
                Short type = wkOrder.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_UP.type)
                        ?TaskResouceType.TASK_RESOUCE_STOCK_UP.val
                        :TaskResouceType.TASK_RESOUCE_ORDER_TYPE.val;
                try {
                    //生成出库任务
                    locItemService.generateTask(TaskResouceType.TASK_RESOUCE_ORDER_TYPE.val, taskParams, loginUserId);
                    locItemService.generateTask(type, taskParams, loginUserId);
                } catch (Exception e) {
                    logger.error("UNK", e);
                    throw new CoolException(e.getMessage());
                }
                Double workQty = Math.round((orderItem.getWorkQty() + locItem.getOutQty()) * 10000) / 10000.0;
                orderItem.setUpdateBy(loginUserId).setUpdateTime(new Date()).setWorkQty(workQty);
                if (!outStockItemService.updateById(orderItem)) {
                    throw new CoolException("单据明细修改失败!!");
                }
            }
        }
        Double sum = Items.stream().mapToDouble(OutStockToTaskParams::getOutQty).sum();
        Double sum = itemList.stream().mapToDouble(OutStockToTaskParams::getOutQty).sum();
        //更新出库单明细及主单
        WkOrder outOrder = outStockService.getById(outId);
        if (Objects.isNull(outOrder)) {