自动化立体仓库 - WCS系统
#
luxiaotao1123
2022-03-09 759ac29f4ede586002f7349abc8d9d0a8c0bf0ba
#
4个文件已修改
151 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/service/LocMastService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocMastService.java
@@ -45,5 +45,17 @@
     */
    Boolean checkEmptyCount(LocMast locMast);
    /**
     * 判断当前库位是否需要堆垛机搬移小车入/出
     * @param locNo
     */
//    void judgeCarInOut(String locNo);
    /**
     * 判断是否是最外层的库位
     * @param locNo
     * @return
     */
    Boolean isOutMost(String locNo);
}
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -5,6 +5,7 @@
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.mapper.LocMastMapper;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.utils.Utils;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -52,4 +53,9 @@
        return this.baseMapper.selectEmptyLocCount(locMast.getLocType1(), locMast.getCrnNo()) > 1;
    }
    @Override
    public Boolean isOutMost(String locNo) {
        return Integer.parseInt(locNo.substring(0, 2)) == Utils.getGroupRow(locNo);
    }
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -562,6 +562,26 @@
                continue;
            }
            // todo:小车迁入出
            // 最外层库位
            if (locMastService.isOutMost(wrkMast.getLocNo())) {
                // 判断小车是否在最外层库位,如果是则搬走,如果不是,则直接堆垛机入库
                Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo());
                if (steNo != null) {
                    // 小车搬走
                } else {
                    // 堆垛机入库
                }
            // 非最外层库位
            } else {
                // 判断小车是否在当前组库位,如果是则堆垛机将货物放置小车上,如果不是,则直接堆垛机搬移小车至当前组的最外层库位
            }
            this.carMoveIn(wrkMast);
@@ -616,18 +636,6 @@
                log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
            } else {
//                long startTime = System.currentTimeMillis();
//                while ((System.currentTimeMillis() - startTime) < COMMAND_TIMEOUT) {
//
//                    if (true) {
//                        break;
//                    }
//
//                    try{
//                        Thread.sleep(500);
//                    }catch(Exception ignore){}
//                }
                // 修改工作档状态 2.设备上走 => 3.吊车入库中
                Date now = new Date();
                wrkMast.setWrkSts(3L);
@@ -641,6 +649,26 @@
    }
    /**
     * 当前库位组是否存在空闲小车
     * @param locNo
     * @return
     */
    public Integer hasCarOfIdle(String locNo) {
        for (SteSlave ste : slaveProperties.getSte()) {
            // 获取堆垛机信息
            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
            SteProtocol steProtocol = steThread.getSteProtocol();
            if (steProtocol == null) { continue; }
            if (steProtocol.getStatusType().equals(SteStatusType.IDLE)) {
                if (steProtocol.getRow() == Utils.getRow(locNo) && steProtocol.getBay() == Utils.getBay(locNo) && steProtocol.getLev() == Utils.getLev(locNo)) {
                    return steProtocol.getSteNo().intValue();
                }
            }
        }
        return null;
    }
    /**
     * 入库  ===>>  堆垛机搬入小车
     */
    public void carMoveIn(WrkMast wrkMast) {
src/main/java/com/zy/asrs/utils/Utils.java
@@ -36,6 +36,67 @@
        }
    }
    public static Integer getGroupRow(String locNo){
        int row = getRow(locNo);
        switch (row) {
            case 1:
            case 2:
            case 3:
                return 3;
            case 4:
            case 5:
            case 6:
            case 7:
                return 4;
            case 8:
            case 9:
            case 10:
            case 11:
                return 11;
            case 12:
            case 13:
            case 14:
                return 12;
            case 15:
            case 16:
            case 17:
            case 18:
                return 18;
            case 19:
            case 20:
            case 21:
                return 19;
            default:
                throw new RuntimeException("库位解析异常");
        }
    }
    // -------------------------------------------------------------------------------------------------------------------
    /**
     * 判断是否为深库位
     */
@@ -144,6 +205,26 @@
    }
    /**
     * 通过库位号获取 列
     */
    public static int getBay(String locNo) {
        if (!Cools.isEmpty(locNo)) {
            return Integer.parseInt(locNo.substring(2, 5));
        }
        throw new RuntimeException("库位解析异常");
    }
    /**
     * 通过库位号获取 层
     */
    public static int getLev(String locNo) {
        if (!Cools.isEmpty(locNo)) {
            return Integer.parseInt(locNo.substring(5, 7));
        }
        throw new RuntimeException("库位解析异常");
    }
    /**
     * 当检索到双深库位的浅库位时,如果深库位无货,则放入对应的深库位
     */
    public static void toDeepIfEmptyByShallow(String shallowLoc) {