#
lty
2025-09-22 9784ec36b190d0f0103b42059585d04ea0b10745
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -8,8 +8,10 @@
import com.core.common.DateUtils;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.ArmOrderAssignmentParam;
import com.zy.asrs.entity.param.ArmTaskAssignmentParam;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.result.OrderDetlValueResultUtil;
import com.zy.asrs.mapper.*;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.PostMesDataUtils;
@@ -3216,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");
@@ -3233,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");
                    }
@@ -3257,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());
        }
    }
    /**
@@ -3918,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取货行走
@@ -3927,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;
@@ -3939,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;
@@ -3955,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取货
@@ -3964,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){
@@ -3992,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任务放货
@@ -4000,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){
@@ -4412,16 +4460,44 @@
                            log.error("arm编号:"+basArm.getArmNo()+"====》拆码垛任务异常禁止下发!!!任务待执行数量大于1!!!");
                            continue;
                        }
                        for (BasArmMast basArmMast:basArmMastList) {
                            ArmTaskAssignmentParam armTaskAssignmentParam = new ArmTaskAssignmentParam(basArmMast.getSortingLine());
                            //设置工作空间就绪
                            ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取任务下发:通知工作空间已就绪",ArmConstant.ARM_URL, ArmConstant.ARM_WORKSPACE, armTaskAssignmentParam);
                            if (result.getCode()==200){
                                basArmMast.setStatus(1);
                                basArmMastService.updateById(basArmMast);
                            } else {
                                log.error("机械臂抓取任务:"+JSON.toJSON(basArmMast)+"===》任务信息下发失败");
                        BasArmMast basArmMast = basArmMastList.get(0);
                        List<BasArmMast> basArmMastListOrder = basArmMastService.selectList(
                                new EntityWrapper<BasArmMast>()
                                        .eq("arm_no", basArm.getArmNo())
                                        .eq("sorting_line", basArm.getSortingLine())
                                        .eq("sku", basArmMast.getSku())
                                        .eq("order_no", basArmMast.getOrderNo())
                        );
                        if (basArmMastListOrder.size()==1){
                            OrderDetlValueResultUtil orderDetlValueResultUtil = basArmMastService.selectOrderDetlValue(basArmMast.getOrderNo(), basArmMast.getSku());
                            if (Cools.isEmpty(orderDetlValueResultUtil)){
                                continue;
                            }
                            //订单下发
                            try{
                                ArmOrderAssignmentParam armOrderAssignmentParam = new ArmOrderAssignmentParam(basArmMast,orderDetlValueResultUtil);
//                                订单下发(SKU+订单)
                                ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取订单(SKU)下发:",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_ADAPTOR, armOrderAssignmentParam);
                                if (result.getCode()==200){
                                    basArmMast.setStatus(1);
                                    basArmMastService.updateById(basArmMast);
                                } else {
                                    log.error("机械臂抓取订单(SKU)下发:"+JSON.toJSON(basArmMast)+"===》订单信息下发失败");
                                }
                            } catch (Exception e){
                                log.error("机械臂抓取订单(SKU)下发:"+JSON.toJSON(basArmMast)+"===》订单下发订单信息下发失败");
                                continue;
                            }
                        }
                        ArmTaskAssignmentParam armTaskAssignmentParam = new ArmTaskAssignmentParam(basArmMast.getSortingLine());
                        //设置工作空间就绪
                        ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取任务下发:通知工作空间已就绪",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_WORKSPACE, armTaskAssignmentParam);
                        if (result.getCode()==200){
                            basArmMast.setStatus(1);
                            basArmMastService.updateById(basArmMast);
                        } else {
                            log.error("机械臂抓取任务:"+JSON.toJSON(basArmMast)+"===》任务信息下发失败");
                        }
                    }
                }  catch (Exception e){