chen.lin
13 小时以前 0b2093ed5234b45c1c4d4c11052d9cda0caeaea8
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/MaterialAutoSchedules.java
@@ -11,6 +11,7 @@
import com.vincent.rsf.server.manager.enums.OrderType;
import com.vincent.rsf.server.manager.enums.OrderWorkType;
import com.vincent.rsf.server.manager.enums.TaskStsType;
import com.vincent.rsf.server.manager.enums.TaskType;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.manager.utils.LocManageUtil;
import com.vincent.rsf.server.system.constant.GlobalConfigCode;
@@ -65,10 +66,10 @@
    private WaitPakinItemService waitPakinItemService;
    /**
     * 定时任务1:指定物料有库存时自动生成全版出库单(每 2 分钟)
     * 定时任务1:指定物料有库存时自动生成全版出库单
     * 配置:AUTO_FULL_OUT_MATNR_CODE(物料编码)、AUTO_FULL_OUT_ENABLED(true 启用)
     */
    @Scheduled(cron = "0 0/2 * * * ?")
    @Scheduled(cron = "0/35 * * * * ?")
    @Transactional(rollbackFor = Exception.class)
    public void autoCreateFullOutOrder() {
        Config enabledConfig = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.AUTO_FULL_OUT_ENABLED));
@@ -227,11 +228,41 @@
    }
    /**
     * 定时任务3:无订单组托 + 自动生成入库单(仅针对配置物料,每 2 分钟)
     * 定时任务:配置物料出库任务在 RCS 回调为 199(待确认)后自动拣货完成,无需 PDA 快速拣货确认即可更新库存。
     * 配置:AUTO_FULL_OUT_MATNR_CODE(物料编码,配置了则对该物料生效)
     */
    @Scheduled(cron = "0 0/1 * * * ?")
    public void autoConfirmPickOut() {
        Config matnrConfig = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.AUTO_FULL_OUT_MATNR_CODE));
        if (matnrConfig == null || StringUtils.isBlank(matnrConfig.getVal())) {
            return;
        }
        String matnrCode = matnrConfig.getVal().trim();
        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
                .eq(Task::getTaskType, TaskType.TASK_TYPE_OUT.type)
                .eq(Task::getTaskStatus, TaskStsType.WAVE_SEED.id));
        for (Task task : tasks) {
            long cnt = taskItemService.count(new LambdaQueryWrapper<TaskItem>()
                    .eq(TaskItem::getTaskId, task.getId())
                    .eq(TaskItem::getMatnrCode, matnrCode));
            if (cnt == 0) {
                continue;
            }
            try {
                taskService.completeFullOutStock(task.getId(), SYSTEM_USER_ID);
                log.info("[自动拣货完成] 任务: {}, 料箱: {}, 物料: {} 已自动确认出库并更新库存", task.getTaskCode(), task.getBarcode(), matnrCode);
            } catch (Exception e) {
                log.warn("[自动拣货完成] 任务: {} 处理失败: {}", task.getTaskCode(), e.getMessage());
            }
        }
    }
    /**
     * 定时任务3:无订单组托 + 自动生成入库单(仅针对配置物料,)
     * 先按配置物料与数量做无订单组托,再生成入库单并关联组托明细,便于 RCS 入库闭环。
     * 配置:AUTO_PAKIN_ON_ASN_ENABLED(true)、AUTO_FULL_OUT_MATNR_CODE、AUTO_PAKIN_QTY(数量)
     */
    @Scheduled(cron = "0 0/2 * * * ?")
//    @Scheduled(cron = "0/35 * * * * ?")
    @Transactional(rollbackFor = Exception.class)
    public void autoPakinOnInbound() {
        Config enabledConfig = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.AUTO_PAKIN_ON_ASN_ENABLED));
@@ -288,7 +319,7 @@
            waitPakin = mobileService.mergeItems(param, SYSTEM_USER_ID);
        } catch (Exception e) {
            log.warn("[无订单自动组托] 组托失败: {}", e.getMessage());
            return;
            throw e; // 重新抛出,避免事务被标记 rollback-only 后仍尝试提交导致 UnexpectedRollbackException
        }
        // 2)自动生成入库单(一条明细,配置物料 + 数量)
        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, null);