fix: 添加定时任务日志管理后端

- 新增: dataobject/sys_job_log.go 定时任务日志数据对象
- 新增: dao/job_log_dao.go 定时任务日志DAO
- 新增: service/job_log_service.go 定时任务日志Service
- 新增: api/v1/job_log_api.go 定时任务日志API
- 新增: request/job_log_request.go 定时任务日志查询参数
- 修复: cron_job_router.go 添加调度日志路由
- 修复: 前端jobLog API路径缺少/api/v1前缀
- 修复: 前端router添加定时任务管理页面路由
This commit is contained in:
2026-07-29 15:11:27 +08:00
parent d31be435db
commit 0f6d3302f3
8 changed files with 213 additions and 4 deletions
+4 -4
View File
@@ -3,7 +3,7 @@ import request from '@/utils/request'
// 查询调度日志列表
export function listJobLog(query) {
return request({
url: '/monitor/jobLog/list',
url: '/api/v1/monitor/jobLog/list',
method: 'get',
params: query
})
@@ -12,7 +12,7 @@ export function listJobLog(query) {
// 删除调度日志
export function delJobLog(jobLogId) {
return request({
url: '/monitor/jobLog/' + jobLogId,
url: '/api/v1/monitor/jobLog/' + jobLogId,
method: 'delete'
})
}
@@ -20,7 +20,7 @@ export function delJobLog(jobLogId) {
// 清空调度日志
export function cleanJobLog() {
return request({
url: '/monitor/jobLog/clean',
url: '/api/v1/monitor/jobLog/clean',
method: 'delete'
})
}
@@ -28,7 +28,7 @@ export function cleanJobLog() {
// 导出调度日志
export function exportJobLog(query) {
return request({
url: '/monitor/jobLog/export',
url: '/api/v1/monitor/jobLog/export',
method: 'get',
params: query
})
+6
View File
@@ -125,6 +125,12 @@ export const constantRoutes = [
component: Layout,
hidden: true,
children: [
{
path: 'index',
component: (resolve) => require(['@/views/monitor/job/index'], resolve),
name: 'Job',
meta: { title: '定时任务' }
},
{
path: 'log',
component: (resolve) => require(['@/views/monitor/job/log'], resolve),
+57
View File
@@ -0,0 +1,57 @@
package v1
import (
"cutego/modules/core/api/v1/request"
"cutego/modules/core/service"
"cutego/pkg/resp"
"github.com/gin-gonic/gin"
"strconv"
"strings"
)
type JobLogApi struct {
jobLogService service.JobLogService
}
// List 查询调度日志列表
func (a JobLogApi) List(c *gin.Context) {
query := request.JobLogQuery{}
if c.Bind(&query) != nil {
resp.ParamError(c)
return
}
list, total := a.jobLogService.FindPage(query)
c.JSON(200, gin.H{
"status": 200,
"msg": "查询成功",
"rows": list,
"total": total,
})
}
// Remove 删除调度日志
func (a JobLogApi) Remove(c *gin.Context) {
param := c.Param("jobLogId")
ids := strings.Split(param, ",")
idList := make([]int64, 0, len(ids))
for _, s := range ids {
id, err := strconv.ParseInt(strings.TrimSpace(s), 10, 64)
if err == nil {
idList = append(idList, id)
}
}
if len(idList) > 0 && a.jobLogService.Delete(idList) {
resp.OK(c)
} else {
resp.Error(c)
}
}
// Clean 清空调度日志
func (a JobLogApi) Clean(c *gin.Context) {
if a.jobLogService.Clean() {
resp.OK(c)
} else {
resp.Error(c)
}
}
@@ -0,0 +1,9 @@
package request
import "cutego/pkg/base"
type JobLogQuery struct {
base.GlobalQuery
JobName string `form:"jobName"`
Status string `form:"status"`
}
+84
View File
@@ -0,0 +1,84 @@
package dao
import (
"cutego/modules/core/api/v1/request"
"cutego/modules/core/dataobject"
"cutego/pkg/logger"
"cutego/pkg/page"
"cutego/refs"
"github.com/druidcaesa/gotool"
"github.com/go-xorm/xorm"
)
type JobLogDao struct {
}
func (d JobLogDao) sql(session *xorm.Session) *xorm.Session {
return session.Table("sys_job_log")
}
// SelectPage 分页查询
func (d JobLogDao) SelectPage(query request.JobLogQuery) ([]dataobject.SysJobLog, int64) {
logs := make([]dataobject.SysJobLog, 0)
session := d.sql(refs.SqlDB.NewSession())
if gotool.StrUtils.HasNotEmpty(query.JobName) {
session.And("job_name like concat('%', ?, '%')", query.JobName)
}
if gotool.StrUtils.HasNotEmpty(query.Status) {
session.And("status = ?", query.Status)
}
if gotool.StrUtils.HasNotEmpty(query.BeginTime) {
session.And("date_format(create_time,'%y%m%d') >= date_format(?,'%y%m%d')", query.BeginTime)
}
if gotool.StrUtils.HasNotEmpty(query.EndTime) {
session.And("date_format(create_time,'%y%m%d') <= date_format(?,'%y%m%d')", query.EndTime)
}
total, _ := page.GetTotal(session.Clone())
err := session.OrderBy("create_time desc").Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&logs)
if err != nil {
logger.SugaredLogger.Errorln(err)
return nil, 0
}
return logs, total
}
// DeleteByIds 批量删除
func (d JobLogDao) DeleteByIds(ids []int64) bool {
session := refs.SqlDB.NewSession()
session.Begin()
_, err := session.In("job_log_id", ids).Delete(&dataobject.SysJobLog{})
if err != nil {
logger.SugaredLogger.Errorln(err)
session.Rollback()
return false
}
session.Commit()
return true
}
// Clean 清空所有日志
func (d JobLogDao) Clean() bool {
session := refs.SqlDB.NewSession()
session.Begin()
_, err := session.Exec("delete from sys_job_log")
if err != nil {
logger.SugaredLogger.Errorln(err)
session.Rollback()
return false
}
session.Commit()
return true
}
// Insert 插入日志
func (d JobLogDao) Insert(log dataobject.SysJobLog) {
session := refs.SqlDB.NewSession()
session.Begin()
_, err := session.Insert(&log)
if err != nil {
logger.SugaredLogger.Errorln(err)
session.Rollback()
return
}
session.Commit()
}
@@ -0,0 +1,18 @@
package dataobject
import "time"
type SysJobLog struct {
JobLogId int64 `xorm:"pk autoincr" json:"jobLogId"` // 日志主键
JobId int64 `xorm:"int(20)" json:"jobId"` // 任务ID
JobName string `xorm:"varchar(100)" json:"jobName"` // 任务名称
FuncAlias string `xorm:"varchar(100)" json:"funcAlias"` // 调用目标
JobMessage string `xorm:"varchar(500)" json:"jobMessage"` // 日志信息
Status string `xorm:"char(1)" json:"status"` // 执行状态(0正常 1失败)
ExceptionInfo string `xorm:"varchar(2000)" json:"exceptionInfo"` // 异常信息
CreateTime time.Time `xorm:"created" json:"createTime"` // 创建时间
}
func (s SysJobLog) TableName() string {
return "sys_job_log"
}
@@ -23,4 +23,13 @@ func initCronJobRouter(router *gin.RouterGroup) {
// 改变定时任务状态
group.PUT("/changeStatus", v.ChangeStatus)
}
// 调度日志
log := new(v1.JobLogApi)
logGroup := router.Group("/monitor/jobLog")
{
logGroup.GET("/list", log.List)
logGroup.DELETE("/:jobLogId", log.Remove)
logGroup.DELETE("/clean", log.Clean)
}
}
@@ -0,0 +1,26 @@
package service
import (
"cutego/modules/core/api/v1/request"
"cutego/modules/core/dao"
"cutego/modules/core/dataobject"
)
type JobLogService struct {
jobLogDao dao.JobLogDao
}
// FindPage 分页查询
func (s JobLogService) FindPage(query request.JobLogQuery) ([]dataobject.SysJobLog, int64) {
return s.jobLogDao.SelectPage(query)
}
// Delete 批量删除
func (s JobLogService) Delete(ids []int64) bool {
return s.jobLogDao.DeleteByIds(ids)
}
// Clean 清空所有日志
func (s JobLogService) Clean() bool {
return s.jobLogDao.Clean()
}