package com.mes.job; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.github.xingshuangs.iot.protocol.s7.serializer.S7Serializer; import com.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.service.MiloService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.s7.entity.S7DataMBExtra; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; /** * @Author : zhoush * @Date: 2024/10/10 8:05 * @Description: */ @Component @Slf4j public class OpcEdgTask { @Autowired(required = false) MiloService miloService; @Autowired @Qualifier("s7SerializerMBExtra") private S7Serializer s7SerializerMBExtra; @Resource GlassInfoService glassInfoService; @Scheduled(fixedDelay = 2000) public void startOneEdgTask() throws Exception { startEdgTaskChild("01"); } @Scheduled(fixedDelay = 2000) public void startTwoEdgTask() throws Exception { startEdgTaskChild("02"); } private void startEdgTaskChild(String cell) throws Exception { S7DataMBExtra s7DataMBExtra = s7SerializerMBExtra.read(S7DataMBExtra.class); log.info("MB04读取数据{}", s7DataMBExtra); String request = ""; String glassIdEntity = ""; if ("01".equals(cell)) { request = s7DataMBExtra.getRequestOne().toString(); glassIdEntity = s7DataMBExtra.getPlcGlassIdOne(); } else { request = s7DataMBExtra.getRequestTwo().toString(); glassIdEntity = s7DataMBExtra.getPlcGlassIdTwo(); } if (null == request || "0".equals(request)) { log.info("未收到玻璃请求,结束本次任务"); return; } if (null == glassIdEntity || StringUtils.isEmpty(glassIdEntity)) { log.info("有请求但玻璃id为空,结束本次任务"); return; } String glassId = glassIdEntity; log.info("获取到{}线的玻璃id:{}", cell, glassId); GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper().eq(GlassInfo::getGlassId, glassId).last("limit 1")); log.info("{}线发送尺寸信息宽:{},高:{},厚度:{}", cell, Math.max(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10), Math.min(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10), glassInfo.getThickness() * 10); if ("01".equals(cell)) { s7SerializerMBExtra.write( S7DataMBExtra.builder() .widthOne((int) Math.max(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10)) .heightOne((int) Math.min(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10)) .thicknessOne((int) (glassInfo.getThickness() * 10)) .build() ); s7SerializerMBExtra.write( S7DataMBExtra.builder().mesGlassIdOne(glassId).build() ); } else { s7SerializerMBExtra.write( S7DataMBExtra.builder() .widthTwo((int) Math.max(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10)) .heightTwo((int) Math.min(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10)) .thicknessTwo((int) (glassInfo.getThickness() * 10)) .build() ); s7SerializerMBExtra.write( S7DataMBExtra.builder().mesglassIdTwo(glassId).build() ); } } private ReadWriteEntity generateReadWriteEntity(String identifier, Object value) { return ReadWriteEntity.builder() .identifier(identifier) //Kep中是Long类型,即:Int32,Java中的int类型 .value(value) .build(); } }