skyouc
6 天以前 273f2e5d3941b0e720e5eabd7dba9cfc042c3267
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -32,6 +32,7 @@
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import com.vincent.rsf.server.manager.enums.WaveRuleType;
@@ -278,13 +279,13 @@
        if (Objects.isNull(ids) || ids.isEmpty()) {
            throw new CoolException("参数不能为空!!");
        }
        List<AsnOrder> orders = this.list(new LambdaQueryWrapper<AsnOrder>()
                .in(AsnOrder::getId, ids)
                .eq(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val));
        List<AsnOrder> orders = this.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, ids));
        if (orders.isEmpty()) {
            throw new CoolException("当前单据状态不能执行波次生成操作!!");
        }
        double sum = orders.stream().mapToDouble(AsnOrder::getAnfme).sum();
        Double sum = orders.stream().mapToDouble(AsnOrder::getAnfme).sum();
        Double workQty = orders.stream().mapToDouble(AsnOrder::getWorkQty).sum();
        Double anfme = Math.round((sum - workQty) * 10000) / 10000.0;
        Wave wave = new Wave();
        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAVE_TYPE, null);
        if (Objects.isNull(ruleCode) || StringUtils.isBlank(ruleCode)) {
@@ -294,7 +295,7 @@
                .setType(Short.parseShort("1"))
                .setCode(ruleCode)
                .setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_INIT.val)
                .setAnfme(sum);
                .setAnfme(anfme);
        if (!waveService.save(wave)) {
            throw new CoolException("波次保存失败!!");
        }
@@ -305,13 +306,13 @@
        if (orderItems.isEmpty()) {
            throw new CoolException("单据不存在!!");
        }
        //合并物料,生成波次明细
        List<WaveItem> waveItems = mergeWave(orderItems, wave);
        if (!waveItemService.saveBatch(waveItems)) {
            throw new CoolException("波次明细保存失败!!");
        }
        double sum1 = waveItems.stream().mapToDouble(WaveItem::getAnfme).sum();
        wave.setAnfme(sum1);
        wave.setAnfme(sum1).setGroupQty(waveItems.size());
        if (!waveService.saveOrUpdate(wave)) {
            throw new CoolException("主单修改失败!!");
        }
@@ -324,14 +325,17 @@
            throw new CoolException("出库单执行数量修改失败!!");
        }
        double sum2 = orderItems.stream().mapToDouble(AsnOrderItem::getWorkQty).sum();
        if (!this.update(new LambdaUpdateWrapper<AsnOrder>()
                .set(AsnOrder::getWaveId, wave.getId())
                .set(AsnOrder::getWorkQty, sum2)
                .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WAVE.val)
                .in(AsnOrder::getId, ids))) {
            throw new CoolException("执行状态修改修改失败!!");
        for (AsnOrder order : orders) {
            Double wkQty = Math.round((order.getWorkQty() + order.getAnfme()) * 10000) / 10000.0;
            if (!this.update(new LambdaUpdateWrapper<AsnOrder>()
                    .set(AsnOrder::getWaveId, wave.getId())
                    .set(AsnOrder::getWorkQty, wkQty)
                    .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WAVE.val)
                    .in(AsnOrder::getId, ids))) {
                throw new CoolException("执行状态修改修改失败!!");
            }
        }
        return R.ok("操作完成!!");
    }
@@ -441,12 +445,14 @@
            throw new CoolException("参数不能为空!!");
        }
        //优先生成浅库位任务
        List<OutStockToTaskParams> Items = params.stream().sorted(Comparator.comparing(OutStockToTaskParams::getLocCode).thenComparing(item -> {
        List<OutStockToTaskParams> Items = params.stream()
                .sorted(Comparator.comparing(OutStockToTaskParams::getLocCode)
                        .thenComparing(item -> {
            return LocUtils.isShallowLoc(item.getLocCode()) ? 1 : 0;
        }).reversed()).collect(Collectors.toList());
        for (OutStockToTaskParams param : Items) {
            if (Objects.isNull(param)) {
            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()));
@@ -584,6 +590,10 @@
        locItemQueryWrapper.apply(applySql);
        List<LocItem> locItems = locItemService.list(locItemQueryWrapper);
        locItems.sort(Comparator.comparing((LocItem item) -> !LocUtils.isShallowLoc(item.getLocCode())));
        List<LocItem> locsSet = locItems.stream().filter(locItem -> locItem.getAnfme().compareTo(asnOrderItem.getAnfme()) == 0.0).collect(Collectors.toList());
        if (!locsSet.isEmpty()) {
            return locsSet;
        }
        return locItems;
    }
@@ -618,33 +628,13 @@
                continue;
            }
            List<LocItem> locItems = new ArrayList<>();
            List<LocItem> items = locItemService.list(new LambdaQueryWrapper<LocItem>()
                    .eq(StringUtils.isNotBlank(asnOrderItem.getSplrBatch()), LocItem::getBatch, asnOrderItem.getSplrBatch())
                    .eq(StringUtils.isNotBlank(asnOrderItem.getFieldsIndex()), LocItem::getFieldsIndex, asnOrderItem.getFieldsIndex())
                    .eq(StringUtils.isNotBlank(asnOrderItem.getPlatOrderCode()), LocItem::getPlatOrderCode, asnOrderItem.getPlatOrderCode())
                    .eq(LocItem::getAnfme, asnOrderItem.getAnfme())
                    .eq(LocItem::getMatnrId, asnOrderItem.getMatnrId()));
            if (!items.isEmpty()) {
                for (LocItem item : items) {
                    if (LocUtils.isShallowLoc(item.getLocCode())) {
                        locItems.add(item);
                    }
                }
                if (locItems.isEmpty()) {
                    locItems.addAll(items);
                }
            if (WaveRuleType.Efficiency_First.type.equals(waveRule.getType())) {
                locItems = getEfficiencyFirstItemList(asnOrderItem);
            } else if (WaveRuleType.First_In_First_Out.type.equals(waveRule.getType())) {
                locItems = getFirstInFirstOutItemList(asnOrderItem);
            } else {
                locItems = getFirstInFirstOutItemList(asnOrderItem);
            }
            if (locItems.isEmpty()) {
                if (WaveRuleType.Efficiency_First.type.equals(waveRule.getType())) {
                    locItems = getEfficiencyFirstItemList(asnOrderItem);
                } else if (WaveRuleType.First_In_First_Out.type.equals(waveRule.getType())) {
                    locItems = getFirstInFirstOutItemList(asnOrderItem);
                } else {
                    locItems = getFirstInFirstOutItemList(asnOrderItem);
                }
            }
            for (LocItem locItem : locItems) {
                Loc loc = locService.getById(locItem.getLocId());
                List<LocItem> itemList = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocCode, locItem.getLocCode()));
@@ -679,8 +669,6 @@
                        issued = issued.subtract(new BigDecimal(locItem.getAnfme().toString()));
                    }
                } else {
                }
            }
            if (issued.doubleValue() > 0) {
@@ -714,12 +702,11 @@
    private List<WaveItem> mergeWave(List<AsnOrderItem> orderItems, Wave wave) {
        List<WaveItem> items = new ArrayList<>();
        orderItems.forEach(order -> {
            Double anfme = Math.round((order.getAnfme() - order.getWorkQty()) * 10000) / 10000.0;
            WaveItem item = new WaveItem();
            BeanUtils.copyProperties(order, item);
            item.setOrderItemId(order.getId())
                    .setId(null)
                    .setOrderCode(order.getAsnCode())
                    .setOrderId(order.getAsnId())
                item.setId(null)
                    .setAnfme(anfme)
                    .setMatnrId(order.getMatnrId())
                    .setMaktx(order.getMaktx())
                    .setWaveId(wave.getId())
@@ -752,7 +739,7 @@
                        p1.getUpdateBy(),
                        p1.getMemo()
                ),
                WaveItem::getSplrBatch, WaveItem::getMatnrCode, WaveItem::getFieldsIndex
                WaveItem::getSplrBatch, WaveItem::getMatnrId, WaveItem::getFieldsIndex
        );
        return waveItems;