Browse Source

学生/机构可购买专辑

刘俊驰 1 year ago
parent
commit
9d73460ceb
20 changed files with 472 additions and 212 deletions
  1. 10 5
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/TenantAlbumSheetController.java
  2. 46 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/TenantGroupAlbumController.java
  3. 3 2
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TenantAlbumSheetController.java
  4. 3 2
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumSheetController.java
  5. 45 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantGroupAlbumController.java
  6. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDao.java
  7. 2 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAlbum.java
  8. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantGroupAlbum.java
  9. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderDetail.java
  10. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantAlbumMusicMapper.java
  11. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantGroupAlbumMapper.java
  12. 12 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantGroupAlbumService.java
  13. 60 78
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumMusicServiceImpl.java
  14. 62 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantGroupAlbumServiceImpl.java
  15. 49 99
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumMusicWrapper.java
  16. 91 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantGroupAlbumWrapper.java
  17. 18 17
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumMusicMapper.xml
  18. 43 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantGroupAlbumMapper.xml
  19. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml
  20. 12 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

+ 10 - 5
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/TenantAlbumSheetController.java

@@ -4,17 +4,21 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.StudentService;
 import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -39,6 +43,9 @@ public class TenantAlbumSheetController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
+    @Autowired
+    private StudentService studentService;
+
     @ApiOperation(value = "查询条件")
     @PostMapping("/selectCondition")
     public HttpResponseResult<TenantAlbumMusicWrapper.TenantAlbumMusicSelectData> selectCondition(@RequestBody TenantAlbumMusicWrapper.TenantAlbumMusicSelect query) {
@@ -58,16 +65,14 @@ public class TenantAlbumSheetController extends BaseController {
 
     @ApiOperation(value = "分页查询")
     @PostMapping("/page")
-    public HttpResponseResult<PageInfo<TenantAlbumMusicWrapper.StudentTenantAlbumMusic>> page(@RequestBody TenantAlbumMusicWrapper.StudentTenantAlbumMusicQuery query) {
+    public HttpResponseResult<PageInfo<TenantAlbumMusicWrapper.StudentTenantAlbumMusic>> page(@RequestBody @Validated TenantAlbumMusicWrapper.StudentTenantAlbumMusicQuery query) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        query.setTenantId(Optional.ofNullable(user.getTenantId()).orElse(-1L));
-        query.setClientType(ClientEnum.TENANT_STUDENT);
+        query.setUserId(user.getId());
+        query.setClientType(ClientEnum.STUDENT);
         IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> page = tenantAlbumMusicService.selectPage(QueryInfo.getPage(query), query);
         return succeed((PageUtil.pageInfo(page)));
     }
-
-
 }

+ 46 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/TenantGroupAlbumController.java

@@ -0,0 +1,46 @@
+package com.yonge.cooleshow.student.controller;
+
+import com.microsvc.toolkit.common.response.template.R;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.TenantGroupAlbumService;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.student:}/tenantGroupAlbum")
+@Api(tags = "机构小组专辑配置表")
+public class TenantGroupAlbumController {
+
+    @Autowired
+    private TenantGroupAlbumService tenantGroupAlbumService;
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+	@ApiOperation(value = "学生可购买机构专辑信息")
+	@GetMapping("/buyAlbumInfo")
+	public HttpResponseResult<List<TenantGroupAlbumWrapper.BuyTenantAlbum>> buyAlbumInfo() {
+
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return HttpResponseResult.failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+    
+		return HttpResponseResult.succeed(tenantGroupAlbumService.buyAlbumInfo(user.getId(), ClientEnum.STUDENT));
+	}
+}

+ 3 - 2
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TenantAlbumSheetController.java

@@ -17,6 +17,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -48,14 +49,14 @@ public class TenantAlbumSheetController extends BaseController {
 
     @ApiOperation(value = "分页查询")
     @PostMapping("/page")
-    public HttpResponseResult<PageInfo<TenantAlbumMusicWrapper.StudentTenantAlbumMusic>> page(@RequestBody TenantAlbumMusicWrapper.StudentTenantAlbumMusicQuery query) {
+    public HttpResponseResult<PageInfo<TenantAlbumMusicWrapper.StudentTenantAlbumMusic>> page(@RequestBody @Validated TenantAlbumMusicWrapper.StudentTenantAlbumMusicQuery query) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
 
         Teacher teacher = teacherService.getById(user.getId());
-        query.setTenantId(Optional.ofNullable(teacher.getTenantId()).orElse(-1L));
+//        query.setTenantId(Optional.ofNullable(teacher.getTenantId()).orElse(-1L));
         query.setClientType(ClientEnum.TEACHER);
         IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> page = tenantAlbumMusicService.selectPage(QueryInfo.getPage(query), query);
         return succeed((PageUtil.pageInfo(page)));

+ 3 - 2
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumSheetController.java

@@ -15,6 +15,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -58,12 +59,12 @@ public class TenantAlbumSheetController extends BaseController {
 
     @ApiOperation(value = "分页查询")
     @PostMapping("/page")
-    public HttpResponseResult<PageInfo<TenantAlbumMusicWrapper.StudentTenantAlbumMusic>> page(@RequestBody TenantAlbumMusicWrapper.StudentTenantAlbumMusicQuery query) {
+    public HttpResponseResult<PageInfo<TenantAlbumMusicWrapper.StudentTenantAlbumMusic>> page(@RequestBody @Validated TenantAlbumMusicWrapper.StudentTenantAlbumMusicQuery query) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        query.setTenantId(Optional.ofNullable(user.getTenantId()).orElse(-1L));
+//        query.setTenantId(Optional.ofNullable(user.getTenantId()).orElse(-1L));
         query.setClientType(ClientEnum.TENANT);
         IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> page = tenantAlbumMusicService.selectPage(QueryInfo.getPage(query), query);
         return succeed((PageUtil.pageInfo(page)));

+ 45 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantGroupAlbumController.java

@@ -0,0 +1,45 @@
+package com.yonge.cooleshow.tenant.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.TenantGroupAlbumService;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.tenant:}/tenantGroupAlbum")
+@Api(tags = "机构小组专辑配置表")
+public class TenantGroupAlbumController {
+
+    @Autowired
+    private TenantGroupAlbumService tenantGroupAlbumService;
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+	@ApiOperation(value = "机构可购买机构专辑信息")
+	@GetMapping("/buyAlbumInfo")
+	public HttpResponseResult<List<TenantGroupAlbumWrapper.BuyTenantAlbum>> buyAlbumInfo() {
+
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return HttpResponseResult.failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+    
+		return HttpResponseResult.succeed(tenantGroupAlbumService.buyAlbumInfo(user.getId(), ClientEnum.TENANT));
+	}
+}

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDao.java

@@ -101,4 +101,7 @@ public interface UserOrderDao extends BaseMapper<UserOrder>{
 
 	//小程序首页订单详情
 	PaymentDivMemberRecordWrapper.OrderDetailDto getExpendOrderDetail(@Param("orderNo") String orderNo);
+
+    List<Long> getStudentTenantAlbumNum(@Param("userId") Long userId,
+                                        @Param("tenantGroupAlbumIds") List<Long> tenantGroupAlbumIds);
 }

+ 2 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAlbum.java

@@ -23,10 +23,9 @@ import java.math.BigDecimal;
 @TableName("tenant_album")
 public class TenantAlbum implements Serializable {
 
-    @ApiModelProperty("主键ID") 
-
+    @ApiModelProperty("主键ID")
     @TableId(value = "id_", type = IdType.AUTO)
-	    private Long id;
+    private Long id;
 
     @ApiModelProperty("专辑名称") 
 	@TableField(value = "name_")

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantGroupAlbum.java

@@ -24,8 +24,8 @@ import java.math.BigDecimal;
 public class TenantGroupAlbum implements Serializable {
 
     @ApiModelProperty("主键ID") 
-	    @TableId(value = "id_")
-	    private Long id;
+    @TableId(value = "id_",type = IdType.AUTO)
+    private Long id;
 
     @ApiModelProperty("机构小组ID") 
 	@TableField(value = "tenant_group_id_")

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderDetail.java

@@ -90,4 +90,9 @@ public class UserOrderDetail implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date updateTime;
 
+
+    @ApiModelProperty("学生购买机构专辑时的小组ID")
+    @TableField(value = "tenant_group_album_id_")
+    private Long tenantGroupAlbumId;
+
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantAlbumMusicMapper.java

@@ -22,7 +22,7 @@ public interface TenantAlbumMusicMapper extends BaseMapper<TenantAlbumMusic> {
 	 * @param param TenantAlbumMusicWrapper.TenantAlbumMusicQuery
 	 * @return List<TenantAlbumMusicWrapper.TenantAlbumMusic>
 	 */
-	List<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> selectPage(@Param("page") IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> page, @Param("param") TenantAlbumMusicWrapper.StudentMusicSheetQuery param);
+	List<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> selectPage(@Param("page") IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> page, @Param("param") TenantAlbumMusicWrapper.StudentTenantAlbumMusicQuery param);
 
 	List<Long> selectMusicSheetIds(@Param("albumId") String albumId, @Param("subjectType") String s, @Param("type") String type, @Param("level") String level);
 

+ 3 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantGroupAlbumMapper.java

@@ -23,5 +23,7 @@ public interface TenantGroupAlbumMapper extends BaseMapper<TenantGroupAlbum> {
 	 * @return List<TenantGroupAlbumWrapper.TenantGroupAlbum>
 	 */
 	List<TenantGroupAlbum> selectPage(@Param("page") IPage<TenantGroupAlbum> page, @Param("param") TenantGroupAlbumWrapper.TenantGroupAlbumQuery param);
-	
+
+
+    List<TenantGroupAlbumWrapper.BuyTenantAlbum> getBuyAlbumInfo(@Param("param") TenantGroupAlbumWrapper.BuyTenantAlbumQuery query);
 }

+ 12 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantGroupAlbumService.java

@@ -2,9 +2,13 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.microsvc.toolkit.common.response.ParamResponse;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper;
 import com.yonge.cooleshow.biz.dal.entity.TenantGroupAlbum;
 
+import java.util.List;
+
 /**
  * 机构小组专辑配置表
  * 2024-01-24 13:32:00
@@ -39,5 +43,12 @@ public interface TenantGroupAlbumService extends IService<TenantGroupAlbum>  {
      * @return Boolean
      */
      Boolean update(TenantGroupAlbumWrapper.TenantGroupAlbum tenantGroupAlbum);
-     
+
+    /**
+     * 可购买机构信息
+     *
+     * @param userId 用户ID
+     * @param clientType 客户端类型
+     */
+    List<TenantGroupAlbumWrapper.BuyTenantAlbum> buyAlbumInfo(Long userId, ClientEnum clientType);
 }

+ 60 - 78
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumMusicServiceImpl.java

@@ -17,14 +17,7 @@ import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMusicMapper;
-import com.yonge.cooleshow.biz.dal.service.MusicFavoriteService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
-import com.yonge.cooleshow.biz.dal.service.MusicTagService;
-import com.yonge.cooleshow.biz.dal.service.SubjectService;
-import com.yonge.cooleshow.biz.dal.service.TenantAlbumCategoryDetailService;
-import com.yonge.cooleshow.biz.dal.service.TenantAlbumCategoryService;
-import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
-import com.yonge.cooleshow.biz.dal.service.UserTenantAlbumRecordService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.toolset.base.exception.BizException;
 import jodd.util.StringUtil;
@@ -34,11 +27,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -73,6 +62,8 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
     @Autowired
     private TenantAlbumMusicService tenantAlbumMusicService;
 
+    @Autowired
+    private SysUserService sysUserService;
 
     @Autowired
     private MusicFavoriteService musicFavoriteService;
@@ -101,78 +92,69 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
      * @return IPage<TenantAlbumMusic>
      */
     @Override
-    public IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> selectPage(IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> page, TenantAlbumMusicWrapper.StudentTenantAlbumMusicQuery query) {
-        com.yonge.cooleshow.auth.api.entity.SysUser user = sysUserFeignService.queryUserInfo();
-        Long sysUserId = user.getId();
-
-        String albumId = query.getAlbumId();
-        if (StringUtil.isEmpty(albumId)){
-            Long tenantId = query.getTenantId();
-            //查询机构专辑Id
-            List<TenantAlbumMusic> list = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantId, tenantId).eq(TenantAlbumMusic::getDelFlag,false).list();
-            if (CollectionUtils.isNotEmpty(list)){
-                TenantAlbumMusic albumMusic = list.get(0);
-                 albumId = albumMusic.getTenantAlbumId().toString();
-            } else {
-                throw new BizException("该机构未绑定相关专辑");
-            }
-        }
-        SubjectTypeEnum subjectType = query.getSubjectType();
-        String s = subjectType.toString();
-        String type = query.getType();
-        String level = query.getLevel();
+    public IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> selectPage(IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> page,
+                                                                             TenantAlbumMusicWrapper.StudentTenantAlbumMusicQuery query) {
 
-        List<Long> musicSheetIds = tenantAlbumMusicMapper.selectMusicSheetIds(albumId, s, type, level);
 
-        if (CollectionUtils.isEmpty(musicSheetIds)) {
-            page.setTotal(0);
-            return page.setRecords(new ArrayList<>());
+        List<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> musicSheets = tenantAlbumMusicMapper.selectPage(page, query);
+        if (CollectionUtils.isEmpty(musicSheets)) {
+            return page.setRecords(musicSheets);
         }
-        TenantAlbumMusicWrapper.StudentMusicSheetQuery musicSheetQuery = new TenantAlbumMusicWrapper.StudentMusicSheetQuery();
-        musicSheetQuery.setMusicSheetIds(musicSheetIds);
-        musicSheetQuery.setMusicTagId(query.getMusicTagId());
-        musicSheetQuery.setSubjectId(query.getSubjectId());
-        musicSheetQuery.setKeyword(query.getKeyword());
-        //把集合转为字符串
-        String collect1 = musicSheetIds.stream()
-                .map(String::valueOf)
-                .collect(Collectors.joining(", "));
-        musicSheetQuery.setCollect(collect1);
-
-        List<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> musicSheets = tenantAlbumMusicMapper.selectPage(page, musicSheetQuery);
-
-        musicSheets.stream().forEach(m->{
-            Long userId = m.getUserId();
-            String musicSubject = m.getMusicSubject();
-
-            //获取用户名
-            if (userId != null){
-                SysUser sysUser = sysUserMapper.selectById(userId);
-                m.setUserName(sysUser.getUsername());
-            }
-
-            //获取声部名
-            if (StringUtils.isNotEmpty(musicSubject)){
-                List<Subject> subject = subjectService.findBySubjectByIdList(musicSubject);
-                if (CollectionUtils.isNotEmpty(subject)){
-                    Subject subject1 = subject.get(0);
-                    m.setMusicSubjectName(subject1.getName());
-                }
-            }
 
-            //是否收藏
-            Long id = m.getId();
-            List<MusicFavorite> list = musicFavoriteService.lambdaQuery()
-                    .eq(MusicFavorite::getMusicSheetId, id)
-                    .eq(MusicFavorite::getUserId,sysUserId)
-                    .eq(MusicFavorite::getClientType,query.getClientType().equals(ClientEnum.TENANT_STUDENT)?ClientEnum.STUDENT:query.getClientType()).list();
-            if (CollectionUtils.isNotEmpty(list)){
-                m.setFavorite(true);
-            }
+        // 设置声部
+        List<String> subjectIds = musicSheets.stream()
+            .map(TenantAlbumMusicWrapper.StudentTenantAlbumMusic::getMusicSubject)
+            .filter(Objects::nonNull)
+            .flatMap(x -> Arrays.stream(x.split(",")))
+            .distinct()
+            .collect(Collectors.toList());
+        Map<Integer, Subject> subjectMap = subjectService.getMapByIds(subjectIds);
+
+        // 设置上传人
+        List<Long> userIds = musicSheets.stream()
+            .map(TenantAlbumMusicWrapper.StudentTenantAlbumMusic::getUserId)
+            .filter(Objects::nonNull)
+            .distinct()
+            .collect(Collectors.toList());
+        Map<Long, SysUser> userMap = sysUserService.getMapByIds(userIds);
+
+        // 设置是否收藏
+        List<Long> musicSheetIds = musicSheets.stream()
+            .map(TenantAlbumMusicWrapper.StudentTenantAlbumMusic::getId)
+            .filter(Objects::nonNull)
+            .distinct()
+            .collect(Collectors.toList());
+        List<Long> favoriteIds = new ArrayList<>();
+        if (query.getUserId() != null && query.getClientType() != null) {
+            List<MusicFavorite> favoriteList = musicFavoriteService.lambdaQuery()
+                .in(MusicFavorite::getMusicSheetId, musicSheetIds)
+                .eq(MusicFavorite::getUserId, query.getUserId())
+                .eq(MusicFavorite::getClientType, query.getClientType().equals(ClientEnum.TENANT_STUDENT) ? ClientEnum.STUDENT : query.getClientType())
+                .list();
+            favoriteIds = favoriteList.stream().map(MusicFavorite::getMusicSheetId).distinct().collect(Collectors.toList());
 
-        });
+        }
 
 
+        for (TenantAlbumMusicWrapper.StudentTenantAlbumMusic m : musicSheets) {
+            if (StringUtils.isNotBlank(m.getMusicSubject())) {
+                String subjectNames = Arrays.stream(m.getMusicSubject().split(","))
+                    .distinct()
+                    .map(Integer::parseInt)
+                    .map(subjectMap::get)
+                    .filter(Objects::nonNull)
+                    .map(Subject::getName)
+                    .collect(Collectors.joining(","));
+                m.setMusicSubjectName(subjectNames);
+            }
+            SysUser sysUser = userMap.get(m.getUserId());
+            if (sysUser != null) {
+                m.setUserName(sysUser.getUsername());
+            }
+            if (CollectionUtils.isNotEmpty(favoriteIds)) {
+                m.setFavorite(favoriteIds.contains(m.getId()));
+            }
+        }
         return page.setRecords(musicSheets);
     }
 

+ 62 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantGroupAlbumServiceImpl.java

@@ -3,6 +3,16 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.dao.UserOrderDao;
+import com.yonge.cooleshow.biz.dal.entity.Student;
+import com.yonge.cooleshow.biz.dal.entity.TenantStaff;
+import com.yonge.cooleshow.biz.dal.entity.UserOrder;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.StudentService;
+import com.yonge.cooleshow.biz.dal.service.TenantStaffService;
+import com.yonge.toolset.base.exception.BizException;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.BeanUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -11,6 +21,9 @@ import com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantGroupAlbumMapper;
 import com.yonge.cooleshow.biz.dal.service.TenantGroupAlbumService;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * 机构小组专辑配置表
  * 2024-01-24 13:32:00
@@ -19,6 +32,15 @@ import com.yonge.cooleshow.biz.dal.service.TenantGroupAlbumService;
 @Service
 public class TenantGroupAlbumServiceImpl extends ServiceImpl<TenantGroupAlbumMapper, TenantGroupAlbum> implements TenantGroupAlbumService {
 
+    @Autowired
+    private StudentService studentService;
+
+    @Autowired
+    private TenantStaffService tenantStaffService;
+
+    @Autowired
+    private UserOrderDao userOrderDao;
+
 	/**
      * 查询详情
      * @param id 详情ID
@@ -63,4 +85,44 @@ public class TenantGroupAlbumServiceImpl extends ServiceImpl<TenantGroupAlbumMap
 
         return this.updateById(JSON.parseObject(tenantGroupAlbum.jsonString(), TenantGroupAlbum.class));       
     }
+
+    @Override
+    public List<TenantGroupAlbumWrapper.BuyTenantAlbum> buyAlbumInfo(Long userId, ClientEnum clientType) {
+        // 学生端 查看小组专辑 获取专辑基本信息, 机构端查看机构专辑 获取专辑基本信息
+
+        TenantGroupAlbumWrapper.BuyTenantAlbumQuery query = new TenantGroupAlbumWrapper.BuyTenantAlbumQuery();
+        if (clientType == ClientEnum.STUDENT) {
+            Student student = studentService.getById(userId);
+            if (student.getTenantId() == null || student.getTenantId() <=0 || student.getTenantGroupId() == null) {
+                throw new BizException("学生未加入机构或者小组");
+            }
+            query.setTenantId(student.getTenantId());
+            query.setTenantGroupId(student.getTenantGroupId());
+        } else if (clientType == ClientEnum.TENANT) {
+            TenantStaff tenantStaff = tenantStaffService.getByUserId(userId);
+            if(tenantStaff == null || tenantStaff.getTenantId() == null) {
+                throw new BizException("机构员工不存在");
+            }
+            query.setTenantId(tenantStaff.getTenantId());
+        } else {
+            throw new BizException("客户端类型错误");
+        }
+
+        List<TenantGroupAlbumWrapper.BuyTenantAlbum> buyAlbumInfo = baseMapper.getBuyAlbumInfo(query);
+        if (CollectionUtils.isEmpty(buyAlbumInfo)) {
+            return buyAlbumInfo;
+        }
+
+        // 如果学生购买 判断购买次数
+        if (clientType == ClientEnum.STUDENT) {
+            // 曲目ID集合
+            List<Long> tenantGroupAlbumIds = buyAlbumInfo.stream().map(TenantGroupAlbumWrapper.BuyTenantAlbum::getTenantGroupAlbumId).collect(Collectors.toList());
+            List<Long> studentTenantAlbumNum = userOrderDao.getStudentTenantAlbumNum(userId, tenantGroupAlbumIds);
+            for (TenantGroupAlbumWrapper.BuyTenantAlbum item : buyAlbumInfo) {
+                item.setBuyedTimes((int) studentTenantAlbumNum.stream().filter(x -> x.equals(item.getTenantGroupAlbumId())).count());
+            }
+        }
+
+        return buyAlbumInfo;
+    }
 }

+ 49 - 99
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumMusicWrapper.java

@@ -22,6 +22,7 @@ import lombok.NoArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 
 import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 
 /**
@@ -32,25 +33,25 @@ import javax.validation.constraints.Size;
 public class TenantAlbumMusicWrapper {
 
     @Data
-	@Builder
+    @Builder
     @NoArgsConstructor
     @AllArgsConstructor
     @ApiModel(" TenantAlbumMusicQuery-机构专辑曲目")
     public static class TenantAlbumMusicQuery implements QueryInfo {
-    
-    	@ApiModelProperty("当前页")
+
+        @ApiModelProperty("当前页")
         private Integer page;
-        
+
         @ApiModelProperty("分页行数")
         private Integer rows;
-        
+
         @ApiModelProperty("关键字匹配")
-		private String keyword;
-        
+        private String keyword;
+
         public String getKeyword() {
             return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
         }
-        
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }
@@ -58,11 +59,11 @@ public class TenantAlbumMusicWrapper {
         public static TenantAlbumMusicQuery from(String json) {
             return JSON.parseObject(json, TenantAlbumMusicQuery.class);
         }
-    }  
+    }
 
-	@ApiModel(" TenantAlbumMusic-机构专辑曲目")
+    @ApiModel(" TenantAlbumMusic-机构专辑曲目")
     public static class TenantAlbumMusic {
-        
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }
@@ -70,9 +71,7 @@ public class TenantAlbumMusicWrapper {
         public static TenantAlbumMusic from(String json) {
             return JSON.parseObject(json, TenantAlbumMusic.class);
         }
-	}
-
-
+    }
 
 
     @Data
@@ -82,7 +81,7 @@ public class TenantAlbumMusicWrapper {
         @ApiModelProperty("声部分类(ENSEMBLE, MUSIC, SUBJECT)")
         private SubjectTypeEnum subjectType;
 
-        @ApiModelProperty(value = "用户ID",hidden = true)
+        @ApiModelProperty(value = "用户ID", hidden = true)
         private Long userId;
 
         public String jsonString() {
@@ -127,8 +126,6 @@ public class TenantAlbumMusicWrapper {
     }
 
 
-
-
     @Data
     @Builder
     @NoArgsConstructor
@@ -137,7 +134,8 @@ public class TenantAlbumMusicWrapper {
     public static class StudentTenantAlbumMusicQuery implements QueryInfo {
 
         @ApiModelProperty(value = "详情专辑id")
-        private String albumId;
+        @NotNull(message = "专辑id不能为空")
+        private Long albumId;
 
         @ApiModelProperty("当前页")
         private Integer page;
@@ -148,9 +146,6 @@ public class TenantAlbumMusicWrapper {
         @ApiModelProperty("关键字匹配")
         private String keyword;
 
-        /*@ApiModelProperty(value = "专辑id集合")
-        private List<Long> albumIds;*/
-
         @ApiModelProperty("声部分类(ENSEMBLE, MUSIC, SUBJECT)")
         private SubjectTypeEnum subjectType;
 
@@ -166,14 +161,11 @@ public class TenantAlbumMusicWrapper {
         @ApiModelProperty("标签")
         private Long musicTagId;
 
-        @ApiModelProperty("端类型")
+        @ApiModelProperty(value = "端类型",hidden = true)
         private ClientEnum clientType;
 
-        @ApiModelProperty("机构id")
-        private Long tenantId;
-
-        @ApiModelProperty(name = "集合")
-        private String collect;
+        @ApiModelProperty(value = "用户ID",hidden = true)
+        private Long userId;
 
 
         public String getKeyword() {
@@ -190,99 +182,57 @@ public class TenantAlbumMusicWrapper {
 
 
     }
-        @Data
-        @Builder
-        @NoArgsConstructor
-        @AllArgsConstructor
-        @ApiModel(" TenantAlbumMusic-学生端专辑曲目返回")
-        public static class StudentTenantAlbumMusic implements QueryInfo {
-            @ApiModelProperty(value = "曲目表id")
-            private Long id;
-
-            @ApiModelProperty(value = "精品标志")
-            private String exquisiteFlag;
-
-            @ApiModelProperty(value = "曲谱名称")
-            private String musicSheetName;
-
-            @ApiModelProperty(value = "封面图")
-            private String titleImg;  //曲谱名称
-
-            @ApiModelProperty(value = "曲谱来源(平台用户ID或者是老师ID)")
-            private Long userId;  //曲谱来源(平台用户ID或者是老师ID)
-
-            @ApiModelProperty(value = "艺术家")
-            private String composer;  //音乐家
-
-            @ApiModelProperty(value = "曲谱声部(适用的乐器,可能是多个,用逗号分隔)")
-            private String musicSubject;  //曲谱声部(适用的乐器,可能是多个,用逗号分隔)
-
-            @ApiModelProperty(value = "曲谱声部名称(适用的乐器,可能是多个,用逗号分隔)")
-            private String musicSubjectName;  //曲谱声部名称(适用的乐器,可能是多个,用逗号分隔)
-
-            @ApiModelProperty(value = "上传人")
-            private String userName;
-
-            @ApiModelProperty("曲目收藏数")
-            private Integer musicSheetLikeCounts;
-
-            @ApiModelProperty("1:收藏 0:未收藏")
-            private boolean favorite;
-
-            @ApiModelProperty("声谱类型,SINGLE:单曲,CONCERT:合奏")
-            private String musicSheetType;
-
-            public String jsonString() {
-                return JSON.toJSONString(this);
-            }
-
-            public static TenantAlbumMusic from(String json) {
-                return JSON.parseObject(json, TenantAlbumMusic.class);
-            }
-
-        }
-
 
     @Data
     @Builder
     @NoArgsConstructor
     @AllArgsConstructor
-    @ApiModel(" StudentMusicSheetQuery-学生端专辑曲目分页")
-    public static class StudentMusicSheetQuery implements QueryInfo {
+    @ApiModel(" TenantAlbumMusic-学生端专辑曲目返回")
+    public static class StudentTenantAlbumMusic implements QueryInfo {
+        @ApiModelProperty(value = "曲目表id")
+        private Long id;
 
-        @ApiModelProperty("当前页")
-        private Integer page;
+        @ApiModelProperty(value = "精品标志")
+        private String exquisiteFlag;
 
-        @ApiModelProperty("分页行数")
-        private Integer rows;
+        @ApiModelProperty(value = "曲谱名称")
+        private String musicSheetName;
 
-        @ApiModelProperty("曲谱表ids")
-        private List<Long> musicSheetIds;
+        @ApiModelProperty(value = "封面图")
+        private String titleImg;  //曲谱名称
 
-        @ApiModelProperty("标签")
-        private Long musicTagId;
+        @ApiModelProperty(value = "曲谱来源(平台用户ID或者是老师ID)")
+        private Long userId;  //曲谱来源(平台用户ID或者是老师ID)
 
-        @ApiModelProperty("声部id")
-        private Long subjectId;
+        @ApiModelProperty(value = "艺术家")
+        private String composer;  //音乐家
 
-        @ApiModelProperty("关键词")
-        private String keyword;
+        @ApiModelProperty(value = "曲谱声部(适用的乐器,可能是多个,用逗号分隔)")
+        private String musicSubject;  //曲谱声部(适用的乐器,可能是多个,用逗号分隔)
+
+        @ApiModelProperty(value = "曲谱声部名称(适用的乐器,可能是多个,用逗号分隔)")
+        private String musicSubjectName;  //曲谱声部名称(适用的乐器,可能是多个,用逗号分隔)
 
-        @ApiModelProperty(name = "集合")
-        private String collect;
+        @ApiModelProperty(value = "上传人")
+        private String userName;
 
+        @ApiModelProperty("曲目收藏数")
+        private Integer musicSheetLikeCounts;
 
+        @ApiModelProperty("1:收藏 0:未收藏")
+        private boolean favorite;
 
+        @ApiModelProperty("声谱类型,SINGLE:单曲,CONCERT:合奏")
+        private String musicSheetType;
 
         public String jsonString() {
             return JSON.toJSONString(this);
         }
 
-        public static StudentMusicSheetQuery from(String json) {
-            return JSON.parseObject(json, StudentMusicSheetQuery.class);
+        public static TenantAlbumMusic from(String json) {
+            return JSON.parseObject(json, TenantAlbumMusic.class);
         }
 
     }
 
-
-    }
+}

+ 91 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantGroupAlbumWrapper.java

@@ -1,9 +1,14 @@
 package com.yonge.cooleshow.biz.dal.wrapper;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
 import java.util.Optional;
 
 import lombok.AllArgsConstructor;
@@ -60,4 +65,90 @@ public class TenantGroupAlbumWrapper {
         }
 	}
 
+
+    @Data
+    @ApiModel(" BuyTenantAlbumQuery-可购买机构专辑信息查询")
+    public static class BuyTenantAlbumQuery {
+
+        @ApiModelProperty("机构ID")
+        private Long tenantId;
+
+        @ApiModelProperty("小组ID")
+        private Long tenantGroupId;
+    }
+
+
+
+        @Data
+    @ApiModel(" BuyTenantAlbum-可购买机构专辑信息")
+    public static class BuyTenantAlbum {
+
+        @ApiModelProperty("专辑ID")
+        private Long id;
+
+
+        @ApiModelProperty("专辑名称")
+        private String name;
+
+        @ApiModelProperty("专辑介绍")
+        private String describe;
+
+        @ApiModelProperty("专辑封面")
+        private String coverImg;
+
+        @ApiModelProperty("曲目数")
+        private Integer musicNum;
+
+
+        @ApiModelProperty("曲目声部分类(多个,分隔)")
+        private String subjectTypes;
+
+
+        @ApiModelProperty("采购周期类型")
+        private String purchaseTypes;
+
+
+
+        @ApiModelProperty("采购金额数据")
+        private String purchaseJson;
+
+
+        @ApiModelProperty("机构小组专辑ID ,学生购买需传参")
+        private Long tenantGroupAlbumId;
+
+        @ApiModelProperty("机构小组ID")
+        private Long tenantGroupId;
+
+
+        @ApiModelProperty("采购数量")
+        private Integer purchaseNum;
+
+        @ApiModelProperty("采购周期")
+        private String purchasePeriod;
+
+        @ApiModelProperty("原价")
+        private BigDecimal originalPrice;
+
+        @ApiModelProperty("售价")
+        private BigDecimal actualPrice;
+
+
+        @ApiModelProperty("购买次数限制")
+        private Boolean buyTimesFlag;
+
+        @ApiModelProperty("可购买次数")
+        private Integer buyTimes;
+
+        @ApiModelProperty("已购买次数")
+        private Integer buyedTimes;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static TenantGroupAlbum from(String json) {
+            return JSON.parseObject(json, TenantGroupAlbum.class);
+        }
+    }
+
 }

+ 18 - 17
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumMusicMapper.xml

@@ -26,34 +26,35 @@
         m.music_subject_ as musicSubject,
         m.title_img_ as titleImg,
         m.exquisite_flag_ as exquisiteFlag,
-        m.music_sheet_type_ as musicSheetType,
-        u.username_ as userName,
-        s.name_ as musicSubjectName
+        m.music_sheet_type_ as musicSheetType
 		FROM music_sheet m
-        left join  subject s on s.id_ = m.music_subject_
-        left join sys_user u on m.user_id_ = u.id_
+        left join tenant_album_music t on t.music_sheet_id_ = m.id_
         <where>
-            m.state_ = true
-            and m.del_flag_ = false
+            m.state_ = true and m.del_flag_ = false and t.del_flag_ = 0
             <if test="param.musicTagId != null ">
-                and m.music_tag_ = #{param.musicTagId}
+                and find_in_set(#{param.musicTagId},m.music_subject_)
             </if>
             <if test="param.subjectId != null" >
-                and m.music_subject_ = #{param.subjectId}
+                and find_in_set(#{param.subjectId},m.music_subject_)
             </if>
-            <if test="param.musicSheetIds != null and param.musicSheetIds.size != 0">
-                and m.id_ in
-                <foreach collection="param.musicSheetIds" item="item" separator="," open="(" close=")">
-                    #{item}
-                </foreach>
+            <if test="param.subjectType != null">
+                and t.subject_type_ = #{param.subjectType}
             </if>
+            <if test="param.level != null and param.level != ''">
+                and t.level_ = #{param.level}
+            </if>
+            <if test="param.type != null and param.type != ''">
+                and t.type_ = #{param.type}
+            </if>
+            <if test="param.albumId != null">
+                and t.tenant_album_id_ = #{param.albumId}
+            </if>
+
             <if test="param.keyword != null and param.keyword != ''">
                 and m.music_sheet_name_ LIKE CONCAT('%',#{param.keyword},'%')
             </if>
         </where>
-        <if test="param.musicSheetIds != null and param.musicSheetIds.size != 0">
-            order by field(m.id_,${param.collect})
-        </if>
+        order by t.sort_number_
 	</select>
     <select id="selectMusicSheetIds" resultType="java.lang.Long">
         select

+ 43 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantGroupAlbumMapper.xml

@@ -28,5 +28,47 @@
         	<include refid="baseColumns" />
 		FROM tenant_group_album t
 	</select>
-    
+
+    <select id="getBuyAlbumInfo"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper$BuyTenantAlbum">
+        SELECT
+        distinct
+            t.id_,
+        t.name_,
+        t.describe_,
+        t.cover_img_,
+        t.music_num_,
+        t.subject_types_,
+        t.purchase_types_,
+        t.purchase_json_
+        <if test="param.tenantGroupId != null">
+            ,
+            t2.id_ as tenantGroupAlbumId,
+            t2.tenant_group_id_,
+            t2.purchase_num_,
+            t2.purchase_period_,
+            t2.original_price_,
+            t2.actual_price_,
+            t2.buy_times_flag_,
+            t2.buy_times_
+        </if>
+        from tenant_album t
+
+        <if test="param.tenantGroupId != null">
+            left join tenant_group_album t2 on t2.tenant_album_id_ = t.id_
+        </if>
+        <if test="param.tenantId != null">
+            left join tenant_album_ref t1 on t1.tenant_album_id_ = t.id_
+        </if>
+        <where>
+            t.del_flag_ = 0 and t.status_ = 1
+            <if test="param.tenantId != null">
+                and t1.tenant_id_ = #{param.tenantId}
+            </if>
+            <if test="param.tenantGroupId != null">
+                and t2.status_ = 1 and t2.del_flag_ = 0
+                and t2.tenant_group_id_ = #{param.tenantGroupId}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 2 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml

@@ -21,6 +21,7 @@
             <result column="plantform_fee_rate_" property="plantformFeeRate" />
 	        <result column="create_time_" property="createTime" />
 	        <result column="update_time_" property="updateTime" />
+	        <result column="tenant_group_album_id_" property="tenantGroupAlbumId" />
 		</resultMap>
 
     <!-- 表字段 -->
@@ -43,6 +44,7 @@
         , t.plantform_fee_ as plantformFee
         , t.plantform_fee_rate_ as plantformFeeRate
         , t.account_config_ as accountConfig
+        , t.tenant_group_album_id_ as tenantGroupAlbumId
         , t.create_time_ as createTime
         , t.update_time_ as updateTime
         </sql>

+ 12 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

@@ -383,4 +383,16 @@
         user_order_detail uod ON uod.order_no_ = uo.order_no_
         WHERE pdmr.order_no_ = #{orderNo} LIMIT 1
     </select>
+
+    <select id="getStudentTenantAlbumNum" resultType="java.lang.Long">
+        select d.biz_id_
+        from user_order t
+        left join user_order_detail d on t.order_no_ = d.order_no_
+        where t.status_ in ('WAIT_PAY','PAYING','PAID') and t.order_type_ = 'TENANT_ALBUM' and d.good_type_ = 'TENANT_ALBUM'
+        and t.user_id_ = #{userId}
+        and d.tenant_group_album_id_ in
+        <foreach collection="tenantGroupAlbumIds" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </select>
 </mapper>