diff --git a/app/http/controllers/backend/cron_func_logs_controller.go b/app/http/controllers/backend/cron_func_logs_controller.go index 5c79ce6..767c0eb 100644 --- a/app/http/controllers/backend/cron_func_logs_controller.go +++ b/app/http/controllers/backend/cron_func_logs_controller.go @@ -4,10 +4,13 @@ import ( "cron_admin/app/constants/errorcode" "cron_admin/app/http/controllers" "cron_admin/app/http/entities/backend" + "cron_admin/app/models/croncmdmodel" "cron_admin/app/services" + cmd_services "cron_admin/app/services/cmd_service" "cron_admin/app/utils/helper" "cron_admin/app/utils/mapstructure" "github.com/gin-gonic/gin" + "strconv" ) func CronFuncLogsList(c *gin.Context) { @@ -18,7 +21,33 @@ func CronFuncLogsList(c *gin.Context) { } else { var funcLogsListResponse []backend.CronFuncLogsListResponse _ = mapstructure.DecodeWithTime(funcLogsList, &funcLogsListResponse, helper.DefaultFormatLayout) - // todo 获取当前列表下的CmdName + // 获取当前列表下的CmdName + // 获取所有的cmd_id + var cmdIds []string + cmdIdsMap := make(map[int64]bool) + for _, v := range funcLogsListResponse { + if _, ok := cmdIdsMap[v.CmdId]; ok { + continue + } + cmdIdsMap[v.CmdId] = true + // v.cmdId 转成string + cmdIdStr := strconv.FormatInt(v.CmdId, 10) + cmdIds = append(cmdIds, cmdIdStr) + } + // 获取所有的cmd_id对应的CmdName + _, cmdList, err := cmd_services.GetListByWhere(&backend.CmdListRequest{CmdIds: cmdIds}, 1, 100) + if err != nil { + return + } + cmdListMap := make(map[int64]croncmdmodel.CronCmd) + for _, v := range cmdList { + cmdListMap[int64(v.CmdId)] = v + } + for k, v := range funcLogsListResponse { + if cmdListMap != nil && cmdListMap[v.CmdId].CmdName != "" { + funcLogsListResponse[k].CmdName = cmdListMap[v.CmdId].CmdName + } + } controllers.HandRes(c, gin.H{"data": funcLogsListResponse, "count": count}, err) } } diff --git a/app/http/controllers/backend/cron_report_logs_controller.go b/app/http/controllers/backend/cron_report_logs_controller.go index 72aa31f..83e3be5 100644 --- a/app/http/controllers/backend/cron_report_logs_controller.go +++ b/app/http/controllers/backend/cron_report_logs_controller.go @@ -4,12 +4,15 @@ import ( "cron_admin/app/constants/errorcode" "cron_admin/app/http/controllers" "cron_admin/app/http/entities/backend" + "cron_admin/app/models/croncmdmodel" "cron_admin/app/models/cronusermodel" "cron_admin/app/services" + cmd_services "cron_admin/app/services/cmd_service" userServices "cron_admin/app/services/user_service" "cron_admin/app/utils/helper" "cron_admin/app/utils/mapstructure" "github.com/gin-gonic/gin" + "strconv" "strings" ) @@ -24,6 +27,8 @@ func CronReportLogsList(c *gin.Context) { // 合并reportLogsListResponse下的所有user_id 并去重 var userIds []string userIdsMap := make(map[int64]bool) + var cmdIds []string + cmdIdsMap := make(map[int64]bool) for _, v := range reportLogsListResponse { userIdsStr := strings.Split(v.UserId, ",") for _, userId := range userIdsStr { @@ -35,6 +40,13 @@ func CronReportLogsList(c *gin.Context) { userIds = append(userIds, userId) } } + if _, ok := cmdIdsMap[v.CmdId]; ok { + continue + } + cmdIdsMap[v.CmdId] = true + // v.cmdId 转成string + cmdIdStr := strconv.FormatInt(v.CmdId, 10) + cmdIds = append(cmdIds, cmdIdStr) } _, userList, err := userServices.GetListByWhere(&backend.UserListRequest{UserIds: userIds}, 1, 100) if err != nil { @@ -44,6 +56,15 @@ func CronReportLogsList(c *gin.Context) { for _, v := range userList { userListMap[int64(v.UserId)] = v } + // 获取所有的cmd_id对应的CmdName + _, cmdList, err := cmd_services.GetListByWhere(&backend.CmdListRequest{CmdIds: cmdIds}, 1, 100) + if err != nil { + return + } + cmdListMap := make(map[int64]croncmdmodel.CronCmd) + for _, v := range cmdList { + cmdListMap[int64(v.CmdId)] = v + } for k, v := range reportLogsListResponse { userIdsStr := strings.Split(v.UserId, ",") var userNames []string @@ -54,6 +75,9 @@ func CronReportLogsList(c *gin.Context) { } userNamesStr := strings.Join(userNames, ",") reportLogsListResponse[k].UserName = userNamesStr + if cmdListMap != nil && cmdListMap[v.CmdId].CmdName != "" { + reportLogsListResponse[k].CmdName = cmdListMap[v.CmdId].CmdName + } } controllers.HandRes(c, gin.H{"data": reportLogsListResponse, "count": count}, err) diff --git a/app/http/controllers/backend/db_controller.go b/app/http/controllers/backend/db_controller.go index 98a9b72..11871cb 100644 --- a/app/http/controllers/backend/db_controller.go +++ b/app/http/controllers/backend/db_controller.go @@ -39,3 +39,10 @@ func DbDel(c *gin.Context) { err := db_service.DbDel(request) controllers.HandRes(c, nil, err) } + +// 测试连接 +func DbTest(c *gin.Context) { + request := controllers.GetRequest(c).(*backend.DbTestRequest) + err := db_service.DbTest(request) + controllers.HandRes(c, nil, err) +} diff --git a/app/http/entities/backend/cmd.go b/app/http/entities/backend/cmd.go index 2999fce..3e0392f 100644 --- a/app/http/entities/backend/cmd.go +++ b/app/http/entities/backend/cmd.go @@ -9,11 +9,12 @@ import ( ) type CmdListRequest struct { - Page int `json:"page" validate:"required" form:"page" example:"1"` - Limit int `json:"limit" validate:"required" form:"limit" example:"10"` - CmdName string `json:"cmd_name" form:"cmd_name" example:"155555555"` - Status int `json:"status" form:"status" example:"1"` - ExecuteType int `json:"execute_type" form:"execute_type" example:"46516"` + Page int `json:"page" validate:"required" form:"page" example:"1"` + Limit int `json:"limit" validate:"required" form:"limit" example:"10"` + CmdName string `json:"cmd_name" form:"cmd_name" example:"155555555"` + Status int `json:"status" form:"status" example:"1"` + ExecuteType int `json:"execute_type" form:"execute_type" example:"46516"` + CmdIds []string `json:"cmd_id"` } type CmdInfoRequest struct { diff --git a/app/http/entities/backend/corn_report_channel.go b/app/http/entities/backend/corn_report_channel.go index 128d770..f7e0d0c 100644 --- a/app/http/entities/backend/corn_report_channel.go +++ b/app/http/entities/backend/corn_report_channel.go @@ -64,6 +64,7 @@ type ReportChannelListResponse struct { Config string `json:"config"` CreateTime string `json:"create_time"` Status int `json:"status"` + UpdateTime string `json:"update_time"` } func (this *ReportChannelListResponse) FromDb(in cronreportchannelmodel.CronReportChannel) { @@ -73,6 +74,7 @@ func (this *ReportChannelListResponse) FromDb(in cronreportchannelmodel.CronRepo this.Config = in.Config this.CreateTime = in.CreateTime.Format("2006-01-02 15:04:05") this.Status = in.Status + this.UpdateTime = in.UpdateTime.Format("2006-01-02 15:04:05") } type ReportChannelCreateRequest struct { diff --git a/app/http/entities/backend/cron_report_logs.go b/app/http/entities/backend/cron_report_logs.go index aeed9c5..6730717 100644 --- a/app/http/entities/backend/cron_report_logs.go +++ b/app/http/entities/backend/cron_report_logs.go @@ -16,6 +16,7 @@ type CronReportLogsListResponse struct { ReportId int64 `json:"report_id"` FuncLogId int64 `json:"func_log_id"` CmdId int64 `json:"cmd_id"` + CmdName string `json:"cmd_name"` UserId string `json:"user_id"` UserName string `json:"user_name"` Data string `json:"data"` diff --git a/app/http/entities/backend/db.go b/app/http/entities/backend/db.go index 50e8f74..8a49ceb 100644 --- a/app/http/entities/backend/db.go +++ b/app/http/entities/backend/db.go @@ -29,12 +29,16 @@ type DbAddRequest struct { Status int `json:"status" form:"status" example:"1"` } +type DbTestRequest struct { + Source string `json:"source" validate:"required" form:"source" example:""` +} + type DbEditRequest struct { DbId int `json:"db_id" validate:"required" form:"db_id" example:""` DbName string `json:"db_name" validate:"required" form:"db_name" example:""` DbType string `json:"db_type" validate:"required" form:"db_type" example:"mysql"` DbPermission int `json:"db_permission" validate:"required" form:"db_permission" example:"1"` - Source string `json:"source" validate:"required" form:"source" example:""` + Source string `json:"source" form:"source" example:""` Desc string `json:"desc" form:"desc" example:""` Status int `json:"status" form:"status" example:"1"` } diff --git a/app/http/requestmapping/backend.go b/app/http/requestmapping/backend.go index 7adbda9..ded07cd 100644 --- a/app/http/requestmapping/backend.go +++ b/app/http/requestmapping/backend.go @@ -25,6 +25,7 @@ var BackendRequestMap = map[string]func() interface{}{ common.ADMIN_OAUTH_V1 + "/sql/add": func() interface{} { return new(backend.DbAddRequest) }, common.ADMIN_OAUTH_V1 + "/sql/edit": func() interface{} { return new(backend.DbEditRequest) }, common.ADMIN_OAUTH_V1 + "/sql/del": func() interface{} { return new(backend.DbDeleteRequest) }, + common.ADMIN_OAUTH_V1 + "/sql/test": func() interface{} { return new(backend.DbTestRequest) }, // 消息渠道 common.ADMIN_OAUTH_V1 + "/channel/create": func() interface{} { return new(backend.ReportChannelCreateRequest) }, diff --git a/app/http/routes/admin.go b/app/http/routes/admin.go index 3cee475..8080e00 100644 --- a/app/http/routes/admin.go +++ b/app/http/routes/admin.go @@ -44,6 +44,7 @@ func RegisterAdminRoute(router *gin.Engine) { sql.POST("/add", backend.DbAdd) sql.POST("/edit", backend.DbEdit) sql.DELETE("/del", backend.DbDel) + sql.POST("/test", backend.DbTest) } //任务 cmd := v1.Group("/cmd") diff --git a/app/services/cmd_service/cmd_service.go b/app/services/cmd_service/cmd_service.go index 5df7e42..be98468 100644 --- a/app/services/cmd_service/cmd_service.go +++ b/app/services/cmd_service/cmd_service.go @@ -28,6 +28,10 @@ func GetListByWhere(request *backend.CmdListRequest, page int, limit int) (count if request.ExecuteType != 0 { cond = cond.And(builder.Eq{"execute_type": request.ExecuteType}) } + if len(request.CmdIds) > 0 { + // 使用IN查询 + cond = cond.And(builder.In("cmd_id", request.CmdIds)) + } session := croncmdmodel.GetInstance().GetDb().Where(cond) diff --git a/app/services/cron_report_channel_service.go b/app/services/cron_report_channel_service.go index 8dd3844..8fa4a2a 100644 --- a/app/services/cron_report_channel_service.go +++ b/app/services/cron_report_channel_service.go @@ -22,7 +22,7 @@ func ReportChannelList(param backend.ReportChannelList) (list []cronreportchanne repo = repository.NewReportChannelRepo() opts = make([]repository.DBOption, 0) ) - + opts = append(opts, repo.WithDesc("report_channel_id")) if param.ReportChannelId > 0 { opts = append(opts, repo.WithByID(uint(param.ReportChannelId))) } diff --git a/app/services/cron_report_logs_service.go b/app/services/cron_report_logs_service.go index a985905..549e0ed 100644 --- a/app/services/cron_report_logs_service.go +++ b/app/services/cron_report_logs_service.go @@ -9,13 +9,13 @@ import ( func CronReportLogsList(request *backend.CronReportLogsListRequest, page int, limit int) (count int64, listInfo []cronreportlogsmodel.CronReportLogs, err error) { conn := builder.NewCond() if request.FuncLogId != 0 { - conn = conn.And(builder.Eq{"FuncLogId": request.FuncLogId}) + conn = conn.And(builder.Eq{"func_log_id": request.FuncLogId}) } if request.CmdId != 0 { - conn = conn.And(builder.Eq{"CmdId": request.CmdId}) + conn = conn.And(builder.Eq{"cmd_id": request.CmdId}) } if request.Status != 0 { - conn = conn.And(builder.Eq{"Status": request.Status}) + conn = conn.And(builder.Eq{"status": request.Status}) } // 使用FIND_IN_SET 函数 if request.UserId != 0 { diff --git a/app/services/db_service/db_service.go b/app/services/db_service/db_service.go index cb89411..b4e4b09 100644 --- a/app/services/db_service/db_service.go +++ b/app/services/db_service/db_service.go @@ -1,10 +1,15 @@ package db_service import ( + "context" "cron_admin/app/constants/common" + "cron_admin/app/constants/errorcode" "cron_admin/app/http/entities/backend" "cron_admin/app/models/crondbmodel" "cron_admin/app/utils/mapstructure" + "database/sql" + "fmt" + "time" "xorm.io/builder" ) @@ -26,7 +31,7 @@ func DbList(request *backend.DbListRequest, page int, limit int) (count int64, D if request.DbPermission != 0 { session = session.And(builder.Eq{"DbPermission": request.DbPermission}) } - count, err = session.Omit("source", "UpdateTime").FindAndCount(&DbListInfo) + count, err = session.OrderBy("db_id desc").Omit("source", "UpdateTime").FindAndCount(&DbListInfo) if err != nil { return } @@ -42,8 +47,16 @@ func DbAdd(request *backend.DbAddRequest) (err error) { } func DbEdit(request *backend.DbEditRequest) (err error) { + var info crondbmodel.CronDb + flag, _ := crondbmodel.GetInstance().GetDb().ID(request.DbId).Get(&info) + if !flag { + return + } var db crondbmodel.CronDb _ = mapstructure.Decode(request, &db) + if request.Source == "" { + request.Source = info.Source + } _, err = crondbmodel.GetInstance().GetDb().ID(request.DbId).Update(&db) return } @@ -53,7 +66,20 @@ func DbDel(request *backend.DbDeleteRequest) (err error) { return } -//func DbRange(value []int) (results []crondbmodel.CronDb, err error) { -// _, err = crondbmodel.GetInstance().GetDb().FindAndCount(&results) -// return -//} +func DbTest(request *backend.DbTestRequest) (err error) { + // 打开数据库连接 + db, err := sql.Open("mysql", request.Source) + if err != nil { + return err + } + defer db.Close() + // 使用 context 来设置 Ping 的超时时间 + ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) + defer cancel() + // 测试连接 + err = db.PingContext(ctx) + if err != nil { + return errorcode.NewBusinessErr(301, fmt.Sprintf("数据库连接失败: %v", err)) + } + return +}