mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 16:30: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
							 | 
						||
| 
								 | 
							
								}
							 |