mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-03 07:50:25 +08:00
122 lines
3.5 KiB
Go
122 lines
3.5 KiB
Go
package api
|
|
|
|
import (
|
|
"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/internal/db/imsg"
|
|
"mayfly-go/internal/pkg/utils"
|
|
"mayfly-go/pkg/biz"
|
|
"mayfly-go/pkg/model"
|
|
"mayfly-go/pkg/req"
|
|
"mayfly-go/pkg/utils/stringx"
|
|
"strings"
|
|
|
|
"github.com/spf13/cast"
|
|
)
|
|
|
|
type DataSyncTask struct {
|
|
dataSyncTaskApp application.DataSyncTask `inject:"T"`
|
|
}
|
|
|
|
func (d *DataSyncTask) ReqConfs() *req.Confs {
|
|
reqs := [...]*req.Conf{
|
|
// 获取任务列表 /datasync
|
|
req.NewGet("", d.Tasks),
|
|
|
|
req.NewGet(":taskId/logs", d.Logs).RequiredPermissionCode("db:sync:log"),
|
|
|
|
// 保存任务 /datasync/save
|
|
req.NewPost("save", d.SaveTask).Log(req.NewLogSaveI(imsg.LogDataSyncSave)).RequiredPermissionCode("db:sync:save"),
|
|
|
|
// 获取单个详情 /datasync/:taskId
|
|
req.NewGet(":taskId", d.GetTask),
|
|
|
|
// 删除任务 /datasync/:taskId/del
|
|
req.NewDelete(":taskId/del", d.DeleteTask).Log(req.NewLogSaveI(imsg.LogDataSyncDelete)).RequiredPermissionCode("db:sync:del"),
|
|
|
|
// 启停用任务 /datasync/status
|
|
req.NewPost(":taskId/status", d.ChangeStatus).Log(req.NewLogSaveI(imsg.LogDataSyncChangeStatus)).RequiredPermissionCode("db:sync:status"),
|
|
|
|
// 立即执行任务 /datasync/run
|
|
req.NewPost(":taskId/run", d.Run),
|
|
|
|
// 停止正在执行中的任务
|
|
req.NewPost(":taskId/stop", d.Stop),
|
|
}
|
|
|
|
return req.NewConfs("/datasync/tasks", reqs[:]...)
|
|
}
|
|
|
|
func (d *DataSyncTask) Tasks(rc *req.Ctx) {
|
|
queryCond := req.BindQuery[*entity.DataSyncTaskQuery](rc)
|
|
res, err := d.dataSyncTaskApp.GetPageList(queryCond)
|
|
biz.ErrIsNil(err)
|
|
rc.ResData = model.PageResultConv[*entity.DataSyncTask, *vo.DataSyncTaskListVO](res)
|
|
}
|
|
|
|
func (d *DataSyncTask) Logs(rc *req.Ctx) {
|
|
queryCond := req.BindQuery[*entity.DataSyncLogQuery](rc)
|
|
res, err := d.dataSyncTaskApp.GetTaskLogList(queryCond)
|
|
biz.ErrIsNil(err)
|
|
rc.ResData = model.PageResultConv[*entity.DataSyncLog, *vo.DataSyncLogListVO](res)
|
|
}
|
|
|
|
func (d *DataSyncTask) SaveTask(rc *req.Ctx) {
|
|
form, task := req.BindJsonAndCopyTo[*form.DataSyncTaskForm, *entity.DataSyncTask](rc)
|
|
|
|
// 解码base64 sql
|
|
sqlStr, err := utils.AesDecryptByLa(task.DataSql, rc.GetLoginAccount())
|
|
biz.ErrIsNilAppendErr(err, "sql decoding failure: %s")
|
|
sql := stringx.TrimSpaceAndBr(sqlStr)
|
|
task.DataSql = sql
|
|
form.DataSql = sql
|
|
|
|
rc.ReqParam = form
|
|
biz.ErrIsNil(d.dataSyncTaskApp.Save(rc.MetaCtx, task))
|
|
}
|
|
|
|
func (d *DataSyncTask) DeleteTask(rc *req.Ctx) {
|
|
taskId := rc.PathParam("taskId")
|
|
rc.ReqParam = taskId
|
|
|
|
for _, v := range strings.Split(taskId, ",") {
|
|
biz.ErrIsNil(d.dataSyncTaskApp.Delete(rc.MetaCtx, cast.ToUint64(v)))
|
|
}
|
|
}
|
|
|
|
func (d *DataSyncTask) ChangeStatus(rc *req.Ctx) {
|
|
form := req.BindJson[*form.DataSyncTaskStatusForm](rc)
|
|
rc.ReqParam = form
|
|
|
|
task, err := d.dataSyncTaskApp.GetById(form.Id)
|
|
biz.ErrIsNil(err)
|
|
task.Status = entity.DataSyncTaskStatus(form.Status)
|
|
biz.ErrIsNil(d.dataSyncTaskApp.Save(rc.MetaCtx, task))
|
|
}
|
|
|
|
func (d *DataSyncTask) Run(rc *req.Ctx) {
|
|
taskId := d.getTaskId(rc)
|
|
rc.ReqParam = taskId
|
|
biz.ErrIsNil(d.dataSyncTaskApp.Run(rc.MetaCtx, taskId))
|
|
}
|
|
|
|
func (d *DataSyncTask) Stop(rc *req.Ctx) {
|
|
taskId := d.getTaskId(rc)
|
|
rc.ReqParam = taskId
|
|
biz.ErrIsNil(d.dataSyncTaskApp.StopTask(rc.MetaCtx, taskId))
|
|
}
|
|
|
|
func (d *DataSyncTask) GetTask(rc *req.Ctx) {
|
|
taskId := d.getTaskId(rc)
|
|
dbEntity, _ := d.dataSyncTaskApp.GetById(taskId)
|
|
rc.ResData = dbEntity
|
|
}
|
|
|
|
func (d *DataSyncTask) getTaskId(rc *req.Ctx) uint64 {
|
|
instanceId := rc.PathParamInt("taskId")
|
|
biz.IsTrue(instanceId > 0, "instanceId error")
|
|
return uint64(instanceId)
|
|
}
|