增加一个定时任务。如果拣货出库过程中,相同料箱号,存在(199 ,200)的任务 并且同时存在  101,196的任务
则101和196的任务会 自动变成199

如果 任务下发的过程中,相同料箱号, 101的任务存在的同时,存在(196,198,199 ,200)的任务了,不向RCS发送/api/open/bus/submit 的搬运任务
3个文件已修改
86 ■■■■■ 已修改文件
.gitignore 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -37,4 +37,6 @@
.DS_Store
**/.DS_Store
logs
logs/**
logs/**
/version/db/doc_8_3_api_to_db_mapping.md
/rsf-admin/dist.7z
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -286,6 +286,28 @@
                return;
            }
        }
        // 同料箱号规则:若 101 任务所在料箱号下已存在 196/198/199/200 任务,则不向 RCS 发送该 101 任务(/api/open/bus/submit)
        List<Integer> higherStatuses = Arrays.asList(TaskStsType.AWAIT.id, TaskStsType.COMPLETE_OUT.id, TaskStsType.WAVE_SEED.id, TaskStsType.UPDATED_OUT.id);
        List<Task> higherTasks = taskService.list(new LambdaQueryWrapper<Task>()
                .in(Task::getTaskStatus, higherStatuses)
                .isNotNull(Task::getBarcode)
                .ne(Task::getBarcode, ""));
        Set<String> barcodesWithHigher = higherTasks.stream().map(Task::getBarcode).filter(StringUtils::isNotBlank).collect(Collectors.toSet());
        final Set<String> skipBarcodes = barcodesWithHigher;
        List<Task> toPublish = tasks.stream()
                .filter(t -> {
                    if (TaskStsType.GENERATE_OUT.id.equals(t.getTaskStatus()) && StringUtils.isNotBlank(t.getBarcode()) && skipBarcodes.contains(t.getBarcode())) {
                        log.debug("同料箱号{}下已存在196/198/199/200任务,跳过101任务下发:taskId={}", t.getBarcode(), t.getId());
                        return false;
                    }
                    return true;
                })
                .collect(Collectors.toList());
        if (toPublish.isEmpty()) {
            log.debug("过滤后无待下发任务,定时任务结束");
            return;
        }
        tasks = toPublish;
//        for (Task task : tasks) {
//            /**移库不做站点操作*/
//            if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
@@ -304,6 +326,41 @@
    }
    /**
     * 拣货出库同料箱号状态同步:相同料箱号下若同时存在(199、200)任务与(101、196)任务,则将 101、196 自动更新为 199。
     * 执行周期与任务下发一致,便于在下发前完成状态同步。
     */
    @Scheduled(cron = "0/35 * * * * ?  ")
    @Transactional(rollbackFor = Exception.class)
    public void syncBarcodeTaskStatusTo199() {
        List<Integer> statuses = Arrays.asList(TaskStsType.GENERATE_OUT.id, TaskStsType.AWAIT.id, TaskStsType.WAVE_SEED.id, TaskStsType.UPDATED_OUT.id);
        List<Task> candidates = taskService.list(new LambdaQueryWrapper<Task>()
                .in(Task::getTaskStatus, statuses)
                .isNotNull(Task::getBarcode)
                .ne(Task::getBarcode, ""));
        if (candidates.isEmpty()) return;
        Map<String, Set<Integer>> statusByBarcode = new HashMap<>();
        for (Task t : candidates) {
            statusByBarcode.computeIfAbsent(t.getBarcode(), k -> new HashSet<>()).add(t.getTaskStatus());
        }
        List<Integer> to199 = Arrays.asList(TaskStsType.GENERATE_OUT.id, TaskStsType.AWAIT.id);
        List<Integer> has199Or200 = Arrays.asList(TaskStsType.WAVE_SEED.id, TaskStsType.UPDATED_OUT.id);
        for (Map.Entry<String, Set<Integer>> e : statusByBarcode.entrySet()) {
            Set<Integer> set = e.getValue();
            boolean hasHigh = set.stream().anyMatch(has199Or200::contains);
            boolean hasLow = set.stream().anyMatch(to199::contains);
            if (!hasHigh || !hasLow) continue;
            String barcode = e.getKey();
            boolean updated = taskService.update(new LambdaUpdateWrapper<Task>()
                    .eq(Task::getBarcode, barcode)
                    .in(Task::getTaskStatus, to199)
                    .set(Task::getTaskStatus, TaskStsType.WAVE_SEED.id));
            if (updated) {
                log.info("同料箱号{}下存在199/200且存在101/196,已将101/196任务自动更新为199", barcode);
            }
        }
    }
    /**
     * @author Ryan
     * @date 2025/9/4
     * @description: 光电站点任务下发
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -1984,9 +1984,30 @@
                    rcsApi != null ? rcsApi.getPort() : "null");
            return;
        }
        // 同料箱号规则:101 任务所在料箱号下若已存在 196/198/199/200 任务,则不向 RCS 发送该 101 任务(/api/open/bus/submit)
        List<Integer> higherStatuses = Arrays.asList(TaskStsType.AWAIT.id, TaskStsType.COMPLETE_OUT.id, TaskStsType.WAVE_SEED.id, TaskStsType.UPDATED_OUT.id);
        List<Task> higherTasks = this.list(new LambdaQueryWrapper<Task>()
                .in(Task::getTaskStatus, higherStatuses)
                .isNotNull(Task::getBarcode)
                .ne(Task::getBarcode, ""));
        Set<String> barcodesWithHigher = higherTasks.stream().map(Task::getBarcode).filter(StringUtils::isNotBlank).collect(Collectors.toSet());
        List<Task> toSend = tasks.stream()
                .filter(t -> {
                    if (TaskStsType.GENERATE_OUT.id.equals(t.getTaskStatus()) && StringUtils.isNotBlank(t.getBarcode()) && barcodesWithHigher.contains(t.getBarcode())) {
                        log.debug("同料箱号{}下已存在196/198/199/200任务,跳过101任务下发:taskId={}", t.getBarcode(), t.getId());
                        return false;
                    }
                    return true;
                })
                .collect(Collectors.toList());
        if (toSend.isEmpty()) {
            log.debug("过滤后无待下发任务");
            return;
        }
        tasks = toSend;
        String pubTakUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.pubTask;
        for (Task task : tasks) {
            WcsTaskParams taskParams = new WcsTaskParams();
            List<TaskItemParam> items = new ArrayList<>();