|  |  | 
 |  |  |     private TransferOrderService transferOrderService; | 
 |  |  |     @Autowired | 
 |  |  |     private TransferService transferService; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private RestTemplate restTemplate; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private RemotesInfoProperties.RcsApi rcsApi; | 
 |  |  |     @Autowired | 
 |  |  |     private BasStationService basStationService; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * @param | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 任务自动下发 | 
 |  |  |      * | 
 |  |  |      * @throws Exception | 
 |  |  |      * 非光电站点任务下发 | 
 |  |  |      */ | 
 |  |  |     @Scheduled(cron = "0/5 * * * * ?  ") | 
 |  |  |     @Transactional(rollbackFor = Exception.class) | 
 |  |  |     public void pubTaskToWcs() { | 
 |  |  |         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, | 
 |  |  |                 TaskType.TASK_TYPE_PICK_AGAIN_OUT.type, TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_MERGE_OUT.type); | 
 |  |  |         List<Integer> integers = Arrays.asList(TaskStsType.GENERATE_IN.id, TaskStsType.GENERATE_OUT.id); | 
 |  |  |         List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>() | 
 |  |  |                 .in(Task::getTaskType, list) | 
 |  |  |                 .in(Task::getTaskStatus, integers).last("limit 1") | 
 |  |  |                 .orderByDesc(Task::getSort)); | 
 |  |  |         for (Task task : tasks) { | 
 |  |  |             /**移库不做站点操作*/ | 
 |  |  |             if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { | 
 |  |  |                 BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>() | 
 |  |  |                         .eq(BasStation::getStationName, | 
 |  |  |                         task.getTaskStatus().equals(TaskStsType.GENERATE_IN.id) ? task.getOrgSite() : task.getTargSite())); | 
 |  |  |                 if (station.getType().equals(StationTypeEnum.STATION_TYPE_MUTI.type)) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             /**下发普通站点任务,报错回滚,不再往下执行*/ | 
 |  |  |             pubTaskToWcs(task); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void taskToWCS() { | 
 |  |  |     /** | 
 |  |  |      * @author Ryan | 
 |  |  |      * @date 2025/9/4 | 
 |  |  |      * @description: 光电站点任务下发 | 
 |  |  |      * @version 1.0 | 
 |  |  |      */ | 
 |  |  | //    @Scheduled(cron = "0/5 * * * * ?  ") | 
 |  |  |     @Transactional(rollbackFor = Exception.class) | 
 |  |  |     public void taskToWCS() throws Exception { | 
 |  |  |         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, | 
 |  |  | 
 |  |  |                 .in(Task::getTaskStatus, integers) | 
 |  |  |                 .orderByDesc(Task::getSort)); | 
 |  |  |         for (Task task : tasks) { | 
 |  |  | //            Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, task.getBarcode())); | 
 |  |  | //            if (Objects.isNull(loc)) { | 
 |  |  | //                continue; | 
 |  |  | //            } | 
 |  |  | //            //判断是否深库位 | 
 |  |  | //            if (!LocUtils.isShallowLoc(loc.getCode())) { | 
 |  |  | //                //获取深库位对应的浅库位 | 
 |  |  | //                String shallowLoc = LocUtils.getShallowLoc(loc.getCode()); | 
 |  |  | //                if (StringUtils.isBlank(shallowLoc)) { | 
 |  |  | //                    continue; | 
 |  |  | //                } | 
 |  |  | //                Loc shalloc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLoc)); | 
 |  |  | //                if (Objects.isNull(shalloc) || !shalloc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) { | 
 |  |  | //                    //如果浅库位不在库跳出循环 | 
 |  |  | //                    continue; | 
 |  |  | //                } | 
 |  |  | //                LocToTaskParams params = new LocToTaskParams(); | 
 |  |  | //                params.setOrgLoc(shallowLoc).setType(TaskType.TASK_TYPE_LOC_MOVE.type + ""); | 
 |  |  | //                //生成移库任务 | 
 |  |  | //                Task moveTask = locItemService.genMoveTask(params, loginUserId); | 
 |  |  | //                moveTask.setSort(!Objects.isNull(task.getSort()) ? task.getSort() + 1 : Constants.TASK_SORT_DEFAULT_VALUE + 1); | 
 |  |  | //                if (!taskService.updateById(moveTask)) { | 
 |  |  | //                    throw new Exception("任务优先级更新失败!!"); | 
 |  |  | //                } | 
 |  |  | //            } | 
 |  |  |             //TODO 调用下发任务接口 | 
 |  |  |             /**移库不做站点操作*/ | 
 |  |  |             if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { | 
 |  |  |                 BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, | 
 |  |  |                         task.getTaskStatus().equals(TaskStsType.GENERATE_IN.id) ? task.getOrgSite() : task.getTargSite())); | 
 |  |  |                 /**过滤掉普通站点任务*/ | 
 |  |  |                 if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, task.getBarcode())); | 
 |  |  |                 if (Objects.isNull(loc)) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 //判断是否深库位 | 
 |  |  |                 if (!LocUtils.isShallowLoc(loc.getCode())) { | 
 |  |  |                     //获取深库位对应的浅库位 | 
 |  |  |                     String shallowLoc = LocUtils.getShallowLoc(loc.getCode()); | 
 |  |  |                     if (StringUtils.isBlank(shallowLoc)) { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     Loc shalloc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLoc)); | 
 |  |  |                     if (Objects.isNull(shalloc) || !shalloc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) { | 
 |  |  |                         //如果浅库位不在库跳出循环 | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     LocToTaskParams params = new LocToTaskParams(); | 
 |  |  |                     params.setOrgLoc(shallowLoc).setType(TaskType.TASK_TYPE_LOC_MOVE.type + ""); | 
 |  |  |                     //生成移库任务 | 
 |  |  |                     Task moveTask = locItemService.genMoveTask(params, loginUserId); | 
 |  |  |                     moveTask.setSort(!Objects.isNull(task.getSort()) ? task.getSort() + 1 : Constants.TASK_SORT_DEFAULT_VALUE + 1); | 
 |  |  |                     if (!taskService.updateById(moveTask)) { | 
 |  |  |                         throw new Exception("任务优先级更新失败!!"); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             /**下发任务*/ | 
 |  |  |             try { | 
 |  |  |                 pubTaskToWcs(task); | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 log.error(e.getMessage()); | 
 |  |  |                 log.error("任务下发失败!!", e); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | 
 |  |  |         //任务类型,任务编码 | 
 |  |  |         itemParam.setTaskType(RcsTaskType.getTypeDesc(task.getTaskType())) | 
 |  |  |                 .setSeqNum(task.getTaskCode()); | 
 |  |  |  | 
 |  |  |         //主参数 | 
 |  |  |         taskParams.setBatch(task.getBarcode()); | 
 |  |  |  | 
 |  |  |         if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type) | 
 |  |  |  | 
 |  |  |         BasStation station = null; | 
 |  |  |         if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { | 
 |  |  |              station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getTargSite())); | 
 |  |  |             if (Objects.isNull(station)) { | 
 |  |  |                 throw new CoolException("站点不存在!!"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         /**判断是否光电站点,非光店站点需管控站点状态*/ | 
 |  |  |         if (!Objects.isNull(station) && station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { | 
 |  |  |             if (task.getTaskType() <= TaskType.TASK_TYPE_CHECK_IN.type && !task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { | 
 |  |  | //                if (!station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) { | 
 |  |  | //                    throw new CoolException( "当前站点不是F.在库状态状态!!"); | 
 |  |  | //                } | 
 |  |  |                 station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type); | 
 |  |  |                 if (!basStationService.updateById(station)) { | 
 |  |  |                     throw new CoolException("站点状态更新失败!!"); | 
 |  |  |                 } | 
 |  |  |             } else if (task.getTaskType() >= TaskType.TASK_TYPE_OUT.type) { | 
 |  |  |                 if (!station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) { | 
 |  |  |                     throw new CoolException("目标站点不处O.空闲状态,无法预约出库。"); | 
 |  |  |                 } | 
 |  |  |                 station.setUseStatus(LocStsType.LOC_STS_TYPE_S.type); | 
 |  |  |                 if (!basStationService.updateById(station)) { | 
 |  |  |                     throw new CoolException("站点状态更新失败!!"); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /**移库参数*/ | 
 |  |  |         if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { | 
 |  |  |             itemParam.setOriLoc(task.getOrgLoc()).setDestLoc(task.getTargLoc()); | 
 |  |  |         } else if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type) | 
 |  |  |                 || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type) | 
 |  |  |                 || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_IN.type)) { | 
 |  |  |             /**全板入库参数*/ | 
 |  |  |             itemParam.setDestLoc(task.getTargLoc()) | 
 |  |  |                     .setOriSta(task.getOrgSite()); | 
 |  |  |         } else if (task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type) || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)) { | 
 |  |  |             /**拣料/盘点入库参数*/ | 
 |  |  |             itemParam.setDestLoc(task.getTargLoc()) | 
 |  |  |                     .setOriSta(task.getTargSite()); | 
 |  |  |         } else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type) | 
 |  |  | 
 |  |  |                 || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_OUT.type) | 
 |  |  |                 || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type) | 
 |  |  |                 || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)) { | 
 |  |  |  | 
 |  |  |             /**出库参数*/ | 
 |  |  |             itemParam.setOriLoc(task.getOrgLoc()) | 
 |  |  |                     .setDestSta(task.getTargSite()); | 
 |  |  |         } else if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { | 
 |  |  |             itemParam.setOriLoc(task.getOrgLoc()).setDestLoc(task.getTargLoc()); | 
 |  |  |         } else { | 
 |  |  |             /**站点间移库参数*/ | 
 |  |  |             itemParam.setOriSta(task.getOrgSite()).setDestSta(task.getTargSite()); | 
 |  |  |  | 
 |  |  |             BasStation curSta = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getOrgSite())); | 
 |  |  |             if (Objects.isNull(curSta)) { | 
 |  |  |                 throw new CoolException("站点不存在!!"); | 
 |  |  |             } | 
 |  |  |             if (curSta.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { | 
 |  |  |                 if (!curSta.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) { | 
 |  |  |                     throw new CoolException("当前站点不是F.在库状态!!"); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { | 
 |  |  |                 if (!station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) { | 
 |  |  |                     throw new CoolException("目标站点不是O.空闲状态!!"); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         List<TaskItemParam> items = Arrays.asList(itemParam); | 
 |  |  | 
 |  |  |                                 .set(Task::getTaskStatus, TaskStsType.WCS_EXECUTE_IN.id))) { | 
 |  |  |                             throw new CoolException("任务状态修改失败!!"); | 
 |  |  |                         } | 
 |  |  |                         /**排除移库功能*/ | 
 |  |  |                         if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { | 
 |  |  |                             /**如果是普通站点,修改站点状态为出库预约*/ | 
 |  |  |                             if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { | 
 |  |  |                                 station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type); | 
 |  |  |                                 if (!basStationService.updateById(station)) { | 
 |  |  |                                     throw new CoolException("站点预约失败!!"); | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     } else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type) | 
 |  |  |                             || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type) | 
 |  |  |                             || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type) | 
 |  |  |                             || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_OUT.type) | 
 |  |  |                             || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type) | 
 |  |  |                     ) { | 
 |  |  |                             || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)) { | 
 |  |  |                         if (!taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode()) | 
 |  |  |                                 .set(Task::getTaskStatus, TaskStsType.WCS_EXECUTE_OUT.id))) { | 
 |  |  |                             throw new CoolException("任务状态修改失败!!"); | 
 |  |  |                         } | 
 |  |  |                         /**如果是普通站点,修改站点状态为入库预约*/ | 
 |  |  |                         if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { | 
 |  |  |                             station.setUseStatus(LocStsType.LOC_STS_TYPE_S.type); | 
 |  |  |                             if (!basStationService.updateById(station)) { | 
 |  |  |                                 throw new CoolException("站点预约失败!!"); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     throw new CoolException("任务下发失败!!"); |