This commit is contained in:
parent
beb45ab6a1
commit
042322604d
|
|
@ -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 {
|
|
||||||
digestVal, _ := v.ExtraData["digest"]
|
|
||||||
if ds, ok := digestVal.(string); ok {
|
|
||||||
if ds != cond.Digest {
|
|
||||||
filtered = append(filtered, v)
|
|
||||||
}
|
}
|
||||||
// 相等就不加
|
if total > 1 {
|
||||||
} else {
|
return nil, 0, errors.New("org_id 不唯一,数据异常")
|
||||||
// 取不到digest字段,保留
|
|
||||||
filtered = append(filtered, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dos = filtered
|
|
||||||
total = int64(len(filtered))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof(".................[DEBUG] QueryAsync 返回数据: %+v", dos)
|
record := dos[0]
|
||||||
return
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 不相等,返回该记录
|
||||||
|
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) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue