#
luxiaotao1123
2022-10-25 6d305f3f24213792b7be81cab23a45df7fc71a59
#
3个文件已修改
251 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/mapper/LocMastMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -13,7 +13,7 @@
@Repository
public interface LocMastMapper extends BaseMapper<LocMast> {
    @Select("select distinct row1 from asr_loc_mast where crn_no = #{crnNo}")
    @Select("select distinct row1 from asr_loc_mast where crn_no = #{crnNo} and row1 > 30")
    List<Integer> queryDistinctRow(@Param("crnNo")Integer crnNo);
    LocMast queryFreeLocMast(@Param("row") Integer row, @Param("locType1") Short locType1);
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -55,8 +55,13 @@
    @Override
    public Boolean isOutMost(String locNo, Boolean pakin) {
        if (null == pakin) {
            return (Integer.parseInt(locNo.substring(0, 2)) == Utils.getGroupRow(locNo, true)
                    || Integer.parseInt(locNo.substring(0, 2)) == Utils.getGroupRow(locNo, false));
        } else {
        return Integer.parseInt(locNo.substring(0, 2)) == Utils.getGroupRow(locNo, pakin);
    }
    }
    @Override
    public List<String> getDemoNextLoc(Integer crnNo) {
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -641,7 +641,7 @@
                    }
                }
                // 库位移转
//                this.locToLoc(crn, crnProtocol);
                this.locToLoc(crn, crnProtocol);
                // 演示任务
                this.steMoveDemo(crn, crnProtocol);
            }
@@ -880,7 +880,7 @@
                                crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排
                                crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 源库位列
                                crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 源库位层
                                crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo()).shortValue());     // 目标库位排
                                crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo(), true).shortValue());     // 目标库位排
                                crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 目标库位列
                                crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 目标库位层
                                if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
@@ -1089,22 +1089,6 @@
                            SteThread steThread = queryIdleCar(wrkMast);
                            if (steThread != null) {
                                // 没有其他任务
//                                boolean hasPakout = true;
//                                WrkMast pakoutWrkMast = wrkMastMapper.selectPakout(slave.getId(), steNo);
//                                if (null != pakoutWrkMast) {
//                                    if ((pakoutWrkMast.getIoType() == 103 || pakoutWrkMast.getIoType() == 104 || pakoutWrkMast.getIoType() == 107)
//                                            && pakoutWrkMast.getWrkSts() == 17
//                                            && basDevpService.selectByWrkNo(pakoutWrkMast.getWrkNo()) != null
//                                    ) {
//                                        hasPakout = false;
//                                    }
//                                } else {
//                                    hasPakout = false;
//                                }
//                                if (!hasPakout) {
//                                    // 让小车等待搬运待续
//                                    this.letCarBeReady(wrkMast, steThread.getSlave().getId(), wrkMast.getSourceLocNo());
//                                }
                                if (null == wrkMastMapper.selectPakout(slave.getId(), steNo)) {
                                    // 让小车等待搬运待续
                                    this.letCarBeReady(wrkMast, steThread.getSlave().getId(), wrkMast.getSourceLocNo());
@@ -1168,12 +1152,6 @@
        wrkMast.setIoPri((double) 9999);
        wrkMastMapper.updateById(wrkMast);
        // 源库位 ===>> 最外层库位
        if (locMastService.isOutMost(wrkMast.getSourceLocNo())) {
            // 目标库位 ===>> 最外层库位
            if (locMastService.isOutMost(wrkMast.getLocNo())) {
                // todo:luxiaotao 判断目标库位是否存在小车,如果存在,则搬走小车
                // 命令下发区 --------------------------------------------------------------------------
                CrnCommand crnCommand = new CrnCommand();
                crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
@@ -1195,224 +1173,10 @@
                    wrkMast.setCrnStrTime(now);
                    wrkMast.setModiTime(now);
                    if (wrkMastMapper.updateById(wrkMast) == 0) {
                        log.error("【库位移转】 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo());
                    }
                }
            } else {
                Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo());
                // 有小车
                if (steNo != null) {
                    // 小车行走到堆垛机待搬移点
                    if (wrkMast.getWrkSts() == 11L && wrkMast.getSteNo() == null) {
                        // 标记移库当前流程
                        wrkMast.setMk("I");
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            log.error("标记移库当前流程 I 失败!!,工作号={}", wrkMast.getWrkNo());
                        }
                        this.letCarBeWaiting(wrkMast, steNo, wrkMast.getLocNo());
                    }
                    // 堆垛机将货放至小车上 6.小车待入  ===>> 7.吊车入库中
                    if (wrkMast.getWrkSts() == 6L) {
                        // 小车处于空闲
                        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                        SteProtocol steProtocol = steThread.getSteProtocol();
                        if (steProtocol == null) { return; }
                        if (steProtocol.isIdle()) {
                            // 已经存在吊车执行任务时,则过滤
                            if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                                return;
                            }
                            // 堆垛机入库 命令下发区 --------------------------------------------------------------------------
                            CrnCommand crnCommand = new CrnCommand();
                            crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                            crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
                            crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                            crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                            crnCommand.setSourcePosX(Utils.getGroupRow(sourceLoc.getRow1()).shortValue());     // 源库位排
                            crnCommand.setSourcePosY(sourceLoc.getBay1().shortValue());     // 源库位列
                            crnCommand.setSourcePosZ(sourceLoc.getLev1().shortValue());     // 源库位层
                            crnCommand.setDestinationPosX(Utils.getGroupRow(loc.getRow1()).shortValue());     // 目标库位排
                            crnCommand.setDestinationPosY(loc.getBay1().shortValue());     // 目标库位列
                            crnCommand.setDestinationPosZ(loc.getLev1().shortValue());     // 目标库位层
                            if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                                log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                            } else {
                                // 修改工作档状态  6.小车待入 ===>> 7.吊车入库中
                                Date now = new Date();
                                wrkMast.setWrkSts(7L);
                                wrkMast.setCrnStrTime(now);
                                wrkMast.setModiTime(now);
                                if (wrkMastMapper.updateById(wrkMast) == 0) {
                                    log.error("修改工作档状态 3.小车待搬/6.小车待入 => 7.吊车入库中 失败!!,工作号={}", wrkMast.getWrkNo());
                                }
                            }
                        }
                    }
                } else {
                    if (wrkMast.getWrkSts() == 11L && wrkMast.getSteNo() == null) {
                        // 寻找当前堆垛机对应的小车
                        SteThread steThread = queryIdleCar(wrkMast);
                        if (steThread != null) {
                            // 标记移库当前流程
                            wrkMast.setMk("I");
                            if (wrkMastMapper.updateById(wrkMast) == 0) {
                                log.error("标记移库当前流程 I 失败!!,工作号={}", wrkMast.getWrkNo());
                            }
                            // 让小车等待搬运待续
                            this.letCarBeReady(wrkMast, steThread.getSlave().getId(), wrkMast.getLocNo());
                        }
                    }
                    // 堆垛机搬运小车
                    if (wrkMast.getWrkSts() == 3L) {
                        this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol);
                    }
                }
            }
        } else {
            // 当前组库位是否有穿梭车
            Integer steNo = this.hasCarOfIdle(wrkMast.getSourceLocNo());
            // 有小车
            if (steNo != null) {
                if (wrkMast.getWrkSts() == 11L && wrkMast.getSteNo() == null) {
                    // 给穿梭车下发命令 让其将货物挪至堆垛机搬运点
                    SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                    SteProtocol steProtocol = steThread.getSteProtocol();
                    if (steProtocol == null) { return; }
                    if (steProtocol.isIdle()) {
                        // 命令下发区 --------------------------------------------------------------------------
                        SteCommand steCommand = new SteCommand();
                        steCommand.setSteNo(steNo); // 穿梭车编号
                        steCommand.setTaskNo(wrkMast.getWrkNo()); // 工作号
                        steCommand.setTaskMode(SteTaskModeType.findOutByLoc(wrkMast.getSourceLocNo())); // 任务模式:  去近点 等待堆垛机叉取
                        steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).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 {
                            // 修改工作档状态 11.生成出库ID => 14.小车搬出库
                            Date now = new Date();
                            wrkMast.setWrkSts(14L);
                            wrkMast.setSteNo(steNo);
                            wrkMast.setCrnStrTime(now);
                            wrkMast.setModiTime(now);
                            if (wrkMastMapper.updateById(wrkMast) == 0) {
                                log.error("修改工作档状态 11.生成出库ID => 14.小车搬出库 失败!!,工作号={}", wrkMast.getWrkNo());
                            }
                        }
                    }
                }
                if (wrkMast.getWrkSts() == 15L) {
                    // 已经存在吊车执行任务时,则过滤
                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                        return;
                    }
                    // 目标库位 ===>> 最外层库位
                    if (locMastService.isOutMost(wrkMast.getLocNo())) {
                        // 堆垛机出库 命令下发区 --------------------------------------------------------------------------
                        CrnCommand crnCommand = new CrnCommand();
                        crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                        crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
                        crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                        crnCommand.setSourcePosX(Utils.getGroupRow(sourceLoc.getRow1()).shortValue());     // 源库位排
                        crnCommand.setSourcePosY(sourceLoc.getBay1().shortValue());     // 源库位列
                        crnCommand.setSourcePosZ(sourceLoc.getLev1().shortValue());     // 源库位层
                        crnCommand.setDestinationPosX(Utils.getGroupRow(loc.getRow1()).shortValue());     // 目标库位排
                        crnCommand.setDestinationPosY(loc.getBay1().shortValue());     // 目标库位列
                        crnCommand.setDestinationPosZ(loc.getLev1().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());
                            }
//                            wrkMastMapper.setSteEmpty(wrkMast.getWrkNo());
                        }
                    } else {
                        // 把货搬到临时存放货位 todo:luxiaotao
                        // 小车行走到堆垛机待搬移点
                        if (wrkMast.getWrkSts() == 11L && wrkMast.getSteNo() == null) {
                            this.letCarBeWaiting(wrkMast, steNo, wrkMast.getLocNo());
                        }
                        // 堆垛机将货放至小车上 6.小车待入  ===>> 7.吊车入库中
                        if (wrkMast.getWrkSts() == 6L) {
                            // 小车处于空闲
                            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                            SteProtocol steProtocol = steThread.getSteProtocol();
                            if (steProtocol == null) { return; }
                            if (steProtocol.isIdle()) {
                                // 已经存在吊车执行任务时,则过滤
                                if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                                    return;
                                }
                                // 堆垛机入库 命令下发区 --------------------------------------------------------------------------
                                CrnCommand crnCommand = new CrnCommand();
                                crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                                crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
                                crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                                crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                                crnCommand.setSourcePosX(Utils.getGroupRow(sourceLoc.getRow1()).shortValue());     // 源库位排
                                crnCommand.setSourcePosY(sourceLoc.getBay1().shortValue());     // 源库位列
                                crnCommand.setSourcePosZ(sourceLoc.getLev1().shortValue());     // 源库位层
                                crnCommand.setDestinationPosX(Utils.getGroupRow(loc.getRow1()).shortValue());     // 目标库位排
                                crnCommand.setDestinationPosY(loc.getBay1().shortValue());     // 目标库位列
                                crnCommand.setDestinationPosZ(loc.getLev1().shortValue());     // 目标库位层
                                if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                                    log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                                } else {
                                    // 修改工作档状态  6.小车待入 ===>> 7.吊车入库中
                                    Date now = new Date();
                                    wrkMast.setWrkSts(7L);
                                    wrkMast.setCrnStrTime(now);
                                    wrkMast.setModiTime(now);
                                    if (wrkMastMapper.updateById(wrkMast) == 0) {
                                        log.error("修改工作档状态 3.小车待搬/6.小车待入 => 7.吊车入库中 失败!!,工作号={}", wrkMast.getWrkNo());
                                    }
                                }
                log.error("【库位移转】 修改工作档状态 11.生成出库ID => 16.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo());
                            }
                        }
                    }
                }
            } else {
                if (wrkMast.getWrkSts() == 11L && wrkMast.getSteNo() == null) {
                    // 寻找最近的小车
                    SteThread steThread = queryIdleCar(wrkMast);
                    if (steThread != null) {
                        // 标记移库当前流程
                        wrkMast.setMk("O");
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            log.error("标记移库当前流程 I 失败!!,工作号={}", wrkMast.getWrkNo());
                        }
                        // 让小车等待搬运待续
                        this.letCarBeReady(wrkMast, steThread.getSlave().getId(), wrkMast.getSourceLocNo());
                    }
                }
                // 堆垛机搬运小车
                if (wrkMast.getWrkSts() == 12L) {
                    this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol);
                }
            }
        }
    }
    /**
@@ -3063,7 +2827,7 @@
            wrkMast.setIoTime(new Date());
            wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
            wrkMast.setIoType(11); // 入出库状态: 11.库格移载
            wrkMast.setIoPri(13D);
            wrkMast.setIoPri(20D);
            wrkMast.setCrnNo(crn.getId());
            wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 源库位
            wrkMast.setLocNo(loc.getLocNo()); // 目标库位