diff --git a/pkg/dal/dao/news.go b/pkg/dal/dao/news.go index f9aa41a..50abd86 100644 --- a/pkg/dal/dao/news.go +++ b/pkg/dal/dao/news.go @@ -1,6 +1,7 @@ package dao import ( + "encoding/json" "errors" "fmt" "intent-system/pkg/dal/models" @@ -217,6 +218,88 @@ func (dao *NewsDAO) QueryList(cond *NewsCondition) (dos []*models.NewsDO, total return } +// func (dao *NewsDAO) QueryAsync(cond *NewsAsyncCondition) (dos []*models.NewsDO, total int64, err error) { +// log.Infof("[QueryAsync] >>> 调用开始,org_id=%d, digest='%s'", cond.Org_Id, cond.Digest) + +// if cond.Org_Id == 0 { +// log.Warnf("[QueryAsync] org_id 为空,非法请求") +// return nil, 0, errors.New("org_id is required") +// } + +// e := dao.db.Model(&dos). +// Table(models.TableNameNews). +// Select( +// models.NEWS_COLUMN_ID, +// models.NEWS_COLUMN_ORG_ID, +// models.NEWS_COLUMN_SPIDER_ID, +// models.NEWS_COLUMN_PNAME_ID, +// models.NEWS_COLUMN_TAG, +// models.NEWS_COLUMN_CATEGORY, +// models.NEWS_COLUMN_MAIN_TITLE, +// models.NEWS_COLUMN_SUB_TITLE, +// models.NEWS_COLUMN_SUMMARY, +// models.NEWS_COLUMN_KEYWORDS, +// models.NEWS_COLUMN_SEO_KEYWORDS, +// models.NEWS_COLUMN_TAGS, +// models.NEWS_COLUMN_URL, +// models.NEWS_COLUMN_IMAGE_URL, +// models.NEWS_COLUMN_LOGO_URL, +// models.NEWS_COLUMN_MODEL_PARAMETER, +// models.NEWS_COLUMN_CONTENT, +// models.NEWS_COLUMN_IS_HOTSPOT, +// models.NEWS_COLUMN_IS_OVERWRITTEN, +// models.NEWS_COLUMN_IS_DELETED, +// models.NEWS_COLUMN_IS_REPLICATE, +// models.NEWS_COLUMN_STATE, +// models.NEWS_COLUMN_CREATED_TIME, +// models.NEWS_COLUMN_UPDATED_TIME, +// models.NEWS_COLUMN_EXTRA_DATA, +// ). +// Eq(models.NEWS_COLUMN_ORG_ID, cond.Org_Id) + +// _, total, err = e.QueryEx() +// if err != nil { +// log.Errorf("[QueryAsync] 查询失败: %v", err) +// return nil, 0, err +// } + +// if total == 0 { +// log.Warnf("[QueryAsync] org_id=%d 无匹配记录", cond.Org_Id) +// return nil, 0, errors.New("未找到对应 org_id 的记录") +// } +// if total > 1 { +// log.Errorf("[QueryAsync] org_id=%d 数据异常,记录不唯一", cond.Org_Id) +// return nil, 0, errors.New("org_id 不唯一,数据异常") +// } + +// record := dos[0] + +// if cond.Digest == "" { +// log.Infof("[QueryAsync] org_id=%d digest 为空,直接返回记录", cond.Org_Id) +// return []*models.NewsDO{record}, 1, nil +// } + +// // 客户端传了 digest,进行比较 +// log.Infof("[QueryAsync] org_id=%d 开始比较 digest,客户端='%s'", cond.Org_Id, cond.Digest) + +// if record.ExtraData != nil { +// if val, ok := record.ExtraData["digest"]; ok { +// log.Infof("[QueryAsync] org_id=%d 数据库 digest='%v'", cond.Org_Id, val) +// if ds, ok := val.(string); ok && ds == cond.Digest { +// log.Infof("[QueryAsync] org_id=%d digest 相同,跳过返回", cond.Org_Id) +// return nil, 0, nil +// } +// } else { +// log.Infof("[QueryAsync] org_id=%d ExtraData 中无 digest 字段", cond.Org_Id) +// } +// } else { +// log.Infof("[QueryAsync] org_id=%d ExtraData 为空", cond.Org_Id) +// } + +// log.Infof("[QueryAsync] org_id=%d digest 不同,返回记录", cond.Org_Id) +// return []*models.NewsDO{record}, 1, nil +// } + func (dao *NewsDAO) QueryAsync(cond *NewsAsyncCondition) (dos []*models.NewsDO, total int64, err error) { log.Infof("[QueryAsync] >>> 调用开始,org_id=%d, digest='%s'", cond.Org_Id, cond.Digest) @@ -273,6 +356,17 @@ func (dao *NewsDAO) QueryAsync(cond *NewsAsyncCondition) (dos []*models.NewsDO, record := dos[0] + // ✅ 解析 ExtraDataRaw → ExtraData + if record.ExtraDataRaw != "" { + if err := json.Unmarshal([]byte(record.ExtraDataRaw), &record.ExtraData); err != nil { + log.Warnf("[QueryAsync] org_id=%d ExtraData 解析失败: %v", record.OrgId, err) + } else { + log.Infof("[QueryAsync] org_id=%d ExtraData 成功解析: %+v", record.OrgId, record.ExtraData) + } + } else { + log.Infof("[QueryAsync] org_id=%d ExtraDataRaw 为空", record.OrgId) + } + if cond.Digest == "" { log.Infof("[QueryAsync] org_id=%d digest 为空,直接返回记录", cond.Org_Id) return []*models.NewsDO{record}, 1, nil