From 335896aadabbba8b58cdd0d3d77637860083a861 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期四, 20 五月 2021 20:10:20 +0800
Subject: [PATCH] 优化代码

---
 service-job/src/main/java/com/java110/job/smo/impl/TaskInnerServiceSMOImpl.java |  134 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 129 insertions(+), 5 deletions(-)

diff --git a/service-job/src/main/java/com/java110/job/smo/impl/TaskInnerServiceSMOImpl.java b/service-job/src/main/java/com/java110/job/smo/impl/TaskInnerServiceSMOImpl.java
old mode 100644
new mode 100755
index d7c6213..6bacb97
--- a/service-job/src/main/java/com/java110/job/smo/impl/TaskInnerServiceSMOImpl.java
+++ b/service-job/src/main/java/com/java110/job/smo/impl/TaskInnerServiceSMOImpl.java
@@ -2,21 +2,37 @@
 
 
 import com.java110.core.base.smo.BaseServiceSMO;
-import com.java110.core.smo.task.ITaskInnerServiceSMO;
-import com.java110.core.smo.user.IUserInnerServiceSMO;
+import com.java110.intf.job.ITaskInnerServiceSMO;
+import com.java110.intf.user.IUserInnerServiceSMO;
 import com.java110.dto.PageDto;
 import com.java110.dto.task.TaskDto;
 import com.java110.dto.task.TaskTemplateDto;
 import com.java110.dto.task.TaskTemplateSpecDto;
+import com.java110.dto.taskAttr.TaskAttrDto;
 import com.java110.dto.user.UserDto;
+import com.java110.job.dao.ITaskAttrServiceDao;
 import com.java110.job.dao.ITaskServiceDao;
+import com.java110.job.quartz.TaskSystemJob;
+import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
+import org.quartz.CronScheduleBuilder;
+import org.quartz.CronTrigger;
+import org.quartz.JobBuilder;
+import org.quartz.JobDetail;
+import org.quartz.JobKey;
+import org.quartz.Scheduler;
+import org.quartz.TriggerBuilder;
+import org.quartz.TriggerKey;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @ClassName FloorInnerServiceSMOImpl
@@ -29,8 +45,22 @@
 @RestController
 public class TaskInnerServiceSMOImpl extends BaseServiceSMO implements ITaskInnerServiceSMO {
 
+    private static final Logger logger = LoggerFactory.getLogger(TaskInnerServiceSMOImpl.class);
+
+    private static final String defaultCronExpression = "0 * * * * ?";// 姣忓垎閽熸墽琛屼竴娆�
+
+    private static final String prefixJobName = "task_"; // job
+    private static final String triggerNames = "taskToData_"; // job
+
+    @Autowired
+    private Scheduler scheduler;
+
+
     @Autowired
     private ITaskServiceDao taskServiceDaoImpl;
+
+    @Autowired
+    private ITaskAttrServiceDao taskAttrServiceDaoImpl;
 
     @Autowired
     private IUserInnerServiceSMO userInnerServiceSMOImpl;
@@ -103,7 +133,6 @@
     }
 
 
-
     @Override
     public List<TaskTemplateDto> queryTaskTemplate(@RequestBody TaskTemplateDto taskTemplateDto) {
 
@@ -121,12 +150,10 @@
     }
 
 
-
     @Override
     public int queryTaskTemplateSpecCount(@RequestBody TaskTemplateSpecDto taskTemplateSpecDto) {
         return taskServiceDaoImpl.queryTaskTemplateSpecCount(BeanConvertUtil.beanCovertMap(taskTemplateSpecDto));
     }
-
 
 
     @Override
@@ -145,8 +172,105 @@
         return taskTemplates;
     }
 
+    /**
+     * 鍚姩浠诲姟
+     *
+     * @param taskDto
+     * @return
+     */
+    public int startTask(@RequestBody TaskDto taskDto) {
+        List<TaskAttrDto> attrDtos = BeanConvertUtil.covertBeanList(taskAttrServiceDaoImpl.getTaskAttrInfo(BeanConvertUtil.beanCovertMap(taskDto)),
+                TaskAttrDto.class);
+        Map info = new HashMap();
+        info.put("templateId", taskDto.getTemplateId());
+        List<TaskTemplateDto> taskTemplateDtos = BeanConvertUtil.covertBeanList(taskServiceDaoImpl.getTaskTemplateInfo(info), TaskTemplateDto.class);
 
+        Assert.listOnlyOne(taskTemplateDtos, "妯℃澘涓嶅瓨鍦ㄦ垨瀛樺湪澶氫釜");
 
+        taskDto.setTaskTemplateDto(taskTemplateDtos.get(0));
+        taskDto.setTaskAttr(attrDtos);
+
+        try {
+            String cronExpression = taskDto.getTaskCron();// 濡傛灉娌℃湁閰嶇疆鍒欙紝姣忎竴鍒嗚繍琛屼竴娆�
+
+            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);
+
+            String jobName = prefixJobName + taskDto.getTaskId();
+
+            String triggerName = triggerNames + taskDto.getTaskId();
+
+            //璁剧疆浠诲姟鍚嶇О
+            JobKey jobKey = new JobKey(jobName, TaskSystemJob.JOB_GROUP_NAME);
+            JobDetail jobDetail = scheduler.getJobDetail(jobKey);
+
+            if (jobDetail != null) {
+                return 0;
+            }
+
+            String taskCfgName = taskDto.getTaskName();
+            JobDetail warnJob = JobBuilder.newJob(TaskSystemJob.class).withIdentity(jobName, TaskSystemJob.JOB_GROUP_NAME).withDescription("浠诲姟鍚姩").build();
+
+            warnJob.getJobDataMap().put(TaskSystemJob.JOB_DATA_CONFIG_NAME, taskCfgName);
+
+            warnJob.getJobDataMap().put(TaskSystemJob.JOB_DATA_TASK_ID, taskDto.getTaskId());
+            warnJob.getJobDataMap().put(TaskSystemJob.JOB_DATA_TASK, taskDto);
+            warnJob.getJobDataMap().put(TaskSystemJob.JOB_DATA_TASK_ATTR, taskDto);
+
+            // 瑙﹀彂鏃堕棿鐐�
+            CronTrigger warnTrigger = TriggerBuilder.newTrigger().withIdentity(triggerName, triggerName + "_group").withSchedule(cronScheduleBuilder).build();
+
+            // 閿欒繃鎵ц鍚庯紝绔嬪嵆鎵ц
+            //warnTrigger(CronTrigger.MISFIRE_INSTRUCTION_FIRE_ONCE_NOW);
+            //浜ょ敱Scheduler瀹夋帓瑙﹀彂
+            scheduler.scheduleJob(warnJob, warnTrigger);
+            Map paramIn = new HashMap();
+            paramIn.put("taskId", taskDto.getTaskId());
+            paramIn.put("state", "002");
+            paramIn.put("statusCd", "0");
+            taskServiceDaoImpl.updateTaskInfoInstance(paramIn);
+
+        } catch (Exception e) {
+            logger.error("鍚姩渚﹀惉澶辫触", e);
+            return 0;
+        }
+        return 1;
+    }
+
+    /**
+     * 鍋滄浠诲姟
+     *
+     * @param taskDto
+     * @return
+     */
+    public int stopTask(@RequestBody TaskDto taskDto) {
+
+        try {
+            String jobName = prefixJobName + taskDto.getTaskId();
+
+            String triggerName = prefixJobName + taskDto.getTaskId();
+
+            TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TaskSystemJob.JOB_GROUP_NAME);
+            // 鍋滄瑙﹀彂鍣�
+            scheduler.pauseTrigger(triggerKey);
+            // 绉婚櫎瑙﹀彂鍣�
+            scheduler.unscheduleJob(triggerKey);
+
+            JobKey jobKey = new JobKey(jobName, TaskSystemJob.JOB_GROUP_NAME);
+            // 鍒犻櫎浠诲姟
+            scheduler.deleteJob(jobKey);
+
+            Map paramIn = new HashMap();
+            paramIn.put("taskId", taskDto.getTaskId());
+            paramIn.put("state", "001");
+            paramIn.put("statusCd", "0");
+            taskServiceDaoImpl.updateTaskInfoInstance(paramIn);
+
+        } catch (Exception e) {
+            logger.error("鍚姩渚﹀惉澶辫触", e);
+            return 0;
+        }
+        return 1;
+    }
 
 
     public ITaskServiceDao getTaskServiceDaoImpl() {

--
Gitblit v1.8.0