zhoushihao
2024-05-24 6db1c7d6ddc4e5781557f0c44b48716f5b32a12d
卧式理片笼线程改造:新增状态码2非自动状态禁用
3个文件已修改
76 ■■■■■ 已修改文件
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
@@ -19,9 +19,10 @@
    /**
     * 查询笼内离指定格子最近空格
     *
     * @return
     */
    EdgStorageCage selectNearestEmpty(int currentSlot);
    EdgStorageCage selectNearestEmpty(int currentSlot, boolean flag);
    /**
     * 查询笼内空格
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java
@@ -37,7 +37,7 @@
    UpPattenUsageMapper upPattenUsageMapper;
    @Override
    public EdgStorageCage selectNearestEmpty(int currentSlot) {
    public EdgStorageCage selectNearestEmpty(int currentSlot, boolean flag) {
        List<EdgStorageCage> emptyList = this.selectJoinList(EdgStorageCage.class, new MPJLambdaWrapper<EdgStorageCage>()
                .selectAll(EdgStorageCage.class)
                .leftJoin(EdgStorageCageDetails.class, on -> on
@@ -46,7 +46,10 @@
                .isNull(EdgStorageCageDetails::getSlot)
                .last("order by abs(t.slot - " + currentSlot + ")  asc limit 2")
        );
        if (CollectionUtil.isEmpty(emptyList) || emptyList.size() < 2) {
        if (flag && CollectionUtil.isNotEmpty(emptyList)) {
            return emptyList.get(0);
        }
        if (CollectionUtil.isEmpty(emptyList) || emptyList.size() == 1) {
            return null;
        }
        return emptyList.get(0);
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -104,14 +104,10 @@
        } else if ("3".equals(taskRequestTypeValue)) {
            log.info("2、进片和出片都空闲,执行出片任务");
            //加笼子里面是否有玻璃,有先出,无玻璃先进
            if (("1".equals(out08Glassstate) || "1".equals(out10Glassstate))) {
                boolean outFlase = outTo(Integer.parseInt(out08Glassstate),
                        Integer.parseInt(out10Glassstate), confirmationWrodAddress, glassIdeValue, Integer.parseInt(currentSlot));
                log.info("出片任务是否完成:{},失败且玻璃id:{}不为空则执行进片任务", outFlase, glassIdeValue);
                if (!outFlase && StringUtils.isNotBlank(glassIdeValue)) {
                    inTo(glassIdeValue, confirmationWrodAddress, currentSlot);
                }
            } else {
                inTo(glassIdeValue, confirmationWrodAddress, currentSlot);
            }
        }
@@ -155,7 +151,7 @@
        }
        log.info("2、获取到的玻璃信息为{}", glassInfo);
        //添加进片任务  查找空格
        EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(Integer.parseInt(currentSlot));
        EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(Integer.parseInt(currentSlot), Boolean.FALSE);
        Assert.isTrue(null != nearestEmpty, "格子已满");
        log.info("3、查询卧式理片笼里面的空格:{}", nearestEmpty);
@@ -200,7 +196,10 @@
//        1.2.3、按照出片信息去详情表查询格子在笼子里面剩余相同尺寸的玻璃数据且以版图id、版序升序排序  取第一块玻璃出片
//        2、如果没有历史出片任务
//        2.1、出当前版图id最小版序最小的玻璃(问题:两条线都没有历史任务,出片时两条线的玻璃尺寸相同,是否找尺寸不同的)
        Assert.isFalse(out08Glassstate == 0 && out10Glassstate == 0, "A09、A10都有玻璃,无法出片");
        if (out08Glassstate == 2 && out10Glassstate == 2) {
            log.info("A09、A10为{},{}非自动状态,无法出片");
            return Boolean.FALSE;
        }
        log.info("0、出片任务出的状态:A09:【{}】;A10:【{}】)", out08Glassstate, out10Glassstate);
        //定义出片玻璃信息
        int endcell = 0;
@@ -220,8 +219,9 @@
            endcell = queryLineByGlassInfo(a09EdgGlass, a10EdgGlass, glassInfo, out08Glassstate, out10Glassstate);
        } else {
            //判断两条线是否都空闲
            endcell = out08Glassstate == 1 ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
            if (out08Glassstate == 1 && out10Glassstate == 1) {
            endcell = out08Glassstate == 1 || out10Glassstate == 2 ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
            if ((out08Glassstate == 0 && out10Glassstate == 0) || (out08Glassstate == 1 && out10Glassstate == 1)) {
                EdgStorageCageDetails a09EdgGlass = queryGlassByTaskCache(Const.A09_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT);
                EdgStorageCageDetails a10EdgGlass = queryGlassByTaskCache(Const.A10_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT);
                if (a09EdgGlass == null && a10EdgGlass == null) {
@@ -258,7 +258,10 @@
                } else {
                    //获取笼内所有玻璃信息,包括待进片的
                    List<EdgStorageCageDetails> glassList = queryEdgAllGlass(glassId);
                    Assert.isTrue(CollectionUtil.isNotEmpty(glassList), "笼内和待进片都没有玻璃");
                    if (CollectionUtil.isEmpty(glassList)) {
                        log.info("笼内和待进片都没有玻璃");
                        return Boolean.FALSE;
                    }
                    if (glassList.size() == 1 && glassId.equals(glassList.get(0).getGlassId())) {
                        glassInfo = glassList.get(0);
                    } else {
@@ -402,23 +405,46 @@
     */
    private Integer queryLineByGlassInfo(EdgStorageCageDetails a08EdgStorageCageDetails, EdgStorageCageDetails a10EdgStorageCageDetails,
                                         EdgStorageCageDetails glassInfo, int out08Glassstate, int out10Glassstate) {
        if (a08EdgStorageCageDetails != null && a08EdgStorageCageDetails.getHeight().equals(glassInfo.getHeight())
                && a08EdgStorageCageDetails.getWidth().equals(glassInfo.getWidth()) && out08Glassstate == 1) {
            return Const.A09_OUT_TARGET_POSITION;
        boolean b08 = a08EdgStorageCageDetails != null && a08EdgStorageCageDetails.getHeight().equals(glassInfo.getHeight())
                && a08EdgStorageCageDetails.getWidth().equals(glassInfo.getWidth());
        boolean b10 = a10EdgStorageCageDetails != null && a10EdgStorageCageDetails.getHeight().equals(glassInfo.getHeight())
                && a10EdgStorageCageDetails.getWidth().equals(glassInfo.getWidth());
        //存在出片任务 07为空
        if (a08EdgStorageCageDetails == null && a10EdgStorageCageDetails == null) {
            return queryLineNoTask(out08Glassstate, out10Glassstate);
        } else {
            if (b08) {
                return queryLineHasTask(out08Glassstate);
        }
        if (a10EdgStorageCageDetails != null && a10EdgStorageCageDetails.getHeight().equals(glassInfo.getHeight())
                && a10EdgStorageCageDetails.getWidth().equals(glassInfo.getWidth()) && out10Glassstate == 1) {
            if (b10) {
                return queryLineHasTask(out10Glassstate);
            }
            return queryLineNoTask(out08Glassstate, out10Glassstate);
        }
    }
    /**
     * 获取有任务后的出片逻辑
     */
    private Integer queryLineHasTask(int outGlassstate) {
        return outGlassstate == 2 ? Const.A10_OUT_TARGET_POSITION : Const.A09_OUT_TARGET_POSITION;
    }
    /**
     * 获取无任务后的出片逻辑
     *
     * @return
     */
    private Integer queryLineNoTask(int out08Glassstate, int out10Glassstate) {
        if (out08Glassstate == 2) {
            return Const.A10_OUT_TARGET_POSITION;
        }
        if (out08Glassstate == 1) {
        if (out10Glassstate == 2 || out08Glassstate == 1) {
            return Const.A09_OUT_TARGET_POSITION;
        }
        if (out10Glassstate == 1) {
            return Const.A10_OUT_TARGET_POSITION;
        }
        Assert.isTrue(Boolean.FALSE, "没有找到出片路径");
        return 0;
    }
    /**
     * 按照尺寸出玻璃
@@ -504,7 +530,7 @@
                log.info("5、直通任务,将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo);
                EdgStorageCageDetails details = new EdgStorageCageDetails();
                BeanUtils.copyProperties(glassInfo, details);
                EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(currentSlot);
                EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(currentSlot, Boolean.TRUE);
                Assert.isTrue(null != nearestEmpty, "格子已满,无法执行直通任务");
                log.info("3、查询卧式理片笼里面的空格:{}", nearestEmpty);
                details.setSlot(nearestEmpty.getSlot());