job.go 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. package apis
  2. import (
  3. cJobs "IotAdmin/common/jobs"
  4. "IotAdmin/common/permission"
  5. "IotAdmin/core/sdk"
  6. "fmt"
  7. "net/http"
  8. "IotAdmin/core/sdk/api"
  9. "IotAdmin/core/sdk/pkg/jwt-auth/user"
  10. _ "IotAdmin/core/sdk/pkg/response"
  11. "github.com/gin-gonic/gin"
  12. "IotAdmin/app/schedule/models"
  13. "IotAdmin/app/schedule/service"
  14. "IotAdmin/app/schedule/service/dto"
  15. )
  16. // SysJobApi 定时任务接口
  17. type SysJobApi struct {
  18. api.Api
  19. }
  20. // GetPage 获取定时任务列表
  21. // @Summary 获取定时任务列表
  22. // @Description 获取定时任务列表
  23. // @Tags 定时任务管理
  24. // @Param jobName query string false "名称"
  25. // @Param jobGroup query string false "任务分组"
  26. // @Param jobType query int false "调用类型"
  27. // @Param invokeTarget query string false "调用目标"
  28. // @Param status query int false "状态"
  29. // @Param pageSize query int false "页条数"
  30. // @Param pageIndex query int false "页码"
  31. // @Success 200 {object} response.Response{data=response.Page{list=[]models.SysJob}} "{"code": 200, "data": [...]}"
  32. // @Router /api/sys-job [get]
  33. // @Security Bearer
  34. func (e SysJobApi) GetPage(c *gin.Context) {
  35. req := dto.SysJobGetPageReq{}
  36. s := service.SysJobService{}
  37. err := e.MakeContext(c).
  38. MakeOrm().
  39. Bind(&req).
  40. MakeService(&s.Service).
  41. Errors
  42. if err != nil {
  43. e.Logger.Error(err)
  44. e.Error(500, err, err.Error())
  45. return
  46. }
  47. p := permission.GetPermissionFromContext(c)
  48. list := make([]models.SysJob, 0)
  49. var count int64
  50. err = s.GetPage(&req, p, &list, &count)
  51. if err != nil {
  52. e.Error(500, err, fmt.Sprintf("获取定时任务失败,\r\n失败信息 %s", err.Error()))
  53. return
  54. }
  55. e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
  56. }
  57. // Get 获取定时任务
  58. // @Summary 获取定时任务
  59. // @Description 获取定时任务
  60. // @Tags 定时任务管理
  61. // @Param id path int false "id"
  62. // @Success 200 {object} response.Response{data=models.SysJob} "{"code": 200, "data": [...]}"
  63. // @Router /api/sys-job/{id} [get]
  64. // @Security Bearer
  65. func (e SysJobApi) Get(c *gin.Context) {
  66. req := dto.SysJobGetReq{}
  67. s := service.SysJobService{}
  68. err := e.MakeContext(c).
  69. MakeOrm().
  70. Bind(&req).
  71. MakeService(&s.Service).
  72. Errors
  73. if err != nil {
  74. e.Logger.Error(err)
  75. e.Error(500, err, err.Error())
  76. return
  77. }
  78. var object models.SysJob
  79. p := permission.GetPermissionFromContext(c)
  80. err = s.Get(&req, p, &object)
  81. if err != nil {
  82. e.Error(500, err, fmt.Sprintf("获取定时任务失败,\r\n失败信息 %s", err.Error()))
  83. return
  84. }
  85. e.OK(object, "查询成功")
  86. }
  87. // Insert 添加定时任务
  88. // @Summary 添加定时任务
  89. // @Description 添加定时任务
  90. // @Tags 定时任务管理
  91. // @Accept application/json
  92. // @Product application/json
  93. // @Param data body dto.SysJobInsertReq true "data"
  94. // @Success 200 {object} response.Response "{"code": 200, "message": "添加成功"}"
  95. // @Router /api/sys-job [post]
  96. // @Security Bearer
  97. func (e SysJobApi) Insert(c *gin.Context) {
  98. req := dto.SysJobInsertReq{}
  99. s := service.SysJobService{}
  100. err := e.MakeContext(c).
  101. MakeOrm().
  102. Bind(&req).
  103. MakeService(&s.Service).
  104. Errors
  105. if err != nil {
  106. e.Logger.Error(err)
  107. e.Error(500, err, err.Error())
  108. return
  109. }
  110. // 设置创建人
  111. req.SetCreateBy(user.GetUserId(c))
  112. err = s.Insert(&req)
  113. if err != nil {
  114. e.Error(500, err, fmt.Sprintf("添加定时任务失败,\r\n失败信息 %s", err.Error()))
  115. return
  116. }
  117. e.OK(req.GetId(), "添加成功")
  118. }
  119. // Update 修改定时任务
  120. // @Summary 修改定时任务
  121. // @Description 修改定时任务
  122. // @Tags 定时任务管理
  123. // @Accept application/json
  124. // @Product application/json
  125. // @Param id path int true "id"
  126. // @Param data body dto.SysJobUpdateReq true "body"
  127. // @Success 200 {object} response.Response "{"code": 200, "message": "修改成功"}"
  128. // @Router /api/sys-job/{id} [put]
  129. // @Security Bearer
  130. func (e SysJobApi) Update(c *gin.Context) {
  131. req := dto.SysJobUpdateReq{}
  132. s := service.SysJobService{}
  133. err := e.MakeContext(c).
  134. MakeOrm().
  135. Bind(&req).
  136. MakeService(&s.Service).
  137. Errors
  138. if err != nil {
  139. e.Logger.Error(err)
  140. e.Error(500, err, err.Error())
  141. return
  142. }
  143. req.SetUpdateBy(user.GetUserId(c))
  144. p := permission.GetPermissionFromContext(c)
  145. err = s.Update(&req, p)
  146. if err != nil {
  147. e.Error(500, err, fmt.Sprintf("修改定时任务失败,\r\n失败信息 %s", err.Error()))
  148. return
  149. }
  150. e.OK(req.GetId(), "修改成功")
  151. }
  152. // Delete 删除定时任务
  153. // @Summary 删除定时任务
  154. // @Description 删除定时任务
  155. // @Tags 定时任务管理
  156. // @Param data body dto.SysJobDeleteReq true "body"
  157. // @Success 200 {object} response.Response "{"code": 200, "message": "删除成功"}"
  158. // @Router /api/sys-job [delete]
  159. // @Security Bearer
  160. func (e SysJobApi) Delete(c *gin.Context) {
  161. s := service.SysJobService{}
  162. req := dto.SysJobDeleteReq{}
  163. err := e.MakeContext(c).
  164. MakeOrm().
  165. Bind(&req).
  166. MakeService(&s.Service).
  167. Errors
  168. if err != nil {
  169. e.Logger.Error(err)
  170. e.Error(500, err, err.Error())
  171. return
  172. }
  173. // req.SetUpdateBy(user.GetUserId(c))
  174. p := permission.GetPermissionFromContext(c)
  175. err = s.Remove(&req, p)
  176. if err != nil {
  177. e.Error(500, err, fmt.Sprintf("删除定时任务失败,\r\n失败信息 %s", err.Error()))
  178. return
  179. }
  180. e.OK(req.GetId(), "删除成功")
  181. }
  182. // GetJobKeys 获取系统内的定时任务
  183. // @Summary 获取系统内的定时任务
  184. // @Description 获取系统内的定时任务
  185. // @Tags 定时任务管理
  186. // @Product application/json
  187. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  188. // @Router /api/sys-job/keys [get]
  189. // @Security Bearer
  190. func (e SysJobApi) GetJobKeys(c *gin.Context) {
  191. if err := e.MakeContext(c).Errors; err != nil {
  192. e.Logger.Error(err)
  193. e.Error(500, err, err.Error())
  194. return
  195. }
  196. result := cJobs.GetJobKeys()
  197. e.OK(result, "获取成功")
  198. }
  199. // Start 启动定时任务
  200. // @Summary 启动定时任务
  201. // @Description 启动定时任务
  202. // @Tags 定时任务管理
  203. // @Product application/json
  204. // @Param data body dto.SysJobInsertReq true "data"
  205. // @Success 200 {object} response.Response "{"code": 200, "message": "添加成功"}"
  206. // @Router /api/sys-job/start/{id} [post]
  207. // @Security Bearer
  208. func (e SysJobApi) Start(c *gin.Context) {
  209. s := service.SysJobService{}
  210. var v dto.SysJobGetReq
  211. err := e.MakeContext(c).
  212. MakeOrm().
  213. Bind(&v).
  214. MakeService(&s.Service).
  215. Errors
  216. if err != nil {
  217. e.Logger.Warnf("参数验证错误, error: %s", err)
  218. e.Error(http.StatusUnprocessableEntity, err, "参数验证失败")
  219. return
  220. }
  221. s.Cron = sdk.Runtime.GetCrontabKey(c.Request.Host)
  222. err = s.StartJob(&v)
  223. if err != nil {
  224. e.Logger.Errorf("GetCrontabKey error, %s", err.Error())
  225. e.Error(500, err, err.Error())
  226. return
  227. }
  228. e.OK(nil, s.Msg)
  229. }
  230. // Stop 停止定时任务
  231. // @Summary 停止定时任务
  232. // @Description 停止定时任务
  233. // @Tags 定时任务管理
  234. // @Product application/json
  235. // @Param data body dto.SysJobInsertReq true "data"
  236. // @Success 200 {object} response.Response "{"code": 200, "message": "添加成功"}"
  237. // @Router /api/sys-job/stop/{id} [post]
  238. // @Security Bearer
  239. func (e SysJobApi) Stop(c *gin.Context) {
  240. v := dto.SysJobGetReq{}
  241. s := service.SysJobService{}
  242. err := e.MakeContext(c).
  243. MakeOrm().
  244. Bind(&v).
  245. MakeService(&s.Service).
  246. Errors
  247. if err != nil {
  248. e.Logger.Error(err)
  249. return
  250. }
  251. s.Cron = sdk.Runtime.GetCrontabKey(c.Request.Host)
  252. err = s.StopJob(&v)
  253. if err != nil {
  254. e.Logger.Errorf("RemoveJob error, %s", err.Error())
  255. e.Error(500, err, "")
  256. return
  257. }
  258. e.OK(nil, s.Msg)
  259. }