wuyouming666
2024-07-05 4dff7869e7373f96ca415f7e1d172dadc1ec32f3
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
@@ -20,6 +20,7 @@
import com.mes.downworkstation.service.DownWorkstationService;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.tools.S7control;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
@@ -71,21 +72,31 @@
    @Value("${mes.maxHeight}")
    private Integer maxHeight;
    @Value("${mes.minWidth}")
    private Integer minWidth;
    @Scheduled(fixedDelay = 1000)
    @Value("${mes.minHeight}")
    private Integer minHeight;
    @Scheduled(fixedDelay = 3000)
    public void plcHomeEdgTask() {
        PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
        String requestWord = plcParameterObject.getPlcParameter("RequestWord").getValue();
        String glassIdeValue = plcParameterObject.getPlcParameter("G04ID").getValue();
        String confirmationWrodValue = plcParameterObject.getPlcParameter("MES_confirmation_word").getValue();
       PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
        String requestWord = plcParameterObject.getPlcParameter("requestWord").getValue();
        String glassIdeValue = plcParameterObject.getPlcParameter("requestID").getValue();
        //A08  A09表示线路相同  可做等价  无数据转int异常
        String out08Glassstate = plcParameterObject.getPlcParameter("A08_glass_status").getValue();
        String out10Glassstate = plcParameterObject.getPlcParameter("A10_glass_status").getValue();
        String confirmationWrodAddress = plcParameterObject.getPlcParameter("MES_confirmation_word").getAddress();
        String currentSlot = plcParameterObject.getPlcParameter("Current_slot").getValue();
        String out06Glassstate = plcParameterObject.getPlcParameter("glassStatus06").getValue();
        String out08Glassstate = plcParameterObject.getPlcParameter("glassStatus08").getValue();
        String out11Glassstate = plcParameterObject.getPlcParameter("glassStatus11").getValue();
        String out13Glassstate = plcParameterObject.getPlcParameter("glassStatus13").getValue();
        String confirmationWrodValue = plcParameterObject.getPlcParameter("confirmationWord").getValue();
        String confirmationWrodAddress = plcParameterObject.getPlcParameter("confirmationWord").getAddress();
        String currentSlot = plcParameterObject.getPlcParameter("currentCell").getValue();
        log.info("1、获取到的请求字为:{},获取到的扫描ID为:{},获取到的确认字为:{},获取到的出片状态分别为:A09:{}、A10:{},当前格子号为:{}",
                requestWord, glassIdeValue, confirmationWrodValue, out08Glassstate, out10Glassstate, currentSlot);
        log.info("1、获取到的请求字为:{},获取到的扫描ID为:{},获取到的确认字为:{},获取到的出片状态分别为:g06:{}、g08:{}、g11:{}、g13:{},当前格子号为:{}",
                requestWord, glassIdeValue, confirmationWrodValue, out06Glassstate, out08Glassstate, out11Glassstate, out13Glassstate, currentSlot);
        if ("0".equals(requestWord)) {
            if ("0".equals(confirmationWrodValue)) {
@@ -93,7 +104,7 @@
                return;
            }
            log.info("2、获取到的请求字为0,将确认字改为0");
            S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, (short) 0);
            S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 0);
            return;
        }
        if (!"0".equals(confirmationWrodValue)) {
@@ -102,26 +113,23 @@
        }
        if ("1".equals(requestWord)) {
            log.info("2、进片请求,且确认字为0,执行进片任务");
            inTo(glassIdeValue, requestWord, confirmationWrodAddress, currentSlot);
            inTo(glassIdeValue, requestWord, currentSlot);
        } else if ("2".equals(requestWord)) {
            //09空闲 :1      10空闲 :2        都空闲:3    其他0
            log.info("2、出片请求,且确认字为0,执行进片任务");
//            outTo(Integer.parseInt(out08Glassstate),
//                    Integer.parseInt(out10Glassstate), confirmationWrodAddress, "", 0);
            log.info("2、出片请求,且确认字为0,执行出片任务");
            outTo(out06Glassstate, out08Glassstate, out11Glassstate, out13Glassstate, glassIdeValue, currentSlot);
        } else if ("3".equals(requestWord)) {
            log.info("2、进片和出片都空闲,执行出片任务");
            //加笼子里面是否有玻璃,有先出,无玻璃先进
            boolean outFlase = false;
//                    outTo(Integer.parseInt(out08Glassstate),
//                    Integer.parseInt(out10Glassstate), confirmationWrodAddress, glassIdeValue, Integer.parseInt(currentSlot));
            boolean outFlase = outTo(out06Glassstate, out08Glassstate, out11Glassstate, out13Glassstate, glassIdeValue, currentSlot);
            log.info("出片任务是否完成:{},失败且玻璃id:{}不为空则执行进片任务", outFlase, glassIdeValue);
            if (!outFlase && StringUtils.isNotBlank(glassIdeValue)) {
                inTo(glassIdeValue, requestWord, confirmationWrodAddress, currentSlot);
                inTo(glassIdeValue, requestWord, currentSlot);
            }
        }
    }
    private void inTo(String glassId, String requestWord, String confirmationWrodAddress, String currentSlot) {
    public void inTo(String glassId, String requestWord, String currentSlot) {
        log.info("1、按照玻璃id:{}获取玻璃小片信息,当前格子为:{}", glassId, currentSlot);
        //添加进片任务  查找空格
        DownStorageCage nearestEmpty = downStorageCageService.selectCacheEmpty(Integer.parseInt(currentSlot), Boolean.FALSE);
@@ -135,9 +143,10 @@
        }
        Boolean checkFlag = Boolean.FALSE;
        //玻璃尺寸是否走人工下片
        if (glassInfo.getWidth() > maxWidth || glassInfo.getHeight() > maxHeight) {
            log.info("该玻璃尺寸走人工下片,直接进片");
        } else {
        if (glassInfo.getWidth() > maxWidth || glassInfo.getHeight() > maxHeight || glassInfo.getWidth() < minWidth || glassInfo.getHeight() < minHeight) {
            log.info("该玻璃尺寸不符合要求,需要走人工下片直接进片");
        }
        else {
            log.info("该玻璃尺寸非人工下片");
            //获取该玻璃的流程卡是否已绑定架子
            DownWorkstation one = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>()
@@ -147,7 +156,7 @@
            if (null != one) {
                log.info("该流程卡已绑定架子");
                isBind = Boolean.TRUE;
                checkFlag = multilayerCheck(glassInfo);
                checkFlag = multilayerCheck(glassInfo, isBind);
            }
            if (!checkFlag && !isBind) {
                log.info("该玻璃的流程卡未绑定架子,获取是否有空架子");
@@ -156,7 +165,9 @@
                if (CollectionUtils.isNotEmpty(list)) {
                    log.info("有空架子,将流程卡与架子好绑定,执行进片任务 结束");
                    //绑定流程卡
                    downWorkstationService.update(new LambdaUpdateWrapper<DownWorkstation>().set(DownWorkstation::getFlowCardId, glassInfo.getFlowCardId())
                    downWorkstationService.update(new LambdaUpdateWrapper<DownWorkstation>()
                            .set(DownWorkstation::getFlowCardId, glassInfo.getFlowCardId())
                            .set(DownWorkstation::getLayer, glassInfo.getLayer())
                            .eq(DownWorkstation::getWorkstationId, list.get(0).getWorkstationId()));
                    checkFlag = Boolean.TRUE;
                }
@@ -165,31 +176,34 @@
                log.info("无空架子,获取已绑定架子的流程卡信息,查看玻璃信息是否可被对调");
                List<DownGlassInfoDTO> downGlassInfoDTOList = downGlassInfoService.queryWorkStationIsIn(Boolean.FALSE);
                log.info("获取架子上已绑定流程卡落架的数量及未落架的玻璃数据:{}", downGlassInfoDTOList);
                Assert.isTrue(CollectionUtils.isNotEmpty(downGlassInfoDTOList), "已绑定流程卡均无未落架玻璃,请及时处理架子上的玻璃,清除流程卡");
                //替换玻璃信息
                endLoop:
                for (DownGlassInfoDTO e : downGlassInfoDTOList) {
                    List<GlassInfo> glassInfoList = e.getGlassInfoList();
                    for (GlassInfo item : glassInfoList) {
                        if (item.getWidth().equals(glassInfo.getWidth()) && item.getHeight().equals(glassInfo.getHeight())
                                && item.getThickness().equals(glassInfo.getThickness()) && item.getFilmsid().equals(glassInfo.getFilmsid())) {
                            //玻璃是否为多层
                            checkFlag = multilayerCheck(item);
                            if (checkFlag) {
                                //玻璃替换 仅替换流程卡id及层数
                                String tempFlowCardId = item.getFlowCardId();
                                Integer tempLayer = item.getLayer();
                                String flowCardId = glassInfo.getFlowCardId();
                                Integer layer = glassInfo.getLayer();
                                log.info("替换流程卡信息,当前玻璃信息:{}的流程卡号{}及层数{},替换后玻璃信息:{}的流程卡号{}及层数{}",
                                        item, glassInfo, flowCardId, layer, tempFlowCardId, tempLayer);
                                glassInfo.setFlowCardId(tempFlowCardId);
                                glassInfo.setLayer(tempLayer);
                                glassInfoService.updateById(glassInfo);
                                item.setFlowCardId(flowCardId);
                                item.setLayer(layer);
                                glassInfoService.updateById(item);
                                break endLoop;
                if (CollectionUtils.isEmpty(downGlassInfoDTOList)) {
                    log.info("已绑定流程卡均无未落架玻璃,请及时处理架子上的玻璃,清除流程卡,执行进片任务");
                } else {
                    //替换玻璃信息
                    endLoop:
                    for (DownGlassInfoDTO e : downGlassInfoDTOList) {
                        List<GlassInfo> glassInfoList = e.getGlassInfoList();
                        for (GlassInfo item : glassInfoList) {
                            if (item.getWidth() == glassInfo.getWidth() && item.getHeight() == glassInfo.getHeight()
                                    && item.getThickness() == glassInfo.getThickness() && item.getFilmsid().equals(glassInfo.getFilmsid())) {
                                //玻璃是否为多层
                                checkFlag = multilayerCheck(item, Boolean.FALSE);
                                if (checkFlag) {
                                    //玻璃替换 仅替换流程卡id及层数
                                    String tempFlowCardId = item.getFlowCardId();
                                    Integer tempLayer = item.getLayer();
                                    String flowCardId = glassInfo.getFlowCardId();
                                    Integer layer = glassInfo.getLayer();
                                    log.info("替换流程卡信息,当前玻璃信息:{}的流程卡号{}及层数{},替换后玻璃信息:{}的流程卡号{}及层数{}",
                                            item, glassInfo, flowCardId, layer, tempFlowCardId, tempLayer);
                                    glassInfo.setFlowCardId(tempFlowCardId);
                                    glassInfo.setLayer(tempLayer);
                                    glassInfoService.updateById(glassInfo);
                                    item.setFlowCardId(flowCardId);
                                    item.setLayer(layer);
                                    glassInfoService.updateById(item);
                                    break endLoop;
                                }
                            }
                        }
                    }
@@ -200,33 +214,92 @@
        DownStorageCageDetails downStorageCageDetails = new DownStorageCageDetails();
        BeanUtils.copyProperties(glassInfo, downStorageCageDetails);
        downStorageCageDetails.setState(Const.GLASS_STATE_IN);
        downStorageCageDetails.setSlot(nearestEmpty.getSlot());
        downStorageCageDetailsService.save(downStorageCageDetails);
//        生成进片任务
        initDownGlassTask(glassInfo, nearestEmpty.getSlot(), null, Const.GLASS_CACHE_TYPE_IN);
        //log.info("5、生成进片任务信息存入任务表是否完成:{}", taskCache);
//        S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, (short) 1);
//        log.info("6、发送确认字完成");
        initDownGlassTask(glassInfo, 0, nearestEmpty.getSlot(), Const.GLASS_CACHE_TYPE_IN);
    }
    private Boolean outTo(String glassStatus06, String glassStatus11, String glassStatus13, String glassId) {
    public Boolean outTo(String glassStatus06, String out08Glassstate, String glassStatus11, String glassStatus13, String glassId, String currentSlot) {
        if ("2".equals(glassStatus06) && "2".equals(glassStatus11) && "2".equals(glassStatus13)) {
            log.info("G06、G11、G13分别为{},{}、{}非自动状态,无法出片", glassStatus06, glassStatus11, glassStatus13);
            return Boolean.FALSE;
        }
        List<DownStorageCageDetails> tempList = downStorageCageDetailsService.list(new LambdaQueryWrapper<DownStorageCageDetails>()
                .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN));
        //获取待进片玻璃
        DownStorageCageDetails cageDetails = new DownStorageCageDetails();
        if (StringUtils.isNotBlank(glassId)) {
            GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
            BeanUtils.copyProperties(glassInfo, cageDetails);
            //获取当前笼子空格信息
            DownStorageCage empty = downStorageCageService.selectCacheEmpty(Integer.parseInt(currentSlot), Boolean.TRUE);
            cageDetails.setSlot(empty.getSlot());
            tempList.add(cageDetails);
        }
        log.info("笼内玻璃的数据有:{}", tempList);
        if (CollectionUtils.isEmpty(tempList)) {
            log.info("笼内没有玻璃,无法执行出片");
            return Boolean.FALSE;
        }
        Boolean flag08 = "1".equals(out08Glassstate) ? Boolean.TRUE : Boolean.FALSE;
        if (!generateTaskByShelf(glassStatus11, flag08, glassStatus13, tempList, cageDetails)) {
            return generateTaskByShelf(glassStatus11, !flag08, glassStatus13, tempList, cageDetails);
        }
        return Boolean.TRUE;
    }
    private Boolean multilayerCheck(GlassInfo glassInfo, boolean isBind) {
        //查询该流程卡是否为多层
        if (glassInfo.getTotalLayer() > 1) {
            log.info("按照流程卡获取当前流程卡各层已落架数量");
            DownGlassInfoDTO downGlassInfoDTO = downGlassInfoService.queryDownGlassMaxLayer(glassInfo.getFlowCardId());
            if (null == downGlassInfoDTO) {
                if (isBind) {
                    return Boolean.TRUE;
                } else {
                    log.info("架子已经占满,多层玻璃无法找到对应的格子,需执行替换玻璃的操作");
                    return Boolean.FALSE;
                }
            }
            if (downGlassInfoDTO.getLayer().equals(glassInfo.getLayer())) {
                log.info("当前玻璃的流程在架子上落架最多 直接进片");
                return Boolean.TRUE;
            }
            Integer sequence = downGlassInfoService.queryMaxSequence(glassInfo.getFlowCardId(), glassInfo.getLayer());
            log.info("获取当前玻璃需要放的次序:笼内同流程 同层数的通达次序+1:{}", sequence);
            DownGlassInfo downGlassInfo = downGlassInfoService.getOne(new LambdaQueryWrapper<DownGlassInfo>()
                    .eq(DownGlassInfo::getFlowCardId, downGlassInfoDTO.getFlowCardId())
                    .eq(DownGlassInfo::getLayer, downGlassInfoDTO.getLayer()).eq(DownGlassInfo::getSequence, sequence));
            log.info("拿当前版序获取玻璃信息{},按照次序判断当前玻璃是否尺寸对应的上(与数量最多的次序比较)。", downGlassInfo);
            if (null != downGlassInfoDTO && downGlassInfo.getWidth() == glassInfo.getWidth() && downGlassInfo.getHeight() == glassInfo.getHeight()) {
                log.info("相同次序玻璃对应上,可执行进片任务");
                return Boolean.TRUE;
            } else {
                log.info("同次序玻璃对应不上,需执行替换玻璃的操作");
                return Boolean.FALSE;
            }
        } else {
            log.info("非多层玻璃,直接进片");
            return Boolean.TRUE;
        }
    }
    private Boolean generateTaskByShelf(String glassStatus, Boolean flag08, String glassStatus13, List<DownStorageCageDetails> tempList, DownStorageCageDetails cageDetails) {
        //获取2个机械臂范围内的架子绑定的流程卡信息
        List<Integer> workList = new ArrayList();
        if (!"2".equals(glassStatus06)) {
            workList.addAll(Const.G06_WORK_STATION);
        }
        if (!"2".equals(glassStatus11)) {
            workList.addAll(Const.G11_WORK_STATION);
        if (flag08) {
            if (!"2".equals(glassStatus)) {
                workList.addAll(Const.G11_WORK_STATION);
            }
        } else {
            if (!"2".equals(glassStatus)) {
                workList.addAll(Const.G06_WORK_STATION);
            }
        }
        List<DownStorageCageDetails> list = new ArrayList();
        Boolean isEmptyShelf = Boolean.FALSE;
@@ -257,23 +330,25 @@
                }
            }
        } else {
            //直接走人工下片
            list = tempList.stream().filter(item -> item.getWidth() > maxWidth || item.getHeight() > maxHeight).collect(Collectors.toList());
            if (flag08 && !"2".equals(glassStatus13)) {
                //直接走人工下片
                list = tempList.stream().filter(item -> item.getWidth() > maxWidth || item.getHeight() > maxHeight).collect(Collectors.toList());
            }
        }
        if (CollectionUtils.isEmpty(list)) {
            log.info("笼内玻璃无法执行出片");
            return Boolean.FALSE;
        }
        //定义笼内无法出片玻璃数量
        int glassCount = tempList.size() - list.size();
        String tempGlassId = null;
        Boolean isBind = Boolean.FALSE;
        for (DownStorageCageDetails item : list) {
            if (item.getWidth() > maxWidth || item.getHeight() > maxHeight) {
                log.info("玻璃宽度或高度超出阈值,执行人工下片");
                tempGlassId = item.getGlassId();
                break;
                if (flag08 && !"2".equals(glassStatus13)) {
                    log.info("玻璃宽度或高度超出阈值,执行人工下片");
                    tempGlassId = item.getGlassId();
                    break;
                }
            }
        }
        loop:
@@ -282,7 +357,7 @@
            List<DownGlassInfoDTO> downGlassInfoDTOList = downGlassInfoService.queryWorkStationIsIn(Boolean.TRUE);
            List<String> downGlassFlowList = downGlassInfoDTOList.stream().map(item -> item.getFlowCardId() + ":" + item.getLayer()).collect(Collectors.toList());
            if (CollectionUtils.isEmpty(downGlassFlowList)) {
                //架子玻璃都为空,出笼内子数量最多尺寸最大的玻璃
                //架子都未绑定流程卡,出笼内子数量最多尺寸最大的玻璃
                DownStorageCageDetails downStorageCageDetails = downStorageCageDetailsService.getGlassInfoMaxCount();
                //绑定流程卡,更新玻璃状态,生成出片任务,
                tempGlassId = downStorageCageDetails.getGlassId();
@@ -302,13 +377,6 @@
                    isBind = Boolean.TRUE;
                    break loop;
                }
                glassCount = noDownLoadList.size();
                if (glassCount > threshold) {
                    //更新玻璃状态,生成出片人工下片任务
                    tempGlassId = noDownLoadList.get(0).getGlassId();
                    isBind = Boolean.FALSE;
                    break loop;
                }
            }
            //将笼子内的玻璃进行过滤,仅获取可落架的流程卡玻璃
            List<DownStorageCageDetails> downLoadList = list.stream().filter(item -> downGlassFlowList.contains(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
@@ -323,14 +391,16 @@
                for (DownStorageCageDetails item : multiLayerList) {
                    DownGlassInfoDTO downGlassInfoDTO = downGlassInfoService.queryDownGlassMaxLayer(item.getFlowCardId());
                    if (null == downGlassInfoDTO) {
//                    落架玻璃查到相关流程卡玻璃信息,表明当前流程卡玻璃未落架
//                    历史落架玻璃按照相关流程卡取数据库未找到最多玻璃信息,表明当前流程卡下的有层的玻璃均未落架,直接可出当前玻璃
                        log.info("");
                        return Boolean.FALSE;
                        isBind = Boolean.FALSE;
                        tempGlassId = item.getGlassId();
                        break loop;
                    }
                    if (downGlassInfoDTO.getLayer().equals(downGlassInfoDTO.getLayer())) {
                        log.info("当前玻璃的流程在架子上落架最多,直接出片");
                        //更新玻璃状态,生成出片任务
                        tempGlassId = noDownLoadList.get(0).getGlassId();
                        tempGlassId = item.getGlassId();
                        isBind = Boolean.FALSE;
                        break loop;
                    }
@@ -339,21 +409,12 @@
                    DownGlassInfo downGlassInfo = downGlassInfoService.getOne(new LambdaQueryWrapper<DownGlassInfo>()
                            .eq(DownGlassInfo::getFlowCardId, downGlassInfoDTO.getFlowCardId())
                            .eq(DownGlassInfo::getLayer, downGlassInfoDTO.getLayer()).eq(DownGlassInfo::getSequence, sequence));
                    if (null != downGlassInfoDTO && downGlassInfo.getWidth().equals(item.getWidth()) && downGlassInfo.getHeight().equals(item.getHeight())) {
                    if (null != downGlassInfoDTO && downGlassInfo.getWidth() == item.getWidth() && downGlassInfo.getHeight() == item.getHeight()) {
                        log.info("相同次序玻璃对应上,可执行进片任务");
                        //更新玻璃状态,生成出片任务
                        tempGlassId = noDownLoadList.get(0).getGlassId();
                        tempGlassId = item.getGlassId();
                        isBind = Boolean.FALSE;
                        break loop;
                    } else {
                        log.info("同次序玻璃对应不上,需执行替换玻璃的操作");
                        glassCount += 1;
                        if (glassCount > threshold) {
                            tempGlassId = noDownLoadList.get(0).getGlassId();
                            isBind = Boolean.FALSE;
                            break loop;
                        }
                        continue;
                    }
                }
            }
@@ -379,46 +440,21 @@
            return Boolean.FALSE;
        } else {
            //按照出片的玻璃id更新笼内的玻璃状态为已出片
            return generateDownGlassOutTask(tempGlassId, Const.GLASS_CACHE_TYPE_OUT, isBind);
            return generateDownGlassOutTask(tempGlassId, Const.GLASS_CACHE_TYPE_OUT, isBind, cageDetails);
        }
    }
    private Boolean multilayerCheck(GlassInfo glassInfo) {
        //查询该流程卡是否为多层
        if (glassInfo.getTotalLayer() > 1) {
            log.info("按照流程卡获取当前流程卡各层已落架数量");
            DownGlassInfoDTO downGlassInfoDTO = downGlassInfoService.queryDownGlassMaxLayer(glassInfo.getFlowCardId());
            if (null == downGlassInfoDTO) {
                log.info("架子已经占满,多层玻璃无法找到对应的格子,需执行替换玻璃的操作");
                return Boolean.FALSE;
            }
            if (downGlassInfoDTO.getLayer().equals(glassInfo.getLayer())) {
                log.info("当前玻璃的流程在架子上落架最多 直接进片");
                return Boolean.TRUE;
            }
            Integer sequence = downGlassInfoService.queryMaxSequence(glassInfo.getFlowCardId(), glassInfo.getLayer());
            log.info("获取当前玻璃需要放的次序:笼内同流程 同层数的通达次序+1:{}", sequence);
            DownGlassInfo downGlassInfo = downGlassInfoService.getOne(new LambdaQueryWrapper<DownGlassInfo>()
                    .eq(DownGlassInfo::getFlowCardId, downGlassInfoDTO.getFlowCardId())
                    .eq(DownGlassInfo::getLayer, downGlassInfoDTO.getLayer()).eq(DownGlassInfo::getSequence, sequence));
            log.info("拿当前版序获取玻璃信息{},按照次序判断当前玻璃是否尺寸对应的上(与数量最多的次序比较)。", downGlassInfo);
            if (null != downGlassInfoDTO && downGlassInfo.getWidth().equals(glassInfo.getWidth()) && downGlassInfo.getHeight().equals(glassInfo.getHeight())) {
                log.info("相同次序玻璃对应上,可执行进片任务");
                return Boolean.TRUE;
            } else {
                log.info("同次序玻璃对应不上,需执行替换玻璃的操作");
                return Boolean.FALSE;
            }
        } else {
            log.info("非多层玻璃,直接进片");
            return Boolean.TRUE;
        }
    }
    private Boolean generateDownGlassOutTask(String glassId, Integer taskType, Boolean isBind) {
    public Boolean generateDownGlassOutTask(String glassId, Integer taskType, Boolean isBind, DownStorageCageDetails cageDetails) {
        //按玻璃id获取玻璃信息
        DownStorageCageDetails downStorageCageDetails = downStorageCageDetailsService.getOne(new LambdaQueryWrapper<DownStorageCageDetails>()
                .eq(DownStorageCageDetails::getGlassId, glassId));
        DownStorageCageDetails downStorageCageDetails = null;
        if (glassId.equals(cageDetails.getGlassId())) {
            downStorageCageDetails = cageDetails;
            taskType = 3;
        } else {
            downStorageCageDetails = downStorageCageDetailsService.getOne(new LambdaQueryWrapper<DownStorageCageDetails>()
                    .eq(DownStorageCageDetails::getGlassId, glassId));
        }
        Integer endCell = null;
        if (isBind) {
            //获取空架子信息,将空架子信息绑定流程卡
@@ -447,21 +483,47 @@
            log.info("更新详情表内的状态失败");
            return Boolean.FALSE;
        }
        //更新落架玻璃数量
        //生成任务信息
        DownGlassInfo downGlassInfo = new DownGlassInfo();
        BeanUtils.copyProperties(downStorageCageDetails, downGlassInfo);
        downGlassInfoService.save(downGlassInfo);
        //生成任务信息
        GlassInfo glassInfo = new GlassInfo();
        BeanUtils.copyProperties(downStorageCageDetails, glassInfo);
        return initDownGlassTask(glassInfo, downStorageCageDetails.getSlot(), endCell, taskType);
    }
    private Boolean initDownGlassTask(GlassInfo glassInfo, Integer startCell, Integer endCell, Integer taskType) {
    public Boolean initDownGlassTask(GlassInfo glassInfo, Integer startCell, Integer endCell, Integer taskType) {
        log.info("玻璃{}生成进片任务", glassInfo.getGlassId());
        DownGlassTask downGlassTask = new DownGlassTask();
        BeanUtils.copyProperties(glassInfo, downGlassTask);
        downGlassTask.setStartCell(startCell);
        downGlassTask.setGlassId(glassInfo.getGlassId());
        downGlassTask.setEndCell(endCell);
        downGlassTask.setTaskType(taskType + "");
        downGlassTask.setTaskType(taskType);
        downGlassTask.setWidth((int) glassInfo.getWidth());
        downGlassTask.setHeight((int) glassInfo.getHeight());
        downGlassTask.setFlowCardId(glassInfo.getFlowCardId());
        downGlassTask.setLayer(glassInfo.getLayer());
        downGlassTask.setTaskStauts(0);
        downGlassTask.setCreateTime(new Date());
        return downGlassTaskService.save(downGlassTask);
        downGlassTaskService.save(downGlassTask);
        //向plc发送命令
        return sendMessageToPlc((int) glassInfo.getWidth(), (int) glassInfo.getHeight(), (int) glassInfo.getThickness(),
                startCell, endCell, taskType);
    }
    private Boolean sendMessageToPlc(int width, int height, int thickness, int startCell, int endCell, int taskType) {
        S7control s7control = S7object.getinstance().plccontrol;
        PlcParameterObject plcMesObject = S7object.getinstance().PlcMesObject;
        s7control.writeWord(plcMesObject.getPlcParameter("Glass_width").getAddress(), width);
        s7control.writeWord(plcMesObject.getPlcParameter("Glass_height").getAddress(), height);
        s7control.writeWord(plcMesObject.getPlcParameter("Glass_thickness").getAddress(), thickness);
        s7control.writeWord(plcMesObject.getPlcParameter("Start_cell").getAddress(), startCell);
        s7control.writeWord(plcMesObject.getPlcParameter("End_cell").getAddress(), endCell);
        s7control.writeWord(plcMesObject.getPlcParameter("task_type").getAddress(), taskType);
        s7control.writeWord(plcMesObject.getPlcParameter("confirmationWord").getAddress(), 1);
        return Boolean.TRUE;
    }
}