package cn.lihu.jh.module.infra.service.job;
|
|
import cn.lihu.jh.framework.common.pojo.PageResult;
|
import cn.lihu.jh.module.infra.controller.admin.job.vo.log.JobLogPageReqVO;
|
import cn.lihu.jh.module.infra.dal.dataobject.job.JobLogDO;
|
import cn.lihu.jh.module.infra.dal.mysql.job.JobLogMapper;
|
import cn.lihu.jh.module.infra.enums.job.JobLogStatusEnum;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.stereotype.Service;
|
import org.springframework.validation.annotation.Validated;
|
|
import javax.annotation.Resource;
|
import java.time.LocalDateTime;
|
|
/**
|
* Job 日志 Service 实现类
|
*
|
* @author 芋道源码
|
*/
|
@Service
|
@Validated
|
@Slf4j
|
public class JobLogServiceImpl implements JobLogService {
|
|
@Resource
|
private JobLogMapper jobLogMapper;
|
|
@Override
|
public Long createJobLog(Long jobId, LocalDateTime beginTime,
|
String jobHandlerName, String jobHandlerParam, Integer executeIndex) {
|
JobLogDO log = JobLogDO.builder().jobId(jobId).handlerName(jobHandlerName)
|
.handlerParam(jobHandlerParam).executeIndex(executeIndex)
|
.beginTime(beginTime).status(JobLogStatusEnum.RUNNING.getStatus()).build();
|
jobLogMapper.insert(log);
|
return log.getId();
|
}
|
|
@Override
|
@Async
|
public void updateJobLogResultAsync(Long logId, LocalDateTime endTime, Integer duration, boolean success, String result) {
|
try {
|
JobLogDO updateObj = JobLogDO.builder().id(logId).endTime(endTime).duration(duration)
|
.status(success ? JobLogStatusEnum.SUCCESS.getStatus() : JobLogStatusEnum.FAILURE.getStatus())
|
.result(result).build();
|
jobLogMapper.updateById(updateObj);
|
} catch (Exception ex) {
|
log.error("[updateJobLogResultAsync][logId({}) endTime({}) duration({}) success({}) result({})]",
|
logId, endTime, duration, success, result);
|
}
|
}
|
|
@Override
|
@SuppressWarnings("DuplicatedCode")
|
public Integer cleanJobLog(Integer exceedDay, Integer deleteLimit) {
|
int count = 0;
|
LocalDateTime expireDate = LocalDateTime.now().minusDays(exceedDay);
|
// 循环删除,直到没有满足条件的数据
|
for (int i = 0; i < Short.MAX_VALUE; i++) {
|
int deleteCount = jobLogMapper.deleteByCreateTimeLt(expireDate, deleteLimit);
|
count += deleteCount;
|
// 达到删除预期条数,说明到底了
|
if (deleteCount < deleteLimit) {
|
break;
|
}
|
}
|
return count;
|
}
|
|
@Override
|
public JobLogDO getJobLog(Long id) {
|
return jobLogMapper.selectById(id);
|
}
|
|
@Override
|
public PageResult<JobLogDO> getJobLogPage(JobLogPageReqVO pageReqVO) {
|
return jobLogMapper.selectPage(pageReqVO);
|
}
|
|
}
|