package com.mes.job; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.github.xingshuangs.iot.protocol.modbus.service.ModbusTcp; import com.github.xingshuangs.iot.protocol.s7.serializer.S7Serializer; import com.kangaroohy.milo.service.MiloService; import com.mes.bigstoragecagetask.entity.BigStorageCageTask; import com.mes.bigstoragecagetask.entity.BigStorageTaskVO; import com.mes.bigstoragecagetask.service.BigStorageCageTaskService; import com.mes.common.config.Const; import com.mes.hollow.entity.HollowBigStorageCageDetails; import com.mes.hollow.entity.HollowGlassOutRelationInfo; import com.mes.hollow.entity.dto.FlowCardGlassInfoDTO; import com.mes.hollow.entity.vo.HollowBigStorageDetailsQueryVO; import com.mes.hollow.service.HollowBigStorageCageDetailsService; import com.mes.hollow.service.HollowBigStorageCageService; import com.mes.hollow.service.HollowGlassOutRelationInfoService; import com.mes.hollow.service.HollowGlassRelationInfoService; import com.mes.hollowqueue.entity.HollowGlassQueueInfo; import com.mes.hollowqueue.service.HollowGlassQueueInfoService; import com.mes.hollowtask.service.HollowBigStorageCageHistoryTaskService; import com.mes.largenscreen.entity.PieChartVO; import com.mes.largenscreen.entity.RunTime; import com.mes.s7.entity.S7DataZKDLPOne; import com.mes.s7.entity.S7DataZKDLPTwo; import com.mes.s7.entity.S7DataZKExtra; import com.mes.tools.WebSocketServer; import com.mes.utils.RedisUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; 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 javax.annotation.Resource; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @Author : zhoush * @Date: 2024/12/4 9:41 * @Description: */ @Component @Slf4j public class PushMessageToIndex { @Resource HollowGlassQueueInfoService hollowGlassQueueInfoService; @Resource HollowGlassOutRelationInfoService hollowGlassOutRelationInfoService; @Resource HollowBigStorageCageService hollowBigStorageCageService; @Resource HollowBigStorageCageDetailsService hollowBigStorageCageDetailsService; @Resource BigStorageCageTaskService bigStorageCageTaskService; @Resource HollowGlassRelationInfoService hollowGlassRelationInfoService; @Resource HollowBigStorageCageHistoryTaskService hollowBigStorageCageHistoryTaskService; @Autowired(required = false) MiloService miloService; @Autowired @Qualifier("s7SerializerZKDLPOne") private S7Serializer s7SerializerZKDLPOne; @Autowired @Qualifier("s7SerializerZKDLPTwo") private S7Serializer s7SerializerZKDLPTwo; @Autowired @Qualifier("s7SerializerZKQ2") private S7Serializer s7SerializerZKQ2; @Autowired @Qualifier("CMJ1ModbusTcp") ModbusTcp CMJ1ModbusTcp; @Autowired @Qualifier("CMJ2ModbusTcp") ModbusTcp CMJ2ModbusTcp; private Integer offset = 40001; @Resource RedisUtil redisUtil; @Scheduled(fixedDelay = 5000) public void hollowGlassTaskOne() { hollowGlassTaskChild(930, CMJ1ModbusTcp.readUInt16(42027 - offset) + "", "HollowGlassOne"); } @Scheduled(fixedDelay = 5000) public void hollowGlassTaskTwo() { S7DataZKExtra s7DataZKExtra = s7SerializerZKQ2.read(S7DataZKExtra.class); hollowGlassTaskChild(931, (s7DataZKExtra.getIsFree() ? 1 : 0) + "", "HollowGlassTwo"); } @Scheduled(fixedDelay = 5000) public void hollowGlassTaskThree() { S7DataZKExtra s7DataZKExtra = s7SerializerZKQ2.read(S7DataZKExtra.class); //todo:暂无三线的空闲状态信号,临时标签空闲状态 hollowGlassTaskChild(932, (s7DataZKExtra.getIsFree03() ? 1 : 0) + "", "HollowGlassThree"); } public void hollowGlassTaskChild(int cell, String isFreeTag, String websocketName) { List taskList = hollowGlassOutRelationInfoService.list(new LambdaQueryWrapper() .in(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_START).eq(HollowGlassOutRelationInfo::getCell, cell)); JSONObject jsonObject = new JSONObject(); if (CollectionUtil.isNotEmpty(taskList)) { List taskIdList = taskList.stream().map(HollowGlassOutRelationInfo::getId).collect(Collectors.toList()); List list = hollowGlassQueueInfoService.list(new LambdaQueryWrapper().in(HollowGlassQueueInfo::getRelationId, taskIdList)); jsonObject.append("queueInfo", list); } try { jsonObject.append("freeRequest", isFreeTag); } catch (Exception e) { log.error("opc存在异常", e); } List sendwServer = WebSocketServer.sessionMap.get(websocketName); if (CollectionUtil.isNotEmpty(sendwServer)) { for (WebSocketServer socketServer : sendwServer) { if (socketServer != null && socketServer.session.isOpen()) { socketServer.sendMessage(jsonObject.toString()); } } } } @Scheduled(fixedDelay = 1000) public void hollowGlassMessage() { JSONObject jsonObject = new JSONObject(); try { //查询使用数据源1查询数据 queryDataSource1(jsonObject); ArrayList sendwServer = WebSocketServer.sessionMap.get("hollowGlassMessage"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); List messages = webserver.getMessages(); if (!messages.isEmpty()) { // // 将最后一个消息转换为整数类型的列表 webserver.clearMessages(); } } else { log.info("Home is closed"); } } } } catch (Exception e) { e.printStackTrace(); } } public void queryDataSource1(JSONObject jsonObject) throws Exception { S7DataZKDLPOne s7DataZKDLPOne = s7SerializerZKDLPOne.read(S7DataZKDLPOne.class); S7DataZKDLPTwo s7DataZKDLPTwo = s7SerializerZKDLPTwo.read(S7DataZKDLPTwo.class); S7DataZKExtra s7DataZKExtra = s7SerializerZKQ2.read(S7DataZKExtra.class); List carPostion = new ArrayList<>(); carPostion.add(0.25); carPostion.add(0.5); jsonObject.append("carPostion", carPostion); //界面展示笼子信息 jsonObject.append("bigStorageCageInfos", hollowBigStorageCageDetailsService.queryHollowbigStorageCageDetail()); try { //进片任务数据 List inTaskList = new ArrayList(); String fromOpcUa = s7DataZKDLPOne.getFrom1().toString(); for (int i = 0; i < 6; i++) { String requestWord = ""; String stateWord = ""; String targetSlotWord = ""; switch (i) { case 0: requestWord = s7DataZKDLPOne.getId1(); stateWord = s7DataZKDLPOne.getState1().toString(); targetSlotWord = s7DataZKDLPOne.getTo1().toString(); break; case 1: requestWord = s7DataZKDLPOne.getId2(); stateWord = s7DataZKDLPOne.getState2().toString(); targetSlotWord = s7DataZKDLPOne.getTo2().toString(); break; case 2: requestWord = s7DataZKDLPOne.getId3(); stateWord = s7DataZKDLPOne.getState3().toString(); targetSlotWord = s7DataZKDLPOne.getTo3().toString(); break; case 3: requestWord = s7DataZKDLPOne.getId4(); stateWord = s7DataZKDLPOne.getState4().toString(); targetSlotWord = s7DataZKDLPOne.getTo4().toString(); break; case 4: requestWord = s7DataZKDLPOne.getId5(); stateWord = s7DataZKDLPOne.getState5().toString(); targetSlotWord = s7DataZKDLPOne.getTo5().toString(); break; case 5: requestWord = s7DataZKDLPOne.getId6(); stateWord = s7DataZKDLPOne.getState6().toString(); targetSlotWord = s7DataZKDLPOne.getTo6().toString(); break; } if (StringUtils.isNotEmpty(requestWord)) { BigStorageTaskVO task = new BigStorageTaskVO(); task.setGlassId(requestWord); int isExistCount = hollowBigStorageCageDetailsService.count(new LambdaQueryWrapper().in(HollowBigStorageCageDetails::getGlassId, task.getGlassId()) .in(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL)); if (isExistCount > 0) { task.setIsSame(1); } else { task.setIsSame(0); } task.setStartSlot(Integer.parseInt(fromOpcUa)); task.setTargetSlot(Integer.parseInt(targetSlotWord)); task.setTaskState(Integer.parseInt(stateWord)); inTaskList.add(task); continue; } } jsonObject.append("bigStorageCageDetailsFeedTask", inTaskList); } catch (Exception e) { //todo:不做任务处理 } try { //进片联机 Boolean inkageEntity = s7DataZKDLPOne.getMesControl(); jsonObject.append("inkageEntity", inkageEntity); //进片请求 String requestEntity = s7DataZKDLPOne.getRequestMes().toString(); jsonObject.append("requestEntity", requestEntity); //启动命令 String mesReplyEntity = s7DataZKDLPOne.getMesReply().toString(); jsonObject.append("mesReplyEntity", mesReplyEntity); //出片联机 String outInkageEntity = s7DataZKDLPTwo.getMesControl().toString(); jsonObject.append("outInkageEntity", outInkageEntity); //出片请求 String outRequestEntity = s7DataZKDLPTwo.getRequestMes().toString(); jsonObject.append("outInkageEntity", outInkageEntity); //930空闲信号 jsonObject.append("freeOneRequestEntity", CMJ1ModbusTcp.readUInt16(42027 - offset)); //931空闲信号 jsonObject.append("freeTwoRequestEntity", s7DataZKExtra.getIsFree()); //932空闲信号 jsonObject.append("freeThreeRequestEntity", s7DataZKExtra.getIsFree()); } catch (Exception e) { //todo:不做任务处理 } //出片任务数据 List outTaskList = new ArrayList<>(); for (int i = 0; i < 6; i++) { BigStorageCageTask bigStorageCageTask = new BigStorageCageTask(); String glassId = ""; Integer startSlot = 0; Integer targetSlot = 0; Integer taskState = 0; switch (i) { case 0: glassId = s7DataZKDLPTwo.getId1(); startSlot = s7DataZKDLPTwo.getFrom1(); targetSlot = s7DataZKDLPTwo.getTo1(); taskState = s7DataZKDLPTwo.getState1(); ; break; case 1: glassId = s7DataZKDLPTwo.getId2(); startSlot = s7DataZKDLPTwo.getFrom2(); targetSlot = s7DataZKDLPTwo.getTo2(); taskState = s7DataZKDLPTwo.getState2(); break; case 2: glassId = s7DataZKDLPTwo.getId3(); startSlot = s7DataZKDLPTwo.getFrom3(); targetSlot = s7DataZKDLPTwo.getTo3(); taskState = s7DataZKDLPTwo.getState3(); break; case 3: glassId = s7DataZKDLPTwo.getId4(); startSlot = s7DataZKDLPTwo.getFrom4(); targetSlot = s7DataZKDLPTwo.getTo4(); taskState = s7DataZKDLPTwo.getState4(); break; case 4: glassId = s7DataZKDLPTwo.getId5(); startSlot = s7DataZKDLPTwo.getFrom5(); targetSlot = s7DataZKDLPTwo.getTo5(); taskState = s7DataZKDLPTwo.getState5(); break; case 5: glassId = s7DataZKDLPTwo.getId6(); startSlot = s7DataZKDLPTwo.getFrom6(); targetSlot = s7DataZKDLPTwo.getTo6(); taskState = s7DataZKDLPTwo.getState6(); break; } if (StringUtils.isNotEmpty(glassId)) { bigStorageCageTask.setGlassId(glassId); bigStorageCageTask.setStartSlot(startSlot); bigStorageCageTask.setTargetSlot(targetSlot); bigStorageCageTask.setTaskState(taskState); outTaskList.add(bigStorageCageTask); } } jsonObject.append("bigStorageCageDetailsOutTask", outTaskList); //调度开关 boolean dispatchHollowSwitch = false; if (redisUtil.getCacheObject("dispatchHollowSwitch") == null) { redisUtil.setCacheObject("dispatchHollowSwitch", false); } else { dispatchHollowSwitch = redisUtil.getCacheObject("dispatchHollowSwitch"); } jsonObject.append("dispatchHollowSwitch", dispatchHollowSwitch); //调度开关 boolean priorityHollowSwitch = false; if (redisUtil.getCacheObject("priorityHollowSwitch") == null) { redisUtil.setCacheObject("priorityHollowSwitch", false); } else { dispatchHollowSwitch = redisUtil.getCacheObject("priorityHollowSwitch"); } jsonObject.append("dispatchHollowSwitch", dispatchHollowSwitch); //理片笼使用情况 List> bigStorageCageUsage = hollowBigStorageCageService.selectBigStorageCageUsage(); jsonObject.append("bigStorageCageUsage", bigStorageCageUsage); //理片笼使用情况汇总 HollowBigStorageDetailsQueryVO hollowBigStorageDetailsQueryVO = new HollowBigStorageDetailsQueryVO(); List bigStorageCageUsageSummary = hollowGlassRelationInfoService.queryHollowAllFlowCardSummary(hollowBigStorageDetailsQueryVO); jsonObject.append("bigStorageCageUsageSummary", bigStorageCageUsageSummary); } @Scheduled(fixedDelay = 1000) public void largenScreen() { JSONObject jsonObject = new JSONObject(); //理片笼使用情况 List> hollowBigStorageCageUsage = hollowBigStorageCageService.selectBigStorageCageUsage(); jsonObject.append("hollowBigStorageCageUsage", hollowBigStorageCageUsage); //钢化饼图数据 List pieChartVOS = hollowGlassOutRelationInfoService.queryPieChart(); jsonObject.append("pieChartVOS", pieChartVOS); List hollowRunTimes = hollowBigStorageCageHistoryTaskService.queryRunTimes(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); jsonObject.append("hollowRunTimes", hollowRunTimes); ArrayList sendwServer = WebSocketServer.sessionMap.get("largenScreen"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); List messages = webserver.getMessages(); if (!messages.isEmpty()) { // // 将最后一个消息转换为整数类型的列表 webserver.clearMessages(); } } else { log.info("largenScreen is closed"); } } } } }