This commit is contained in:
hailin 2025-06-19 22:22:05 +08:00
parent beb45ab6a1
commit 042322604d
1 changed files with 33 additions and 22 deletions

View File

@ -1,6 +1,7 @@
package dao package dao
import ( import (
"errors"
"fmt" "fmt"
"intent-system/pkg/dal/models" "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) { 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). e := dao.db.Model(&dos).
Table(models.TableNameNews). Table(models.TableNameNews).
Select( Select(
@ -245,37 +250,43 @@ func (dao *NewsDAO) QueryAsync(cond *NewsAsyncCondition) (dos []*models.NewsDO,
models.NEWS_COLUMN_CREATED_TIME, models.NEWS_COLUMN_CREATED_TIME,
models.NEWS_COLUMN_UPDATED_TIME, models.NEWS_COLUMN_UPDATED_TIME,
models.NEWS_COLUMN_EXTRA_DATA, 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() _, total, err = e.QueryEx()
if err != nil { if err != nil {
return nil, 0, log.Errorf(err.Error()) log.Errorf("[QueryAsync] 查询失败: %v", err)
return nil, 0, err
} }
// == digest过滤逻辑 == if total == 0 {
if cond.Digest != "" { return nil, 0, errors.New("未找到对应 org_id 的记录")
filtered := make([]*models.NewsDO, 0, len(dos)) }
for _, v := range dos { if total > 1 {
digestVal, _ := v.ExtraData["digest"] return nil, 0, errors.New("org_id 不唯一,数据异常")
if ds, ok := digestVal.(string); ok { }
if ds != cond.Digest {
filtered = append(filtered, v) record := dos[0]
}
// 相等就不加 if cond.Digest == "" {
} else { // 客户端没传 digest直接返回
// 取不到digest字段保留 return []*models.NewsDO{record}, 1, nil
filtered = append(filtered, v) }
// 客户端传了 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) { func (dao *NewsDAO) QueryPullNew(cond *NewsPullNewCondition) (dos []*models.NewsDO, total int64, err error) {