285 lines
12 KiB
Go
285 lines
12 KiB
Go
package controller
|
||
|
||
import (
|
||
"context"
|
||
"strings"
|
||
|
||
"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)
|
||
}
|
||
|
||
// NegativeLibrary 获取负样本库(无则创建)
|
||
func (c *cAdmin) NegativeLibrary(ctx context.Context, req *dto.AdminDatasetNegativeReq) (*dto.AdminDatasetNegativeRes, error) {
|
||
return service.Dataset.AdminNegativeLibrary(ctx, req)
|
||
}
|
||
|
||
// NegativeGenerate 负样本批量生成(异步任务,含 RF-DETR 空检剔除)
|
||
func (c *cAdmin) NegativeGenerate(ctx context.Context, req *dto.AdminNegativeGenerateReq) (*dto.AdminNegativeGenerateRes, error) {
|
||
return service.Dataset.AdminNegativeGenerate(ctx, req)
|
||
}
|
||
|
||
// UploadImages 上传图片
|
||
func (c *cAdmin) UploadImages(ctx context.Context, req *dto.AdminDatasetUploadReq) (*dto.AdminDatasetUploadRes, error) {
|
||
return service.Dataset.AdminUploadImages(ctx, req)
|
||
}
|
||
|
||
// GenerateImages AI 生成图片(异步任务,返回 taskId 供轮询进度)
|
||
func (c *cAdmin) GenerateImages(ctx context.Context, req *dto.AdminDatasetGenerateReq) (*dto.AdminDatasetGenerateRes, error) {
|
||
return service.Dataset.AdminGenerateImages(ctx, req)
|
||
}
|
||
|
||
// GenTaskQuery 生成任务进度查询
|
||
func (c *cAdmin) GenTaskQuery(ctx context.Context, req *dto.AdminGenTaskQueryReq) (*dto.AdminGenTaskQueryRes, error) {
|
||
return service.Dataset.AdminGenTaskQuery(ctx, req)
|
||
}
|
||
|
||
// GenPools VLM 重新生成数据集生成参数池
|
||
func (c *cAdmin) GenPools(ctx context.Context, req *dto.AdminGenPoolsReq) (*dto.AdminGenPoolsRes, error) {
|
||
return service.Dataset.AdminGenPools(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)
|
||
}
|
||
|
||
// CleanPreview 数据清洗预览(桶分布/候选清单/已排除清单)
|
||
func (c *cAdmin) CleanPreview(ctx context.Context, req *dto.AdminDatasetCleanPreviewReq) (*dto.AdminDatasetCleanPreviewRes, error) {
|
||
return service.Dataset.AdminCleanPreview(ctx, req)
|
||
}
|
||
|
||
// CleanApply 数据清洗执行(批量置/清排除标记)
|
||
func (c *cAdmin) CleanApply(ctx context.Context, req *dto.AdminDatasetCleanApplyReq) (*dto.AdminDatasetCleanApplyRes, error) {
|
||
return service.Dataset.AdminCleanApply(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 防浏览器缓存旧图;
|
||
// datasetId=0 时按 name+filename 直读——新建对话框预生成封面回显)
|
||
func (c *cAdmin) Cover(ctx context.Context, req *dto.AdminDatasetCoverReq) (*dto.AdminDatasetCoverRes, error) {
|
||
path, err := service.Dataset.CoverFile(ctx, req.DatasetId, strings.TrimSpace(req.Name), strings.TrimSpace(req.Filename))
|
||
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)
|
||
}
|
||
|
||
// GenCover 生成数据集封面(z-image 文生图;编辑对话框「AI 生成封面」按钮入口,datasetId=0 新建预生成)
|
||
func (c *cAdmin) GenCover(ctx context.Context, req *dto.AdminGenCoverReq) (*dto.AdminGenCoverRes, error) {
|
||
return service.Dataset.AdminGenCover(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)
|
||
}
|
||
|
||
// ---------- 标注众包(2026-09-04) ----------
|
||
|
||
// CreateAnnotateTask 下发标注任务
|
||
func (c *cAdmin) CreateAnnotateTask(ctx context.Context, req *dto.AdminAnnotateTaskCreateReq) (*dto.AdminAnnotateTaskCreateRes, error) {
|
||
return service.Annotate.AdminCreateTask(ctx, req)
|
||
}
|
||
|
||
// ListAnnotateTasks 标注任务列表
|
||
func (c *cAdmin) ListAnnotateTasks(ctx context.Context, req *dto.AdminAnnotateTaskListReq) (*dto.AdminAnnotateTaskListRes, error) {
|
||
return service.Annotate.AdminListTasks(ctx, req)
|
||
}
|
||
|
||
// StopAnnotateTask 停用标注任务
|
||
func (c *cAdmin) StopAnnotateTask(ctx context.Context, req *dto.AdminAnnotateTaskStopReq) (*dto.AdminAnnotateTaskStopRes, error) {
|
||
return service.Annotate.AdminStopTask(ctx, req)
|
||
}
|
||
|
||
// AnnotateReview 批量审核标注(通过/拒绝)
|
||
func (c *cAdmin) AnnotateReview(ctx context.Context, req *dto.AdminAnnotateReviewReq) (*dto.AdminAnnotateReviewRes, error) {
|
||
return service.Annotate.AdminReview(ctx, req)
|
||
}
|
||
|
||
// ListAnnotateRecords 用户标注记录列表
|
||
func (c *cAdmin) ListAnnotateRecords(ctx context.Context, req *dto.AdminAnnotateRecordListReq) (*dto.AdminAnnotateRecordListRes, error) {
|
||
return service.Annotate.AdminListRecords(ctx, req)
|
||
}
|
||
|
||
// UnfreezeAnnotate 手动解冻标注资格
|
||
func (c *cAdmin) UnfreezeAnnotate(ctx context.Context, req *dto.AdminAnnotateUnfreezeReq) (*dto.AdminAnnotateUnfreezeRes, error) {
|
||
return service.Annotate.AdminUnfreeze(ctx, req)
|
||
}
|
||
|
||
// ListFalseTargets 假目标上报列表
|
||
func (c *cAdmin) ListFalseTargets(ctx context.Context, req *dto.AdminFalseTargetListReq) (*dto.AdminFalseTargetListRes, error) {
|
||
return service.FalseTarget.AdminList(ctx, req)
|
||
}
|
||
|
||
// FalseTargetImage 假目标裁剪图预览(直写响应体)
|
||
func (c *cAdmin) FalseTargetImage(ctx context.Context, req *dto.AdminFalseTargetImageReq) (*dto.AdminFalseTargetImageRes, error) {
|
||
path, err := service.FalseTarget.ImageFile(ctx, req.Id)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
r := ghttp.RequestFromCtx(ctx)
|
||
r.Response.ServeFile(path)
|
||
return &dto.AdminFalseTargetImageRes{}, nil
|
||
}
|
||
|
||
// ReviewFalseTargets 审核假目标上报(通过=入负样本库;拒绝=删文件)
|
||
func (c *cAdmin) ReviewFalseTargets(ctx context.Context, req *dto.AdminFalseTargetReviewReq) (*dto.AdminFalseTargetReviewRes, error) {
|
||
return service.FalseTarget.AdminReview(ctx, req)
|
||
}
|