qushaowei
2024-03-14 be3aa0812cb43be7484e162b4fece5344e9eb5c8
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningMonitoringSpeedJob.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,154 @@
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.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;
/**
 * @author Lius
 * @Description: ç›‘控设备运行转速与NC程序设定转速对比
 * @date 2024/3/4 16:14
 */
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
@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());
            }
            for (MdcEquipment mdcEquipment : mdcEquipmentList) {
                String saveTableName = mdcEquipment.getSaveTableName();
                MdcEquipmentDto mdcEquipmentDto = new MdcEquipmentDto();
                try {
                    //查询单表数据
                    mdcEquipmentDto = mdcEquipmentService.getWorkLineLast(saveTableName);
                } catch (Exception e) {
                    log.error("查询单表数据失败!", e);
                }
                if (mdcEquipmentDto != null && StringUtils.isNotBlank(mdcEquipmentDto.getSpindlespeed()) && StringUtils.isNotBlank(mdcEquipmentDto.getActualspindlespeed())) {
                    MessageDTO messageDTO = new MessageDTO();
                    messageDTO.setTitle("设备运行转速报警!");
                    messageDTO.setCategory("预警消息");
                    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("设备编号为 [" + mdcEquipment.getEquipmentId() + "] çš„设备运行转速低报警!");
                            sysBaseApi.sendSysAnnouncement(messageDTO);
                            mdcOverrunAlarm.setAlarmContent("设备运行转速比NC代码设定值低报警");
                            mdcOverrunAlarmService.save(mdcOverrunAlarm);
                        } else if (spindlespeed.compareTo(actualspindlespeed) == -1) {
                            // è®¾å®šå€¼å°äºŽå®žé™…值   é«˜
                            messageDTO.setContent("设备编号为 [" + 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("设备编号为 [" + mdcEquipment.getEquipmentId() + "] çš„设备运行转速低报警!");
                                sysBaseApi.sendSysAnnouncement(messageDTO);
                                mdcOverrunAlarm.setAlarmContent("设备运行转速比NC代码设定值低报警");
                                mdcOverrunAlarmService.save(mdcOverrunAlarm);
                            } else if (spindlespeed.compareTo(actualspindlespeed) == -1) {
                                // è®¾å®šå€¼å°äºŽå®žé™…值   é«˜
                                messageDTO.setContent("设备编号为 [" + 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);
    }
}