提交代码

This commit is contained in:
lmk
2026-07-02 10:37:59 +08:00
parent aced1aa3a6
commit d930266fbf
17 changed files with 411 additions and 445 deletions
+40 -36
View File
@@ -5,8 +5,9 @@ import (
daoEntity "cid/model/entity/dataengine"
"context"
"gitea.redpowerfuture.com/red-future/common/db/gfdb"
"github.com/bwmarrin/snowflake"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime"
)
// MaterialVerifyLogDAO 素材校验日志数据访问层
@@ -19,9 +20,19 @@ var MaterialVerifyLog = new(MaterialVerifyLogDAO)
const MaterialVerifyLogTable = "material_verify_log"
// Create 创建校验日志
func (d *MaterialVerifyLogDAO) Create(ctx context.Context, log *daoEntity.MaterialVerifyLog) (int64, error) {
// 构建插入数据,排除主键Id(让数据库自增)
data := g.Map{
func (d *MaterialVerifyLogDAO) Create(ctx context.Context, log *daoEntity.MaterialVerifyLog) (id int64, err error) {
// GoFrame v2.10.0 pgsql 驱动不支持 RETURNING/LastInsertId
// 且 gfdb insertHook 会覆盖 id,无法从外部获取钩子生成的 ID
// 手动生成 Snowflake ID 并直接插入(绕过 gfdb 钩子)
node, err := snowflake.NewNode(1)
if err != nil {
g.Log().Errorf(ctx, "创建Snowflake节点失败: %v", err)
return 0, err
}
snowflakeID := node.Generate().Int64()
_, err = g.DB("cid").Model(MaterialVerifyLogTable).Data(g.Map{
"id": snowflakeID,
"tenant_id": log.TenantID,
"material_type": log.MaterialType,
"material_id": log.MaterialID,
@@ -29,21 +40,18 @@ func (d *MaterialVerifyLogDAO) Create(ctx context.Context, log *daoEntity.Materi
"source_id": log.SourceID,
"account_id": log.AccountID,
"verify_status": log.VerifyStatus,
"created_at": gtime.Now(),
}
result, err := g.DB("default").Model(MaterialVerifyLogTable).Data(data).Insert()
}).Insert()
if err != nil {
g.Log().Errorf(ctx, "创建校验日志失败: %v", err)
return 0, err
}
id, _ := result.LastInsertId()
return id, nil
return snowflakeID, nil
}
// GetByID 根据ID获取日志
func (d *MaterialVerifyLogDAO) GetByID(ctx context.Context, id int64) (*daoEntity.MaterialVerifyLog, error) {
var result daoEntity.MaterialVerifyLog
r, err := g.DB("default").Model(MaterialVerifyLogTable).
r, err := gfdb.DB(ctx, "cid").Model(ctx, MaterialVerifyLogTable).
Where(daoEntity.MaterialVerifyLogCols.Id, id).
One()
if err != nil {
@@ -61,7 +69,7 @@ func (d *MaterialVerifyLogDAO) GetByID(ctx context.Context, id int64) (*daoEntit
// GetByTaskID 根据任务ID获取日志
func (d *MaterialVerifyLogDAO) GetByTaskID(ctx context.Context, taskID string) (*daoEntity.MaterialVerifyLog, error) {
var result daoEntity.MaterialVerifyLog
r, err := g.DB("default").Model(MaterialVerifyLogTable).
r, err := gfdb.DB(ctx, "cid").Model(ctx, MaterialVerifyLogTable).
Where(daoEntity.MaterialVerifyLogCols.TaskID, taskID).
One()
if err != nil {
@@ -79,7 +87,7 @@ func (d *MaterialVerifyLogDAO) GetByTaskID(ctx context.Context, taskID string) (
// GetByMaterialID 根据素材ID获取日志列表
func (d *MaterialVerifyLogDAO) GetByMaterialID(ctx context.Context, materialID string) ([]daoEntity.MaterialVerifyLog, error) {
var result []daoEntity.MaterialVerifyLog
r, err := g.DB("default").Model(MaterialVerifyLogTable).
r, err := gfdb.DB(ctx, "cid").Model(ctx, MaterialVerifyLogTable).
Where(daoEntity.MaterialVerifyLogCols.MaterialID, materialID).
OrderDesc(daoEntity.MaterialVerifyLogCols.CreatedAt).
All()
@@ -95,7 +103,7 @@ func (d *MaterialVerifyLogDAO) GetByMaterialID(ctx context.Context, materialID s
// GetBySource 根据来源获取日志
func (d *MaterialVerifyLogDAO) GetBySource(ctx context.Context, sourceTable string, sourceID int64) ([]daoEntity.MaterialVerifyLog, error) {
var result []daoEntity.MaterialVerifyLog
r, err := g.DB("default").Model(MaterialVerifyLogTable).
r, err := gfdb.DB(ctx, "cid").Model(ctx, MaterialVerifyLogTable).
Where(daoEntity.MaterialVerifyLogCols.SourceTable, sourceTable).
Where(daoEntity.MaterialVerifyLogCols.SourceID, sourceID).
OrderDesc(daoEntity.MaterialVerifyLogCols.CreatedAt).
@@ -111,9 +119,9 @@ func (d *MaterialVerifyLogDAO) GetBySource(ctx context.Context, sourceTable stri
// UpdateVerifyResult 更新校验结果
func (d *MaterialVerifyLogDAO) UpdateVerifyResult(ctx context.Context, id int64, verifyStatus string, suggestion, label, resultType int, responseResult string, checkTime int64) error {
_, err := g.DB("default").Model(MaterialVerifyLogTable).
_, err := gfdb.DB(ctx, "cid").Model(ctx, MaterialVerifyLogTable).
Where(daoEntity.MaterialVerifyLogCols.Id, id).
Data(map[string]interface{}{
Data(g.Map{
daoEntity.MaterialVerifyLogCols.VerifyStatus: verifyStatus,
daoEntity.MaterialVerifyLogCols.Suggestion: suggestion,
daoEntity.MaterialVerifyLogCols.Label: label,
@@ -130,9 +138,9 @@ func (d *MaterialVerifyLogDAO) UpdateVerifyResult(ctx context.Context, id int64,
// UpdateError 更新错误信息
func (d *MaterialVerifyLogDAO) UpdateError(ctx context.Context, id int64, verifyStatus string, errorMsg string) error {
_, err := g.DB("default").Model(MaterialVerifyLogTable).
_, err := gfdb.DB(ctx, "cid").Model(ctx, MaterialVerifyLogTable).
Where(daoEntity.MaterialVerifyLogCols.Id, id).
Data(map[string]interface{}{
Data(g.Map{
daoEntity.MaterialVerifyLogCols.VerifyStatus: verifyStatus,
daoEntity.MaterialVerifyLogCols.ErrorMsg: errorMsg,
}).Update()
@@ -145,9 +153,9 @@ func (d *MaterialVerifyLogDAO) UpdateError(ctx context.Context, id int64, verify
// UpdateTaskID 更新任务ID
func (d *MaterialVerifyLogDAO) UpdateTaskID(ctx context.Context, id int64, taskID string) error {
_, err := g.DB("default").Model(MaterialVerifyLogTable).
_, err := gfdb.DB(ctx, "cid").Model(ctx, MaterialVerifyLogTable).
Where(daoEntity.MaterialVerifyLogCols.Id, id).
Data(map[string]interface{}{
Data(g.Map{
daoEntity.MaterialVerifyLogCols.TaskID: taskID,
}).Update()
if err != nil {
@@ -158,9 +166,9 @@ func (d *MaterialVerifyLogDAO) UpdateTaskID(ctx context.Context, id int64, taskI
// UpdateDuration 更新处理耗时
func (d *MaterialVerifyLogDAO) UpdateDuration(ctx context.Context, id int64, durationMs int64) error {
_, err := g.DB("default").Model(MaterialVerifyLogTable).
_, err := gfdb.DB(ctx, "cid").Model(ctx, MaterialVerifyLogTable).
Where(daoEntity.MaterialVerifyLogCols.Id, id).
Data(map[string]interface{}{
Data(g.Map{
daoEntity.MaterialVerifyLogCols.DurationMs: durationMs,
}).Update()
if err != nil {
@@ -171,9 +179,9 @@ func (d *MaterialVerifyLogDAO) UpdateDuration(ctx context.Context, id int64, dur
// UpdateRequestParams 更新请求参数
func (d *MaterialVerifyLogDAO) UpdateRequestParams(ctx context.Context, id int64, requestParams string) error {
_, err := g.DB("default").Model(MaterialVerifyLogTable).
_, err := gfdb.DB(ctx, "cid").Model(ctx, MaterialVerifyLogTable).
Where(daoEntity.MaterialVerifyLogCols.Id, id).
Data(map[string]interface{}{
Data(g.Map{
daoEntity.MaterialVerifyLogCols.RequestParams: requestParams,
}).Update()
if err != nil {
@@ -185,18 +193,18 @@ func (d *MaterialVerifyLogDAO) UpdateRequestParams(ctx context.Context, id int64
// GetByCondition 根据条件分页查询
func (d *MaterialVerifyLogDAO) GetByCondition(ctx context.Context, condition map[string]interface{}, page, pageSize int) ([]daoEntity.MaterialVerifyLog, int, error) {
var result []daoEntity.MaterialVerifyLog
model := g.DB("default").Model(MaterialVerifyLogTable)
m := gfdb.DB(ctx, "cid").Model(ctx, MaterialVerifyLogTable)
for k, v := range condition {
model = model.Where(k, v)
m.Where(k, v)
}
total, err := model.Count()
total, err := m.Count()
if err != nil {
return nil, 0, err
}
r, err := model.
r, err := m.
OrderDesc(daoEntity.MaterialVerifyLogCols.CreatedAt).
Page(page, pageSize).
All()
@@ -211,7 +219,7 @@ func (d *MaterialVerifyLogDAO) GetByCondition(ctx context.Context, condition map
// CountByStatus 按状态统计
func (d *MaterialVerifyLogDAO) CountByStatus(ctx context.Context, verifyStatus string) (int, error) {
count, err := g.DB("default").Model(MaterialVerifyLogTable).
count, err := gfdb.DB(ctx, "cid").Model(ctx, MaterialVerifyLogTable).
Where(daoEntity.MaterialVerifyLogCols.VerifyStatus, verifyStatus).
Count()
if err != nil {
@@ -224,7 +232,6 @@ func (d *MaterialVerifyLogDAO) CountByStatus(ctx context.Context, verifyStatus s
func (d *MaterialVerifyLogDAO) GetStats(ctx context.Context) (map[string]int, error) {
stats := make(map[string]int)
// 使用实体中定义的正确状态值:PENDING=待校验, VERIFIED=校验通过, REJECTED=校验不通过
statuses := []struct {
statusKey string
statusVal string
@@ -244,18 +251,15 @@ func (d *MaterialVerifyLogDAO) GetStats(ctx context.Context) (map[string]int, er
totalCount += count
}
// 添加总计
stats["total"] = totalCount
return stats, nil
}
// GetPendingResults 获取待查询结果的日志(状态为submitting且有taskID
// GetPendingResults 获取待查询结果的日志(状态为pending且有taskID
func (d *MaterialVerifyLogDAO) GetPendingResults(ctx context.Context, limit int) ([]daoEntity.MaterialVerifyLog, error) {
var result []daoEntity.MaterialVerifyLog
// 查询状态为 pending 且有 task_id 的记录
r, err := g.DB("default").Model(MaterialVerifyLogTable).
r, err := gfdb.DB(ctx, "cid").Model(ctx, MaterialVerifyLogTable).
Where(daoEntity.MaterialVerifyLogCols.VerifyStatus, consts.CheckStatusPending).
WhereNotNull(daoEntity.MaterialVerifyLogCols.TaskID).
Where(daoEntity.MaterialVerifyLogCols.TaskID + " != ''").
@@ -276,7 +280,7 @@ func (d *MaterialVerifyLogDAO) GetPendingResults(ctx context.Context, limit int)
// GetLastRejectedLogByMaterialID 根据素材ID获取最后一条失败的校验日志
func (d *MaterialVerifyLogDAO) GetLastRejectedLogByMaterialID(ctx context.Context, materialID string, verifyStatus string) (*daoEntity.MaterialVerifyLog, error) {
var result daoEntity.MaterialVerifyLog
r, err := g.DB("default").Model(MaterialVerifyLogTable).
r, err := gfdb.DB(ctx, "cid").Model(ctx, MaterialVerifyLogTable).
Where(daoEntity.MaterialVerifyLogCols.MaterialID, materialID).
Where(daoEntity.MaterialVerifyLogCols.VerifyStatus, verifyStatus).
OrderDesc(daoEntity.MaterialVerifyLogCols.CreatedAt).
@@ -295,7 +299,7 @@ func (d *MaterialVerifyLogDAO) GetLastRejectedLogByMaterialID(ctx context.Contex
// CountPendingResults 统计待查询结果的数量
func (d *MaterialVerifyLogDAO) CountPendingResults(ctx context.Context) (int, error) {
count, err := g.DB("default").Model(MaterialVerifyLogTable).
count, err := gfdb.DB(ctx, "cid").Model(ctx, MaterialVerifyLogTable).
Where(daoEntity.MaterialVerifyLogCols.VerifyStatus, consts.CheckStatusPending).
WhereNotNull(daoEntity.MaterialVerifyLogCols.TaskID).
Where(daoEntity.MaterialVerifyLogCols.TaskID + " != ''").
+42 -18
View File
@@ -7,6 +7,8 @@ import (
"context"
"encoding/json"
"gitea.redpowerfuture.com/red-future/common/db/gfdb"
"github.com/bwmarrin/snowflake"
"github.com/gogf/gf/v2/frame/g"
)
@@ -17,21 +19,43 @@ type TencentContentCheckLogDAO struct{}
var TencentContentCheckLog = new(TencentContentCheckLogDAO)
// Create 创建送检日志
func (d *TencentContentCheckLogDAO) Create(ctx context.Context, log *entity.TencentContentCheckLog) (int64, error) {
r, err := g.DB("default").Model(consts.TencentContentCheckLogTable).Data(log).Insert()
func (d *TencentContentCheckLogDAO) Create(ctx context.Context, log *entity.TencentContentCheckLog) (id int64, err error) {
// GoFrame v2.10.0 pgsql 驱动不支持 RETURNING/LastInsertId
node, err := snowflake.NewNode(1)
if err != nil {
g.Log().Errorf(ctx, "创建Snowflake节点失败: %v", err)
return 0, err
}
snowflakeID := node.Generate().Int64()
_, err = g.DB("cid").Model(consts.TencentContentCheckLogTable).Data(g.Map{
"id": snowflakeID,
"source_table": log.SourceTable,
"source_id": log.SourceID,
"request_url": log.RequestURL,
"request_param": log.RequestParam,
"response_data": log.ResponseData,
"status": log.Status,
"check_time": log.CheckTime,
"fail_reason": log.FailReason,
"task_id": log.TaskID,
"suggestion": log.Suggestion,
"label": log.Label,
"result_type": log.ResultType,
"duration": log.Duration,
}).Insert()
if err != nil {
g.Log().Errorf(ctx, "创建送检日志失败: %v", err)
return 0, err
}
id, _ := r.LastInsertId()
return id, nil
return snowflakeID, nil
}
// UpdateStatus 更新送检状态
func (d *TencentContentCheckLogDAO) UpdateStatus(ctx context.Context, id int64, status string, responseData string, failReason string) error {
_, err := g.DB("default").Model(consts.TencentContentCheckLogTable).
_, err := gfdb.DB(ctx, "cid").Model(ctx, consts.TencentContentCheckLogTable).
Where("id", id).
Data(map[string]interface{}{
Data(g.Map{
"status": status,
"response_data": responseData,
"fail_reason": failReason,
@@ -41,9 +65,9 @@ func (d *TencentContentCheckLogDAO) UpdateStatus(ctx context.Context, id int64,
// UpdateCheckResult 更新检测结果
func (d *TencentContentCheckLogDAO) UpdateCheckResult(ctx context.Context, id int64, suggestion, label, resultType int, checkTime int64) error {
_, err := g.DB("default").Model(consts.TencentContentCheckLogTable).
_, err := gfdb.DB(ctx, "cid").Model(ctx, consts.TencentContentCheckLogTable).
Where("id", id).
Data(map[string]interface{}{
Data(g.Map{
"status": consts.CheckStatusCompleted,
"suggestion": suggestion,
"label": label,
@@ -56,7 +80,7 @@ func (d *TencentContentCheckLogDAO) UpdateCheckResult(ctx context.Context, id in
// GetByID 根据ID获取日志
func (d *TencentContentCheckLogDAO) GetByID(ctx context.Context, id int64) (*entity.TencentContentCheckLog, error) {
var result entity.TencentContentCheckLog
r, err := g.DB("default").Model(consts.TencentContentCheckLogTable).
r, err := gfdb.DB(ctx, "cid").Model(ctx, consts.TencentContentCheckLogTable).
Where("id", id).
One()
if err != nil {
@@ -74,7 +98,7 @@ func (d *TencentContentCheckLogDAO) GetByID(ctx context.Context, id int64) (*ent
// GetBySourceID 根据来源ID获取日志
func (d *TencentContentCheckLogDAO) GetBySourceID(ctx context.Context, sourceTable string, sourceID int64) ([]entity.TencentContentCheckLog, error) {
var result []entity.TencentContentCheckLog
r, err := g.DB("default").Model(consts.TencentContentCheckLogTable).
r, err := gfdb.DB(ctx, "cid").Model(ctx, consts.TencentContentCheckLogTable).
Where("source_table", sourceTable).
Where("source_id", sourceID).
OrderDesc("created_at").
@@ -91,7 +115,7 @@ func (d *TencentContentCheckLogDAO) GetBySourceID(ctx context.Context, sourceTab
// GetByTaskID 根据任务ID获取日志
func (d *TencentContentCheckLogDAO) GetByTaskID(ctx context.Context, taskID string) (*entity.TencentContentCheckLog, error) {
var result entity.TencentContentCheckLog
r, err := g.DB("default").Model(consts.TencentContentCheckLogTable).
r, err := gfdb.DB(ctx, "cid").Model(ctx, consts.TencentContentCheckLogTable).
Where("task_id", taskID).
One()
if err != nil {
@@ -109,18 +133,18 @@ func (d *TencentContentCheckLogDAO) GetByTaskID(ctx context.Context, taskID stri
// ListByStatus 根据状态获取日志列表
func (d *TencentContentCheckLogDAO) ListByStatus(ctx context.Context, status string, page, pageSize int) ([]entity.TencentContentCheckLog, int, error) {
var result []entity.TencentContentCheckLog
model := g.DB("default").Model(consts.TencentContentCheckLogTable)
m := gfdb.DB(ctx, "cid").Model(ctx, consts.TencentContentCheckLogTable)
if status != "" {
model = model.Where("status", status)
m.Where("status", status)
}
total, err := model.Count()
total, err := m.Count()
if err != nil {
return nil, 0, err
}
r, err := model.
r, err := m.
OrderDesc("created_at").
Page(page, pageSize).
All()
@@ -135,7 +159,7 @@ func (d *TencentContentCheckLogDAO) ListByStatus(ctx context.Context, status str
// UpdateDuration 更新耗时
func (d *TencentContentCheckLogDAO) UpdateDuration(ctx context.Context, id int64, duration int64) error {
_, err := g.DB("default").Model(consts.TencentContentCheckLogTable).
_, err := gfdb.DB(ctx, "cid").Model(ctx, consts.TencentContentCheckLogTable).
Where("id", id).
Data("duration", duration).
Update()
@@ -144,14 +168,14 @@ func (d *TencentContentCheckLogDAO) UpdateDuration(ctx context.Context, id int64
// UpdateTaskID 更新任务ID
func (d *TencentContentCheckLogDAO) UpdateTaskID(ctx context.Context, id int64, taskID string) error {
_, err := g.DB("default").Model(consts.TencentContentCheckLogTable).
_, err := gfdb.DB(ctx, "cid").Model(ctx, consts.TencentContentCheckLogTable).
Where("id", id).
Data("task_id", taskID).
Update()
return err
}
// GetSubmitResult 获取图片提交结果
// GetImageSubmitResult 获取图片提交结果
func (d *TencentContentCheckLogDAO) GetImageSubmitResult(ctx context.Context, id int64) (*yidunService.ImageSubmitResult, error) {
log, err := d.GetByID(ctx, id)
if err != nil || log == nil {