Browse Source

完成查询接口

yjp 1 month ago
parent
commit
91dfb3921a

+ 0 - 22
convenient/domain/task_manager/simple.go

@@ -1,22 +0,0 @@
-package task_manager
-
-import (
-	"git.sxidc.com/go-framework/baize/framework/binding"
-	"git.sxidc.com/go-framework/baize/framework/core/api"
-	"git.sxidc.com/go-framework/baize/framework/core/application"
-)
-
-// Simple Bind参数
-type Simple struct {
-	// schema
-	Schema string
-}
-
-func (simple *Simple) bind(binder *binding.Binder) {
-	// TODO 完成查询接口, 编写Info,数据库YAML
-}
-
-func Bind(app *application.App, simple *Simple) {
-	binder := binding.NewBinder(app.Api().ChooseRouter(api.RouterPrefix, ""), app.Infrastructure())
-	simple.bind(binder)
-}

+ 1 - 1
convenient/domain/task_manager/task/runner.go → convenient/domain/task_runner/runner.go

@@ -1,4 +1,4 @@
-package task
+package task_runner
 
 type Runner interface {
 	Run(ctx map[string]any) error

+ 87 - 0
convenient/domain/task_runner/simple.go

@@ -0,0 +1,87 @@
+package task_runner
+
+import (
+	"git.sxidc.com/go-framework/baize/convenient/domain/task_runner/task"
+	"git.sxidc.com/go-framework/baize/framework/binding"
+	"git.sxidc.com/go-framework/baize/framework/core/api"
+	"git.sxidc.com/go-framework/baize/framework/core/api/request"
+	"git.sxidc.com/go-framework/baize/framework/core/api/response"
+	"git.sxidc.com/go-framework/baize/framework/core/application"
+	"git.sxidc.com/go-framework/baize/framework/core/domain"
+	"git.sxidc.com/go-framework/baize/framework/core/domain/entity"
+	"git.sxidc.com/go-framework/baize/framework/core/infrastructure"
+	"git.sxidc.com/go-framework/baize/framework/core/infrastructure/database"
+	"git.sxidc.com/go-framework/baize/framework/core/infrastructure/database/sql"
+	"git.sxidc.com/go-tools/utils/strutils"
+)
+
+// Simple Bind参数
+type Simple struct {
+	// schema
+	Schema string
+}
+
+func (simple *Simple) bind(binder *binding.Binder) {
+	binding.GetBind(binder, &binding.SimpleBindItem[response.InfosData[task.Info]]{
+		Path:             "/task/get",
+		SendResponseFunc: response.SendInfosResponse[task.Info],
+		RequestParams:    &task.GetTaskQueryParams{},
+		Objects:          []domain.Object{&task.Entity{}},
+		ServiceFunc: func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (response.InfosData[task.Info], error) {
+			errResponse := response.InfosData[task.Info]{
+				Infos:      make([]task.Info, 0),
+				TotalCount: 0,
+				PageNo:     0,
+			}
+
+			queryParams, err := request.ToConcrete[task.GetTaskQueryParams](params)
+			if err != nil {
+				return errResponse, err
+			}
+
+			conditions := sql.NewConditions()
+
+			if strutils.IsStringNotEmpty(queryParams.Group) {
+				conditions.Equal(task.ColumnGroup, queryParams.Group)
+			}
+
+			if strutils.IsStringNotEmpty(queryParams.Status) {
+				conditions.Equal(task.ColumnStatus, queryParams.Status)
+			}
+
+			if strutils.IsStringNotEmpty(queryParams.StartCreatedTime) {
+				conditions.GreaterThanAndEqual(entity.ColumnCreatedTime, queryParams.StartCreatedTime)
+			}
+
+			if strutils.IsStringNotEmpty(queryParams.EndCreatedTime) {
+				conditions.LessThanAndEqual(entity.ColumnCreatedTime, queryParams.EndCreatedTime)
+			}
+
+			results, totalCount, err := database.Query(i.DBExecutor(), &sql.QueryExecuteParams{
+				TableName:  simple.Schema,
+				Conditions: conditions,
+				PageNo:     queryParams.PageNo,
+				PageSize:   queryParams.PageSize,
+			})
+			if err != nil {
+				return errResponse, err
+			}
+
+			infos, err := task.FormInfos(results)
+			if err != nil {
+				return errResponse, err
+			}
+
+			return response.InfosData[task.Info]{
+				Infos:      infos,
+				TotalCount: totalCount,
+				PageNo:     queryParams.PageNo,
+			}, nil
+		},
+	})
+}
+
+func Bind(app *application.App, simple *Simple) {
+	binder := binding.NewBinder(app.Api().ChooseRouter(api.RouterPrefix, ""), app.Infrastructure())
+	simple.bind(binder)
+}

+ 2 - 2
convenient/domain/task_manager/task/entity.go → convenient/domain/task_runner/task/entity.go

@@ -144,7 +144,7 @@ func (e *Entity) IsStatusError() bool {
 func (e *Entity) TransferStatus2StatusCode() error {
 	statusCode, ok := statusCodeMap[e.Status]
 	if !ok {
-		return errors.New("状态对应的状态码不存在")
+		return errors.Errorf("状态对应的状态码不存在: %v\n", e.Status)
 	}
 
 	e.StatusCode = statusCode
@@ -155,7 +155,7 @@ func (e *Entity) TransferStatus2StatusCode() error {
 func (e *Entity) TransferStatusCode2Status() error {
 	status, ok := statusMap[e.StatusCode]
 	if !ok {
-		return errors.New("状态码对应的状态不存在")
+		return errors.Errorf("状态码对应的状态不存在: %v", e.StatusCode)
 	}
 
 	e.Status = status

+ 61 - 0
convenient/domain/task_runner/task/info.go

@@ -0,0 +1,61 @@
+package task
+
+import (
+	"git.sxidc.com/go-framework/baize/framework/core/application"
+	"git.sxidc.com/go-framework/baize/framework/core/domain/entity"
+	"git.sxidc.com/go-framework/baize/framework/core/infrastructure/database/sql"
+	"github.com/pkg/errors"
+)
+
+type Info struct {
+	application.InfoIDField
+	Group        string `sqlresult:"column:group;"`
+	Context      string `sqlresult:"column:context;"`
+	Status       string `sqlresult:"-"`
+	ErrMsg       string `sqlresult:"column:err_msg;"`
+	CreateUserID string `json:"createUserId" sqlresult:"column:create_user_id;"`
+	application.InfoTimeFields
+}
+
+func FormInfo(result *sql.Result) (*Info, error) {
+	if result == nil {
+		return new(Info), nil
+	}
+
+	statusCode := result.ColumnValueInt(ColumnStatus)
+	statusStr, ok := statusMap[statusCode]
+	if !ok {
+		return nil, errors.Errorf("无效的状态码: %v\n", statusCode)
+	}
+
+	return &Info{
+		InfoIDField:  application.InfoIDField{ID: result.ColumnValueString(entity.ColumnID)},
+		Group:        result.ColumnValueString(ColumnGroup),
+		Context:      result.ColumnValueString(ColumnContext),
+		Status:       statusStr,
+		ErrMsg:       result.ColumnValueString(ColumnErrMsg),
+		CreateUserID: result.ColumnValueString(entity.ColumnCreateUserID),
+		InfoTimeFields: application.InfoTimeFields{
+			CreatedTime:     result.ColumnValueTime(entity.ColumnCreatedTime).Format("2006-01-02 15:04:05"),
+			LastUpdatedTime: result.ColumnValueTime(entity.ColumnLastUpdatedTime).Format("2006-01-02 15:04:05"),
+		},
+	}, nil
+}
+
+func FormInfos(results []sql.Result) ([]Info, error) {
+	if results == nil || len(results) == 0 {
+		return make([]Info, 0), nil
+	}
+
+	infos := make([]Info, 0)
+	for _, result := range results {
+		info, err := FormInfo(&result)
+		if err != nil {
+			return nil, err
+		}
+
+		infos = append(infos, *info)
+	}
+
+	return infos, nil
+}

+ 12 - 0
convenient/domain/task_runner/task/request_params.go

@@ -0,0 +1,12 @@
+package task
+
+import "git.sxidc.com/go-framework/baize/framework/core/api/request"
+
+type GetTaskQueryParams struct {
+	request.BaseQueryParams
+	Group            string `form:"group" assign:"-"`
+	Status           string `form:"status" assign:"-"`
+	CreateUserID     string `form:"createUserId" assign:"-"`
+	StartCreatedTime string `form:"startCreatedTime" assign:"-"`
+	EndCreatedTime   string `form:"endCreatedTime" assign:"-"`
+}

+ 10 - 10
convenient/domain/task_manager/task_manager.go → convenient/domain/task_runner/task_runner.go

@@ -1,8 +1,8 @@
-package task_manager
+package task_runner
 
 import (
 	"encoding/json"
-	"git.sxidc.com/go-framework/baize/convenient/domain/task_manager/task"
+	"git.sxidc.com/go-framework/baize/convenient/domain/task_runner/task"
 	"git.sxidc.com/go-framework/baize/framework/core/domain"
 	"git.sxidc.com/go-framework/baize/framework/core/domain/entity"
 	"git.sxidc.com/go-framework/baize/framework/core/infrastructure/database"
@@ -43,7 +43,7 @@ func (params *RunTaskParams) check() error {
 	return nil
 }
 
-func RunTask(runner task.Runner, params *RunTaskParams) (string, error) {
+func RunTask(runner Runner, params *RunTaskParams) (string, error) {
 	err := params.check()
 	if err != nil {
 		return "", err
@@ -69,9 +69,9 @@ func RunTask(runner task.Runner, params *RunTaskParams) (string, error) {
 	}
 
 	loaded, _ := runnerRegister.LoadOrStore(params.Group, runner)
-	loadedRunner := loaded.(task.Runner)
+	loadedRunner := loaded.(Runner)
 
-	go runTask(taskEntity, loadedRunner, params.DBSchema, params.DBExecutor, func(ctx map[string]any, runner task.Runner) error {
+	go runTask(taskEntity, loadedRunner, params.DBSchema, params.DBExecutor, func(ctx map[string]any, runner Runner) error {
 		return runner.Run(ctx)
 	})
 
@@ -100,7 +100,7 @@ func (params *RestartTaskParams) check() error {
 	return nil
 }
 
-func RestartTask(runner task.Runner, params *RestartTaskParams) error {
+func RestartTask(runner Runner, params *RestartTaskParams) error {
 	err := params.check()
 	if err != nil {
 		return err
@@ -125,9 +125,9 @@ func RestartTask(runner task.Runner, params *RestartTaskParams) error {
 
 	for _, taskEntity := range taskEntities {
 		loaded, _ := runnerRegister.LoadOrStore(params.Group, runner)
-		loadedRunner := loaded.(task.Runner)
+		loadedRunner := loaded.(Runner)
 
-		go runTask(&taskEntity, loadedRunner, params.DBSchema, params.DBExecutor, func(ctx map[string]any, runner task.Runner) error {
+		go runTask(&taskEntity, loadedRunner, params.DBSchema, params.DBExecutor, func(ctx map[string]any, runner Runner) error {
 			return runner.Restart(ctx)
 		})
 	}
@@ -196,7 +196,7 @@ func StopTask(params *StopTaskParams) error {
 		return errors.New("没有找到任务对应的执行器")
 	}
 
-	loadedRunner := loaded.(task.Runner)
+	loadedRunner := loaded.(Runner)
 
 	err = database.Transaction(params.DBExecutor, func(tx database.Executor) error {
 		err := updateTaskStatusStopDBTx(taskEntity, params.DBSchema, tx)
@@ -278,7 +278,7 @@ func updateTaskStatusErrorDB(taskEntity *task.Entity, errMsg string, dbSchema st
 	return nil
 }
 
-func runTask(taskEntity *task.Entity, runner task.Runner, dbSchema string, dbExecutor database.Executor, executeFunc func(ctx map[string]any, runner task.Runner) error) {
+func runTask(taskEntity *task.Entity, runner Runner, dbSchema string, dbExecutor database.Executor, executeFunc func(ctx map[string]any, runner Runner) error) {
 	ctx, err := taskEntity.GetMapContext()
 	if err != nil {
 		err = updateTaskStatusErrorDB(taskEntity, err.Error(), dbSchema, dbExecutor)