TaskService.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. using System.Linq;
  2. using System.Threading.Tasks;
  3. using ZhonTai.Admin.Core.Dto;
  4. using ZhonTai.Admin.Services.TaskScheduler.Dto;
  5. using ZhonTai.Admin.Domain.Task.Dto;
  6. using ZhonTai.DynamicApi;
  7. using ZhonTai.DynamicApi.Attributes;
  8. using Microsoft.AspNetCore.Mvc;
  9. using ZhonTai.Admin.Core.Consts;
  10. using FreeScheduler;
  11. using Microsoft.AspNetCore.Mvc.ModelBinding;
  12. using ZhonTai.Common.Extensions;
  13. using ZhonTai.Admin.Repositories;
  14. namespace ZhonTai.Admin.Services.TaskScheduler;
  15. /// <summary>
  16. /// 任务服务
  17. /// </summary>
  18. [DynamicApi(Area = AdminConsts.AreaName)]
  19. public class TaskService : BaseService, ITaskService, IDynamicApi
  20. {
  21. private ITaskRepository _taskInfoRepository => LazyGetRequiredService<ITaskRepository>();
  22. public TaskService()
  23. {
  24. }
  25. /// <summary>
  26. /// 查询任务
  27. /// </summary>
  28. /// <param name="id"></param>
  29. /// <returns></returns>
  30. public async Task<IResultOutput> GetAsync(long id)
  31. {
  32. var result = await _taskInfoRepository.GetAsync<TaskGetOutput>(id);
  33. return ResultOutput.Ok(result);
  34. }
  35. /// <summary>
  36. /// 查询任务列表
  37. /// </summary>
  38. /// <param name="input"></param>
  39. /// <returns></returns>
  40. [HttpPost]
  41. public async Task<IResultOutput> GetPageAsync(PageInput<TaskGetPageDto> input)
  42. {
  43. var topic = input.Filter?.Topic;
  44. var list = await _taskInfoRepository.Select
  45. .WhereDynamicFilter(input.DynamicFilter)
  46. .WhereIf(topic.NotNull(), a => a.Topic.Contains(topic))
  47. .Count(out var total)
  48. .OrderByDescending(true, c => c.Id)
  49. .Page(input.CurrentPage, input.PageSize)
  50. .ToListAsync<TaskListOutput>();
  51. var data = new PageOutput<TaskListOutput>()
  52. {
  53. List = list,
  54. Total = total
  55. };
  56. return ResultOutput.Ok(data);
  57. }
  58. /// <summary>
  59. /// 新增
  60. /// </summary>
  61. /// <param name="input"></param>
  62. /// <returns></returns>
  63. public IResultOutput Add(TaskAddInput input)
  64. {
  65. if (input.IntervalArgument.IsNull())
  66. {
  67. return ResultOutput.NotOk("请输入定时参数");
  68. }
  69. var scheduler = LazyGetRequiredService<Scheduler>();
  70. if(input.Interval == TaskInterval.SEC && input.Round == -1)
  71. {
  72. scheduler.AddTask(input.Topic, input.Body, input.Round, input.IntervalArgument.ToInt());
  73. }
  74. else if (input.Interval == TaskInterval.SEC && input.Round > 0)
  75. {
  76. int[] seconds = System.Array.Empty<int>();
  77. var intervalArguments = input.IntervalArgument.Split(",");
  78. foreach(var arg in intervalArguments)
  79. {
  80. seconds.Append(arg.ToInt());
  81. }
  82. scheduler.AddTask(input.Topic, input.Body, seconds);
  83. }
  84. else if (input.Interval == TaskInterval.RunOnDay && input.Round > 0)
  85. {
  86. scheduler.AddTaskRunOnDay(input.Topic, input.Body, input.Round, input.IntervalArgument);
  87. }
  88. else if (input.Interval == TaskInterval.RunOnWeek && input.Round > 0)
  89. {
  90. scheduler.AddTaskRunOnWeek(input.Topic, input.Body, input.Round, input.IntervalArgument);
  91. }
  92. else if (input.Interval == TaskInterval.RunOnMonth && input.Round > 0)
  93. {
  94. scheduler.AddTaskRunOnMonth(input.Topic, input.Body, input.Round, input.IntervalArgument);
  95. }
  96. else if (input.Interval == TaskInterval.Custom && input.Round > 0)
  97. {
  98. scheduler.AddTaskCustom(input.Topic, input.Body, input.IntervalArgument);
  99. }
  100. return ResultOutput.Ok();
  101. }
  102. /// <summary>
  103. /// 修改
  104. /// </summary>
  105. /// <param name="input"></param>
  106. /// <returns></returns>
  107. public async Task<IResultOutput> UpdateAsync(TaskUpdateInput input)
  108. {
  109. if (input.Id.IsNull())
  110. {
  111. return ResultOutput.NotOk();
  112. }
  113. var entity = await _taskInfoRepository.GetAsync(a => a.Id == input.Id);
  114. if (entity != null && entity.Id.NotNull())
  115. {
  116. return ResultOutput.NotOk("任务不存在!");
  117. }
  118. Mapper.Map(input, entity);
  119. await _taskInfoRepository.UpdateAsync(entity);
  120. return ResultOutput.Ok();
  121. }
  122. /// <summary>
  123. /// 暂停任务
  124. /// </summary>
  125. /// <param name="id"></param>
  126. /// <returns></returns>
  127. public IResultOutput Pause([BindRequired]string id)
  128. {
  129. if (id.IsNull())
  130. {
  131. return ResultOutput.NotOk();
  132. }
  133. var scheduler = LazyGetRequiredService<Scheduler>();
  134. scheduler.PauseTask(id);
  135. return ResultOutput.Ok();
  136. }
  137. /// <summary>
  138. /// 启动任务
  139. /// </summary>
  140. /// <param name="id"></param>
  141. /// <returns></returns>
  142. public IResultOutput Resume([BindRequired] string id)
  143. {
  144. if (id.IsNull())
  145. {
  146. return ResultOutput.NotOk();
  147. }
  148. var scheduler = LazyGetRequiredService<Scheduler>();
  149. scheduler.ResumeTask(id);
  150. return ResultOutput.Ok();
  151. }
  152. /// <summary>
  153. /// 执行任务
  154. /// </summary>
  155. /// <param name="id"></param>
  156. /// <returns></returns>
  157. public IResultOutput Run([BindRequired] string id)
  158. {
  159. if (id.IsNull())
  160. {
  161. return ResultOutput.NotOk();
  162. }
  163. var scheduler = LazyGetRequiredService<Scheduler>();
  164. scheduler.RunNowTask(id);
  165. return ResultOutput.Ok();
  166. }
  167. /// <summary>
  168. /// 删除任务
  169. /// </summary>
  170. /// <param name="id"></param>
  171. /// <returns></returns>
  172. public IResultOutput Delete([BindRequired] string id)
  173. {
  174. if (id.IsNull())
  175. {
  176. return ResultOutput.NotOk();
  177. }
  178. var scheduler = LazyGetRequiredService<Scheduler>();
  179. scheduler.RemoveTask(id);
  180. return ResultOutput.Ok();
  181. }
  182. }