177 lines
5.0 KiB
Go
177 lines
5.0 KiB
Go
package check
|
|
|
|
import (
|
|
dto "cid/model/dto/check"
|
|
check2 "cid/service/check"
|
|
"context"
|
|
"fmt"
|
|
|
|
"gitea.redpowerfuture.com/red-future/common/beans"
|
|
)
|
|
|
|
// ContentCheckController 内容送检控制器
|
|
type ContentCheckController struct{}
|
|
|
|
// ContentCheck 内容送检控制器单例
|
|
var ContentCheck = new(ContentCheckController)
|
|
|
|
// StatusRes 状态响应
|
|
type StatusRes struct {
|
|
Running bool `json:"running"`
|
|
Config check2.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 = WithAdminUser(ctx)
|
|
|
|
if check2.TencentContentCheck.IsRunning() {
|
|
return &beans.ResponseEmpty{}, nil
|
|
}
|
|
|
|
// 如果有配置参数,更新配置
|
|
if req.BatchSize > 0 || req.IntervalSeconds > 0 {
|
|
config := check2.ContentCheckConfig{
|
|
BatchSize: req.BatchSize,
|
|
ImageEnabled: req.ImageEnabled,
|
|
VideoEnabled: req.VideoEnabled,
|
|
IntervalSeconds: req.IntervalSeconds,
|
|
}
|
|
check2.TencentContentCheck.SetConfig(config)
|
|
}
|
|
|
|
err = check2.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 = WithAdminUser(ctx)
|
|
check2.TencentContentCheck.Stop(ctx)
|
|
return
|
|
}
|
|
|
|
// Status 获取送检服务状态
|
|
func (c *ContentCheckController) Status(ctx context.Context, req *dto.EmptyReq) (res *StatusRes, err error) {
|
|
ctx = WithAdminUser(ctx)
|
|
|
|
res = &StatusRes{
|
|
Running: check2.TencentContentCheck.IsRunning(),
|
|
Config: check2.TencentContentCheck.GetConfig(),
|
|
PendingStats: check2.TencentContentCheck.GetPendingStats(ctx),
|
|
}
|
|
return
|
|
}
|
|
|
|
// ProcessImageCallback 处理图片检测回调
|
|
func (c *ContentCheckController) ProcessImageCallback(ctx context.Context, req *dto.ProcessImageCallbackReq) (res *beans.ResponseEmpty, err error) {
|
|
ctx = WithAdminUser(ctx)
|
|
|
|
if req.CallbackData == "" {
|
|
return nil, fmt.Errorf("callbackData不能为空")
|
|
}
|
|
|
|
err = check2.TencentContentCallback.ProcessImageCallback(ctx, req.CallbackData)
|
|
return
|
|
}
|
|
|
|
// ProcessVideoCallback 处理视频检测回调
|
|
func (c *ContentCheckController) ProcessVideoCallback(ctx context.Context, req *dto.ProcessVideoCallbackReq) (res *beans.ResponseEmpty, err error) {
|
|
ctx = WithAdminUser(ctx)
|
|
|
|
if req.CallbackData == "" {
|
|
return nil, fmt.Errorf("callbackData不能为空")
|
|
}
|
|
|
|
err = check2.TencentContentCallback.ProcessVideoCallback(ctx, req.CallbackData)
|
|
return
|
|
}
|
|
|
|
// ProcessImageResult 查询并处理图片检测结果(轮询模式)
|
|
func (c *ContentCheckController) ProcessImageResult(ctx context.Context, req *dto.ProcessImageResultReq) (res *beans.ResponseEmpty, err error) {
|
|
ctx = WithAdminUser(ctx)
|
|
|
|
if req.TaskID == "" {
|
|
return nil, fmt.Errorf("taskId不能为空")
|
|
}
|
|
|
|
err = check2.TencentContentCallback.ProcessImageResult(ctx, req.TaskID)
|
|
return
|
|
}
|
|
|
|
// ProcessVideoResult 查询并处理视频检测结果(轮询模式)
|
|
func (c *ContentCheckController) ProcessVideoResult(ctx context.Context, req *dto.ProcessVideoResultReq) (res *beans.ResponseEmpty, err error) {
|
|
ctx = WithAdminUser(ctx)
|
|
|
|
if req.TaskID == "" {
|
|
return nil, fmt.Errorf("taskId不能为空")
|
|
}
|
|
|
|
err = check2.TencentContentCallback.ProcessVideoResult(ctx, req.TaskID)
|
|
return
|
|
}
|
|
|
|
// ManualSubmitImageByID 根据图片ID手动提交送检
|
|
func (c *ContentCheckController) ManualSubmitImageByID(ctx context.Context, req *dto.ManualSubmitImageByIDReq) (res *dto.ManualSubmitRes, err error) {
|
|
ctx = WithAdminUser(ctx)
|
|
|
|
result, err := check2.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 = WithAdminUser(ctx)
|
|
|
|
result, err := check2.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 = WithAdminUser(ctx)
|
|
|
|
logs, err := check2.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 = WithAdminUser(ctx)
|
|
|
|
logs, err := check2.TencentContentCallback.GetCheckLogsByVideoID(ctx, req.VideoID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
res = &dto.GetCheckLogsRes{
|
|
List: logs,
|
|
}
|
|
return
|
|
}
|