mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 00:10:25 +08:00 
			
		
		
		
	
							
								
								
									
										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
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user