From 551a234de16349092d1bfe2e05cbb3e8c2c070ad Mon Sep 17 00:00:00 2001 From: 97694731 <97694731@qq.com> Date: Sat, 14 Mar 2026 16:17:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E6=9D=A1=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- es/es_search.go | 118 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 101 insertions(+), 17 deletions(-) diff --git a/es/es_search.go b/es/es_search.go index 0995910..09aaef6 100644 --- a/es/es_search.go +++ b/es/es_search.go @@ -2059,16 +2059,20 @@ func (svc *ESSearchService) SearchBooksHandler(c *gin.Context) { val, err := db4Client.Get(ctx, isbn).Result() if err == nil && val != "" { log.Printf("[SearchBooksHandler] 从 Redis db1 查询到数据: %s", isbn) - var esBook ESBook - if err := json.Unmarshal([]byte(val), &esBook); err == nil { - responseList := []ESBookResponse{esBook.ConvertToResponse()} - c.JSON(200, gin.H{ - "count": 1, - "data": responseList, - }) - return + // 使用 RedisBookInfo 结构体解析 + var redisBook request.BookInfo + if err := json.Unmarshal([]byte(val), &redisBook); err == nil { + // 转换为 ESBook + esBook := ConvertRedisBookToESBook(&redisBook) + if esBook != nil { + responseData := esBook.ConvertToResponse() + c.JSON(200, gin.H{ + "data": responseData, + }) + return + } } 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() if err == nil && val != "" { log.Printf("[SearchBookByISBNHandler] 从 Redis db1 查询到数据: %s", isbn) - var esBook ESBook - if err := json.Unmarshal([]byte(val), &esBook); err == nil { - responseData := esBook.ConvertToResponse() - c.JSON(200, gin.H{ - "data": responseData, - }) - return + // 使用 RedisBookInfo 结构体解析 + var redisBook request.BookInfo + if err := json.Unmarshal([]byte(val), &redisBook); err == nil { + // 转换为 ESBook + esBook := ConvertRedisBookToESBook(&redisBook) + if esBook != nil { + responseData := esBook.ConvertToResponse() + c.JSON(200, gin.H{ + "data": responseData, + }) + return + } } else { - log.Printf("[SearchBookByISBNHandler] Redis 数据解析失败: %v", err) + log.Printf("[SearchBookByISBNHandler] Redis 数据解析失败:%v", err) } } else { log.Printf("[SearchBookByISBNHandler] Redis db1 中未找到 ISBN: %s", isbn) @@ -3866,4 +3875,79 @@ func (svc *ESSearchService) CheckBookExistsByISBNHandler(c *gin.Context) { "success": result.Exists, "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", + } }