*
L
1 天以前 e2fcff4309336fd50bcbf3e35a81b1ff08b36dec
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -93,9 +93,9 @@
    @Autowired
    private WrkMastStaMapper wrkMastStaMapper;
    @Autowired
    private BasRgvMapMapper basRgvMapMapper;
    @Autowired
    private RgvOneSignMapper rgvOneSignMapper;
    @Autowired
    private BasRgvMapService basRgvMapService;
    @Value("${wms.url}")
    private String wmsUrl;
@@ -1310,7 +1310,11 @@
                log.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo());
                continue;
            }
            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
//            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
//                    && staDetl.getCanining() != null && staDetl.getCanining().equals("Y") && staDetl.getWrkNo().equals(wrkMast.getWrkNo())) {
//                flag = true;
//            }
            if (staProtocol.isAutoing() && staProtocol.getWorkNo() > 0
                    && staDetl.getCanining() != null && staDetl.getCanining().equals("Y") && staDetl.getWrkNo().equals(wrkMast.getWrkNo())) {
                flag = true;
            }
@@ -1648,10 +1652,10 @@
                            log.error("{}库位异常,未检索到相应工作档!", shallowLocNo);
                        } else {
                            if (waitWrkMast.getWrkSts() == 11) {
                                if (waitWrkMast.getIoPri() + 100000D < 99999999) {
                                if (waitWrkMast.getIoPri() + 100000D < 999999999D) {
                                    waitWrkMast.setIoPri(waitWrkMast.getIoPri()+100000D);
                                } else {
                                    waitWrkMast.setIoPri(99999999D);
                                    waitWrkMast.setIoPri(999999999D);
                                }
                                waitWrkMast.setModiTime(new Date());
                                if (wrkMastMapper.updateById(waitWrkMast) == 0) {
@@ -2484,11 +2488,12 @@
                    if (Cools.isEmpty(wrkDetls)){
                        continue;
                    }
                    Integer count1 = wrkDetlService.count1();
                    Integer count11 = wrkDetlService.count11();
//                    Integer count1 = wrkDetlService.count1();
                    Integer count111 = wrkDetlService.count111();
//                    Integer count11 = wrkDetlService.count11();
                    Integer count2 = wrkDetlService.count2(wrkDetls.get(0).getOrderNo());
                    Integer count3 = wrkDetlService.count3();
                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl,count1+count11,count2,count3)));
                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl,count111,count2,count3)));
                }
                commands.add(ledCommand);
            }
@@ -2556,7 +2561,7 @@
                if (staProtocol == null) {
                    continue;
                }
                if (staProtocol.getWorkNo() != 0 && staProtocol.isLoading()) {
                if (staProtocol.getWorkNo() != 0 || staProtocol.isLoading()) {
                    reset = false;
                    break;
                }
@@ -2565,21 +2570,21 @@
            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
            // led显示默认内容
            if (reset && !ledThread.isLedMk()) {
                if (led.getId() == 7) {
                    ledThread.setLedMk(true);
                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) {
                        log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                    } else {
                    }
                } else {
//                if (led.getId() == 7) {
//                    ledThread.setLedMk(true);
//                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) {
//                        log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
//                    } else {
//
//                    }
//                } else {
                    ledThread.setLedMk(true);
                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
                        log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                    } else {
                    }
                }
//                }
            }
        }
    }
@@ -3552,7 +3557,13 @@
                            if (!rgvComplete){
                                log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo());
                            }
                            BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                            RgvOneSign rgvSignTwo = rgvOneSignMapper.selectOneSign("rgvTwo");
                            int rgvSignTwoType = 0;
                            if (!Cools.isEmpty(rgvSignTwo)){
                                rgvSignTwoType = rgvSignTwo.getRgvOneSign();
                            }
                            BasRgvMap basRgvMap = basRgvMapService.selectByIdSignTwo(rgvProtocol.getRgvNo(),rgvSignTwoType);
                            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
                            rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
                            break;
@@ -3563,13 +3574,13 @@
                            continue;
                        }
                        if (wrkMastSta.getWrkSts()!=1){
                            if (wrkMastSta.getWrkType()==1 && wrkMastSta.getWrkSts()==2 && rgvProtocol.getLoaded1()==1){
                                boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1());
                                if (!rgvComplete){
                                    log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo());
                                    break;
                                }
                                rgvAvoidanceXYWrkMast(rgvProtocol.getRgvNo());
                            if (wrkMastSta.getWrkType()==3 && wrkMastSta.getWrkSts()==2 && rgvProtocol.getLoaded1()==1){
//                                boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1());
//                                if (!rgvComplete){
//                                    log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo());
//                                    break;
//                                }
                                rgvAvoidanceXYWrkMast(rgvProtocol.getRgvNo(),wrkMastSta.getWrkNo().shortValue());
                                continue;
                            }
                            if (wrkMastSta.getWrkType()==6){
@@ -3630,7 +3641,13 @@
                        }
                        wrkMastSta.setWrkSts(3);
                        wrkMastStaMapper.updateById(wrkMastSta);
                        BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                        RgvOneSign rgvSignTwo = rgvOneSignMapper.selectOneSign("rgvTwo");
                        int rgvSignTwoType = 0;
                        if (!Cools.isEmpty(rgvSignTwo)){
                            rgvSignTwoType = rgvSignTwo.getRgvOneSign();
                        }
                        BasRgvMap basRgvMap = basRgvMapService.selectByIdSignTwo(rgvProtocol.getRgvNo(),rgvSignTwoType);
                        basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
                        rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
                    }else if (rgvProtocol.getTaskNo2()!=0 && (rgvProtocol.getStatusType2()==RgvStatusType.WAITING || rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING)){
@@ -3639,7 +3656,13 @@
                            if (!rgvComplete){
                                log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo());
                            }
                            BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                            RgvOneSign rgvSignTwo = rgvOneSignMapper.selectOneSign("rgvTwo");
                            int rgvSignTwoType = 0;
                            if (!Cools.isEmpty(rgvSignTwo)){
                                rgvSignTwoType = rgvSignTwo.getRgvOneSign();
                            }
                            BasRgvMap basRgvMap = basRgvMapService.selectByIdSignTwo(rgvProtocol.getRgvNo(),rgvSignTwoType);
                            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
                            rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
                            break;
@@ -3688,7 +3711,13 @@
                        }
                        wrkMastSta.setWrkSts(3);
                        wrkMastStaMapper.updateById(wrkMastSta);
                        BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                        RgvOneSign rgvSignTwo = rgvOneSignMapper.selectOneSign("rgvTwo");
                        int rgvSignTwoType = 0;
                        if (!Cools.isEmpty(rgvSignTwo)){
                            rgvSignTwoType = rgvSignTwo.getRgvOneSign();
                        }
                        BasRgvMap basRgvMap = basRgvMapService.selectByIdSignTwo(rgvProtocol.getRgvNo(),rgvSignTwoType);
                        basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
                        rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
                    }else {
@@ -3840,7 +3869,13 @@
                        && rgvProtocol.getLoaded1()==0
                        && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0
                ) {
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(basRgv.getRgvNo());
                    RgvOneSign rgvSignTwo = rgvOneSignMapper.selectOneSign("rgvTwo");
                    int rgvSignTwoType = 0;
                    if (!Cools.isEmpty(rgvSignTwo)){
                        rgvSignTwoType = rgvSignTwo.getRgvOneSign();
                    }
                    BasRgvMap basRgvMap = basRgvMapService.selectByIdSignTwo(basRgv.getRgvNo(),rgvSignTwoType);
                    if (basRgvMap == null) {
                        log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo());
                        return false;
@@ -3955,7 +3990,13 @@
                    && rgvProtocol.getLoaded1()==0
                    && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0
            ) {
                BasRgvMap basRgvMap = basRgvMapMapper.selectById(basRgv.getRgvNo());
                RgvOneSign rgvSignTwo = rgvOneSignMapper.selectOneSign("rgvTwo");
                int rgvSignTwoType = 0;
                if (!Cools.isEmpty(rgvSignTwo)){
                    rgvSignTwoType = rgvSignTwo.getRgvOneSign();
                }
                BasRgvMap basRgvMap = basRgvMapService.selectByIdSignTwo(basRgv.getRgvNo(),rgvSignTwoType);
                if (basRgvMap == null) {
                    log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo());
                    return false;
@@ -4037,7 +4078,13 @@
                        && rgvProtocol.getLoaded1()==1
                        && rgvProtocol.getTaskNo1()!=0 && rgvProtocol.getTaskNo2()==0
            ) {// 只有当RGV空闲、自动,工位一有物  有工作号//rgv可用
                BasRgvMap basRgvMap = basRgvMapMapper.selectById(basRgv.getRgvNo());
                RgvOneSign rgvSignTwo = rgvOneSignMapper.selectOneSign("rgvTwo");
                int rgvSignTwoType = 0;
                if (!Cools.isEmpty(rgvSignTwo)){
                    rgvSignTwoType = rgvSignTwo.getRgvOneSign();
                }
                BasRgvMap basRgvMap = basRgvMapService.selectByIdSignTwo(basRgv.getRgvNo(),rgvSignTwoType);
                if (basRgvMap == null) {
                    log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo());
                    return false;
@@ -4124,7 +4171,13 @@
                        && rgvProtocol.getTaskNo2()==0
                        && (rgvProtocol.getLoaded2()==3  || rgvProtocol.getLoaded2()==1 || rgvProtocol.getLoaded2()==4)////0 无物;1 一层无物二层有物 (只能拆叠) ;2一层有物二层无物() ;3  1、2层都有物  4:()只允许拆盘
                ) {
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                    RgvOneSign rgvSignTwo = rgvOneSignMapper.selectOneSign("rgvTwo");
                    int rgvSignTwoType = 0;
                    if (!Cools.isEmpty(rgvSignTwo)){
                        rgvSignTwoType = rgvSignTwo.getRgvOneSign();
                    }
                    BasRgvMap basRgvMap = basRgvMapService.selectByIdSignTwo(basRgv.getRgvNo(),rgvSignTwoType);
                    if (basRgvMap == null) {
                        log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo());
                        return false;
@@ -4232,7 +4285,13 @@
                    && rgvProtocol.getLoaded1()==1
                    && rgvProtocol.getTaskNo1()!=0 && rgvProtocol.getTaskNo2()==0
            ) {
                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                RgvOneSign rgvSignTwo = rgvOneSignMapper.selectOneSign("rgvTwo");
                int rgvSignTwoType = 0;
                if (!Cools.isEmpty(rgvSignTwo)){
                    rgvSignTwoType = rgvSignTwo.getRgvOneSign();
                }
                BasRgvMap basRgvMap = basRgvMapService.selectByIdSignTwo(rgvProtocol.getRgvNo(),rgvSignTwoType);
                if (basRgvMap == null) {
                    log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo());
                    return false;
@@ -4345,7 +4404,13 @@
                        && rgvProtocol.getTaskNo2()==0
                        &&  (rgvProtocol.getLoaded2()==2  || rgvProtocol.getLoaded2()==3 ) ////0 无物;1 一层无物二层有物  ;2一层有物二层无物 (只能满放);3  1、2层都有物  4:()只允许拆盘
                ) {
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                    RgvOneSign rgvSignTwo = rgvOneSignMapper.selectOneSign("rgvTwo");
                    int rgvSignTwoType = 0;
                    if (!Cools.isEmpty(rgvSignTwo)){
                        rgvSignTwoType = rgvSignTwo.getRgvOneSign();
                    }
                    BasRgvMap basRgvMap = basRgvMapService.selectByIdSignTwo(rgvProtocol.getRgvNo(),rgvSignTwoType);
                    if (basRgvMap == null) {
                        log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo());
                        return false;
@@ -4453,7 +4518,13 @@
                        && rgvProtocol.getTaskNo2()==0
                        &&  (rgvProtocol.getLoaded2()==0  || rgvProtocol.getLoaded2()==1 ) //现场修改:叠盘机,////0 无物;1 一层无物二层有物(只能拆叠)   ;2一层有物二层无物 (只能满放);3  1、2层都有物  4:()只允许拆盘
                ) {
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                    RgvOneSign rgvSignTwo = rgvOneSignMapper.selectOneSign("rgvTwo");
                    int rgvSignTwoType = 0;
                    if (!Cools.isEmpty(rgvSignTwo)){
                        rgvSignTwoType = rgvSignTwo.getRgvOneSign();
                    }
                    BasRgvMap basRgvMap = basRgvMapService.selectByIdSignTwo(rgvProtocol.getRgvNo(),rgvSignTwoType);
                    if (basRgvMap == null) {
                        log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo());
                        return false;
@@ -4549,7 +4620,13 @@
                    && rgvProtocol.getLoaded1() == 0
                    && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0
            ) {
                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                RgvOneSign rgvSignTwo = rgvOneSignMapper.selectOneSign("rgvTwo");
                int rgvSignTwoType = 0;
                if (!Cools.isEmpty(rgvSignTwo)){
                    rgvSignTwoType = rgvSignTwo.getRgvOneSign();
                }
                BasRgvMap basRgvMap = basRgvMapService.selectByIdSignTwo(rgvProtocol.getRgvNo(),rgvSignTwoType);
                if (basRgvMap == null) {
                    log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo());
                    return false;
@@ -4638,7 +4715,13 @@
                        && rgvProtocol.getTaskNo2()==0
                        &&  rgvProtocol.getLoaded2()==0  //现场修改:叠盘机,////0 无物;1 一层无物二层有物(只能拆叠)   ;2一层有物二层无物 (只能满放);3  1、2层都有物  4:()只允许拆盘
                ) {
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                    RgvOneSign rgvSignTwo = rgvOneSignMapper.selectOneSign("rgvTwo");
                    int rgvSignTwoType = 0;
                    if (!Cools.isEmpty(rgvSignTwo)){
                        rgvSignTwoType = rgvSignTwo.getRgvOneSign();
                    }
                    BasRgvMap basRgvMap = basRgvMapService.selectByIdSignTwo(rgvProtocol.getRgvNo(),rgvSignTwoType);
                    if (basRgvMap == null) {
                        log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo());
                        return false;
@@ -4671,7 +4754,7 @@
                                log.info(date+"满取任务下发:未查询到站点信息:"+wrkMastSta);
                                continue;
                            }
                            if (!staProtocol.isAutoing() || staProtocol.isLoading()){
                            if (!staProtocol.isAutoing() || !staProtocol.isLoading()){
                                continue;
                            }
@@ -4732,7 +4815,13 @@
                        || (rgvProtocol.getTaskNo1()>0 && rgvProtocol.getLoaded1()==1))
                        && rgvProtocol.getTaskNo2()==0
                ) {
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                    RgvOneSign rgvSignTwo = rgvOneSignMapper.selectOneSign("rgvTwo");
                    int rgvSignTwoType = 0;
                    if (!Cools.isEmpty(rgvSignTwo)){
                        rgvSignTwoType = rgvSignTwo.getRgvOneSign();
                    }
                    BasRgvMap basRgvMap = basRgvMapService.selectByIdSignTwo(rgvProtocol.getRgvNo(),rgvSignTwoType);
                    if (basRgvMap == null) {
                        log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo());
                        return false;
@@ -4925,7 +5014,13 @@
                        || (rgvProtocol.getTaskNo1()>0 && rgvProtocol.getLoaded1()==1))
                        && rgvProtocol.getTaskNo2()==0
                ) {
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvSlave.getId());
                    RgvOneSign rgvSignTwo = rgvOneSignMapper.selectOneSign("rgvTwo");
                    int rgvSignTwoType = 0;
                    if (!Cools.isEmpty(rgvSignTwo)){
                        rgvSignTwoType = rgvSignTwo.getRgvOneSign();
                    }
                    BasRgvMap basRgvMap = basRgvMapService.selectByIdSignTwo(rgvSlave.getId(),rgvSignTwoType);
                    basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
                    rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
                }
@@ -4940,9 +5035,11 @@
     * 小车XY移动  避让
     * */
    public synchronized boolean rgvAvoidanceXY(Integer rgvId){
        if (rgvId>20){
            rgvId = rgvId-20;
        }
        if (rgvId==1){
            try{
                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
                //  命令下发区 --------------------------------------------------------------------------
                RgvCommand rgvCommand = new RgvCommand();
                rgvCommand.setRgvNo(rgvId); // RGV编号
@@ -4965,7 +5062,6 @@
            }
        }else {
            try{
                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
                //  命令下发区 --------------------------------------------------------------------------
                RgvCommand rgvCommand = new RgvCommand();
                rgvCommand.setRgvNo(rgvId); // RGV编号
@@ -4991,19 +5087,26 @@
    /*
     * 小车XY移动  避让
     * */
    public synchronized boolean rgvAvoidanceXYWrkMast(Integer rgvId){
    public synchronized boolean rgvAvoidanceXYWrkMast(Integer rgvId,short wrkNo1){
        if (rgvId>20){
            rgvId = rgvId-20;
        }
        if (rgvId==2){
            try{
                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
                //  命令下发区 --------------------------------------------------------------------------
                RgvCommand rgvCommand = new RgvCommand();
                rgvCommand.setRgvNo(rgvId); // RGV编号
                rgvCommand.setTaskNo1(wrkNo1); // 工作号
                rgvCommand.setAckFinish1((short) 1);  // 任务完成确认位
                rgvCommand.setTaskMode1(RgvTaskModeType.NONE); // 任务模式
                rgvCommand.setSourceStaNo1((short)0);     // 源站
                rgvCommand.setDestinationStaNo1((short)0);     // 目标站
                rgvCommand.setAckFinish2((short) 0);  // 工位2任务完成确认位
                rgvCommand.setTaskNo2((short)32222); // 工位2工作号
                rgvCommand.setTaskMode2(RgvTaskModeType.X_MOVE); // 工位2任务模式:  回原点
                rgvCommand.setSourceStaNo2((short)121);
                rgvCommand.setCommand((short) 2);   //工位2任务确认
                if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
                if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(10, rgvCommand))) {
                    //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务   step=9,回原点 9999任务号
                    log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand));
                    return false;
@@ -5016,16 +5119,20 @@
            }
        }else {
            try{
                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
                //  命令下发区 --------------------------------------------------------------------------
                RgvCommand rgvCommand = new RgvCommand();
                rgvCommand.setRgvNo(rgvId); // RGV编号
                rgvCommand.setTaskNo1(wrkNo1); // 工作号
                rgvCommand.setAckFinish1((short) 1);  // 任务完成确认位
                rgvCommand.setTaskMode1(RgvTaskModeType.NONE); // 任务模式
                rgvCommand.setSourceStaNo1((short)0);     // 源站
                rgvCommand.setDestinationStaNo1((short)0);     // 目标站
                rgvCommand.setAckFinish2((short) 0);  // 工位2任务完成确认位
                rgvCommand.setTaskNo2((short)32222); // 工位2工作号
                rgvCommand.setTaskMode2(RgvTaskModeType.X_MOVE); // 工位2任务模式:  回原点
                rgvCommand.setSourceStaNo2((short)118);
                rgvCommand.setCommand((short) 2);   //工位2任务确认
                if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
                if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(10, rgvCommand))) {
                    //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务   step=9,回原点 9999任务号
                    log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand));
                    return false;
@@ -5043,9 +5150,11 @@
     * 小车XY移动  避让
     * */
    public synchronized boolean rgvAvoidanceXY(Integer rgvId,WrkMastSta wrkMastSta){
        if (rgvId>20){
            rgvId = rgvId-20;
        }
        if (rgvId==1){
            try{
                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
                //  命令下发区 --------------------------------------------------------------------------
                RgvCommand rgvCommand = new RgvCommand();
                rgvCommand.setRgvNo(rgvId); // RGV编号
@@ -5068,7 +5177,6 @@
            }
        }else {
            try{
                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
                //  命令下发区 --------------------------------------------------------------------------
                RgvCommand rgvCommand = new RgvCommand();
                rgvCommand.setRgvNo(rgvId); // RGV编号
@@ -5096,6 +5204,9 @@
    * 小车取货至工位任务
    * */
    public synchronized boolean rgvTakeFullAll(Integer rgvId,WrkMastSta wrkMastSta){
        if (rgvId>20){
            rgvId = rgvId-20;
        }
        try{
            //  命令下发区 --------------------------------------------------------------------------
            RgvCommand rgvCommand = new RgvCommand();
@@ -5118,64 +5229,13 @@
        }
    }
    /*
     * 小车取货至工位任务
     * */
    public synchronized boolean rgvTakeFullPut(Integer rgvId,WrkMastSta wrkMastSta){
        try{
            //  命令下发区 --------------------------------------------------------------------------
            RgvCommand rgvCommand = new RgvCommand();
            rgvCommand.setRgvNo(rgvId); // RGV编号
            rgvCommand.setAckFinish1((short) 0);  // 工位1任务完成确认位
            rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 工位1工作号
            rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 工位1任务模式:  单取
            rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue());   //工位1起点
            rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue());   //工位1目标站点
            rgvCommand.setCommand((short) 1);   //工位1任务确认
            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;
            } else {
                return true;
            }
        }catch (Exception e){
            return false;
        }
    }
    /*
     * 小车放货至工位任务
     * */
    public synchronized boolean rgvTakeFullTake(Integer rgvId,WrkMastSta wrkMastSta){
        try{
            //  命令下发区 --------------------------------------------------------------------------
            RgvCommand rgvCommand = new RgvCommand();
            rgvCommand.setRgvNo(rgvId); // RGV编号
            rgvCommand.setAckFinish1((short) 0);  // 工位1任务完成确认位
            rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 工位1工作号
            rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 工位1任务模式:  单放
            rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue());   //工位1起点
            rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue());   //工位1目标站点
            rgvCommand.setCommand((short) 1);   //工位1任务确认
            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;
            } else {
                return true;
            }
        }catch (Exception e){
            return false;
        }
    }
    /*
     * 小车取货至工位任务
     * */
    public synchronized boolean rgvTakeFull(Integer rgvId,WrkMastSta wrkMastSta){
        if (rgvId>20){
            rgvId = rgvId-20;
        }
        try{
            //  命令下发区 --------------------------------------------------------------------------
            RgvCommand rgvCommand = new RgvCommand();
@@ -5201,6 +5261,9 @@
    * 小车放货至输送线任务
    * */
    public synchronized boolean rgvPutFull(Integer rgvId,WrkMastSta wrkMastSta){
        if (rgvId>20){
            rgvId = rgvId-20;
        }
        try{
            //  命令下发区 --------------------------------------------------------------------------
            RgvCommand rgvCommand = new RgvCommand();
@@ -5226,6 +5289,9 @@
     * 小车取空板至工位任务  叠盘
     * */
    public synchronized boolean rgvTakeEmpty(Integer rgvId,WrkMastSta wrkMastSta){
        if (rgvId>20){
            rgvId = rgvId-20;
        }
        try{
            //  命令下发区 --------------------------------------------------------------------------
            RgvCommand rgvCommand = new RgvCommand();
@@ -5251,6 +5317,9 @@
     * 小车放空板至输送线任务   //拆盘
     * */
    public synchronized boolean rgvPutEmpty(Integer rgvId,WrkMastSta wrkMastSta){
        if (rgvId>20){
            rgvId = rgvId-20;
        }
        try{
            //  命令下发区 --------------------------------------------------------------------------
            RgvCommand rgvCommand = new RgvCommand();
@@ -5276,6 +5345,9 @@
     * 小车取空板至工位任务  满取
     * */
    public synchronized boolean rgvTakeEmptyFull(Integer rgvId,WrkMastSta wrkMastSta){
        if (rgvId>20){
            rgvId = rgvId-20;
        }
        try{
            //  命令下发区 --------------------------------------------------------------------------
            RgvCommand rgvCommand = new RgvCommand();
@@ -5301,6 +5373,9 @@
     * 小车放空板至输送线任务   //满放
     * */
    public synchronized boolean rgvPutEmptyFull(Integer rgvId,WrkMastSta wrkMastSta){
        if (rgvId>20){
            rgvId = rgvId-20;
        }
        try{
            //  命令下发区 --------------------------------------------------------------------------
            RgvCommand rgvCommand = new RgvCommand();
@@ -5326,6 +5401,9 @@
     * 小车复位
     * */
    public synchronized boolean rgvComplete(Integer rgvId){
        if (rgvId>20){
            rgvId = rgvId-20;
        }
        try{
            //  命令下发区 --------------------------------------------------------------------------
            if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(3, new RgvCommand()))) {
@@ -5346,6 +5424,9 @@
     * 小车复位
     * */
    public synchronized boolean rgvComplete(Integer rgvId,Short taskNo1){
        if (rgvId>20){
            rgvId = rgvId-20;
        }
        try{
            RgvCommand rgvCommand = new RgvCommand();
            rgvCommand.setTaskNo1(taskNo1);
@@ -5371,7 +5452,9 @@
        if (rgvOpen){
            return true;
        }
        if (basRgvMapCurrent.getRgvNo()>2){
            return true;
        }
//        List<Integer> integers = RouteUtils.RouteMapCurrentFar(basRgvMapCurrent.getNowRoute(),staStart,staEnd, basRgvMapCurrent.getLockStartRoute());
        //更新当前小车锁
        try{
@@ -5379,16 +5462,17 @@
//            Integer farCurrentStaNo = RouteUtils.RouteIndexFarMas(staEnd, staStart, staEnd, basRgvMapCurrent.getLockStartRoute());//获取最远站点
            Integer fallMerge = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getRgvNo(), farCurrentStaNo); //获取合并干涉项
            basRgvMapCurrent.setLockEndRoute(fallMerge);
            basRgvMapMapper.updateById(basRgvMapCurrent);
            basRgvMapService.updateById(basRgvMapCurrent);
            //更新另一台小车地图
            Integer rgvNoOther = basRgvMapCurrent.getRgvNoOther();
            BasRgvMap basRgvMapOther = basRgvMapMapper.selectById(rgvNoOther);
            BasRgvMap basRgvMapOther = basRgvMapService.selectById(rgvNoOther);
            List<Integer> integers = RouteUtils.RouteMapCurrentFar(fallMerge, basRgvMapCurrent.getLockStartRoute());
            Integer lockEndRoute = RouteUtils.RouteMapOtherFarStnNo(integers, basRgvMapCurrent.getLockStartRoute());//另一台小车可活动最远位置
            Integer lockEndRouteL = RouteUtils.RouteIndexFarMasL(rgvNoOther, lockEndRoute);//另一台小车可活动最远位置
            basRgvMapOther.setEndRoute(lockEndRouteL);
            basRgvMapMapper.updateById(basRgvMapOther);
            basRgvMapService.updateById(basRgvMapOther);
            return true;
        }catch (Exception e){
            log.error("小车地图更新出错!");