yidun送检功能
This commit is contained in:
190
service/dataengine/tencent_content_callback_service.go
Normal file
190
service/dataengine/tencent_content_callback_service.go
Normal file
@@ -0,0 +1,190 @@
|
||||
package dataengine
|
||||
|
||||
import (
|
||||
consts "cid/consts/dataengine"
|
||||
dao "cid/dao/dataengine"
|
||||
entity "cid/model/entity/dataengine"
|
||||
yidunService "cid/service/yidun"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
// TencentContentCallbackService 腾讯内容检测回调处理服务
|
||||
type TencentContentCallbackService struct{}
|
||||
|
||||
// TencentContentCallback 回调处理服务单例
|
||||
var TencentContentCallback = new(TencentContentCallbackService)
|
||||
|
||||
// ProcessImageCallback 处理图片检测回调
|
||||
func (s *TencentContentCallbackService) ProcessImageCallback(ctx context.Context, callbackData string) error {
|
||||
g.Log().Infof(ctx, "处理图片检测回调, data: %s", callbackData)
|
||||
|
||||
var callback yidunService.ImageCallbackData
|
||||
if err := json.Unmarshal([]byte(callbackData), &callback); err != nil {
|
||||
g.Log().Errorf(ctx, "解析图片回调数据失败: %v", err)
|
||||
return fmt.Errorf("解析回调数据失败: %w", err)
|
||||
}
|
||||
|
||||
if callback.Antispam == nil {
|
||||
return fmt.Errorf("回调数据格式错误:缺少antispam字段")
|
||||
}
|
||||
|
||||
antispam := callback.Antispam
|
||||
g.Log().Infof(ctx, "处理图片检测结果 - taskId: %s, suggestion: %d, resultType: %d",
|
||||
antispam.TaskId, antispam.Suggestion, antispam.ResultType)
|
||||
|
||||
// 根据 taskId 查找送检日志
|
||||
log, err := dao.TencentContentCheckLog.GetByTaskID(ctx, antispam.TaskId)
|
||||
if err != nil {
|
||||
g.Log().Errorf(ctx, "查找送检日志失败, taskId=%s: %v", antispam.TaskId, err)
|
||||
return fmt.Errorf("查找送检日志失败: %w", err)
|
||||
}
|
||||
|
||||
if log == nil {
|
||||
g.Log().Warningf(ctx, "未找到送检日志, taskId=%s", antispam.TaskId)
|
||||
return nil
|
||||
}
|
||||
|
||||
// 更新送检日志
|
||||
checkTime := antispam.CensorTime
|
||||
|
||||
err = dao.TencentContentCheckLog.UpdateCheckResult(ctx, log.Id,
|
||||
antispam.Suggestion, antispam.Label, antispam.ResultType, checkTime)
|
||||
if err != nil {
|
||||
g.Log().Errorf(ctx, "更新送检日志检测结果失败: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
g.Log().Infof(ctx, "图片检测回调处理完成, taskId=%s, suggestion=%d", antispam.TaskId, antispam.Suggestion)
|
||||
return nil
|
||||
}
|
||||
|
||||
// ProcessVideoCallback 处理视频检测回调
|
||||
func (s *TencentContentCallbackService) ProcessVideoCallback(ctx context.Context, callbackData string) error {
|
||||
g.Log().Infof(ctx, "处理视频检测回调, data: %s", callbackData)
|
||||
|
||||
var callback yidunService.VideoCallbackData
|
||||
if err := json.Unmarshal([]byte(callbackData), &callback); err != nil {
|
||||
g.Log().Errorf(ctx, "解析视频回调数据失败: %v", err)
|
||||
return fmt.Errorf("解析回调数据失败: %w", err)
|
||||
}
|
||||
|
||||
if callback.Antispam == nil {
|
||||
return fmt.Errorf("回调数据格式错误:缺少antispam字段")
|
||||
}
|
||||
|
||||
antispam := callback.Antispam
|
||||
g.Log().Infof(ctx, "处理视频检测结果 - taskId: %s, suggestion: %d, resultType: %d, censorSource: %d",
|
||||
antispam.TaskID, antispam.Suggestion, antispam.ResultType, antispam.CensorSource)
|
||||
|
||||
// 根据 taskId 查找送检日志
|
||||
log, err := dao.TencentContentCheckLog.GetByTaskID(ctx, antispam.TaskID)
|
||||
if err != nil {
|
||||
g.Log().Errorf(ctx, "查找送检日志失败, taskId=%s: %v", antispam.TaskID, err)
|
||||
return fmt.Errorf("查找送检日志失败: %w", err)
|
||||
}
|
||||
|
||||
if log == nil {
|
||||
g.Log().Warningf(ctx, "未找到送检日志, taskId=%s", antispam.TaskID)
|
||||
return nil
|
||||
}
|
||||
|
||||
// 更新送检日志
|
||||
checkTime := antispam.CensorTime
|
||||
if checkTime == 0 {
|
||||
checkTime = antispam.CheckTime
|
||||
}
|
||||
|
||||
err = dao.TencentContentCheckLog.UpdateCheckResult(ctx, log.Id,
|
||||
antispam.Suggestion, antispam.Label, antispam.ResultType, checkTime)
|
||||
if err != nil {
|
||||
g.Log().Errorf(ctx, "更新送检日志检测结果失败: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
g.Log().Infof(ctx, "视频检测回调处理完成, taskId=%s, suggestion=%d", antispam.TaskID, antispam.Suggestion)
|
||||
return nil
|
||||
}
|
||||
|
||||
// ProcessImageResult 手动处理图片检测结果(轮询模式)
|
||||
func (s *TencentContentCallbackService) ProcessImageResult(ctx context.Context, taskID string) error {
|
||||
g.Log().Infof(ctx, "查询图片检测结果, taskId: %s", taskID)
|
||||
|
||||
// 查找送检日志
|
||||
log, err := dao.TencentContentCheckLog.GetByTaskID(ctx, taskID)
|
||||
if err != nil || log == nil {
|
||||
return fmt.Errorf("未找到送检日志, taskId=%s", taskID)
|
||||
}
|
||||
|
||||
// 调用易盾查询结果
|
||||
result, err := yidunService.ImageDetection.GetImageResult(ctx, taskID)
|
||||
if err != nil {
|
||||
g.Log().Errorf(ctx, "查询图片检测结果失败: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// 更新日志
|
||||
err = dao.TencentContentCheckLog.UpdateCheckResult(ctx, log.Id,
|
||||
result.Suggestion, result.Label, result.ResultType, result.CensorTime)
|
||||
if err != nil {
|
||||
g.Log().Errorf(ctx, "更新送检日志检测结果失败: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
g.Log().Infof(ctx, "图片检测结果处理完成, taskId=%s, suggestion=%d", taskID, result.Suggestion)
|
||||
return nil
|
||||
}
|
||||
|
||||
// ProcessVideoResult 手动处理视频检测结果(轮询模式)
|
||||
func (s *TencentContentCallbackService) ProcessVideoResult(ctx context.Context, taskID string) error {
|
||||
g.Log().Infof(ctx, "查询视频检测结果, taskId: %s", taskID)
|
||||
|
||||
// 查找送检日志
|
||||
log, err := dao.TencentContentCheckLog.GetByTaskID(ctx, taskID)
|
||||
if err != nil || log == nil {
|
||||
return fmt.Errorf("未找到送检日志, taskId=%s", taskID)
|
||||
}
|
||||
|
||||
// 调用易盾查询结果
|
||||
result, err := yidunService.VideoDetection.GetVideoResult(ctx, taskID)
|
||||
if err != nil {
|
||||
g.Log().Errorf(ctx, "查询视频检测结果失败: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// 更新日志
|
||||
err = dao.TencentContentCheckLog.UpdateCheckResult(ctx, log.Id,
|
||||
result.Suggestion, result.Label, result.ResultType, result.CensorTime)
|
||||
if err != nil {
|
||||
g.Log().Errorf(ctx, "更新送检日志检测结果失败: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
g.Log().Infof(ctx, "视频检测结果处理完成, taskId=%s, suggestion=%d", taskID, result.Suggestion)
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetCheckLogsByImageID 根据图片ID获取送检日志
|
||||
func (s *TencentContentCallbackService) GetCheckLogsByImageID(ctx context.Context, imageID string) ([]entity.TencentContentCheckLog, error) {
|
||||
// 先获取图片数据
|
||||
image, err := dao.TencentImage.GetByImageID(ctx, imageID)
|
||||
if err != nil || image == nil {
|
||||
return nil, fmt.Errorf("未找到图片数据")
|
||||
}
|
||||
|
||||
return dao.TencentContentCheckLog.GetBySourceID(ctx, consts.SourceTableTencentImage, image.Id)
|
||||
}
|
||||
|
||||
// GetCheckLogsByVideoID 根据视频ID获取送检日志
|
||||
func (s *TencentContentCallbackService) GetCheckLogsByVideoID(ctx context.Context, videoID string) ([]entity.TencentContentCheckLog, error) {
|
||||
// 先获取视频数据
|
||||
video, err := dao.TencentVideo.GetByVideoID(ctx, videoID)
|
||||
if err != nil || video == nil {
|
||||
return nil, fmt.Errorf("未找到视频数据")
|
||||
}
|
||||
|
||||
return dao.TencentContentCheckLog.GetBySourceID(ctx, consts.SourceTableTencentVideo, video.Id)
|
||||
}
|
||||
Reference in New Issue
Block a user