*
lsh
2025-11-24 a775cccf69b395cff784ea50164b89a6ef00341a
src/main/java/com/zy/asrs/controller/RgvController.java
@@ -66,113 +66,113 @@
    private LocMastService locMastService;
    @Autowired
    private BasRgvMapMapper basRgvMapMapper;
    @ManagerAuth(memo = "解锁小车")
    @PostMapping("/lock")
    public R lock(CrnOperatorParam param){
        RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, param.getRgvNo());
        rgvThread.setPakMk(true);
        return R.ok();
    }
    @PostMapping("/table/rgv/state")
    @ManagerAuth(memo = "RGV信息表")
    public R rgvStateTable() {
        List<RgvStateTableVo> list = new ArrayList<>();
        List<BasRgv> rgvs = basRgvService.selectList(new EntityWrapper<BasRgv>().orderBy("rgv_no"));
        for (BasRgv basRgv : rgvs) {
            RgvStateTableVo vo = new RgvStateTableVo();
            vo.setRgvNo(basRgv.getRgvNo());   //  RGV号
            list.add(vo);
            // 获取RGV信息
            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basRgv.getRgvNo());
            if (rgvThread == null) continue;
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
            if (rgvProtocol == null) continue;
            BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
            vo.setStatusType(rgvProtocol.modeType.desc);   // 模式状态
            vo.setStatus(String.valueOf(rgvProtocol.getMode())); // 状态
            vo.setWorkNo1(rgvProtocol.getTaskNo1());      // 工位1任务号
            vo.setStatus1(rgvProtocol.getStatusType1().desc); // 工位1状态
            vo.setLoading1(rgvProtocol.getLoaded1() ? "有物" : "无物"); // 工位1有物
            vo.setRgvPos(basRgvMap != null?basRgvMap.getNowRoute():0);
            vo.setRgvPos1(rgvProtocol.getRgvPosI2());
            vo.setWalkPos(Objects.equals(rgvProtocol.getWalkPos(), 1) ? "在定位" : "不在定位");
            vo.setPakMk(rgvThread.isPakMk() ? "无锁" : "锁定");
//            vo.setPakIn(rgvThread.isPakIn() ? "可入" : "不可入");
//            vo.setPakOut(rgvThread.isPakOut() ? "可出" : "不可出");
//            vo.setPakRgv(rgvThread.isPakRgv() ? "无锁" : "锁定");
            vo.setPaking(rgvThread.isPaking()? "无锁" : "锁定");
//            vo.setPakAll(rgvThread.isPakAll() ? "无锁" : "锁定");
//            vo.setPakToCrn(rgvThread.isPakToCrn() ? "无锁" : "锁定");
//    @ManagerAuth(memo = "解锁小车")
//    @PostMapping("/lock")
//    public R lock(CrnOperatorParam param){
//        RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, param.getRgvNo());
//        rgvThread.setPakMk(true);
//        return R.ok();
//    }
//
//    @PostMapping("/table/rgv/state")
//    @ManagerAuth(memo = "RGV信息表")
//    public R rgvStateTable() {
//        List<RgvStateTableVo> list = new ArrayList<>();
//        List<BasRgv> rgvs = basRgvService.selectList(new EntityWrapper<BasRgv>().orderBy("rgv_no"));
//
//        for (BasRgv basRgv : rgvs) {
//            RgvStateTableVo vo = new RgvStateTableVo();
//            vo.setRgvNo(basRgv.getRgvNo());   //  RGV号
//            list.add(vo);
//
//            // 获取RGV信息
//            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basRgv.getRgvNo());
//            if (rgvThread == null) continue;
//
//            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
//            if (rgvProtocol == null) continue;
//            BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
//
//            vo.setStatusType(rgvProtocol.modeType.desc);   // 模式状态
//            vo.setStatus(String.valueOf(rgvProtocol.getMode())); // 状态
//            vo.setWorkNo1(rgvProtocol.getTaskNo1());      // 工位1任务号
//            vo.setStatus1(rgvProtocol.getStatusType1().desc); // 工位1状态
//            vo.setLoading1(rgvProtocol.getLoaded1() ? "有物" : "无物"); // 工位1有物
//            vo.setRgvPos(basRgvMap != null?basRgvMap.getNowRoute():0);
//            vo.setRgvPos1(rgvProtocol.getRgvPosI2());
//            vo.setWalkPos(Objects.equals(rgvProtocol.getWalkPos(), 1) ? "在定位" : "不在定位");
//            vo.setPakMk(rgvThread.isPakMk() ? "无锁" : "锁定");
////            vo.setPakIn(rgvThread.isPakIn() ? "可入" : "不可入");
////            vo.setPakOut(rgvThread.isPakOut() ? "可出" : "不可出");
////            vo.setPakRgv(rgvThread.isPakRgv() ? "无锁" : "锁定");
//            vo.setPaking(rgvThread.isPaking()? "无锁" : "锁定");
////            vo.setPakAll(rgvThread.isPakAll() ? "无锁" : "锁定");
////            vo.setPakToCrn(rgvThread.isPakToCrn() ? "无锁" : "锁定");
//
//
//            vo.setWorkNo2(rgvProtocol.getTaskNo2());      // 工位2任务号
////            vo.setStatus2(rgvProtocol.getStatusType2().desc); // 工位2状态
//            vo.setLoading2(rgvProtocol.getLoaded2() ? "有物" : "无物"); // 工位2有物
//
//            // --- 遍历 errX 字段生成 warnCode 和 alarm ---
//            List<String> alarms = new ArrayList<>();
//            List<String> warnCodes = new ArrayList<>();
//            Field[] fields = rgvProtocol.getClass().getDeclaredFields();
//            for (Field field : fields) {
//                if (field.getName().startsWith("err") && field.getType().equals(Boolean.class)) {
//                    field.setAccessible(true);
//                    try {
//                        Boolean value = (Boolean) field.get(rgvProtocol);
//                        if (Boolean.TRUE.equals(value)) {
//                            String numPart = field.getName().substring(3);
//                            int errId = Integer.parseInt(numPart);
//                            warnCodes.add(String.valueOf(errId));
//
//                            BasRgvErr rgvErr = basRgvErrMapper.selectById(errId);
//                            alarms.add(rgvErr == null ? "未知异常(" + errId + ")" : rgvErr.getErrName());
//                        }
//                    } catch (IllegalAccessException e) {
//                        e.printStackTrace();
//                    }
//                }
//            }
//
//            vo.setWarnCode(String.join(",", warnCodes));
//            vo.setAlarm(alarms.isEmpty() ? "" : String.join(",", alarms));
//        }
//
//        return R.ok().add(list);
//    }
            vo.setWorkNo2(rgvProtocol.getTaskNo2());      // 工位2任务号
//            vo.setStatus2(rgvProtocol.getStatusType2().desc); // 工位2状态
            vo.setLoading2(rgvProtocol.getLoaded2() ? "有物" : "无物"); // 工位2有物
            // --- 遍历 errX 字段生成 warnCode 和 alarm ---
            List<String> alarms = new ArrayList<>();
            List<String> warnCodes = new ArrayList<>();
            Field[] fields = rgvProtocol.getClass().getDeclaredFields();
            for (Field field : fields) {
                if (field.getName().startsWith("err") && field.getType().equals(Boolean.class)) {
                    field.setAccessible(true);
                    try {
                        Boolean value = (Boolean) field.get(rgvProtocol);
                        if (Boolean.TRUE.equals(value)) {
                            String numPart = field.getName().substring(3);
                            int errId = Integer.parseInt(numPart);
                            warnCodes.add(String.valueOf(errId));
                            BasRgvErr rgvErr = basRgvErrMapper.selectById(errId);
                            alarms.add(rgvErr == null ? "未知异常(" + errId + ")" : rgvErr.getErrName());
                        }
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                }
            }
            vo.setWarnCode(String.join(",", warnCodes));
            vo.setAlarm(alarms.isEmpty() ? "" : String.join(",", alarms));
        }
        return R.ok().add(list);
    }
    @PostMapping("/table/rgv/msg")
    @ManagerAuth(memo = "RGV数据表")
    public R rgvMsgTable(){
        List<RgvMsgTableVo> list = new ArrayList<>();
        List<BasRgv> rgvs = basRgvService.selectList(new EntityWrapper<BasRgv>().orderBy("rgv_no"));
        for (BasRgv basRgv : rgvs) {
            // 表格行
            RgvMsgTableVo vo = new RgvMsgTableVo();
            vo.setRgvNo(basRgv.getRgvNo());   //  RGV号
            list.add(vo);
            // 获取RGV信息
            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basRgv.getRgvNo());
            if (rgvThread == null) {
                continue;
            }
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
            if (rgvProtocol == null) {
                continue;
            }
            vo.setWorkNo1(rgvProtocol.getTaskNo1());  //  工位1工作号
            vo.setWorkNo2(rgvProtocol.getTaskNo2()); //工位2 工作号
            vo.setStaNo(String.valueOf(rgvProtocol.getRgvPosDestination())); //小车目标站
            vo.setStatus(rgvProtocol.modeType.equals(RgvModeType.AUTO)? rgvProtocol.modeType.desc: RgvModeType.HAND.desc);   //  模式状态
        }
        return R.ok().add(list);
    }
//    @PostMapping("/table/rgv/msg")
//    @ManagerAuth(memo = "RGV数据表")
//    public R rgvMsgTable(){
//        List<RgvMsgTableVo> list = new ArrayList<>();
//        List<BasRgv> rgvs = basRgvService.selectList(new EntityWrapper<BasRgv>().orderBy("rgv_no"));
//        for (BasRgv basRgv : rgvs) {
//            // 表格行
//            RgvMsgTableVo vo = new RgvMsgTableVo();
//            vo.setRgvNo(basRgv.getRgvNo());   //  RGV号
//            list.add(vo);
//            // 获取RGV信息
//            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basRgv.getRgvNo());
//            if (rgvThread == null) {
//                continue;
//            }
//            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
//            if (rgvProtocol == null) {
//                continue;
//            }
//
//            vo.setWorkNo1(rgvProtocol.getTaskNo1());  //  工位1工作号
//            vo.setWorkNo2(rgvProtocol.getTaskNo2()); //工位2 工作号
//            vo.setStaNo(String.valueOf(rgvProtocol.getRgvPosDestination())); //小车目标站
//            vo.setStatus(rgvProtocol.modeType.equals(RgvModeType.AUTO)? rgvProtocol.modeType.desc: RgvModeType.HAND.desc);   //  模式状态
//
//        }
//        return R.ok().add(list);
//    }
    @PostMapping("/output/site")
    @ManagerAuth(memo = "RGV报文日志输出")
@@ -187,196 +187,196 @@
        return R.ok().add(str.toString());
    }
    /****************************************************************/
    /************************** 手动操作 ******************************/
    /****************************************************************/
    @ManagerAuth(memo = "取放货")
    @PostMapping("/operator/put")
    public R rgvFetchPut(RgvOperatorParam param){
        RgvCommand command = new RgvCommand();
        command.setRgvNo(param.getRgvNo()); // RGV编号
        command.setAckFinish1(false);  // 任务完成确认位
        command.setTaskNo(0); // 工作号
        command.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 任务模式: 取放货
        command.setSourceStaNo1(param.getSourceStaNo1()); // 源站
//        command.setDestinationStaNo1(param.getStaNo1());  // 目标站
        command.setAckFinish2(false);  // 任务完成确认位
        command.setTaskNo2(0); // 工作号
        command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 任务模式: 取放货
        command.setSourceStaNo2(param.getSourceStaNo2()); // 源站
//        command.setDestinationStaNo2(param.getStaNo2());  // 目标站
        command.setCommand(true);
        return rgvControl(command)? R.ok(): R.error();
    }
    @ManagerAuth(memo = "取货")
    @PostMapping("/operator/take")
    public R rgvFetch(RgvOperatorParam param){
        RgvCommand command = new RgvCommand();
        command.setRgvNo(param.getRgvNo()); // RGV编号
        command.setWrkTaskPri(param.getWorkSta());  //执行工位
        command.setTaskNo(Math.toIntExact(param.getWorkNo())); // 工作号
        command.setTaskStatus(RgvTaskStatusType.FETCH); // 任务模式: 取货
        command.setTargetPosition(Integer.valueOf(param.getStaNo()));  // 目标站
//        command.setTaskMode2(RgvTaskModeType.FETCH); // 任务模式: 取放货
//    /****************************************************************/
//    /************************** 手动操作 ******************************/
//    /****************************************************************/
//
//    @ManagerAuth(memo = "取放货")
//    @PostMapping("/operator/put")
//    public R rgvFetchPut(RgvOperatorParam param){
//        RgvCommand command = new RgvCommand();
//        command.setRgvNo(param.getRgvNo()); // RGV编号
//        command.setAckFinish1(false);  // 任务完成确认位
//        command.setTaskNo(0); // 工作号
//        command.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 任务模式: 取放货
//        command.setSourceStaNo1(param.getSourceStaNo1()); // 源站
////        command.setDestinationStaNo1(param.getStaNo1());  // 目标站
//        command.setAckFinish2(false);  // 任务完成确认位
//        command.setTaskNo2( 0); // 工作号
//        command.setTaskNo2(0); // 工作号
//        command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 任务模式: 取放货
//        command.setSourceStaNo2(param.getSourceStaNo2()); // 源站
//        command.setDestinationStaNo2(param.getStaNo2());  // 目标站
        command.setCommand(true);
////        command.setDestinationStaNo2(param.getStaNo2());  // 目标站
//        command.setCommand(true);
//
//        return rgvControl(command)? R.ok(): R.error();
//    }
        return rgvControl(command)? R.ok(): R.error();
    }
//    @ManagerAuth(memo = "取货")
//    @PostMapping("/operator/take")
//    public R rgvFetch(RgvOperatorParam param){
//        RgvCommand command = new RgvCommand();
//        command.setRgvNo(param.getRgvNo()); // RGV编号
//        command.setWrkTaskPri(param.getWorkSta());  //执行工位
//        command.setTaskNo(Math.toIntExact(param.getWorkNo())); // 工作号
//        command.setTaskStatus(RgvTaskStatusType.FETCH); // 任务模式: 取货
//        command.setTargetPosition(Integer.valueOf(param.getStaNo()));  // 目标站
////        command.setTaskMode2(RgvTaskModeType.FETCH); // 任务模式: 取放货
////        command.setAckFinish1(false);  // 任务完成确认位
////        command.setSourceStaNo1(param.getSourceStaNo1()); // 源站
////        command.setAckFinish2(false);  // 任务完成确认位
////        command.setTaskNo2( 0); // 工作号
////        command.setSourceStaNo2(param.getSourceStaNo2()); // 源站
////        command.setDestinationStaNo2(param.getStaNo2());  // 目标站
//        command.setCommand(true);
//
//        return rgvControl(command)? R.ok(): R.error();
//    }
    @ManagerAuth(memo = "放货")
    @PostMapping("/operator/stockMove")
    public R rgvPut(RgvOperatorParam param){
        RgvCommand command = new RgvCommand();
        command.setRgvNo(param.getRgvNo()); // RGV编号
        command.setWrkTaskPri(param.getWorkSta());  //执行工位
        command.setTaskNo(Math.toIntExact(param.getWorkNo())); // 工作号
        command.setTaskStatus(RgvTaskStatusType.PUT); // 任务模式: 取货
        command.setTargetPosition(Integer.valueOf(param.getStaNo()));  // 目标站
//        command.setAckFinish1(false);  // 任务完成确认位
//        command.setSourceStaNo1(param.getSourceStaNo1()); // 源站
//        command.setAckFinish2(false);  // 任务完成确认位
//    @ManagerAuth(memo = "放货")
//    @PostMapping("/operator/stockMove")
//    public R rgvPut(RgvOperatorParam param){
//        RgvCommand command = new RgvCommand();
//        command.setRgvNo(param.getRgvNo()); // RGV编号
//        command.setWrkTaskPri(param.getWorkSta());  //执行工位
//        command.setTaskNo(Math.toIntExact(param.getWorkNo())); // 工作号
//        command.setTaskStatus(RgvTaskStatusType.PUT); // 任务模式: 取货
//        command.setTargetPosition(Integer.valueOf(param.getStaNo()));  // 目标站
////        command.setAckFinish1(false);  // 任务完成确认位
////        command.setSourceStaNo1(param.getSourceStaNo1()); // 源站
////        command.setAckFinish2(false);  // 任务完成确认位
////        command.setTaskNo2( 0); // 工作号
////        command.setTaskMode2(RgvTaskModeType.FETCH); // 任务模式: 取放货
////        command.setSourceStaNo2(param.getSourceStaNo2()); // 源站
////        command.setDestinationStaNo2(param.getStaNo2());  // 目标站
//        command.setCommand(true);
//
//        return rgvControl(command)? R.ok(): R.error();
//    }
//    @ManagerAuth(memo = "任务完成")
//    @PostMapping("/operator/taskComplete")
//    public R rgvTaskComplete(RgvOperatorParam param){
//        RgvCommand command = new RgvCommand();
//        command.setRgvNo(param.getRgvNo()); // RGV编号
//        command.setAckFinish1(true);  // 任务完成确认位
////        command.setTaskNo1(0); // 工作号
//        command.setTaskMode1(RgvTaskModeType.NONE); // 任务模式
//        command.setSourceStaNo1((short) 0); // 源站
//        command.setDestinationStaNo1((short) 0);  // 目标站
//        command.setAckFinish2(true);  // 任务完成确认位
//        command.setTaskNo2( 0); // 工作号
//        command.setTaskMode2(RgvTaskModeType.FETCH); // 任务模式: 取放货
//        command.setSourceStaNo2(param.getSourceStaNo2()); // 源站
//        command.setDestinationStaNo2(param.getStaNo2());  // 目标站
        command.setCommand(true);
//        command.setTaskMode2(RgvTaskModeType.NONE); // 任务模式
//        command.setSourceStaNo2((short) 0); // 源站
//        command.setDestinationStaNo2((short) 0);  // 目标站
//        command.setCommand(true);
//
//        return rgvControl(command)? R.ok(): R.error();
//    }
        return rgvControl(command)? R.ok(): R.error();
    }
//    @ManagerAuth(memo = "清除命令")
//    @PostMapping("/operator/clearCommand")
//    public R rgvClearCommand(RgvOperatorParam param){
//        if (param.getRgvNo() == null) {
//            throw new CoolException("请选择RGV号");
//        }
//        RgvCommand command = new RgvCommand();
//        command.setRgvNo(param.getRgvNo()); // RGV编号
//        command.setWrkTaskPri(0);  //执行工位
//        command.setTaskNo(Math.toIntExact(0)); // 工作号
//        command.setTaskStatus((short)0); // 任务模式: 取货
//        command.setTargetPosition(0);  // 目标站
//
//        return rgvClear(command)? R.ok(): R.error();
//    }
    @ManagerAuth(memo = "任务完成")
    @PostMapping("/operator/taskComplete")
    public R rgvTaskComplete(RgvOperatorParam param){
        RgvCommand command = new RgvCommand();
        command.setRgvNo(param.getRgvNo()); // RGV编号
        command.setAckFinish1(true);  // 任务完成确认位
//        command.setTaskNo1(0); // 工作号
        command.setTaskMode1(RgvTaskModeType.NONE); // 任务模式
        command.setSourceStaNo1((short) 0); // 源站
        command.setDestinationStaNo1((short) 0);  // 目标站
        command.setAckFinish2(true);  // 任务完成确认位
        command.setTaskNo2( 0); // 工作号
        command.setTaskMode2(RgvTaskModeType.NONE); // 任务模式
        command.setSourceStaNo2((short) 0); // 源站
        command.setDestinationStaNo2((short) 0);  // 目标站
        command.setCommand(true);
        return rgvControl(command)? R.ok(): R.error();
    }
    @ManagerAuth(memo = "清除命令")
    @PostMapping("/operator/clearCommand")
    public R rgvClearCommand(RgvOperatorParam param){
        if (param.getRgvNo() == null) {
            throw new CoolException("请选择RGV号");
        }
        RgvCommand command = new RgvCommand();
        command.setRgvNo(param.getRgvNo()); // RGV编号
        command.setWrkTaskPri(0);  //执行工位
        command.setTaskNo(Math.toIntExact(0)); // 工作号
        command.setTaskStatus((short)0); // 任务模式: 取货
        command.setTargetPosition(0);  // 目标站
        return rgvClear(command)? R.ok(): R.error();
    }
    @ManagerAuth(memo = "手动复位")
    @PostMapping("/operator/handleReset")
    public R handleReset(RgvOperatorParam param) throws Exception {
        if (param.getRgvNo() == null) {
            throw new CoolException("请选择RGV");
        }
        // 获取RGV缓存
        for (RgvSlave rgv : slaveProperties.getRgv()) {
            // 获取RGV信息
            if (param.getRgvNo().equals(rgv.getId())) {
                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
                if (rgvThread == null) {
                    throw new CoolException("RGV不在线");
                }
                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                if (rgvProtocol == null) {
                    throw new CoolException("RGV不在线");
                }
                RgvCommand Command = new RgvCommand();
                Command.setRgvNo(rgv.getId()); // RGV编号
                Command.setTaskMode1(RgvTaskModeType.NONE);
                Command.setAckFinish1(true);  // 任务完成确认位
                Command.setAckFinish2(true);  // 任务完成确认位
                Command.setCommand(true);  // 任务完成确认位
                // 延时发送
                Thread.sleep(1000L);
                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(4, Command))) {
                    return R.ok();
                } else {
                    throw new CoolException("命令下发失败");
                }
            }
        }
        return R.error();
    }
    private boolean rgvControl(RgvCommand command){
        if (command.getRgvNo() == null) {
            throw new CoolException("请选择RGV");
        }
        for (RgvSlave rgv : slaveProperties.getRgv()) {
            // 获取RGV信息
            if (command.getRgvNo().equals(rgv.getId())) {
                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
                if (rgvThread == null) {
                    throw new CoolException("RGV不在线");
                }
                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                if (rgvProtocol == null) {
                    throw new CoolException("RGV不在线");
                }
                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(2, command))) {
                    return true;
                } else {
                    throw new CoolException("命令下发失败");
                }
            }
        }
        return false;
    }
    private boolean rgvClear(RgvCommand command){
        if (command.getRgvNo() == null) {
            throw new CoolException("请选择RGV");
        }
        for (RgvSlave rgv : slaveProperties.getRgv()) {
            // 获取RGV信息
            if (command.getRgvNo().equals(rgv.getId())) {
                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
                if (rgvThread == null) {
                    throw new CoolException("RGV不在线");
                }
                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                if (rgvProtocol == null) {
                    throw new CoolException("RGV不在线");
                }
                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(3, command))) {
                    return true;
                } else {
                    throw new CoolException("命令下发失败");
                }
            }
        }
        return false;
    }
//    @ManagerAuth(memo = "手动复位")
//    @PostMapping("/operator/handleReset")
//    public R handleReset(RgvOperatorParam param) throws Exception {
//        if (param.getRgvNo() == null) {
//            throw new CoolException("请选择RGV");
//        }
//        // 获取RGV缓存
//        for (RgvSlave rgv : slaveProperties.getRgv()) {
//            // 获取RGV信息
//            if (param.getRgvNo().equals(rgv.getId())) {
//                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
//                if (rgvThread == null) {
//                    throw new CoolException("RGV不在线");
//                }
//                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
//                if (rgvProtocol == null) {
//                    throw new CoolException("RGV不在线");
//                }
//                RgvCommand Command = new RgvCommand();
//                Command.setRgvNo(rgv.getId()); // RGV编号
//                Command.setTaskMode1(RgvTaskModeType.NONE);
//                Command.setAckFinish1(true);  // 任务完成确认位
//                Command.setAckFinish2(true);  // 任务完成确认位
//                Command.setCommand(true);  // 任务完成确认位
//                // 延时发送
//                Thread.sleep(1000L);
//                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(4, Command))) {
//                    return R.ok();
//                } else {
//                    throw new CoolException("命令下发失败");
//                }
//
//            }
//        }
//        return R.error();
//    }
//
//    private boolean rgvControl(RgvCommand command){
//        if (command.getRgvNo() == null) {
//            throw new CoolException("请选择RGV");
//        }
//        for (RgvSlave rgv : slaveProperties.getRgv()) {
//            // 获取RGV信息
//            if (command.getRgvNo().equals(rgv.getId())) {
//                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
//                if (rgvThread == null) {
//                    throw new CoolException("RGV不在线");
//                }
//                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
//                if (rgvProtocol == null) {
//                    throw new CoolException("RGV不在线");
//                }
//                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(2, command))) {
//                    return true;
//                } else {
//                    throw new CoolException("命令下发失败");
//                }
//            }
//        }
//        return false;
//    }
//
//    private boolean rgvClear(RgvCommand command){
//        if (command.getRgvNo() == null) {
//            throw new CoolException("请选择RGV");
//        }
//        for (RgvSlave rgv : slaveProperties.getRgv()) {
//            // 获取RGV信息
//            if (command.getRgvNo().equals(rgv.getId())) {
//                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
//                if (rgvThread == null) {
//                    throw new CoolException("RGV不在线");
//                }
//                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
//                if (rgvProtocol == null) {
//                    throw new CoolException("RGV不在线");
//                }
//                if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(3, command))) {
//                    return true;
//                } else {
//                    throw new CoolException("命令下发失败");
//                }
//            }
//        }
//        return false;
//
//    }
}