luxiaotao1123
2022-12-03 455e8885455fb73ad1c4755e86cab54d93223db2
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -173,7 +173,7 @@
                        param.setBarcode(barcode);
                        param.setIoType(1);
                        param.setSourceStaNo(inSta.getStaNo());
                        param.setLocType1(locTypeDto.getLocType1());
//                        param.setLocType1(locTypeDto.getLocType1());
                        String response = new HttpHandler.Builder()
                                .setUri(wmsUrl)
                                .setPath("/rpc/pakin/loc/v1")
@@ -643,7 +643,7 @@
                    }
                }
                // 库位移转
                this.locToLoc(crn, crnProtocol);
//                this.locToLoc(crn, crnProtocol);
            }
        }
    }
@@ -732,9 +732,9 @@
                                        log.error("调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo());
                                    }
                                    //20220719 Add,如果浅库位状态为P/R,工作状态为14/15,说明浅库位已经空了,可以执行入库任务
                                    continue;
                                }
                            }
                            continue;
                        }
                        if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
                            // 此标记避免多次执行移库任务
@@ -847,7 +847,7 @@
                    Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo());
                    // 有小车
                    if (steNo != null) {
                        // 小车行走到堆垛机待搬移点
                        // 小车行走到待机位
                        if (wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) {
                            // 没有其他任务
                            if (null == wrkMastMapper.selectPakin(slave.getId(), steNo)) {
@@ -970,11 +970,11 @@
                }
                // 置顶任务
                wrkMast.setIoPri((double) 9999);
                wrkMast.setIoPri((double) 9998);
                wrkMastMapper.updateById(wrkMast);
                // 判断是否为穿梭库
                if (!locMastService.isShuttle(wrkMast.getLocNo())) {
                if (!locMastService.isShuttle(wrkMast.getSourceLocNo())) {
                    // 双深库位且浅库位有货,则需先对浅库位进行库位移转
                    if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
@@ -987,7 +987,7 @@
                                log.error("{}库位异常,未检索到相应工作档!", shallowLocNo);
                            } else {
                                if(waitWrkMast.getWrkSts() == 11) {
                                    waitWrkMast.setIoPri(20D);
                                    waitWrkMast.setIoPri(wrkMast.getIoPri() + 1);
                                    waitWrkMast.setModiTime(new Date());
                                    if (wrkMastMapper.updateById(waitWrkMast) == 0) {
                                        log.error("调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo());
@@ -1106,6 +1106,9 @@
                                        wrkMast.setSteNo(steNo);
                                        wrkMast.setCrnStrTime(now);
                                        wrkMast.setModiTime(now);
                                        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
                                        Integer outCrnNo = locMastService.getOutCrnNo(locMast);
                                        wrkMast.setCrnNo(outCrnNo);
                                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                                            log.error("修改工作档状态 11.生成出库ID => 14.小车搬出库 失败!!,工作号={}", wrkMast.getWrkNo());
                                        }
@@ -1174,6 +1177,7 @@
    /**
     * 库位移转
     */
    @Deprecated
    public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol){
        // 获取工作档信息
        WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId());
@@ -1326,7 +1330,14 @@
            SteProtocol steProtocol = steThread.getSteProtocol();
            if (steProtocol == null) { continue; }
            if (!steProtocol.isIdle()) { continue; }
            if (steProtocol.getRow() == 1) { continue; }
            String locNo = wrkMast.getWrkSts() < 10 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo();
            // 如果在同一个库位组
            if (Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(steProtocol.getRow().intValue(), true))
                    && steProtocol.getBay().intValue() == Utils.getBay(locNo)
                    && steProtocol.getLev().intValue() == Utils.getLev(locNo)) {
                return steThread;
            }
            LocMast locMast = locMastService.selectById(locNo);
            int lev = locMast.getLev1();
            int bay = locMast.getBay1();
@@ -1346,8 +1357,7 @@
    }
    /**
     * 让小车从 远点 ====>> 待机
     *  等待堆垛机搬运
     * 让小车行走至待机位
     */
    public void letCarBeWaiting(WrkMast wrkMast, Integer steNo, String locNo) {
        // 获取穿梭车信息
@@ -1356,24 +1366,35 @@
        if (steProtocol == null) { return; }
        if (steProtocol.isIdle()) {
            // 命令下发区 --------------------------------------------------------------------------
            SteCommand steCommand = new SteCommand();
            steCommand.setSteNo(steNo); // 穿梭车编号
            steCommand.setTaskNo(wrkMast.getWrkNo()); // 工作号
            steCommand.setTaskMode(SteTaskModeType.findWaiting(steProtocol.getRow().intValue())); // 任务模式:  去近点 等待堆垛机叉取
            steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());
            steCommand.setBay(steProtocol.getBay());
            steCommand.setLev(steProtocol.getLev());
            if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
                log.error("穿梭车命令下发失败,穿梭车号={},任务数据={}", steNo, JSON.toJSON(steCommand));
            } else {
            // 如果处于待机位
            if (steProtocol.locaType.equals(SteLocaType.A_WAITING) || steProtocol.locaType.equals(SteLocaType.B_WAITING)) {
                // 修改工作档状态 绑定穿梭车
                wrkMast.setWrkSts(3L);
                wrkMast.setSteNo(steNo);
                wrkMast.setModiTime(new Date());
                if (wrkMastMapper.updateById(wrkMast) == 0) {
                    log.error("修改工作档状态 绑定穿梭车 失败!!,工作号={}", wrkMast.getWrkNo());
                }
            } else {
                // 命令下发区 --------------------------------------------------------------------------
                SteCommand steCommand = new SteCommand();
                steCommand.setSteNo(steNo); // 穿梭车编号
                steCommand.setTaskNo(wrkMast.getWrkNo()); // 工作号
                steCommand.setTaskMode(SteTaskModeType.findWaiting(steProtocol.getRow().intValue())); // 任务模式:  行走至待机位
                steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());
                steCommand.setBay(steProtocol.getBay());
                steCommand.setLev(steProtocol.getLev());
                if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
                    log.error("穿梭车命令下发失败,穿梭车号={},任务数据={}", steNo, JSON.toJSON(steCommand));
                } else {
                    // 修改工作档状态 绑定穿梭车
                    wrkMast.setSteNo(steNo);
                    wrkMast.setModiTime(new Date());
                    if (wrkMastMapper.updateById(wrkMast) == 0) {
                        log.error("修改工作档状态 绑定穿梭车 失败!!,工作号={}", wrkMast.getWrkNo());
                    }
                }
            }
        }
@@ -1842,6 +1863,9 @@
                            Date now = new Date();
                            wrkMast.setCrnEndTime(now);
                            wrkMast.setModiTime(now);
                            LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
                            Integer outCrnNo = locMastService.getOutCrnNo(locMast);
                            wrkMast.setCrnNo(outCrnNo);
                            // 修改成功后复位堆垛机
                            if (wrkMastMapper.updateById(wrkMast) > 0) {
                                // 堆垛机复位
@@ -2487,6 +2511,9 @@
        if (null != wrkChargeService.selectWorking(null, WrkChargeType.reset)) {
            return;
        }
        if (null != wrkChargeService.selectWorking(null, WrkChargeType.charge)) {
            return;
        }
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        for (SteSlave ste : slaveProperties.getSte()) {
            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
@@ -2509,7 +2536,7 @@
                if (steProtocol.getCharge() > Float.parseFloat(basSte.getChargeLine())) {
                    continue;
                }
                WrkCharge wrkCharge = wrkChargeService.selectWorking(ste.getId(), WrkChargeType.charge);
                WrkCharge wrkCharge = wrkChargeService.selectWorking(null, WrkChargeType.charge);
                if (wrkCharge == null && steProtocol.getChargeStatus() == 0) {
                    // 寻找空闲充电桩
@@ -2517,23 +2544,29 @@
                    do {
                        String locNo;
                        if (!devpThread.charge0) {
                            locNo = SteChargeType.FIRST.locNo;
                            if (basSteService.hasCarOfLocNo(locNo) == null) {
                                steCharge = SteChargeType.FIRST;
                            SteChargeType first = SteChargeType.FIRST;
                            locNo = first.locNo;
                            if (basSteService.hasCarOfLocNo(locNo) == null
                                && wrkChargeService.selectWorkingOfCharge(first.ssbm) == null) {
                                steCharge = first;
                                break;
                            }
                        }
                        if (!devpThread.charge1) {
                            locNo = SteChargeType.SECOND.locNo;
                            if (basSteService.hasCarOfLocNo(locNo) == null) {
                                steCharge = SteChargeType.SECOND;
                            SteChargeType second = SteChargeType.SECOND;
                            locNo = second.locNo;
                            if (basSteService.hasCarOfLocNo(locNo) == null
                                && wrkChargeService.selectWorkingOfCharge(second.ssbm) == null) {
                                steCharge = second;
                                break;
                            }
                        }
                        if (!devpThread.charge2) {
                            locNo = SteChargeType.THIRD.locNo;
                            if (basSteService.hasCarOfLocNo(locNo) == null) {
                                steCharge = SteChargeType.THIRD;
                            SteChargeType third = SteChargeType.THIRD;
                            locNo = third.locNo;
                            if (basSteService.hasCarOfLocNo(locNo) == null
                                && wrkChargeService.selectWorkingOfCharge(third.ssbm) == null) {
                                steCharge = third;
                                break;
                            }
                        }
@@ -2573,6 +2606,8 @@
                    } else {
                        this.letCarBeWaiting(wrkCharge, ste.getId());
                    }
                    break;
                }
            } catch (Exception e) {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -2754,6 +2789,7 @@
    public synchronized void queryChargeLocOfComplete() {
        // 与充电任务不同步进行
        if (null != wrkChargeService.selectWorking(null, WrkChargeType.charge)) { return; }
        if (null != wrkChargeService.selectWorking(null, WrkChargeType.reset)) { return; }
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        // 检索充电桩
        for (SteChargeType value : SteChargeType.values()) {
@@ -2765,22 +2801,31 @@
                if (Cools.isEmpty(steProtocol, basSte)) {
                    continue;
                }
                // 1号充电桩
                if (value.equals(SteChargeType.FIRST) && devpThread.charge0) {
                if (steProtocol.getCharge() < 99) {
                    continue;
                }
                // 2号充电桩
                if (value.equals(SteChargeType.SECOND) && devpThread.charge1) {
                if (steProtocol.getMode() == 0) {
                    continue;
                }
                // 3号充电桩
                if (value.equals(SteChargeType.THIRD) && devpThread.charge2) {
                if (!steProtocol.getStatusType().equals(SteStatusType.IDLE)) {
                    continue;
                }
                // 小车是否处于充电状态
                if (steProtocol.getChargeStatus() == 1) {
                    continue;
                }
//                // 1号充电桩
//                if (value.equals(SteChargeType.FIRST) && devpThread.charge0) {
//                    continue;
//                }
//                // 2号充电桩
//                if (value.equals(SteChargeType.SECOND) && devpThread.charge1) {
//                    continue;
//                }
//                // 3号充电桩
//                if (value.equals(SteChargeType.THIRD) && devpThread.charge2) {
//                    continue;
//                }
//                // 小车是否处于充电状态
//                if (steProtocol.getChargeStatus() == 1) {
//                    continue;
//                }
                // case 1 : 自动充电开   馈电      ×
                // case 2 : 自动充电开   满电      ✔
                // case 3 : 自动充电关   馈电      ✔
@@ -2806,6 +2851,8 @@
                    wrkCharge.setAppeTime(new Date());
                    if (!wrkChargeService.insert(wrkCharge)) {
                        log.error("保存{}号穿梭车复位任务失败!!!", steNo);
                    } else {
                        break;
                    }
                }
            }
@@ -2848,7 +2895,7 @@
                        crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 工作号
                        crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                        crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 任务模式:  库位移转
                        crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());     // 源库位排
                        crnCommand.setSourcePosX(steProtocol.getRow());     // 源库位排
                        crnCommand.setSourcePosY(steProtocol.getBay());     // 源库位列
                        crnCommand.setSourcePosZ(steProtocol.getLev());     // 源库位层
                        crnCommand.setDestinationPosX(Utils.getGroupRow(channelLoc.getLocNo(), false).shortValue());     // 目标库位排
@@ -2964,7 +3011,6 @@
                            }
                        }
                    }
                    if (null != loc) {
                        break;