mirror of
https://gitee.com/dromara/mayfly-go
synced 2026-03-31 09:48:26 +08:00
@@ -75,13 +75,13 @@ func (d *DataSyncTask) ChangeStatus(rc *req.Ctx) {
|
||||
}
|
||||
|
||||
func (d *DataSyncTask) Run(rc *req.Ctx) {
|
||||
taskId := getTaskId(rc)
|
||||
taskId := d.getTaskId(rc)
|
||||
rc.ReqParam = taskId
|
||||
_ = d.DataSyncTaskApp.RunCronJob(taskId)
|
||||
}
|
||||
|
||||
func (d *DataSyncTask) Stop(rc *req.Ctx) {
|
||||
taskId := getTaskId(rc)
|
||||
taskId := d.getTaskId(rc)
|
||||
rc.ReqParam = taskId
|
||||
|
||||
task := new(entity.DataSyncTask)
|
||||
@@ -91,12 +91,12 @@ func (d *DataSyncTask) Stop(rc *req.Ctx) {
|
||||
}
|
||||
|
||||
func (d *DataSyncTask) GetTask(rc *req.Ctx) {
|
||||
taskId := getTaskId(rc)
|
||||
taskId := d.getTaskId(rc)
|
||||
dbEntity, _ := d.DataSyncTaskApp.GetById(new(entity.DataSyncTask), taskId)
|
||||
rc.ResData = dbEntity
|
||||
}
|
||||
|
||||
func getTaskId(rc *req.Ctx) uint64 {
|
||||
func (d *DataSyncTask) getTaskId(rc *req.Ctx) uint64 {
|
||||
instanceId := rc.PathParamInt("taskId")
|
||||
biz.IsTrue(instanceId > 0, "instanceId 错误")
|
||||
return uint64(instanceId)
|
||||
|
||||
85
server/internal/db/api/db_transfer.go
Normal file
85
server/internal/db/api/db_transfer.go
Normal file
@@ -0,0 +1,85 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"mayfly-go/internal/db/api/form"
|
||||
"mayfly-go/internal/db/api/vo"
|
||||
"mayfly-go/internal/db/application"
|
||||
"mayfly-go/internal/db/domain/entity"
|
||||
"mayfly-go/pkg/biz"
|
||||
"mayfly-go/pkg/logx"
|
||||
"mayfly-go/pkg/req"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type DbTransferTask struct {
|
||||
DbTransferTask application.DbTransferTask `inject:"DbTransferTaskApp"`
|
||||
}
|
||||
|
||||
func (d *DbTransferTask) Tasks(rc *req.Ctx) {
|
||||
queryCond, page := req.BindQueryAndPage[*entity.DbTransferTaskQuery](rc, new(entity.DbTransferTaskQuery))
|
||||
res, err := d.DbTransferTask.GetPageList(queryCond, page, new([]vo.DbTransferTaskListVO))
|
||||
biz.ErrIsNil(err)
|
||||
rc.ResData = res
|
||||
}
|
||||
|
||||
func (d *DbTransferTask) Logs(rc *req.Ctx) {
|
||||
queryCond, page := req.BindQueryAndPage[*entity.DbTransferLogQuery](rc, new(entity.DbTransferLogQuery))
|
||||
res, err := d.DbTransferTask.GetTaskLogList(queryCond, page, new([]vo.DbTransferLogListVO))
|
||||
biz.ErrIsNil(err)
|
||||
rc.ResData = res
|
||||
}
|
||||
|
||||
func (d *DbTransferTask) SaveTask(rc *req.Ctx) {
|
||||
reqForm := &form.DbTransferTaskForm{}
|
||||
task := req.BindJsonAndCopyTo[*entity.DbTransferTask](rc, reqForm, new(entity.DbTransferTask))
|
||||
|
||||
rc.ReqParam = reqForm
|
||||
biz.ErrIsNil(d.DbTransferTask.Save(rc.MetaCtx, task))
|
||||
}
|
||||
|
||||
func (d *DbTransferTask) DeleteTask(rc *req.Ctx) {
|
||||
taskId := rc.PathParam("taskId")
|
||||
rc.ReqParam = taskId
|
||||
ids := strings.Split(taskId, ",")
|
||||
|
||||
for _, v := range ids {
|
||||
value, err := strconv.Atoi(v)
|
||||
biz.ErrIsNilAppendErr(err, "string类型转换为int异常: %s")
|
||||
biz.ErrIsNil(d.DbTransferTask.Delete(rc.MetaCtx, uint64(value)))
|
||||
}
|
||||
}
|
||||
|
||||
func (d *DbTransferTask) Run(rc *req.Ctx) {
|
||||
taskId := d.changeState(rc, entity.DbTransferTaskRunStateRunning)
|
||||
go d.DbTransferTask.Run(taskId, func(msg string, err error) {
|
||||
// 修改状态为停止
|
||||
if err != nil {
|
||||
logx.Error(msg, err)
|
||||
} else {
|
||||
logx.Info(fmt.Sprintf("执行迁移完成,%s", msg))
|
||||
}
|
||||
// 修改任务状态
|
||||
task := new(entity.DbTransferTask)
|
||||
task.Id = taskId
|
||||
task.RunningState = entity.DbTransferTaskRunStateStop
|
||||
biz.ErrIsNil(d.DbTransferTask.UpdateById(context.Background(), task))
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
func (d *DbTransferTask) Stop(rc *req.Ctx) {
|
||||
taskId := d.changeState(rc, entity.DbTransferTaskRunStateStop)
|
||||
d.DbTransferTask.Stop(taskId)
|
||||
}
|
||||
|
||||
func (d *DbTransferTask) changeState(rc *req.Ctx, RunningState int) uint64 {
|
||||
reqForm := &form.DbTransferTaskStatusForm{RunningState: RunningState}
|
||||
task := req.BindJsonAndCopyTo[*entity.DbTransferTask](rc, reqForm, new(entity.DbTransferTask))
|
||||
biz.ErrIsNil(d.DbTransferTask.UpdateById(rc.MetaCtx, task))
|
||||
// 记录请求日志
|
||||
rc.ReqParam = reqForm
|
||||
return task.Id
|
||||
}
|
||||
24
server/internal/db/api/form/db_transfer.go
Normal file
24
server/internal/db/api/form/db_transfer.go
Normal file
@@ -0,0 +1,24 @@
|
||||
package form
|
||||
|
||||
type DbTransferTaskForm struct {
|
||||
Id uint64 `json:"id"`
|
||||
CheckedKeys string `binding:"required" json:"checkedKeys"` // 选中需要迁移的表
|
||||
DeleteTable int `binding:"required" json:"deleteTable"` // 创建表前是否删除表 1是 2否
|
||||
NameCase int `binding:"required" json:"nameCase"` // 表名、字段大小写转换 1无 2大写 3小写
|
||||
Strategy int `binding:"required" json:"strategy"` // 迁移策略 1全量 2增量
|
||||
SrcDbId int `binding:"required" json:"srcDbId"` // 源库id
|
||||
SrcDbName string `binding:"required" json:"srcDbName"` // 源库名
|
||||
SrcDbType string `binding:"required" json:"srcDbType"` // 源库类型
|
||||
SrcInstName string `binding:"required" json:"srcInstName"` // 源库实例名
|
||||
SrcTagPath string `binding:"required" json:"srcTagPath"` // 源库tagPath
|
||||
TargetDbId int `binding:"required" json:"targetDbId"` // 目标库id
|
||||
TargetDbName string `binding:"required" json:"targetDbName"` // 目标库名
|
||||
TargetDbType string `binding:"required" json:"targetDbType"` // 目标库类型
|
||||
TargetInstName string `binding:"required" json:"targetInstName"` // 目标库实例名
|
||||
TargetTagPath string `binding:"required" json:"targetTagPath"` // 目标库tagPath
|
||||
}
|
||||
|
||||
type DbTransferTaskStatusForm struct {
|
||||
Id uint64 `binding:"required" json:"taskId"`
|
||||
RunningState int `json:"status"`
|
||||
}
|
||||
37
server/internal/db/api/vo/db_transfer.go
Normal file
37
server/internal/db/api/vo/db_transfer.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package vo
|
||||
|
||||
import "time"
|
||||
|
||||
type DbTransferTaskListVO struct {
|
||||
Id *int64 `json:"id"`
|
||||
|
||||
UpdateTime *time.Time `json:"updateTime"`
|
||||
Modifier string `json:"modifier"`
|
||||
|
||||
RunningState int `json:"runningState"`
|
||||
|
||||
CheckedKeys string `json:"checkedKeys"` // 选中需要迁移的表
|
||||
DeleteTable int `json:"deleteTable"` // 创建表前是否删除表
|
||||
NameCase int `json:"nameCase"` // 表名、字段大小写转换 1无 2大写 3小写
|
||||
Strategy int `json:"strategy"` // 迁移策略 1全量 2增量
|
||||
|
||||
SrcDbId int64 `json:"srcDbId"` // 源库id
|
||||
SrcDbName string `json:"srcDbName"` // 源库名
|
||||
SrcTagPath string `json:"srcTagPath"` // 源库tagPath
|
||||
SrcDbType string `json:"srcDbType"` // 源库类型
|
||||
SrcInstName string `json:"srcInstName"` // 源库实例名
|
||||
|
||||
TargetDbId int `json:"targetDbId"` // 目标库id
|
||||
TargetDbName string `json:"targetDbName"` // 目标库名
|
||||
TargetDbType string `json:"targetDbType"` // 目标库类型
|
||||
TargetInstName string `json:"targetInstName"` // 目标库实例名
|
||||
TargetTagPath string `json:"targetTagPath"` // 目标库tagPath
|
||||
}
|
||||
|
||||
type DbTransferLogListVO struct {
|
||||
CreateTime *time.Time `json:"createTime"`
|
||||
DataSqlFull string `json:"dataSqlFull"`
|
||||
ResNum string `json:"resNum"`
|
||||
ErrText string `json:"errText"`
|
||||
Status *int `json:"status"`
|
||||
}
|
||||
Reference in New Issue
Block a user