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:
@@ -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
|
||||
})
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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"`
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
Reference in New Issue
Block a user