|
@@ -1,11 +1,24 @@
|
|
|
package com.sf.home.service.impl;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.sf.book.client.BookFeign;
|
|
|
+import com.sf.book.dto.BookInfoRespDto;
|
|
|
+import com.sf.core.dto.RestResp;
|
|
|
+import com.sf.home.dto.resp.HomeBookRespDto;
|
|
|
import com.sf.home.entity.HomeBook;
|
|
|
import com.sf.home.mapper.HomeBookMapper;
|
|
|
import com.sf.home.service.IHomeBookService;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
/**
|
|
|
* <p>
|
|
|
* 小说推荐 服务实现类
|
|
@@ -15,6 +28,79 @@ import org.springframework.stereotype.Service;
|
|
|
* @since 2024-08-05
|
|
|
*/
|
|
|
@Service
|
|
|
+@RequiredArgsConstructor
|
|
|
public class HomeBookServiceImpl extends ServiceImpl<HomeBookMapper, HomeBook> implements IHomeBookService {
|
|
|
|
|
|
+ private final HomeBookMapper homeBookMapper;
|
|
|
+
|
|
|
+ private final BookFeign bookFeign;
|
|
|
+
|
|
|
+ // 去到home_book表中取数据
|
|
|
+ // 再使用book_id去book_info表中找到关联数据
|
|
|
+ @Override
|
|
|
+ public List<HomeBookRespDto> allHomeBook() {
|
|
|
+
|
|
|
+ System.out.println("从Mysql中返回数据");
|
|
|
+ List<HomeBookRespDto> list = new ArrayList<>();
|
|
|
+
|
|
|
+ List<HomeBook> homeBookList = homeBookMapper.selectList(null);
|
|
|
+ // 取出所有的book_id
|
|
|
+ List<Long> bookIdList = new ArrayList<>();
|
|
|
+// for (HomeBook homeBook : homeBookList) {
|
|
|
+// bookIdList.add(homeBook.getBookId());
|
|
|
+// }
|
|
|
+ homeBookList.forEach(homeBook -> {
|
|
|
+ bookIdList.add(homeBook.getBookId());
|
|
|
+ });
|
|
|
+
|
|
|
+ // 把直接从book_info表获取数据 变为调用novel-book中的接口
|
|
|
+ // 原来的逻辑是 将home_book表中的书籍id组装成list
|
|
|
+ // 使用in在book_info表中查到匹配的书籍信息
|
|
|
+
|
|
|
+ RestResp<List<BookInfoRespDto>> listRestResp = bookFeign.listBookInfoByIds(bookIdList);
|
|
|
+ List<BookInfoRespDto> data = listRestResp.getData();
|
|
|
+ Map<Long, BookInfoRespDto> collected =
|
|
|
+ data.stream().collect(Collectors.toMap(BookInfoRespDto::getId, t -> t));
|
|
|
+
|
|
|
+ homeBookList.forEach(homeBook -> {
|
|
|
+ BookInfoRespDto bookInfoDto = collected.get(homeBook.getBookId());
|
|
|
+ HomeBookRespDto homeBookRespDto = HomeBookRespDto.builder()
|
|
|
+ .type(homeBook.getType().intValue()) // byte -> int
|
|
|
+ .bookId(homeBook.getBookId())
|
|
|
+ .picUrl(bookInfoDto.getPicUrl())
|
|
|
+ .bookName(bookInfoDto.getBookName())
|
|
|
+ .authorName(bookInfoDto.getAuthorName())
|
|
|
+ .bookDesc(bookInfoDto.getBookDesc())
|
|
|
+ .build();
|
|
|
+ list.add(homeBookRespDto);
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+// // 使用in
|
|
|
+// // select * from book_info where id in ('','','');
|
|
|
+// LambdaQueryWrapper<BookInfo> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+// queryWrapper.in(BookInfo::getId, bookIdList);
|
|
|
+// List<BookInfo> bookInfoList = bookInfoMapper.selectList(queryWrapper);
|
|
|
+// // Map<BookId,BookInfo>
|
|
|
+// // 使用了stream流的收集方法collect() 每一个BookInfo中的id作为key 每一个BookInfo自身作为value
|
|
|
+// // 因为要在home_book中每行数据找到对应的书籍信息 根据bookId查询book_info
|
|
|
+// // 通过map 记录bookId 和 bookInfo的对应关系 然后组装数据
|
|
|
+// Map<Long, BookInfo> collected =
|
|
|
+// bookInfoList.stream().collect(Collectors.toMap(BookInfo::getId, t -> t));
|
|
|
+//
|
|
|
+// homeBookList.forEach(homeBook -> {
|
|
|
+// BookInfo bookInfo = collected.get(homeBook.getBookId());
|
|
|
+// HomeBookRespDto homeBookRespDto = HomeBookRespDto.builder()
|
|
|
+// .type(homeBook.getType().intValue()) // byte -> int
|
|
|
+// .bookId(homeBook.getBookId())
|
|
|
+// .picUrl(bookInfo.getPicUrl())
|
|
|
+// .bookName(bookInfo.getBookName())
|
|
|
+// .authorName(bookInfo.getAuthorName())
|
|
|
+// .bookDesc(bookInfo.getBookDesc())
|
|
|
+// .build();
|
|
|
+// list.add(homeBookRespDto);
|
|
|
+// });
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
}
|