170 lines
5.1 KiB
Go
170 lines
5.1 KiB
Go
package tenant
|
|
|
|
import (
|
|
"context"
|
|
|
|
v1 "github.com/qianfree/team-api/api/tenant/v1"
|
|
"github.com/qianfree/team-api/internal/dao"
|
|
"github.com/qianfree/team-api/internal/logic/common"
|
|
"github.com/qianfree/team-api/internal/middleware"
|
|
)
|
|
|
|
// TenantTaskList 租户异步任务列表
|
|
// owner/admin 可查看租户所有任务,member 只能查看自己的任务
|
|
func (s *sTenant) TenantTaskList(ctx context.Context, req *v1.TenantTaskListReq) (*v1.TenantTaskListRes, error) {
|
|
tenantID := middleware.GetTenantID(ctx)
|
|
role := middleware.GetUserRole(ctx)
|
|
userID := middleware.GetUserID(ctx)
|
|
|
|
m := dao.TskModelTasks.Ctx(ctx).
|
|
LeftJoin("tnt_users u", "u.id = tsk_model_tasks.user_id AND u.tenant_id = tsk_model_tasks.tenant_id").
|
|
Fields("tsk_model_tasks.*, COALESCE(u.username, '') as username").
|
|
Where("tsk_model_tasks.tenant_id", tenantID).
|
|
OrderDesc("tsk_model_tasks.id")
|
|
|
|
// member 只能看自己的任务
|
|
if role == "member" {
|
|
m = m.Where("tsk_model_tasks.user_id", userID)
|
|
}
|
|
|
|
if req.Status != "" {
|
|
m = m.Where("tsk_model_tasks.status", req.Status)
|
|
}
|
|
if req.Platform != "" {
|
|
m = m.Where("tsk_model_tasks.platform", req.Platform)
|
|
}
|
|
if req.PublicTaskID != "" {
|
|
m = m.Where("tsk_model_tasks.public_task_id", req.PublicTaskID)
|
|
}
|
|
|
|
var tasks []struct {
|
|
Id int64 `json:"id"`
|
|
PublicTaskId string `json:"public_task_id"`
|
|
Platform string `json:"platform"`
|
|
Action string `json:"action"`
|
|
Status string `json:"status"`
|
|
Progress string `json:"progress"`
|
|
ModelName string `json:"model_name"`
|
|
FailReason string `json:"fail_reason"`
|
|
PreDeductAmount float64 `json:"pre_deduct_amount"`
|
|
ActualCost float64 `json:"actual_cost"`
|
|
BillingSettled bool `json:"billing_settled"`
|
|
ResultUrl string `json:"result_url"`
|
|
Username string `json:"username"`
|
|
SubmitTime *string `json:"submit_time"`
|
|
FinishTime *string `json:"finish_time"`
|
|
CreatedAt *string `json:"created_at"`
|
|
}
|
|
|
|
var total int
|
|
err := m.Page(req.Page, req.PageSize).ScanAndCount(&tasks, &total, false)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
list := make([]v1.TenantTaskItem, 0, len(tasks))
|
|
for _, t := range tasks {
|
|
item := v1.TenantTaskItem{
|
|
ID: t.Id,
|
|
PublicTaskID: t.PublicTaskId,
|
|
Platform: t.Platform,
|
|
Action: t.Action,
|
|
Status: t.Status,
|
|
Progress: t.Progress,
|
|
ModelName: t.ModelName,
|
|
FailReason: t.FailReason,
|
|
PreDeductAmount: t.PreDeductAmount,
|
|
ActualCost: t.ActualCost,
|
|
BillingSettled: t.BillingSettled,
|
|
ResultURL: t.ResultUrl,
|
|
Username: t.Username,
|
|
}
|
|
if t.SubmitTime != nil {
|
|
item.SubmitTime = *t.SubmitTime
|
|
}
|
|
if t.FinishTime != nil {
|
|
item.FinishTime = *t.FinishTime
|
|
}
|
|
if t.CreatedAt != nil {
|
|
item.CreatedAt = *t.CreatedAt
|
|
}
|
|
list = append(list, item)
|
|
}
|
|
|
|
return &v1.TenantTaskListRes{
|
|
List: list,
|
|
Total: total,
|
|
Page: req.Page,
|
|
PageSize: req.PageSize,
|
|
}, nil
|
|
}
|
|
|
|
// TenantTaskDetail 租户异步任务详情
|
|
// owner/admin 可查看租户所有任务,member 只能查看自己的任务
|
|
func (s *sTenant) TenantTaskDetail(ctx context.Context, req *v1.TenantTaskDetailReq) (*v1.TenantTaskDetailRes, error) {
|
|
tenantID := middleware.GetTenantID(ctx)
|
|
role := middleware.GetUserRole(ctx)
|
|
userID := middleware.GetUserID(ctx)
|
|
|
|
var task struct {
|
|
Id int64 `json:"id"`
|
|
PublicTaskId string `json:"public_task_id"`
|
|
Platform string `json:"platform"`
|
|
Action string `json:"action"`
|
|
Status string `json:"status"`
|
|
Progress string `json:"progress"`
|
|
ModelName string `json:"model_name"`
|
|
FailReason string `json:"fail_reason"`
|
|
PreDeductAmount float64 `json:"pre_deduct_amount"`
|
|
ActualCost float64 `json:"actual_cost"`
|
|
BillingSettled bool `json:"billing_settled"`
|
|
ResultUrl string `json:"result_url"`
|
|
UserId int64 `json:"user_id"`
|
|
SubmitTime *string `json:"submit_time"`
|
|
FinishTime *string `json:"finish_time"`
|
|
CreatedAt *string `json:"created_at"`
|
|
}
|
|
|
|
m := dao.TskModelTasks.Ctx(ctx).Where("id", req.ID).Where("tenant_id", tenantID)
|
|
// member 只能看自己的任务
|
|
if role == "member" {
|
|
m = m.Where("user_id", userID)
|
|
}
|
|
|
|
err := m.Scan(&task)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if task.Id == 0 {
|
|
return nil, common.NewNotFoundError("任务")
|
|
}
|
|
|
|
item := v1.TenantTaskItem{
|
|
ID: task.Id,
|
|
PublicTaskID: task.PublicTaskId,
|
|
Platform: task.Platform,
|
|
Action: task.Action,
|
|
Status: task.Status,
|
|
Progress: task.Progress,
|
|
ModelName: task.ModelName,
|
|
FailReason: task.FailReason,
|
|
PreDeductAmount: task.PreDeductAmount,
|
|
ActualCost: task.ActualCost,
|
|
BillingSettled: task.BillingSettled,
|
|
ResultURL: task.ResultUrl,
|
|
}
|
|
if task.SubmitTime != nil {
|
|
item.SubmitTime = *task.SubmitTime
|
|
}
|
|
if task.FinishTime != nil {
|
|
item.FinishTime = *task.FinishTime
|
|
}
|
|
if task.CreatedAt != nil {
|
|
item.CreatedAt = *task.CreatedAt
|
|
}
|
|
|
|
return &v1.TenantTaskDetailRes{
|
|
Task: item,
|
|
}, nil
|
|
}
|