此需求 问题在于 如何在task 和启动任务的位置 进行互动
import net.qiyuesuo.sdk.api.ContractService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Resource;
import java.util.concurrent.ScheduledThreadPoolExecutor;
/**
* @ClassName ContractTask
* @Description
* @Date: 2021/3/19 16:26
* @Version 1.0
**/
public class ContractTask implements Runnable {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource
private ReportDAO reportDAO;
@Resource
private SampleCertificateDAO sampleCertificateDao;
@Resource
private ContractService contractService;
//报告id
private String reportId;
//证书id
private String certificateId;
//合同id
private Long contractId;
public ScheduledThreadPoolExecutor scheduled = null; //(重点在这里)
public ScheduledThreadPoolExecutor getScheduled() {
return scheduled;
}
public ContractTask(){}
public ContractTask(String reportId, String certificateId, Long contractId) {
this.reportId = reportId;
this.certificateId = certificateId;
this.contractId = contractId;
this.scheduled = new ScheduledThreadPoolExecutor(1); //(重点在这里)
}
@Override
public void run() {
logger.info("30分钟后触发合同销毁任务");
Boolean isDel = false;
if(EmptyUtil.isNotEmpty(reportId)){
SampleReport sampleReport = reportDAO.selectById(reportId);
if(!sampleReport.getIsApproval().equals("1")){
//如果报告还没有被批准则作废合同,删除合同,删除本地合同
isDel = true;
}
}
if(EmptyUtil.isNotEmpty(certificateId)){
Certificate certificate = sampleCertificateDao.selectById(certificateId);
if(!certificate.getIsApproval().equals("1")){
//如果证书还没有被批准则作废合同,删除合同,删除本地合同
isDel = true;
}
}
if(isDel){
try {
//销毁合同并删除
contractService.cencelContract(contractId, null, "手机端预览合同作废删除", true);
logger.info("30分钟无操作,合同已销毁");
}catch (Exception e){
e.getStackTrace();
}
}
scheduled.shutdown(); //关闭线程(重点在这里)
}
}
//若30分钟之后 报告或者证书没有审批通过,则作废合同→删除合同→删除本地合同pdf→关闭销毁进程
ContractTask contractTask = new ContractTask(reportRequest.getReportId(),"",contractId);
contractTask.getScheduled().schedule(contractTask, 30,TimeUnit.MINUTES); //(重点在这里)