|
@@ -1,119 +0,0 @@
|
|
-package com.mooctest.crowd.site.service.impl;
|
|
|
|
-
|
|
|
|
-import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
|
|
|
|
-import com.mooctest.crowd.site.service.ThemeSchedulerService;
|
|
|
|
-import com.mooctest.crowd.site.service.ThemeSchedulerTaskService;
|
|
|
|
-import com.mooctest.crowd.site.service.ThemeStatusService;
|
|
|
|
-import com.mooctest.crowd.site.service.ThemeStatusTaskService;
|
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
-import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
|
|
|
|
-import org.springframework.scheduling.support.CronTrigger;
|
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
|
-
|
|
|
|
-import java.text.SimpleDateFormat;
|
|
|
|
-import java.util.Date;
|
|
|
|
-import java.util.Locale;
|
|
|
|
-import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
-import java.util.concurrent.ScheduledFuture;
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * @program: crowd
|
|
|
|
- * @author: hanyuwei
|
|
|
|
- * @create: 2020-07-13 11:30
|
|
|
|
- **/
|
|
|
|
-@Service
|
|
|
|
-public class ThemeSchedulerTaskServiceImpl implements ThemeSchedulerTaskService {
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- @Autowired
|
|
|
|
- private ThemeStatusTaskService themeStatusTaskService;
|
|
|
|
-
|
|
|
|
- private ConcurrentHashMap<CrowdTestTask, ThemeScheduler> map = new ConcurrentHashMap<>();
|
|
|
|
- @Override
|
|
|
|
- public boolean createNewThemeScheduler(CrowdTestTask crowdTestTask) {
|
|
|
|
- if(! this.map.containsKey(crowdTestTask)) {
|
|
|
|
- String cronExp = this.generateNextCronExp(crowdTestTask);
|
|
|
|
- if(cronExp==null){
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
- ThemeScheduler crowdTestTaskScheduler = new ThemeScheduler(crowdTestTask, cronExp);
|
|
|
|
- crowdTestTaskScheduler.startCron();
|
|
|
|
- map.put(crowdTestTask, crowdTestTaskScheduler);
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public String generateNextCronExp(CrowdTestTask crowdTestTask) {
|
|
|
|
- String cronExp = null;
|
|
|
|
- String dateFormat="ss mm HH dd MM EE";
|
|
|
|
- SimpleDateFormat sdf = new SimpleDateFormat(dateFormat, Locale.US);
|
|
|
|
- Date now = new Date();
|
|
|
|
- if(now.before(crowdTestTask.getCreateTime())) {
|
|
|
|
- cronExp = sdf.format(crowdTestTask.getCreateTime());
|
|
|
|
- } else if(now.before(crowdTestTask.getDeadTime())){
|
|
|
|
- cronExp = sdf.format(crowdTestTask.getDeadTime());
|
|
|
|
- }
|
|
|
|
- return cronExp;
|
|
|
|
- }
|
|
|
|
- @Override
|
|
|
|
- public boolean cancelThemeScheduler(CrowdTestTask crowdTestTask) {
|
|
|
|
- if(this.map.containsKey(crowdTestTask)) {
|
|
|
|
- ThemeScheduler crowdTestTaskScheduler = map.get(crowdTestTask);
|
|
|
|
- crowdTestTaskScheduler.stopCron();
|
|
|
|
- map.remove(crowdTestTask);
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private class ThemeScheduler {
|
|
|
|
- private ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
|
|
|
|
- private ScheduledFuture<?> future;
|
|
|
|
- private CrowdTestTask crowdTestTask = null;
|
|
|
|
- private String cronExp = null;
|
|
|
|
-
|
|
|
|
- ThemeScheduler() {}
|
|
|
|
-
|
|
|
|
- ThemeScheduler (CrowdTestTask crowdTestTask, String cronExp) {
|
|
|
|
- this.crowdTestTask = crowdTestTask;
|
|
|
|
- this.cronExp = cronExp;
|
|
|
|
- this.threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
|
|
|
|
- this.threadPoolTaskScheduler.initialize();
|
|
|
|
- }
|
|
|
|
- public String startCron() {
|
|
|
|
- future = this.threadPoolTaskScheduler.schedule(new MyRunnable(this.crowdTestTask), new CronTrigger(this.cronExp));
|
|
|
|
- return "startCron";
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public String stopCron() {
|
|
|
|
- if (future != null) {
|
|
|
|
- future.cancel(true);
|
|
|
|
- }
|
|
|
|
- return "stopCron";
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private class MyRunnable implements Runnable {
|
|
|
|
-
|
|
|
|
- private CrowdTestTask crowdTestTask;
|
|
|
|
-
|
|
|
|
- public MyRunnable() {}
|
|
|
|
-
|
|
|
|
- public MyRunnable (CrowdTestTask crowdTestTask) {
|
|
|
|
- this.crowdTestTask = crowdTestTask;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public void run() {
|
|
|
|
- System.out.println("run111 ");
|
|
|
|
- Integer result = themeStatusTaskService.updateStatus(this.crowdTestTask);
|
|
|
|
- map.remove(crowdTestTask);
|
|
|
|
- if(result.equals(CrowdTestTask.HAS_CREATED) || result.equals(CrowdTestTask.HAS_RELEASED)) {
|
|
|
|
- System.out.println("run22 ");
|
|
|
|
- createNewThemeScheduler(crowdTestTask);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-}
|
|
|