ZengTao
2025-09-11 924ce82faeec6d896fcdc360b279215e84b69fb9
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -27,6 +27,8 @@
import com.mes.device.PlcParameterObject;
import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
import com.mes.engineering.entity.Engineering;
import com.mes.engineering.mapper.EngineeringMapper;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.temperingglass.entity.TemperingGlassInfo;
@@ -68,6 +70,8 @@
    private TemperingGlassInfoService temperingGlassInfoService;
    @Resource
    private DamageService damageService;
    @Resource
    private EngineeringMapper engineeringMapper;
    @Resource
    private RedisUtil redisUtil;
@@ -121,7 +125,7 @@
        String d04ToMES = plcParameterObject.getPlcParameter("D04ToMES").getValue();
//        d01Id="P24111102|1|13";
//        d01Id="P25031806|15|3";
//        d04ToMES="1";
//        d01ToMES="1";
@@ -134,6 +138,34 @@
            log.info("两条线卧转立均在执行任务,结束本次扫描进卧转立任务");
            return;
        }
//        if (REQUEST_WORD.equals(d01ToMES)) {
//            List<BigStorageCageFeedTask> bigStorageCageFeedTasks = bigStorageCageFeedTaskService.list(
//                    new LambdaQueryWrapper<BigStorageCageFeedTask>()
//                            .gt(BigStorageCageFeedTask::getTargetSlot, 0)
//                            .eq(BigStorageCageFeedTask::getLine, Const.A09_OUT_TARGET_POSITION)
//                            .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_NEW)
//                            .eq(BigStorageCageFeedTask::getGlassId, d01Id)
//            );
//            if (CollectionUtils.isNotEmpty(bigStorageCageFeedTasks)) {
//                S7object.getinstance().plccontrol.writeWord(mesD01Address, 1);
//            }
//            log.info("{}线再次发送进片启动", Const.A09_OUT_TARGET_POSITION);
//            return;
//        }
//        if (REQUEST_WORD.equals(d04ToMES)) {
//            List<BigStorageCageFeedTask> bigStorageCageFeedTasks = bigStorageCageFeedTaskService.list(
//                    new LambdaQueryWrapper<BigStorageCageFeedTask>()
//                            .gt(BigStorageCageFeedTask::getTargetSlot, 0)
//                            .eq(BigStorageCageFeedTask::getLine, Const.A10_OUT_TARGET_POSITION)
//                            .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_NEW)
//                            .eq(BigStorageCageFeedTask::getGlassId, d01Id)
//            );
//            if (CollectionUtils.isNotEmpty(bigStorageCageFeedTasks)) {
//                S7object.getinstance().plccontrol.writeWord(mesD04Address, 1);
//            }
//            log.info("{}线再次发送进片启动", Const.A10_OUT_TARGET_POSITION);
//            return;
//        }
        //按照线路及玻璃id获取相邻两块玻璃 卧转立上的玻璃:  状态为0不操作(D01送片,0不操作,1允许送片),请求字为1, (02玻璃id为空或者卧转立未启动)
        if (!REQUEST_WORD.equals(mesD01Value) && REQUEST_WORD.equals(d01ToMES) && (StringUtils.isBlank(d02State) || !REQUEST_WORD.equals(d03State))) {
            List<BigStorageCageFeedTask> bigStorageCageFeedTasks = bigStorageCageFeedTaskService.list(
@@ -270,7 +302,8 @@
        //两条先均可执行进片任务,判断两条线是否进片请求是否都为空
        if (StringUtils.isBlank(d01Id) && StringUtils.isBlank(d04Id)) {
            //比较最早一片任务的版图id及版序 求出卧转立的线路
            Integer line = getStartLine();
//            Integer line = getStartLine();
            Integer line = lineList.get(0);
            //计算任务表进片格子 发送进片任务
            computeTargetByLine(line);
            Date endDate = new Date();
@@ -333,6 +366,17 @@
                    .isNull(BigStorageCageOutTask::getGlassId)
                    .orderBy(Boolean.TRUE, sequenceOrder, TemperingGlassInfo::getTemperingFeedSequence));
            log.info("查询的出片任务:{}", temperingGlassInfoList);
            List<String> glassIds = temperingGlassInfoList.stream().map(TemperingGlassInfo::getGlassId).collect(Collectors.toList());
            List<BigStorageCageDetails> bigStorageCageDetailsList = bigStorageCageDetailsService.list(
                    new LambdaQueryWrapper<BigStorageCageDetails>()
                            .in(BigStorageCageDetails::getGlassId, glassIds)
                            .in(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT)
            );
            if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) {
                List<String> detialGlassIds = bigStorageCageDetailsList.stream().map(BigStorageCageDetails::getGlassId).collect(Collectors.toList());
                temperingGlassInfoList.removeIf(info -> detialGlassIds.contains(info.getGlassId()));
                log.info("笼内不存在玻璃的钢化任务{}", bigStorageCageDetailsList);
            }
            if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) {
                log.info("有正在出片的钢化任务");
                computeOutMoreGlassInfo(temperingGlassInfoList, Boolean.TRUE, 1);
@@ -360,6 +404,16 @@
                //到齐,将玻璃小片数据存入钢化小片表,逻辑生成出片任务  结束
                for (TemperingLayoutDTO item : temperingLayoutDTOList) {
                    if (redisUtil.getCacheObject("temperingengineerId").equals(item.getEngineerId())) {
                        Engineering engineering = engineeringMapper.selectOne(
                                new LambdaQueryWrapper<Engineering>()
                                        .eq(Engineering::getEngineerId, item.getEngineerId())
                        );
                        if (engineering.getState() == 2) {
                            redisUtil.setCacheObject("temperingengineerId", "");
                            Date endDate = new Date();
                            log.info("当前工程被禁止生产,大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime());
                            return;
                        }
                        List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class)
                                .selectAll(GlassInfo.class)
                                .select("-1 as state")
@@ -406,7 +460,7 @@
                        List<BigStorageCageDetails> overSizeGlass = bigStorageCageDetailsList.stream().filter(
                                t -> Math.min(t.getWidth(), t.getHeight()) > 2500
                        ).collect(Collectors.toList());
                        if(CollectionUtils.isEmpty(overSizeGlass)){
                        if (CollectionUtils.isEmpty(overSizeGlass)) {
                            //当一格玻璃都到齐时
                            if (bigStorageCageDetailsList.size() == valueList.size()) {
                                long distinctSlotCount = bigStorageCageDetailsList.stream()
@@ -752,7 +806,7 @@
        }
        if (CollectionUtils.isEmpty(glassIds1)) {
            S7object.getinstance().plccontrol.writeWord(mesD03Address, 0);
            log.info("{}线修改玻璃状态为3", Const.A09_OUT_TARGET_POSITION);
            log.info("{}线修改玻璃{}状态为3", Const.A09_OUT_TARGET_POSITION, glassIds1);
            bigStorageCageFeedTaskService.update(
                    new LambdaUpdateWrapper<BigStorageCageFeedTask>()
                            .eq(BigStorageCageFeedTask::getLine, Const.A09_OUT_TARGET_POSITION)
@@ -764,7 +818,7 @@
        }
        if (CollectionUtils.isEmpty(glassIds2)) {
            S7object.getinstance().plccontrol.writeWord(mesD05Address, 0);
            log.info("{}线修改玻璃状态为3", Const.A10_OUT_TARGET_POSITION);
            log.info("{}线修改玻璃{}状态为3", Const.A10_OUT_TARGET_POSITION, glassIds2);
            bigStorageCageFeedTaskService.update(
                    new LambdaUpdateWrapper<BigStorageCageFeedTask>()
                            .eq(BigStorageCageFeedTask::getLine, Const.A10_OUT_TARGET_POSITION)
@@ -972,6 +1026,7 @@
        bigStorageCageFeedTask.setWidth(width);
        bigStorageCageFeedTask.setHeight(height);
        bigStorageCageFeedTask.setCreateTime(new Date());
        bigStorageCageFeedTask.setTargetSlot(0);
        //删除理片笼表拿走/破损数据数据
        damageService.deleteByGlassId(glassId);
        Damage damage = new Damage();
@@ -1266,11 +1321,21 @@
                    maxX = e.getXCoordinate();
                    slot = e.getSlot();
                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
                            e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1, new Date()));
                            e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1, new Date()));
                }
            } else {
                bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
                        e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1, new Date()));
                if (serialNumber <= outCarMaxSize && remainWidth > maxLength) {
                    remainWidth = remainWidth - maxLength - glassGap;
                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
                            e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1, new Date()));
                } else {
                    remainWidth = carWidth - maxLength - glassGap;
                    trainNumber = trainNumber + 1;
                    serialNumber = 1;
                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
                            e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1, new Date()));
                }
            }
        }
        if (isTask == 2) {
@@ -1282,11 +1347,27 @@
        }
        Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "未获取出片数据,结束出片任务");
        log.info("获取出片任务数据{}条,执行保存", bigStorageCageOutTaskList.size());
        for (BigStorageCageOutTask bigStorageCageOutTask : bigStorageCageOutTaskList
        ) {
            bigStorageCageOutTaskService.save(bigStorageCageOutTask);
        List<String> outGlassIds = bigStorageCageOutTaskList.stream()
                .map(BigStorageCageOutTask::getGlassId)
                .collect(Collectors.toList());
        //判断工程变更时修改出片位置
        List<GlassInfo> glassInfos = glassInfoService.list(
                new LambdaQueryWrapper<GlassInfo>()
                        .in(GlassInfo::getGlassId, outGlassIds)
                        .eq(GlassInfo::getProductionStatus, 3)
        );
        if (CollectionUtils.isNotEmpty(glassInfos)) {
            List<String> changeGlassIds = glassInfos.stream()
                    .map(GlassInfo::getGlassId)
                    .collect(Collectors.toList());
            bigStorageCageOutTaskList.forEach(task -> {
                if (changeGlassIds.contains(task.getGlassId())) {
                    task.setEndSlot(Const.ARTIFICIAL_OUT_TARGET_POSITION);
                }
            });
        }
//        bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
        bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
        List<String> glassIds = bigStorageCageOutTaskList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
        log.info("将出片玻璃{}玻璃状态改为已出片", glassIds);
        bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
@@ -1365,7 +1446,7 @@
                .eq(GlassInfo::getEngineerId, glassInfo.getEngineerId())
                .eq(GlassInfo::getMarkIcon, glassInfo.getMarkIcon())
                .notInSql(GlassInfo::getGlassId, "select distinct glass_id from big_storage_cage_details " +
                        "where state!=101 and engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight())
                        "where engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight())
                .orderByAsc(GlassInfo::getTemperingLayoutId)
                .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence)
                .last("Limit 1");