From 0924a97aac7466cc0dc580fe62eb813495aeaa12 Mon Sep 17 00:00:00 2001 From: Y1NanPing <735289578@qq.com> Date: Mon, 28 Jul 2025 15:14:51 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC10=E5=A4=A9=20redis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tingshu/album/AlbumFeignClient.java | 13 + .../album/impl/AlbumDegradeFeignClient.java | 16 + .../tingshu/album/AlbumFeignClient.class | Bin 1071 -> 1577 bytes .../album/impl/AlbumDegradeFeignClient.class | Bin 1490 -> 2151 bytes .../tingshu/user/client/UserFeignClient.java | 11 + .../client/impl/UserDegradeFeignClient.java | 10 + .../tingshu/user/client/UserFeignClient.class | Bin 835 -> 1349 bytes .../client/impl/UserDegradeFeignClient.class | Bin 1182 -> 1762 bytes .../album/api/AlbumInfoApiController.java | 12 +- .../album/api/BaseCategoryApiController.java | 19 + .../album/api/FileUploadApiController.java | 2 +- .../album/api/TrackInfoApiController.java | 27 ++ .../tingshu/album/mapper/AlbumInfoMapper.java | 3 + .../tingshu/album/mapper/TrackInfoMapper.java | 3 + .../album/service/AlbumInfoService.java | 3 + .../album/service/BaseCategoryService.java | 5 + .../album/service/TrackInfoService.java | 4 + .../service/impl/AlbumInfoServiceImpl.java | 8 +- .../service/impl/BaseCategoryServiceImpl.java | 81 +++- .../service/impl/TrackInfoServiceImpl.java | 403 +++++++++++------- .../main/resources/mapper/AlbumInfoMapper.xml | 10 + .../main/resources/mapper/TrackInfoMapper.xml | 18 + .../album/api/AlbumInfoApiController.class | Bin 5235 -> 5717 bytes .../album/api/BaseCategoryApiController.class | Bin 2936 -> 3953 bytes .../album/api/FileUploadApiController.class | Bin 1839 -> 1839 bytes .../album/api/TrackInfoApiController.class | Bin 5718 -> 6744 bytes .../album/config/VodConstantProperties.class | Bin 5250 -> 5250 bytes .../album/mapper/AlbumInfoMapper.class | Bin 1001 -> 1110 bytes .../album/mapper/TrackInfoMapper.class | Bin 1057 -> 1499 bytes .../album/service/AlbumInfoService.class | Bin 1502 -> 1601 bytes .../album/service/BaseCategoryService.class | Bin 791 -> 1035 bytes .../album/service/TrackInfoService.class | Bin 1287 -> 1765 bytes .../service/impl/AlbumInfoServiceImpl.class | Bin 13385 -> 13563 bytes .../impl/BaseCategoryServiceImpl.class | Bin 5998 -> 11009 bytes .../service/impl/FileUploadServiceImpl.class | Bin 4270 -> 4630 bytes .../service/impl/TrackInfoServiceImpl.class | Bin 10625 -> 15666 bytes .../album/service/impl/VodServiceImpl.class | Bin 5801 -> 5801 bytes .../target/classes/mapper/AlbumInfoMapper.xml | 10 + .../target/classes/mapper/TrackInfoMapper.xml | 18 + .../search/api/SearchApiController.java | 14 + .../tingshu/search/api/itemApiController.java | 20 + .../tingshu/search/service/ItemService.java | 4 +- .../tingshu/search/service/SearchService.java | 8 + .../search/service/impl/ItemServiceImpl.java | 66 +++ .../service/impl/SearchServiceImpl.java | 87 +++- .../search/api/SearchApiController.class | Bin 2666 -> 3262 bytes .../search/api/itemApiController.class | Bin 753 -> 1786 bytes .../tingshu/search/service/ItemService.class | Bin 138 -> 326 bytes .../search/service/SearchService.class | Bin 411 -> 603 bytes .../search/service/impl/ItemServiceImpl.class | Bin 681 -> 5835 bytes .../service/impl/SearchServiceImpl.class | Bin 26065 -> 35889 bytes .../com/atguigu/tingshu/search/test01.class | Bin 1046 -> 1046 bytes .../user/api/UserInfoApiController.java | 33 +- .../tingshu/user/service/UserInfoService.java | 4 + .../service/impl/UserInfoServiceImpl.java | 67 ++- .../user/api/UserInfoApiController.class | Bin 1769 -> 2902 bytes .../user/service/UserInfoService.class | Bin 731 -> 1016 bytes .../service/impl/UserInfoServiceImpl.class | Bin 7886 -> 11784 bytes 58 files changed, 797 insertions(+), 182 deletions(-) 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 aa3aa53050ed339d9ca0fe7f6c71ae8fa08216b6..5022b354ebee43a5bac3de4566d9c26307d727f0 100644 GIT binary patch delta 407 zcmZ3_v66@D)W2Q(7#J9A8B{lN?PgLFNz2Sj3CS;TN-R!wPAo}H&o8PpW@O+_hO!Mk zQy3ZQCu=g<@@6HLCF+-!WajAmWEM~SuN;q}$J!1E85wl+VLJ7(nXF$8lLi`G%gDf& zo?7CVlT?};T#{H4me0t*o(STBEX@E~8faCPuMZZ{M^Xj0NEssTnU|KYk7|g1HCV^w z156hgStd_nuBc~WWDsRwV_;!m2l||qkwFYdaRMkmh4xWZ(f}-e?BKVg?BY zexMjTBTztqfdQyj5?QYlT(2}1y)r0zffmRDmCG?P$br?00*#bsU}oSgW>8>IOlDAG JP%dUr0RWkvTd4p5 delta 67 zcmZ3XFfxcU VFf;HLGe|H<3j9R2UK)wIw8)SxGEd*?MfS z@CQgl*jp+V{snPn+Axce$-U>E?|$d}a_77_-gE5_-*@)_f(TyPBg|q$F+(VE>T6zz zuFg-#)`sPc@QAF0BeC`EKyvT=mvx5>|$mXE#@LW{klqYnfKQNad4-TQNyjB!f%+;t$+aU?_zH0zKJ6=S+PU z)uRkoT}@g8@=!}>f$l*LAL=MF)T04BMD;Pl8`r#caJ0K9x^=%x&xN#Kt8YXT)irBf z7$rapEe?JXrBpM@M@i8d30JV@7u_O<1G~_De-IBryaq_zNNF`vTB$NcX(LLzImK;G zsV0hOpco+mBP0<2rF0Ob)0|RbPN^qK!#|WRBc}Acnmit9AGwFgRp>*-~n862~VN1 zW*~%(i+=U$b-n7Y@1u1o{Q6yf0wbQL;hQOk)TkF|IGVK5mVNQsh9n(&C$kUhY`XHt zuMvg@C7kv=^*(`WM{FQ8LO+>frfMv)YIY4}x~gs?;EbM_;hYN&=%kY%dX6;-wF4F5 zajviC+->#Q{v}u1yOzo~B5+j6&D007x)y@A5 chn3=j(;0; @@ -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 027f8f2896daf7ade35908861a2b66a2fcccafc4..8c6514918cbdc183f458b17c2b43cc5ca5688ee8 100644 GIT binary patch delta 426 zcmX@ic9e_j)W2Q(7#J9A85B2iaWWb6mlmfMc@_sGW~PJ`B_?MxGWcltWF?j*>gOcp zrR)3T=cQXi_@yP8Ir=`C#U&H(YsXtNGO#D+B$eiRrZ6(dmm>3!KCkL`9Y&3YxIQbOwIY!3GGg)j@8JHLZfl8Pd fgc!Jiv?v23gD?X#18*^d2!m)bgBXK&GJ^yF)wm8Q 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 e283733da77312665ebe4c5d99d94db02452a27f..37d703fd4b01f34456d956c812253a9e1cb48411 100644 GIT binary patch delta 719 zcmah_O-~b16g_Xo(lQRIK`l~222`kGTLBf5DjOH3$&fU$aqXjhsg<#ic51?^TfbPC zx-lUpEDT$bjj}LtYy1@^qW%fud2d{hapB_Kd(X+a_n!OS4t^hUz8>y>25=iUcO6d* zq>vG~`|90vq1#dIa;GAj^=ezzRu7)-{Mvqbu(kQ)`S$NOn?Lt=9Gt;u5?L2#G1gxc z6>)Cwsn`+==~%0PpYtEdC$bpGR-@>zwHl=ecf)2-^qZZq|IM21l?0M9Sm{14*9FE} zO4aW?RJGNL+_)FYP#GKLx|R!^hz($G#$T(+;J$1(DF0#i6oBya&2VN-i(kM}$>4lKr#%%_Y#W3c;IuluJl!@e9<2|)l{; zyb=+`RXnGO&11|oR AUjP6A delta 260 zcmYL@O-=$q5QV=Qr-2!VU`QMk9T@xp|2YAPN8mcFWI?z<@4W+ILrnAl9z!p|%J8No zVbQPZRlhG)Kh5_f{r>y-0w%ny($bnKIh{IZ8RvBU!lv=1G4`)fx!&5${BOMMTwruL zCKGq0-cgele(v&7PqWIQ|GqQ}y`y9xXIybDrtqJxc&oB0k+h|H67qTQ**;(KH{6OF sD&getAlbumStatVo(@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 @@ + + + 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 + + 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 4738c4bfa909d2253c4c7ae40553339a510674f8..49be6a018d0f5b8e0b5728ec882c0dcab8978572 100644 GIT binary patch delta 1332 zcmZuw$xake6g{uIi=n$|3K}5wxJlo>|cx4%F^8O?1$e|)5~98t-N_Huq~>i4)=^i*V2fN+xaFI zeuji-t|R*t2-I^=<8G*118-5@1a~9y5n`SP4~}w`#y|m%aSdt%97iK>0(pqThX$+M z+&(F7L-2AfBDMpWC{{jO6c)C9fG|#=iM~EsG~*<*w9v;8gaOH}fDWfv3&5DnH3vr4hZ7%)H_^aTd^d2q>*BURXv z23>N7l$@}a@rG%!y0)wHK8&c^E@y2XkhS$QA`s(#P$|h(_mHC`gi)o$uI4C>Wi|6? zW~aW4E6kxQnNX=yWyf{uN~SZ|%F*nts)#yW9Sd0RYNP3-GwpN%dL=Q&EUv^_|JC&b zuHm{v;Kq6ahj3HsC1uMDZ*p;HB!{?*L#D$a)8+tBh5&N#UWFpgVJ{t1;o z%VQV7Jy6vsgxAYjybTw*#=4dC+L@`-#U;n);)AJ1Mex6Y+n6Mm)lt#N6cJsP>Hm$z z9am}Yl2eUt2Ln-vM?E1k@*Wu_pKzG(vUCv@?1Q_s33?6u7K|+J{QIJ`qumW zBN9y%58k|R_b-vN`c?HX=@1Xo(^XSd{rjqGe${^O$gTeQ{sX{1d|b{2{^v#iXKP#u z{!SgDa}x{>^WDO?uU15>pO)d$yyi(6?t;23ml*z!g3ouBLKCMIz~%Bj>ux z2{WvBgAwbim9+;qwYRl!o2tsOA~1v;?^N!hQ|&^kq<{rgl5}%{A=1q*h9yVe!fl>m zJ9$TsZjl?eM-TBhA2J7%%#dpgs$bCFw}QQ1yc)JS3=z9J;@oYJG6V@jo~7>M9t$}% zwkh{FQZ=xcQa#v6wI2_q38ZOG5K6F$id9>|a0cJd{fRC+sJ204gd2C@iYZ(%fny0B zK?~RF(T#NYoOUhYQ401LWtqGVFX@*%e+RLZU{SnQ>UDmCI=N?g(!9e`N?5W8bg&G+ y`*?zssv+9RY`1&jP89)mz z#)Sc{SBDC0)uR^G3>&Tvj|F_8Yu>?duzfHR914w3IP!veJsPl$!88<%sEb|0;fQyl zD7AM67#w0Xw^@9uF}%CXec@S~nB$xEMTNudaf>hbNK~EhxEY+8*~QGgg;ZiPn|zj@ zx}A+Lbp|ps^SL)qvY!^d&3$mC5-(GUm{LtoJ`Y>QGc=YhpvzNgB`=8K?b8@tJu2wyKg&fXcZWC$R}U8S?Fe?ETfaR zd<2VAz@bqV0UKeZST6~%6T9ffu#TEEu!zw$rf6O(P!F($PGdn|Rk&BmdI3C|V5h#_ z@+>Lipv)f1aA-yzZxcmM%DKYWi+vRAKMxj$n<4`a(2zWBfJ7QP*IM2~+qekPC{(Bz z>Yzh?fx#rnWCm)W59*;&I+=!3XrxRl4L(SNc}7CWU~T1KUKLn74v|pHP|0wZB8D0X zQ%nkG6;l(vX1;Oz@Wg delta 540 zcmZ{gJx;?w5QX2aF_G4W5D7U25E2{+B!Ptgf5Lx&Kubf5!~uK&4&jra&_F?rpymej zh>i;J>|Kl%iDu``%$wOy^I7=v)XVqd6M$`8+^I|1eV5O6_f1(MUt+Z%0uzjVjCP#) z;fLc@%BBYlW0KlsA9PHi!YGi#G%WaG-7VfmUIoc_lyNNfdvTsMe#OZdR5@3pE83+i zb*fobB<2v&8U0yIG|5N zaX_46q6rc}Q3*dlx5l_~MX|12yD@(EzP3CGi+6|f&Uemt&iU>)&-YbHpZ|Uw1+Wgi z{YhW7>||tPtByhx38Ym9YRWeT4>nc%8_Et<6_y>Y5a?dE+32(TM4l1W7uuG`E(1Tb zktDI#IIAxCp?9l zbez#pQQs73s3^CSG6Xh7+FF104vqJ`i1s}l8#bb&x5kFsBiAlPI$lSfz5UfQ5NYd* z_P+W((iXY;YP{uKq`&j$^N(Yn?nMVbj6b;??Q8u#az$XZw^3G@UsGA@l|?U^$SqnURG^ZF!weL{5d`R@3#1DimDUiE0!vW^ z2Z;@(Wh-JSipUz;)*=-?3prlA*Y#JN$iaPbNhaNWv+i!h&)abt&Kv!0CxauaNFaf}>fyK`||v5}_} zI7t#3Rw#xJMo7mgG}97qq-i-#ODVCl>Qb>xBfN*2yEjj5cO9M|?$*nJ&d? zlF7$aIb5QRS#uXygjdC`1}z*?6WvUO$pM_LoU$pinKqh1gE?P|#M*H!k^j2NKgSl! zZ=LWKw!$uT_GWIDg~u^IgyV{bi&pWKj;rAXspXMG!R)&`0Sn&Y`4*0YTZ5YnC1lXxJAdL+K z+8OLRT+FzHf#vK>6?zhUJ-8iHp-1UaR^w56lqy^rQ=yA7PKE!Ip)$dsQz;>o;cafF z6yqwqqe_=*sbj^RyKy)EvbrqOzc;lMTNuuU`)ci0f#%ES`GAoghVTfF`KKq*$S3~* DMaU9p delta 1070 zcmZuw$!-%t5Pd!N#A2M-u^c-Q0l@(JpgB;WvuBZmpYz9cb(H6-lggdMYmu!L*_ z7fxI`Mj)Xe#0PLjC|?74)oqU(#9?}=se1M5RrSiYUt7E%zrTJ5unX^&yr1r;_if+2 zXg2?+K0sp|6!vp>kVZStwk^fGt33jGY~@XHcS~QOmUPGgt^xq8#X+tDKnEPcVeSe! z9N|rZ&oM!QduQo0QsrfIIPjzPf>##^k3WIUWYDi+HX7Fk41;hK#|W1u*m0bo_euIo zGGiH}Wr!A6(GeKt=b)-f>E`Ja9Z!cC!5JRT4nl>bb6yY>x)d&mHDshhA1)$^Ao^I? zq={uTk?pkYKo&bKa`~8C9;3L#*d#s1Fy5jv$_%1rFF`JIZ_v16(YUH3ShtRs&S6&A&JQ-7cmv#H=FIY<{O2sIly)i6O4F3Or= zk_cUx#4TEyLK@3$T13c>1Ytk`cBjUJQS{FL%DHQmb5EC(PcZ*|Mm1Mc)&o2wdJt8+ zjkc!gRb(iPRAQQL>sr^9WEk}bk6XIdV?s~^+a2~PMMCE6L(c|_ z#{?h3q~=j%CQupkj^t!`G=^NV%Vb%ZU*UC}dFJoR9lW8hgW0%!b99{#v4BN+MNu61 Fb`_O(cAWqK 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 d93fbd3f32fe5fd75045113b3162c2f2f92f21ba..25147e79fd0d1b5c3ceaf2193d55f9317c2b2a73 100644 GIT binary patch delta 24 fcmZqDY|`9tgOgEVvM!h6u+i|zN-Rs%&q>Tn z*Z0ZKOSjgXcu{n+Efb$0M2R&c1A8J!hiA&GD0Bol)ugBX|=XOIBWY(Pbl3=9C5cppRn delta 60 zcmcb{@sgeE)W2Q(7#J9A8N@eoEn}L@#r&L+aq=f-V>t$91|FaU6N33xhCMPn9Y*abIBrcSenU~_2lT?};Qk0mS9gvuw z%E-{AFnDX5g_IPVkQPr Y24*Nrj6obMBEcXDq}do48Kf8(03mWX2><{9 delta 70 zcmcc3y^urT)W2Q(7#J9A8N}Hcm>3xhCMPn9Y*abIG`X4OIV0obY*u4A24)5xpb{nq UAqHVEEy5rQq}do48N?VE09i^4=l}o! 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 48a1130827133063ce6738b133db13054a60c8e7..52c8b3762dc3e0a80ad79652e06deb32d23eb766 100644 GIT binary patch delta 101 zcmcb|eUOLi)W2Q(7#J9A8Pqm%6|xBNrKgrS<|LKo2A3q3gyl0b*i4RLR-atW#K#5^ snOwoLijiZoGV4lJ7Dfg|1|tc(nNK#GY$6ig~JsDNoz0KIe-SpWb4 delta 48 zcmX@ebB~+r)W2Q(7#J9A8B{iM6|zh|&9a=4eR47DN+AX&22r2{6N4gy5|~y70B?~B A>Hq)$ 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 81051c8c337abc004ed632952712e61ffec19e54..f549e99663a2d580b3b46ff21308371edbbda69a 100644 GIT binary patch delta 202 zcmbQv*3BVs>ff$?3=9mm3{vb2OpFYslM|UlHmZDK6ctI!%u5N$FK|jMPIXQ!Nlni$ zsx+P)$>`+*=ULlXGcqWor)%c!5q~Wn|z3Qk+1{#2^Bc5@ir$U__Q;f=Y@r JNPrbd0sv3IE*k&< delta 48 zcmeC?n9jy^>ff$?3=9mm3}PF(_?RZ&V_L_^Jh_+IPKbetffFdf#30Nd0;WX)Lq!RE 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 f718d6588b563d3ad3f4119c5c206607e80e0113..ab27e2101ab982cf486c451b05a96cfe0fc219da 100644 GIT binary patch delta 201 zcmZqYddkan>ff$?3=9mm49Xk1PB4oJrDf)&IOZgk=7tm{CT9mErl&G8%$n@aWW#7Z zS)Ngv%_l!E-CA>U0FyPJH6sIiB1oxc3M0cGpqgl5gifE#;*zj@YdbVuQCO8+U|z|{ vHo1zW+LVQnL54w=fr)_==qO%h24Nt@4a9OlEDFR-4Dvt>VJR>uf<=@7d-*U; delta 48 zcmaFL+s?&x>ff$?3=9mm4DuVfPB2gIWnIq5I@y%1T8M#(K@=###2~{U3#R1&U}*|Z 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 06ebd04c9ba691fffd57e11a1c1a5e02c37665c1..8d5b3c7ae3f94a493b2eb35ec2c5b6d4f64d056b 100644 GIT binary patch delta 3589 zcmbVOd2m+M9X%&sk}vu4NJ73CWQ$}Y;Y%PiBxnm!17Z#P7M8LZNJxl*Ko(k-@#oK8E_>5Poi^X^L?VZfpFkGGt=oZq>> z<=%U;`pX4@Q(v_m0Z`1p?+Lu$H8l_Nm=RW_E?&TU#asj<9qN*yuO{@T|BT9#%pof$+-b$LVe@Vbgh!k5#pG=^D3po6WnA_he< z%pqdcX4q?zQlfitpv7<5TavQU3bD@5A|kP-d}(=p zZTX_A{Bd(@D(9IgH(R{L{v;`+2}3LnwS&R@-o1F6#oN(DSTb0;aB=PM+VTe397goB znc2q<2jev14vQn~4Z)1aQeu$W2Svwllslw{9Z2rRadvugHYeC4lQVjcFFO>+Exy86?Vagcx}FH|Bv1J{%wiS>C-QZBcSe?$8EbFKOtv4-=n{J- zfSo**$UmrOg!Q)8;GnZasl6v7+ip%vu!}NNdcEi9c;DhSZcm8fhXMHck;Rb1c}_D! z_QuSf11~tuA6v{plLmbf;Ga?G=ct4z)XV3kixySZ8;@5u`1vW3Wgkh;iuUs}B2~Ys zc2-tW_-^>o!*Q6BF#@^B136d!(fZCaZF6wrVP|kXdg)z) zc-(;?MxZC|L>lhW@=8&FQMd(Ta686h7$#sWCSnq%YMIkfiE`KsmNz zE_PuaT2X-)FduKA3h$yC7q9@Ip$7lZtS_<92%Cx6u!t<)!&)f@F12fP{uXkP(S3<^ zTr6+L;|nffJ$#aMiVbRul(6G$)Z8eUoy8_D70WJ+=lAvJ=MTh~qM5FRW$JUsFGmzt zsINOBzp~?Vy5+4Dh>hSvIj2sK6VZ72>4$n&%>d^yEG0F#N4~AFC*%w@PU~S5FF~x_ zmw*P`fJUUs9U&|=iz}2WAlF+_uF>p7C6}wEFT(t-;g7VUSfuk_-iJs!Qo8uqAQ`Lm ztPvy*3dMCZFj`|GP+jJIt_^6L+V(MWM}ch|B>76hx$EWd@vYY)U+C1u?F4r?TvfU z7x!VX(xC+Flq%~nP2br{jXGs=lfEnPSSNieJ$)dEoYVJj&VJ>dexM!u|IhD~aWka*db1#bY9fIfO zkyaJd0Tt9iOhFrF;HV1YnDXXj`R%xT^9r88tJsDUnsHJiPO0ZLmC);W3#V}oXUtkA z%4oH+%&D3v&78re*(UWjV62<^l5yT!>iPDiI&Dr-Ii>VwdnuLRDN{g^Ua`2u%S7z< zEmu;muzU8;?Wht3z*NdLtAvkolj9t_zJImxNxHNGZ|i+lK6y{E`9M|pk+zd_7>V;J z!-Y=qnd*t2YN}p`G{*5~d`zOt6z|8q_&9a#_HFk1p12$-r;NjH`u<$$qMJf{`rf9| zPUXd!`Z>sM5vF`PZ<-g4Ajg1)d4l5H^6f|k6=-6BPjZXcRThzbO<}@!GSteRqa%uQ zTgg85ngNBynXPzmGfI5LJ1{gi$i4;^L<;s7%r-D1N-$NhpMlBIf(e4T_CE*Yhx1~# zVWfETgDhy}pv@>27#!rc4Hzi!ogj-1$PlHnn*2l?G= z^8NLj@dbI;HR(S88oKaxmwP=vzN2M#c#kIpI=sh20v+DtZUK4E&~dwf@m^Ri=c8@- zI(^rbH}YD`rS_xtXz*s4^5lgCJbAqZ!k)fFA?X|G@X;sWMfcxro%rynx;psqp+E;8 zP78F<;h2EvMjLr80-_sZz>YTRplX*F#%A?-eCq`~zOaDDS1;i4RSJ0WrnNce-Zx1; z$-5%DuD;kd>Tqp7#Ie(Z9KW9vkBYwY5twOe*c@)YlYEL>wI8go=M@x&bw_kd7VcT9 zD}oAbvhOfr4{v*fJ@7L@ZiZlk87lYFps~VgMO^%NN z77HA@RLv`2x~z6WRa13+<+z%VAtOSkKo z5aA&;_Nv2p#NtsNvpv~cQjZ7uI#2jH!eSOmQ+U!onv-jv$u3BID~RWKB8BhBQec0k?ZC18jwsK!|CKq^UZ0cJ`}dBXGZufrEy+Hf4Z_bqSj=1wVQ^ zaZ=%VP>3RsbM)Rx&$-4n7xS*MwPN2jwxc+9jV+3`*Vr~<(-m8aabkf=rQ>p*-8V0- ze??4y?s=TAyE6{>xPX;wXiGFbW~uf?gPnER4}^ZbJ#i zVi?A2bP{gHWK6{En2I~Ks~M=pOhhmXYcLxRU=B9O`V=a#3-i&61vrQ*yp4r8i$(Yd z)%YAW_$QX&3)C86vyd3o5{rviE&agdxJKu#hKr5v%Ur@*1vd$Q=Tg?eD@mtWFI$3y z9p^Hw^~vpQE@y*Sc40Cb_2y@j7}K;e<{_f7*!&fW#Y&C!K*E=Hb$<7v9|$CRSfk)9 z(d8sCNpZSc*AHhxnpR24VhQ&s!aMVao1pbHikBe~%aN=Qc0(gF(S!musT1`fQUw&c zJ1R7qolF#Rwe)$++dW*P9VMb4qg;ywI#RlLSuYu@b=@OK9KvBIVS1mX$zIqC2ZSrH zWchC6udfD_YuBH}dwHLUpv86kk+eJUh}D8K_G9fXzVUnIWSy@2HNnFNH1HFI&1NqQ zc*JbB6kRkHMXD;YyPg@i4|!OJQrwS`XvP#gqw*lIQ_ zc@)Q7KIo*@BqIP`MyVek7*Rg5Sq{mE=zG{G`A5O1tHS=I60{Y4unoC-7UCHU!n4L( zfyx3XalMtqy(J;Xl#kP;emlc1CMNx)6;dC- z8O7wRa&u1Yc3$6&5A_APfN2utv_&jG(_PWiO?&G!#w2c{Ez#4I??>JII1L;dd(0hs z{7R;re$9{7?ay@N|D2muH1mLjJku%go+@Z%_wk;x!dCXS2Nw@1>)VRv%^2w|+kxSQ zA@(z{BtdYXV77tTKEX`ETm!?M1d|2(+uMtaqxpet7%N&CzSYX&%_tKn32~?ag9J)L z{Eh+H0^bd>%z!k3?}d1?0f}um0kp{U|I$T69MvJ;C*O=O#9KO~``g#hMX$Tv>+$i7 zw%r~*o)l=09uEk#M~^QGD0+sDPYamnMHO;B+J>*wcU^h6cC=mUvk}h*Z;&fjUV(rs zFGC>e>Pr!lKEp?^fScX_v|YuA&otD|hw}pMe0WEooeoC@M0cB!w^u-P^D{n@da}Irz;*-3XzIZXm^d+`Yhh577j=d|y@%uRO zRndES<%r5Qy>AX5?)80&rXyQho9sP=#Qo@egp(%}N%`$X zEn@T-#w2slwdv43s8i~YVU8VsY32i{iAdvCKBY4zS>O6?d>S5o8}ws(t*7Y!;A)C! z?vSf#UvcI9fpq8!0Y0mL1M?ZuZ78QiC4; z%Ke4hp}Eh=wgy2yuYk62H}|qt1P6Io>st64-{2{pj-xmE_EqRzzGqNu<@;J0Tk`?W fxwD40@cdPf9G;L@KBzFIMXJ&VH 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 R&WI2$Xt#`uRQ|6p{|%dU;`;yq delta 1407 zcmZ9LX;f8J6vuyuH=H+Io&{<=OcG?NXo!X*PT}~}z_G*u6ZJ{Y4Gn;JkV+*IXa`mN;rS1E0^`X1&-Fu&X_W0lX?#w=%={tX`xdj-( z>#iI) zE zO+SSvRyiY96^WLoNHJqA#xZ`oE8-6^Q8US6G7p)#Nrk4`)iY4c6wOqNX-rpiHWyu; zO^d6)6=J5v!#tw6r^2jvr&K$#*#d^5}?_b5*( zi!2rsHeGaKPPxTnL=?I_9GekY6IM8SoJwl zSU4J+xq5lnwu)J-V5Rv}PmlzwELO9|jPzvr*YT9*X^R@xo5wv1)HCLSC(RS$S&NN4 zXa4YXRnHrrH#@7A%@$ki=st;F6t1o=D-ZkG#tWJkEnebfGu1o6X%y)u*_-b3QNk-0 zJEhrHZ>PXmAA5LJv)AG^UN^scr#km5^3D9DEK}mUX>uIn%@}{ZZ%O5{#o?;rvWl>| z=}$8$R(cQ33B_GY%T|`KM0bQFwVQQW>q*G@Iep{=g?bKINR|Gka*C zn;X`-=>igMBevcez({Ns$_< z%&Uk*g-%(xG`uKQSXC~0em2trz16Q~T_Cq6L=uX9I7qj_l4VJ*BD;mZkhQvnyfordZ_3NeOrLK7ndXxV$CQ4gj4wAk=C%;2>|yNpXmG=-@!S)lD>BQMQ@M z9YQrt^eJ%lIZ1y-69Wp|L01z6aUKl1n;8QIy7zG=G*KjMMx0r3=AEH5sN*aYE`C}e zbcv!POXDmPdATA^b(|;9P#kCNtV3iMc#g6mr7q}+v*{#T9h@R{_TB2QCTcpRY(GKQ z*7oo_?qmt-W_H05DLle^d`PWeX16#;+Jj7dWD%e{8T1g^lN@@tPvPcg~9K5h*Q48fp~DDam(nlw&fi61GZ$V=|QpYdJ2G<|B!ii|cPPG@1Vp zRH~-KZTWXSnvk|>rc#=C`-_OR-DE0AT*XPrAtP5(22$GT|F$7hF73yg5^7@iF*ev6 zp%QSlZ$wA&|5$WM(rLYLTiYu9jC_LwqCP8%FB0@Cz7}PcIFwS%1%iCTw_I>~`JNvW L{3m|lH-i5H6Glrr 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 cfd9d727e1f9b11b458f4d348d61f96d76d8eb80..4b6e5c8c9ff7becc265cd4040d876abc7d93b168 100644 GIT binary patch literal 15666 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 delta 3037 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 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 1e4bdaa076359692c46ee648d6d7ace716c7daff..fc61bd20987b046fdb730fb79737923238384b71 100644 GIT binary patch delta 174 zcmWNL%L)Mj7==I9Rt6<08&fXhZmbBo8@G{LS;%C_%33MbmZLnw?373I0{%{&#p(2& z<7%$<(G^X_M}h!J!lcDBWJNkTs^sZYWJn2vGE4NYrI?;k4TU-p8pLUmqD6rY6}po4 zXfu$y!JIK$CfH25Fyo5JjWu@`JOuV+#fy#O4gR7#A?}4}5#xZ$NiNxP<|xx=#~*tC E0T?bEg8%>k delta 174 zcmWNLOA7&E7=<6!Rt6<0n~_T&av7@$2~A_%Zwn>2k)5?ttSv|R4YN~znm^#(yq(_8 zdCu{buReyRbV6i^kR?u@9Eu_Z47nyHEXvqa=u>4u?Yq||0mnq6L4qbaEeW;7)S*sS zK0Q&E*lngbtQp`k`FC99sYY 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 @@ + + + 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 + + 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 3f95953f92c1f584319759e2c857ae2d5cf596f7..9831179854737d357f7a8d71f4a73ba3300e1979 100644 GIT binary patch delta 1080 zcmbW0&u$V?6vn?hfGAXgslhZ&EYYe3YDYwAm9|=KOR-RDi*?~@pcHAwp@FGMV+;$U zF>z(sxiOlkEB}xhix_zT_r5_}st;j2cV+@3i7_#Rx%Zs=opXQloy^a}jULChU-brn zG2E;=R)k?ETZIR;~hi0&tL7me;I7n-|Reo z)U1Blu03gfefQ(Vr%)@^eDHRs{yLSM4{z5hdyW353|>)^)9ZI)%1S{r3>EL0jJm%$ zVYji=DH_5)FbvRYqt&KGK8i$&7|;5*z^b$n;HM`S1KkMFvr89X5T_|(ID{cs;j28` z-&f{Z2h{+5w0bqYM~hvC9yD_iXQ(bnDjTB!;5etbJnkx8JF8@c^1E0|&lu<+X2TJMGI*Ff10{=;J(L@sIBsq#va*n&UKo?qQ zt!y3em^>JPlc2e0UhUZ3^1w~sz&O2(lNwyYWhyt^7$fln{RLdpFE`C}9yPI=In#(WT!S2gCFL delta 520 zcmbV|y-osA5QV?HuwoWN*2HLtiW)_5QSlEH74a8QD-%0=3)_7FAA+Z_B$ya2cmP{# zd*eeG&n{#klooep&b{Z{IWwK~&xG^w``!Vn+_anrtNm|-5+Yt;)%5h~o zL|LJtkWse1S4>NV#j;{R2A7=TSeHPa6(Peoo<7MoYtGzLz;&d78RglKKN;dwj}Ivd ztV*{gmTd$e@G~Xax~_{p8*HlBy2tozv!lmE;Hsp;Fx_pZx-Lb~D&@V9D7=xjnqQ9d z*!Pf=hx|W1lm|TQ4tvP3r=4Y+x5{4N0-jh-ta46Tk;VYt5 obu5mCmr&z4TEa=+z-h=n3*)&o8MKiY7vk1^E@|lHDiU7*0rmAOH2?qr 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 a35259a6039e1c1f53572a9c6e4d7e5c851e17d7..abda2e2e7d90a576c770a800d959bc970140a139 100644 GIT binary patch literal 1786 zcmbtVTW?cG5T11|hd6FYxr73}Kq!y|nx))IaflQlwL)?VA}B9Bt?kY6!Z~N%-93q- zsuF4iQeO%cf~QJ|mp-JRcPa^OE#+1UQ>k%LS6n$6PuA6Goj9YTNE$}{UN!UP(eB~WYO*DrgvF7jB6TX_Q=(qX(-ztq&|rbK z(T9wNJH>)7)(JP#rjg_4Gr=gQFEg5G571;2A=V30WVHQ!nm8598D&*Dl9NfIop4Gg zmeGllHX*ll1JY-Wh~>OCmw8!=#PV5DaoQ|!vEsldQ>W*ZkyXHUpVn1Szp$jgR-duX}>(ZaUH-5VM^6sO?;)BMWn~k5Zy!`FT^Xor0Zrx*av}1eC%Q7#kq}mpW zenW4=@Hir>JT6QSi7gwLisLB;Vb+WC6%$K4k1$^ck%8!rn)0YW6|1ADSLaWr$(?ax{|Vvkm`7VR*pOLHZnj o#x4@GNazrZ0-x0vnf2jpJ(BtCMEIjPIcDiNeTjn;D}G=73kqTutN;K2 delta 200 zcmeyx`;nFF)W2Q(7#J9A8Kft2>9esja4<3$Ozf7P?9U`RvC?t!62`-mud+O@XDv(2 zDNSW$;7TmW)Gtm=EK1H`P-I|dU;^r81d^N#TtJ!|$YTT2JYZ2q239bS7s%5GiZTLe zR;}#}j2nRrCI&tr2~y0!z{|i7BzYhT7z7vu!SX_2QW$Kgj5Gr?g9uQ8XfcBrgE&w| O0?3h!W?(F4kOBbOP#OFH 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 d4e0dcf0230a308f013e67bbbbb95365b0082316..f851cdf81f9b63e3ac7f1ac6349d1bffa57bcaf5 100644 GIT binary patch delta 221 zcmeBTJjTRz>ff$?3=9mm47?M$eCpZLQ%gKcQgay@6g7OZ63Y_xa}x8?^?ma5(ycWi z0;MIHIr_ed1=frV0=}sw8TlyziA9OIsU@jJ#f%K>i8)E7xt=ME44lE4>3NAIrA4WX z4DN&svw@hc0Jbf-q$m?;ACmq4Nm;4MCDwM<6GODs7+Dw@SQ*$Dm>AfB4rgU#-~dvb QK+MFz#lXnG4QBBG0AWr%w*UYD delta 33 ocmX@c)Wyhk>ff$?3=9mm4D1uRd?tR^3xhCTK$_sJ|Sv1Vl8PEIUIP0uf?H1teiWZ(?WOwUU!DJ@E6WQZiF z-3G}x-^2niR|RTca7j@n&_*N|_$OthCYM;-0pVmVMqNgh$q|f}sw|8QybOE{ObqNm X&#*Ew@B=9UAZB6^WME_v0<(kxE*?Rl delta 49 zcmcc3GMic8)W2Q(7#J9A8Ti>5m>3xhCTBlG0HjFwysj10U$6-*3# E09t+v4gdfE 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 c5341b23e22fd4e07c71b56346e7b3d06bd86955..4713d1c58bbb792466bc4e7a3eda04d8ce6d05e7 100644 GIT binary patch literal 5835 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 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 353ee7ba31dd15e9925389b6599220aeb939c254..8c02d8bee718aa5a17737106fc64f888fd1de08b 100644 GIT binary patch literal 35889 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 S|2}T~Nniia_^a`ED*u0U#}G*X delta 7387 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 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 5b1d92229ec72d954bc10313e6ae88ed8ed231a9..703bf48c366f0f6b94b09f7435342e88d2e43483 100644 GIT binary patch delta 43 ycmbQnF^yw`6*D8(WNYR$NdX2f1|bG<22lnn24Mzi1`!5%1_1^&2Fc00m}3B%l?GD) delta 43 xcmbQnF^yw`6*D8xWNYR$Ng)O<1`!5vAe3SdWsqhNV~}SMVo+m{p1g}W1^}DM24esK 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 9fd7f2370d601fa02736906fa07f99a47e0c1705..88dd5390aec9abc7d96603bc96af7d6572a6a44a 100644 GIT binary patch delta 1200 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 ai%}m+5T53H{ET0SVyECA zao}=X|8`~Z0)RMY&gpwSZXLhis)k<;{HBWi@pfD@u#D@3Ybu$Y>YN!*5%$WegbOza z_hjnW@GJdCQklfKj#=C?a2tOTIjNVAC(~IXpxzGn-6JOG9Rq*ky87N9(8RlI;GVkb zkJxZuEqP;QI*D5vZG?9^Ih(9YCo_|E{iD;Vv13w9he4-m2vkWaT?TViGEhUedNU9$ zlgJu_9)t-)+DRNflI~0=vso9K&B{E3`AQEKJHi?RYAm>c1?pt5EZ}FM0VlTTe3BuJ z#RkJHQC|fI91)^k<+=T;HXNGoE;wtSza6?jPruFq?$Ws1;2@tuBO$ z12+)%a)gLiss>j;z2@+#rILu}pw1WgqQ<0wE{>|@l8de5gm&fBM_1lDNf##w$H*YX znv(vHXH!RG>6ytxnV9T{k;r6HM=dd_tj3qra%t3Ym$9juNoDx>Z zC`@JsH?UG>vWijISw3G>-pD!0#RLjvtc6$L0%$-5Hlar5CN!cA&FDf4deDkt#Bfj| z)7XkE+VMKJ;T?3~EVg42J8(&|zC$m5L?3>_PTa)+9oR)DcGHJJtC-kS2m37{>!efQ5idd*Vu$c~;IX>5aTOLrl16T4rvIGT^T<&=qI__)?`g5r36^jS{sqFgO}JohR6`+N+Z=M!HD zx?OJU!wVa-w69*+(|nrU(u8?z9ysnHBxgq5e@AYYi_ggZtxAkM=rcFp^$CmSanXDR z{4b~+?&`TF*duG*Ha`34Ird6!p9D+c;7&>0!y)eDejecS0y1WeDQleMA<5GvI?XgQ GDEt>(oanUx