From a4dcca761cfe73acca8b9dc0a0d664451d5cc89a Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期五, 11 六月 2021 14:15:31 +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