From 35fc3a0b02d6ebd479b33cbbb7be6b27623a5a82 Mon Sep 17 00:00:00 2001 From: hailin Date: Fri, 20 Jun 2025 14:21:30 +0800 Subject: [PATCH] . --- pkg/dal/core/core_biz.go | 4 +-- pkg/dal/dao/news.go | 61 ++++++---------------------------------- 2 files changed, 11 insertions(+), 54 deletions(-) diff --git a/pkg/dal/core/core_biz.go b/pkg/dal/core/core_biz.go index d006870..81eec8f 100644 --- a/pkg/dal/core/core_biz.go +++ b/pkg/dal/core/core_biz.go @@ -927,13 +927,13 @@ func (m *BizCore) NewsAsyncBatch(ctx *itypes.Context, req *proto.NewsAsyncBatchR end = len(req.List) } - // ── ① 把这一块转成 DAO 参数 ── + // 把这一块转成 DAO 参数 ── pairs := make([]dao.OrgDigestPair, end-start) for i, v := range req.List[start:end] { pairs[i] = dao.OrgDigestPair{OrgId: v.Org_Id, Digest: v.Digest} } - // ── ② 一次 SQL 抓差异 ── + // 一次 SQL 抓差异 ── chunk, _, err := m.newsDAO.QueryAsyncBatch(pairs) if err != nil { return nil, 0, itypes.NewBizCodeDatabaseError(err.Error()) diff --git a/pkg/dal/dao/news.go b/pkg/dal/dao/news.go index 2ce23a9..f453ca1 100644 --- a/pkg/dal/dao/news.go +++ b/pkg/dal/dao/news.go @@ -400,57 +400,6 @@ func (dao *NewsDAO) QueryAsync(cond *NewsAsyncCondition) (dos []*models.NewsDO, return []*models.NewsDO{record}, 1, nil } -// 一次 SQL 抓取该批 org_id,对比 digest,返回需要下发的记录 -// func (dao *NewsDAO) QueryAsyncBatch(pairs []OrgDigestPair) (dos []*models.NewsDO, total int64, err error) { - -// if len(pairs) == 0 { -// return []*models.NewsDO{}, 0, nil -// } - -// // ① 提取 org_id 列表,同时建映射表 clientDigest[org_id] = digest -// orgIDs := make([]int64, 0, len(pairs)) -// clientDigest := make(map[int64]string, len(pairs)) -// for _, p := range pairs { -// orgIDs = append(orgIDs, p.OrgId) -// clientDigest[p.OrgId] = p.Digest -// } - -// // ② 一次 SQL:SELECT * FROM news WHERE org_id IN ( … ) -// var rows []*models.NewsDO -// // 显式展开 orgIDs -// idArgs := make([]interface{}, 0, len(orgIDs)) -// for _, id := range orgIDs { -// idArgs = append(idArgs, id) -// } - -// _, err = dao.db. -// Model(&rows). -// Table(models.TableNameNews). -// Where("org_id IN (?)", idArgs...). // 显式展开 -// Query() -// if err != nil { -// return nil, 0, err -// } - -// // ③ 在 Go 层比对 digest -// for _, row := range rows { -// cDigest := clientDigest[row.OrgId] // 客户端传来的 digest - -// // 直接从 map[string]interface{} 里取 -// var sDigest string -// if d, ok := row.ExtraData["digest"].(string); ok { -// sDigest = d -// } - -// // cDigest 为空 或 与服务器端不同,都需要下发 -// if cDigest == "" || cDigest != sDigest { -// dos = append(dos, row) -// } -// } - -// return dos, int64(len(dos)), nil -// } - func (dao *NewsDAO) QueryAsyncBatch(pairs []OrgDigestPair) (dos []*models.NewsDO, total int64, err error) { if len(pairs) == 0 { return []*models.NewsDO{}, 0, nil @@ -481,8 +430,16 @@ func (dao *NewsDAO) QueryAsyncBatch(pairs []OrgDigestPair) (dos []*models.NewsDO return nil, 0, err } - // ③ Go 层比对 digest + // ③ Go 层比对 digest(先解析 ExtraDataRaw) for _, row := range rows { + // ✅ 解析 ExtraDataRaw → ExtraData + if row.ExtraData == nil && row.ExtraDataRaw != "" { + var extra map[string]interface{} + if err := json.Unmarshal([]byte(row.ExtraDataRaw), &extra); err == nil { + row.ExtraData = extra + } + } + cDigest := clientDigest[row.OrgId] var sDigest string if d, ok := row.ExtraData["digest"].(string); ok {