package core import ( "context" "github.com/pkg/errors" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/models" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils" "gorm.io/gorm" "github.com/zeromicro/go-zero/core/logx" ) type TaskDetailsLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewTaskDetailsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *TaskDetailsLogic { return &TaskDetailsLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *TaskDetailsLogic) TaskDetails(req *types.FId) (resp *types.TaskDetailsResp, err error) { resp = &types.TaskDetailsResp{} task := &models.Task{} if errors.Is(l.svcCtx.DbEngin.Where("id", req.Id).First(&task).Error, gorm.ErrRecordNotFound) { return nil, errors.New("记录不存在") } clusterIds := make([]string, 0) var cList []*types.ClusterInfo var subList []*types.SubTaskInfo switch task.AdapterTypeDict { case "0": l.svcCtx.DbEngin.Table("task_cloud").Where("task_id", task.Id).Scan(&subList) if len(subList) <= 0 { l.svcCtx.DbEngin.Table("task_vm").Where("task_id", task.Id).Find(&subList) } case "1": l.svcCtx.DbEngin.Table("task_ai").Where("task_id", task.Id).Scan(&subList) case "2": l.svcCtx.DbEngin.Table("task_hpc").Where("task_id", task.Id).Scan(&subList) } for _, sub := range subList { clusterIds = append(clusterIds, sub.ClusterId) } err = l.svcCtx.DbEngin.Table("t_cluster").Where("id in ?", clusterIds).Scan(&cList).Error if err != nil { return resp, err } utils.Convert(&task, &resp) resp.ClusterInfos = cList resp.SubTaskInfos = subList return }