| package com.zy.asrs.wcs.core.kernel.command; | 
|   | 
| import com.zy.asrs.wcs.core.entity.Motion; | 
| import com.zy.asrs.wcs.core.utils.ConveyorDispatcher; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Service; | 
|   | 
| /** | 
|  * Created by vincent on 2023/10/23 | 
|  */ | 
| @Slf4j | 
| @Service | 
| public class ConveyorCommandService { | 
|   | 
|     @Autowired | 
|     private ConveyorDispatcher conveyorDispatcher; | 
|   | 
|     public Boolean accept(Motion motion) { | 
| //        Integer deviceNo = Integer.parseInt(motion.getDevice()); | 
| //        SiemensDevpThread devpThread; | 
| //        StaProtocol staProtocol; | 
| //        BasDevp staDetl; | 
| //        StaProtocol clone; | 
| //        SiemensLiftThread liftThread; | 
| //        LiftProtocol liftProtocol; | 
| //        switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))){ | 
| //            // 输送线指令下发 | 
| //            case CONVEYOR_INBOUND: | 
| //                devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, deviceNo); | 
| // | 
| //                staProtocol = devpThread.getStation().get(Integer.parseInt(motion.getOrigin())); | 
| //                if (staProtocol == null) { | 
| //                    return false; | 
| //                } | 
| //                // 查询站点详细信息 | 
| //                staDetl = basDevpService.selectById(staProtocol.getSiteId()); | 
| //                if (staDetl == null || Cools.isEmpty(staDetl.getCanining()) || !"Y".equals(staDetl.getCanining())) { | 
| //                    News.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", staProtocol.getSiteId()); | 
| //                    return false; | 
| //                } | 
| //                if (!staProtocol.isAutoing() | 
| //                        || !staProtocol.isLoading() | 
| //                        || !staProtocol.isInEnable() | 
| //                        || !(staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990)) { | 
| //                    return false; | 
| //                } | 
| // | 
| //                if (!staProtocol.getWorkNo().equals(motion.getWrkNo().shortValue())) { | 
| //                    return false; | 
| //                } | 
| // | 
| //                clone = staProtocol.clone(); | 
| // | 
| //                clone.setWorkNo(motion.getWrkNo().shortValue()); | 
| //                clone.setStaNo(Short.parseShort(motion.getTarget())); | 
| // | 
| //                devpThread.setPakMk(staProtocol.getSiteId(), false); | 
| // | 
| //                return MessageQueue.offer(SlaveType.Devp, deviceNo, new Task(2, clone)); | 
| // | 
| //            case CONVEYOR_INBOUND_TO_LIFT: | 
| //                // 输送线 ----------------------------------------------- | 
| //                devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, deviceNo); | 
| // | 
| //                staProtocol = devpThread.getStation().get(Integer.parseInt(motion.getOrigin())); | 
| //                if (staProtocol == null) { | 
| //                    return false; | 
| //                } | 
| //                // 查询站点详细信息 | 
| //                staDetl = basDevpService.selectById(staProtocol.getSiteId()); | 
| //                if (staDetl == null || Cools.isEmpty(staDetl.getCanining()) || !"Y".equals(staDetl.getCanining())) { | 
| //                    News.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", staProtocol.getSiteId()); | 
| //                    return false; | 
| //                } | 
| //                if (!staProtocol.isAutoing() | 
| //                        || !staProtocol.isLoading() | 
| ////                        || !staProtocol.isInEnable() | 
| //                        || (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9991) | 
| //                        || !staProtocol.isPakMk()) { | 
| //                    return false; | 
| //                } | 
| // | 
| //                // 提升机判断 ----------------------------------------------- | 
| //                liftThread = (SiemensLiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getDockNo())); | 
| //                liftProtocol = liftThread.getLiftProtocol(); | 
| //                if (null == liftProtocol) { | 
| //                    return false; | 
| //                } | 
| //                DevpSlave.Sta inSta = devpThread.getSlave().queryInSta(staProtocol.getSiteId()); | 
| //                if (!(liftProtocol.getMode() | 
| //                        || liftProtocol.getReady() | 
| //                        || !liftProtocol.getRunning() | 
| //                        || !liftProtocol.getLev().equals(Short.parseShort(motion.getTarget())))) { | 
| //                    return false; | 
| //                } | 
| // | 
| //                // 下发命令 ----------------------------------------------- | 
| // | 
| //                // 1.驱动提升机电机 | 
| //                LiftCommand liftCommand = new LiftCommand(); | 
| // | 
| //                LiftInteractiveModeType liftInteractiveModeType = null; | 
| //                switch (Integer.parseInt(motion.getOrigin())) { | 
| //                    case 2: | 
| //                        liftInteractiveModeType = LiftInteractiveModeType.ENGINE_EMPTY_TURN; | 
| //                        break; | 
| //                    case 7: | 
| //                        liftInteractiveModeType = LiftInteractiveModeType.ENGINE_EMPTY_TURN; | 
| //                        break; | 
| //                    case 9: | 
| //                    case 10: | 
| //                    case 11: | 
| //                        liftInteractiveModeType = LiftInteractiveModeType.ENGINE_EMPTY_TURN; | 
| //                        break; | 
| //                    default: | 
| //                        break; | 
| //                } | 
| // | 
| //                if (liftInteractiveModeType == null) { | 
| //                    return false; | 
| //                } | 
| //                liftCommand = liftThread.getLiftTurnCommand(liftInteractiveModeType.id); | 
| //                liftCommand.setLiftNo(liftProtocol.getLiftNo()); | 
| //                liftCommand.setTaskNo(motion.getWrkNo().shortValue()); | 
| //                if (!liftThread.assignWork(liftCommand)) { | 
| //                    return false; | 
| //                } | 
| // | 
| //                try { | 
| //                    Thread.sleep(1000); | 
| //                } catch (Exception e) { | 
| //                    e.printStackTrace(); | 
| //                } | 
| // | 
| //                // 2.下发输送线任务 | 
| //                clone = staProtocol.clone(); | 
| //                // 判断是否存在提升机代理站点 | 
| //                ConveyorProxyType conveyorProxyType = ConveyorProxyType.queryByLift(Integer.parseInt(motion.getDockNo()), true); | 
| //                clone.setWorkNo(motion.getWrkNo().shortValue()); | 
| //                clone.setStaNo(conveyorProxyType.liftProxyStaNo.shortValue()); | 
| //                devpThread.setPakMk(staProtocol.getSiteId(), false); | 
| //                return MessageQueue.offer(SlaveType.Devp, deviceNo, new Task(2, clone)); | 
| // | 
| //            case CONVEYOR_OUTBOUND: | 
| //                devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, deviceNo); | 
| // | 
| //                staProtocol = devpThread.getStation().get(Integer.parseInt(motion.getOrigin())); | 
| //                if (staProtocol == null) { | 
| //                    return false; | 
| //                } | 
| //                if (!staProtocol.isAutoing() | 
| //                        || !staProtocol.isLoading() | 
| //                        || staProtocol.getWorkNo() != 0 | 
| //                        || !staProtocol.isPakMk()) { | 
| //                    return false; | 
| //                } | 
| // | 
| //                // 下发命令 ----------------------------------------------- | 
| //                clone = staProtocol.clone(); | 
| //                clone.setWorkNo(motion.getWrkNo().shortValue()); | 
| //                clone.setStaNo(Short.parseShort(motion.getTarget())); | 
| // | 
| //                devpThread.setPakMk(clone.getSiteId(), false); | 
| // | 
| //                return MessageQueue.offer(SlaveType.Devp, deviceNo, new Task(2, clone)); | 
| // | 
| ////            case CONVEYOR_OUTBOUND_FROM_LIFT: | 
| ////                Integer liftNo = Integer.parseInt(motion.getDockNo()); | 
| //// | 
| ////                LiftNeighborType.query(liftNo, ) | 
| //// | 
| ////                // 输送线 ----------------------------------------------- | 
| ////                devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, deviceNo); | 
| //// | 
| ////                staProtocol = devpThread.getStation().get(Integer.parseInt(motion.getTarget())); | 
| ////                if (staProtocol == null) { | 
| ////                    return false; | 
| ////                } | 
| ////                // 查询站点详细信息 | 
| ////                staDetl = basDevpService.selectById(staProtocol.getSiteId()); | 
| ////                if (staDetl == null || Cools.isEmpty(staDetl.getCanouting()) || !"Y".equals(staDetl.getCanouting())) { | 
| ////                    News.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", staProtocol.getSiteId()); | 
| ////                    return false; | 
| ////                } | 
| ////                if (!staProtocol.isAutoing() | 
| ////                        || !staProtocol.isLoading() | 
| ////                        || !staProtocol.isInEnable() | 
| ////                        || !(staProtocol.getWorkNo() >= 9991 && staProtocol.getWorkNo() <= 9999)) { | 
| ////                    return false; | 
| ////                } | 
| ////                if (!staProtocol.getWorkNo().equals(motion.getWrkNo().shortValue())) { | 
| ////                    return false; | 
| ////                } | 
| //// | 
| ////                // 提升机判断 ----------------------------------------------- | 
| ////                liftThread = (SiemensLiftThread) SlaveConnection.get(SlaveType.Lift, liftNo); | 
| ////                liftProtocol = liftThread.getLiftProtocol(); | 
| ////                if (null == liftProtocol) { | 
| ////                    return false; | 
| ////                } | 
| ////                DevpSlave.Sta inSta = devpThread.getSlave().queryOutSta(staProtocol.getSiteId()); | 
| ////                if (liftProtocol.getMode() != 1 | 
| ////                        || liftProtocol.getAlarm() != 2 | 
| ////                        || liftProtocol.getLoadingByGoods() != 1 | 
| ////                        || liftProtocol.getPos() != inSta.getLiftLev().shortValue()) { | 
| ////                    return false; | 
| ////                } | 
| // | 
| // | 
| //            default: | 
| //                break; | 
| //        } | 
|         return Boolean.TRUE; | 
|     } | 
|   | 
|     public Boolean finish(Motion motion) { | 
| //        Integer deviceNo = Integer.parseInt(motion.getDevice()); | 
| //        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, deviceNo); | 
| //        StaProtocol staProtocol; | 
| //        switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))){ | 
| //            case CONVEYOR_INBOUND: | 
| //                staProtocol = devpThread.getStation().get(Integer.parseInt(motion.getTarget())); | 
| //                if (staProtocol == null) { | 
| //                    return false; | 
| //                } | 
| //                if (!staProtocol.isAutoing() || !staProtocol.isLoading() || !(staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990)) { | 
| //                    return false; | 
| //                } | 
| //                if (!staProtocol.getWorkNo().equals(motion.getWrkNo().shortValue())) { | 
| //                    return false; | 
| //                } | 
| //                break; | 
| //            case CONVEYOR_OUTBOUND: | 
| //                // todo:luxiaotao 出库到目标站是否需要跟踪 | 
| ////                staProtocol = devpThread.getStation().get(Integer.parseInt(motion.getTarget())); | 
| ////                if (staProtocol == null) { | 
| ////                    return false; | 
| ////                } | 
| ////                if (!staProtocol.isAutoing() || !staProtocol.isLoading() || !(staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990)) { | 
| ////                    return false; | 
| ////                } | 
| ////                if (!staProtocol.getWorkNo().equals(motion.getWrkNo().shortValue())) { | 
| ////                    return false; | 
| ////                } | 
| //                break; | 
| //            case CONVEYOR_INBOUND_TO_LIFT: | 
| //                // 判断提升机状态 | 
| //                SiemensLiftThread liftThread = (SiemensLiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getDockNo())); | 
| //                LiftProtocol liftProtocol = liftThread.getLiftProtocol(); | 
| //                if (null == liftProtocol) { | 
| //                    return false; | 
| //                } | 
| // | 
| //                DevpSlave.Sta inSta = devpThread.getSlave().queryInSta(Integer.parseInt(motion.getOrigin())); | 
| //                if (!(liftProtocol.getMode() | 
| //                        || liftProtocol.getReady() | 
| //                        || !liftProtocol.getRunning() | 
| //                        || liftProtocol.getLev() != Short.parseShort(motion.getTarget()))) { | 
| //                    return false; | 
| //                } | 
| // | 
| //                //货物已经进入提升机 | 
| //                if (!(liftProtocol.getLineFrontHasStock() && liftProtocol.getLineEndHasStock())) { | 
| //                    return false; | 
| //                } | 
| // | 
| //                //清空提升机工作号 | 
| //                if (liftProtocol.getTaskNo().intValue() == motion.getWrkNo()) { | 
| //                    liftThread.setTaskNo(0); | 
| //                } | 
| // | 
| //                // 判断输送线状态 | 
| //                int originSta = Integer.parseInt(motion.getOrigin()); | 
| //                if (originSta == 6) { | 
| //                    originSta = 7; | 
| //                } | 
| //                staProtocol = devpThread.getStation().get(originSta); | 
| // | 
| //                // 停止输送线电机 | 
| //                int times = 0;boolean staProtocolMotorRes = false; | 
| //                while (times < 5) { | 
| //                    if (staProtocol.getStaMotorType().equals(StaMotorType.STANDBY)) { | 
| //                        staProtocolMotorRes = true; | 
| //                        break; | 
| //                    } | 
| //                    if (!devpThread.controlMotor(originSta, StaMotorType.REQ_STOP)) { | 
| //                        continue; | 
| //                    } | 
| //                    try { | 
| //                        Thread.sleep(500); | 
| //                    } catch (InterruptedException ignore) {} | 
| //                    times++; | 
| //                } | 
| //                if (!staProtocolMotorRes) { | 
| //                    return false; | 
| //                } | 
| // | 
| //                break; | 
| //            default: | 
| //                break; | 
| //        } | 
|   | 
|         return true; | 
|     } | 
|   | 
| } |