|
@@ -0,0 +1,101 @@
|
|
|
+package llh.svs.core.services.schedule.service
|
|
|
+
|
|
|
+import gaf3.core.data.PageParam
|
|
|
+import gaf3.core.data.PagedData
|
|
|
+import gaf3.core.exception.BusinessError
|
|
|
+import gaf3.core.jpa.extension.findAll
|
|
|
+import gaf3.core.util.DataBeanHelper
|
|
|
+import llh.svs.core.services.schedule.dao.SvsScheduleTaskDAO
|
|
|
+import llh.svs.core.services.schedule.domain.ScheduleTaskForm
|
|
|
+import llh.svs.core.services.schedule.entity.SvsScheduleTask
|
|
|
+import llh.svs.core.services.schedule.support.ScheduleTaskStatus
|
|
|
+import llh.svs.core.services.schedule.support.ScheduleTaskWorker
|
|
|
+import org.springframework.beans.factory.annotation.Autowired
|
|
|
+import org.springframework.data.repository.findByIdOrNull
|
|
|
+import org.springframework.stereotype.Service
|
|
|
+import org.springframework.util.Assert
|
|
|
+import java.util.*
|
|
|
+import javax.annotation.PostConstruct
|
|
|
+
|
|
|
+
|
|
|
+@Service
|
|
|
+class SvsScheduleService(val dao: SvsScheduleTaskDAO) {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ lateinit var taskWorker: ScheduleTaskWorker
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建定时任务
|
|
|
+ * @param form 定时任务
|
|
|
+ */
|
|
|
+ fun create(form: ScheduleTaskForm): SvsScheduleTask {
|
|
|
+ val entity = SvsScheduleTask()
|
|
|
+ DataBeanHelper.Bean2Obj(form, entity)
|
|
|
+ entity.taskId = UUID.randomUUID().toString()
|
|
|
+ if (entity.status == ScheduleTaskStatus.ENABLED.status) {
|
|
|
+ taskWorker.startTask(entity)
|
|
|
+ }
|
|
|
+ return dao.save(entity)
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改定时任务
|
|
|
+ * @param id 任务ID
|
|
|
+ * @param form 定时任务
|
|
|
+ */
|
|
|
+ fun update(id: String?, form: ScheduleTaskForm): SvsScheduleTask {
|
|
|
+ val entity = fetch(id)
|
|
|
+ DataBeanHelper.Bean2Obj(form, entity, "taskId", "createdAt", "updatedAt")
|
|
|
+ taskWorker.stopTask(entity)
|
|
|
+ if (entity.status == ScheduleTaskStatus.ENABLED.status) {
|
|
|
+ taskWorker.startTask(entity)
|
|
|
+ }
|
|
|
+ return dao.save(entity)
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询定时任务列表
|
|
|
+ * @param filter 过滤条件
|
|
|
+ * @param pageParam 分页参数
|
|
|
+ */
|
|
|
+ fun find(filter: SvsScheduleTask, pageParam: PageParam, exact: Boolean = true): PagedData<SvsScheduleTask> {
|
|
|
+ val paged = dao.findAll(filter, pageParam.toPageRequest(), exact)
|
|
|
+ return PagedData(data = paged.content, total = paged.totalElements.toInt())
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 按照ID查询定时任务
|
|
|
+ * @param id 定时任务id
|
|
|
+ */
|
|
|
+ fun fetch(id: String?): SvsScheduleTask {
|
|
|
+ Assert.hasText(id, "任务ID不可为空")
|
|
|
+ return dao.findByIdOrNull(id) ?: throw BusinessError(BusinessError.ERR_DATA_NOTEXIST, "指定任务不存在")
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 取消定时任务
|
|
|
+ */
|
|
|
+ fun cancel(id: String?) {
|
|
|
+ val entity = dao.findByIdOrNull(id) ?: throw BusinessError(BusinessError.ERR_DATA_NOTEXIST, "指定任务不存在")
|
|
|
+ taskWorker.stopTask(entity)
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 手动执行一次定时任务
|
|
|
+ */
|
|
|
+ fun onceExecute(id: String?) {
|
|
|
+ val entity = dao.findByIdOrNull(id) ?: throw BusinessError(BusinessError.ERR_DATA_NOTEXIST, "指定任务不存在")
|
|
|
+ taskWorker.onceStart(entity)
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 初始化所有可执行定时任务
|
|
|
+ */
|
|
|
+ @PostConstruct
|
|
|
+ fun initScheduleTask() {
|
|
|
+ dao.findByStatus(ScheduleTaskStatus.ENABLED.status).forEach {
|
|
|
+ taskWorker.startTask(it)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|