From 9152c5394d4fd9d14d1a5fb9de9d441450b2bac6 Mon Sep 17 00:00:00 2001 From: zhoushihao <zsh19950802@163.com> Date: 星期三, 20 十一月 2024 08:41:13 +0800 Subject: [PATCH] 1、卧理进出片订阅功能直接按订阅结果判断,订阅后查询数据库,可能造成数据重复读,任务重复执行问题 2、大理片笼新增任务表、任务历史表脚本 3、大理片笼进片任务功能开发已完成50% --- hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java | 103 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 99 insertions(+), 4 deletions(-) diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java index 4bab88f..e57b73d 100644 --- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java +++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java @@ -1,14 +1,27 @@ package com.mes.job; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.runner.subscription.SubscriptionCallback; import com.kangaroohy.milo.service.MiloService; +import com.mes.common.config.Const; +import com.mes.edgglasstaskqueueinfo.entity.EdgGlassTaskQueueInfo; +import com.mes.edgglasstaskqueueinfo.service.EdgGlassTaskQueueInfoService; +import com.mes.glassinfo.entity.GlassInfo; +import com.mes.glassinfo.service.GlassInfoService; +import com.mes.opctask.entity.EdgStorageDeviceTask; +import com.mes.opctask.service.EdgStorageDeviceTaskService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; /** * @Author : zhoush @@ -19,16 +32,98 @@ @Slf4j public class OpcCacheGlassTask { + private static final String EDG_STORAGE_DEVICE_ONE_TASK = "edg_storage_device_one_task"; + + private static final String EDG_STORAGE_DEVICE_TWO_TASK = "edg_storage_device_two_task"; + @Autowired(required = false) MiloService miloService; + @Resource(name = "cacheGlassStartCallback") SubscriptionCallback cacheGlassStartCallback; + @Resource(name = "cacheGlassTestCallback") + SubscriptionCallback cacheGlassTestCallback; + + @Resource + EdgStorageDeviceTaskService edgStorageDeviceTaskService; + @Resource + EdgGlassTaskQueueInfoService edgGlassTaskQueueInfoService; + + @Resource + GlassInfoService glassInfoService; + + private String glassIdOne = ""; + private String glassIdTwo = ""; + @Scheduled(fixedDelay = Long.MAX_VALUE) - public void startOpcTask() throws Exception { -// miloService.subscriptionFromOpcUa(Arrays.asList("C101-WL.S7-1200.plc_task_state", "D101-WL.S7-1200.plc_task_state"), cacheGlassStartCallback); - miloService.subscriptionFromOpcUa(Arrays.asList("mes.dec.edg_storage_device_one_task[1].task_state", "D101-WL.S7-1200.plc_task_state"), cacheGlassStartCallback); - log.info("--------------------s---------------------------"); + public void startOneOpcTask() throws Exception { + miloService.subscriptionFromOpcUa(Arrays.asList("mes.WL1.edg_storage_device_one_task[1].task_state"), cacheGlassStartCallback); + } + + @Scheduled(fixedDelay = Long.MAX_VALUE) + public void startTwoOpcTask() throws Exception { + miloService.subscriptionFromOpcUa(Arrays.asList("mes.WL2.edg_storage_device_two_task[1].task_state"), cacheGlassStartCallback); + } + + @Scheduled(fixedDelay = 1000) + public void edgOneOpcTask() throws Exception { + EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_ONE_TASK); + String glassId = task.getGlassId(); + if (StringUtils.isBlank(glassId) || glassId.equals(glassIdOne)) { + log.info("{}鍙风嚎纾ㄨ竟鍓嶇幓鐠冩湭灏变綅锛岀粨鏉熸湰娆′换鍔�", 1); + return; + } + edgTaskChild(glassId, 1); + } + + @Scheduled(fixedDelay = 1000) + public void edgTwoOpcTask() throws Exception { + EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_TWO_TASK); + String glassId = task.getGlassId(); + if (StringUtils.isBlank(glassId) || glassId.equals(glassIdTwo)) { + log.info("{}鍙风嚎纾ㄨ竟鍓嶇幓鐠冩湭灏变綅锛岀粨鏉熸湰娆′换鍔�", 2); + return; + } + edgTaskChild(glassId, 2); + } + + private void edgTaskChild(String glassId, int cell) throws Exception { + GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId).last("limit 1")); + if (glassInfo == null) { + log.info("瀵瑰垪琛ㄤ腑鐨勭幓鐠僫d閿欒锛岃妫�鏌ユ暟鎹紝鐜荤拑id锛歿}", glassId); + return; + } + String toEndingId = glassInfo.getTemperingLayoutId() + "" + glassInfo.getTemperingFeedSequence(); + List<ReadWriteEntity> list = new ArrayList<>(); + list.add(generateReadWriteEntity("PLC.MB" + cell + ".mesControl", true)); + list.add(generateReadWriteEntity("PLC.MB" + cell + ".glassId", Integer.parseInt(toEndingId))); + list.add(generateReadWriteEntity("PLC.MB" + cell + ".toEdingId", Integer.parseInt(toEndingId))); + list.add(generateReadWriteEntity("PLC.MB" + cell + ".width", (int) Math.max(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10))); + list.add(generateReadWriteEntity("PLC.MB" + cell + ".height", (int) Math.min(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10))); + + miloService.writeToOpcUa(list); + miloService.writeToOpcWord(generateReadWriteEntity("PLC.MB" + cell + ".thickness", (int) glassInfo.getThickness() * 10)); + //淇敼纾ㄨ竟瀵瑰垪涓殑纾ㄨ竟绾胯矾鍙婄姸鎬� + edgGlassTaskQueueInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskQueueInfo>() + .set(EdgGlassTaskQueueInfo::getLine, cell) + .set(EdgGlassTaskQueueInfo::getState, 1) + .eq(EdgGlassTaskQueueInfo::getGlassId, glassId) + .eq(EdgGlassTaskQueueInfo::getState, Const.GLASS_STATE_NEW)); + if (cell == 1) { + glassIdOne = glassId; + } else { + glassIdTwo = glassId; + } + + } + + private ReadWriteEntity generateReadWriteEntity(String identifier, Object value) { + return ReadWriteEntity.builder() + .identifier(identifier) + //Kep涓槸Long绫诲瀷锛屽嵆锛欼nt32锛孞ava涓殑int绫诲瀷 + .value(value) + .build(); } } -- Gitblit v1.8.0