package com.vincent.rsf.server.system.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.vincent.rsf.server.system.entity.AiDiagnosisPlan;
|
import com.vincent.rsf.server.system.mapper.AiDiagnosisPlanMapper;
|
import com.vincent.rsf.server.system.service.AiDiagnosisPlanService;
|
import org.springframework.scheduling.support.CronSequenceGenerator;
|
import org.springframework.stereotype.Service;
|
|
import java.util.Date;
|
import java.util.List;
|
|
@Service("aiDiagnosisPlanService")
|
public class AiDiagnosisPlanServiceImpl extends ServiceImpl<AiDiagnosisPlanMapper, AiDiagnosisPlan> implements AiDiagnosisPlanService {
|
|
@Override
|
public AiDiagnosisPlan getTenantPlan(Long tenantId, Long id) {
|
if (tenantId == null || id == null) {
|
return null;
|
}
|
return this.getOne(new LambdaQueryWrapper<AiDiagnosisPlan>()
|
.eq(AiDiagnosisPlan::getTenantId, tenantId)
|
.eq(AiDiagnosisPlan::getId, id)
|
.last("limit 1"));
|
}
|
|
@Override
|
public List<AiDiagnosisPlan> listDuePlans(Date now) {
|
Date target = now == null ? new Date() : now;
|
return this.list(new LambdaQueryWrapper<AiDiagnosisPlan>()
|
.eq(AiDiagnosisPlan::getStatus, 1)
|
.eq(AiDiagnosisPlan::getRunningFlag, 0)
|
.isNotNull(AiDiagnosisPlan::getNextRunTime)
|
.le(AiDiagnosisPlan::getNextRunTime, target)
|
.orderByAsc(AiDiagnosisPlan::getNextRunTime, AiDiagnosisPlan::getId));
|
}
|
|
@Override
|
public Date calculateNextRunTime(String cronExpr, Date after) {
|
if (!validateCron(cronExpr)) {
|
return null;
|
}
|
return new CronSequenceGenerator(cronExpr.trim()).next(after == null ? new Date() : after);
|
}
|
|
@Override
|
public boolean validateCron(String cronExpr) {
|
if (cronExpr == null || cronExpr.trim().isEmpty()) {
|
return false;
|
}
|
return CronSequenceGenerator.isValidExpression(cronExpr.trim());
|
}
|
|
@Override
|
public boolean acquireForExecution(Long id, Long operatorId, String lastMessage, Date nextRunTime) {
|
if (id == null) {
|
return false;
|
}
|
Date now = new Date();
|
return this.update(new LambdaUpdateWrapper<AiDiagnosisPlan>()
|
.eq(AiDiagnosisPlan::getId, id)
|
.eq(AiDiagnosisPlan::getRunningFlag, 0)
|
.set(AiDiagnosisPlan::getRunningFlag, 1)
|
.set(AiDiagnosisPlan::getLastResult, 2)
|
.set(AiDiagnosisPlan::getLastMessage, lastMessage)
|
.set(AiDiagnosisPlan::getNextRunTime, nextRunTime)
|
.set(AiDiagnosisPlan::getUpdateBy, operatorId)
|
.set(AiDiagnosisPlan::getUpdateTime, now));
|
}
|
|
@Override
|
public void finishExecution(Long id, Integer lastResult, Long lastDiagnosisId, String lastMessage, Date finishTime, Date nextRunTime) {
|
if (id == null) {
|
return;
|
}
|
Date now = finishTime == null ? new Date() : finishTime;
|
this.update(new LambdaUpdateWrapper<AiDiagnosisPlan>()
|
.eq(AiDiagnosisPlan::getId, id)
|
.set(AiDiagnosisPlan::getRunningFlag, 0)
|
.set(AiDiagnosisPlan::getLastResult, lastResult)
|
.set(AiDiagnosisPlan::getLastDiagnosisId, lastDiagnosisId)
|
.set(AiDiagnosisPlan::getLastRunTime, now)
|
.set(AiDiagnosisPlan::getNextRunTime, nextRunTime)
|
.set(AiDiagnosisPlan::getLastMessage, lastMessage)
|
.set(AiDiagnosisPlan::getUpdateTime, now));
|
}
|
}
|