diff --git a/service-client/service-album-client/src/main/java/com/atguigu/tingshu/album/AlbumFeignClient.java b/service-client/service-album-client/src/main/java/com/atguigu/tingshu/album/AlbumFeignClient.java
index 57a82f1..9586c27 100644
--- a/service-client/service-album-client/src/main/java/com/atguigu/tingshu/album/AlbumFeignClient.java
+++ b/service-client/service-album-client/src/main/java/com/atguigu/tingshu/album/AlbumFeignClient.java
@@ -3,11 +3,15 @@ package com.atguigu.tingshu.album;
import com.atguigu.tingshu.album.impl.AlbumDegradeFeignClient;
import com.atguigu.tingshu.common.result.Result;
import com.atguigu.tingshu.model.album.AlbumInfo;
+import com.atguigu.tingshu.model.album.BaseCategory3;
import com.atguigu.tingshu.model.album.BaseCategoryView;
+import com.atguigu.tingshu.vo.album.AlbumStatVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
+import java.util.List;
+
/**
*
* 专辑模块远程调用Feign接口
@@ -34,4 +38,13 @@ public interface AlbumFeignClient {
@GetMapping("/category/getCategoryView/{category3Id}")
public Result getCategoryView(@PathVariable Long category3Id);
+ @GetMapping("/category/findTopBaseCategory3/{category1Id}")
+ public Result> findTopBaseCategory3(@PathVariable Long category1Id);
+
+
+ @GetMapping("/albumInfo/getAlbumStatVo/{albumId}")
+ public ResultgetAlbumStatVo(@PathVariable Long albumId);
+
+
+
}
diff --git a/service-client/service-album-client/src/main/java/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.java b/service-client/service-album-client/src/main/java/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.java
index 049275f..d8a1ebe 100644
--- a/service-client/service-album-client/src/main/java/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.java
+++ b/service-client/service-album-client/src/main/java/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.java
@@ -4,10 +4,14 @@ package com.atguigu.tingshu.album.impl;
import com.atguigu.tingshu.album.AlbumFeignClient;
import com.atguigu.tingshu.common.result.Result;
import com.atguigu.tingshu.model.album.AlbumInfo;
+import com.atguigu.tingshu.model.album.BaseCategory3;
import com.atguigu.tingshu.model.album.BaseCategoryView;
+import com.atguigu.tingshu.vo.album.AlbumStatVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
+import java.util.List;
+
@Component
@Slf4j
public class AlbumDegradeFeignClient implements AlbumFeignClient {
@@ -24,4 +28,16 @@ public class AlbumDegradeFeignClient implements AlbumFeignClient {
log.error("[专辑服务]提供远程调用方法getCategoryView执行服务降级");
return null;
}
+
+ @Override
+ public Result> findTopBaseCategory3(Long category1Id) {
+ log.error("[专辑服务]提供远程调用方法findTopBaseCategory3执行服务降级");
+ return null;
+ }
+
+ @Override
+ public Result getAlbumStatVo(Long albumId) {
+ log.error("[专辑服务]提供远程调用方法getAlbumStatVo执行服务降级");
+ return null;
+ }
}
diff --git a/service-client/service-album-client/target/classes/com/atguigu/tingshu/album/AlbumFeignClient.class b/service-client/service-album-client/target/classes/com/atguigu/tingshu/album/AlbumFeignClient.class
index aa3aa53..5022b35 100644
Binary files a/service-client/service-album-client/target/classes/com/atguigu/tingshu/album/AlbumFeignClient.class and b/service-client/service-album-client/target/classes/com/atguigu/tingshu/album/AlbumFeignClient.class differ
diff --git a/service-client/service-album-client/target/classes/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.class b/service-client/service-album-client/target/classes/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.class
index 6957c97..173bdc2 100644
Binary files a/service-client/service-album-client/target/classes/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.class and b/service-client/service-album-client/target/classes/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.class differ
diff --git a/service-client/service-user-client/src/main/java/com/atguigu/tingshu/user/client/UserFeignClient.java b/service-client/service-user-client/src/main/java/com/atguigu/tingshu/user/client/UserFeignClient.java
index 73e5705..7b8ec66 100644
--- a/service-client/service-user-client/src/main/java/com/atguigu/tingshu/user/client/UserFeignClient.java
+++ b/service-client/service-user-client/src/main/java/com/atguigu/tingshu/user/client/UserFeignClient.java
@@ -6,6 +6,11 @@ import com.atguigu.tingshu.vo.user.UserInfoVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+import java.util.Map;
/**
*
@@ -24,4 +29,10 @@ public interface UserFeignClient {
@GetMapping("/userInfo/getUserInfoVo/{userId}")
public Result getUserInfoVo(@PathVariable Long userId);
+ @PostMapping("/userInfo/userIsPaidTrack/{albumId}")
+ public Result> userIsPaidTrack(
+ @PathVariable("albumId") Long albumId,
+ @RequestBody List needCheckPayStateTrackIdList
+ );
+
}
diff --git a/service-client/service-user-client/src/main/java/com/atguigu/tingshu/user/client/impl/UserDegradeFeignClient.java b/service-client/service-user-client/src/main/java/com/atguigu/tingshu/user/client/impl/UserDegradeFeignClient.java
index 0528a5a..aa4a96e 100644
--- a/service-client/service-user-client/src/main/java/com/atguigu/tingshu/user/client/impl/UserDegradeFeignClient.java
+++ b/service-client/service-user-client/src/main/java/com/atguigu/tingshu/user/client/impl/UserDegradeFeignClient.java
@@ -6,6 +6,10 @@ import com.atguigu.tingshu.user.client.UserFeignClient;
import com.atguigu.tingshu.vo.user.UserInfoVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
@Slf4j
@Component
public class UserDegradeFeignClient implements UserFeignClient {
@@ -15,4 +19,10 @@ public class UserDegradeFeignClient implements UserFeignClient {
log.error("[用户服务]提供远程调用方法getUserInfoVo执行服务降级");
return null;
}
+
+ @Override
+ public Result> userIsPaidTrack(Long albumId, List needCheckPayStateTrackIdList) {
+ log.error("[用户服务]提供远程调用方法userIsPaidTrack执行服务降级");
+ return null;
+ }
}
diff --git a/service-client/service-user-client/target/classes/com/atguigu/tingshu/user/client/UserFeignClient.class b/service-client/service-user-client/target/classes/com/atguigu/tingshu/user/client/UserFeignClient.class
index 027f8f2..8c65149 100644
Binary files a/service-client/service-user-client/target/classes/com/atguigu/tingshu/user/client/UserFeignClient.class and b/service-client/service-user-client/target/classes/com/atguigu/tingshu/user/client/UserFeignClient.class differ
diff --git a/service-client/service-user-client/target/classes/com/atguigu/tingshu/user/client/impl/UserDegradeFeignClient.class b/service-client/service-user-client/target/classes/com/atguigu/tingshu/user/client/impl/UserDegradeFeignClient.class
index e283733..37d703f 100644
Binary files a/service-client/service-user-client/target/classes/com/atguigu/tingshu/user/client/impl/UserDegradeFeignClient.class and b/service-client/service-user-client/target/classes/com/atguigu/tingshu/user/client/impl/UserDegradeFeignClient.class differ
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/api/AlbumInfoApiController.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/api/AlbumInfoApiController.java
index 04cf88f..e915f84 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/api/AlbumInfoApiController.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/api/AlbumInfoApiController.java
@@ -8,6 +8,7 @@ import com.atguigu.tingshu.model.album.AlbumInfo;
import com.atguigu.tingshu.query.album.AlbumInfoQuery;
import com.atguigu.tingshu.vo.album.AlbumInfoVo;
import com.atguigu.tingshu.vo.album.AlbumListVo;
+import com.atguigu.tingshu.vo.album.AlbumStatVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
@@ -17,6 +18,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
+import java.util.Map;
@Tag(name = "专辑管理")
@RestController
@@ -83,8 +85,6 @@ public class AlbumInfoApiController {
* 查询当前用户专辑列表
* @return
*/
-
-
/*这个接口是为了在声音列表中获取当前用户的所有专辑 有一个下拉框 在那里能显示内容*/
@GuiGuLogin
@Operation(summary = "查询当前用户专辑列表")
@@ -98,6 +98,14 @@ public class AlbumInfoApiController {
return Result.ok(list);
}
+ @Operation(summary = "专辑状态统计")
+ @GetMapping("/albumInfo/getAlbumStatVo/{albumId}")
+ public ResultgetAlbumStatVo(@PathVariable Long albumId){
+ AlbumStatVo albumStatVo=albumInfoService.getAlbumStatVo(albumId);
+ return Result.ok(albumStatVo);
+
+ }
+
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/api/BaseCategoryApiController.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/api/BaseCategoryApiController.java
index ceacb0d..6d8211e 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/api/BaseCategoryApiController.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/api/BaseCategoryApiController.java
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import com.atguigu.tingshu.album.service.BaseCategoryService;
import com.atguigu.tingshu.common.result.Result;
import com.atguigu.tingshu.model.album.BaseAttribute;
+import com.atguigu.tingshu.model.album.BaseCategory3;
import com.atguigu.tingshu.model.album.BaseCategoryView;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -47,6 +48,24 @@ public class BaseCategoryApiController {
BaseCategoryView baseCategoryView = baseCategoryService.getCategoryView(category3Id);
return Result.ok(baseCategoryView);
}
+ @Operation(summary = "根据一级分类Id查询置顶7个三级分类列表")
+ @GetMapping("/category/findTopBaseCategory3/{category1Id}")
+ public Result> findTopBaseCategory3(@PathVariable Long category1Id){
+ List list=baseCategoryService.findTopBaseCategory3(category1Id);
+ return Result.ok(list);
+ }
+ /**
+ * 查询1级分类下包含所有二级以及三级分类
+ * @param category1Id
+ * @return
+ */
+ @Operation(summary = "查询1级分类下包含所有二级以及三级分类")
+ @GetMapping("/category/getBaseCategoryList/{category1Id}")
+ public Result getBaseCategoryListByCategory1Id(@PathVariable Long category1Id) {
+ JSONObject jsonObject = baseCategoryService.getBaseCategoryListByCategory1Id(category1Id);
+ return Result.ok(jsonObject);
+ }
+
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/api/FileUploadApiController.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/api/FileUploadApiController.java
index ffde64e..3ba322e 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/api/FileUploadApiController.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/api/FileUploadApiController.java
@@ -18,7 +18,7 @@ public class FileUploadApiController {
@Autowired
private FileUploadService fileUploadService;
- //这个接口是将文件上传到minio上
+ //这个接口是将文件上传到minio上 上传的时候用MultipartFile
@Operation(summary = "上传文件")
@PostMapping("/fileUpload")
public Result fileUpload(@RequestParam("file") MultipartFile file) throws IOException {
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/api/TrackInfoApiController.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/api/TrackInfoApiController.java
index aa516f3..e765ff1 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/api/TrackInfoApiController.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/api/TrackInfoApiController.java
@@ -7,6 +7,7 @@ import com.atguigu.tingshu.common.result.Result;
import com.atguigu.tingshu.common.util.AuthContextHolder;
import com.atguigu.tingshu.model.album.TrackInfo;
import com.atguigu.tingshu.query.album.TrackInfoQuery;
+import com.atguigu.tingshu.vo.album.AlbumTrackListVo;
import com.atguigu.tingshu.vo.album.TrackInfoVo;
import com.atguigu.tingshu.vo.album.TrackListVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -118,5 +119,31 @@ public class TrackInfoApiController {
return Result.ok();
}
+ /**
+ * 分页查询专辑下包含声音列表(动态展示付费标识)
+ *
+ * @param albumId 专辑ID
+ * @param page 页码
+ * @param limit 页大小
+ * @return 分页对象
+ */
+ @GuiGuLogin(required = false) //无论用户是否登录都可以调用,只要登录了就可以获取到用户ID
+ @Operation(summary = "分页查询专辑下包含声音列表(动态展示付费标识)")
+ @GetMapping("/trackInfo/findAlbumTrackPage/{albumId}/{page}/{limit}")
+ public Result> findAlbumTrackPage(
+ @PathVariable Long albumId,
+ @PathVariable Long page,
+ @PathVariable Long limit
+ ) {
+ //1.尝试获取当前用户ID-可能有值,也可能没有值
+ Long userId = AuthContextHolder.getUserId();
+ //2.创建分页对象:封装页码、页大小
+ Page pageInfo = new Page<>(page, limit);
+ //3.调用业务逻辑层(持久层)封装当前页记录,总页数等
+ pageInfo = trackInfoService.findAlbumTrackPage(pageInfo, userId, albumId);
+ //4.响应结果
+ return Result.ok(pageInfo);
+ }
+
}
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/mapper/AlbumInfoMapper.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/mapper/AlbumInfoMapper.java
index adad2fa..1c32053 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/mapper/AlbumInfoMapper.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/mapper/AlbumInfoMapper.java
@@ -3,6 +3,7 @@ package com.atguigu.tingshu.album.mapper;
import com.atguigu.tingshu.model.album.AlbumInfo;
import com.atguigu.tingshu.query.album.AlbumInfoQuery;
import com.atguigu.tingshu.vo.album.AlbumListVo;
+import com.atguigu.tingshu.vo.album.AlbumStatVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
@@ -12,4 +13,6 @@ import org.apache.ibatis.annotations.Param;
public interface AlbumInfoMapper extends BaseMapper {
IPage findUserAlbumPage(IPage pageInfo, @Param("vo")AlbumInfoQuery albumInfoQuery);
+
+ AlbumStatVo getAlbumStatVo(Long albumId);
}
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/mapper/TrackInfoMapper.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/mapper/TrackInfoMapper.java
index 8015506..3c869a2 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/mapper/TrackInfoMapper.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/mapper/TrackInfoMapper.java
@@ -2,6 +2,7 @@ package com.atguigu.tingshu.album.mapper;
import com.atguigu.tingshu.model.album.TrackInfo;
import com.atguigu.tingshu.query.album.TrackInfoQuery;
+import com.atguigu.tingshu.vo.album.AlbumTrackListVo;
import com.atguigu.tingshu.vo.album.TrackListVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -13,4 +14,6 @@ public interface TrackInfoMapper extends BaseMapper {
Page findUserTrackPage(Page pageInfo,@Param("vo")TrackInfoQuery trackInfoQuery);
+
+ Page findAlbumTrackPage(Page pageInfo, Long albumId);
}
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/AlbumInfoService.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/AlbumInfoService.java
index 7453c02..2e9d904 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/AlbumInfoService.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/AlbumInfoService.java
@@ -4,6 +4,7 @@ import com.atguigu.tingshu.model.album.AlbumInfo;
import com.atguigu.tingshu.query.album.AlbumInfoQuery;
import com.atguigu.tingshu.vo.album.AlbumInfoVo;
import com.atguigu.tingshu.vo.album.AlbumListVo;
+import com.atguigu.tingshu.vo.album.AlbumStatVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -27,4 +28,6 @@ public interface AlbumInfoService extends IService {
void updateAlbumInfo(Long id, AlbumInfoVo albumInfoVo);
List findUserAllAlbumList(Long userId);
+
+ AlbumStatVo getAlbumStatVo(Long albumId);
}
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/BaseCategoryService.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/BaseCategoryService.java
index d90c6ec..8c35ae9 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/BaseCategoryService.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/BaseCategoryService.java
@@ -3,6 +3,7 @@ package com.atguigu.tingshu.album.service;
import com.alibaba.fastjson.JSONObject;
import com.atguigu.tingshu.model.album.BaseAttribute;
import com.atguigu.tingshu.model.album.BaseCategory1;
+import com.atguigu.tingshu.model.album.BaseCategory3;
import com.atguigu.tingshu.model.album.BaseCategoryView;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -16,4 +17,8 @@ public interface BaseCategoryService extends IService {
List findAttribute(Long category1Id);
BaseCategoryView getCategoryView(Long category3Id);
+
+ List findTopBaseCategory3(Long category1Id);
+
+ JSONObject getBaseCategoryListByCategory1Id(Long category1Id);
}
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/TrackInfoService.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/TrackInfoService.java
index ffbbf89..b9872db 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/TrackInfoService.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/TrackInfoService.java
@@ -2,6 +2,7 @@ package com.atguigu.tingshu.album.service;
import com.atguigu.tingshu.model.album.TrackInfo;
import com.atguigu.tingshu.query.album.TrackInfoQuery;
+import com.atguigu.tingshu.vo.album.AlbumTrackListVo;
import com.atguigu.tingshu.vo.album.TrackInfoVo;
import com.atguigu.tingshu.vo.album.TrackListVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -32,4 +33,7 @@ public interface TrackInfoService extends IService {
void updateTrackInfo(Long id, TrackInfoVo trackInfoVo);
void removeTrackInfo(Long id);
+
+ Page findAlbumTrackPage(Page pageInfo, Long userId, Long albumId);
+
}
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.java
index d33af6e..2de8053 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.java
@@ -20,6 +20,7 @@ import com.atguigu.tingshu.query.album.AlbumInfoQuery;
import com.atguigu.tingshu.vo.album.AlbumAttributeValueVo;
import com.atguigu.tingshu.vo.album.AlbumInfoVo;
import com.atguigu.tingshu.vo.album.AlbumListVo;
+import com.atguigu.tingshu.vo.album.AlbumStatVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -92,7 +93,7 @@ public class AlbumInfoServiceImpl extends ServiceImpl findTopBaseCategory3(Long category1Id) {
+ List baseCategory2List = baseCategory2Mapper.selectList( new LambdaQueryWrapper()
+ .eq(BaseCategory2::getCategory1Id, category1Id)
+ .select(BaseCategory2::getId));
+ if (CollUtil.isNotEmpty(baseCategory2List)) {
+ List category2IdList = baseCategory2List.stream()
+ .map(BaseCategory2::getId).collect(Collectors.toList());
+ //2.根据二级分类ID列表查询置顶前7个个三级分类列表
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.in(BaseCategory3::getCategory2Id, category2IdList);
+ queryWrapper.eq(BaseCategory3::getIsTop, 1);
+ queryWrapper.orderByAsc(BaseCategory3::getOrderNum);
+ queryWrapper.last("limit 7");
+ return baseCategory3Mapper.selectList(queryWrapper);
+ }
+ return null;
+ }
+
+ @Override
+ public JSONObject getBaseCategoryListByCategory1Id(Long category1Id) {
+ //1.处理1级分类
+ //1.1 根据1级分类ID查询分类视图,得到"1级"分类列表,获取列表第一条记录即可
+ List baseCategory1List = baseCategoryViewMapper.selectList(
+ new LambdaQueryWrapper()
+ .eq(BaseCategoryView::getCategory1Id, category1Id)
+ );
+ //1.2 创建1级分类JSON对象
+ JSONObject jsonObject1 = new JSONObject();
+ //1.2.1 封装1级分类对象中分类ID
+ jsonObject1.put("categoryId", baseCategory1List.get(0).getCategory1Id());
+ //1.2.2 封装1级分类对象中分类名称
+ jsonObject1.put("categoryName", baseCategory1List.get(0).getCategory1Name());
+
+ //2.处理2级分类
+ //2.1 创建2级分类JSON对象集合
+ List jsonObject2List = new ArrayList<>();
+ //2.2 对"1级分类"列表按照2级分类ID进行分组,得到"2级分类"Map
+ Map> map2 = baseCategory1List.stream()
+ .collect(Collectors.groupingBy(BaseCategoryView::getCategory2Id));
+ //2.2 遍历"2级分类"Map
+ for (Map.Entry> entry2 : map2.entrySet()) {
+ //2.3 创建2级分类JSON对象
+ JSONObject jsonObject2 = new JSONObject();
+ //2.3.1 封装2级分类JSON对象分类ID
+ jsonObject2.put("categoryId", entry2.getKey());
+ //2.3.2 封装2级分类JSON对象分类名称
+ jsonObject2.put("categoryName", entry2.getValue().get(0).getCategory2Name());
+ //2.4 将2级分类对象加入到2级分类集合中
+ jsonObject2List.add(jsonObject2);
+ //3.处理3级分类
+ //3.1 创建3级分类集合
+ List jsonObject3List = new ArrayList<>();
+ //3.2 遍历"2级分类"列表
+ for (BaseCategoryView baseCategoryView : entry2.getValue()) {
+ //3.3 创建3级分类JSON对象
+ JSONObject jsonObject3 = new JSONObject();
+ //3.3.1 封装3级分类ID
+ jsonObject3.put("categoryId", baseCategoryView.getCategory3Id());
+ //3.3.2 封装3级分类名称
+ jsonObject3.put("categoryName", baseCategoryView.getCategory3Name());
+ //3.4 将3级分类对象加入到3级分类集合中
+ jsonObject3List.add(jsonObject3);
+ }
+
+ //3.5 将3级分类集合加入2级分类对象"categoryChild"属性中
+ jsonObject2.put("categoryChild", jsonObject3List);
+ }
+ //2.5 将2级分类集合加入到1级分类对象中"categoryChild"属性中
+ jsonObject1.put("categoryChild", jsonObject2List);
+
+ //4.响应1级分类对象
+ return jsonObject1;
+ }
}
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/TrackInfoServiceImpl.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/TrackInfoServiceImpl.java
index 2f2efd2..6229f32 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/TrackInfoServiceImpl.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/TrackInfoServiceImpl.java
@@ -1,6 +1,7 @@
package com.atguigu.tingshu.album.service.impl;
import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Assert;
import com.atguigu.tingshu.album.mapper.AlbumInfoMapper;
import com.atguigu.tingshu.album.mapper.TrackInfoMapper;
import com.atguigu.tingshu.album.mapper.TrackStatMapper;
@@ -12,9 +13,12 @@ import com.atguigu.tingshu.model.album.AlbumInfo;
import com.atguigu.tingshu.model.album.TrackInfo;
import com.atguigu.tingshu.model.album.TrackStat;
import com.atguigu.tingshu.query.album.TrackInfoQuery;
+import com.atguigu.tingshu.user.client.UserFeignClient;
+import com.atguigu.tingshu.vo.album.AlbumTrackListVo;
import com.atguigu.tingshu.vo.album.TrackInfoVo;
import com.atguigu.tingshu.vo.album.TrackListVo;
import com.atguigu.tingshu.vo.album.TrackMediaInfoVo;
+import com.atguigu.tingshu.vo.user.UserInfoVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -26,195 +30,272 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.atguigu.tingshu.common.constant.SystemConstant.ALBUM_PAY_TYPE_REQUIRE;
+import static com.atguigu.tingshu.common.constant.SystemConstant.ALBUM_PAY_TYPE_VIPFREE;
@Slf4j
@Service
@SuppressWarnings({"all"})
public class TrackInfoServiceImpl extends ServiceImpl implements TrackInfoService {
- @Autowired
- private TrackInfoMapper trackInfoMapper;
- @Autowired
- private AlbumInfoMapper albumInfoMapper;
- @Autowired
- private VodService vodService;
- @Autowired
- private AuditService auditService;
- @Autowired
- private TrackStatMapper trackStatMapper;
+ @Autowired
+ private TrackInfoMapper trackInfoMapper;
+ @Autowired
+ private AlbumInfoMapper albumInfoMapper;
+ @Autowired
+ private VodService vodService;
+ @Autowired
+ private AuditService auditService;
+ @Autowired
+ private TrackStatMapper trackStatMapper;
+ @Autowired
+ private UserFeignClient userFeignClient;
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void saveTrackInfo(TrackInfoVo trackInfoVo, Long userId) {
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void saveTrackInfo(TrackInfoVo trackInfoVo, Long userId) {
//1. 根据专辑id查询专辑信息 用于更新专辑声音数量
- AlbumInfo albumInfo = albumInfoMapper.selectById(trackInfoVo.getAlbumId());
- //2. 保存声音信息
- //2.1 将VO转为PO对象
- TrackInfo trackInfo = BeanUtil.copyProperties(trackInfoVo, TrackInfo.class);
- //2.2 属性赋值
- //2.2.1 基本属性:用户ID,审核状态,封面图片,来源
- trackInfo.setUserId(userId);
- trackInfo.setStatus(SystemConstant.TRACK_STATUS_NO_PASS);
- trackInfo.setSource(SystemConstant.TRACK_SOURCE_USER);
- if (StringUtils.isBlank(trackInfo.getCoverUrl())) {
- //如果用户没有选择封面图片 则用户所属专辑的封面图片
- trackInfo.setCoverUrl(albumInfo.getCoverUrl());
- }
- //2.2.2 计算声音序号 现有专辑包含声音数量+1
- trackInfo.setOrderNum(albumInfo.getIncludeTrackCount() + 1);
- //2.2.3 查询点播平台获取音频详情:得到时长、大小、类型
- TrackMediaInfoVo mediaInfoVo = vodService.getMediaInfo(trackInfo.getMediaFileId());
- if (mediaInfoVo != null) {
- trackInfo.setMediaDuration(BigDecimal.valueOf(mediaInfoVo.getDuration()));
- trackInfo.setMediaSize(mediaInfoVo.getSize());
- trackInfo.setMediaType(mediaInfoVo.getType());
- }
- albumInfoMapper.updateById(albumInfo);
- //2.2.5 保存声音记录
- trackInfoMapper.insert(trackInfo);
+ AlbumInfo albumInfo = albumInfoMapper.selectById(trackInfoVo.getAlbumId());
+ //2. 保存声音信息
+ //2.1 将VO转为PO对象
+ TrackInfo trackInfo = BeanUtil.copyProperties(trackInfoVo, TrackInfo.class);
+ //2.2 属性赋值
+ //2.2.1 基本属性:用户ID,审核状态,封面图片,来源
+ trackInfo.setUserId(userId);
+ trackInfo.setStatus(SystemConstant.TRACK_STATUS_NO_PASS);
+ trackInfo.setSource(SystemConstant.TRACK_SOURCE_USER);
+ if (StringUtils.isBlank(trackInfo.getCoverUrl())) {
+ //如果用户没有选择封面图片 则用户所属专辑的封面图片
+ trackInfo.setCoverUrl(albumInfo.getCoverUrl());
+ }
+ //2.2.2 计算声音序号 现有专辑包含声音数量+1
+ trackInfo.setOrderNum(albumInfo.getIncludeTrackCount() + 1);
+ //2.2.3 查询点播平台获取音频详情:得到时长、大小、类型
+ TrackMediaInfoVo mediaInfoVo = vodService.getMediaInfo(trackInfo.getMediaFileId());
+ if (mediaInfoVo != null) {
+ trackInfo.setMediaDuration(BigDecimal.valueOf(mediaInfoVo.getDuration()));
+ trackInfo.setMediaSize(mediaInfoVo.getSize());
+ trackInfo.setMediaType(mediaInfoVo.getType());
+ }
+ albumInfoMapper.updateById(albumInfo);
+ //2.2.5 保存声音记录
+ trackInfoMapper.insert(trackInfo);
- //2.2.4 TODO 调用内容审核接口,发起内容审核,更新审核任务ID
- //审核标题和简介
- String text = trackInfo.getTrackTitle() + trackInfo.getTrackIntro();
- //获得一个标识 pass或者block review等字符 这样可以分辨出来是不是通过
- //将trackInfo中的状态设置为已通过或其他
- String suggestion = auditService.auditText(text);
- if ("pass".equals(suggestion)) {
- trackInfo.setStatus(SystemConstant.TRACK_STATUS_PASS);
- //TODO 文本审核通过后,还需要进一步审核音频内容
- String reviewTaskId = auditService.startReviewTask(trackInfo.getMediaFileId());
- trackInfo.setStatus(SystemConstant.TRACK_STATUS_REVIEWING);
- trackInfo.setReviewTaskId(reviewTaskId);
- } else if ("block".equals(suggestion)) {
- trackInfo.setStatus(SystemConstant.TRACK_STATUS_NO_PASS);
- } else if ("review".equals(suggestion)) {
- trackInfo.setStatus(SystemConstant.TRACK_STATUS_ARTIFICIAL);
- }
- trackInfoMapper.updateById(trackInfo);
+ //2.2.4 TODO 调用内容审核接口,发起内容审核,更新审核任务ID
+ //审核标题和简介
+ String text = trackInfo.getTrackTitle() + trackInfo.getTrackIntro();
+ //获得一个标识 pass或者block review等字符 这样可以分辨出来是不是通过
+ //将trackInfo中的状态设置为已通过或其他
+ String suggestion = auditService.auditText(text);
+ if ("pass".equals(suggestion)) {
+ trackInfo.setStatus(SystemConstant.TRACK_STATUS_PASS);
+ //TODO 文本审核通过后,还需要进一步审核音频内容
+ String reviewTaskId = auditService.startReviewTask(trackInfo.getMediaFileId());
+ trackInfo.setStatus(SystemConstant.TRACK_STATUS_REVIEWING);
+ trackInfo.setReviewTaskId(reviewTaskId);
+ } else if ("block".equals(suggestion)) {
+ trackInfo.setStatus(SystemConstant.TRACK_STATUS_NO_PASS);
+ } else if ("review".equals(suggestion)) {
+ trackInfo.setStatus(SystemConstant.TRACK_STATUS_ARTIFICIAL);
+ }
+ trackInfoMapper.updateById(trackInfo);
- //3. 更新专辑包含声音数量
- albumInfo.setIncludeTrackCount(albumInfo.getIncludeTrackCount() + 1);
- albumInfoMapper.updateById(albumInfo);
+ //3. 更新专辑包含声音数量
+ albumInfo.setIncludeTrackCount(albumInfo.getIncludeTrackCount() + 1);
+ albumInfoMapper.updateById(albumInfo);
- //3.新增声音统计信息
- this.saveTrackStat(trackInfo.getId(), SystemConstant.TRACK_STAT_PLAY, 0);
- this.saveTrackStat(trackInfo.getId(), SystemConstant.TRACK_STAT_COLLECT, 0);
- this.saveTrackStat(trackInfo.getId(), SystemConstant.TRACK_STAT_PRAISE, 0);
- this.saveTrackStat(trackInfo.getId(), SystemConstant.TRACK_STAT_COMMENT, 0);
+ //3.新增声音统计信息
+ this.saveTrackStat(trackInfo.getId(), SystemConstant.TRACK_STAT_PLAY, 0);
+ this.saveTrackStat(trackInfo.getId(), SystemConstant.TRACK_STAT_COLLECT, 0);
+ this.saveTrackStat(trackInfo.getId(), SystemConstant.TRACK_STAT_PRAISE, 0);
+ this.saveTrackStat(trackInfo.getId(), SystemConstant.TRACK_STAT_COMMENT, 0);
- }
- /**
- * 保存声音统计信息
- *
- * @param trackId 声音ID
- * @param statType 统计类型:播放、点赞、收藏、评论
- * @param statNum 统计数值
- */
- @Override
- public void saveTrackStat(Long trackId, String statType, int statNum) {
- TrackStat trackStat = new TrackStat();
- trackStat.setTrackId(trackId);
- trackStat.setStatType(statType);
- trackStat.setStatNum(statNum);
- trackStatMapper.insert(trackStat);
- }
- /**
- * 分页条件查询当前用户声音列表
- *
- * @param pageInfo 分页对象
- * @param trackInfoQuery 查询条件
- * @return 分页对象
- */
- @Override
- public Page findUserTrackPage(Page pageInfo, TrackInfoQuery trackInfoQuery) {
- return trackInfoMapper.findUserTrackPage(pageInfo, trackInfoQuery);
- }
+ }
- @Override
- public void updateTrackInfo(Long id, TrackInfoVo trackInfoVo) {
- //1. 根据id查询声音信息 得到"原有的"音频唯一标识
- TrackInfo trackInfo = trackInfoMapper.selectById(id);
- String oldMediaFileId = trackInfo.getMediaFileId();
+ /**
+ * 保存声音统计信息
+ *
+ * @param trackId 声音ID
+ * @param statType 统计类型:播放、点赞、收藏、评论
+ * @param statNum 统计数值
+ */
+ @Override
+ public void saveTrackStat(Long trackId, String statType, int statNum) {
+ TrackStat trackStat = new TrackStat();
+ trackStat.setTrackId(trackId);
+ trackStat.setStatType(statType);
+ trackStat.setStatNum(statNum);
+ trackStatMapper.insert(trackStat);
+ }
- //对文本进行审核
- String text = trackInfoVo.getTrackTitle() + trackInfoVo.getTrackIntro();
- String suggestion = auditService.auditText(text);
- if ("pass".equals(suggestion)) {
- trackInfo.setStatus(SystemConstant.TRACK_STATUS_PASS);
- } else if ("block".equals(suggestion)) {
- trackInfo.setStatus(SystemConstant.TRACK_STATUS_NO_PASS);
- } else if ("review".equals(suggestion)) {
- trackInfo.setStatus(SystemConstant.TRACK_STATUS_ARTIFICIAL);
- }
+ /**
+ * 分页条件查询当前用户声音列表
+ *
+ * @param pageInfo 分页对象
+ * @param trackInfoQuery 查询条件
+ * @return 分页对象
+ */
+ @Override
+ public Page findUserTrackPage(Page pageInfo, TrackInfoQuery trackInfoQuery) {
+ return trackInfoMapper.findUserTrackPage(pageInfo, trackInfoQuery);
+ }
- //2. 判断音频文件是否发生更新,如果更新
- if (!trackInfoVo.getMediaFileId().equals(oldMediaFileId)) {
- // 2.1 调用点播平台获取最新音频详情信息
- TrackMediaInfoVo mediaInfo = vodService.getMediaInfo(trackInfoVo.getMediaFileId());
- if (mediaInfo != null) {
- trackInfo.setMediaFileId(trackInfoVo.getMediaFileId());
- trackInfo.setMediaUrl(trackInfoVo.getMediaUrl());
- trackInfo.setMediaDuration(BigDecimal.valueOf(mediaInfo.getDuration()));
- trackInfo.setMediaType(mediaInfo.getType());
- trackInfo.setMediaSize(mediaInfo.getSize());
- // 2.2 TODO 再次对变更后音频文件进行内容审核
- String reviewTaskId = auditService.startReviewTask(trackInfo.getMediaFileId());
- trackInfo.setStatus(SystemConstant.TRACK_STATUS_REVIEWING);
- trackInfo.setReviewTaskId(reviewTaskId);
+ @Override
+ public void updateTrackInfo(Long id, TrackInfoVo trackInfoVo) {
+ //1. 根据id查询声音信息 得到"原有的"音频唯一标识
+ TrackInfo trackInfo = trackInfoMapper.selectById(id);
+ String oldMediaFileId = trackInfo.getMediaFileId();
- // 2.3原有音频从点播平台删除
- vodService.deleteMedia(oldMediaFileId);
- }
- }
- trackInfo.setTrackTitle(trackInfoVo.getTrackTitle());
- trackInfo.setTrackIntro(trackInfoVo.getTrackIntro());
- trackInfo.setCoverUrl(trackInfoVo.getCoverUrl());
+ //对文本进行审核
+ String text = trackInfoVo.getTrackTitle() + trackInfoVo.getTrackIntro();
+ String suggestion = auditService.auditText(text);
+ if ("pass".equals(suggestion)) {
+ trackInfo.setStatus(SystemConstant.TRACK_STATUS_PASS);
+ } else if ("block".equals(suggestion)) {
+ trackInfo.setStatus(SystemConstant.TRACK_STATUS_NO_PASS);
+ } else if ("review".equals(suggestion)) {
+ trackInfo.setStatus(SystemConstant.TRACK_STATUS_ARTIFICIAL);
+ }
+
+ //2. 判断音频文件是否发生更新,如果更新
+ if (!trackInfoVo.getMediaFileId().equals(oldMediaFileId)) {
+ // 2.1 调用点播平台获取最新音频详情信息
+ TrackMediaInfoVo mediaInfo = vodService.getMediaInfo(trackInfoVo.getMediaFileId());
+ if (mediaInfo != null) {
+ trackInfo.setMediaFileId(trackInfoVo.getMediaFileId());
+ trackInfo.setMediaUrl(trackInfoVo.getMediaUrl());
+ trackInfo.setMediaDuration(BigDecimal.valueOf(mediaInfo.getDuration()));
+ trackInfo.setMediaType(mediaInfo.getType());
+ trackInfo.setMediaSize(mediaInfo.getSize());
+ // 2.2 TODO 再次对变更后音频文件进行内容审核
+ String reviewTaskId = auditService.startReviewTask(trackInfo.getMediaFileId());
+ trackInfo.setStatus(SystemConstant.TRACK_STATUS_REVIEWING);
+ trackInfo.setReviewTaskId(reviewTaskId);
+
+ // 2.3原有音频从点播平台删除
+ vodService.deleteMedia(oldMediaFileId);
+ }
+ }
+ trackInfo.setTrackTitle(trackInfoVo.getTrackTitle());
+ trackInfo.setTrackIntro(trackInfoVo.getTrackIntro());
+ trackInfo.setCoverUrl(trackInfoVo.getCoverUrl());
- //3. 更新声音记录
- trackInfoMapper.updateById(trackInfo);
+ //3. 更新声音记录
+ trackInfoMapper.updateById(trackInfo);
- }
+ }
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void removeTrackInfo(Long id) {
- //1.根据ID查询要被删除声音记录 得到专辑ID跟序号
- TrackInfo trackInfo = trackInfoMapper.selectById(id);
- Long albumId = trackInfo.getAlbumId();
- Integer orderNum = trackInfo.getOrderNum();
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void removeTrackInfo(Long id) {
+ //1.根据ID查询要被删除声音记录 得到专辑ID跟序号
+ TrackInfo trackInfo = trackInfoMapper.selectById(id);
+ Long albumId = trackInfo.getAlbumId();
+ Integer orderNum = trackInfo.getOrderNum();
- //2.更新序号确保声音表中序号连续
- trackInfoMapper.update(
- null,
- new LambdaUpdateWrapper()
- .eq(TrackInfo::getAlbumId, albumId)
- .gt(TrackInfo::getOrderNum, orderNum)
- .setSql("order_num = order_num - 1")
- );
+ //2.更新序号确保声音表中序号连续
+ trackInfoMapper.update(
+ null,
+ new LambdaUpdateWrapper()
+ .eq(TrackInfo::getAlbumId, albumId)
+ .gt(TrackInfo::getOrderNum, orderNum)
+ .setSql("order_num = order_num - 1")
+ );
- //3.删除声音
- trackInfoMapper.deleteById(id);
+ //3.删除声音
+ trackInfoMapper.deleteById(id);
- //4.删除统计信息
- trackStatMapper.delete(
- new LambdaQueryWrapper()
- .eq(TrackStat::getTrackId, id)
- );
+ //4.删除统计信息
+ trackStatMapper.delete(
+ new LambdaQueryWrapper()
+ .eq(TrackStat::getTrackId, id)
+ );
- //5.更新专辑包含声音数量
- albumInfoMapper.update(null,
- new LambdaUpdateWrapper().eq(AlbumInfo::getId, albumId)
- .setSql("include_track_count = include_track_count - 1")
- );
+ //5.更新专辑包含声音数量
+ albumInfoMapper.update(null,
+ new LambdaUpdateWrapper().eq(AlbumInfo::getId, albumId)
+ .setSql("include_track_count = include_track_count - 1")
+ );
- //6.删除点播平台音频文件
- vodService.deleteMedia(trackInfo.getMediaFileId());
+ //6.删除点播平台音频文件
+ vodService.deleteMedia(trackInfo.getMediaFileId());
+
+ }
+
+ @Override
+ public Page findAlbumTrackPage(Page pageInfo, Long userId, Long albumId) {
+ //1.分页查询专辑下声音列表 默认:isShowPaidMark = false;
+ pageInfo = trackInfoMapper.findAlbumTrackPage(pageInfo, albumId);
+ //TODO 根据用户登录状态、身份、专辑付费类型、是否购买综合判断付费标识
+
+ //2.根据专辑ID查询专辑信息,得到专辑付费类型以及免费试听集数
+ AlbumInfo albumInfo = albumInfoMapper.selectById(albumId);
+
+ //付费类型: 0101-免费、0102-vip免费、0103-付费
+ String payType = albumInfo.getPayType();
+ Integer tracksForFree = albumInfo.getTracksForFree();
+
+ //3.处理未登录情况
+ if (userId == null) {
+ if (ALBUM_PAY_TYPE_VIPFREE.equals(payType) || ALBUM_PAY_TYPE_REQUIRE.equals(payType)) {
+ //将试听以外其他声音付费标识改为:true
+ pageInfo.getRecords()
+ .stream()
+ .filter(track -> track.getOrderNum() > tracksForFree)
+ .forEach(track -> track.setIsShowPaidMark(true));
+ }
+ } else {
+ //4.处理已登录情况
+ //4.1 远程调用用户服务获取用户身份,是否为VIP
+ Boolean isVIP = false;
+ UserInfoVo userInfoVo = userFeignClient.getUserInfoVo(userId).getData();
+ Assert.notNull(userInfoVo, "用户{}不存在", userId);
+ if (userInfoVo.getIsVip().intValue() == 1
+ && userInfoVo.getVipExpireTime().after(new Date())) {
+ isVIP = true;
+ }
+ //先设定一个默认值 是否需要检查付费状态
+ Boolean isNeedCheckPayState = false;
+ //4.2 如果普通用户查看付费类型是:VIP免费专辑,则需要进一步判断声音购买情况
+ if (!isVIP && ALBUM_PAY_TYPE_VIPFREE.equals(payType)) {
+ isNeedCheckPayState = true;
+ }
+
+ //4.3 如果付费类型是:付费。无论什么用户,都需要进一步判断声音购买情况
+ if (ALBUM_PAY_TYPE_REQUIRE.equals(payType)) {
+ isNeedCheckPayState = true;
+ }
+ //4.4 如果需要判断声音购买情况,远程调用用户服务
+ if (isNeedCheckPayState) {
+ //4.4.1 获取当前页中去掉试听部分声音ID列表
+ List needCheckPayStateTrackIdList = pageInfo.getRecords()
+ .stream()
+ .filter(track -> track.getOrderNum() > tracksForFree)
+ .map(AlbumTrackListVo::getTrackId)
+ .collect(Collectors.toList());
+ //4.4.2 远程调用用户服务获取每个声音的购买情况
+ Map payStatusMap = userFeignClient.userIsPaidTrack(albumId, needCheckPayStateTrackIdList).getData();
+
+ //4.5 根据响应声音购买情况,(去除掉试听部分声音ID)将未购买声音付费标识设置为:true
+ pageInfo.getRecords()
+ .stream()
+ .filter(track -> track.getOrderNum() > tracksForFree)
+ .forEach(track-> track.setIsShowPaidMark(payStatusMap.get(track.getTrackId()) == 0));
+ }
+ }
+ return pageInfo;
+ }
+
+
+ }
- }
-}
diff --git a/service/service-album/src/main/resources/mapper/AlbumInfoMapper.xml b/service/service-album/src/main/resources/mapper/AlbumInfoMapper.xml
index 37d1281..8ecbcc9 100644
--- a/service/service-album/src/main/resources/mapper/AlbumInfoMapper.xml
+++ b/service/service-album/src/main/resources/mapper/AlbumInfoMapper.xml
@@ -34,5 +34,15 @@
+
+ select
+ max(if(stat_type = '0401', stat_num, 0)) playStatNum,
+ max(if(stat_type = '0402', stat_num, 0)) subscribeStatNum,
+ max(if(stat_type = '0403', stat_num, 0)) buyStatNum,
+ max(if(stat_type = '0404', stat_num, 0)) commentStatNum
+ from album_stat where album_id = #{albumId} and is_deleted = 0
+
+
+
diff --git a/service/service-album/src/main/resources/mapper/TrackInfoMapper.xml b/service/service-album/src/main/resources/mapper/TrackInfoMapper.xml
index b573278..e026e08 100644
--- a/service/service-album/src/main/resources/mapper/TrackInfoMapper.xml
+++ b/service/service-album/src/main/resources/mapper/TrackInfoMapper.xml
@@ -32,5 +32,23 @@
order by ti.id desc
+
+ select
+ ti.id track_id,
+ ti.track_title,
+ ti.media_duration,
+ ti.create_time,
+ ti.order_num,
+ max(if(stat_type = '0701', stat_num, 0)) playStatNum,
+ max(if(stat_type = '0702', stat_num, 0)) collectStatNum,
+ max(if(stat_type = '0703', stat_num, 0)) praiseStatNum,
+ max(if(stat_type = '0704', stat_num, 0)) commentStatNum
+ from track_info ti inner join track_stat stat
+ on stat.track_id = ti.id and stat.is_deleted = 0
+ where album_id = #{albumId} and status = '0501' and ti.is_deleted = 0
+ group by ti.id
+ order by ti.order_num
+
+
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/api/AlbumInfoApiController.class b/service/service-album/target/classes/com/atguigu/tingshu/album/api/AlbumInfoApiController.class
index 4738c4b..49be6a0 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/api/AlbumInfoApiController.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/api/AlbumInfoApiController.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/api/BaseCategoryApiController.class b/service/service-album/target/classes/com/atguigu/tingshu/album/api/BaseCategoryApiController.class
index f35c343..22d597f 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/api/BaseCategoryApiController.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/api/BaseCategoryApiController.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/api/FileUploadApiController.class b/service/service-album/target/classes/com/atguigu/tingshu/album/api/FileUploadApiController.class
index d974a50..fe483b8 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/api/FileUploadApiController.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/api/FileUploadApiController.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/api/TrackInfoApiController.class b/service/service-album/target/classes/com/atguigu/tingshu/album/api/TrackInfoApiController.class
index be54a1a..07e1890 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/api/TrackInfoApiController.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/api/TrackInfoApiController.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/config/VodConstantProperties.class b/service/service-album/target/classes/com/atguigu/tingshu/album/config/VodConstantProperties.class
index d93fbd3..25147e7 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/config/VodConstantProperties.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/config/VodConstantProperties.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/mapper/AlbumInfoMapper.class b/service/service-album/target/classes/com/atguigu/tingshu/album/mapper/AlbumInfoMapper.class
index 8ae663e..8e98eb4 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/mapper/AlbumInfoMapper.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/mapper/AlbumInfoMapper.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/mapper/TrackInfoMapper.class b/service/service-album/target/classes/com/atguigu/tingshu/album/mapper/TrackInfoMapper.class
index 75cc3b1..6b2c1bc 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/mapper/TrackInfoMapper.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/mapper/TrackInfoMapper.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/service/AlbumInfoService.class b/service/service-album/target/classes/com/atguigu/tingshu/album/service/AlbumInfoService.class
index 48a1130..52c8b37 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/service/AlbumInfoService.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/service/AlbumInfoService.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/service/BaseCategoryService.class b/service/service-album/target/classes/com/atguigu/tingshu/album/service/BaseCategoryService.class
index 81051c8..f549e99 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/service/BaseCategoryService.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/service/BaseCategoryService.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/service/TrackInfoService.class b/service/service-album/target/classes/com/atguigu/tingshu/album/service/TrackInfoService.class
index f718d65..ab27e21 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/service/TrackInfoService.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/service/TrackInfoService.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.class b/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.class
index 06ebd04..8d5b3c7 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/BaseCategoryServiceImpl.class b/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/BaseCategoryServiceImpl.class
index 3bb7512..f7d87d5 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/BaseCategoryServiceImpl.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/BaseCategoryServiceImpl.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/FileUploadServiceImpl.class b/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/FileUploadServiceImpl.class
index 48cdc27..ee4cc81 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/FileUploadServiceImpl.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/FileUploadServiceImpl.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/TrackInfoServiceImpl.class b/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/TrackInfoServiceImpl.class
index cfd9d72..4b6e5c8 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/TrackInfoServiceImpl.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/TrackInfoServiceImpl.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/VodServiceImpl.class b/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/VodServiceImpl.class
index 1e4bdaa..fc61bd2 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/VodServiceImpl.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/VodServiceImpl.class differ
diff --git a/service/service-album/target/classes/mapper/AlbumInfoMapper.xml b/service/service-album/target/classes/mapper/AlbumInfoMapper.xml
index 37d1281..8ecbcc9 100644
--- a/service/service-album/target/classes/mapper/AlbumInfoMapper.xml
+++ b/service/service-album/target/classes/mapper/AlbumInfoMapper.xml
@@ -34,5 +34,15 @@
+
+ select
+ max(if(stat_type = '0401', stat_num, 0)) playStatNum,
+ max(if(stat_type = '0402', stat_num, 0)) subscribeStatNum,
+ max(if(stat_type = '0403', stat_num, 0)) buyStatNum,
+ max(if(stat_type = '0404', stat_num, 0)) commentStatNum
+ from album_stat where album_id = #{albumId} and is_deleted = 0
+
+
+
diff --git a/service/service-album/target/classes/mapper/TrackInfoMapper.xml b/service/service-album/target/classes/mapper/TrackInfoMapper.xml
index b573278..e026e08 100644
--- a/service/service-album/target/classes/mapper/TrackInfoMapper.xml
+++ b/service/service-album/target/classes/mapper/TrackInfoMapper.xml
@@ -32,5 +32,23 @@
order by ti.id desc
+
+ select
+ ti.id track_id,
+ ti.track_title,
+ ti.media_duration,
+ ti.create_time,
+ ti.order_num,
+ max(if(stat_type = '0701', stat_num, 0)) playStatNum,
+ max(if(stat_type = '0702', stat_num, 0)) collectStatNum,
+ max(if(stat_type = '0703', stat_num, 0)) praiseStatNum,
+ max(if(stat_type = '0704', stat_num, 0)) commentStatNum
+ from track_info ti inner join track_stat stat
+ on stat.track_id = ti.id and stat.is_deleted = 0
+ where album_id = #{albumId} and status = '0501' and ti.is_deleted = 0
+ group by ti.id
+ order by ti.order_num
+
+
diff --git a/service/service-search/src/main/java/com/atguigu/tingshu/search/api/SearchApiController.java b/service/service-search/src/main/java/com/atguigu/tingshu/search/api/SearchApiController.java
index f8652b3..3b67ae2 100644
--- a/service/service-search/src/main/java/com/atguigu/tingshu/search/api/SearchApiController.java
+++ b/service/service-search/src/main/java/com/atguigu/tingshu/search/api/SearchApiController.java
@@ -9,6 +9,9 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+import java.util.List;
+import java.util.Map;
+
@Tag(name = "搜索专辑管理")
@RestController
@RequestMapping("api/search")
@@ -54,6 +57,17 @@ public class SearchApiController {
return Result.ok(albumSearchResponseVo);
}
+ /**
+ * 查询1级分类下置顶3级分类热度TOP6专辑
+ * @param category1Id
+ * @return [{"baseCategory3":{三级分类对象},list:[专辑列表]},,{其他6个置顶分类热门专辑Map}]
+ */
+ @Operation(summary = "查询1级分类下置顶3级分类热度TOP6专辑")
+ @GetMapping("/albumInfo/channel/{category1Id}")
+ public Result>> channel(@PathVariable Long category1Id) {
+ List> list = searchService.channel(category1Id);
+ return Result.ok(list);
+ }
}
diff --git a/service/service-search/src/main/java/com/atguigu/tingshu/search/api/itemApiController.java b/service/service-search/src/main/java/com/atguigu/tingshu/search/api/itemApiController.java
index c90aae9..465a9cb 100644
--- a/service/service-search/src/main/java/com/atguigu/tingshu/search/api/itemApiController.java
+++ b/service/service-search/src/main/java/com/atguigu/tingshu/search/api/itemApiController.java
@@ -1,11 +1,17 @@
package com.atguigu.tingshu.search.api;
+import com.atguigu.tingshu.common.result.Result;
import com.atguigu.tingshu.search.service.ItemService;
+import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import java.util.Map;
+
@Tag(name = "专辑详情管理")
@RestController
@RequestMapping("api/search")
@@ -15,5 +21,19 @@ public class itemApiController {
@Autowired
private ItemService itemService;
+ /**
+ * 获取专辑详情页渲染所需参数
+ *
+ * @param albumId
+ * @return
+ */
+
+ @Operation(summary = "获取专辑详情页渲染所需参数")
+ @GetMapping("/albumInfo/{albumId}")
+ public Result> getItem(@PathVariable Long albumId) {
+ Map map = itemService.getItem(albumId);
+ return Result.ok(map);
+ }
+
}
diff --git a/service/service-search/src/main/java/com/atguigu/tingshu/search/service/ItemService.java b/service/service-search/src/main/java/com/atguigu/tingshu/search/service/ItemService.java
index 2b15983..4d3e4bf 100644
--- a/service/service-search/src/main/java/com/atguigu/tingshu/search/service/ItemService.java
+++ b/service/service-search/src/main/java/com/atguigu/tingshu/search/service/ItemService.java
@@ -1,7 +1,9 @@
package com.atguigu.tingshu.search.service;
+import java.util.Map;
+
public interface ItemService {
-
+ Map getItem(Long albumId);
}
diff --git a/service/service-search/src/main/java/com/atguigu/tingshu/search/service/SearchService.java b/service/service-search/src/main/java/com/atguigu/tingshu/search/service/SearchService.java
index 2548b5b..25ee879 100644
--- a/service/service-search/src/main/java/com/atguigu/tingshu/search/service/SearchService.java
+++ b/service/service-search/src/main/java/com/atguigu/tingshu/search/service/SearchService.java
@@ -3,6 +3,9 @@ package com.atguigu.tingshu.search.service;
import com.atguigu.tingshu.query.search.AlbumIndexQuery;
import com.atguigu.tingshu.vo.search.AlbumSearchResponseVo;
+import java.util.List;
+import java.util.Map;
+
public interface SearchService {
@@ -11,4 +14,9 @@ public interface SearchService {
void lowerAlbum(Long albumId);
AlbumSearchResponseVo search(AlbumIndexQuery albumIndexQuery);
+
+ List> channel(Long category1Id);
+
+
+
}
diff --git a/service/service-search/src/main/java/com/atguigu/tingshu/search/service/impl/ItemServiceImpl.java b/service/service-search/src/main/java/com/atguigu/tingshu/search/service/impl/ItemServiceImpl.java
index a12f933..6a1e5ec 100644
--- a/service/service-search/src/main/java/com/atguigu/tingshu/search/service/impl/ItemServiceImpl.java
+++ b/service/service-search/src/main/java/com/atguigu/tingshu/search/service/impl/ItemServiceImpl.java
@@ -1,13 +1,79 @@
package com.atguigu.tingshu.search.service.impl;
+import cn.hutool.core.lang.Assert;
+import com.atguigu.tingshu.album.AlbumFeignClient;
+import com.atguigu.tingshu.model.album.AlbumInfo;
+import com.atguigu.tingshu.model.album.BaseCategoryView;
import com.atguigu.tingshu.search.service.ItemService;
+import com.atguigu.tingshu.user.client.UserFeignClient;
+import com.atguigu.tingshu.vo.album.AlbumStatVo;
+import com.atguigu.tingshu.vo.user.UserInfoVo;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
+
@Slf4j
@Service
@SuppressWarnings({"all"})
public class ItemServiceImpl implements ItemService {
+ @Autowired
+ private UserFeignClient userFeignClient;
+ @Autowired
+ private AlbumFeignClient albumFeignClient;
+ @Autowired
+ private Executor threadPoolTaskExecutor;
+ @Override
+ public Map getItem(Long albumId) {
+ //1.创建封装详情页map对象,由于多线程 hashmap线程不安全,所以我们使用concurrentHashMap
+ Map map = new ConcurrentHashMap<>();
+
+ //2.异步远程调用专辑服务查询专辑信息,封装专辑信息
+ CompletableFuture albumInfoCompletableFuture = CompletableFuture.supplyAsync(() -> {
+ AlbumInfo albumInfo = albumFeignClient.getAlbumInfo(albumId).getData();
+ Assert.notNull(albumInfo, "专辑{}不存在", albumId);
+ map.put("albumInfo", albumInfo);
+ return albumInfo;
+ }, threadPoolTaskExecutor);
+
+ //3.远程调用专辑服务查询分类信息,封装分类对象
+ CompletableFuture categoryViewCompletableFuture = albumInfoCompletableFuture.thenAcceptAsync(albumInfo -> {
+ BaseCategoryView baseCategoryView = albumFeignClient.getCategoryView(albumInfo.getCategory3Id()).getData();
+ Assert.notNull(baseCategoryView, "分类{}不存在", albumInfo.getCategory3Id());
+ map.put("baseCategoryView", baseCategoryView);
+
+ }, threadPoolTaskExecutor);
+
+ //4.远程调用专辑服务查询统计数值,封装统计对象
+ CompletableFuture albumStatCompletableFuture = CompletableFuture.runAsync(() -> {
+ AlbumStatVo albumStatVo = albumFeignClient.getAlbumStatVo(albumId).getData();
+ Assert.notNull(albumStatVo, "专辑统计{}不存在", albumId);
+ map.put("albumStatVo", albumStatVo);
+ }, threadPoolTaskExecutor);
+ //5.远程调用用户服务查询主播信息,封装主播对象
+ CompletableFuture announcerCompletableFuture = albumInfoCompletableFuture.thenAcceptAsync(albumInfo -> {
+ UserInfoVo userInfoVo = userFeignClient.getUserInfoVo(albumInfo.getUserId()).getData();
+ Assert.notNull(userInfoVo, "用户{}不存在", albumInfo.getUserId());
+ map.put("announcer", userInfoVo);
+ }, threadPoolTaskExecutor);
+ //6.采用异步编排对四项任务组合,所有异步任务都必须执行完成
+ CompletableFuture.allOf(
+ albumInfoCompletableFuture,
+ categoryViewCompletableFuture,
+ albumStatCompletableFuture,
+ announcerCompletableFuture
+ ).orTimeout(1, TimeUnit.SECONDS)
+ .join();
+ //7.响应map
+ return map;
+
+
+ }
}
diff --git a/service/service-search/src/main/java/com/atguigu/tingshu/search/service/impl/SearchServiceImpl.java b/service/service-search/src/main/java/com/atguigu/tingshu/search/service/impl/SearchServiceImpl.java
index 59de3dc..960f129 100644
--- a/service/service-search/src/main/java/com/atguigu/tingshu/search/service/impl/SearchServiceImpl.java
+++ b/service/service-search/src/main/java/com/atguigu/tingshu/search/service/impl/SearchServiceImpl.java
@@ -2,17 +2,24 @@ package com.atguigu.tingshu.search.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.RandomUtil;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
+import co.elastic.clients.elasticsearch._types.FieldValue;
import co.elastic.clients.elasticsearch._types.SortOrder;
+import co.elastic.clients.elasticsearch._types.aggregations.Aggregate;
+import co.elastic.clients.elasticsearch._types.aggregations.LongTermsBucket;
import co.elastic.clients.elasticsearch._types.query_dsl.BoolQuery;
import co.elastic.clients.elasticsearch.core.SearchRequest;
import co.elastic.clients.elasticsearch.core.SearchResponse;
import co.elastic.clients.elasticsearch.core.search.Hit;
+import com.alibaba.fastjson.JSON;
import com.atguigu.tingshu.album.AlbumFeignClient;
+import com.atguigu.tingshu.common.result.Result;
import com.atguigu.tingshu.model.album.AlbumAttributeValue;
import com.atguigu.tingshu.model.album.AlbumInfo;
+import com.atguigu.tingshu.model.album.BaseCategory3;
import com.atguigu.tingshu.model.album.BaseCategoryView;
import com.atguigu.tingshu.model.search.AlbumInfoIndex;
import com.atguigu.tingshu.model.search.AttributeValueIndex;
@@ -28,9 +35,11 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
import java.io.IOException;
import java.math.BigDecimal;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
@@ -162,7 +171,6 @@ public class SearchServiceImpl implements SearchService {
}
-
private static final String INDEX_NAME = "albuminfo";
@@ -204,8 +212,8 @@ public class SearchServiceImpl implements SearchService {
if (split != null && split.length == 2) {
allConditionBoolQueryBuilder.filter(f -> f.nested(
n -> n.path("attributeValueIndexList")
- .query(q-> q.bool(b->b.must(m->m.term(t->t.field("attributeValueIndexList.attributeId").value(split[0])))
- .must(m->m.term(t->t.field("attributeValueIndexList.valueId").value(split[1])))))));
+ .query(q -> q.bool(b -> b.must(m -> m.term(t -> t.field("attributeValueIndexList.attributeId").value(split[0])))
+ .must(m -> m.term(t -> t.field("attributeValueIndexList.valueId").value(split[1])))))));
}
}
}
@@ -262,6 +270,7 @@ public class SearchServiceImpl implements SearchService {
//4.基于检索对象构建器对象返回实际检索请求对象
return builder.build();
}
+
private AlbumSearchResponseVo parseResult(SearchResponse searchResponse, AlbumIndexQuery albumIndexQuery) {
//1.创建响应VO对象
AlbumSearchResponseVo vo = new AlbumSearchResponseVo();
@@ -280,7 +289,7 @@ public class SearchServiceImpl implements SearchService {
//3.封装VO中检索到专辑列表集合属性
List> hits = searchResponse.hits().hits();
- if(CollUtil.isNotEmpty(hits)){
+ if (CollUtil.isNotEmpty(hits)) {
//采用Stream流将检索到文档类型从AlbumInfoIndex转为AlbumInfoIndexVo
List list = hits.stream().map(hit -> {
AlbumInfoIndex albumInfoIndex = hit.source();
@@ -297,4 +306,72 @@ public class SearchServiceImpl implements SearchService {
//4.响应VO对象
return vo;
}
-}
+
+ @Override
+ public List> channel(Long category1Id) {
+ try {
+ //1.远程调用专辑服务,获取1级分类下7个置顶分类列表
+ //1.1 发起远程调用
+ List baseCategory3List = albumFeignClient.findTopBaseCategory3(category1Id).getData();
+ Assert.notNull(baseCategory3List, "没有查询到分类列表");
+ //1.2 为了后续封装置顶分类热门专辑Map对象中 分类信息 ,将分类集合转为Map对象 key:分类ID value:分类对象
+ Map category3Map = baseCategory3List
+ .stream()
+ .collect(Collectors.toMap(BaseCategory3::getId, c3 -> c3));
+
+ //1.3 基于3级分类集合转为FieldValue封装每个三级分类ID
+ List fieldValueList =
+ baseCategory3List.stream().map(c3 -> FieldValue.of(c3.getId())).collect(Collectors.toList());
+
+ //2.检索ES获取每个置顶分类及包含热度前六专辑列表
+ SearchResponse searchResponse = elasticsearchClient.search(
+ s -> s.index(INDEX_NAME)
+ .query(q -> q.terms(t -> t.field("category3Id").terms(t1 -> t1.value(fieldValueList))))
+ .aggregations(
+ "c3_agg", a -> a.terms(t -> t.field("category3Id").size(7))
+ .aggregations(
+ "top6", a1 -> a1.topHits(t -> t.size(6).sort(s1 -> s1.field(f -> f.field("hotScore").order(SortOrder.Desc))).source(s1 -> s1.filter(f -> f.excludes("attributeValueIndexList",
+ "hotScore",
+ "commentStatNum",
+ "buyStatNum",
+ "subscribeStatNum",
+ "announcerName"))))
+ )
+ )
+ .size(0),
+ AlbumInfoIndex.class);
+
+ //3.解析ES检索结果,封装数据并返回
+ Map aggregations = searchResponse.aggregations();
+ if (CollUtil.isNotEmpty(aggregations)) {
+ //3.1 将聚合结果转为LongTermsAggregate获取聚合buckets桶数组
+ List buckets = aggregations.get("c3_agg").lterms().buckets().array();
+ //3.2 遍历buckets桶数组,每遍历一次产出置顶分类热门专辑Map对象
+ List> mapList = buckets.stream().map(bucket -> {
+ //3.2.1 创建置顶分类热门专辑Map对象
+ Map map = new HashMap<>();
+ //3.2.2 封装三级分类对象
+ long category3Id = bucket.key();
+ map.put("baseCategory3", category3Map.get(category3Id));
+ //3.2.3 封装对应热度最高top6专辑列表 将子聚合类型转为TopHitsAggregate
+ List top6List = bucket.aggregations()
+ .get("top6")
+ .topHits()
+ .hits()
+ .hits()
+ .stream()
+ .map(hit -> {
+ //采用FastJson将专辑JSON转为索引库文档对象
+ return JSON.parseObject(hit.source().toString(), AlbumInfoIndex.class);
+ }).collect(Collectors.toList());
+ map.put("list", top6List);
+ return map;
+ }).collect(Collectors.toList());
+ return mapList;
+ }
+ return null;
+ } catch (IOException e) {
+ log.error("ES检索异常:{}", e.getMessage());
+ throw new RuntimeException(e);
+ }
+}}
diff --git a/service/service-search/target/classes/com/atguigu/tingshu/search/api/SearchApiController.class b/service/service-search/target/classes/com/atguigu/tingshu/search/api/SearchApiController.class
index 3f95953..9831179 100644
Binary files a/service/service-search/target/classes/com/atguigu/tingshu/search/api/SearchApiController.class and b/service/service-search/target/classes/com/atguigu/tingshu/search/api/SearchApiController.class differ
diff --git a/service/service-search/target/classes/com/atguigu/tingshu/search/api/itemApiController.class b/service/service-search/target/classes/com/atguigu/tingshu/search/api/itemApiController.class
index a35259a..abda2e2 100644
Binary files a/service/service-search/target/classes/com/atguigu/tingshu/search/api/itemApiController.class and b/service/service-search/target/classes/com/atguigu/tingshu/search/api/itemApiController.class differ
diff --git a/service/service-search/target/classes/com/atguigu/tingshu/search/service/ItemService.class b/service/service-search/target/classes/com/atguigu/tingshu/search/service/ItemService.class
index d4e0dcf..f851cdf 100644
Binary files a/service/service-search/target/classes/com/atguigu/tingshu/search/service/ItemService.class and b/service/service-search/target/classes/com/atguigu/tingshu/search/service/ItemService.class differ
diff --git a/service/service-search/target/classes/com/atguigu/tingshu/search/service/SearchService.class b/service/service-search/target/classes/com/atguigu/tingshu/search/service/SearchService.class
index 19e6645..d3d5a68 100644
Binary files a/service/service-search/target/classes/com/atguigu/tingshu/search/service/SearchService.class and b/service/service-search/target/classes/com/atguigu/tingshu/search/service/SearchService.class differ
diff --git a/service/service-search/target/classes/com/atguigu/tingshu/search/service/impl/ItemServiceImpl.class b/service/service-search/target/classes/com/atguigu/tingshu/search/service/impl/ItemServiceImpl.class
index c5341b2..4713d1c 100644
Binary files a/service/service-search/target/classes/com/atguigu/tingshu/search/service/impl/ItemServiceImpl.class and b/service/service-search/target/classes/com/atguigu/tingshu/search/service/impl/ItemServiceImpl.class differ
diff --git a/service/service-search/target/classes/com/atguigu/tingshu/search/service/impl/SearchServiceImpl.class b/service/service-search/target/classes/com/atguigu/tingshu/search/service/impl/SearchServiceImpl.class
index 353ee7b..8c02d8b 100644
Binary files a/service/service-search/target/classes/com/atguigu/tingshu/search/service/impl/SearchServiceImpl.class and b/service/service-search/target/classes/com/atguigu/tingshu/search/service/impl/SearchServiceImpl.class differ
diff --git a/service/service-search/target/test-classes/com/atguigu/tingshu/search/test01.class b/service/service-search/target/test-classes/com/atguigu/tingshu/search/test01.class
index 5b1d922..703bf48 100644
Binary files a/service/service-search/target/test-classes/com/atguigu/tingshu/search/test01.class and b/service/service-search/target/test-classes/com/atguigu/tingshu/search/test01.class differ
diff --git a/service/service-user/src/main/java/com/atguigu/tingshu/user/api/UserInfoApiController.java b/service/service-user/src/main/java/com/atguigu/tingshu/user/api/UserInfoApiController.java
index 7302d78..55f18b4 100644
--- a/service/service-user/src/main/java/com/atguigu/tingshu/user/api/UserInfoApiController.java
+++ b/service/service-user/src/main/java/com/atguigu/tingshu/user/api/UserInfoApiController.java
@@ -1,15 +1,17 @@
package com.atguigu.tingshu.user.api;
+import com.atguigu.tingshu.common.login.GuiGuLogin;
import com.atguigu.tingshu.common.result.Result;
+import com.atguigu.tingshu.common.util.AuthContextHolder;
import com.atguigu.tingshu.user.service.UserInfoService;
import com.atguigu.tingshu.vo.user.UserInfoVo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
@Tag(name = "用户管理接口")
@RestController
@@ -29,7 +31,26 @@ public class UserInfoApiController {
public Result getUserInfoVo(@PathVariable Long userId){
UserInfoVo userInfoVo = userInfoService.getUserInfo(userId);
return Result.ok(userInfoVo);
-
-}
+}
+
+ /**
+ * 获取每一页声音列表(提交声音ID集合)对应购买状态
+ *
+ * @param userId 用户ID
+ * @param albumId 专辑ID
+ * @param needCheckPayStateTrackIdList 需要检查购买状态的声音ID集合
+ * @return {声音ID:1(已购),声音ID:0(未购)}
+ */
+ @GuiGuLogin //对内微服务访问接口,上游系统调用是否只要携带token 下游系统就可以获取用户ID
+ @Operation(summary = "获取每一页声音列表(提交声音ID集合)对应购买状态")
+ @PostMapping("/userInfo/userIsPaidTrack/{albumId}")
+ public Result> userIsPaidTrack(
+ @PathVariable("albumId") Long albumId,
+ @RequestBody List needCheckPayStateTrackIdList
+ ) {
+ Long userId = AuthContextHolder.getUserId();
+ Map map = userInfoService.userIsPaidTrack(userId, albumId, needCheckPayStateTrackIdList);
+ return Result.ok(map);
+ }
}
diff --git a/service/service-user/src/main/java/com/atguigu/tingshu/user/service/UserInfoService.java b/service/service-user/src/main/java/com/atguigu/tingshu/user/service/UserInfoService.java
index 93fdb4b..e8881e8 100644
--- a/service/service-user/src/main/java/com/atguigu/tingshu/user/service/UserInfoService.java
+++ b/service/service-user/src/main/java/com/atguigu/tingshu/user/service/UserInfoService.java
@@ -4,6 +4,7 @@ import com.atguigu.tingshu.model.user.UserInfo;
import com.atguigu.tingshu.vo.user.UserInfoVo;
import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
import java.util.Map;
public interface UserInfoService extends IService {
@@ -13,4 +14,7 @@ public interface UserInfoService extends IService {
UserInfoVo getUserInfo(Long userId);
void updateUser(UserInfoVo userInfoVo, Long userId);
+
+ Map userIsPaidTrack(Long userId, Long albumId, List needCheckPayStateTrackIdList);
+
}
diff --git a/service/service-user/src/main/java/com/atguigu/tingshu/user/service/impl/UserInfoServiceImpl.java b/service/service-user/src/main/java/com/atguigu/tingshu/user/service/impl/UserInfoServiceImpl.java
index 4358772..203c074 100644
--- a/service/service-user/src/main/java/com/atguigu/tingshu/user/service/impl/UserInfoServiceImpl.java
+++ b/service/service-user/src/main/java/com/atguigu/tingshu/user/service/impl/UserInfoServiceImpl.java
@@ -3,13 +3,18 @@ package com.atguigu.tingshu.user.service.impl;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.atguigu.tingshu.common.constant.RedisConstant;
import com.atguigu.tingshu.common.rabbit.constant.MqConst;
import com.atguigu.tingshu.common.rabbit.service.RabbitService;
import com.atguigu.tingshu.model.user.UserInfo;
+import com.atguigu.tingshu.model.user.UserPaidAlbum;
+import com.atguigu.tingshu.model.user.UserPaidTrack;
import com.atguigu.tingshu.user.mapper.UserInfoMapper;
+import com.atguigu.tingshu.user.mapper.UserPaidAlbumMapper;
+import com.atguigu.tingshu.user.mapper.UserPaidTrackMapper;
import com.atguigu.tingshu.user.service.UserInfoService;
import com.atguigu.tingshu.vo.user.UserInfoVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -22,8 +27,10 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
@Slf4j
@Service
@@ -38,8 +45,12 @@ public class UserInfoServiceImpl extends ServiceImpl i
private RedisTemplate redisTemplate;
@Autowired
private RabbitService rabbitService;
+ @Autowired
+ private UserPaidAlbumMapper userPaidAlbumMapper;
+ @Autowired
+ private UserPaidTrackMapper userPaidTrackMapper;
- @Override
+ @Override
public Map wxLogin(String code) {
try {
//1.根据小程序提交的临时票据code调用微信接口服务,获取当前微信用户唯一标识openid
@@ -101,4 +112,56 @@ public class UserInfoServiceImpl extends ServiceImpl i
userInfoMapper.updateById(userInfo);
}
-}
+
+ @Override
+ public Map userIsPaidTrack(Long userId, Long albumId, List needCheckPayStateTrackIdList) {
+ Map payStatusMap = new HashMap<>();
+ //1.根据用户ID+专辑ID查询已购专辑记录,如果存在专辑购买记录,将提交声音ID购买状态全部设置为1,返回
+ Long count = userPaidAlbumMapper.selectCount(
+ new LambdaQueryWrapper()
+ .eq(UserPaidAlbum::getUserId, userId)
+ .eq(UserPaidAlbum::getAlbumId, albumId)
+ );
+ if (count > 0) {
+ for (Long trackId : needCheckPayStateTrackIdList) {
+ payStatusMap.put(trackId, 1);
+ }
+ return payStatusMap;
+ }
+
+ //2.如果未购买专辑,根据用户ID+专辑ID查询已购声音记录
+ List userPaidTrackList = userPaidTrackMapper.selectList(
+ new LambdaQueryWrapper()
+ .eq(UserPaidTrack::getUserId, userId)
+ .eq(UserPaidTrack::getAlbumId, albumId)
+ .select(UserPaidTrack::getTrackId)
+ );
+
+ //2.1 如果不存在购买声音记录,将提交声音ID购买状态全部设置为0,返回
+ if (CollUtil.isEmpty(userPaidTrackList)) {
+ for (Long trackID : needCheckPayStateTrackIdList) {
+ payStatusMap.put(trackID, 0);
+ }
+ return payStatusMap;
+ }
+
+ //2.2 如果存在购买声音记录,将提交声音ID已购设置1,未购买设置为0返回
+ //2.2.1 获取已购声音ID集合
+ List userPaidTrackIdList =
+ userPaidTrackList.stream().map(UserPaidTrack::getTrackId).collect(Collectors.toList());
+ //2.2.2 判断哪些是已购设置为1,哪些是未购买设置为0
+ for (Long trackId : needCheckPayStateTrackIdList) {
+ if(userPaidTrackIdList.contains(trackId)){
+ //已购买
+ payStatusMap.put(trackId, 1);
+ }else{
+ //未购买
+ payStatusMap.put(trackId, 0);
+ }
+ }
+ return payStatusMap;
+ }
+
+
+ }
+
diff --git a/service/service-user/target/classes/com/atguigu/tingshu/user/api/UserInfoApiController.class b/service/service-user/target/classes/com/atguigu/tingshu/user/api/UserInfoApiController.class
index 9fd7f23..88dd539 100644
Binary files a/service/service-user/target/classes/com/atguigu/tingshu/user/api/UserInfoApiController.class and b/service/service-user/target/classes/com/atguigu/tingshu/user/api/UserInfoApiController.class differ
diff --git a/service/service-user/target/classes/com/atguigu/tingshu/user/service/UserInfoService.class b/service/service-user/target/classes/com/atguigu/tingshu/user/service/UserInfoService.class
index cfe09f4..b64a6aa 100644
Binary files a/service/service-user/target/classes/com/atguigu/tingshu/user/service/UserInfoService.class and b/service/service-user/target/classes/com/atguigu/tingshu/user/service/UserInfoService.class differ
diff --git a/service/service-user/target/classes/com/atguigu/tingshu/user/service/impl/UserInfoServiceImpl.class b/service/service-user/target/classes/com/atguigu/tingshu/user/service/impl/UserInfoServiceImpl.class
index 81b96c3..cfa39b8 100644
Binary files a/service/service-user/target/classes/com/atguigu/tingshu/user/service/impl/UserInfoServiceImpl.class and b/service/service-user/target/classes/com/atguigu/tingshu/user/service/impl/UserInfoServiceImpl.class differ