*
L
2026-01-20 fb3e7906f123639d10fdab1f81e0da38277235d4
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()))) {
@@ -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);
@@ -2122,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());
                        }
@@ -2157,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){
@@ -2238,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){
@@ -2443,6 +2458,60 @@
        }
    }
    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{
                String taskNoNow = rgvOtherTaskWrk(rgvSlave);
                if (!arrayListOld.contains(taskNoNow)){
                    arrayListOld.add(taskNoNow);
                }
            } 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 (!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()) {