package org.jeecg.modules.mdc.job; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.mdc.entity.Equipment; import org.jeecg.modules.mdc.service.IEquipmentService; 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 org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Date; import java.util.List; /** * @Description 数据迁移任务 * @author Lius * @date 2024/4/3 10:39 */ @PersistJobDataAfterExecution @DisallowConcurrentExecution @Slf4j public class TransferTableDataJob implements Job { @Resource private ISysQuartzLogService sysQuartzLogService; @Resource private IQuartzJobService quartzJobService; @Resource private ISysAnnouncementService sysAnnouncementService; @Resource private IEquipmentService equipmentService; @Override @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 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("数据迁移任务 TransferTableDataJob start! 时间:" + DateUtils.getNow()); long startTime = System.currentTimeMillis(); try { List list = equipmentService.list(); Equipment info = new Equipment(); info.setSavetablename("EquipmentLog"); list.add(info); String day = DateUtils.format(DateUtils.plusTime(DateUtils.getNow(), -30), DateUtils.STR_DATE_TIME_SMALL); for (Equipment equipment : list) { if (StringUtils.isNotBlank(equipment.getSavetablename())) { String tableName = equipmentService.checkTableExists(equipment.getSavetablename()); if (StringUtils.isNotBlank(tableName)) { String backupTableName = equipmentService.checkTableExists(equipment.getSavetablename() + "_backup"); if (StringUtils.isNotBlank(backupTableName)) { Integer num = equipmentService.checkTableDataNum(equipment.getSavetablename(), day); if (num > 0) { equipmentService.insertTableData(backupTableName, tableName, day); equipmentService.deleteTableData(tableName, day); } } else { //备份表不存在创建备份表并迁移数据 equipmentService.insertNoTableData(tableName + "_backup", tableName, day); equipmentService.deleteTableData(tableName, day); } } } } quartzLog.setIsSuccess(0); } catch (Exception e) { quartzLog.setIsSuccess(-1); quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e)); // 发送消息通知 sysAnnouncementService.jobSendMessage("数据迁移任务", quartzLog.getExceptionDetail()); } long endTime = System.currentTimeMillis(); quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime))); sysQuartzLogService.save(quartzLog); } }