mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 08:20:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
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
 | 
						|
}
 |