chen.lin
79 分钟以前 323a159cfe54156adfc04a4b7e5ed4b552214632
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -8,7 +8,6 @@
import com.fasterxml.jackson.databind.cfg.CoercionAction;
import com.fasterxml.jackson.databind.cfg.CoercionInputShape;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.DateUtils;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.api.config.RemotesInfoProperties;
@@ -252,6 +251,7 @@
    @Scheduled(cron = "0/55 * * * * ?  ")
    @Transactional(rollbackFor = Exception.class)
    public void pubTaskToWcs() {
        log.info("定时任务开始执行:任务下发到RCS");
        Long loginUserId = SystemAuthUtils.getLoginUserId();
        List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_IN.type, TaskType.TASK_TYPE_OUT.type, TaskType.TASK_TYPE_LOC_MOVE.type, TaskType.TASK_TYPE_EMPITY_IN.type
                , TaskType.TASK_TYPE_CHECK_IN.type, TaskType.TASK_TYPE_MERGE_IN.type, TaskType.TASK_TYPE_EMPITY_OUT.type, TaskType.TASK_TYPE_PICK_IN.type,
@@ -261,13 +261,16 @@
                .in(Task::getTaskType, list)
                .in(Task::getTaskStatus, integers)
                .orderByDesc(Task::getSort));
        log.info("查询到待下发任务数量:{}", tasks.size());
        if (tasks.isEmpty()) {
            log.debug("没有待下发的任务,定时任务结束");
            return;
        }
        Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.AUTO_RUN_CHECK_ORDERS));
        if (!Objects.isNull(config) && !Objects.isNull(config.getVal())) {
            if (Boolean.parseBoolean(config.getVal())) {
               return;
                log.info("配置项AUTO_RUN_CHECK_ORDERS为true,跳过任务下发");
                return;
            }
        }
//        for (Task task : tasks) {
@@ -282,7 +285,9 @@
//            }
//        }
        /**下发普通站点任务,报错回滚,不再往下执行*/
        log.info("开始下发{}个任务到RCS", tasks.size());
        taskService.pubTaskToWcs(tasks);
        log.info("定时任务执行完成:任务下发到RCS");
    }
    /**
@@ -564,6 +569,8 @@
        } else {
            queryWrapper.in(Task::getTaskStatus, TaskStsType.UPDATED_IN.id, TaskStsType.UPDATED_OUT.id);
        }
        queryWrapper.last("ORDER BY RAND() LIMIT 1");
        List<Task> tasks = taskService.list(queryWrapper);
        if (tasks.isEmpty()) {
            return;
@@ -600,47 +607,67 @@
            } else if ((task.getTaskType() >= TaskType.TASK_TYPE_OUT.type && task.getTaskType() <= TaskType.TASK_TYPE_EMPITY_OUT.type)
                    || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)) {
                /**判断单据是否完成**/
                Set<Long> longSet = taskItems.stream().map(TaskItem::getSourceId).collect(Collectors.toSet());
                List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>()
                        .in(WaveOrderRela::getWaveId, longSet));
                if (Cools.isEmpty(waveOrderRelas)) {
                    throw new CoolException("波次对应关联单未找到");
                }
                Set<Long> orderIds = waveOrderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toSet());
                List<WkOrder> wkOrders = asnOrderService.listByIds(orderIds);
                if (wkOrders.isEmpty()) {
                    throw new CoolException("单据不存在!!");
                }
                Config allowChang = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.ALLOW_OVER_CHANGE));
                wkOrders.forEach(order -> {
                    //判断是否允许超收,不允许超收添加拒收判断
                    if (!Objects.isNull(allowChang)) {
                        if (!Boolean.parseBoolean(allowChang.getVal())) {
                            if (order.getAnfme().compareTo(order.getQty()) == 0) {
                                order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
                                if (!asnOrderService.updateById(order)) {
                                    throw new CoolException("出库单更新状态失败");
                                }
                            }
                // 只有波次类型的任务才需要查询波次关联单
                if (task.getResource() != null && task.getResource().equals(TaskResouceType.TASK_RESOUCE_WAVE_TYPE.val)) {
                    Set<Long> longSet = taskItems.stream()
                            .map(TaskItem::getSourceId)
                            .filter(Objects::nonNull)
                            .collect(Collectors.toSet());
                    if (longSet.isEmpty()) {
                        logger.warn("任务{}的任务明细中没有有效的sourceId,跳过波次关联单查询。任务编码:{},任务类型:{}",
                                task.getId(), task.getTaskCode(), task.getTaskType());
                    } else {
                        List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>()
                                .in(WaveOrderRela::getWaveId, longSet));
                        if (Cools.isEmpty(waveOrderRelas)) {
                            logger.warn("任务{}的波次对应关联单未找到,可能是数据不一致或任务不是通过波次创建的。任务编码:{},sourceIds:{}",
                                    task.getId(), task.getTaskCode(), longSet);
                        } else {
                            if (order.getAnfme().compareTo(order.getQty()) <= 0) {
                                order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
                                if (!asnOrderService.updateById(order)) {
                                    throw new CoolException("出库单更新状态失败");
                                }
                            Set<Long> orderIds = waveOrderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toSet());
                            List<WkOrder> wkOrders = asnOrderService.listByIds(orderIds);
                            if (wkOrders.isEmpty()) {
                                logger.warn("任务{}的关联单据不存在。任务编码:{},orderIds:{}",
                                        task.getId(), task.getTaskCode(), orderIds);
                            } else {
                                Config allowChang = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.ALLOW_OVER_CHANGE));
                                wkOrders.forEach(order -> {
                                    //判断是否允许超收,不允许超收添加拒收判断
                                    if (!Objects.isNull(allowChang)) {
                                        if (!Boolean.parseBoolean(allowChang.getVal())) {
                                            if (order.getAnfme().compareTo(order.getQty()) == 0) {
                                                order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
                                                if (!asnOrderService.updateById(order)) {
                                                    logger.error("出库单更新状态失败。订单ID:{},订单编码:{}", order.getId(), order.getCode());
                                                }
                                            }
                                        } else {
                                            if (order.getAnfme().compareTo(order.getQty()) <= 0) {
                                                order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
                                                if (!asnOrderService.updateById(order)) {
                                                    logger.error("出库单更新状态失败。订单ID:{},订单编码:{}", order.getId(), order.getCode());
                                                }
                                            }
                                        }
                                    }
                                    //检查单据是否完成
                                });
                            }
                        }
                    }
                    //检查单据是否完成
                });
                } else {
                    logger.debug("任务{}不是波次类型任务(资源类型:{}),跳过波次关联单查询。任务编码:{}",
                            task.getId(), task.getResource(), task.getTaskCode());
                }
                //出库单上报RCS修改库位状态
                try {
                    reportStationStatus(task);
                } catch (Exception e) {
                    throw new CoolException(e.getMessage());
                    logger.error("任务{}上报RCS修改库位状态失败。任务编码:{}", task.getId(), task.getTaskCode(), e);
                    // 不抛出异常,避免中断定时任务
                }
            }