From f788fa580c65790814ba2ffdedcc08923e598334 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=88=E4=BF=8A=E5=AE=8F?= <389838709@qq.com>
Date: Thu, 28 Nov 2024 11:38:13 +0800
Subject: [PATCH 1/4] =?UTF-8?q?=E6=97=A5=E5=BF=97=E7=AE=A1=E7=90=86?=
 =?UTF-8?q?=E5=88=97=E8=A1=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../backend/cron_func_logs_controller.go      | 31 ++++++++++++++++++-
 .../backend/cron_report_logs_controller.go    | 24 ++++++++++++++
 app/http/entities/backend/cmd.go              | 13 ++++----
 app/http/entities/backend/cron_report_logs.go |  1 +
 app/models/croncmdmodel/cron_cmd.go           |  2 +-
 app/services/cmd_service/user_service.go      |  4 +++
 app/services/cron_report_logs_service.go      |  6 ++--
 7 files changed, 70 insertions(+), 11 deletions(-)

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/entities/backend/cmd.go b/app/http/entities/backend/cmd.go
index 8d47c05..fa934f3 100644
--- a/app/http/entities/backend/cmd.go
+++ b/app/http/entities/backend/cmd.go
@@ -6,11 +6,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 {
@@ -18,7 +19,7 @@ type CmdInfoRequest struct {
 }
 
 type CmdListResponse struct {
-	CmdId           string                    `json:"cmd_id"`
+	CmdId           int                       `json:"cmd_id"`
 	CmdName         string                    `json:"cmd_name"`
 	UserIds         string                    `json:"user_ids"`
 	EntryId         int                       `json:"entry_id"`
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/models/croncmdmodel/cron_cmd.go b/app/models/croncmdmodel/cron_cmd.go
index ec9140b..3b9cf50 100644
--- a/app/models/croncmdmodel/cron_cmd.go
+++ b/app/models/croncmdmodel/cron_cmd.go
@@ -13,7 +13,7 @@ var (
 
 // 实体
 type CronCmd struct {
-	CmdId           string     `xorm:"'cmd_id' UNSIGNED INT"`
+	CmdId           int        `xorm:"'cmd_id' UNSIGNED INT"`
 	CmdName         string     `xorm:"'cmd_name' varchar(20)"`
 	UserIds         string     `xorm:"'user_ids' varchar(50)"`
 	EntryId         int        `xorm:"'entry_id' int(10)"`
diff --git a/app/services/cmd_service/user_service.go b/app/services/cmd_service/user_service.go
index 3dc2a33..b642c49 100644
--- a/app/services/cmd_service/user_service.go
+++ b/app/services/cmd_service/user_service.go
@@ -21,6 +21,10 @@ func GetListByWhere(request *backend.CmdListRequest, page int, limit int) (count
 	if request.ExecuteType != 0 {
 		cond = cond.And(builder.Eq{"status": request.Status})
 	}
+	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_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 {

From 7cab8f82d7495b4c35b2961d9f39e02ccdbff4bd Mon Sep 17 00:00:00 2001
From: wuchao <1272174216@qq.com>
Date: Thu, 28 Nov 2024 11:53:25 +0800
Subject: [PATCH 2/4] =?UTF-8?q?db=20=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/http/entities/backend/db.go       |  2 +-
 app/services/db_service/db_service.go | 10 +++++++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/app/http/entities/backend/db.go b/app/http/entities/backend/db.go
index 50e8f74..6672401 100644
--- a/app/http/entities/backend/db.go
+++ b/app/http/entities/backend/db.go
@@ -34,7 +34,7 @@ type DbEditRequest struct {
 	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/services/db_service/db_service.go b/app/services/db_service/db_service.go
index f820e51..9ee6d30 100644
--- a/app/services/db_service/db_service.go
+++ b/app/services/db_service/db_service.go
@@ -26,7 +26,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 +42,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
 }

From 935240b36b6b6229d8e86e3c287bbce10e13f503 Mon Sep 17 00:00:00 2001
From: wuchao <1272174216@qq.com>
Date: Thu, 28 Nov 2024 14:27:05 +0800
Subject: [PATCH 3/4] =?UTF-8?q?db=20=E6=B5=8B=E8=AF=95=E6=95=B0=E6=8D=AE?=
 =?UTF-8?q?=E5=BA=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/http/controllers/backend/db_controller.go |  7 ++++++
 app/http/entities/backend/db.go               |  4 ++++
 app/http/requestmapping/backend.go            |  1 +
 app/http/routes/admin.go                      |  1 +
 app/services/db_service/db_service.go         | 23 +++++++++++++++++++
 5 files changed, 36 insertions(+)

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/db.go b/app/http/entities/backend/db.go
index 6672401..8a49ceb 100644
--- a/app/http/entities/backend/db.go
+++ b/app/http/entities/backend/db.go
@@ -29,6 +29,10 @@ 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:""`
diff --git a/app/http/requestmapping/backend.go b/app/http/requestmapping/backend.go
index 5787e1e..fae6d82 100644
--- a/app/http/requestmapping/backend.go
+++ b/app/http/requestmapping/backend.go
@@ -22,6 +22,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 abdf8b1..ad1207d 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/db_service/db_service.go b/app/services/db_service/db_service.go
index 9ee6d30..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"
 )
 
@@ -60,3 +65,21 @@ func DbDel(request *backend.DbDeleteRequest) (err error) {
 	_, err = crondbmodel.GetInstance().GetDb().ID(request.DbId).Delete(&crondbmodel.CronDb{})
 	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
+}

From 0365a24685f10e4d7b9cd26369c68839759a2981 Mon Sep 17 00:00:00 2001
From: wolter <wolter@yourdomain.com>
Date: Thu, 28 Nov 2024 15:59:38 +0800
Subject: [PATCH 4/4] =?UTF-8?q?feat:=E6=B6=88=E6=81=AF=E6=B8=A0=E9=81=93fi?=
 =?UTF-8?q?x?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/http/entities/backend/corn_report_channel.go | 2 ++
 app/services/cron_report_channel_service.go      | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

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/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)))
 	}