Junjie
2023-06-27 c2b0be1a368a88e4adb6dda12d0aa5d3bb0df838
搜索最近穿梭车,提升机完成方法
1个文件已修改
43 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1216,6 +1216,16 @@
        ArrayList<ShuttleThread> sameLev = new ArrayList<>();//相同楼层的穿梭车
        ArrayList<ShuttleThread> diffLev = new ArrayList<>();//不同楼层的穿梭车
        //判断其他空闲穿梭车是否离任务最近
        String distLocNo = null;//目标地点,入库=》提升机口,出库=》货物库位号
        if (wrkMast.getIoType() < 101) {
            //入库
            distLocNo = Utils.levToOutInStaLocNo(lev);
        }else {
            //出库
            distLocNo = locNo;
        }
        for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
            //获取四向穿梭车线程
            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
@@ -1231,6 +1241,14 @@
            if (shuttleLocNo == null) {
                continue;
            }
            if (shuttleLocNo.equals(distLocNo)) {
                //车辆当前位置已经是目标库位,无需计算
                map.put("sameLay", true);//同层
                map.put("result", shuttleThread);
                return map;
            }
            int shuttleLocNoLey = Utils.getLev(shuttleLocNo);//库位号对应层高
            if (lev == shuttleLocNoLey) {
                //工作档楼层相同的穿梭车
@@ -1248,16 +1266,6 @@
            for (ShuttleThread shuttleThread : sameLev) {
                if (recentShuttle == null) {//最近穿梭车为空,则默认赋予为最近穿梭车
                    recentShuttle = shuttleThread;
                }
                //判断其他空闲穿梭车是否离任务最近
                String distLocNo = null;//目标地点,入库=》提升机口,出库=》货物库位号
                if (wrkMast.getIoType() < 101) {
                    //入库
                    distLocNo = Utils.levToOutInStaLocNo(lev);
                }else {
                    //出库
                    distLocNo = locNo;
                }
                //当前穿梭车库位号
@@ -1715,15 +1723,15 @@
                    //判断提升机是否到达任务楼层
                    String locNo = wrkMast.getIoType() < 101 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo();
                    int lev = Utils.getLev(locNo);//任务目标楼层
                    if (liftProtocol.getLev().intValue() != lev) {
                        continue;//提升机没有到达目标
                    }
                    //标记复位
                    liftProtocol.setPakMk(true);
                    switch (wrkMast.getWrkSts().intValue()) {
                        case 3://3.提升机搬运中 ==> 4.提升机搬运完成
                            if (liftProtocol.getLev().intValue() != lev) {
                                continue;//提升机没有到达目标
                            }
                            //给目标站设置工作号
                            StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getStaNo());//目标站
                            staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
@@ -1737,12 +1745,21 @@
                            wrkMast.setWrkSts(4L);
                            break;
                        case 7://7.提升机迁移小车中 ==> 8.提升机迁移小车完成
                            if (liftProtocol.getLev().intValue() != lev) {
                                continue;//提升机没有到达目标
                            }
                            wrkMast.setWrkSts(8L);
                            break;
                        case 24://24.提升机迁移小车中 ==> 25.提升机迁移小车完成
                            if (liftProtocol.getLev().intValue() != lev) {
                                continue;//提升机没有到达目标
                            }
                            wrkMast.setWrkSts(25L);
                            break;
                        case 28://28.提升机搬运中 ==> 29.提升机搬运完成
                            if (liftProtocol.getPositionArrivalFeedback().intValue() != 2) {
                                continue;//提升机是否达到输送线楼层
                            }
                            wrkMast.setWrkSts(29L);
                            wrkMast.setWrkSts(34L);//34.出库完成,暂时先直接完成出库工作档,后续需要根据输送线给出的状态来确定34.出库完成状态
                            //任务号清零