#
lty
2025-09-22 9784ec36b190d0f0103b42059585d04ea0b10745
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -3218,16 +3218,18 @@
            // 只有当RGV空闲 并且 无任务时才继续执行
            if ((rgvProtocol.getStatusType1() == RgvStatusType.IDLE || rgvProtocol.getStatusType2() == RgvStatusType.IDLE)
                    && rgvProtocol.getModeType() == RgvModeType.AUTO
//                    && rgvProtocol.getModeType() == RgvModeType.AUTO
                    && rgvThread.isPakMk()) {
                News.warnNoLog(""+mark+" - 0"+" - 开始执行RGV入出库作业下发");
                // 如果最近一次是入库模式
//                rgvRunWrkMastInTest();
                if (rgvProtocol.getLastIo().equals("I")) {
                    if (basRgv.getInEnable().equals("Y") && rgvThread.isPakIn()) {
                    if (basRgv.getInEnable().equals("1") && rgvThread.isPakIn()) {
                        //mark - 1 - ....
                        this.rgvRunWrkMastIn(rgv, rgvProtocol,mark); //  入库
                        rgvProtocol.setLastIo("O");
                    } else if (basRgv.getOutEnable().equals("Y") && rgvThread.isPakOut()) {
                    } else if (basRgv.getOutEnable().equals("1") && rgvThread.isPakOut()) {
                        //mark - 2 - ....
                        this.rgvRunWrkMastOut(rgv, rgvProtocol,mark); //  出库
                        rgvProtocol.setLastIo("I");
@@ -3235,10 +3237,10 @@
                }
                // 如果最近一次是出库模式
                else if (rgvProtocol.getLastIo().equals("O")) {
                    if (basRgv.getOutEnable().equals("Y") && rgvThread.isPakOut()) {
                    if (basRgv.getOutEnable().equals("1") && rgvThread.isPakOut()) {
                        this.rgvRunWrkMastOut(rgv, rgvProtocol,mark); //  出库
                        rgvProtocol.setLastIo("I");
                    } else if (basRgv.getInEnable().equals("Y") && rgvThread.isPakIn()) {
                    } else if (basRgv.getInEnable().equals("1") && rgvThread.isPakIn()) {
                        this.rgvRunWrkMastIn(rgv, rgvProtocol,mark); //  入库
                        rgvProtocol.setLastIo("O");
                    }
@@ -3259,6 +3261,44 @@
                rgvOutExecute();
            }
        }
    }
    public synchronized void rgvRunWrkMastInTest(){
        BasRgvMap basRgvMap = basRgvMapMapper.selectById(1);
        List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());
        basRgvMap.setNowRoute(1031); //更新小车当前位置站点号
        WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(342);//根据站点工作号和小车工作范围检索任务档
//        WrkMastSta wrkMastSta2 = wrkMastStaMapper.selectByWorkSta(2, 1);
        boolean result = false;
//        if(wrkMastSta2 != null && rgvProtocol.getRgvNo() == 1){ //距离计算   2楼单入库口不需要计算
//            result = rgvCalcDistance((int) rgvProtocol.getRgvNo(),wrkMastSta2.getStaEnd(),wrkMastSta.getStaStart());//工位2放货站点,工位1取货站点
//        }
//        if(result){//若小车距离放货点距离近于取货点则跳过取货 true跳过取货/false优先取货
//            rgvThread.setPakRgv(false);
//            continue;
//        }
        wrkMastSta.setWorkSta(1);
        wrkMastSta.setRgvNo(1);
        wrkMastSta.setStaStart(1031);
        Short direction = 2;//双工位最终抵达位置
        boolean sign = false;
        sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,direction); //命令下发
        if (sign){
            wrkMastSta.setWrkSts(1);
            try{
                wrkMastStaMapper.updateById(wrkMastSta);
                log.error("更新小车任务成功");
            }catch (Exception e){
                log.error("更新小车任务失败");
            }
//            rgvThread.setPakOut(false);//出库不允许
            boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526");
            if (!signMap){
                log.error("货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo());
            }
        } else {
            log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo());
        }
    }
    /**
@@ -3920,7 +3960,8 @@
                    rgvCommand.setTaskStatus2(RgvTaskStatusType.X_MOVE); // 工位2任务模式:  取放货
                    rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd());   //工位2 放货后要去的位置
                    rgvCommand.setTargetPosition1(wrkMastSta.getStaStart());   //工位2目标站点
                    rgvCommand.setDirection2(direction);
//                    rgvCommand.setDirection1((short) 2);
//                    rgvCommand.setWrkTaskMove2(direction);
                    rgvCommand.setCommand(true);   //工位1任务确认
                    pakIn1 = false;
                }else{  //入库RGV取货行走
@@ -3929,11 +3970,12 @@
                    rgvCommand.setTaskStatus1(RgvTaskStatusType.X_MOVE); // 工位1任务模式:  取放货
                    rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd());   //工位1 放货后要去的位置
                    rgvCommand.setTargetPosition1(wrkMastSta.getStaStart());   //工位1目标站点
                    rgvCommand.setDirection1(direction);
//                    rgvCommand.setDirection1((short) 1);
//                    rgvCommand.setDirection1(direction);
                    rgvCommand.setCommand(true);   //工位1任务确认
                }
                if(!pakIn1){
                    if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
                    if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
                        //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务
                        log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand));
                        return false;
@@ -3941,7 +3983,7 @@
                        return true;
                    }
                }else{
                    if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
                    if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
                        //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务
                        log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand));
                        return false;
@@ -3957,7 +3999,8 @@
                    rgvCommand.setTaskStatus2(RgvTaskStatusType.FETCH); // 工位2任务模式:  取放货
                    rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd());   //工位2 放货后要去的位置
                    rgvCommand.setTargetPosition1(wrkMastSta.getStaStart());   //工位2目标站点
                    rgvCommand.setDirection2(direction);
                    rgvCommand.setDirection1((short)2);
                    rgvCommand.setWrkTaskMove2(direction);
                    rgvCommand.setCommand(true);   //工位1任务确认
                    pakIn1 = false;
                }else{  //入库RGV取货
@@ -3966,7 +4009,8 @@
                    rgvCommand.setTaskStatus1(RgvTaskStatusType.FETCH); // 工位1任务模式:  取放货
                    rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd());   //工位1 放货后要去的位置
                    rgvCommand.setTargetPosition1(wrkMastSta.getStaStart());   //工位1目标站点
                    rgvCommand.setDirection1(direction);
                    rgvCommand.setDirection1((short)1);
                    rgvCommand.setWrkTaskMove1(direction);
                    rgvCommand.setCommand(true);   //工位1任务确认
                }
                if(!pakIn1){
@@ -3994,6 +4038,7 @@
                    rgvCommand.setTaskStatus2(RgvTaskStatusType.PUT); // 工位2任务模式:  放货
                    rgvCommand.setEndStaNo2(wrkMastSta.getWrkEnd());   //工位2 放货后要去的位置
                    rgvCommand.setTargetPosition1(wrkMastSta.getStaEnd());   //工位2目标站点
                    rgvCommand.setDirection1((short)2);
                    rgvCommand.setCommand(true);   //工位1任务确认
                    pakIn2 = false;
                }else{  //工位1任务放货
@@ -4002,6 +4047,7 @@
                    rgvCommand.setTaskStatus1(RgvTaskStatusType.PUT); // 工位1任务模式:  放货
                    rgvCommand.setEndStaNo1(wrkMastSta.getWrkEnd());   //工位1 放货后要去的位置
                    rgvCommand.setTargetPosition1(wrkMastSta.getStaEnd());   //工位1目标站点
                    rgvCommand.setDirection1((short)1);
                    rgvCommand.setCommand(true);   //工位1任务确认
                }
                if(!pakIn2){