SysJobService.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. namespace Admin.NET.Core.Service;
  2. /// <summary>
  3. /// 系统作业任务服务
  4. /// </summary>
  5. [ApiDescriptionSettings(Order = 188)]
  6. public class SysJobService : IDynamicApiController, ITransient
  7. {
  8. private readonly SqlSugarRepository<SysJobDetail> _sysJobDetailRep;
  9. private readonly SqlSugarRepository<SysJobTrigger> _sysJobTriggerRep;
  10. private readonly SqlSugarRepository<SysJobCluster> _sysJobClusterRep;
  11. private readonly ISchedulerFactory _schedulerFactory;
  12. public SysJobService(SqlSugarRepository<SysJobDetail> sysJobDetailRep,
  13. SqlSugarRepository<SysJobTrigger> sysJobTriggerRep,
  14. SqlSugarRepository<SysJobCluster> sysJobClusterRep,
  15. ISchedulerFactory schedulerFactory)
  16. {
  17. _sysJobDetailRep = sysJobDetailRep;
  18. _sysJobTriggerRep = sysJobTriggerRep;
  19. _sysJobClusterRep = sysJobClusterRep;
  20. _schedulerFactory = schedulerFactory;
  21. }
  22. /// <summary>
  23. /// 获取作业分页列表
  24. /// </summary>
  25. [HttpGet("/sysJob/page")]
  26. public async Task<SqlSugarPagedList<JobOutput>> GetJobPage([FromQuery] PageJobInput input)
  27. {
  28. var jobDetails = await _sysJobDetailRep.AsQueryable()
  29. .WhereIF(!string.IsNullOrWhiteSpace(input.JobId), u => u.JobId.Contains(input.JobId))
  30. .WhereIF(!string.IsNullOrWhiteSpace(input.Description), u => u.Description.Contains(input.Description))
  31. .Select(d => new JobOutput
  32. {
  33. JobDetail = d,
  34. }).ToPagedListAsync(input.Page, input.PageSize);
  35. await _sysJobDetailRep.AsSugarClient().ThenMapperAsync(jobDetails.Items, async u =>
  36. {
  37. u.JobTriggers = await _sysJobTriggerRep.GetListAsync(t => t.JobId == u.JobDetail.JobId);
  38. });
  39. return jobDetails;
  40. }
  41. /// <summary>
  42. /// 添加作业
  43. /// </summary>
  44. /// <returns></returns>
  45. [HttpPost("/sysJob/detailAdd")]
  46. public async Task AddJobDetail(AddJobDetailInput input)
  47. {
  48. var isExist = await _sysJobDetailRep.IsAnyAsync(u => u.JobId == input.JobId && u.Id != input.Id);
  49. if (isExist)
  50. throw Oops.Oh(ErrorCodeEnum.D1006);
  51. await _sysJobDetailRep.UpdateAsync(input.Adapt<SysJobDetail>());
  52. }
  53. /// <summary>
  54. /// 更新作业
  55. /// </summary>
  56. /// <returns></returns>
  57. [HttpPost("/sysJob/detailUpdate")]
  58. public async Task UpdateJobDetail(UpdateJobDetailInput input)
  59. {
  60. var isExist = await _sysJobDetailRep.IsAnyAsync(u => u.JobId == input.JobId && u.Id != input.Id);
  61. if (isExist)
  62. throw Oops.Oh(ErrorCodeEnum.D1006);
  63. await _sysJobDetailRep.UpdateAsync(input.Adapt<SysJobDetail>());
  64. }
  65. /// <summary>
  66. /// 删除作业
  67. /// </summary>
  68. /// <returns></returns>
  69. [HttpPost("/sysJob/detailDelete")]
  70. public async Task<ScheduleResult> DeleteJobDetail(DeleteJobDetailInput input)
  71. {
  72. await _sysJobDetailRep.DeleteAsync(u => u.JobId == input.JobId);
  73. await _sysJobTriggerRep.DeleteAsync(u => u.JobId == input.JobId);
  74. var schedulerResult = _schedulerFactory.TryRemoveJob(input.JobId, out _);
  75. return await Task.FromResult(schedulerResult);
  76. }
  77. /// <summary>
  78. /// 获取触发器列表
  79. /// </summary>
  80. [HttpGet("/sysJob/triggerList")]
  81. public async Task<List<SysJobTrigger>> GetJobTriggerList([FromQuery] JobDetailInput input)
  82. {
  83. return await _sysJobTriggerRep.AsQueryable()
  84. .WhereIF(!string.IsNullOrWhiteSpace(input.JobId), u => u.JobId.Contains(input.JobId))
  85. .ToListAsync();
  86. }
  87. /// <summary>
  88. /// 添加作业
  89. /// </summary>
  90. /// <returns></returns>
  91. [HttpPost("/sysJob/triggerAdd")]
  92. public async Task AddJobTrigger(AddJobTriggerInput input)
  93. {
  94. var isExist = await _sysJobDetailRep.IsAnyAsync(u => u.JobId == input.JobId && u.Id != input.Id);
  95. if (isExist)
  96. throw Oops.Oh(ErrorCodeEnum.D1006);
  97. await _sysJobDetailRep.UpdateAsync(input.Adapt<SysJobDetail>());
  98. }
  99. /// <summary>
  100. /// 更新触发器
  101. /// </summary>
  102. /// <returns></returns>
  103. [HttpPost("/sysJob/triggerUpdate")]
  104. public async Task UpdateJobTrigger(UpdateJobTriggerInput input)
  105. {
  106. var isExist = await _sysJobDetailRep.IsAnyAsync(u => u.JobId == input.JobId && u.Id != input.Id);
  107. if (isExist)
  108. throw Oops.Oh(ErrorCodeEnum.D1006);
  109. await _sysJobDetailRep.UpdateAsync(input.Adapt<SysJobDetail>());
  110. }
  111. /// <summary>
  112. /// 删除触发器
  113. /// </summary>
  114. /// <returns></returns>
  115. [HttpPost("/sysJob/triggerDelete")]
  116. public async Task DeleteJobTrigger(DeleteJobTriggerInput input)
  117. {
  118. await _sysJobTriggerRep.DeleteAsync(u => u.JobId == input.JobId);
  119. }
  120. /// <summary>
  121. /// 获取集群列表
  122. /// </summary>
  123. [HttpGet("/sysJob/clusterList")]
  124. public async Task<List<SysJobCluster>> GetJobClusterList()
  125. {
  126. return await _sysJobClusterRep.GetListAsync();
  127. }
  128. }