*
L
2026-01-23 4d9e2ea59aa2e9fbdcacd3d8d8dfd543a2fccba5
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -703,11 +703,12 @@
                        } else {
                            staProtocol = staProtocol.clone();
                        }
                        if (!staProtocol.isAutoing() || staProtocol.isLoading()) {
                        if (!staProtocol.isAutoing() || !staProtocol.isLoading()) {
                            continue;
                        }
                        TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnProtocol.getLaneNo(), staDesc.getStnNo().toString());
                        if (taskWrk == null) {
                            log.info("堆垛机出库站到出库站:未查询到状态为13的任务信息,站点号:" + staDesc.getStnNo().toString());
                            continue;
                        }
                        if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0 || staProtocol.getWorkNo().equals(taskWrk.getWrkNo()))) {
@@ -1764,7 +1765,7 @@
        ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
        if (!allTaskProtocol.isEmpty()) {
            for (TaskProtocol taskProtocol : allTaskProtocol.values()) {
                if (taskProtocol.getTaskNo() != 0) {
                if (taskProtocol.getTaskNo() != 0 && taskProtocol.getTaskNo()!=32222L) {
                    return taskProtocol.getTaskNo().toString();
                }
            }
@@ -2043,6 +2044,16 @@
        }
        return null;
    }
    public TaskWrk deviceDetectionGetWrkNo(RgvSlave.RgvStn inSta) {
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId());
        StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
        if (staProtocol == null || Cools.isEmpty(staProtocol.getWorkNo())) {
            return null;
        }
        TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo());
        return taskWrk;
    }
    public boolean deviceDetection(RgvSlave.RgvStn inSta,Integer rgvNo) {
        ArrayList<Integer> arrayList = new ArrayList<Integer>() {{
            add(1009);
@@ -2106,6 +2117,7 @@
    public synchronized void taskStart() {
        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
            try {
                Thread.sleep(101);
                if (rgvDetection(rgvSlave)) {
                    String taskNoNow = rgvOtherTaskWrk(rgvSlave);
                    List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("PLC_POSITION", true));
@@ -2121,10 +2133,12 @@
                    }
                    List<TaskWrk> taskWrkList = new ArrayList<>();
                    List<Integer> staList = new ArrayList<>();
                    List<String> taskNoList = taskStartRepel();
                    for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()) {
                        TaskWrk taskWrk = deviceDetection(inSta);
                        if (taskWrk != null) {
                            if (taskWrk.getWrkNo().toString().equals(taskNoNow)) continue;
                            if (!taskNoList.contains(taskWrk.getWrkNo().toString())) continue;
                            taskWrkList.add(taskWrk);
                            staList.add(inSta.getStaNo());
                        }
@@ -2156,9 +2170,10 @@
                            if (rgvOtherIDLEOther(rgvSlave)){
                                if (!rgvOtherIDLE(rgvSlave,staList.get(0))){
                                    System.out.println("空闲就近跳过==="+rgvSlave.getId()+"===");
                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"空闲就近跳过");
                                    sign=true;
                                    if (itSmall){
                                        RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"空闲就近跳过");
                                        sign=true;
                                    }
                                }
                            }
                            if (sign){
@@ -2237,9 +2252,10 @@
                            if (rgvOtherIDLEOther2(rgvSlave)){
                                if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){
                                    System.out.println("运行就近跳过==="+rgvSlave.getId()+"===");
                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"运行就近跳过");
                                    sign=true;
                                    if (itSmall){
                                        RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"运行就近跳过");
                                        sign=true;
                                    }
                                }
                            }
                            if (sign){
@@ -2442,6 +2458,145 @@
        }
    }
    public List<String> taskStartRepel() {
        ArrayList<String> arrayListOld = new ArrayList<>();
        ArrayList<String> arrayListNew = new ArrayList<>();
        ArrayList<Integer> arrayListAllP = new ArrayList<>();
        ArrayList<Long[]> arrayListAll = new ArrayList<>();
        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
            try{
                boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave);
                String taskNoNow = rgvOtherTaskWrk(rgvSlave);
                if (taskNoNow.equals("无")){
                    continue;
                }
                if (!arrayListOld.contains(taskNoNow)){
                    arrayListOld.add(taskNoNow);
                }
                TaskWrk taskWrk = taskWrkMapper.selectByTaskNo(taskNoNow);
                if (taskWrk != null) {
                    if (!arrayListAllP.contains(taskWrk.getWrkNo())) {
                        RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
                        TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
                        arrayListAllP.add(taskWrk.getWrkNo());
                        long startP = 0;
                        if (!itSmall){
                            startP = System.currentTimeMillis();
                        }
                        long endP = 0;
                        long endP1 = 0;
                        long endP2 = 0;
                        ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
                        for (TaskProtocol taskProtocol : allTaskProtocol.values()){
                            if (taskProtocol.getTaskStatus() == 2){//取
                                endP1 = taskProtocol.getTargetPosition();
                            } else if (taskProtocol.getTaskStatus() == 3){//放
                                endP2 = taskProtocol.getTargetPosition();
                            }
                        }
                        if (endP1 > endP2){
                            if (itSmall){
                                endP = endP1;
                            } else {
                                endP = endP2;
                            }
                        }
                        if (endP == 0){
                            if (itSmall){
                                endP = System.currentTimeMillis();
                            }
                        }
                        Long[] longList = {taskWrk.getWrkNo().longValue(),startP,endP};
                        arrayListAll.add(longList);
                    }
                } else {
                    RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
                    TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
                    try {
                        long startP = 0;
                        long endP = 0;
                        ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
                        for (TaskProtocol taskProtocol : allTaskProtocol.values()){
                            if (taskProtocol.getTaskStatus() == 2){//取
                                startP = taskProtocol.getTargetPosition();
                            } else if (taskProtocol.getTaskStatus() == 3){//放
                                endP = taskProtocol.getTargetPosition();
                            }
                        }
                        if (startP == 0 ){
                            if (!itSmall){
                                startP = System.currentTimeMillis();
                            }
                        }
                        if (endP == 0){
                            if (itSmall){
                                endP = System.currentTimeMillis();
                            }
                        }
//                        taskNoNow
                        long parseLong = Long.parseLong(taskNoNow);
                        Long[] longList = {parseLong,startP,endP};
                        arrayListAll.add(longList);
                    } catch (Exception e) {
                        log.error("任务过滤查询小车执行任务异常:"+e.getMessage());
                        return new ArrayList<>();
                    }
                }
            } catch (Exception e) {
            }
        }
        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
            if (rgvDetection(rgvSlave)) {
                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                    TaskWrk taskWrk = deviceDetectionGetWrkNo(rgvStn);
                    if (taskWrk != null) {
                        if (!arrayListAllP.contains(taskWrk.getWrkNo())) {
                            arrayListAllP.add(taskWrk.getWrkNo());
                            BasDevpPosition basDevpPositionSta = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo()));
                            BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
                            Long[] longList = {taskWrk.getWrkNo().longValue(),basDevpPositionSta.getPlcPosition(),basDevpPositionEnd.getPlcPosition()};
                            arrayListAll.add(longList);
                        }
                    }
                }
            }
        }
        List<Long[]> crossingPathsW = TrackUtils.findCrossingPathsW(arrayListAll);
        List<Long> wrkNoList = new ArrayList<>();
        List<Long> signWrk = new ArrayList<>();
        for (Long[] longList : crossingPathsW) {
            if (arrayListOld.contains(longList[0].toString()) || arrayListOld.contains(longList[1].toString())){
                signWrk.add(longList[0]);
                signWrk.add(longList[1]);
                continue;
            }
            if (!wrkNoList.contains(longList[0]) && !signWrk.contains(longList[0])) {
                if (!wrkNoList.contains(longList[1]) && !signWrk.contains(longList[1])) {
                    wrkNoList.add(longList[0]);
                }
            }
            signWrk.add(longList[0]);
            signWrk.add(longList[1]);
        }
        for (Integer str : arrayListAllP) {
            if (!signWrk.contains(str.longValue())) {
                arrayListNew.add(str.toString());
            }
        }
        for (Long wrk : wrkNoList) {
            arrayListNew.add(wrk.toString());
        }
        return arrayListNew;
    }
    //获取起点与终点对象
    public RgvSlave.RgvStn getRgvStnNow(RgvSlave rgvSlave, Integer staNo) {
        for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {