#
LSH
2023-12-28 420cb1d10f9dae64fb412976903ecbc29b03555b
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -197,12 +197,12 @@
                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                            barcodeThread.setBarcode("");
                            staProtocol.setWorkNo(dto.getWorkNo().shortValue());
                            staProtocol.setWorkNo(dto.getWorkNo());
                            if(Cools.isEmpty(dto.getRgvNo()) || dto.getRgvNo() <= 0) {
                                staProtocol.setStaNo(dto.getStaNo().shortValue());
                                staProtocol.setStaNo(dto.getStaNo());
                            } else {//如果存在RGV编号,说明需要RGV接驳,先下发任务到RGV源站
                                staProtocol.setStaNo(dto.getRgvSstaNo().shortValue());
                                staProtocol.setStaNo(dto.getRgvSstaNo());
                            }
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -263,8 +263,8 @@
                    // 命令下发区 --------------------------------------------------------------------------
                    // 更新站点信息 且 下发plc命令
                    staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                    staProtocol.setWorkNo(wrkMast.getWrkNo());
                    staProtocol.setStaNo(wrkMast.getStaNo());
                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                    if (result) {
@@ -393,8 +393,8 @@
                    }
                    // 更新站点信息 且 下发plc命令
                    staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                    staProtocol.setWorkNo(wrkMast.getWrkNo());
                    staProtocol.setStaNo(wrkMast.getStaNo());
                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                    if (!result) {
@@ -448,8 +448,8 @@
                        // 命令下发区 --------------------------------------------------------------------------
                        // 下发站点信息
                        staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                        staProtocol.setWorkNo(wrkMast.getWrkNo());
                        staProtocol.setStaNo(wrkMast.getStaNo());
                        if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
                            continue;
                        }
@@ -475,50 +475,54 @@
     * 入出库  ===>>  堆垛机入出库作业下发
     */
    public synchronized void crnIoExecute() {
        for (CrnSlave crn : slaveProperties.getCrn()) {
            // 获取堆垛机信息
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
            if (crnProtocol == null) {
                continue;
            }
            BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
            if (basCrnp == null) {
                log.error("{}号堆垛机尚未在数据库进行维护!", crn.getId());
                continue;
            }
        try{
            for (CrnSlave crn : slaveProperties.getCrn()) {
                // 获取堆垛机信息
                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                if (crnProtocol == null) {
                    continue;
                }
                BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
                if (basCrnp == null) {
                    log.error("{}号堆垛机尚未在数据库进行维护!", crn.getId());
                    continue;
                }
            // 只有当堆垛机空闲 并且 无任务时才继续执行
            if (crnProtocol.getStatusType() == CrnStatusType.IDLE
                    && crnProtocol.getTaskNo() == 0
                    && crnProtocol.getModeType() == CrnModeType.AUTO
                    && crnProtocol.getLoaded() == 0
                    && crnProtocol.getForkPos() == 0) {
                // 如果最近一次是入库模式
                if (crnProtocol.getLastIo().equals("I")) {
                    if (basCrnp.getInEnable().equals("Y")) {
                        this.crnStnToLoc1(crn, crnProtocol); //  入库
                        crnProtocol.setLastIo("O");
                    } else if (basCrnp.getOutEnable().equals("Y")) {
                        this.locToCrnStn1(crn, crnProtocol); //  出库
                        crnProtocol.setLastIo("I");
                // 只有当堆垛机空闲 并且 无任务时才继续执行
                if (crnProtocol.getStatusType() == CrnStatusType.IDLE
                        && crnProtocol.getTaskNo() == 0
                        && crnProtocol.getModeType() == CrnModeType.AUTO
                        && crnProtocol.getLoaded() == 0
                        && crnProtocol.getForkPos() == 0) {
                    // 如果最近一次是入库模式
                    if (crnProtocol.getLastIo().equals("I")) {
                        if (basCrnp.getInEnable().equals("Y")) {
                            this.crnStnToLoc1(crn, crnProtocol); //  入库
                            crnProtocol.setLastIo("O");
                        } else if (basCrnp.getOutEnable().equals("Y")) {
                            this.locToCrnStn1(crn, crnProtocol); //  出库
                            crnProtocol.setLastIo("I");
                        }
                    }
                    // 如果最近一次是出库模式
                    else if (crnProtocol.getLastIo().equals("O")) {
                        if (basCrnp.getOutEnable().equals("Y")) {
                            this.locToCrnStn1(crn, crnProtocol); //  出库
                            crnProtocol.setLastIo("I");
                        } else if (basCrnp.getInEnable().equals("Y")) {
                            this.crnStnToLoc1(crn, crnProtocol); //  入库
                            crnProtocol.setLastIo("O");
                        }
                    }
                }
                // 如果最近一次是出库模式
                else if (crnProtocol.getLastIo().equals("O")) {
                    if (basCrnp.getOutEnable().equals("Y")) {
                        this.locToCrnStn1(crn, crnProtocol); //  出库
                        crnProtocol.setLastIo("I");
                    } else if (basCrnp.getInEnable().equals("Y")) {
                        this.crnStnToLoc1(crn, crnProtocol); //  入库
                        crnProtocol.setLastIo("O");
                    }
                }
            }
            // 库位移转
            this.locToLoc(crn, crnProtocol);
                // 库位移转
                this.locToLoc(crn, crnProtocol);
//            this.crnRebackHp(crnProtocol, crnThread);
            }
        }catch (Exception e){
            log.error("堆垛机出入库下发报错"+e);
        }
    }
@@ -526,60 +530,65 @@
     * 搜索RGV车。通过目标站搜索哪台车可用
     */
    public synchronized Integer searchRgvNo(Integer staNo) {
        BasDevp basDevp = basDevpService.selectById(staNo);
        if (basDevp == null) {
            return null;//目标站不存在
        }
        //路径值
        int path = basDevp.getLocType3().intValue();
        ArrayList<RgvThread> list = new ArrayList<>();
        for (RgvSlave rgv : slaveProperties.getRgv()) {
            // 获取RGV信息
            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
            if (rgvProtocol == null) {
                continue;
        try{
            BasDevp basDevp = basDevpService.selectById(staNo);
            if (basDevp == null) {
                return null;//目标站不存在
            }
            BasRgv basRgv = basRgvService.selectById(rgv.getId());
            if (basRgv == null) {
                log.error("{}号RGV尚未在数据库进行维护!", rgv.getId());
                continue;
            }
            //路径值
            int path = basDevp.getLocType3().intValue();
            list.add(rgvThread);
        }
            ArrayList<RgvThread> list = new ArrayList<>();
            for (RgvSlave rgv : slaveProperties.getRgv()) {
                // 获取RGV信息
                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                if (rgvProtocol == null) {
        if (list.size() > 1) {
            //超过两台车,按照配置的规则进行分配
            for (RgvThread rgvThread : list) {
                //获取车辆配置的路径规则
                BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(rgvThread.getSlave().getId());
                if (basRgvPath == null) {
                    continue;
                }
                //目标站是否包含当前路径中
                BasRgv basRgv = basRgvService.selectById(rgv.getId());
                if (basRgv == null) {
                    log.error("{}号RGV尚未在数据库进行维护!", rgv.getId());
                    continue;
                }
                list.add(rgvThread);
            }
            if (list.size() > 1) {
                //超过两台车,按照配置的规则进行分配
                for (RgvThread rgvThread : list) {
                    //获取车辆配置的路径规则
                    BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(rgvThread.getSlave().getId());
                    if (basRgvPath == null) {
                        continue;
                    }
                    //目标站是否包含当前路径中
                    List<Integer> rgvPath = JSON.parseArray(basRgvPath.getPath(), Integer.class);
                    if (rgvPath.contains(path)) {
                        //当前路径中包含目标站,则选定这台车
                        return rgvThread.getSlave().getId();
                    }
                }
            }else {
                //小于或等于1台车,分配全路径
                BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(0);//获取默认路径
                if (basRgvPath == null) {
                    return null;
                }
                List<Integer> rgvPath = JSON.parseArray(basRgvPath.getPath(), Integer.class);
                if (rgvPath.contains(path)) {
                    //当前路径中包含目标站,则选定这台车
                    return rgvThread.getSlave().getId();
                    return list.get(0).getSlave().getId();
                }
            }
        }else {
            //小于或等于1台车,分配全路径
            BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(0);//获取默认路径
            if (basRgvPath == null) {
                return null;
            }
            List<Integer> rgvPath = JSON.parseArray(basRgvPath.getPath(), Integer.class);
            if (rgvPath.contains(path)) {
                //当前路径中包含目标站,则选定这台车
                return list.get(0).getSlave().getId();
            }
        }
        return null;
            return null;
        }catch (Exception e){
            log.error("搜索RGV车。通过目标站搜索哪台车可用"+e);
            return null;
        }
    }
//    /**
@@ -2350,8 +2359,8 @@
                                && rgvProtocol.statusType1 == RgvStatusType.WAITING) {
                            // 命令下发区 --------------------------------------------------------------------------
                            // 下发站点信息
                            staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                            staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                            staProtocol.setWorkNo(wrkMast.getWrkNo());
                            staProtocol.setStaNo(wrkMast.getStaNo());
                            if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) {
                                continue;
                            }
@@ -2371,8 +2380,8 @@
                                && rgvProtocol.statusType2 == RgvStatusType.WAITING) {
                            // 命令下发区 --------------------------------------------------------------------------
                            // 下发站点信息
                            staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                            staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                            staProtocol.setWorkNo(wrkMast.getWrkNo());
                            staProtocol.setStaNo(wrkMast.getStaNo());
                            if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) {
                                continue;
                            }
@@ -2426,8 +2435,8 @@
                                && rgvProtocol.statusType1 == RgvStatusType.WAITING) {
                            // 命令下发区 --------------------------------------------------------------------------
                            // 下发站点信息
                            staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                            staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                            staProtocol.setWorkNo(wrkMast.getWrkNo());
                            staProtocol.setStaNo(wrkMast.getStaNo());
                            if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) {
                                continue;
                            }
@@ -2447,8 +2456,8 @@
                                && rgvProtocol.statusType2 == RgvStatusType.WAITING) {
                            // 命令下发区 --------------------------------------------------------------------------
                            // 下发站点信息
                            staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                            staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                            staProtocol.setWorkNo(wrkMast.getWrkNo());
                            staProtocol.setStaNo(wrkMast.getStaNo());
                            if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) {
                                continue;
                            }
@@ -2871,8 +2880,8 @@
                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                            // 更新站点信息 且 下发plc命令
                            staProtocol.setWorkNo(dto.getWorkNo().shortValue());
                            staProtocol.setStaNo(dto.getStaNo().shortValue());
                            staProtocol.setWorkNo(dto.getWorkNo());
                            staProtocol.setStaNo(dto.getStaNo());
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            if (!result) {
@@ -3676,9 +3685,8 @@
                        && staProtocol.getWorkNo() == 9992
                ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) {
                    staProtocol.setWorkNo((short)9999);
                    staNo = staNo + 1;
                    staProtocol.setStaNo((short)staNo);
                    staProtocol.setWorkNo(9999);
                    staProtocol.setStaNo(staNo + 1);
                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol));
                    if (!result) {
@@ -3688,8 +3696,9 @@
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//            e.printStackTrace();
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            log.error("其他  ===>> 码垛完成驱动托盘进入下一步(入库前扫码)"+e);
        }
    }
    /**
@@ -3732,8 +3741,8 @@
                        && staProtocol.getWorkNo() >= 9990
                ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) {
                    staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                    staProtocol.setWorkNo(wrkMast.getWrkNo());
                    staProtocol.setStaNo(wrkMast.getStaNo());
                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol));
                    if (!result) {
@@ -3745,8 +3754,9 @@
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//            e.printStackTrace();
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            log.error("其他  ===>> 码垛完成驱动托盘进入下一步"+e);
        }
    }
    /**
@@ -3791,8 +3801,8 @@
                        && staProtocol.isLoading()
                ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) {
                    staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                    staProtocol.setWorkNo(wrkMast.getWrkNo());
                    staProtocol.setStaNo(wrkMast.getStaNo());
                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol));
                    if (!result) {
@@ -3804,8 +3814,9 @@
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//            e.printStackTrace();
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            log.error("其他  ===>> 贴标完成驱动托盘进入下一步"+e);
        }
    }