package org.jeecg.modules.mdc.job;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import lombok.extern.slf4j.Slf4j;
|
import org.jeecg.common.api.dto.message.MessageDTO;
|
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.common.constant.enums.MessageSplitTypeEnum;
|
import org.jeecg.common.system.api.ISysBaseAPI;
|
import org.jeecg.common.system.vo.DictModel;
|
import org.jeecg.common.util.DateUtils;
|
import org.jeecg.modules.mdc.dto.MdcEquipmentDto;
|
import org.jeecg.modules.mdc.entity.MdcEquipment;
|
import org.jeecg.modules.mdc.entity.MdcOverrunAlarm;
|
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
|
import org.jeecg.modules.mdc.service.IMdcOverrunAlarmService;
|
import org.jeecg.modules.mdc.util.ThrowableUtil;
|
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.ISysAnnouncementService;
|
import org.jeecg.modules.system.service.ISysDictService;
|
import org.quartz.*;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author Lius
|
* @Description: 监控设备运行转速与NC程序设定转速对比
|
* @date 2024/3/4 16:14
|
*/
|
@Slf4j
|
public class RunningMonitoringSpeedJob implements Job {
|
|
@Resource
|
private IQuartzJobService quartzJobService;
|
|
@Resource
|
private ISysQuartzLogService sysQuartzLogService;
|
|
@Resource
|
private ISysAnnouncementService sysAnnouncementService;
|
|
@Resource
|
private IMdcEquipmentService mdcEquipmentService;
|
|
@Resource
|
private ISysDictService sysDictService;
|
|
@Resource
|
private ISysBaseAPI sysBaseApi;
|
|
@Resource
|
private IMdcOverrunAlarmService mdcOverrunAlarmService;
|
|
@Override
|
public void execute(JobExecutionContext jobExecutionContext) 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());
|
}
|
log.info("监控设备运行转速与NC程序设定转速对比 RunningMonitoringSpeedJob start! 时间:" + DateUtils.now());
|
long startTime = System.currentTimeMillis();
|
try {
|
List<MdcEquipment> mdcEquipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().ne(MdcEquipment::getDriveType, "ZUOLAN"));
|
|
// 获取字典数据
|
List<DictModel> dictModelList = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_OPERATING_SPEED_RANGE);
|
BigDecimal range = BigDecimal.ZERO;
|
if (dictModelList != null && !dictModelList.isEmpty()) {
|
range = new BigDecimal(dictModelList.get(0).getValue());
|
}
|
|
Map<String, String> proNamesByEquipmentIds = mdcEquipmentService.getProNamesByEquipmentIds(mdcEquipmentList.stream().map(MdcEquipment::getId).collect(Collectors.toList()));
|
for (MdcEquipment mdcEquipment : mdcEquipmentList) {
|
String productionName = proNamesByEquipmentIds.get(mdcEquipment.getId());
|
String saveTableName = mdcEquipment.getSaveTableName();
|
MdcEquipmentDto mdcEquipmentDto = new MdcEquipmentDto();
|
|
//查询单表数据
|
mdcEquipmentDto = mdcEquipmentService.getWorkLineLast(saveTableName);
|
|
if (mdcEquipmentDto != null && StringUtils.isNotBlank(mdcEquipmentDto.getSpindlespeed()) && StringUtils.isNotBlank(mdcEquipmentDto.getActualspindlespeed())) {
|
MessageDTO messageDTO = new MessageDTO();
|
messageDTO.setTitle("【设备异常提醒】" + productionName + "车间设备 [" + mdcEquipment.getEquipmentId() + "] 运行转速!");
|
messageDTO.setCategory(CommonConstant.MSG_CATEGORY_2);
|
messageDTO.setMessageType(MessageSplitTypeEnum.deviceRunError.getType());
|
messageDTO.setFromUser("admin");
|
messageDTO.setToUser("admin");
|
//设定
|
BigDecimal spindlespeed = new BigDecimal(mdcEquipmentDto.getSpindlespeed());
|
//实际
|
BigDecimal actualspindlespeed = new BigDecimal(mdcEquipmentDto.getActualspindlespeed());
|
|
MdcOverrunAlarm mdcOverrunAlarm = new MdcOverrunAlarm();
|
mdcOverrunAlarm.setEquipmentId(mdcEquipment.getEquipmentId());
|
mdcOverrunAlarm.setSetValue(spindlespeed.toString());
|
mdcOverrunAlarm.setRealValue(actualspindlespeed.toString());
|
if (range.equals(BigDecimal.ZERO)) {
|
if (spindlespeed.compareTo(actualspindlespeed) == 1) {
|
// 设定值大于实际值 低
|
messageDTO.setContent("【设备异常提醒】" + productionName + "车间设备编号为 [" + mdcEquipment.getEquipmentId() + "] 的设备运行转速低!");
|
sysBaseApi.sendSysAnnouncement(messageDTO);
|
mdcOverrunAlarm.setAlarmContent("设备运行转速比NC代码设定值低");
|
mdcOverrunAlarmService.save(mdcOverrunAlarm);
|
} else if (spindlespeed.compareTo(actualspindlespeed) == -1) {
|
// 设定值小于实际值 高
|
messageDTO.setContent("【设备异常提醒】" + productionName + "车间设备编号为 [" + mdcEquipment.getEquipmentId() + "] 的设备运行转速高!");
|
sysBaseApi.sendSysAnnouncement(messageDTO);
|
mdcOverrunAlarm.setAlarmContent("设备运行转速比NC代码设定值高");
|
mdcOverrunAlarmService.save(mdcOverrunAlarm);
|
}
|
} else {
|
BigDecimal multiply = spindlespeed.multiply(range.divide(new BigDecimal(100), 4, RoundingMode.HALF_UP));
|
BigDecimal max = spindlespeed.add(multiply);
|
BigDecimal min = spindlespeed.subtract(multiply);
|
if (actualspindlespeed.compareTo(max) == 1 || actualspindlespeed.compareTo(min) == -1) {
|
if (spindlespeed.compareTo(actualspindlespeed) == 1) {
|
// 设定值大于实际值 低
|
messageDTO.setContent("【设备异常提醒】" + productionName + "车间设备编号为 [" + mdcEquipment.getEquipmentId() + "] 的设备运行转速低!");
|
sysBaseApi.sendSysAnnouncement(messageDTO);
|
mdcOverrunAlarm.setAlarmContent("设备运行转速比NC代码设定值低");
|
mdcOverrunAlarmService.save(mdcOverrunAlarm);
|
} else if (spindlespeed.compareTo(actualspindlespeed) == -1) {
|
// 设定值小于实际值 高
|
messageDTO.setContent("【设备异常提醒】" + productionName + "车间设备编号为 [" + mdcEquipment.getEquipmentId() + "] 的设备运行转速高!");
|
sysBaseApi.sendSysAnnouncement(messageDTO);
|
mdcOverrunAlarm.setAlarmContent("设备运行转速比NC代码设定值高");
|
mdcOverrunAlarmService.save(mdcOverrunAlarm);
|
}
|
}
|
}
|
}
|
}
|
quartzLog.setIsSuccess(0);
|
} catch (Exception e) {
|
quartzLog.setIsSuccess(-1);
|
quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
|
// 发送消息通知
|
sysAnnouncementService.jobSendMessage("监控设备运行转速与NC程序设定转速对比!", quartzLog.getExceptionDetail());
|
}
|
long endTime = System.currentTimeMillis();
|
quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
|
sysQuartzLogService.save(quartzLog);
|
}
|
}
|