#
Junjie
2024-04-08 79603e53c78e535dba4bfbc69b8c3b5c184012c5
#
7个文件已修改
341 ■■■■■ 已修改文件
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java 228 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/TaskStsType.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
@@ -203,164 +203,24 @@
                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
                shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
                break;
//            case SHUTTLE_MOVE_FROM_CONVEYOR:
//                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
//                shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
//                break;
//            case SHUTTLE_MOVE_TO_CONVEYOR:
//                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
//                shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
//                break;
//            case SHUTTLE_MOVE_FROM_LIFT_TO_CONVEYOR://穿梭车出提升机去输送线
//                // 判断提升机状态
//                liftThread = (SiemensLiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getTemp()));
//                if (liftThread == null) {
//                    return false;
//                }
//                liftProtocol = liftThread.getLiftProtocol();
//                // 判断提升机是否自动、空闲、准备就绪、链条没有转动、没有未就绪报错
//                if (!liftProtocol.getMode()
//                        || liftProtocol.getRunning()
//                        || !liftProtocol.getReady()
//                        || liftProtocol.getForwardRotationFeedback()
//                        || liftProtocol.getReverseFeedback()
//                        || liftProtocol.getNotReady().intValue() != 0
//                ) {
//                    return false;
//                }
//
//                if (liftProtocol.getLev().intValue() != Utils.getLev(motion.getTarget())) {//判断提升机是否达到目标层
//                    return false;
//                }
//
//                //判断提升机是否被锁定
//                if (!liftProtocol.getLiftLock()) {
//                    //锁定提升机
//                    LiftCommand lockCommand = liftThread.getLockCommand(true);//获取提升机锁定命令
//                    lockCommand.setLiftNo(liftProtocol.getLiftNo());
//                    lockCommand.setTaskNo(motion.getWrkNo().shortValue());//获取任务号
//                    liftThread.assignWork(lockCommand);
//                    return false;//等待下一次轮询
//                }
//
//                //判断提升机工作号是否和当前任务相同
//                if (liftProtocol.getTaskNo().intValue() != motion.getWrkNo()) {
//                    return false;
//                }
//
//                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
//                shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
//                break;
//            case SHUTTLE_TRANSPORT:
//                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
//                shuttleTaskModeType = ShuttleTaskModeType.PAK_IN;
//
//                shuttleCommands.add(0, shuttleThread.getPalletCommand((short) 1));
//                shuttleCommands.add(shuttleCommands.size(), shuttleThread.getPalletCommand((short) 2));
//                break;
//            case SHUTTLE_TRANSPORT_FROM_LIFT://穿梭车载货出提升机
//                // 判断提升机状态
//                liftThread = (SiemensLiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getTemp()));
//                if (liftThread == null) {
//                    return false;
//                }
//                liftProtocol = liftThread.getLiftProtocol();
//                // 判断提升机是否自动、空闲、准备就绪、链条没有转动、没有未就绪报错
//                if (!liftProtocol.getMode()
//                        || liftProtocol.getRunning()
//                        || !liftProtocol.getReady()
//                        || liftProtocol.getForwardRotationFeedback()
//                        || liftProtocol.getReverseFeedback()
//                        || liftProtocol.getNotReady().intValue() != 0
//                ) {
//                    return false;
//                }
//
//                if (liftProtocol.getLev().intValue() != Utils.getLev(motion.getTarget())) {//判断提升机是否达到目标层
//                    return false;
//                }
//
//                //判断提升机是否被锁定
//                if (!liftProtocol.getLiftLock()) {
//                    //锁定提升机
//                    LiftCommand lockCommand = liftThread.getLockCommand(true);//获取提升机锁定命令
//                    lockCommand.setLiftNo(liftProtocol.getLiftNo());
//                    lockCommand.setTaskNo(motion.getWrkNo().shortValue());//获取任务号
//                    liftThread.assignWork(lockCommand);
//                    return false;//等待下一次轮询
//                }
//
//                //判断提升机工作号是否和当前任务相同
//                if (liftProtocol.getTaskNo().intValue() != motion.getWrkNo()) {
//                    return false;
//                }
//
//                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
//                shuttleTaskModeType = ShuttleTaskModeType.PAK_IN;
//                shuttleCommands.add(0, shuttleThread.getPalletCommand((short) 1));
////                shuttleCommands.add(shuttleCommands.size(), shuttleThread.getPalletCommand((short) 2));
//                break;
//            case SHUTTLE_TRANSPORT_TO_LIFT://穿梭车载货进提升机
//                // 判断提升机状态
//                liftThread = (SiemensLiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getTemp()));
//                if (liftThread == null) {
//                    return false;
//                }
//                liftProtocol = liftThread.getLiftProtocol();
//                // 判断提升机是否自动、空闲、准备就绪、链条没有转动、没有未就绪报错
//                if (!liftProtocol.getMode()
//                        || liftProtocol.getRunning()
//                        || !liftProtocol.getReady()
//                        || liftProtocol.getForwardRotationFeedback()
//                        || liftProtocol.getReverseFeedback()
//                        || liftProtocol.getNotReady().intValue() != 0
//                ) {
//                    return false;
//                }
//
//                if (liftProtocol.getLev().intValue() != Utils.getLev(motion.getTarget())) {//判断提升机是否达到目标层
//                    return false;
//                }
//
//                //判断提升机是否被锁定
//                if (!liftProtocol.getLiftLock()) {
//                    //锁定提升机
//                    LiftCommand lockCommand = liftThread.getLockCommand(true);//获取提升机锁定命令
//                    lockCommand.setLiftNo(liftProtocol.getLiftNo());
//                    lockCommand.setTaskNo(motion.getWrkNo().shortValue());//获取任务号
//                    liftThread.assignWork(lockCommand);
//                    return false;//等待下一次轮询
//                }
//
//                //判断提升机工作号是否和当前任务相同
//                if (liftProtocol.getTaskNo().intValue() != motion.getWrkNo()) {
//                    return false;
//                }
//
//                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
//                shuttleTaskModeType = ShuttleTaskModeType.PAK_IN;
////                shuttleCommands.add(0, shuttleThread.getPalletCommand((short) 1));
//                shuttleCommands.add(shuttleCommands.size(), shuttleThread.getPalletCommand((short) 2));
//                break;
//            case SHUTTLE_TRANSPORT_FROM_CONVEYOR:
//                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
//                shuttleTaskModeType = ShuttleTaskModeType.PAK_IN;
//
//                shuttleCommands.add(0, shuttleThread.getPalletCommand((short) 1));
//                shuttleCommands.add(shuttleCommands.size(), shuttleThread.getPalletCommand((short) 2));
//                break;
//            case SHUTTLE_TRANSPORT_TO_CONVEYOR:
//                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
//                shuttleTaskModeType = ShuttleTaskModeType.PAK_IN;
//
//                shuttleCommands.add(0, shuttleThread.getPalletCommand((short) 1));
//                shuttleCommands.add(shuttleCommands.size(), shuttleThread.getPalletCommand((short) 2));
//                break;
//            case SHUTTLE_CHARGE_ON:
//                shuttleTaskModeType = ShuttleTaskModeType.CHARGE;
//                shuttleCommands.add(shuttleThread.getChargeSwitchCommand((short) 1));
//                assignCommand.setCharge(Boolean.TRUE);
//                break;
            case SHUTTLE_CHARGE_ON://充电开
                shuttleTaskModeType = ShuttleTaskModeType.CHARGE;
                shuttleCommands.add(shuttleThread.getChargeCommand(motion.getWrkNo(), true));
                assignCommand.setCharge(Boolean.TRUE);
                break;
            case SHUTTLE_CHARGE_OFF://充电关
                shuttleTaskModeType = ShuttleTaskModeType.CHARGE;
                shuttleCommands.add(shuttleThread.getChargeCommand(motion.getWrkNo(), false));
                assignCommand.setCharge(Boolean.TRUE);
                break;
            case SHUTTLE_PALLET_LIFT://托盘顶升
                shuttleTaskModeType = ShuttleTaskModeType.PALLET_LIFT;
                shuttleCommands.add(shuttleThread.getLiftCommand(motion.getWrkNo(), true));
                break;
            case SHUTTLE_PALLET_DOWN://托盘下降
                shuttleTaskModeType = ShuttleTaskModeType.PALLET_DOWN;
                shuttleCommands.add(shuttleThread.getLiftCommand(motion.getWrkNo(), false));
                break;
            default:
                throw new CoolException(motion.getMotionCtgEl() + "没有指定任务作业流程!!!");
        }
@@ -417,8 +277,8 @@
            return false;
        }
//        SiemensLiftThread liftThread = null;
//        LiftProtocol liftProtocol = null;
        LiftThread liftThread = null;
        LiftProtocol liftProtocol = null;
        switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))){
            case SHUTTLE_MOVE:
@@ -430,21 +290,21 @@
                    return false;
                }
                break;
//            case SHUTTLE_MOVE_TO_LIFT:
//            case SHUTTLE_MOVE_FROM_LIFT:
//            case SHUTTLE_TRANSPORT_FROM_LIFT:
//            case SHUTTLE_TRANSPORT_TO_LIFT:
//            case SHUTTLE_MOVE_FROM_LIFT_TO_CONVEYOR:
//                liftThread = (SiemensLiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getTemp()));
//                if (liftThread == null) {
//                    return false;
//                }
//                liftProtocol = liftThread.getLiftProtocol();
//
//                if (!shuttleProtocol.getCurrentLocNo().equals(motion.getTarget())) {
//                    return false;
//                }
//
            case SHUTTLE_MOVE_TO_LIFT:
            case SHUTTLE_MOVE_FROM_LIFT:
            case SHUTTLE_TRANSPORT_FROM_LIFT:
            case SHUTTLE_TRANSPORT_TO_LIFT:
            case SHUTTLE_MOVE_FROM_LIFT_TO_CONVEYOR:
                liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getTemp()));
                if (liftThread == null) {
                    return false;
                }
                liftProtocol = liftThread.getStatus();
                if (!shuttleProtocol.getCurrentLocNo().equals(motion.getTarget())) {
                    return false;
                }
//                //判断提升机是否被锁定
//                if (liftProtocol.getLiftLock()) {
//                    //解锁提升机
@@ -454,18 +314,18 @@
//                    liftThread.assignWork(lockCommand);
//                    return false;
//                }
//
//                //判断提升机工作号是否和当前任务相同
//                if (liftProtocol.getTaskNo().intValue() != motion.getWrkNo()) {
//                    return false;
//                }
//
//                if (liftProtocol.getTaskNo().intValue() != 0) {
                //判断提升机工作号是否和当前任务相同
                if (liftProtocol.getTaskNo().intValue() != motion.getWrkNo()) {
                    return false;
                }
//                if (liftProtocol.getTaskNo() != 0) {
//                    //清空提升机号
//                    liftThread.setTaskNo(0);
//                }
//
//                break;
                break;
            default:
                break;
        }
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java
@@ -18,6 +18,10 @@
    List<Task> selectByExecuteSts();
    List<Task> selectManualByAnalyzeSts();
    List<Task> selectManualByExecuteSts();
    List<Task> selectWaitAnalyzeInBoundTask();
    List<Task> selectPakOut();
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/TaskStsType.java
@@ -55,6 +55,15 @@
        throw new CoolException("TaskStsType Error!!!");
    }
    public static TaskStsType queryById(Long id) {
        TaskStsService taskStsService = SpringUtils.getBean(TaskStsService.class);
        TaskSts taskSts = taskStsService.getById(id);
        if (taskSts == null) {
            throw new CoolException("TaskStsType Error!!!");
        }
        return query(Long.valueOf(taskSts.getUuid()));
    }
    public Long getId() {
        TaskStsService taskStsService = SpringUtils.getBean(TaskStsService.class);
        TaskSts taskSts = taskStsService.getOne(new LambdaQueryWrapper<TaskSts>()
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java
@@ -16,6 +16,10 @@
    List<Task> selectByExecuteSts();
    List<Task> selectManualByAnalyzeSts();
    List<Task> selectManualByExecuteSts();
    List<Task> selectWaitAnalyzeInBoundTask();
    List<Task> selectPakOut();
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java
@@ -66,6 +66,16 @@
    }
    @Override
    public List<Task> selectManualByAnalyzeSts() {
        return this.baseMapper.selectManualByAnalyzeSts();
    }
    @Override
    public List<Task> selectManualByExecuteSts() {
        return this.baseMapper.selectManualByExecuteSts();
    }
    @Override
    public List<Task> selectWaitAnalyzeInBoundTask() {
        return this.baseMapper.selectWaitAnalyzeInBoundTask();
    }
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java
@@ -61,13 +61,13 @@
                    continue;
                }
                // 更新wrkMast
                switch (TaskStsType.query(task.getTaskSts())) {
                // 更新Task
                switch (TaskStsType.queryById(task.getTaskSts())) {
                    case ANALYZE_INBOUND:
                        task.setTaskSts(TaskStsType.EXECUTE_INBOUND.sts);
                        task.setTaskSts(TaskStsType.EXECUTE_INBOUND.getId());
                        break;
                    case ANALYZE_OUTBOUND:
                        task.setTaskSts(TaskStsType.EXECUTE_OUTBOUND.sts);
                        task.setTaskSts(TaskStsType.EXECUTE_OUTBOUND.getId());
                        break;
                }
                task.setUpdateTime(now);
@@ -90,13 +90,13 @@
                        continue;
                    }
                    // 更新wrkMast
                    switch (TaskStsType.query(task.getTaskSts())) {
                    // 更新Task
                    switch (TaskStsType.queryById(task.getTaskSts())) {
                        case EXECUTE_INBOUND:
                            task.setTaskSts(TaskStsType.COMPLETE_INBOUND.sts);
                            task.setTaskSts(TaskStsType.COMPLETE_INBOUND.getId());
                            break;
                        case EXECUTE_OUTBOUND:
                            task.setTaskSts(TaskStsType.COMPLETE_OUTBOUND.sts);
                            task.setTaskSts(TaskStsType.COMPLETE_OUTBOUND.getId());
                            break;
                    }
                    task.setUpdateTime(now);
@@ -173,7 +173,59 @@
//    @Scheduled(cron = "0/1 * * * * ? ")
    public synchronized void executeManualTask() {
        Date now = new Date();
        // ANALYZE_MANUAL
        for (Task task : taskService.selectByAnalyzeSts()) {
            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.queryById(task.getTaskSts())) {
                    case ANALYZE_MANUAL:
                        task.setTaskSts(TaskStsType.EXECUTE_MANUAL.getId());
                        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.queryById(task.getTaskSts())) {
                        case EXECUTE_MANUAL:
                            task.setTaskSts(TaskStsType.COMPLETE_MANUAL.getId());
                            break;
                    }
                    task.setUpdateTime(now);
                    if (!taskService.updateById(task)) {
                        log.error("{}他工作档更新状态失败!", task.getTaskNo());
                    }
                }
            }
        }
    }
    @Scheduled(cron = "0/1 * * * * ? ")
zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml
@@ -13,14 +13,28 @@
    <select id="selectByAnalyzeSts" resultType="com.zy.asrs.wcs.core.entity.Task">
        select * from wcs_task
        where 1=1
        and task_sts in (2, 102, 202, 302)
        and task_sts in (2, 102)
        order by priority desc,start_time,task_no asc
    </select>
    <select id="selectByExecuteSts" resultType="com.zy.asrs.wcs.core.entity.Task">
        select * from wcs_task
        where 1=1
        and task_sts in (3, 103, 203, 303)
        and task_sts in (3, 103)
        order by priority desc,start_time,task_no asc
    </select>
    <select id="selectManualByAnalyzeSts" resultType="com.zy.asrs.wcs.core.entity.Task">
        select * from wcs_task
        where 1=1
          and task_sts in (402)
        order by priority desc,start_time,task_no asc
    </select>
    <select id="selectManualByExecuteSts" resultType="com.zy.asrs.wcs.core.entity.Task">
        select * from wcs_task
        where 1=1
          and task_sts in (403)
        order by priority desc,start_time,task_no asc
    </select>