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 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 mdcEquipmentList = mdcEquipmentService.list(new LambdaQueryWrapper().ne(MdcEquipment::getDriveType, "ZUOLAN")); // 获取字典数据 List 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 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(MessageSplitTypeEnum.deviceRunError.getNote()); 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); } }