单条搜索

This commit is contained in:
97694731 2026-03-14 16:17:04 +08:00
parent 6dd5815666
commit 551a234de1

View File

@ -2059,16 +2059,20 @@ func (svc *ESSearchService) SearchBooksHandler(c *gin.Context) {
val, err := db4Client.Get(ctx, isbn).Result() val, err := db4Client.Get(ctx, isbn).Result()
if err == nil && val != "" { if err == nil && val != "" {
log.Printf("[SearchBooksHandler] 从 Redis db1 查询到数据: %s", isbn) log.Printf("[SearchBooksHandler] 从 Redis db1 查询到数据: %s", isbn)
var esBook ESBook // 使用 RedisBookInfo 结构体解析
if err := json.Unmarshal([]byte(val), &esBook); err == nil { var redisBook request.BookInfo
responseList := []ESBookResponse{esBook.ConvertToResponse()} if err := json.Unmarshal([]byte(val), &redisBook); err == nil {
// 转换为 ESBook
esBook := ConvertRedisBookToESBook(&redisBook)
if esBook != nil {
responseData := esBook.ConvertToResponse()
c.JSON(200, gin.H{ c.JSON(200, gin.H{
"count": 1, "data": responseData,
"data": responseList,
}) })
return return
}
} else { } else {
log.Printf("[SearchBooksHandler] Redis 数据解析失败: %v", err) log.Printf("[SearchBookByISBNHandler] Redis 数据解析失败:%v", err)
} }
} }
} }
@ -2111,15 +2115,20 @@ func (svc *ESSearchService) SearchBookByISBNHandler(c *gin.Context) {
val, err := db4Client.Get(ctx, isbn).Result() val, err := db4Client.Get(ctx, isbn).Result()
if err == nil && val != "" { if err == nil && val != "" {
log.Printf("[SearchBookByISBNHandler] 从 Redis db1 查询到数据: %s", isbn) log.Printf("[SearchBookByISBNHandler] 从 Redis db1 查询到数据: %s", isbn)
var esBook ESBook // 使用 RedisBookInfo 结构体解析
if err := json.Unmarshal([]byte(val), &esBook); err == nil { var redisBook request.BookInfo
if err := json.Unmarshal([]byte(val), &redisBook); err == nil {
// 转换为 ESBook
esBook := ConvertRedisBookToESBook(&redisBook)
if esBook != nil {
responseData := esBook.ConvertToResponse() responseData := esBook.ConvertToResponse()
c.JSON(200, gin.H{ c.JSON(200, gin.H{
"data": responseData, "data": responseData,
}) })
return return
}
} else { } else {
log.Printf("[SearchBookByISBNHandler] Redis 数据解析失败: %v", err) log.Printf("[SearchBookByISBNHandler] Redis 数据解析失败%v", err)
} }
} else { } else {
log.Printf("[SearchBookByISBNHandler] Redis db1 中未找到 ISBN: %s", isbn) log.Printf("[SearchBookByISBNHandler] Redis db1 中未找到 ISBN: %s", isbn)
@ -3866,4 +3875,79 @@ func (svc *ESSearchService) CheckBookExistsByISBNHandler(c *gin.Context) {
"success": result.Exists, "success": result.Exists,
"data": result, "data": result,
}) })
}
// ConvertRedisBookToESBook 将 Redis 中的 BookInfo 转换为 ESBook
func ConvertRedisBookToESBook(redisBook *request.BookInfo) *ESBook {
if redisBook == nil || redisBook.Isbn == "" {
return nil
}
// 构建图片对象
carouselUrls := []string{}
if len(redisBook.ImageObject.CarouselUrlArray) > 0 {
carouselUrls = redisBook.ImageObject.CarouselUrlArray
}
liveShootingUrls := []string{}
if len(redisBook.ImageObject.DetailUrlObject.LiveShootingUrl) > 0 {
liveShootingUrls = redisBook.ImageObject.DetailUrlObject.LiveShootingUrl
}
// 提取第一张轮播图作为 book_pic
bookPicPath := ""
if len(carouselUrls) > 0 {
bookPicPath = carouselUrls[0]
}
// 提取第一张实拍图作为 book_pic_s
bookPicSResponse := ""
if len(liveShootingUrls) > 0 {
bookPicSResponse = liveShootingUrls[0]
}
return &ESBook{
ISBN: redisBook.Isbn,
BookName: FlexibleString{Value: redisBook.BookName},
Author: redisBook.Author,
Publisher: redisBook.Publishing,
PublicationTime: redisBook.PublicationDate,
BindingLayout: redisBook.Binding,
PageCount: NumberOrString(strconv.FormatInt(redisBook.PagesCount, 10)),
WordCount: NumberOrString(strconv.FormatInt(redisBook.WordsCount, 10)),
BookFormat: NumberOrString(strconv.FormatInt(redisBook.Format, 10)),
FixPrice: Float64OrString(redisBook.Price),
BookPic: BookPicObj{
LocalPath: "",
PddPath: bookPicPath,
},
BookPicS: BookPicSObj{
LocalPath: "",
PddResponse: bookPicSResponse,
},
BookDefPic: BookDefPicObj{
LocalPath: "",
PddPath: redisBook.ImageObject.DefaultImageUrl,
},
BookPicB: redisBook.ImageObject.WhiteBackgroundUrl,
CatId: redisBook.CatIdObject,
// 销量等字段默认为 0
DaySale7: 0,
DaySale15: 0,
DaySale30: 0,
DaySale60: 0,
DaySale90: 0,
DaySale180: 0,
DaySale365: 0,
ThisYearSale: 0,
LastYearSale: 0,
TotalSale: 0,
BuyCounts: 0,
SellCounts: 0,
IsSuit: 0,
IsIllegal: 0,
IsReturn: 0,
IsFilter: "000000",
}
} }