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) {
|
export function listJobLog(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/monitor/jobLog/list',
|
url: '/api/v1/monitor/jobLog/list',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: query
|
params: query
|
||||||
})
|
})
|
||||||
@@ -12,7 +12,7 @@ export function listJobLog(query) {
|
|||||||
// 删除调度日志
|
// 删除调度日志
|
||||||
export function delJobLog(jobLogId) {
|
export function delJobLog(jobLogId) {
|
||||||
return request({
|
return request({
|
||||||
url: '/monitor/jobLog/' + jobLogId,
|
url: '/api/v1/monitor/jobLog/' + jobLogId,
|
||||||
method: 'delete'
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -20,7 +20,7 @@ export function delJobLog(jobLogId) {
|
|||||||
// 清空调度日志
|
// 清空调度日志
|
||||||
export function cleanJobLog() {
|
export function cleanJobLog() {
|
||||||
return request({
|
return request({
|
||||||
url: '/monitor/jobLog/clean',
|
url: '/api/v1/monitor/jobLog/clean',
|
||||||
method: 'delete'
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -28,7 +28,7 @@ export function cleanJobLog() {
|
|||||||
// 导出调度日志
|
// 导出调度日志
|
||||||
export function exportJobLog(query) {
|
export function exportJobLog(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/monitor/jobLog/export',
|
url: '/api/v1/monitor/jobLog/export',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: query
|
params: query
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -125,6 +125,12 @@ export const constantRoutes = [
|
|||||||
component: Layout,
|
component: Layout,
|
||||||
hidden: true,
|
hidden: true,
|
||||||
children: [
|
children: [
|
||||||
|
{
|
||||||
|
path: 'index',
|
||||||
|
component: (resolve) => require(['@/views/monitor/job/index'], resolve),
|
||||||
|
name: 'Job',
|
||||||
|
meta: { title: '定时任务' }
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'log',
|
path: 'log',
|
||||||
component: (resolve) => require(['@/views/monitor/job/log'], resolve),
|
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)
|
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