first commit
This commit is contained in:
263
controllers/cron_controller.go
Normal file
263
controllers/cron_controller.go
Normal file
@@ -0,0 +1,263 @@
|
||||
// Package controllers/pms_controller.go
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"Quincy_admin/schemas"
|
||||
"Quincy_admin/services"
|
||||
"Quincy_admin/utils"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type CronController struct {
|
||||
CronService *services.CronService
|
||||
}
|
||||
|
||||
func NewCronController(CronService *services.CronService) *CronController {
|
||||
return &CronController{CronService: CronService}
|
||||
}
|
||||
|
||||
// GetCronList 定时任务列表
|
||||
// @Summary 定时任务列表
|
||||
// @Description 定时任务列表
|
||||
// @Tags 任务管理
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param req body schemas.CronListRequest true "定时任务"
|
||||
// @Success 200 {object} schemas.CronListResponse "定时任务"
|
||||
// @Failure 400 {object} utils.Response
|
||||
// @Failure 404 {object} utils.Response
|
||||
// @Failure 500 {object} utils.Response
|
||||
// @Router /cron/list [post]
|
||||
// @Security ApiKeyAuth
|
||||
func (c *CronController) GetCronList(ctx *gin.Context) {
|
||||
var req schemas.CronListRequest
|
||||
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
utils.Error(ctx, http.StatusBadRequest, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
if req.PageIndex <= 0 || req.PageSize <= 0 || req.PageSize > 100 {
|
||||
utils.Error(ctx, http.StatusBadRequest, "分页参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
items, total, err := c.CronService.GetCronList(&req)
|
||||
if err != nil {
|
||||
fmt.Println("获取用户列表时出错:", err)
|
||||
utils.Error(ctx, http.StatusInternalServerError, "获取用户列表失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response := schemas.CronListResponse{
|
||||
Item: items,
|
||||
Total: total,
|
||||
PageIndex: req.PageIndex,
|
||||
PageSize: req.PageSize,
|
||||
}
|
||||
|
||||
utils.Success(ctx, response)
|
||||
}
|
||||
|
||||
// HandleCron 新增/更新任务
|
||||
// @Summary 新增/更新任务
|
||||
// @Description 新增/更新任务
|
||||
// @Tags 任务管理
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param req body schemas.CronJobUpdateRequest true "新增/更新任务"
|
||||
// @Success 200 {object} utils.Response{data=string}
|
||||
// @Failure 400 {object} utils.Response
|
||||
// @Failure 500 {object} utils.Response
|
||||
// @Router /cron/hand [post]
|
||||
// @Security ApiKeyAuth
|
||||
func (c *CronController) HandleCron(ctx *gin.Context) {
|
||||
var req schemas.CronJobUpdateRequest
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
utils.Error(ctx, http.StatusBadRequest, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
// 根据ID值判断是新增还是更新
|
||||
if req.ID > 0 {
|
||||
// 更新操作
|
||||
err := c.CronService.UpdateCron(&req)
|
||||
if err != nil {
|
||||
utils.Error(ctx, http.StatusInternalServerError, "更新任务失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
utils.Success(ctx, "更新成功")
|
||||
} else {
|
||||
// 新增操作
|
||||
if _, err := c.CronService.AddCron(&req); err != nil {
|
||||
utils.Error(ctx, http.StatusInternalServerError, "添加任务失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
utils.Success(ctx, "新增成功")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// StopOrStartCron 启用/停用任务
|
||||
// @Summary 启用/停用任务
|
||||
// @Description 启用/停用任务
|
||||
// @Tags 任务管理
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param id path string true "id"
|
||||
// @Param enabled query int false "启用状态(1:启用,0:停用)"
|
||||
// @Success 200 {object} utils.Response{data=string}
|
||||
// @Failure 400 {object} utils.Response
|
||||
// @Failure 500 {object} utils.Response
|
||||
// @Router /cron/{id} [put]
|
||||
// @Security ApiKeyAuth
|
||||
func (c *CronController) StopOrStartCron(ctx *gin.Context) {
|
||||
var idstr = ctx.Param("id")
|
||||
|
||||
id, err := strconv.Atoi(idstr)
|
||||
if err != nil || id <= 0 {
|
||||
utils.Error(ctx, http.StatusBadRequest, "参数 id 必须是有效的整数")
|
||||
return
|
||||
}
|
||||
|
||||
enableStr := ctx.Query("enabled")
|
||||
if enableStr == "" {
|
||||
utils.Error(ctx, http.StatusBadRequest, "参数 enabled 不能为空")
|
||||
return
|
||||
}
|
||||
|
||||
enableValue, err := strconv.Atoi(enableStr)
|
||||
if err != nil || (enableValue != 0 && enableValue != 1) {
|
||||
utils.Error(ctx, http.StatusBadRequest, "参数 enabled 必须是0或1")
|
||||
return
|
||||
}
|
||||
|
||||
// 直接传递整数值到服务层
|
||||
if err := c.CronService.UpdateCronStatus(id, enableValue); err != nil {
|
||||
utils.Error(ctx, http.StatusInternalServerError, "更新任务状态失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if enableValue == 1 {
|
||||
utils.Success(ctx, "启用成功")
|
||||
} else {
|
||||
utils.Success(ctx, "停用成功")
|
||||
}
|
||||
}
|
||||
|
||||
// DeleteCron 删除定时任务
|
||||
// @Summary 删除定时任务
|
||||
// @Description 删除定时任务
|
||||
// @Tags 任务管理
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param id path string true "id(任务ID)"
|
||||
// @Success 200 {object} utils.Response{data=string}
|
||||
// @Failure 400 {object} utils.Response
|
||||
// @Failure 500 {object} utils.Response
|
||||
// @Router /cron/{id} [delete]
|
||||
// @Security ApiKeyAuth
|
||||
func (c *CronController) DeleteCron(ctx *gin.Context) {
|
||||
var idstr = ctx.Param("id")
|
||||
|
||||
id, err := strconv.Atoi(idstr)
|
||||
if err != nil || id <= 0 {
|
||||
utils.Error(ctx, http.StatusBadRequest, "参数 id 必须是有效的正整数")
|
||||
return
|
||||
}
|
||||
|
||||
if err := c.CronService.DeleteCron(id); err != nil {
|
||||
utils.Error(ctx, http.StatusInternalServerError, "删除任务失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
utils.Success(ctx, "删除成功")
|
||||
}
|
||||
|
||||
// RestartCron 重启定时任务
|
||||
// @Summary 重启定时任务
|
||||
// @Description 重启定时任务
|
||||
// @Tags 任务管理
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Success 200 {object} utils.Response{data=string}
|
||||
// @Failure 400 {object} utils.Response
|
||||
// @Failure 500 {object} utils.Response
|
||||
// @Router /cron/restart [get]
|
||||
// @Security ApiKeyAuth
|
||||
func (c *CronController) RestartCron(ctx *gin.Context) {
|
||||
if err := c.CronService.RestartCron(); err != nil {
|
||||
utils.Error(ctx, http.StatusInternalServerError, "重启调度器失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
utils.Success(ctx, "重启成功")
|
||||
}
|
||||
|
||||
// StopCron 停止所有任务
|
||||
// @Summary 停止所有任务
|
||||
// @Description 停止所有任务
|
||||
// @Tags 任务管理
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Success 200 {object} utils.Response{data=string}
|
||||
// @Failure 400 {object} utils.Response
|
||||
// @Failure 500 {object} utils.Response
|
||||
// @Router /cron/stop [get]
|
||||
// @Security ApiKeyAuth
|
||||
func (c *CronController) StopCron(ctx *gin.Context) {
|
||||
if err := c.CronService.StopCron(); err != nil {
|
||||
utils.Error(ctx, http.StatusInternalServerError, "调度器停止失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
utils.Success(ctx, "停止成功")
|
||||
}
|
||||
|
||||
// GetCronLogList 查看日志运行记录
|
||||
// @Summary 查看日志运行记录
|
||||
// @Description 查看日志运行记录
|
||||
// @Tags 任务管理
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param req body schemas.CronJobLogListRequest true "req"
|
||||
// @Success 200 {object} schemas.CronJobLog "res"
|
||||
// @Failure 400 {object} utils.Response
|
||||
// @Failure 404 {object} utils.Response
|
||||
// @Failure 500 {object} utils.Response
|
||||
// @Router /cron/loglist [post]
|
||||
// @Security ApiKeyAuth
|
||||
func (c *CronController) GetCronLogList(ctx *gin.Context) {
|
||||
var req schemas.CronJobLogListRequest
|
||||
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
utils.Error(ctx, http.StatusBadRequest, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
if req.PageIndex <= 0 || req.PageSize <= 0 || req.PageSize > 100 {
|
||||
utils.Error(ctx, http.StatusBadRequest, "分页参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
items, total, err := c.CronService.GetCronLogList(&req)
|
||||
if err != nil {
|
||||
fmt.Println("获取列表时出错:", err)
|
||||
utils.Error(ctx, http.StatusInternalServerError, "获取列表失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response := schemas.CronJobLogListResponse{
|
||||
Item: items,
|
||||
Total: total,
|
||||
PageIndex: req.PageIndex,
|
||||
PageSize: req.PageSize,
|
||||
}
|
||||
|
||||
utils.Success(ctx, response)
|
||||
}
|
||||
Reference in New Issue
Block a user