package org.jeecg.modules.mdc.job; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.constant.WebsocketConst; import org.jeecg.common.util.RedisUtil; import org.jeecg.modules.board.vo.EquStatus; import org.jeecg.modules.mdc.entity.Equipment; import org.jeecg.modules.mdc.service.IEquipmentService; import org.jeecg.modules.mdc.util.ThrowableUtil; import org.jeecg.modules.message.websocket.WebSocket; import org.jeecg.modules.quartz.entity.QuartzJob; import org.jeecg.modules.quartz.entity.SysQuartzLog; import org.jeecg.modules.quartz.service.IQuartzJobService; import org.jeecg.modules.quartz.service.ISysQuartzLogService; import org.jeecg.modules.system.service.IMdcProductionService; import org.quartz.*; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @Author: Lius * @CreateTime: 2025-06-05 * @Description: websocket推送设备状态任务 */ @DisallowConcurrentExecution @Slf4j public class WebsocketPushEquStatusJob implements Job { @Resource private IQuartzJobService quartzJobService; @Resource private ISysQuartzLogService sysQuartzLogService; @Resource private RedisUtil redisUtil; @Resource private WebSocket webSocket; @Resource private IEquipmentService equipmentService; @Resource private IMdcProductionService mdcProductionService; final private static String redisKey = "board:equipment:status:"; @Override public void execute(JobExecutionContext context) throws JobExecutionException { SysQuartzLog quartzLog = new SysQuartzLog(); quartzLog.setCreateTime(new Date()); List byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName()); if (byJobClassName != null && !byJobClassName.isEmpty()) { quartzLog.setJobId(byJobClassName.get(0).getId()); } long startTime = System.currentTimeMillis(); try { List equipmentList = equipmentService.list(); if (equipmentList != null && !equipmentList.isEmpty()) { List equStatusList = new ArrayList<>(); for (Equipment equipment : equipmentList) { if (equipment.getOporation() == null) { equipment.setOporation(0); } String key = redisKey + equipment.getEquipmentid(); if (redisUtil.hasKey(key)) { Integer status = (Integer) redisUtil.get(key); if (!status.equals(equipment.getOporation())) { EquStatus equStatus = new EquStatus(); equStatus.setEquipmentId(equipment.getEquipmentid()); equStatus.setState(equipment.getOporation()); // 通过equipmentId获取设备车间名称 String productionName = mdcProductionService.findProName(equipment.getEquipmentid()); equStatus.setPlantName(productionName); equStatusList.add(equStatus); redisUtil.set(key, equipment.getOporation()); } } else { EquStatus equStatus = new EquStatus(); equStatus.setEquipmentId(equipment.getEquipmentid()); equStatus.setState(equipment.getOporation()); // 通过equipmentId获取设备车间名称 String productionName = mdcProductionService.findProName(equipment.getEquipmentid()); equStatus.setPlantName(productionName); equStatusList.add(equStatus); redisUtil.set(key, equipment.getOporation()); } } JSONObject jsonObject = new JSONObject(); jsonObject.put(WebsocketConst.MSG_CMD, "equStatus"); jsonObject.put("data", equStatusList); webSocket.sendMessage(jsonObject.toJSONString()); } quartzLog.setIsSuccess(0); } catch (Exception e) { quartzLog.setIsSuccess(-1); quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e)); } long endTime = System.currentTimeMillis(); quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime))); sysQuartzLogService.save(quartzLog); } }