conf #564

Merged
chenhao merged 3 commits from conf into test 2024-06-27 18:21:13 +08:00
6 changed files with 136 additions and 13 deletions
Showing only changes of commit 6b730ba361 - Show all commits

View File

@ -1699,6 +1699,7 @@ func (s *Service) ApiCreateMoment(ctx *gin.Context, req *momentproto.ApiCreateRe
// 添加审核任务
imageaudittasks := s.CreateMomentImageAudit(ctx, req.Moment)
textaudittasks := s.CreateMomentTextAudit(ctx, oldMoment, req.Moment)
videomoderationtasks := s.CreateMomentVideoModeration(ctx, req.Moment)
// 封装动态审核任务
momentAuditTask := &dbstruct.MomentAuditTask{
@ -1708,11 +1709,15 @@ func (s *Service) ApiCreateMoment(ctx *gin.Context, req *momentproto.ApiCreateRe
Status: goproto.Int64(consts.MomentAudit_Created),
ManuallyReviewStatus: goproto.Int64(consts.MomentManuallyReview_Waiting),
}
momentAuditTask.ImageAuditTaskStatus = goproto.Int64(consts.MomentAudit_Created)
if len(imageaudittasks) > 0 {
momentAuditTask.ImageAuditTaskId = imageaudittasks[0].Id
momentAuditTask.ImageAuditTaskStatus = goproto.Int64(consts.MomentAudit_Created)
} else if len(videomoderationtasks) > 0 {
momentAuditTask.ImageAuditTaskId = videomoderationtasks[0].Id
} else {
momentAuditTask.ImageAuditTaskStatus = goproto.Int64(consts.MomentAudit_Passed)
ec = errcode.ErrCodeBadParam
return
}
if len(textaudittasks) > 0 {
momentAuditTask.TextAuditTaskId = textaudittasks[0].Id
@ -1772,18 +1777,20 @@ func (s *Service) ApiUpdateMoment(ctx *gin.Context, req *momentproto.ApiUpdateRe
// 添加审核任务
imageaudittasks := s.CreateMomentImageAudit(ctx, req.Moment)
textaudittasks := s.CreateMomentTextAudit(ctx, oldMoment, req.Moment)
videomoderationtasks := s.CreateMomentVideoModeration(ctx, req.Moment)
// 封装动态审核任务
momentAuditTask := &dbstruct.MomentAuditTask{
AssociativeTableId: goproto.String(fmt.Sprint(util.DerefInt64(req.Moment.Id))),
ManuallyReviewStatus: goproto.Int64(consts.MomentManuallyReview_Waiting),
}
momentAuditTask.ImageAuditTaskStatus = goproto.Int64(consts.MomentAudit_Created)
if len(imageaudittasks) > 0 {
momentAuditTask.AuditedMedia = imageaudittasks[0].AuditedMedia
momentAuditTask.ImageAuditTaskId = imageaudittasks[0].Id
momentAuditTask.ImageAuditTaskStatus = goproto.Int64(consts.MomentAudit_Created)
} else {
momentAuditTask.ImageAuditTaskStatus = goproto.Int64(consts.MomentAudit_Passed)
momentAuditTask.AuditedMedia = imageaudittasks[0].AuditedMedia
} else if len(videomoderationtasks) > 0 {
momentAuditTask.ImageAuditTaskId = videomoderationtasks[0].Id
momentAuditTask.AuditedMedia = imageaudittasks[0].AuditedMedia
}
if len(textaudittasks) > 0 {
momentAuditTask.AuditedText = textaudittasks[0].AuditedText

View File

@ -1106,6 +1106,7 @@ func (s *Service) OpCreateMoment(ctx *gin.Context, req *momentproto.OpCreateReq)
// 添加审核任务
imageaudittasks := s.CreateMomentImageAudit(ctx, req.Moment)
textaudittasks := s.CreateMomentTextAudit(ctx, oldMoment, req.Moment)
videomoderationtasks := s.CreateMomentVideoModeration(ctx, req.Moment)
// 封装动态审核任务
momentAuditTask := &dbstruct.MomentAuditTask{
@ -1114,11 +1115,15 @@ func (s *Service) OpCreateMoment(ctx *gin.Context, req *momentproto.OpCreateReq)
AuditedText: req.Moment.Text,
ManuallyReviewStatus: goproto.Int64(consts.MomentManuallyReview_Waiting),
}
momentAuditTask.ImageAuditTaskStatus = goproto.Int64(consts.MomentAudit_Created)
if len(imageaudittasks) > 0 {
momentAuditTask.ImageAuditTaskId = imageaudittasks[0].Id
momentAuditTask.ImageAuditTaskStatus = goproto.Int64(consts.MomentAudit_Created)
} else if len(videomoderationtasks) > 0 {
momentAuditTask.ImageAuditTaskId = videomoderationtasks[0].Id
} else {
momentAuditTask.ImageAuditTaskStatus = goproto.Int64(consts.MomentAudit_Passed)
ec = errcode.ErrCodeBadParam
return
}
if len(textaudittasks) > 0 {
momentAuditTask.TextAuditTaskId = textaudittasks[0].Id
@ -1169,18 +1174,20 @@ func (s *Service) OpUpdateMoment(ctx *gin.Context, req *momentproto.OpUpdateReq)
// 添加审核任务
imageaudittasks := s.CreateMomentImageAudit(ctx, req.Moment)
textaudittasks := s.CreateMomentTextAudit(ctx, oldMoment, req.Moment)
videomoderationtasks := s.CreateMomentVideoModeration(ctx, req.Moment)
// 封装动态审核任务
momentAuditTask := &dbstruct.MomentAuditTask{
AssociativeTableId: goproto.String(fmt.Sprint(util.DerefInt64(req.Moment.Id))),
ManuallyReviewStatus: goproto.Int64(consts.MomentManuallyReview_Waiting),
}
momentAuditTask.ImageAuditTaskStatus = goproto.Int64(consts.MomentAudit_Created)
if len(imageaudittasks) > 0 {
momentAuditTask.AuditedMedia = imageaudittasks[0].AuditedMedia
momentAuditTask.ImageAuditTaskId = imageaudittasks[0].Id
momentAuditTask.ImageAuditTaskStatus = goproto.Int64(consts.MomentAudit_Created)
} else {
momentAuditTask.ImageAuditTaskStatus = goproto.Int64(consts.MomentAudit_Passed)
momentAuditTask.AuditedMedia = imageaudittasks[0].AuditedMedia
} else if len(videomoderationtasks) > 0 {
momentAuditTask.ImageAuditTaskId = videomoderationtasks[0].Id
momentAuditTask.AuditedMedia = imageaudittasks[0].AuditedMedia
}
if len(textaudittasks) > 0 {
momentAuditTask.AuditedText = textaudittasks[0].AuditedText

View File

@ -17,6 +17,7 @@ import (
textauditproto "service/api/proto/textaudit/proto"
textaudittaskproto "service/api/proto/textaudittask/proto"
thumbsupproto "service/api/proto/thumbsup/proto"
video_moderation_task_proto "service/api/proto/video_moderation_task/proto"
zoneproto "service/api/proto/zone/proto"
zone_collaborator_proto "service/api/proto/zone_collaborator/proto"
zone_third_partner_proto "service/api/proto/zone_third_partner/proto"
@ -2093,3 +2094,46 @@ func (s *Service) utilAssembleDailyStatementZoneInfo(zoneprofits, zonerefunds []
return
}
// 同步图像审核结果
func (s *Service) utilSyncVideoModerationTaskResultByBatchId(ctx *gin.Context, batchId string) (err error) {
// 查询得到该批次所有有关动态的图像审核任务
videomoderationtasks, err := _DefaultVideoModerationTask.OpList(ctx, &video_moderation_task_proto.OpListReq{
AssociativeDatabase: goproto.String(dao.DBMoment),
AssociativeTableName: goproto.String(dao.COLMoment),
AssociativeTableColumn: goproto.String("media_component"),
BatchId: goproto.String(batchId),
})
if err != nil {
logger.Error("_DefaultVideoModerationTask OpList fail, err: %v", err)
return
}
// 将有关动态的图像审核任务审核结果同步到动态审核表
_map := make(map[int64][]string)
for _, videomoderationtask := range videomoderationtasks {
ids := _map[videomoderationtask.GetStatus()]
ids = append(ids, videomoderationtask.GetId())
_map[videomoderationtask.GetStatus()] = ids
}
for status, ids := range _map {
logger.Info("status: %v, ids: %v", status, ids)
task := &dbstruct.MomentAuditTask{
ImageAuditTaskStatus: goproto.Int64(status),
}
err = _DefaultMomentAuditTask.OpUpdateByImageAuditTaskIds(ctx, task, ids)
if err != nil {
logger.Error("_DefaultMomentAuditTask OpUpdateByVideoModerationTaskIds fail, err: %v", err)
return
}
}
// 同步本批次所有待人工复审的任务(通过,或机审失败)
err = s.utilSyncWaitingForManuallyReviewMoment(ctx, batchId)
if err != nil {
logger.Error("_DefaultMomentAuditTask OpUpdateByVideoModerationTaskIds fail, err: %v", err)
return
}
return
}

View File

@ -3,6 +3,7 @@ package service
import (
"fmt"
"service/api/consts"
momentproto "service/api/proto/moment/proto"
zonemomentproto "service/api/proto/zonemoment/proto"
"service/bizcommon/util"
"service/dbstruct"
@ -32,6 +33,7 @@ func (handler *VideoModerationTaskResultHandler) Handle(ctx *gin.Context, task *
func (handler *VideoModerationTaskResultHandler) initVideoModerationTaskUpdateFuncGeneratorMap() {
handler.videoModerationTaskUpdateFuncGeneratorMap = make(map[string]func(ctx *gin.Context, task *dbstruct.VideoModerationTask, option int) func() error)
handler.generateMomentMediaComponentUpdateFunc()
handler.generateZoneMomentMediaComponentUpdateFunc()
}
@ -49,6 +51,26 @@ func (handler *VideoModerationTaskResultHandler) getVideoModerationTaskUpdateFun
}
// 动态表->视频内容,通过和不通过均不作处理,等待人工审核
func (handler *VideoModerationTaskResultHandler) generateMomentMediaComponentUpdateFunc() {
handler.videoModerationTaskUpdateFuncGeneratorMap["moment|moment|media_component"] = func(ctx *gin.Context, task *dbstruct.VideoModerationTask, option int) func() error {
return func() error {
//20240403更新: 增加成功后处理的切面
if option == consts.ImageAuditTaskUpdate_Success {
return nil
}
if option == consts.ImageAuditTaskUpdate_Pass {
//return passMomentVideoModerationTask(ctx, task)
return nil
} else {
return rollbackMomentVideoModerationTask(ctx, task)
}
}
}
}
// 私密动态表->图像内容,若不通过,则写入不通过的原因
func (handler *VideoModerationTaskResultHandler) generateZoneMomentMediaComponentUpdateFunc() {
handler.videoModerationTaskUpdateFuncGeneratorMap["zone_moment|zone_moment|media_component"] = func(ctx *gin.Context, task *dbstruct.VideoModerationTask, option int) func() error {
@ -92,3 +114,16 @@ func (handler *VideoModerationTaskResultHandler) generateZoneMomentMediaComponen
}
}
}
// 回退动态表视频
func rollbackMomentVideoModerationTask(ctx *gin.Context, task *dbstruct.VideoModerationTask) (err error) {
if err := _DefaultMoment.OpUpdate(ctx, &momentproto.OpUpdateReq{
Moment: &dbstruct.Moment{
Id: task.AssociativeTableId,
Status: goproto.Int64(consts.Moment_AuditRejected),
},
}); err != nil {
return err
}
return nil
}

View File

@ -13,6 +13,26 @@ import (
goproto "google.golang.org/protobuf/proto"
)
func (s *Service) CreateMomentVideoModeration(ctx *gin.Context, newMoment *dbstruct.Moment) (tasks []*dbstruct.VideoModerationTask) {
if newMoment.MediaComp != nil && len(newMoment.MediaComp.GetVideoIds()) > 0 {
tasks = append(tasks, &dbstruct.VideoModerationTask{
RouteUrl: goproto.String(ctx.Request.URL.Path),
AssociativeDatabase: goproto.String("moment"),
AssociativeTableName: goproto.String("moment"),
AssociativeTableId: newMoment.Id,
AssociativeTableColumn: goproto.String("media_component"),
AuditedMedia: newMoment.MediaComp,
OldMedia: nil,
IsAligned: goproto.Int64(consts.VideoModerationIsAligned_Yes),
})
}
addVideoModerationTasks(ctx, tasks)
return
}
func (s *Service) CreateZoneMomentVideoModeration(ctx *gin.Context, newZoneMoment *dbstruct.ZoneMoment) (tasks []*dbstruct.VideoModerationTask) {
if newZoneMoment.MediaComp != nil && len(newZoneMoment.MediaComp.GetVideoIds()) > 0 {

View File

@ -552,6 +552,11 @@ func (s *CronService) VideoModerationBatch(ctx context.Context, param *xxl.RunRe
} else {
handleMsg.WriteString(fmt.Sprintf("batchId : %v, video moderation tasks of this batchId have finished, successNum: %v, failNum: %v", batchId, successNum, failNum))
}
// 同步视频审核结果
err = DefaultService.utilSyncVideoModerationTaskResultByBatchId(&gin.Context{}, batchId)
if err != nil {
handleMsg.WriteString(fmt.Sprintf("ERROR : batchId : %v, video moderation tasks of this batchId have failed to syncronize, err :%v", batchId, err))
}
logger.Info("Video moderation batch ends...")
return handleMsg.String()
@ -562,13 +567,18 @@ func (s *CronService) VideoModerationBatchHis(ctx context.Context, param *xxl.Ru
handleMsg := &strings.Builder{}
// 刷新批次号
batchId := param.ExecutorParams
// 执行图像审核
// 执行视频审核
successNum, failNum, err := videomoderation.Run(batchId)
if err != nil {
handleMsg.WriteString(fmt.Sprintf("ERROR : batchId : %v, video moderation tasks of this batchId have failed, successNum: %v, failNum: %v, err :%v ; ", batchId, successNum, failNum, err))
} else {
handleMsg.WriteString(fmt.Sprintf("batchId : %v, video moderation tasks of this batchId have finished, successNum: %v, failNum: %v", batchId, successNum, failNum))
}
// 同步视频审核结果
err = DefaultService.utilSyncVideoModerationTaskResultByBatchId(&gin.Context{}, batchId)
if err != nil {
handleMsg.WriteString(fmt.Sprintf("ERROR : batchId : %v, video moderation tasks of this batchId have failed to syncronize, err :%v", batchId, err))
}
logger.Info("Video moderation batch ends...")
return handleMsg.String()