1
1 天以前 258f0142619bb02db69c0f7006ca5bcc75d7a2e4
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -6,6 +6,7 @@
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.api.controller.erp.params.SyncOrderParams;
import com.vincent.rsf.server.api.utils.LocUtils;
import com.vincent.rsf.server.common.constant.Constants;
import com.vincent.rsf.server.manager.controller.dto.ExistDto;
@@ -382,11 +383,12 @@
            throw new CoolException("业务类型不能为空!!");
        }
        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_OUT_STOCK_CODE, orders);
        if (StringUtils.isBlank(ruleCode)) {
            throw new CoolException("编码规则错误:请检查「SYS_OUT_STOCK_CODE」是否设置正确!!");
        }
        orders.setCode(ruleCode)
//        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_OUT_STOCK_CODE, orders);
//        if (StringUtils.isBlank(ruleCode)) {
//            throw new CoolException("编码规则错误:请检查「SYS_OUT_STOCK_CODE」是否设置正确!!");
//        }
        orders.setCode(orders.getPoCode())
                .setWkType(OrderWorkType.ORDER_WORK_TYPE_STOCK_UP.type)
                .setType(OrderType.ORDER_OUT.type)
                .setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)
                .setUpdateBy(loginUserId)
@@ -481,6 +483,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,7 +515,7 @@
            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;
@@ -505,32 +525,67 @@
        if (Cools.isEmpty(wkOrder)) {
            throw new CoolException("单据不存在!!");
        }
        for (OutStockToTaskParams param : Items) {
        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)
@@ -549,19 +604,10 @@
                    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)) {