|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.zy.asrs.framework.exception.CoolException; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.entity.Task; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.kernel.command.AgvCommandService; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.kernel.command.CraneCommandService; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.kernel.command.LiftCommandService; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.kernel.command.ShuttleCommandService; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.kernel.command.*; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.model.enums.DeviceCtgType; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.model.enums.MotionCtgType; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.model.enums.MotionStsType; | 
|---|
|  |  |  | 
|---|
|  |  |  | private MotionService motionService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private AgvCommandService agvCommandService; | 
|---|
|  |  |  | //    @Autowired | 
|---|
|  |  |  | //    private ConveyorCommandService conveyorCommandService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private ConveyorCommandService conveyorCommandService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private CraneCommandService craneCommandService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private ShuttleCommandService shuttleCommandService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    @Scheduled(cron = "0/1 * * * * ? ") | 
|---|
|  |  |  | @Scheduled(cron = "0/1 * * * * ? ") | 
|---|
|  |  |  | public synchronized void executeTask() { | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | // ANALYZE_INBOUND | 
|---|
|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 更新wrkMast | 
|---|
|  |  |  | // 更新Task | 
|---|
|  |  |  | switch (TaskStsType.query(task.getTaskSts())) { | 
|---|
|  |  |  | case ANALYZE_INBOUND: | 
|---|
|  |  |  | task.setTaskSts(TaskStsType.EXECUTE_INBOUND.sts); | 
|---|
|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 更新wrkMast | 
|---|
|  |  |  | // 更新Task | 
|---|
|  |  |  | switch (TaskStsType.query(task.getTaskSts())) { | 
|---|
|  |  |  | case EXECUTE_INBOUND: | 
|---|
|  |  |  | task.setTaskSts(TaskStsType.COMPLETE_INBOUND.sts); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    @Scheduled(cron = "0/1 * * * * ? ") | 
|---|
|  |  |  | //    public synchronized void executeWrkCharge() { | 
|---|
|  |  |  | //        Date now = new Date(); | 
|---|
|  |  |  | //        // ANALYZE_INBOUND | 
|---|
|  |  |  | //        for (WrkCharge wrkCharge : wrkChargeMapper.selectByAnalyzeSts()) { | 
|---|
|  |  |  | //            Motion executingMotion = motionService.selectOfTop1(wrkCharge.getUuid(), MotionStsType.EXECUTING.val()); | 
|---|
|  |  |  | //            if (executingMotion != null) {//存在正在执行的motion | 
|---|
|  |  |  | //                continue; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            Motion motion = motionService.selectOfTop1(wrkCharge.getUuid(), MotionStsType.INIT.val()); | 
|---|
|  |  |  | //            if (null != motion) { | 
|---|
|  |  |  | //                boolean result = this.executeMotion(motion); | 
|---|
|  |  |  | //                if (!result) { | 
|---|
|  |  |  | //                    continue; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //                // 更新wrkMast | 
|---|
|  |  |  | //                switch (WrkMastStsType.query(wrkCharge.getWrkSts())) { | 
|---|
|  |  |  | //                    case ANALYZE_CHARGE: | 
|---|
|  |  |  | //                        wrkCharge.setWrkSts(WrkMastStsType.EXECUTE_CHARGE.sts); | 
|---|
|  |  |  | //                        break; | 
|---|
|  |  |  | //                    case ANALYZE_MOVE: | 
|---|
|  |  |  | //                        wrkCharge.setWrkSts(WrkMastStsType.EXECUTE_MOVE.sts); | 
|---|
|  |  |  | //                        break; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //                wrkCharge.setModiTime(now); | 
|---|
|  |  |  | //                if (wrkChargeMapper.updateById(wrkCharge) == 0) { | 
|---|
|  |  |  | //                    log.error("{}其他工作档更新状态失败!", wrkCharge.getWrkNo()); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //        // EXECUTE_INBOUND | 
|---|
|  |  |  | //        for (WrkCharge wrkCharge : wrkChargeMapper.selectByExecuteSts()) { | 
|---|
|  |  |  | //            if (!motionService.hasRunningMotion(wrkCharge.getUuid())) { | 
|---|
|  |  |  | //                Motion motion = motionService.selectOfTop1(wrkCharge.getUuid(), MotionStsType.WAITING.val()); | 
|---|
|  |  |  | //                if (null != motion) { | 
|---|
|  |  |  | //                    boolean result = this.executeMotion(motion); | 
|---|
|  |  |  | //                    if (!result) { | 
|---|
|  |  |  | //                        continue; | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                } else { | 
|---|
|  |  |  | //                    if (motionService.selectOfTop1(wrkCharge.getUuid(), MotionStsType.EXECUTING.val()) != null) { | 
|---|
|  |  |  | //                        continue; | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                    // 更新wrkMast | 
|---|
|  |  |  | //                    switch (WrkMastStsType.query(wrkCharge.getWrkSts())) { | 
|---|
|  |  |  | //                        case EXECUTE_CHARGE: | 
|---|
|  |  |  | //                            wrkCharge.setWrkSts(WrkMastStsType.CHARGE_WORKING.sts); | 
|---|
|  |  |  | //                            break; | 
|---|
|  |  |  | //                        case EXECUTE_MOVE: | 
|---|
|  |  |  | //                            wrkCharge.setWrkSts(WrkMastStsType.COMPLETE_MOVE.sts); | 
|---|
|  |  |  | //                            break; | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                    wrkCharge.setModiTime(now); | 
|---|
|  |  |  | //                    if (wrkChargeMapper.updateById(wrkCharge) == 0) { | 
|---|
|  |  |  | //                        log.error("{}他工作档更新状态失败!", wrkCharge.getWrkNo()); | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  | @Scheduled(cron = "0/1 * * * * ? ") | 
|---|
|  |  |  | public synchronized void executeChargeTask() { | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | // ANALYZE_CHARGE | 
|---|
|  |  |  | for (Task taskCharge : taskService.selectChargeByAnalyzeSts()) { | 
|---|
|  |  |  | Motion executingMotion = motionService.selectOfTop1(taskCharge.getUuid(), MotionStsType.EXECUTING.val(), taskCharge.getHostId()); | 
|---|
|  |  |  | if (executingMotion != null) {//存在正在执行的motion | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    @Scheduled(cron = "0/1 * * * * ? ") | 
|---|
|  |  |  | Motion motion = motionService.selectOfTop1(taskCharge.getUuid(), MotionStsType.INIT.val(), taskCharge.getHostId()); | 
|---|
|  |  |  | if (null != motion) { | 
|---|
|  |  |  | boolean result = this.executeMotion(motion); | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 更新Task | 
|---|
|  |  |  | switch (TaskStsType.query(taskCharge.getTaskSts())) { | 
|---|
|  |  |  | case ANALYZE_CHARGE: | 
|---|
|  |  |  | taskCharge.setTaskSts(TaskStsType.EXECUTE_CHARGE.sts); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case ANALYZE_MOVE: | 
|---|
|  |  |  | taskCharge.setTaskSts(TaskStsType.EXECUTE_MOVE.sts); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | taskCharge.setUpdateTime(now); | 
|---|
|  |  |  | if (!taskService.updateById(taskCharge)) { | 
|---|
|  |  |  | log.error("{}其他工作档更新状态失败!", taskCharge.getTaskNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // EXECUTE_CHARGE | 
|---|
|  |  |  | for (Task taskCharge : taskService.selectChargeByExecuteSts()) { | 
|---|
|  |  |  | if (!motionService.hasRunningMotion(taskCharge.getUuid(), taskCharge.getHostId())) { | 
|---|
|  |  |  | Motion motion = motionService.selectOfTop1(taskCharge.getUuid(), MotionStsType.WAITING.val(), taskCharge.getHostId()); | 
|---|
|  |  |  | if (null != motion) { | 
|---|
|  |  |  | boolean result = this.executeMotion(motion); | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | if (motionService.selectOfTop1(taskCharge.getUuid(), MotionStsType.EXECUTING.val(), taskCharge.getHostId()) != null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 更新Task | 
|---|
|  |  |  | switch (TaskStsType.query(taskCharge.getTaskSts())) { | 
|---|
|  |  |  | case EXECUTE_CHARGE: | 
|---|
|  |  |  | taskCharge.setTaskSts(TaskStsType.CHARGE_WORKING.sts); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case EXECUTE_MOVE: | 
|---|
|  |  |  | taskCharge.setTaskSts(TaskStsType.COMPLETE_MOVE.sts); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | taskCharge.setUpdateTime(now); | 
|---|
|  |  |  | if (!taskService.updateById(taskCharge)) { | 
|---|
|  |  |  | log.error("{}他工作档更新状态失败!", taskCharge.getTaskNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Scheduled(cron = "0/1 * * * * ? ") | 
|---|
|  |  |  | public synchronized void executeManualTask() { | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | // ANALYZE_MANUAL | 
|---|
|  |  |  | for (Task task : taskService.selectManualByAnalyzeSts()) { | 
|---|
|  |  |  | Motion executingMotion = motionService.selectOfTop1(task.getUuid(), MotionStsType.EXECUTING.val(), task.getHostId()); | 
|---|
|  |  |  | if (executingMotion != null) {//存在正在执行的motion | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Motion motion = motionService.selectOfTop1(task.getUuid(), MotionStsType.INIT.val(), task.getHostId()); | 
|---|
|  |  |  | if (null != motion) { | 
|---|
|  |  |  | boolean result = this.executeMotion(motion); | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 更新Task | 
|---|
|  |  |  | switch (TaskStsType.query(task.getTaskSts())) { | 
|---|
|  |  |  | case ANALYZE_MANUAL: | 
|---|
|  |  |  | task.setTaskSts(TaskStsType.EXECUTE_MANUAL.sts); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | task.setUpdateTime(now); | 
|---|
|  |  |  | if (!taskService.updateById(task)) { | 
|---|
|  |  |  | log.error("{}其他工作档更新状态失败!", task.getTaskNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // EXECUTE_MANUAL | 
|---|
|  |  |  | for (Task task : taskService.selectManualByExecuteSts()) { | 
|---|
|  |  |  | if (!motionService.hasRunningMotion(task.getUuid(), task.getHostId())) { | 
|---|
|  |  |  | Motion motion = motionService.selectOfTop1(task.getUuid(), MotionStsType.WAITING.val(), task.getHostId()); | 
|---|
|  |  |  | if (null != motion) { | 
|---|
|  |  |  | boolean result = this.executeMotion(motion); | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | if (motionService.selectOfTop1(task.getUuid(), MotionStsType.EXECUTING.val(), task.getHostId()) != null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 更新Task | 
|---|
|  |  |  | switch (TaskStsType.query(task.getTaskSts())) { | 
|---|
|  |  |  | case EXECUTE_MANUAL: | 
|---|
|  |  |  | task.setTaskSts(TaskStsType.COMPLETE_MANUAL.sts); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | task.setUpdateTime(now); | 
|---|
|  |  |  | if (!taskService.updateById(task)) { | 
|---|
|  |  |  | log.error("{}他工作档更新状态失败!", task.getTaskNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Scheduled(cron = "0/1 * * * * ? ") | 
|---|
|  |  |  | public synchronized void executeMoveTask() { | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | // ANALYZE_MOVE | 
|---|
|  |  |  | for (Task task : taskService.selectMoveByAnalyzeSts()) { | 
|---|
|  |  |  | Motion executingMotion = motionService.selectOfTop1(task.getUuid(), MotionStsType.EXECUTING.val(), task.getHostId()); | 
|---|
|  |  |  | if (executingMotion != null) {//存在正在执行的motion | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Motion motion = motionService.selectOfTop1(task.getUuid(), MotionStsType.INIT.val(), task.getHostId()); | 
|---|
|  |  |  | if (null != motion) { | 
|---|
|  |  |  | boolean result = this.executeMotion(motion); | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 更新Task | 
|---|
|  |  |  | switch (TaskStsType.query(task.getTaskSts())) { | 
|---|
|  |  |  | case ANALYZE_MOVE: | 
|---|
|  |  |  | task.setTaskSts(TaskStsType.EXECUTE_MOVE.sts); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | task.setUpdateTime(now); | 
|---|
|  |  |  | if (!taskService.updateById(task)) { | 
|---|
|  |  |  | log.error("{}其他工作档更新状态失败!", task.getTaskNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // EXECUTE_MOVE | 
|---|
|  |  |  | for (Task task : taskService.selectMoveByExecuteSts()) { | 
|---|
|  |  |  | if (!motionService.hasRunningMotion(task.getUuid(), task.getHostId())) { | 
|---|
|  |  |  | Motion motion = motionService.selectOfTop1(task.getUuid(), MotionStsType.WAITING.val(), task.getHostId()); | 
|---|
|  |  |  | if (null != motion) { | 
|---|
|  |  |  | boolean result = this.executeMotion(motion); | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | if (motionService.selectOfTop1(task.getUuid(), MotionStsType.EXECUTING.val(), task.getHostId()) != null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 更新Task | 
|---|
|  |  |  | switch (TaskStsType.query(task.getTaskSts())) { | 
|---|
|  |  |  | case EXECUTE_MOVE: | 
|---|
|  |  |  | task.setTaskSts(TaskStsType.COMPLETE_MOVE.sts); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | task.setUpdateTime(now); | 
|---|
|  |  |  | if (!taskService.updateById(task)) { | 
|---|
|  |  |  | log.error("{}他工作档更新状态失败!", task.getTaskNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Scheduled(cron = "0/1 * * * * ? ") | 
|---|
|  |  |  | 
|---|
|  |  |  | Boolean executeRes = Boolean.FALSE; | 
|---|
|  |  |  | switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl())).deviceCtg) { | 
|---|
|  |  |  | case CONVEYOR: | 
|---|
|  |  |  | //                executeRes = conveyorCommandService.accept(motion); | 
|---|
|  |  |  | executeRes = conveyorCommandService.accept(motion); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case CRANE: | 
|---|
|  |  |  | executeRes = craneCommandService.accept(motion); | 
|---|
|  |  |  | 
|---|
|  |  |  | executeRes = shuttleCommandService.finish(motion); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case CONVEYOR: | 
|---|
|  |  |  | //                executeRes = conveyorCommandService.finish(motion); | 
|---|
|  |  |  | executeRes = conveyorCommandService.finish(motion); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | break; | 
|---|