Files
cid/controller/yidun/content_check_controller.go
2026-05-15 10:28:17 +08:00

176 lines
5.6 KiB
Go

package yidun
import (
dto "cid/model/dto/yidun"
serviceDataengine "cid/service/dataengine"
"context"
"gitea.com/red-future/common/beans"
)
// ContentCheckController 内容送检控制器
type ContentCheckController struct{}
// ContentCheck 内容送检控制器单例
var ContentCheck = new(ContentCheckController)
// StatusRes 状态响应
type StatusRes struct {
Running bool `json:"running"`
Config serviceDataengine.ContentCheckConfig `json:"config"`
PendingStats map[string]int `json:"pending_stats"`
}
// Start 启动送检服务
func (c *ContentCheckController) Start(ctx context.Context, req *dto.StartCheckReq) (res *beans.ResponseEmpty, err error) {
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
if serviceDataengine.TencentContentCheck.IsRunning() {
return &beans.ResponseEmpty{}, nil
}
// 如果有配置参数,更新配置
if req.BatchSize > 0 || req.IntervalSeconds > 0 {
config := serviceDataengine.ContentCheckConfig{
BatchSize: req.BatchSize,
ImageEnabled: req.ImageEnabled,
VideoEnabled: req.VideoEnabled,
IntervalSeconds: req.IntervalSeconds,
}
serviceDataengine.TencentContentCheck.SetConfig(config)
}
err = serviceDataengine.TencentContentCheck.Start(ctx)
if err != nil {
return nil, err
}
return &beans.ResponseEmpty{}, nil
}
// Stop 停止送检服务
func (c *ContentCheckController) Stop(ctx context.Context, req *dto.EmptyReq) (res *beans.ResponseEmpty, err error) {
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
serviceDataengine.TencentContentCheck.Stop(ctx)
return
}
// Status 获取送检服务状态
func (c *ContentCheckController) Status(ctx context.Context, req *dto.EmptyReq) (res *StatusRes, err error) {
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
res = &StatusRes{
Running: serviceDataengine.TencentContentCheck.IsRunning(),
Config: serviceDataengine.TencentContentCheck.GetConfig(),
PendingStats: serviceDataengine.TencentContentCheck.GetPendingStats(ctx),
}
return
}
// ProcessImageCallback 处理图片检测回调
func (c *ContentCheckController) ProcessImageCallback(ctx context.Context, req *dto.ProcessImageCallbackReq) (res *beans.ResponseEmpty, err error) {
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
if req.CallbackData == "" {
return nil, err
}
err = serviceDataengine.TencentContentCallback.ProcessImageCallback(ctx, req.CallbackData)
return
}
// ProcessVideoCallback 处理视频检测回调
func (c *ContentCheckController) ProcessVideoCallback(ctx context.Context, req *dto.ProcessVideoCallbackReq) (res *beans.ResponseEmpty, err error) {
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
if req.CallbackData == "" {
return nil, err
}
err = serviceDataengine.TencentContentCallback.ProcessVideoCallback(ctx, req.CallbackData)
return
}
// ProcessImageResult 查询并处理图片检测结果(轮询模式)
func (c *ContentCheckController) ProcessImageResult(ctx context.Context, req *dto.ProcessImageResultReq) (res *beans.ResponseEmpty, err error) {
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
if req.TaskID == "" {
return nil, err
}
err = serviceDataengine.TencentContentCallback.ProcessImageResult(ctx, req.TaskID)
return
}
// ProcessVideoResult 查询并处理视频检测结果(轮询模式)
func (c *ContentCheckController) ProcessVideoResult(ctx context.Context, req *dto.ProcessVideoResultReq) (res *beans.ResponseEmpty, err error) {
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
if req.TaskID == "" {
return nil, err
}
err = serviceDataengine.TencentContentCallback.ProcessVideoResult(ctx, req.TaskID)
return
}
// ManualSubmitImageByID 根据图片ID手动提交送检
func (c *ContentCheckController) ManualSubmitImageByID(ctx context.Context, req *dto.ManualSubmitImageByIDReq) (res *dto.ManualSubmitRes, err error) {
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
result, err := serviceDataengine.TencentContentCheck.SubmitImageByID(ctx, req.ImageID)
if err != nil {
return nil, err
}
res = &dto.ManualSubmitRes{
TaskID: result.TaskID,
}
return
}
// ManualSubmitVideoByID 根据视频ID手动提交送检
func (c *ContentCheckController) ManualSubmitVideoByID(ctx context.Context, req *dto.ManualSubmitVideoByIDReq) (res *dto.ManualSubmitRes, err error) {
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
result, err := serviceDataengine.TencentContentCheck.SubmitVideoByID(ctx, req.VideoID)
if err != nil {
return nil, err
}
res = &dto.ManualSubmitRes{
TaskID: result.TaskID,
}
return
}
// GetImageCheckLogs 获取图片的送检日志
func (c *ContentCheckController) GetImageCheckLogs(ctx context.Context, req *dto.GetImageCheckLogsReq) (res *dto.GetCheckLogsRes, err error) {
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
logs, err := serviceDataengine.TencentContentCallback.GetCheckLogsByImageID(ctx, req.ImageID)
if err != nil {
return nil, err
}
res = &dto.GetCheckLogsRes{
List: logs,
}
return
}
// GetVideoCheckLogs 获取视频的送检日志
func (c *ContentCheckController) GetVideoCheckLogs(ctx context.Context, req *dto.GetVideoCheckLogsReq) (res *dto.GetCheckLogsRes, err error) {
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
logs, err := serviceDataengine.TencentContentCallback.GetCheckLogsByVideoID(ctx, req.VideoID)
if err != nil {
return nil, err
}
res = &dto.GetCheckLogsRes{
List: logs,
}
return
}