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.DisallowConcurrentExecution;
|
import org.quartz.Job;
|
import org.quartz.JobExecutionContext;
|
import org.quartz.JobExecutionException;
|
|
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<QuartzJob> byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName());
|
if (byJobClassName != null && !byJobClassName.isEmpty()) {
|
quartzLog.setJobId(byJobClassName.get(0).getId());
|
}
|
long startTime = System.currentTimeMillis();
|
try {
|
List<Equipment> equipmentList = equipmentService.list();
|
if (equipmentList != null && !equipmentList.isEmpty()) {
|
List<EquStatus> 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);
|
}
|
}
|