zjj
2025-02-17 54b4f53323d0833cbac86fd18932c5fa5a5447a8
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
@@ -380,6 +380,31 @@
                                break;
                            }
                            if (!liftThread.isIdle()) {
                                break;
                            }
                            if (motionService.count(new LambdaQueryWrapper<Motion>()
                                    .eq(Motion::getDeviceCtg, DeviceCtgType.LIFT.val())
                                    .eq(Motion::getDevice, inSta.getLiftNo())
                                    .eq(Motion::getMotionSts, MotionStsType.EXECUTING.val())) > 0) {
                                break;
                            }
                            //检测提升机是否有任务绑定
                            boolean liftResult = Utils.checkLiftHasBinding(liftProtocol.getLiftNo(), String.valueOf(workNo));
                            if (liftResult) {
                                //存在任务,禁止执行
                                break;
                            }
                            //每次执行提升机指令都绑定提升机
                            task.setLiftNo(liftProtocol.getLiftNo());
                            task.setUpdateTime(new Date());
                            if (!taskService.updateById(task)) {
                                break;
                            }
                            List<LiftCommand> command = liftThread.getPalletInOutCommand(workNo, 1, lev, inSta.getDeviceStaNo(), targetSite, LiftCommandModeType.PALLET_INOUT);
                            LiftAssignCommand assignCommand = new LiftAssignCommand();
@@ -610,10 +635,19 @@
                    ) {
                        Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
                                .eq(Task::getDestSite, inSta.getDeviceStaNo())
                                .in(Task::getTaskSts, TaskStsType.NEW_INBOUND.sts)
                                .eq(Task::getTaskNo, workNo));
                        if (task != null) {
                            if (!Cools.isEmpty(task.getLiftNo())) {
                                if (task.getLiftNo() > 0) {
                                    task.setLiftNo(0);
                                    task.setUpdateTime(new Date());
                                    if (!taskService.updateById(task)) {
                                        News.info("{}任务更新释放提升机失败", task.getTaskNo());
                                    }
                                }
                            }
                            if (Cools.isEmpty(task.getShuttleNo())) {
                                //分配小车
                                //搜索空闲车
@@ -1256,4 +1290,39 @@
        }
    }
    // 解析小车载货移动工作档
    public synchronized void analyzeLadenMoveTask() {
        for (Task task : taskService.selectWaitAnalyzeLadenMoveTask()) {
            if (Cools.isEmpty(task.getShuttleNo())) {
                //分配小车
                //搜索空闲车
                ShuttleThread shuttleThread = shuttleDispatcher.searchIdleShuttle(task);
                if (shuttleThread == null) {
                    News.info("{}任务未找到空闲穿梭车", task.getTaskNo());
                    continue;
                }
                task.setShuttleNo(Integer.valueOf(shuttleThread.getDevice().getDeviceNo()));//保存穿梭车号
                task.setUpdateTime(new Date());
                if (!taskService.updateById(task)) {
                    News.info("{}任务更新穿梭车号失败", task.getTaskNo());
                }
                continue;
            }
            // generate motion list
            List<Motion> motionList = analyzeService.generateShuttleLadenMoveMotion(task);
            if (motionList.isEmpty()) {
                continue;
            }
            motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
            // 更新工作主档
            task.setTaskSts(TaskStsType.ANALYZE_LADEN_MOVE.sts); // 工作状态
            task.setUpdateTime(new Date());
            if (!taskService.updateById(task)) {
                News.error("更新工作档失败!!! [工作号:{}]", task.getTaskNo());
            }
        }
    }
}