yidun送检功能

This commit is contained in:
2026-05-15 10:28:17 +08:00
parent 51d26aeee7
commit c8cc19e8e7
29 changed files with 5133 additions and 121 deletions

View File

@@ -0,0 +1,85 @@
package dataengine
import (
"gitea.com/red-future/common/beans"
)
// MaterialVerifyLog 素材校验日志实体
type MaterialVerifyLog struct {
beans.SQLBaseDO `orm:",inherit"`
// 业务字段
TenantID int64 `orm:"tenant_id" json:"tenantId" description:"租户ID"`
MaterialType string `orm:"material_type" json:"materialType" description:"素材类型 IMAGE/VIDEO"`
MaterialID string `orm:"material_id" json:"materialId" description:"素材ID"`
SourceTable string `orm:"source_table" json:"sourceTable" description:"来源表"`
SourceID int64 `orm:"source_id" json:"sourceId" description:"原表主键ID"`
AccountID int64 `orm:"account_id" json:"accountId" description:"账户ID"`
TaskID string `orm:"task_id" json:"taskId" description:"易盾任务ID"`
RequestParams string `orm:"request_params" json:"requestParams" description:"请求入参"`
ResponseResult string `orm:"response_result" json:"responseResult" description:"响应出参"`
VerifyStatus string `orm:"verify_status" json:"verifyStatus" description:"校验状态"`
Suggestion int `orm:"suggestion" json:"suggestion" description:"处置建议"`
Label int `orm:"label" json:"label" description:"垃圾类型"`
ResultType int `orm:"result_type" json:"resultType" description:"结果类型"`
ErrorMsg string `orm:"error_msg" json:"errorMsg" description:"错误信息"`
CheckTime int64 `orm:"check_time" json:"checkTime" description:"审核时间戳"`
DurationMs int64 `orm:"duration_ms" json:"durationMs" description:"处理耗时(毫秒)"`
// 扩展字段(用于展示)
PreviewURL string `orm:"-" json:"previewUrl" description:"预览URL"`
}
// MaterialVerifyLogCol 日志表字段定义
type MaterialVerifyLogCol struct {
beans.SQLBaseCol
TenantID string
MaterialType string
MaterialID string
SourceTable string
SourceID string
AccountID string
TaskID string
RequestParams string
ResponseResult string
VerifyStatus string
Suggestion string
Label string
ResultType string
ErrorMsg string
CheckTime string
DurationMs string
}
// MaterialVerifyLogCols 日志表字段常量
var MaterialVerifyLogCols = MaterialVerifyLogCol{
SQLBaseCol: beans.DefSQLBaseCol,
TenantID: "tenant_id",
MaterialType: "material_type",
MaterialID: "material_id",
SourceTable: "source_table",
SourceID: "source_id",
AccountID: "account_id",
TaskID: "task_id",
RequestParams: "request_params",
ResponseResult: "response_result",
VerifyStatus: "verify_status",
Suggestion: "suggestion",
Label: "label",
ResultType: "result_type",
ErrorMsg: "error_msg",
CheckTime: "check_time",
DurationMs: "duration_ms",
}
// 素材类型常量
const (
MaterialTypeImage = "IMAGE"
MaterialTypeVideo = "VIDEO"
)
// 校验状态常量
const (
VerifyStatusPending = "PENDING" // 待校验
VerifyStatusVerified = "VERIFIED" // 校验通过
VerifyStatusRejected = "REJECTED" // 校验不通过
)

View File

@@ -0,0 +1,62 @@
package dataengine
import (
"gitea.com/red-future/common/beans"
)
// TencentContentCheckLog 送检日志实体来源data-engine.tencent_content_check_log
type TencentContentCheckLog struct {
beans.SQLBaseDO `orm:",inherit"`
// 来源标识
SourceTable string `orm:"source_table" json:"sourceTable" description:"来源表标识tencent_image/tencent_video"`
SourceID int64 `orm:"source_id" json:"sourceId" description:"原数据ID关联业务表数据"`
// 送检信息
RequestURL string `orm:"request_url" json:"requestUrl" description:"送检请求路径(接口地址)"`
RequestParam string `orm:"request_param" json:"requestParam" description:"送检入参完整请求参数JSON格式"`
ResponseData string `orm:"response_data" json:"responseData" description:"送检出参完整接口返回结果JSON格式"`
Status string `orm:"status" json:"status" description:"送检状态pending-待送检, submitting-送检中, success-送检成功, failed-送检失败"`
CheckTime int64 `orm:"check_time" json:"checkTime" description:"送检时间(时间戳,毫秒)"`
FailReason string `orm:"fail_reason" json:"failReason" description:"失败原因(可选,记录接口报错信息)"`
TaskID string `orm:"task_id" json:"taskId" description:"易盾返回的任务ID"`
// 检测结果
Suggestion int `orm:"suggestion" json:"suggestion" description:"检测结果建议0-通过1-嫌疑2-不通过"`
Label int `orm:"label" json:"label" description:"检测标签"`
ResultType int `orm:"result_type" json:"resultType" description:"结果类型1-机器结果2-人审结果"`
Duration int64 `orm:"duration" json:"duration" description:"送检耗时(毫秒)"`
}
// TencentContentCheckLogCol 送检日志表字段定义
type TencentContentCheckLogCol struct {
beans.SQLBaseCol
SourceTable string
SourceID string
RequestURL string
RequestParam string
ResponseData string
Status string
CheckTime string
FailReason string
TaskID string
Suggestion string
Label string
ResultType string
Duration string
}
// TencentContentCheckLogCols 送检日志表字段常量
var TencentContentCheckLogCols = TencentContentCheckLogCol{
SQLBaseCol: beans.DefSQLBaseCol,
SourceTable: "source_table",
SourceID: "source_id",
RequestURL: "request_url",
RequestParam: "request_param",
ResponseData: "response_data",
Status: "status",
CheckTime: "check_time",
FailReason: "fail_reason",
TaskID: "task_id",
Suggestion: "suggestion",
Label: "label",
ResultType: "result_type",
Duration: "duration",
}

View File

@@ -0,0 +1,120 @@
package dataengine
import (
"gitea.com/red-future/common/beans"
)
// TencentImage 图片素材实体来源data-engine.tencent_image
type TencentImage struct {
beans.SQLBaseDO `orm:",inherit"`
// 业务字段 - 匹配现有表结构
ImageID string `orm:"image_id" json:"imageId" description:"图片ID"`
AccountID int64 `orm:"account_id" json:"accountId" description:"账户ID"`
Width int `orm:"width" json:"width" description:"宽度"`
Height int `orm:"height" json:"height" description:"高度"`
FileSize int64 `orm:"file_size" json:"fileSize" description:"文件大小"`
Type string `orm:"type" json:"type" description:"图片类型"`
Signature string `orm:"signature" json:"signature" description:"签名"`
Description string `orm:"description" json:"description" description:"描述"`
SourceSignature string `orm:"source_signature" json:"sourceSignature" description:"源签名"`
PreviewURL string `orm:"preview_url" json:"previewUrl" description:"预览URL"`
ThumbPreviewURL string `orm:"thumb_preview_url" json:"thumbPreviewUrl" description:"缩略图URL"`
SourceType string `orm:"source_type" json:"sourceType" description:"来源类型"`
ImageUsage string `orm:"image_usage" json:"imageUsage" description:"图片用途"`
CreatedTime int64 `orm:"created_time" json:"createdTime" description:"创建时间戳"`
LastModifiedTime int64 `orm:"last_modified_time" json:"lastModifiedTime" description:"最后修改时间戳"`
ProductCatalogID int64 `orm:"product_catalog_id" json:"productCatalogId" description:"产品目录ID"`
ProductOuterID string `orm:"product_outer_id" json:"productOuterId" description:"产品外部ID"`
SourceReferenceID string `orm:"source_reference_id" json:"sourceReferenceId" description:"源引用ID"`
OwnerAccountID string `orm:"owner_account_id" json:"ownerAccountId" description:"所有者账户ID"`
VerifyStatus string `orm:"verify_status" json:"verifyStatus" description:"审核状态"`
SampleAspectRatio string `orm:"sample_aspect_ratio" json:"sampleAspectRatio" description:"示例宽高比"`
SourceMaterialID string `orm:"source_material_id" json:"sourceMaterialId" description:"源素材ID"`
NewSourceType string `orm:"new_source_type" json:"newSourceType" description:"新来源类型"`
FirstPublicationStatus string `orm:"first_publication_status" json:"firstPublicationStatus" description:"首次发布状态"`
QualityStatus string `orm:"quality_status" json:"qualityStatus" description:"质量状态"`
SimilarityStatus string `orm:"similarity_status" json:"similarityStatus" description:"相似度状态"`
UserAigcStatus string `orm:"user_aigc_status" json:"userAigcStatus" description:"用户AIGC状态"`
SystemAigcStatus string `orm:"system_aigc_status" json:"systemAigcStatus" description:"系统AIGC状态"`
AigcSource string `orm:"aigc_source" json:"aigcSource" description:"AIGC来源"`
AigcFlag string `orm:"aigc_flag" json:"aigcFlag" description:"AIGC标志"`
MuseAigcVersion int `orm:"muse_aigc_version" json:"museAigcVersion" description:"Muse AIGC版本"`
AigcType int `orm:"aigc_type" json:"aigcType" description:"AIGC类型"`
// 内容检测相关字段(扩展字段,用于存储检测结果)
// 注意:如果表中没有这些字段,需要通过 content_check_log 表来存储检测结果
}
// TencentImageCol 图片素材表字段定义
type TencentImageCol struct {
beans.SQLBaseCol
ImageID string
AccountID string
Width string
Height string
FileSize string
Type string
Signature string
Description string
SourceSignature string
PreviewURL string
ThumbPreviewURL string
SourceType string
ImageUsage string
CreatedTime string
LastModifiedTime string
ProductCatalogID string
ProductOuterID string
SourceReferenceID string
OwnerAccountID string
VerifyStatus string
SampleAspectRatio string
SourceMaterialID string
NewSourceType string
FirstPublicationStatus string
QualityStatus string
SimilarityStatus string
UserAigcStatus string
SystemAigcStatus string
AigcSource string
AigcFlag string
MuseAigcVersion string
AigcType string
}
// TencentImageCols 图片素材表字段常量
var TencentImageCols = TencentImageCol{
SQLBaseCol: beans.DefSQLBaseCol,
ImageID: "image_id",
AccountID: "account_id",
Width: "width",
Height: "height",
FileSize: "file_size",
Type: "type",
Signature: "signature",
Description: "description",
SourceSignature: "source_signature",
PreviewURL: "preview_url",
ThumbPreviewURL: "thumb_preview_url",
SourceType: "source_type",
ImageUsage: "image_usage",
CreatedTime: "created_time",
LastModifiedTime: "last_modified_time",
ProductCatalogID: "product_catalog_id",
ProductOuterID: "product_outer_id",
SourceReferenceID: "source_reference_id",
OwnerAccountID: "owner_account_id",
VerifyStatus: "verify_status",
SampleAspectRatio: "sample_aspect_ratio",
SourceMaterialID: "source_material_id",
NewSourceType: "new_source_type",
FirstPublicationStatus: "first_publication_status",
QualityStatus: "quality_status",
SimilarityStatus: "similarity_status",
UserAigcStatus: "user_aigc_status",
SystemAigcStatus: "system_aigc_status",
AigcSource: "aigc_source",
AigcFlag: "aigc_flag",
MuseAigcVersion: "muse_aigc_version",
AigcType: "aigc_type",
}

View File

@@ -0,0 +1,159 @@
package dataengine
import (
"gitea.com/red-future/common/beans"
)
// TencentVideo 视频素材实体来源data-engine.tencent_video
type TencentVideo struct {
beans.SQLBaseDO `orm:",inherit"`
// 业务字段 - 匹配现有表结构
VideoID string `orm:"video_id" json:"videoId" description:"视频ID"`
AccountID int64 `orm:"account_id" json:"accountId" description:"账户ID"`
Width int `orm:"width" json:"width" description:"宽度"`
Height int `orm:"height" json:"height" description:"高度"`
VideoFrames int `orm:"video_frames" json:"videoFrames" description:"视频帧数"`
VideoFps int `orm:"video_fps" json:"videoFps" description:"帧率"`
VideoCodec string `orm:"video_codec" json:"videoCodec" description:"视频编码"`
VideoBitRate int64 `orm:"video_bit_rate" json:"videoBitRate" description:"视频码率"`
AudioCodec string `orm:"audio_codec" json:"audioCodec" description:"音频编码"`
AudioBitRate int64 `orm:"audio_bit_rate" json:"audioBitRate" description:"音频码率"`
FileSize int64 `orm:"file_size" json:"fileSize" description:"文件大小"`
Type string `orm:"type" json:"type" description:"媒体类型"`
Signature string `orm:"signature" json:"signature" description:"签名"`
SystemStatus string `orm:"system_status" json:"systemStatus" description:"系统状态"`
Description string `orm:"description" json:"description" description:"描述"`
PreviewURL string `orm:"preview_url" json:"previewUrl" description:"预览URL"`
KeyFrameImageURL string `orm:"key_frame_image_url" json:"keyFrameImageUrl" description:"关键帧图片URL"`
CreatedTime int64 `orm:"created_time" json:"createdTime" description:"创建时间戳"`
LastModifiedTime int64 `orm:"last_modified_time" json:"lastModifiedTime" description:"最后修改时间戳"`
VideoProfileName string `orm:"video_profile_name" json:"videoProfileName" description:"视频配置名称"`
AudioSampleRate int `orm:"audio_sample_rate" json:"audioSampleRate" description:"音频采样率"`
MaxKeyframeInterval int `orm:"max_keyframe_interval" json:"maxKeyframeInterval" description:"最大关键帧间隔"`
MinKeyframeInterval int `orm:"min_keyframe_interval" json:"minKeyframeInterval" description:"最小关键帧间隔"`
SampleAspectRatio string `orm:"sample_aspect_ratio" json:"sampleAspectRatio" description:"示例宽高比"`
AudioProfileName string `orm:"audio_profile_name" json:"audioProfileName" description:"音频配置名称"`
ScanType string `orm:"scan_type" json:"scanType" description:"扫描类型"`
ImageDurationMs int64 `orm:"image_duration_millisecond" json:"imageDurationMs" description:"图片时长(毫秒)"`
AudioDurationMs int64 `orm:"audio_duration_millisecond" json:"audioDurationMs" description:"音频时长(毫秒)"`
SourceType string `orm:"source_type" json:"sourceType" description:"来源类型"`
ProductCatalogID string `orm:"product_catalog_id" json:"productCatalogId" description:"产品目录ID"`
ProductOuterID string `orm:"product_outer_id" json:"productOuterId" description:"产品外部ID"`
SourceReferenceID string `orm:"source_reference_id" json:"sourceReferenceId" description:"源引用ID"`
OwnerAccountID string `orm:"owner_account_id" json:"ownerAccountId" description:"所有者账户ID"`
VerifyStatus string `orm:"verify_status" json:"verifyStatus" description:"审核状态"`
SourceMaterialID string `orm:"source_material_id" json:"sourceMaterialId" description:"源素材ID"`
NewSourceType string `orm:"new_source_type" json:"newSourceType" description:"新来源类型"`
AigcType int `orm:"aigc_type" json:"aigcType" description:"AIGC类型"`
FirstPublicationStatus string `orm:"first_publication_status" json:"firstPublicationStatus" description:"首次发布状态"`
QualityStatus string `orm:"quality_status" json:"qualityStatus" description:"质量状态"`
CoverID string `orm:"cover_id" json:"coverId" description:"封面ID"`
SimilarityStatus string `orm:"similarity_status" json:"similarityStatus" description:"相似度状态"`
UserAigcStatus string `orm:"user_aigc_status" json:"userAigcStatus" description:"用户AIGC状态"`
SystemAigcStatus string `orm:"system_aigc_status" json:"systemAigcStatus" description:"系统AIGC状态"`
AigcSource string `orm:"aigc_source" json:"aigcSource" description:"AIGC来源"`
AigcFlag string `orm:"aigc_flag" json:"aigcFlag" description:"AIGC标志"`
MuseAigcVersion int `orm:"muse_aigc_version" json:"museAigcVersion" description:"Muse AIGC版本"`
}
// TencentVideoCol 视频素材表字段定义
type TencentVideoCol struct {
beans.SQLBaseCol
VideoID string
AccountID string
Width string
Height string
VideoFrames string
VideoFps string
VideoCodec string
VideoBitRate string
AudioCodec string
AudioBitRate string
FileSize string
Type string
Signature string
SystemStatus string
Description string
PreviewURL string
KeyFrameImageURL string
CreatedTime string
LastModifiedTime string
VideoProfileName string
AudioSampleRate string
MaxKeyframeInterval string
MinKeyframeInterval string
SampleAspectRatio string
AudioProfileName string
ScanType string
ImageDurationMs string
AudioDurationMs string
SourceType string
ProductCatalogID string
ProductOuterID string
SourceReferenceID string
OwnerAccountID string
VerifyStatus string
SourceMaterialID string
NewSourceType string
AigcType string
FirstPublicationStatus string
QualityStatus string
CoverID string
SimilarityStatus string
UserAigcStatus string
SystemAigcStatus string
AigcSource string
AigcFlag string
MuseAigcVersion string
}
// TencentVideoCols 视频素材表字段常量
var TencentVideoCols = TencentVideoCol{
SQLBaseCol: beans.DefSQLBaseCol,
VideoID: "video_id",
AccountID: "account_id",
Width: "width",
Height: "height",
VideoFrames: "video_frames",
VideoFps: "video_fps",
VideoCodec: "video_codec",
VideoBitRate: "video_bit_rate",
AudioCodec: "audio_codec",
AudioBitRate: "audio_bit_rate",
FileSize: "file_size",
Type: "type",
Signature: "signature",
SystemStatus: "system_status",
Description: "description",
PreviewURL: "preview_url",
KeyFrameImageURL: "key_frame_image_url",
CreatedTime: "created_time",
LastModifiedTime: "last_modified_time",
VideoProfileName: "video_profile_name",
AudioSampleRate: "audio_sample_rate",
MaxKeyframeInterval: "max_keyframe_interval",
MinKeyframeInterval: "min_keyframe_interval",
SampleAspectRatio: "sample_aspect_ratio",
AudioProfileName: "audio_profile_name",
ScanType: "scan_type",
ImageDurationMs: "image_duration_millisecond",
AudioDurationMs: "audio_duration_millisecond",
SourceType: "source_type",
ProductCatalogID: "product_catalog_id",
ProductOuterID: "product_outer_id",
SourceReferenceID: "source_reference_id",
OwnerAccountID: "owner_account_id",
VerifyStatus: "verify_status",
SourceMaterialID: "source_material_id",
NewSourceType: "new_source_type",
AigcType: "aigc_type",
FirstPublicationStatus: "first_publication_status",
QualityStatus: "quality_status",
CoverID: "cover_id",
SimilarityStatus: "similarity_status",
UserAigcStatus: "user_aigc_status",
SystemAigcStatus: "system_aigc_status",
AigcSource: "aigc_source",
AigcFlag: "aigc_flag",
MuseAigcVersion: "muse_aigc_version",
}