| | |
| | | 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)) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 拣货出库同料箱号状态同步:相同料箱号下若同时存在(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: 光电站点任务下发 |