hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java
@@ -1,12 +1,15 @@
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;
@@ -17,6 +20,7 @@
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
@@ -46,80 +50,80 @@
    EdgStorageDeviceTaskService edgStorageDeviceTaskService;
    @Resource
    EdgGlassTaskQueueInfoService edgGlassTaskQueueInfoService;
    private int sum = 0;
    @Scheduled(fixedDelay = 10)
    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"), cacheGlassTestCallback);
//        log.info("--------------------s---------------------------");
        EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage("edg_storage_device_one_task");
        try {
            if (task == null) {
                log.info("任务表基础数据录入失败,请检查数据是否录入成功");
                return;
            }
            if (task.getTaskState() == sum) {
                return;
            }
            sum = task.getTaskState();
            task.setTaskRunning(sum);
            log.info("当前第{}次执行", task.getTaskRunning());
//            task.setTaskState(task.getTaskRunning());
            edgStorageDeviceTaskService.updateTaskMessage("edg_storage_device_one_task", task);
        } catch (Exception e) {
            log.info("{}", e.getMessage());
        }
    @Resource
    GlassInfoService glassInfoService;
    private String glassIdOne = "";
    private String glassIdTwo = "";
    @Scheduled(fixedDelay = Long.MAX_VALUE)
    public void startOneOpcTask() throws Exception {
        miloService.subscriptionFromOpcUa(Arrays.asList("mes.WL1.edg_storage_device_one_task[1].task_state"), cacheGlassStartCallback);
    }
//    mesControlWord glassId
//    width height
//    thickness             filmRemove
//    deviceControlWord             deviceWarnState
    @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 edgOpcTask() throws Exception {
        ReadWriteEntity controlEntity = miloService.readFromOpcUa("A001-MB1.dev.deviceControlWord");
        String deviceControlWord = (String) controlEntity.getValue();
        if ("0".equals(deviceControlWord)) {
            ReadWriteEntity messageEntity = miloService.readFromOpcUa("A001-MB1.dev.mesControlWord");
            String messageValue = (String) messageEntity.getValue();
            if ("1".equals(messageValue)) {
                List<ReadWriteEntity> list = new ArrayList<>();
                list.add(generateReadWriteEntity("A001-MB1.dev.mesControlWord", 0));
                miloService.writeToOpcWord(list);
            }
            log.info("当前未收到磨边机的请求任务");
            return;
        }
    @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)) {
            log.info("磨边前的架子没有玻璃信息");
        if (StringUtils.isBlank(glassId) || glassId.equals(glassIdOne)) {
            log.info("{}号线磨边前玻璃未就位,结束本次任务", 1);
            return;
        }
        //获取磨边对列
        EdgGlassTaskQueueInfo edgInfo = edgGlassTaskQueueInfoService.getOne(new LambdaQueryWrapper<EdgGlassTaskQueueInfo>()
                .eq(EdgGlassTaskQueueInfo::getGlassId, glassId)
                .eq(EdgGlassTaskQueueInfo::getState, Const.GLASS_STATE_NEW));
        if (edgInfo == null) {
        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("对列表中的玻璃id错误,请检查数据,玻璃id:{}", glassId);
            return;
        }
        String toEndingId = glassInfo.getTemperingLayoutId() + "" + glassInfo.getTemperingFeedSequence();
        List<ReadWriteEntity> list = new ArrayList<>();
        list.add(generateReadWriteEntity("A001-MB1.dev.mesControlWord", 1));
        list.add(generateReadWriteEntity("A001-MB1.dev.glassId", glassId));
        list.add(generateReadWriteEntity("A001-MB1.dev.width", edgInfo.getWidth()));
        list.add(generateReadWriteEntity("A001-MB1.dev.height", edgInfo.getHeight()));
        list.add(generateReadWriteEntity("A001-MB1.dev.thickness", edgInfo.getThickness()));
        list.add(generateReadWriteEntity("A001-MB1.dev.filmRemove", 0));
        miloService.writeToOpcWord(list);
        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) {
        ReadWriteEntity readWriteEntity = new ReadWriteEntity();
        readWriteEntity.setIdentifier(identifier);
        readWriteEntity.setValue(value);
        return readWriteEntity;
        return ReadWriteEntity.builder()
                .identifier(identifier)
                //Kep中是Long类型,即:Int32,Java中的int类型
                .value(value)
                .build();
    }
}