package org.jeecg.modules.mdc.job; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.jeecg.common.constant.CommonConstant; import org.jeecg.modules.mdc.dto.MdcEquipmentWaitSectionDto; import org.jeecg.modules.mdc.entity.MdcDowntime; import org.jeecg.modules.mdc.entity.MdcEquipmentOvertime; import org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection; import org.jeecg.modules.mdc.service.IMdcDowntimeService; import org.jeecg.modules.mdc.service.IMdcEquipmentRunningSectionService; import org.jeecg.modules.mdc.util.DateUtils; 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.quartz.*; import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * @Author: Lius * @CreateTime: 2025-03-12 * @Description: 扫描停机任务 */ @PersistJobDataAfterExecution @DisallowConcurrentExecution @Slf4j public class ScanDowntimeJob implements Job { /** * 若参数变量名修改 QuartzJobController中也需对应修改 时间: yyyyMMdd 例: 20230414 */ private String parameter; public void setParameter(String parameter) { this.parameter = parameter; } @Resource private IQuartzJobService quartzJobService; @Resource private ISysAnnouncementService sysAnnouncementService; @Resource private ISysQuartzLogService sysQuartzLogService; @Resource private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService; @Resource private IMdcDowntimeService mdcDowntimeService; @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()); } quartzLog.setParams(this.parameter); log.info("定时扫描待机时长超20分钟设备任务 ScanDowntimeJob start! 时间:{}, 参数:{}", DateUtils.getNow(), this.parameter); long startTime = System.currentTimeMillis(); try { String date = ""; if (StringUtils.isNotBlank(this.parameter)) { date = DateUtils.format(DateUtils.toDate(this.parameter, DateUtils.STRDATE), DateUtils.STR_DATE); } else { date = DateUtils.format(DateUtils.getNow(), DateUtils.STR_DATE); } mdcDowntimeService.remove(new LambdaQueryWrapper().eq(MdcDowntime::getTheDate, date).eq(MdcDowntime::getStatus, CommonConstant.DOWNTIME_STATUS_0)); List mdcEquipmentRunningSections = mdcEquipmentRunningSectionService.findWaitList(date); if (mdcEquipmentRunningSections != null && !mdcEquipmentRunningSections.isEmpty()) { String finalDate = date; List downtimeList = mdcEquipmentRunningSections.stream().map(mdcEquipmentWaitSectionDto -> { MdcDowntime downtime = new MdcDowntime(); downtime.setEquipmentId(mdcEquipmentWaitSectionDto.getEquipmentId()); downtime.setEquipmentName(mdcEquipmentWaitSectionDto.getEquipmentName()); downtime.setTheDate(finalDate); downtime.setStartDate(mdcEquipmentWaitSectionDto.getStartTime()); downtime.setEndDate(mdcEquipmentWaitSectionDto.getEndTime()); downtime.setShutdownDuration(DateUtils.differentMinutes(downtime.getStartDate(), downtime.getEndDate())); return downtime; }).collect(Collectors.toList()); if (!downtimeList.isEmpty()) { mdcDowntimeService.saveBatch(downtimeList); } } quartzLog.setIsSuccess(0); } catch (Exception e) { quartzLog.setIsSuccess(-1); quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e)); // 发送消息通知 sysAnnouncementService.jobSendMessage("定时扫描待机时长超20分钟设备任务", quartzLog.getExceptionDetail()); } long endTime = System.currentTimeMillis(); quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime))); sysQuartzLogService.save(quartzLog); } }