This commit is contained in:
parent
9cefa09718
commit
35fc3a0b02
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue