From fa35a082401a0e83edb805856940839b8ea9dbf7 Mon Sep 17 00:00:00 2001 From: hailin Date: Fri, 20 Jun 2025 17:26:11 +0800 Subject: [PATCH] . --- pkg/dal/dao/news.go | 65 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 4 deletions(-) diff --git a/pkg/dal/dao/news.go b/pkg/dal/dao/news.go index 8c989ef..96a875e 100644 --- a/pkg/dal/dao/news.go +++ b/pkg/dal/dao/news.go @@ -457,6 +457,56 @@ func (dao *NewsDAO) QueryAsyncBatch(pairs []OrgDigestPair) (dos []*models.NewsDO return dos, int64(len(dos)), nil } +// func (dao *NewsDAO) QueryPullNew(cond *NewsPullNewCondition) (dos []*models.NewsDO, total int64, err error) { +// 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, +// ) + +// // 🔧 仅提取 org_id,忽略 digest +// if len(cond.Pairs) > 0 { +// orgIDs := make([]int64, 0, len(cond.Pairs)) +// for _, p := range cond.Pairs { +// orgIDs = append(orgIDs, p.OrgId) +// } +// e.Where(fmt.Sprintf("%s NOT IN (?)", models.NEWS_COLUMN_ORG_ID), orgIDs) +// } + +// _, total, err = e.QueryEx() +// if err != nil { +// log.Errorf("QueryPullNew failed: %v", err) +// return nil, 0, err +// } + +// log.Infof(".................[DEBUG] QueryPullNew 返回数据: %+v", dos) +// return +// } + func (dao *NewsDAO) QueryPullNew(cond *NewsPullNewCondition) (dos []*models.NewsDO, total int64, err error) { e := dao.db.Model(&dos). Table(models.TableNameNews). @@ -488,13 +538,20 @@ func (dao *NewsDAO) QueryPullNew(cond *NewsPullNewCondition) (dos []*models.News models.NEWS_COLUMN_EXTRA_DATA, ) - // 🔧 仅提取 org_id,忽略 digest - if len(cond.Pairs) > 0 { - orgIDs := make([]int64, 0, len(cond.Pairs)) + // 🔧 正确展开 org_id 切片 + if cond != nil && len(cond.Pairs) > 0 { + orgIDs := make([]interface{}, 0, len(cond.Pairs)) for _, p := range cond.Pairs { orgIDs = append(orgIDs, p.OrgId) } - e.Where(fmt.Sprintf("%s NOT IN (?)", models.NEWS_COLUMN_ORG_ID), orgIDs) + + // 构造正确的 IN 子句(防止 ORM 不展开切片) + placeholders := make([]string, len(orgIDs)) + for i := range orgIDs { + placeholders[i] = "?" + } + whereClause := fmt.Sprintf("%s NOT IN (%s)", models.NEWS_COLUMN_ORG_ID, strings.Join(placeholders, ",")) + e.Where(whereClause, orgIDs...) } _, total, err = e.QueryEx()