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<QuartzJob> 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<Equipment> 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);
|
}
|
}
|