#
luxiaotao1123
2022-03-11 2a2e38283cc97e3c7fd31b26891e05e783c382fe
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -428,7 +428,7 @@
                }
                if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
                    // 查询工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakOutStep15(staProtocol.getSiteId());
                    WrkMast wrkMast = wrkMastMapper.selectPakOutStep16(staProtocol.getSiteId());
                    if (wrkMast == null) {
                        continue;
                    }
@@ -457,14 +457,14 @@
                            continue;
                        }
                        // 更新工作档状态为 16.出库完成
                        wrkMast.setWrkSts(16L);
                        // 更新工作档状态为 17.出库完成
                        wrkMast.setWrkSts(17L);
                        wrkMast.setCrnEndTime(new Date());
                        if (wrkMastMapper.updateById(wrkMast) != 0) {
                            // 复位堆垛机
                            crnThread.setResetFlag(true);
                        } else {
                            log.error("更新工作档的工作状态为 16.出库完成 失败!!! [工作号:{}]", wrkMast.getWrkNo());
                            log.error("更新工作档的工作状态为 17.出库完成 失败!!! [工作号:{}]", wrkMast.getWrkNo());
                        }
                    }
@@ -498,15 +498,19 @@
                            crnProtocol.setLastIo("O");
                        }
                    } else if (basCrnp.getOutEnable().equals("Y")) {
                        this.locToCrnStn(crn, crnProtocol); //  出库
                        crnProtocol.setLastIo("I");
                        //  出库
                        if (this.locToCrnStn(crn, crnProtocol)) {
                            crnProtocol.setLastIo("I");
                        }
                    }
                }
                // 如果最近一次是出库模式
                else if (crnProtocol.getLastIo().equals("O")) {
                    if (basCrnp.getOutEnable().equals("Y")) {
                        this.locToCrnStn(crn, crnProtocol); //  出库
                        crnProtocol.setLastIo("I");
                        //  出库
                        if (this.locToCrnStn(crn, crnProtocol)) {
                            crnProtocol.setLastIo("I");
                        }
                    } else if (basCrnp.getInEnable().equals("Y")) {
                        //  入库
                        if (this.crnStnToLoc(crn, crnProtocol)) {
@@ -828,7 +832,7 @@
    /**
     * 出库  ===>>  库位到堆垛机站
     */
    public void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol){
    public boolean locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol){
        for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
            // 获取工作状态为11(生成出库ID)的出库工作档
            WrkMast wrkMast = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
@@ -870,16 +874,14 @@
                    continue;
                }
                // 已经存在吊车执行任务时,则过滤
                if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                    return;
                }
                // 最外层库位,直接堆垛机出库
                if (locMastService.isOutMost(wrkMast.getLocNo())) {
                    // 1.堆垛机开始移动
                    // 已经存在吊车执行任务时,则过滤
                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                        continue;
                    }
                    // 堆垛机出库 命令下发区 --------------------------------------------------------------------------
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
@@ -894,14 +896,15 @@
                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                        log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                    } else {
                        // 修改工作档状态 11.生成出库ID => 15.吊车出库中
                        // 修改工作档状态 11.生成出库ID => 16.吊车出库中
                        Date now = new Date();
                        wrkMast.setWrkSts(15L);
                        wrkMast.setWrkSts(16L);
                        wrkMast.setCrnStrTime(now);
                        wrkMast.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            log.error("修改工作档状态 11.生成出库ID => 15.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo());
                            log.error("修改工作档状态 11.生成出库ID => 16.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo());
                        }
                        return true;
                    }
                // 不是最外层库位,需要使用穿梭车搬运后,再堆垛机出库
                } else {
@@ -926,20 +929,50 @@
                                if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
                                    log.error("穿梭车命令下发失败,穿梭车号={},任务数据={}", steNo, JSON.toJSON(steCommand));
                                } else {
                                    // 修改工作档状态 11.生成出库ID => 14.小车待出
                                    // 修改工作档状态 11.生成出库ID => 14.小车搬出库
                                    Date now = new Date();
                                    wrkMast.setWrkSts(14L);
                                    wrkMast.setSteNo(steNo);
                                    wrkMast.setCrnStrTime(now);
                                    wrkMast.setModiTime(now);
                                    if (wrkMastMapper.updateById(wrkMast) > 0) {
                                    } else {
                                        log.error("修改工作档状态 11.生成出库ID => 14.小车待出 失败!!,工作号={}", wrkMast.getWrkNo());
                                    if (wrkMastMapper.updateById(wrkMast) == 0) {
                                        log.error("修改工作档状态 11.生成出库ID => 14.小车搬出库 失败!!,工作号={}", wrkMast.getWrkNo());
                                    }
                                }
                            }
                        }
                        if (wrkMast.getWrkSts() == 15L) {
                            // 已经存在吊车执行任务时,则过滤
                            if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                                continue;
                            }
                            // 堆垛机出库 命令下发区 --------------------------------------------------------------------------
                            CrnCommand crnCommand = new CrnCommand();
                            crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                            crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
                            crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                            crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                            crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 源库位排
                            crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 源库位列
                            crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 源库位层
                            crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 目标库位排
                            crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列
                            crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层
                            if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                                log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                            } else {
                                // 修改工作档状态 15.等待吊车 => 16.吊车出库中
                                Date now = new Date();
                                wrkMast.setWrkSts(16L);
                                wrkMast.setCrnStrTime(now);
                                wrkMast.setModiTime(now);
                                if (wrkMastMapper.updateById(wrkMast) == 0) {
                                    log.error("修改工作档状态 15.等待吊车 => 16.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo());
                                }
                                return true;
                            }
                        }
                    // 没有小车
                    } else {
@@ -958,19 +991,9 @@
                    }
                }
            }
        }
        return false;
    }
    /**
@@ -1196,7 +1219,6 @@
                    case 2:
                        // 修改工作档状态 2.设备上走 => 3.小车待搬
                        wrkMast.setWrkSts(3L);
                        wrkMast.setCrnStrTime(now);
                        wrkMast.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            log.error("修改工作档状态 2.设备上走 => 3.小车待搬 失败!!,工作号={}", wrkMast.getWrkNo());
@@ -1207,7 +1229,6 @@
                    case 8:
                        // 修改工作档状态 8.小车搬入库 => 9.入库完成
                        wrkMast.setWrkSts(9L);
                        wrkMast.setCrnStrTime(now);
                        wrkMast.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            log.error("修改工作档状态 8.小车搬入库 => 9.入库完成 失败!!,工作号={}", wrkMast.getWrkNo());
@@ -1215,6 +1236,16 @@
                            steThread.setResetFlag(true);
                        }
                        break;
                    case 14:
                        // 修改工作档状态 14.小车搬出库 => 15.等待吊车
                        wrkMast.setWrkSts(15L);
                        wrkMast.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            log.error("修改工作档状态 14.小车搬出库 => 15.等待吊车 失败!!,工作号={}", wrkMast.getWrkNo());
                        } else {
                            steThread.setResetFlag(true);
                        }
                        break;
                }