package controller import ( "context" "github.com/gogf/gf/v2/net/ghttp" "observer-server/biz/model/dto" "observer-server/biz/service" ) // cAdmin 后台管理端接口:薄透传;service 按表归入各表文件 // (订单→service.Order、授权→service.License、数据集→service.Dataset、 // 训练→service.Training、模型版本→service.ModelVersion、标注→service.LabelTask)。 // 独立 controller 聚合,避免同一 controller 挂客户端组 + 管理组时路由重复注册。 type cAdmin struct{} var Admin = &cAdmin{} // ---------- 订单/授权/App 版本(既有) ---------- // ListOrders 订单列表 func (c *cAdmin) ListOrders(ctx context.Context, req *dto.AdminOrderListReq) (*dto.AdminOrderListRes, error) { return service.Order.AdminListOrders(ctx, req) } // ListLicenses 授权列表 func (c *cAdmin) ListLicenses(ctx context.Context, req *dto.AdminLicenseListReq) (*dto.AdminLicenseListRes, error) { return service.License.AdminListLicenses(ctx, req) } // Grant 手动授权 func (c *cAdmin) Grant(ctx context.Context, req *dto.AdminGrantReq) (*dto.AdminGrantRes, error) { return service.License.AdminGrant(ctx, req) } // Revoke 撤销授权 func (c *cAdmin) Revoke(ctx context.Context, req *dto.AdminRevokeReq) (*dto.AdminRevokeRes, error) { return service.License.AdminRevoke(ctx, req) } // Remark 写账号备注 func (c *cAdmin) Remark(ctx context.Context, req *dto.AdminRemarkReq) (*dto.AdminRemarkRes, error) { return service.License.AdminRemark(ctx, req) } // ListAppVersions 版本记录列表 func (c *cAdmin) ListAppVersions(ctx context.Context, req *dto.AdminAppVersionListReq) (*dto.AdminAppVersionListRes, error) { return service.AppVersion.AdminListVersions(ctx, req) } // AddAppVersion 新增版本记录 func (c *cAdmin) AddAppVersion(ctx context.Context, req *dto.AdminAppVersionAddReq) (*dto.AdminAppVersionAddRes, error) { return service.AppVersion.AdminAddVersion(ctx, req) } // DeleteAppVersion 删除版本记录 func (c *cAdmin) DeleteAppVersion(ctx context.Context, req *dto.AdminAppVersionDeleteReq) (*dto.AdminAppVersionDeleteRes, error) { return service.AppVersion.AdminDeleteVersion(ctx, req) } // ---------- 数据集管理 ---------- // ListDatasets 数据集列表 func (c *cAdmin) ListDatasets(ctx context.Context, req *dto.AdminDatasetListReq) (*dto.AdminDatasetListRes, error) { return service.Dataset.AdminListDatasets(ctx, req) } // CreateDataset 新建数据集 func (c *cAdmin) CreateDataset(ctx context.Context, req *dto.AdminDatasetCreateReq) (*dto.AdminDatasetCreateRes, error) { return service.Dataset.AdminCreateDataset(ctx, req) } // UpdateDataset 更新数据集配置(封面/描述/AI 标注端点/训练机 SSH) func (c *cAdmin) UpdateDataset(ctx context.Context, req *dto.AdminDatasetUpdateReq) (*dto.AdminDatasetUpdateRes, error) { return service.Dataset.AdminUpdateDataset(ctx, req) } // DeleteDataset 删除数据集 func (c *cAdmin) DeleteDataset(ctx context.Context, req *dto.AdminDatasetDeleteReq) (*dto.AdminDatasetDeleteRes, error) { return service.Dataset.AdminDeleteDataset(ctx, req) } // UploadImages 上传图片 func (c *cAdmin) UploadImages(ctx context.Context, req *dto.AdminDatasetUploadReq) (*dto.AdminDatasetUploadRes, error) { return service.Dataset.AdminUploadImages(ctx, req) } // GenerateImages AI 生成图片 func (c *cAdmin) GenerateImages(ctx context.Context, req *dto.AdminDatasetGenerateReq) (*dto.AdminDatasetGenerateRes, error) { return service.Dataset.AdminGenerateImages(ctx, req) } // ListImages 数据集图片列表 func (c *cAdmin) ListImages(ctx context.Context, req *dto.AdminDatasetImagesReq) (*dto.AdminDatasetImagesRes, error) { return service.Dataset.AdminListImages(ctx, req) } // DeleteImages 删除图片 func (c *cAdmin) DeleteImages(ctx context.Context, req *dto.AdminDatasetImagesDeleteReq) (*dto.AdminDatasetImagesDeleteRes, error) { return service.Dataset.AdminDeleteImages(ctx, req) } // Image 图片访问(直写响应体:service 校验归属返回路径,controller 输出二进制) func (c *cAdmin) Image(ctx context.Context, req *dto.AdminDatasetImageReq) (*dto.AdminDatasetImageRes, error) { path, err := service.Dataset.ImageFile(ctx, req.DatasetId, req.Filename) if err != nil { return nil, err } r := ghttp.RequestFromCtx(ctx) r.Response.ServeFile(path) return &dto.AdminDatasetImageRes{}, nil } // UploadCover 上传数据集封面 func (c *cAdmin) UploadCover(ctx context.Context, req *dto.AdminDatasetCoverUploadReq) (*dto.AdminDatasetCoverUploadRes, error) { return service.Dataset.AdminUploadCover(ctx, req) } // Cover 封面访问(直写响应体;URL 不随封面更换变化,必须 no-store 防浏览器缓存旧图) func (c *cAdmin) Cover(ctx context.Context, req *dto.AdminDatasetCoverReq) (*dto.AdminDatasetCoverRes, error) { path, err := service.Dataset.CoverFile(ctx, req.DatasetId) if err != nil { return nil, err } r := ghttp.RequestFromCtx(ctx) r.Response.Header().Set("Cache-Control", "no-store") r.Response.ServeFile(path) return &dto.AdminDatasetCoverRes{}, nil } // DeleteCover 删除数据集封面 func (c *cAdmin) DeleteCover(ctx context.Context, req *dto.AdminDatasetCoverDeleteReq) (*dto.AdminDatasetCoverDeleteRes, error) { return service.Dataset.AdminDeleteCover(ctx, req) } // ---------- 训练编排 ---------- // ListTrainings 训练任务列表 func (c *cAdmin) ListTrainings(ctx context.Context, req *dto.AdminTrainingListReq) (*dto.AdminTrainingListRes, error) { return service.Training.AdminListTrainings(ctx, req) } // StartTraining 发起训练 func (c *cAdmin) StartTraining(ctx context.Context, req *dto.AdminTrainingStartReq) (*dto.AdminTrainingStartRes, error) { return service.Training.AdminStartTraining(ctx, req) } // TrainingDetail 训练任务详情 func (c *cAdmin) TrainingDetail(ctx context.Context, req *dto.AdminTrainingDetailReq) (*dto.AdminTrainingDetailRes, error) { return service.Training.AdminTrainingDetail(ctx, req) } // CancelTraining 取消训练 func (c *cAdmin) CancelTraining(ctx context.Context, req *dto.AdminTrainingCancelReq) (*dto.AdminTrainingCancelRes, error) { return service.Training.AdminCancelTraining(ctx, req) } // PublishTraining 发布模型版本 func (c *cAdmin) PublishTraining(ctx context.Context, req *dto.AdminTrainingPublishReq) (*dto.AdminTrainingPublishRes, error) { return service.Training.AdminPublish(ctx, req) } // ---------- 预标注 ---------- // ListLabelTasks 预标注任务列表 func (c *cAdmin) ListLabelTasks(ctx context.Context, req *dto.AdminLabelTaskListReq) (*dto.AdminLabelTaskListRes, error) { return service.LabelTask.AdminListLabelTasks(ctx, req) } // StartLabelTask 发起预标注 func (c *cAdmin) StartLabelTask(ctx context.Context, req *dto.AdminLabelTaskStartReq) (*dto.AdminLabelTaskStartRes, error) { return service.LabelTask.AdminStartLabelTask(ctx, req) } // LabelTaskDetail 预标注任务详情(工作台数据) func (c *cAdmin) LabelTaskDetail(ctx context.Context, req *dto.AdminLabelTaskDetailReq) (*dto.AdminLabelTaskDetailRes, error) { return service.LabelTask.AdminLabelTaskDetail(ctx, req) } // LabelWorkbench 标注工作台数据(无历史任务时直接用数据集图片 + 已确认标注) func (c *cAdmin) LabelWorkbench(ctx context.Context, req *dto.AdminLabelWorkbenchReq) (*dto.AdminLabelWorkbenchRes, error) { return service.LabelTask.AdminLabelWorkbench(ctx, req) } // SaveLabel 保存单张图标注 func (c *cAdmin) SaveLabel(ctx context.Context, req *dto.AdminLabelSaveReq) (*dto.AdminLabelSaveRes, error) { return service.LabelTask.AdminLabelSave(ctx, req) } // VlmReview VLM 藏匿位补检(两阶段标注第二阶段;VL 与图像生成显存互斥,批量补检须在生成空闲时执行) func (c *cAdmin) VlmReview(ctx context.Context, req *dto.AdminImageVlmReviewReq) (*dto.AdminImageVlmReviewRes, error) { return service.LabelTask.AdminImageVlmReview(ctx, req) } // GenOptions 生成表单选项(物种池/场景池,config 维护) func (c *cAdmin) GenOptions(ctx context.Context, req *dto.AdminDatasetGenOptionsReq) (*dto.AdminDatasetGenOptionsRes, error) { return service.Dataset.AdminGenOptions(ctx, req) }