From 042322604dc4f64dc568677117496e3cb2258e60 Mon Sep 17 00:00:00 2001 From: hailin Date: Thu, 19 Jun 2025 22:22:05 +0800 Subject: [PATCH] . --- pkg/dal/dao/news.go | 55 +++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/pkg/dal/dao/news.go b/pkg/dal/dao/news.go index 4dbf49b..9556968 100644 --- a/pkg/dal/dao/news.go +++ b/pkg/dal/dao/news.go @@ -1,6 +1,7 @@ package dao import ( + "errors" "fmt" "intent-system/pkg/dal/models" @@ -217,6 +218,10 @@ func (dao *NewsDAO) QueryList(cond *NewsCondition) (dos []*models.NewsDO, total } func (dao *NewsDAO) QueryAsync(cond *NewsAsyncCondition) (dos []*models.NewsDO, total int64, err error) { + if cond.Org_Id == 0 { + return nil, 0, errors.New("org_id is required") + } + e := dao.db.Model(&dos). Table(models.TableNameNews). Select( @@ -245,37 +250,43 @@ func (dao *NewsDAO) QueryAsync(cond *NewsAsyncCondition) (dos []*models.NewsDO, models.NEWS_COLUMN_CREATED_TIME, models.NEWS_COLUMN_UPDATED_TIME, models.NEWS_COLUMN_EXTRA_DATA, - ) + ). + Eq(models.NEWS_COLUMN_ORG_ID, cond.Org_Id) - if cond.Org_Id != 0 { - e.Eq(models.NEWS_COLUMN_ORG_ID, cond.Org_Id) - } _, total, err = e.QueryEx() if err != nil { - return nil, 0, log.Errorf(err.Error()) + log.Errorf("[QueryAsync] 查询失败: %v", err) + return nil, 0, err } - // == digest过滤逻辑 == - if cond.Digest != "" { - filtered := make([]*models.NewsDO, 0, len(dos)) - for _, v := range dos { - digestVal, _ := v.ExtraData["digest"] - if ds, ok := digestVal.(string); ok { - if ds != cond.Digest { - filtered = append(filtered, v) - } - // 相等就不加 - } else { - // 取不到digest字段,保留 - filtered = append(filtered, v) + if total == 0 { + return nil, 0, errors.New("未找到对应 org_id 的记录") + } + if total > 1 { + return nil, 0, errors.New("org_id 不唯一,数据异常") + } + + record := dos[0] + + if cond.Digest == "" { + // 客户端没传 digest,直接返回 + return []*models.NewsDO{record}, 1, nil + } + + // 客户端传了 digest,进行比较 + if record.ExtraData != nil { + if val, ok := record.ExtraData["digest"]; ok { + if ds, ok := val.(string); ok && ds == cond.Digest { + // 相等,不返回 + log.Infof("[QueryAsync] digest 相同,跳过返回") + return nil, 0, nil } } - dos = filtered - total = int64(len(filtered)) } - log.Infof(".................[DEBUG] QueryAsync 返回数据: %+v", dos) - return + // 不相等,返回该记录 + log.Infof("..................[QueryAsync] digest 不同,返回记录 org_id=%d", cond.Org_Id) + return []*models.NewsDO{record}, 1, nil } func (dao *NewsDAO) QueryPullNew(cond *NewsPullNewCondition) (dos []*models.NewsDO, total int64, err error) {