zhou zhou
18 小时以前 2f8e173048d22c5b40612c3538b9c1aa5a5397f6
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
@@ -19,8 +19,6 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vincent.rsf.server.manager.utils.LocManageUtil;
import com.vincent.rsf.server.manager.utils.OptimalAlgorithmUtil;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -43,17 +41,11 @@
    @Autowired
    private WaveItemService waveItemService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private TaskItemService taskItemService;
    @Autowired
    private LocItemService locItemService;
    @Autowired
    private LocService locService;
    @Autowired
    private OutStockService outStockService;
    @Autowired
    private WaveService waveService;
    @Autowired
    private WaveRuleServiceImpl waveRuleService;
    @Autowired
@@ -96,7 +88,7 @@
                        .setWaveId(item.getWaveId());
                params.add(locParams);
            }
            List<OrderOutItemDto> results = LocManageUtil.getOutOrderList(params, null);
            List<OrderOutItemDto> results = LocManageUtil.getOutOrderList(params, null,waves.getStationId(),waves.getLocCode());
            generateOutTask(results, loginUserId, waves);
        } catch (Exception e) {
            log.error(e.getMessage());
@@ -104,11 +96,7 @@
        }
        List<Long> orderIds = waveItems.stream().map(WaveItem::getOrderId).collect(Collectors.toList());
        /**修改出库单状态*/
        if (!asnOrderService.update(new LambdaUpdateWrapper<AsnOrder>()
                .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WORKING.val)
                .in(AsnOrder::getId, orderIds))) {
            throw new CoolException("出库单据状态修改失败!!");
        }
        updateAsnOrders(orderIds, null, AsnExceStatus.OUT_STOCK_STATUS_TASK_WORKING.val, null, "出库单据状态修改失败!!");
        return R.ok();
    }
@@ -126,16 +114,18 @@
            throw new CoolException("参数不能为空!!");
        }
        List<Long> WaveIds = JSONArray.parseArray(JSON.toJSONString(map.get("ids")), Long.class);
        List<Wave> waves = waveService.listByIds(WaveIds);
        List<Wave> waves = this.listByIds(WaveIds);
        if (Objects.isNull(waves)) {
            throw new CoolException("数据错误: 波次不存在!!");
        }
        for (Wave wave : waves) {
            if (wave.getExceStatus() >= WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val) {
            if (wave.getExceStatus() > WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val) {
                throw new CoolException("当前状态无法下发执行!!");
            }
            List<WaveItem> items = waveItemService.list(new LambdaQueryWrapper<WaveItem>().eq(WaveItem::getWaveId, wave.getId()));
            List<WaveItem> items = waveItemService.list(new LambdaQueryWrapper<WaveItem>()
                    .le(WaveItem::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val)
                    .eq(WaveItem::getWaveId, wave.getId()));
            if (items.isEmpty()) {
                throw new CoolException("波次明细不存在!!");
            }
@@ -161,7 +151,7 @@
                        .setWaveId(item.getWaveId());
                params.add(locParams);
            }
            List<OrderOutItemDto> results = LocManageUtil.getOutOrderList(params, waveRule);
            List<OrderOutItemDto> results = LocManageUtil.getOutOrderList(params, waveRule,wave.getStationId(),wave.getLocCode());
            if (results.isEmpty()) {
                wave.setUpdateBy(loginUserId).setUpdateTime(new Date());
                if (wave.getAnfme().compareTo(wave.getWorkQty()) == 0) {
@@ -170,7 +160,7 @@
                    wave.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val);
                }
                wave.setMemo("-->库存不足");
                waveService.updateById(wave);
                this.updateById(wave);
                return R.ok();
            }
            try {
@@ -205,13 +195,13 @@
                    throw new CoolException("下发执行异常,请稍候重试!");
                }
            }
            if (!waveService.update(new LambdaUpdateWrapper<Wave>()
                    .set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_TASK.val)
                    .set(Wave::getWorkQty, taskItems.stream().mapToDouble(TaskItem::getAnfme).sum())
                    .set(Wave::getUpdateBy, loginUserId)
                    .set(Wave::getUpdateTime, new Date())
                    .eq(Wave::getId, wave.getId()))) {
                throw new CoolException("波次状态修改失败!!");
            Double sum = taskItems.stream().mapToDouble(TaskItem::getAnfme).sum();
            Double v = Math.round((wave.getWorkQty() + sum) * 1000000) / 1000000.0;
            if (wave.getAnfme().compareTo(v) == 0) {
                updateWaveSnapshot(wave, WaveExceStatus.WAVE_EXCE_STATUS_TASK.val, v, loginUserId, null, "波次状态修改失败!!");
            } else {
                updateWaveSnapshot(wave, WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val, v, loginUserId, null, "波次状态修改失败!!");
            }
        }
@@ -244,7 +234,7 @@
        }
        List<Long> orderIds = orderRelas.stream().map(WaveOrderRela::getOrderItemId).collect(Collectors.toList());
        List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().in(AsnOrderItem::getId, orderIds));
        List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().in(WkOrderItem::getId, orderIds));
        orderItems.forEach(asnOrderItem -> {
            asnOrderItem.setWorkQty(0.0);
            if (!asnOrderItemService.updateById(asnOrderItem)) {
@@ -253,18 +243,69 @@
        });
        List<Long> orders = orderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toList());
        if (!asnOrderService.update(new LambdaUpdateWrapper<AsnOrder>()
                .set(AsnOrder::getWorkQty, 0.0)
                .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)
                .in(AsnOrder::getId, orders))) {
            throw new CoolException("单据更新失败!!");
        }
        updateAsnOrders(orders, 0.0, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val, null, "单据更新失败!!");
        this.update(new LambdaUpdateWrapper<Wave>()
                .eq(Wave::getId, id)
                .set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_TASK.val));
        updateWaveSnapshot(wave, WaveExceStatus.WAVE_EXCE_STATUS_TASK.val, null, null, null, "波次状态修改失败!!");
        return R.ok();
    }
    private void updateWaveSnapshot(Wave wave, Short exceStatus, Double workQty, Long loginUserId, String memo, String errorMessage) {
        Wave update = new Wave();
        update.setId(wave.getId());
        update.setVersion(wave.getVersion());
        update.setExceStatus(exceStatus);
        update.setWorkQty(workQty);
        update.setUpdateBy(loginUserId);
        update.setMemo(memo);
        update.setUpdateTime(loginUserId == null ? null : new Date());
        if (!this.updateById(update)) {
            throw new CoolException(errorMessage);
        }
        wave.setExceStatus(exceStatus);
        wave.setWorkQty(workQty);
        wave.setUpdateBy(loginUserId);
        if (loginUserId != null) {
            wave.setUpdateTime(update.getUpdateTime());
        }
        wave.setMemo(memo);
        if (update.getVersion() != null) {
            wave.setVersion(update.getVersion());
        }
    }
    private void updateAsnOrders(List<Long> orderIds, Double workQty, Short exceStatus, Long loginUserId, String errorMessage) {
        if (Cools.isEmpty(orderIds)) {
            return;
        }
        List<WkOrder> orders = asnOrderService.listByIds(orderIds.stream().distinct().collect(Collectors.toList()));
        for (WkOrder order : orders) {
            WkOrder update = new WkOrder();
            update.setId(order.getId());
            update.setVersion(order.getVersion());
            if (workQty != null) {
                update.setWorkQty(workQty);
            }
            update.setExceStatus(exceStatus);
            if (loginUserId != null) {
                update.setUpdateBy(loginUserId);
                update.setUpdateTime(new Date());
            }
            if (!asnOrderService.updateById(update)) {
                throw new CoolException(errorMessage);
            }
            if (workQty != null) {
                order.setWorkQty(workQty);
            }
            order.setExceStatus(exceStatus);
            if (loginUserId != null) {
                order.setUpdateBy(loginUserId);
                order.setUpdateTime(update.getUpdateTime());
            }
            if (update.getVersion() != null) {
                order.setVersion(update.getVersion());
            }
        }
    }
    /**
@@ -281,12 +322,14 @@
    public void generateOutTask(List<OrderOutItemDto> itemParams, Long loginUserId, Wave wave) throws Exception {
        for (OrderOutItemDto itemDto : itemParams) {
            LocToTaskParams taskParams = new LocToTaskParams();
            Loc loc = locService.getById(itemDto.getLocId());
            Loc loc = locService.getById(itemDto.getLoc().getId());
            if (Objects.isNull(loc)) {
                continue;
            }
            taskParams.setItems(Arrays.asList(itemDto.getLocItem()))
            taskParams.setItems(itemDto.getLocItemList())
                    .setSiteNo(itemDto.getSiteNo())
                    .setTargSiteAreaList(itemDto.getTargSiteAreaList())
                    .setTargSiteAreaNow(itemDto.getTargSiteAreaNow())
                    .setType(Constants.TASK_TYPE_WAVE_OUT_STOCK)
                    .setSourceId(wave.getId())
                    .setTarLoc(loc.getCode());