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.kangaroohy.milo.model.ReadWriteEntity; 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.tools.WebSocketServer; import com.mes.utils.RedisUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; 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; @Resource RedisUtil redisUtil; @Scheduled(fixedDelay = 5000) public void hollowGlassTaskOne() { hollowGlassTaskChild(930, "CMJ1.CMJ1.isFree", "HollowGlassOne"); } @Scheduled(fixedDelay = 5000) public void hollowGlassTaskTwo() { hollowGlassTaskChild(931, "ZKQ2.ZKQ2.isFree", "HollowGlassTwo"); } @Scheduled(fixedDelay = 5000) public void hollowGlassTaskThree() { //todo:暂无三线的空闲状态信号,临时标签空闲状态 hollowGlassTaskChild(932, "ZKQ3.ZKQ3.isFree", "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 { //930空闲信号 ReadWriteEntity freeOneRequestEntity = miloService.readFromOpcUa(isFreeTag); jsonObject.append("freeRequest", freeOneRequestEntity.getValue()); } 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 { 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(); ReadWriteEntity fromOpcUa = miloService.readFromOpcUa("DLP2A.DLP2A.FROM1"); for (int i = 1; i <= 6; i++) { ReadWriteEntity requestWord = miloService.readFromOpcUa("DLP2A.DLP2A.DI" + i); ReadWriteEntity targetSlotWord = miloService.readFromOpcUa("DLP2A.DLP2A.TO" + i); ReadWriteEntity stateWord = miloService.readFromOpcUa("DLP2A.DLP2A.STATE" + i); if (null != requestWord.getValue()) { BigStorageTaskVO task = new BigStorageTaskVO(); task.setGlassId(requestWord.getValue() + ""); 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.getValue() + "")); task.setTargetSlot(Integer.parseInt(targetSlotWord.getValue() + "")); task.setTaskState(Integer.parseInt(stateWord.getValue() + "")); inTaskList.add(task); continue; } } jsonObject.append("bigStorageCageDetailsFeedTask", inTaskList); } catch (Exception e) { //todo:不做任务处理 } try { //进片联机 ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP2A.DLP2A.mesControl"); jsonObject.append("inkageEntity", inkageEntity.getValue()); //进片请求 ReadWriteEntity requestEntity = miloService.readFromOpcUa("DLP2A.DLP2A.RequestMes"); jsonObject.append("requestEntity", requestEntity.getValue()); //启动命令 ReadWriteEntity mesReplyEntity = miloService.readFromOpcUa("DLP2A.DLP2A.MesReply"); jsonObject.append("mesReplyEntity", mesReplyEntity.getValue()); //出片联机 ReadWriteEntity outInkageEntity = miloService.readFromOpcUa("DLP2B.DLP2B.mesControl"); jsonObject.append("outInkageEntity", outInkageEntity.getValue()); //出片请求 ReadWriteEntity outRequestEntity = miloService.readFromOpcUa("DLP2B.DLP2B.RequestMes"); jsonObject.append("outRequestEntity", outRequestEntity.getValue()); //930空闲信号 ReadWriteEntity freeOneRequestEntity = miloService.readFromOpcUa("CMJ1.CMJ1.isFree"); jsonObject.append("freeOneRequestEntity", freeOneRequestEntity.getValue()); //931空闲信号 ReadWriteEntity freeTwoRequestEntity = miloService.readFromOpcUa("ZKQ2.ZKQ2.isFree"); jsonObject.append("freeTwoRequestEntity", freeTwoRequestEntity.getValue()); //932空闲信号 ReadWriteEntity freeThreeRequestEntity = miloService.readFromOpcUa("ZKQ3.ZKQ3.isFree"); jsonObject.append("freeThreeRequestEntity", freeThreeRequestEntity.getValue()); } catch (Exception e) { //todo:不做任务处理 } //出片任务数据 List outTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_out_two_task"); 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); //理片笼使用情况 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"); } } } } }