刘俊驰 1 year ago
parent
commit
7a9a70d8d0
25 changed files with 431 additions and 111 deletions
  1. 15 3
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/StudentController.java
  2. 1 4
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumController.java
  3. 3 7
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantGroupAlbumController.java
  4. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java
  5. 23 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/UserTenantAlbumRecordController.java
  6. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java
  7. 15 3
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/StudentController.java
  8. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantGroupAlbumMapper.java
  9. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/UserTenantAlbumRecordMapper.java
  10. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  11. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantAlbumService.java
  12. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantGroupAlbumService.java
  13. 4 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  14. 38 19
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  15. 18 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java
  16. 38 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumServiceImpl.java
  17. 41 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantGroupAlbumServiceImpl.java
  18. 5 11
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantGroupServiceImpl.java
  19. 169 35
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserTenantAlbumRecordServiceImpl.java
  20. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetVo.java
  21. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantGroupAlbumWrapper.java
  22. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UserTenantAlbumRecordWrapper.java
  23. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/music/MusicCompareWrapper.java
  24. 15 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantGroupAlbumMapper.xml
  25. 5 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserTenantAlbumRecordMapper.xml

+ 15 - 3
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/StudentController.java

@@ -38,6 +38,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -57,6 +58,7 @@ import javax.validation.Valid;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -138,8 +140,7 @@ public class StudentController extends BaseController {
             }
         }
         Long tenantAlbumPurchaseId = query.getTenantAlbumPurchaseId();
-        String tenantGroupId = query.getTenantGroupId();
-        if (tenantAlbumPurchaseId != null && StringUtils.isEmpty(tenantGroupId)) {
+        if (tenantAlbumPurchaseId != null) {
             // 查询关联这个专辑对应的小组学生
             TenantAlbumPurchase tenantAlbumPurchase = tenantAlbumPurchaseService.getById(tenantAlbumPurchaseId);
             Long tenantAlbumId = tenantAlbumPurchase.getTenantAlbumId();
@@ -148,7 +149,18 @@ public class StudentController extends BaseController {
                     .eq(TenantGroupAlbum::getDelFlag, false)
                     .eq(TenantGroupAlbum::getStatus, true)
                     .list().stream().map(TenantGroupAlbum::getTenantGroupId).map(String::valueOf).distinct().collect(Collectors.toList());
-            query.setTenantGroupId(String.join(",", tenantGroupIds));
+            if (CollectionUtils.isEmpty(tenantGroupIds)) {
+                // 没有小组
+                return succeed(PageUtil.getPageInfo(PageUtil.getPage(query), new ArrayList<>()));
+            }
+            String tenantGroupId = query.getTenantGroupId();
+            if (StringUtils.isNotEmpty(tenantGroupId)) {
+                if(!tenantGroupIds.contains(tenantGroupId)){
+                    return succeed(PageUtil.getPageInfo(PageUtil.getPage(query), new ArrayList<>()));
+                }
+            } else {
+                query.setTenantGroupId(String.join(",", tenantGroupIds));
+            }
         }
 
         IPage<StudentVo> pages = studentService.selectPage(PageUtil.getPage(query), query);

+ 1 - 4
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumController.java

@@ -272,10 +272,7 @@ public class TenantAlbumController {
     @ApiOperation(value = "启用/冻结", notes = "启用/冻结")
     @PreAuthorize("@pcs.hasPermissions('tenantAlbum/updateStatus')")
     public HttpResponseResult<Boolean> updateStatus(@Validated @RequestBody TenantAlbumVo.UpdateStatus status) {
-        tenantAlbumService.lambdaUpdate()
-                .set(TenantAlbum::getStatus, status.getStatus())
-                .eq(TenantAlbum::getId, status.getId())
-                .update();
+        tenantAlbumService.updateStatus(status.getId(), status.getStatus());
         return HttpResponseResult.succeed();
     }
 

+ 3 - 7
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantGroupAlbumController.java

@@ -101,14 +101,10 @@ public class TenantGroupAlbumController {
     }
 
     @ApiOperation(value = "删除", notes = "机构小组专辑配置表- 传入id")
-    @PreAuthorize("@pcs.hasPermissions('tenantGroupAlbum/remove', {'BACKEND'})")
+    @PreAuthorize("@pcs.hasPermissions('tenantGroupAlbum/updateStatus', {'BACKEND'})")
     @PostMapping("/updateStatus")
-    public R<Boolean> remove(@RequestBody TenantGroupAlbumWrapper.UpdateStatus updateStatus) {
-        List<Long> ids = Arrays.stream(updateStatus.getIds().split(",")).map(Long::valueOf).collect(Collectors.toList());
-        tenantGroupAlbumService.lambdaUpdate()
-                .set(TenantGroupAlbum::getStatus, updateStatus.getStatus())
-                .in(TenantGroupAlbum::getId, ids)
-                .update();
+    public R<Boolean> updateStatus(@RequestBody TenantGroupAlbumWrapper.UpdateStatus updateStatus) {
+        tenantGroupAlbumService.updateStatus(updateStatus);
         return R.from(true);
     }
 }

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java

@@ -87,7 +87,7 @@ public class MusicSheetController extends BaseController {
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入musicTag")
     public HttpResponseResult<MusicSheetDetailVo> detail(@ApiParam(value = "曲谱编号", required = true) @PathVariable("id") Long id,
-                                                         @RequestParam(required = false) Long tenantAlbumId) {
+                                                         @RequestParam(required = false) String tenantAlbumId) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
             sysUser = null;

+ 23 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/UserTenantAlbumRecordController.java

@@ -6,11 +6,16 @@ import com.microsvc.toolkit.common.response.paging.QueryInfo;
 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.entity.Student;
+import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.entity.UserTenantAlbumRecord;
+import com.yonge.cooleshow.biz.dal.service.StudentService;
+import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.service.UserTenantAlbumRecordService;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.UserTenantAlbumRecordWrapper;
 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;
@@ -27,8 +32,10 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 
 @Slf4j
 @Validated
@@ -42,6 +49,12 @@ public class UserTenantAlbumRecordController {
     @Resource
     private SysUserFeignService sysUserFeignService;
 
+    @Autowired
+    private TenantInfoService tenantInfoService;
+
+    @Autowired
+    private StudentService studentService;
+
     @ApiOperation(value = "详情", notes = "购买训练工具记录-根据详情ID查询单条, 传入id")
     @PreAuthorize("@auditsvc.hasPermissions('userTenantAlbumRecord/detail', {'BACKEND'})")
     //@GetMapping("/detail/{id}")
@@ -67,8 +80,18 @@ public class UserTenantAlbumRecordController {
     public R<List<UserTenantAlbumRecordWrapper.UserTenantAlbumRecord>> list(@RequestBody UserTenantAlbumRecordWrapper.UserTenantAlbumRecordQuery query) {
 
         SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Student student = studentService.getById(sysUser.getId());
+        if (student == null || student.getTenantId() == null || student.getTenantId() == -1L) {
+            throw new BizException("请求非法");
+        }
+        Long tenantGroupId = student.getTenantGroupId();
+        if (tenantGroupId == null || tenantGroupId == -1L) {
+            return R.from(new ArrayList<>());
+        }
         query.setUserId(sysUser.getId());
         query.setEndTime(new Date());
+        query.setTenantId(student.getTenantId());
+        query.setTenantGroupId(student.getTenantGroupId());
         return R.from(userTenantAlbumRecordService.list(query));
     }
 

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java

@@ -76,7 +76,7 @@ public class MusicSheetController extends BaseController {
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入musicTag")
     public HttpResponseResult<MusicSheetDetailVo> detail(@ApiParam(value = "曲谱编号", required = true) @PathVariable("id") Long id,
-                                                         @RequestParam(required = false) Long tenantAlbumId) {
+                                                         @RequestParam(required = false) String tenantAlbumId) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
             return failed("用户信息获取失败");

+ 15 - 3
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/StudentController.java

@@ -40,6 +40,7 @@ import com.yonge.toolset.utils.easyexcel.ExcelUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -56,6 +57,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -109,8 +111,7 @@ public class StudentController extends BaseController {
         query.setOrderBy("u.username_ asc");
 
         Long tenantAlbumPurchaseId = query.getTenantAlbumPurchaseId();
-        String tenantGroupId = query.getTenantGroupId();
-        if (tenantAlbumPurchaseId != null && StringUtils.isEmpty(tenantGroupId)) {
+        if (tenantAlbumPurchaseId != null) {
             // 查询关联这个专辑对应的小组学生
             TenantAlbumPurchase tenantAlbumPurchase = tenantAlbumPurchaseService.getById(tenantAlbumPurchaseId);
             Long tenantAlbumId = tenantAlbumPurchase.getTenantAlbumId();
@@ -119,7 +120,18 @@ public class StudentController extends BaseController {
                     .eq(TenantGroupAlbum::getDelFlag, false)
                     .eq(TenantGroupAlbum::getStatus, true)
                     .list().stream().map(TenantGroupAlbum::getTenantGroupId).map(String::valueOf).distinct().collect(Collectors.toList());
-            query.setTenantGroupId(String.join(",", tenantGroupIds));
+            if (CollectionUtils.isEmpty(tenantGroupIds)) {
+                // 没有小组
+                return succeed(PageUtil.getPageInfo(PageUtil.getPage(query), new ArrayList<>()));
+            }
+            String tenantGroupId = query.getTenantGroupId();
+            if (StringUtils.isNotEmpty(tenantGroupId)) {
+                if(!tenantGroupIds.contains(tenantGroupId)){
+                    return succeed(PageUtil.getPageInfo(PageUtil.getPage(query), new ArrayList<>()));
+                }
+            } else {
+                query.setTenantGroupId(String.join(",", tenantGroupIds));
+            }
         }
 
         IPage<StudentVo> pages = studentService.selectPage(PageUtil.getPage(query), query);

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

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.mapper;
 
 import java.util.List;
+import java.util.Map;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -26,4 +27,6 @@ public interface TenantGroupAlbumMapper extends BaseMapper<TenantGroupAlbum> {
 
 
     List<TenantGroupAlbumWrapper.BuyTenantAlbum> getBuyAlbumInfo(@Param("param") TenantGroupAlbumWrapper.BuyTenantAlbumQuery query);
+
+	List<TenantGroupAlbumWrapper.TenantGroupAlbumCount> countGroupAlbumByGroupId(@Param("ids") String ids);
 }

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

@@ -34,7 +34,7 @@ public interface UserTenantAlbumRecordMapper extends BaseMapper<UserTenantAlbumR
 
     List<TenantAlbum> selectTenantAlbumInfo(@Param("tenantIds") List<Long> tenantIds);
 
-    Long ifBuy(@Param("tenantAlbumId") Long tenantAlbumId, @Param("studentId") Long studentId);
+    List<Long> ifBuy(@Param("tenantAlbumId") List<Long> tenantAlbumId, @Param("studentId") Long studentId);
 
     List<UserTenantAlbumRecordWrapper.UserTenantAlbumRecord> selectTemporaryRecord();
 }

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

@@ -97,7 +97,7 @@ public interface MusicSheetService extends IService<MusicSheet> {
      * @param sysUser 登录用户
      * @return 曲谱信息
      */
-    MusicSheetDetailVo detail(Long id, SysUser sysUser, ClientEnum userType,Long tenantAlbumId);
+    MusicSheetDetailVo detail(Long id, SysUser sysUser, ClientEnum userType,String tenantAlbumId);
 
     /**
      * 学生端 曲目分页查询

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantAlbumService.java

@@ -79,6 +79,8 @@ public interface TenantAlbumService extends IService<TenantAlbum>  {
      */
     List<TenantAlbum> getByTenantId(Long tenantId,Boolean status);
 
+    void updateStatus(Long id, Boolean status);
+
 
     /**
      * 添加机构专辑数据

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantGroupAlbumService.java

@@ -51,4 +51,6 @@ public interface TenantGroupAlbumService extends IService<TenantGroupAlbum>  {
      * @param clientType         客户端类型
      */
     List<TenantGroupAlbumWrapper.BuyTenantAlbum> buyAlbumInfo(Long tenantGroupAlbumId, Long userId, ClientEnum clientType);
+
+    void updateStatus(TenantGroupAlbumWrapper.UpdateStatus updateStatus);
 }

+ 4 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java

@@ -485,6 +485,8 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
                 album.setTenantAlbumStatus(0);
                 return album;
             }
+
+            //TODO
             TenantAlbumMusic tenantAlbumMusic = tenantAlbumMusicList.get(0);
             tenantAlbumId = tenantAlbumMusic.getTenantAlbumId();
         } else {
@@ -506,7 +508,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
             return album;
         }
         album.setTenantAlbumStatus(2);
-
+        //TODO
         TenantAlbum tenantAlbum = list.get(0);
         //机构专辑名称
         String name = tenantAlbum.getName();
@@ -607,6 +609,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         if (CollectionUtils.isEmpty(list)){
             throw new BizException("机构专辑不存在");
         }
+        //TODO
         TenantAlbum tenantAlbum = list.get(0);
         //机构专辑名称
         String name = tenantAlbum.getName();

+ 38 - 19
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java

@@ -59,12 +59,15 @@ import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.enums.album.PurchaseRecordTypeEnum;
+import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMusicMapper;
+import com.yonge.cooleshow.biz.dal.mapper.TenantGroupAlbumMapper;
 import com.yonge.cooleshow.biz.dal.mapper.UserTenantAlbumRecordMapper;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.music.MusicCompareWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
@@ -202,6 +205,15 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     @Autowired
     private TenantAlbumService tenantAlbumService;
 
+    @Autowired
+    private UserTenantAlbumRecordService userTenantAlbumRecordService;
+
+    @Autowired
+    private TenantGroupAlbumMapper tenantGroupAlbumMapper;
+
+    @Autowired
+    private TenantAlbumMusicMapper tenantAlbumMusicMapper;
+
     public MusicSheetDao getDao() {
         return musicSheetDao;
     }
@@ -401,7 +413,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     }
 
     @Override
-    public MusicSheetDetailVo detail(Long id, SysUser sysUser, ClientEnum userType,Long tenantAlbumId) {
+    public MusicSheetDetailVo detail(Long id, SysUser sysUser, ClientEnum userType,String tenantAlbumId) {
 
         MusicSheetDetailVo detail = baseMapper.detail(id);
         if (detail == null) {
@@ -437,7 +449,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
             String reason = musicSheetAuthRecordService.selectAuditReason(id);
             detail.setReason(reason);
         }
-        if (tenantAlbumId == null) {
+        if (StringUtil.isEmpty(tenantAlbumId)) {
             if (detail.getPaymentType().contains(ChargeTypeEnum.FREE.getCode())) {
                 detail.setPlay(YesOrNoEnum.YES);
             } else if (ClientEnum.STUDENT.getCode().equals(userType.getCode())
@@ -454,12 +466,15 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         } else {
             // 机构专辑购买
             detail.setPlay(YesOrNoEnum.NO);
+            List<Long> collected = Arrays.stream(tenantAlbumId.split(",")).map(Long::parseLong).collect(Collectors.toList());
 
             // 学生生效中的机构专辑
             if (ClientEnum.STUDENT == userType) {
                 List<Long> tenantAlbumIds = userTenantAlbumRecordMapper.selectTenantIds(sysUser.getId());
-                if (CollectionUtils.isNotEmpty(tenantAlbumIds) && tenantAlbumIds.contains(tenantAlbumId)) {
-                    List<Long> musicSheetIds = tenantAlbumMusicService.getMusicIdsByIds(Lists.newArrayList(tenantAlbumId));
+                if (CollectionUtils.isNotEmpty(tenantAlbumIds)) {
+                    // tenantAlbumIds collected 取交集到 新的集合
+                    List<Long> collect = tenantAlbumIds.stream().filter(collected::contains).collect(Collectors.toList());
+                    List<Long> musicSheetIds = tenantAlbumMusicService.getMusicIdsByIds(collect);
                     if (CollectionUtils.isNotEmpty(musicSheetIds) && musicSheetIds.contains(detail.getId())) {
                         detail.setPlay(YesOrNoEnum.YES);
                     }
@@ -1902,26 +1917,26 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         if (student == null) {
             throw new BizException("学生不存在");
         }
-        if (student.getTenantId() == null || student.getTenantId() == -1) {
-            throw new BizException("学生未绑定机构");
+        if (student.getTenantId() == null || student.getTenantId() == -1 || student.getTenantGroupId() == null) {
+            return searchData;
         }
-        // 查询机构下的专辑
-        List<TenantAlbum> albumList = tenantAlbumService.getByTenantId(student.getTenantId(), true);
-        List<Long> albumIds = new ArrayList<>();
-        if (CollectionUtils.isNotEmpty(albumList)) {
-            albumIds = albumList.stream().map(TenantAlbum::getId).distinct().collect(Collectors.toList());
+        // 查询机构 小组下的专辑
+        TenantGroupAlbumWrapper.BuyTenantAlbumQuery query = new TenantGroupAlbumWrapper.BuyTenantAlbumQuery();
+        query.setTenantGroupId(student.getTenantGroupId());
+
+        List<TenantGroupAlbumWrapper.BuyTenantAlbum> buyAlbumInfo = tenantGroupAlbumMapper.getBuyAlbumInfo(query);
+        List<Long> albumIds;
+        if (CollectionUtils.isNotEmpty(buyAlbumInfo)) {
+            albumIds = buyAlbumInfo.stream().map(TenantGroupAlbumWrapper.BuyTenantAlbum::getId).distinct().collect(Collectors.toList());
         } else {
             return searchData;
         }
 
-//        List<UserTenantAlbumRecord> recordList = userTenantAlbumRecordService
-//                .getNewestByTenantIdAndUserId(student.getTenantId(), queryInfo.getUserId(), ClientEnum.STUDENT, albumIds);
-//
-//        if (CollectionUtils.isNotEmpty(recordList)) {
-//            albumIds = recordList.stream().map(UserTenantAlbumRecord::getTenantAlbumId).distinct().collect(Collectors.toList());
-//        } else {
-//            return searchData;
-//        }
+        List<TenantAlbumMusic> list = tenantAlbumMusicMapper.getByAlbumAndEnable(albumIds);
+        // 根据曲目ID分组
+        Map<Long, List<Long>> map = list.stream()
+            .collect(Collectors.groupingBy(TenantAlbumMusic::getMusicSheetId, Collectors.mapping(TenantAlbumMusic::getTenantAlbumId, Collectors.toList())));
+
         queryInfo.setTenantAlbumIds(albumIds);
 
         // 查询曲目列表
@@ -1941,8 +1956,12 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
                     musicName.setType("MUSIC");
                     musicName.setHotFlag(record.getHotFlag() != null?record.getHotFlag():YesOrNoEnum.NO);
                     musicName.setSort(Optional.ofNullable(record.getFavoriteCount()).orElse(0));
+                    musicName.setTenantAlbumId(Optional.ofNullable(map.get(record.getId())).orElse(new ArrayList<>()).stream().map(String::valueOf).collect(Collectors.joining(",")));
                     musicNames.add(musicName);
+                    record.setTenantAlbumId(Optional.ofNullable(map.get(record.getId())).orElse(new ArrayList<>()).stream().map(String::valueOf).collect(Collectors.joining(",")));
+
                 }
+                musicSheetVoIPage.setRecords(records);
                 searchData.setMusic(PageUtil.pageInfo(musicSheetVoIPage));
             }
 

+ 18 - 12
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java

@@ -215,22 +215,28 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         if (code == null) {
             throw new BizException("激活码不存在");
         }
+
+        // 线下发放,有账号,则校验机构
+        if (EActivationCode.WAIT.equals(code.getSendStatus())) {
+            // 校验该激活码的来源小组专辑是否和该学生的小组是一致
+            Long tenantAlbumId = code.getTenantAlbumId();
+            List<Long> tenantGroupIds = tenantGroupAlbumService.lambdaQuery()
+                    .eq(TenantGroupAlbum::getTenantAlbumId, tenantAlbumId)
+                    .eq(TenantGroupAlbum::getStatus, true)
+                    .eq(TenantGroupAlbum::getDelFlag, false)
+                    .list().stream().map(TenantGroupAlbum::getTenantGroupId).distinct().collect(Collectors.toList());
+            if (!tenantGroupIds.contains(student.getTenantGroupId())) {
+                throw new BizException("激活码不可用");
+            }
+        }
+
         SysUser sysUser = sysUserService.getDao().selectById(studentId);
+        // 如果码已经激活或者发放给别人
         if (Boolean.TRUE.equals(code.getActivationStatus()) || (EActivationCode.SEND.equals(code.getSendStatus()) &&
                 !sysUser.getPhone().equals(code.getActivationPhone()))) {
             throw new BizException("激活码已经被使用");
         }
 
-        // 校验该激活码的来源小组专辑是否和该学生改的小组是一致
-        Long tenantAlbumId = code.getTenantAlbumId();
-        List<Long> tenantGroupIds = tenantGroupAlbumService.lambdaQuery()
-                .eq(TenantGroupAlbum::getTenantAlbumId, tenantAlbumId)
-                .eq(TenantGroupAlbum::getStatus, true)
-                .eq(TenantGroupAlbum::getDelFlag, false)
-                .list().stream().map(TenantGroupAlbum::getTenantGroupId).distinct().collect(Collectors.toList());
-        if (!tenantGroupIds.contains(student.getTenantGroupId())) {
-            throw new BizException("激活码不可用");
-        }
 
         // 通过状态和ID同时判断更新是否存在竞争
         boolean update = this.lambdaUpdate()
@@ -547,8 +553,8 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
             String phone = template.getPhone();
             if (StringUtils.isNotEmpty(phone)) {
                 if (!Pattern.matches(PHONE_REG, phone.trim()) ||
-                        (mapStudentByPhone.containsKey(phone) && (!mapStudentByPhone.get(phone).getTenantId().equals(tenantId)) ||
-                                tenantGroupIds.contains(mapStudentByPhone.get(phone).getTenantGroupId()))) {
+                        (mapStudentByPhone.containsKey(phone) && ((!mapStudentByPhone.get(phone).getTenantId().equals(tenantId)) ||
+                                !tenantGroupIds.contains(mapStudentByPhone.get(phone).getTenantGroupId())))) {
                     phone_err_lines.add(msgRowNo);
                 }
             }

+ 38 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumServiceImpl.java

@@ -1,17 +1,22 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
-import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.beust.jcommander.internal.Lists;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.UserOrderDao;
 import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.enums.*;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
+import com.yonge.cooleshow.biz.dal.mapper.TenantGroupAlbumMapper;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
@@ -30,8 +35,15 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.*;
-import java.util.concurrent.CompletableFuture;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
@@ -97,6 +109,9 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
     @Autowired
     private UserOrderDao userOrderDao;
 
+    @Autowired
+    private TenantGroupAlbumMapper tenantGroupAlbumMapper;
+
     /**
      * 查询详情
      *
@@ -620,6 +635,24 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
 
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void updateStatus(Long id, Boolean status) {
+        tenantAlbumService.lambdaUpdate()
+                .set(TenantAlbum::getStatus, status)
+                .eq(TenantAlbum::getId, id)
+                .update();
+
+        if (Boolean.FALSE.equals(status)) {
+            UpdateWrapper<TenantGroupAlbum> queryWrapper = new UpdateWrapper<>();
+            queryWrapper.lambda()
+                    .set(TenantGroupAlbum::getStatus, false)
+                    .eq(TenantGroupAlbum::getTenantAlbumId, id)
+                    .eq(TenantGroupAlbum::getDelFlag, false);
+            tenantGroupAlbumMapper.update(null, queryWrapper);
+        }
+    }
+
     private void insertAlbumMusic(Long tenantId, TenantAlbum tenantAlbum,
                                   List<TenantAlbumWrapper.MusicSheetData> musicSheetDataList) {
         //曲目表赋值

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

@@ -4,19 +4,30 @@ 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.*;
+import com.yonge.cooleshow.biz.dal.entity.Student;
+import com.yonge.cooleshow.biz.dal.entity.Teacher;
+import com.yonge.cooleshow.biz.dal.entity.TenantAlbum;
+import com.yonge.cooleshow.biz.dal.entity.TenantAlbumMusic;
+import com.yonge.cooleshow.biz.dal.entity.TenantGroupAlbum;
+import com.yonge.cooleshow.biz.dal.entity.TenantStaff;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMusicMapper;
-import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.mapper.TenantGroupAlbumMapper;
+import com.yonge.cooleshow.biz.dal.service.StudentService;
+import com.yonge.cooleshow.biz.dal.service.TeacherService;
+import com.yonge.cooleshow.biz.dal.service.TenantAlbumService;
+import com.yonge.cooleshow.biz.dal.service.TenantGroupAlbumService;
+import com.yonge.cooleshow.biz.dal.service.TenantStaffService;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper;
 import com.yonge.toolset.base.exception.BizException;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import lombok.extern.slf4j.Slf4j;
-import com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper;
-import com.yonge.cooleshow.biz.dal.mapper.TenantGroupAlbumMapper;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -44,6 +55,9 @@ public class TenantGroupAlbumServiceImpl extends ServiceImpl<TenantGroupAlbumMap
     @Autowired
     private TeacherService teacherService;
 
+    @Autowired
+    private TenantAlbumService tenantAlbumService;
+
 	/**
      * 查询详情
      * @param id 详情ID
@@ -160,4 +174,26 @@ public class TenantGroupAlbumServiceImpl extends ServiceImpl<TenantGroupAlbumMap
 
         return buyAlbumInfo;
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void updateStatus(TenantGroupAlbumWrapper.UpdateStatus updateStatus) {
+        List<Long> ids = Arrays.stream(updateStatus.getIds().split(",")).map(Long::valueOf).collect(Collectors.toList());
+        List<TenantGroupAlbum> tenantGroupAlbumList = this.lambdaQuery().in(TenantGroupAlbum::getId, ids).list();
+        if (CollectionUtils.isEmpty(tenantGroupAlbumList)) {
+            return;
+        }
+        List<Long> tenantAlbumIds = tenantGroupAlbumList.stream().map(TenantGroupAlbum::getTenantAlbumId).distinct().collect(Collectors.toList());
+        List<TenantAlbum> list = tenantAlbumService.lambdaQuery()
+                .in(TenantAlbum::getId, tenantAlbumIds)
+                .eq(TenantAlbum::getDelFlag, false)
+                .list();
+        if (list.stream().anyMatch(next -> Boolean.FALSE.equals(next.getStatus()))) {
+            throw new BizException("专辑已经停用");
+        }
+        this.lambdaUpdate()
+                .set(TenantGroupAlbum::getStatus, updateStatus.getStatus())
+                .in(TenantGroupAlbum::getId, ids)
+                .update();
+    }
 }

+ 5 - 11
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantGroupServiceImpl.java

@@ -33,6 +33,7 @@ import com.yonge.cooleshow.biz.dal.service.TenantGroupService;
 import com.yonge.cooleshow.biz.dal.service.im.ImGroupCoreService;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.biz.dal.wrapper.StudentWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantGroupWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
 import com.yonge.toolset.base.exception.BizException;
@@ -118,17 +119,10 @@ public class TenantGroupServiceImpl extends ServiceImpl<TenantGroupMapper, Tenan
             List<Long> adminIdList = records.stream().map(TenantGroupWrapper.TenantGroup::getAdminId).distinct().collect(Collectors.toList());
             Map<Long, com.yonge.cooleshow.biz.dal.entity.SysUser> mapByIds = sysUserService.getMapByIds(adminIdList);
 
-            List<Long> ids = records.stream().map(TenantGroupWrapper.TenantGroup::getId).collect(Collectors.toList());
-            QueryWrapper<TenantGroupAlbum> queryWrapper = new QueryWrapper<>();
-            queryWrapper.select("count(*) as count,tenant_group_id_ as tenantGroupId");
-            queryWrapper.lambda().in(TenantGroupAlbum::getTenantGroupId, ids);
-            queryWrapper.groupBy("tenant_group_id_");
-            List<Map<String, Object>> maps = tenantGroupAlbumMapper.selectMaps(queryWrapper);
-            Map<Long, Integer> countByGroupId = new HashMap<>();
-            maps.forEach(next -> {
-                JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(next));
-                countByGroupId.put(jsonObject.getLong("tenantGroupId"), jsonObject.getInteger("count"));
-            });
+            String ids = records.stream().map(TenantGroupWrapper.TenantGroup::getId).map(String::valueOf).collect(Collectors.joining(","));
+            Map<Long, Integer> countByGroupId = tenantGroupAlbumMapper.countGroupAlbumByGroupId(ids).stream().collect(Collectors.toMap(TenantGroupAlbumWrapper.TenantGroupAlbumCount::getTenantGroupId
+                    , TenantGroupAlbumWrapper.TenantGroupAlbumCount::getCount));
+
             for (TenantGroupWrapper.TenantGroup record : records) {
                 record.setGroupUserCount(groupBy.getOrDefault(record.getId(), 0));
                 record.setImGroupExist(existImgGroupIds.contains(record.getImGroupId()));

+ 169 - 35
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserTenantAlbumRecordServiceImpl.java

@@ -15,15 +15,12 @@ import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
 import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
-import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
-import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
-import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumPurchaseMapper;
-import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumRefMapper;
-import com.yonge.cooleshow.biz.dal.mapper.TenantInfoMapper;
+import com.yonge.cooleshow.biz.dal.mapper.*;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.mybatis.support.PageUtil;
@@ -31,13 +28,13 @@ import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import com.yonge.toolset.utils.obj.ObjectUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.Nullable;
 import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.BeanUtils;
 import lombok.extern.slf4j.Slf4j;
 import com.yonge.cooleshow.biz.dal.wrapper.UserTenantAlbumRecordWrapper;
-import com.yonge.cooleshow.biz.dal.mapper.UserTenantAlbumRecordMapper;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
@@ -103,6 +100,15 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
     @Autowired
     private TenantInfoMapper tenantInfoMapper;
 
+    @Autowired
+    private TenantGroupAlbumService tenantGroupAlbumService;
+
+
+    @Autowired
+    private TenantGroupAlbumMapper tenantGroupAlbumMapper;
+
+    @Autowired
+    private TenantAlbumMusicMapper tenantAlbumMusicMapper;
     /**
      * 查询详情
      *
@@ -386,26 +392,40 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
         if (sysUser == null) {
             throw new BizException("用户不存在");
         }
+        List<Long>  tenantAlbumIds = new ArrayList<>();
         Long tenantAlbumId;
+
         if (StringUtils.isEmpty(albumId)) {
             Long id = sysUser.getId();
-            List<Student> list = studentService.lambdaQuery().eq(Student::getUserId, id).list();
-            if (CollectionUtils.isEmpty(list)) {
-                throw new BizException("学生账号未找到");
-            }
-            Student student = list.get(0);
+            Student student = studentService.getById(id);
             //获取机构Id
             Long tenantId = student.getTenantId();
-            //查询对应专辑id
-            List<TenantAlbumMusic> tenantAlbumMusicList = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantId, tenantId)
-                    .eq(TenantAlbumMusic::getDelFlag, false).list();
-            if (CollectionUtils.isEmpty(tenantAlbumMusicList)) {
-                return null;
+
+            // 如果没有小组, 就没有专辑
+            if (student.getTenantGroupId() == null || tenantId ==null || tenantId <=0) {
+
+                album.setTenantAlbumStatus(0);
+                album.setTenantAlbumFlag(YesOrNoEnum.NO);
+                return album;
+            } else {
+                //查询对应小组专辑id
+                List<TenantGroupAlbum> list = tenantGroupAlbumService.lambdaQuery()
+                    .eq(TenantGroupAlbum::getTenantGroupId, student.getTenantGroupId())
+                    .eq(TenantGroupAlbum::getDelFlag, false)
+                    .eq(TenantGroupAlbum::getStatus, true)
+                    .list();
+                if (CollectionUtils.isEmpty(list)) {
+                    album.setTenantAlbumStatus(0);
+                    album.setTenantAlbumFlag(YesOrNoEnum.NO);
+                    return album;
+                }
+                // 专辑ID集合
+                tenantAlbumIds = list.stream().map(TenantGroupAlbum::getTenantAlbumId).distinct().collect(Collectors.toList());
+
+                return getTenantAlbum(sysUser, album, tenantAlbumIds);
             }
-            TenantAlbumMusic tenantAlbumMusic = tenantAlbumMusicList.get(0);
-            tenantAlbumId = tenantAlbumMusic.getTenantAlbumId();
         } else {
-            //如果传专辑id   则查询这个专辑的详情
+            tenantAlbumIds.add(Long.parseLong(albumId));
             tenantAlbumId = Long.parseLong(albumId);
         }
         //获取对应机构专辑状态
@@ -427,15 +447,15 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
                 List<Long> albIds = albumRefs.stream().map(TenantAlbumRef::getTenantAlbumId).distinct().collect(Collectors.toList());
                 QueryWrapper<TenantAlbum> query = new QueryWrapper<>();
                 query.lambda().in(TenantAlbum::getId, albIds)
-                        .eq(TenantAlbum::getStatus, true);
+                    .eq(TenantAlbum::getStatus, true);
                 Integer count = tenantAlbumMapper.selectCount(query);
                 if (count > 0) {
                     album.setTenantAlbumStatus(1);
                 }
             }
             UserTenantAlbumRecord record =
-                    userTenantAlbumRecordService.getNewestByTenantIdAndUserId(tenantInfo.getId(), detail.getUserId(),
-                            ClientEnum.STUDENT);
+                userTenantAlbumRecordService.getNewestByTenantIdAndUserId(tenantInfo.getId(), detail.getUserId(),
+                    ClientEnum.STUDENT);
             if (record == null || record.getEndTime().getTime() < System.currentTimeMillis()) {
                 album.setTenantAlbumFlag(YesOrNoEnum.NO);
             } else {
@@ -448,13 +468,9 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
 
 
         //查询是否已经购买专辑
-        Long buyTenantAlbumId = userTenantAlbumRecordMapper.ifBuy(tenantAlbumId, sysUser.getId());
+        List<Long> buyTenantAlbumId = userTenantAlbumRecordMapper.ifBuy(Lists.newArrayList(tenantAlbumId), sysUser.getId());
 
-        if (buyTenantAlbumId != null) {
-            album.setIfBuy(true);
-        } else {
-            album.setIfBuy(false);
-        }
+        album.setIfBuy(CollectionUtils.isNotEmpty(buyTenantAlbumId));
 
 
         //查询对应专辑的详情
@@ -473,30 +489,30 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
         //计算符合条件的个数
         if (CollectionUtils.isNotEmpty(MusicSheetIds)) {
             size = musicSheetService.lambdaQuery().in(MusicSheet::getId, MusicSheetIds).eq(MusicSheet::getState, true)
-                    .eq(MusicSheet::getDelFlag, false).count();
+                .eq(MusicSheet::getDelFlag, false).count();
         }
         //Integer musicNum = tenantAlbum.getMusicNum();
 
         //获取合奏曲目数量
         List<TenantAlbumMusic> ensembleLits = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getSubjectType, "ENSEMBLE")
-                .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
-                .eq(TenantAlbumMusic::getDelFlag, false).list();
+            .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
+            .eq(TenantAlbumMusic::getDelFlag, false).list();
         List<Long> ensembleMusicSheetIds = ensembleLits.stream().map(TenantAlbumMusic::getMusicSheetId).distinct().collect(Collectors.toList());
 
         album.setEnsembleCounts(ensembleMusicSheetIds.size());
 
         //获取小曲目的曲目数量
         List<TenantAlbumMusic> musicLists = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getSubjectType, "MUSIC")
-                .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
-                .eq(TenantAlbumMusic::getDelFlag, false).list();
+            .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
+            .eq(TenantAlbumMusic::getDelFlag, false).list();
         List<Long> musicSheetIds = musicLists.stream().map(TenantAlbumMusic::getMusicSheetId).distinct().collect(Collectors.toList());
 
         album.setMusicCounts(musicSheetIds.size());
 
         //获取声部的曲目数量
         List<TenantAlbumMusic> subjectLists = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getSubjectType, "SUBJECT")
-                .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
-                .eq(TenantAlbumMusic::getDelFlag, false).list();
+            .eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
+            .eq(TenantAlbumMusic::getDelFlag, false).list();
         List<Long> subjectSheetIds = subjectLists.stream().map(TenantAlbumMusic::getMusicSheetId).distinct().collect(Collectors.toList());
 
         album.setSubjectCounts(subjectSheetIds.size());
@@ -525,6 +541,107 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
         return album;
     }
 
+    @Nullable
+    private TenantAlbumWrapper.TenantAlbum getTenantAlbum(SysUser sysUser, TenantAlbumWrapper.TenantAlbum album, List<Long> tenantAlbumIds) {
+        StudentVo detail = detailStudent(sysUser.getId());
+
+        // 判断是否是机构学生 机构学生 检测机构专辑购买记录
+        TenantInfo tenantInfo = tenantInfoService.detail(detail.getTenantId());
+        if (tenantInfo == null) {
+            return album;
+        }
+
+        // 判断小组有没有曲目 ,小组有曲目有专辑
+        TenantGroupAlbumWrapper.BuyTenantAlbumQuery query = new TenantGroupAlbumWrapper.BuyTenantAlbumQuery();
+        query.setTenantAlbumIds(tenantAlbumIds);
+        List<TenantGroupAlbumWrapper.BuyTenantAlbum> buyAlbumInfo = tenantGroupAlbumMapper.getBuyAlbumInfo(query);
+        if (CollectionUtils.isNotEmpty(buyAlbumInfo)) {
+            album.setTenantAlbumStatus(1);
+        }  else {
+            album.setTenantAlbumStatus(0);
+            return album;
+        }
+
+        tenantAlbumIds = buyAlbumInfo.stream().map(TenantGroupAlbumWrapper.BuyTenantAlbum::getId).collect(Collectors.toList());
+
+        //获取对应机构专辑状态
+        List<TenantAlbum> albumList = tenantAlbumService.lambdaQuery()
+            .in(TenantAlbum::getId, tenantAlbumIds)
+            .list();
+        if (CollectionUtils.isEmpty(albumList)) {
+            throw new BizException("专辑不存在");
+        }
+        //查询是否已经购买专辑
+        List<Long> ifedBuy = userTenantAlbumRecordMapper.ifBuy(tenantAlbumIds, sysUser.getId());
+
+        if (CollectionUtils.isNotEmpty(ifedBuy)) {
+            album.setIfBuy(true);
+            album.setTenantAlbumStatus(2);
+            tenantAlbumIds = ifedBuy;
+        } else {
+            album.setIfBuy(false);
+        }
+
+
+        //查询对应专辑的详情
+//        TenantAlbum tenantAlbum = albumList.get(0);
+        //机构专辑曲目数
+
+        List<TenantAlbumMusic> list = tenantAlbumMusicMapper.getByAlbumAndEnable(tenantAlbumIds);
+        // 根据专辑ID分组 在根据声部分类 分组
+        Map<Long, Map<SubjectTypeEnum, Long>> map = list.stream()
+            .collect(Collectors.groupingBy(TenantAlbumMusic::getTenantAlbumId, Collectors.groupingBy(TenantAlbumMusic::getSubjectType,Collectors.counting())));
+
+        Set<String> subjectTypes = new HashSet<>();
+
+        int size = 0;
+        int musicSize = 0;
+        int ensembleSize = 0;
+        int subjectSize = 0;
+        for (TenantGroupAlbumWrapper.BuyTenantAlbum buyTenantAlbum : buyAlbumInfo) {
+            Map<SubjectTypeEnum, Long> subjectTypeEnumLongMap = map.get(buyTenantAlbum.getId());
+            if (subjectTypeEnumLongMap != null) {
+                buyTenantAlbum.setMusicCounts(subjectTypeEnumLongMap.getOrDefault(SubjectTypeEnum.MUSIC,0L).intValue());
+                buyTenantAlbum.setEnsembleCounts(subjectTypeEnumLongMap.getOrDefault(SubjectTypeEnum.ENSEMBLE,0L).intValue());
+                buyTenantAlbum.setSubjectCounts(subjectTypeEnumLongMap.getOrDefault(SubjectTypeEnum.SUBJECT,0L).intValue());
+            } else {
+                buyTenantAlbum.setMusicCounts(0);
+                buyTenantAlbum.setEnsembleCounts(0);
+                buyTenantAlbum.setSubjectCounts(0);
+            }
+            buyTenantAlbum.setMusicNum(buyTenantAlbum.getMusicCounts() + buyTenantAlbum.getEnsembleCounts()+buyTenantAlbum.getSubjectCounts());
+            if (buyTenantAlbum.getMusicNum() > 0) {
+                subjectTypes.add(SubjectTypeEnum.MUSIC.name());
+            }
+            if (buyTenantAlbum.getEnsembleCounts() > 0) {
+                subjectTypes.add(SubjectTypeEnum.ENSEMBLE.name());
+            }
+            if (buyTenantAlbum.getSubjectCounts() > 0) {
+                subjectTypes.add(SubjectTypeEnum.SUBJECT.name());
+            }
+            size += buyTenantAlbum.getMusicNum();
+            musicSize += buyTenantAlbum.getMusicCounts();
+            ensembleSize += buyTenantAlbum.getEnsembleCounts();
+            subjectSize += buyTenantAlbum.getSubjectCounts();
+
+        }
+
+        //机构专辑简介
+        album.setEnsembleCounts(ensembleSize);
+        album.setMusicCounts(musicSize);
+        album.setSubjectCounts(subjectSize);
+//        album.setId(String.valueOf(tenantAlbum.getId()));
+//        album.setName(tenantAlbum.getName());
+//        album.setCoverImg(tenantAlbum.getCoverImg());
+        album.setMusicNum(size);
+//        album.setDescribe(tenantAlbum.getDescribe());
+        album.setSubjectTypes(subjectTypes.stream().collect(Collectors.joining(",")));
+//        album.setCostPrice(tenantAlbum.getCostPrice());
+//        album.setPurchaseCycle(tenantAlbum.getPurchaseCycle());
+//        album.setSalePrice(tenantAlbum.getSalePrice());
+        return album;
+    }
+
     @Override
     public void sendTenantAlbumMessage() {
         List<UserTenantAlbumRecordWrapper.UserTenantAlbumRecord> userTenantAlbumRecords = baseMapper.selectTemporaryRecord();
@@ -564,9 +681,26 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
 
     @Override
     public List<UserTenantAlbumRecordWrapper.UserTenantAlbumRecord> list(UserTenantAlbumRecordWrapper.UserTenantAlbumRecordQuery query) {
+
+        List<Long> tenantAlbumIdList = new ArrayList<>();
+        Long tenantGroupId = query.getTenantGroupId();
+        if (tenantGroupId != null) { // 学生只看当前就够的专辑列表
+            QueryWrapper<TenantGroupAlbum> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda()
+                    .eq(TenantGroupAlbum::getTenantGroupId, tenantGroupId);
+//                    .eq(TenantGroupAlbum::getDelFlag, false)
+//                    .eq(TenantGroupAlbum::getStatus, true);
+            List<TenantGroupAlbum> tenantGroupAlbums = tenantGroupAlbumMapper.selectList(queryWrapper);
+            if (CollectionUtils.isEmpty(tenantGroupAlbums)) {
+                return new ArrayList<>();
+            }
+            tenantAlbumIdList = tenantGroupAlbums.stream().map(TenantGroupAlbum::getTenantAlbumId).distinct().collect(Collectors.toList());
+        }
+
         List<UserTenantAlbumRecord> list = this.lambdaQuery()
                 .eq(UserTenantAlbumRecord::getUserId, query.getUserId())
                 .ge(query.getEndTime() != null, UserTenantAlbumRecord::getEndTime, query.getEndTime())
+                .in(CollectionUtils.isNotEmpty(tenantAlbumIdList), UserTenantAlbumRecord::getTenantAlbumId, tenantAlbumIdList)
                 .list();
         if (list.size() == 0) {
             return new ArrayList<>();

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetVo.java

@@ -41,6 +41,17 @@ public class MusicSheetVo extends MusicSheet {
     @ApiModelProperty("曲目来源名")
     private String  sourceName;
 
+    @ApiModelProperty("机构专辑ID,逗号隔开")
+    private String tenantAlbumId;
+
+    public String getTenantAlbumId() {
+        return tenantAlbumId;
+    }
+
+    public void setTenantAlbumId(String tenantAlbumId) {
+        this.tenantAlbumId = tenantAlbumId;
+    }
+
     public String getSourceName() {
         return sourceName;
     }

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

@@ -13,6 +13,7 @@ import org.apache.commons.lang3.StringUtils;
 import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 import java.util.Optional;
 
 /**
@@ -189,6 +190,9 @@ public class TenantGroupAlbumWrapper {
 
         @ApiModelProperty("机构小组专辑ID")
         private Long tenantGroupAlbumId;
+
+        @ApiModelProperty("专辑ID集合")
+        private List<Long> tenantAlbumIds;
     }
 
 
@@ -274,4 +278,13 @@ public class TenantGroupAlbumWrapper {
         }
     }
 
+
+    @Data
+    public static class TenantGroupAlbumCount {
+
+        private Long tenantGroupId;
+
+        private Integer count;
+    }
+
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UserTenantAlbumRecordWrapper.java

@@ -57,6 +57,9 @@ public class UserTenantAlbumRecordWrapper {
         @ApiModelProperty("机构ID")
         private Long tenantId;
 
+        @ApiModelProperty("小组ID")
+        private Long tenantGroupId;
+
         
         public String getKeyword() {
             return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/music/MusicCompareWrapper.java

@@ -438,5 +438,8 @@ public class MusicCompareWrapper {
 
         @ApiModelProperty("排序")
         private Integer sort = 0;
+
+        @ApiModelProperty("机构专辑ID,逗号隔开")
+        private String tenantAlbumId;
     }
 }

+ 15 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantGroupAlbumMapper.xml

@@ -90,6 +90,21 @@
                     and t2.id_ = #{param.tenantGroupAlbumId}
                 </if>
             </if>
+            <if test="param.tenantAlbumIds != null and param.tenantAlbumIds.size() != 0">
+                and t.id_ in
+                <foreach collection="param.tenantAlbumIds" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
         </where>
     </select>
+
+    <select id="countGroupAlbumByGroupId" resultType="com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper$TenantGroupAlbumCount">
+        select t.tenant_group_id_ as tenantGroupId, count(1) as count
+        from tenant_group_album t
+        where find_in_set(t.tenant_group_id_, #{ids})
+          and t.del_flag_ = 0
+          and t.status_ = 1
+        group by t.tenant_group_id_
+    </select>
 </mapper>

+ 5 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserTenantAlbumRecordMapper.xml

@@ -65,8 +65,11 @@
         from user_tenant_album_record
         <where>
             end_time_ > now()
-            <if test="tenantAlbumId != null">
-                and tenant_album_id_ = #{tenantAlbumId}
+            <if test="tenantAlbumId != null and tenantAlbumId.size() != 0">
+                and tenant_album_id_ in
+                <foreach collection="tenantAlbumId" item="item" separator="," open="(" close=")">
+                    #{item}
+                </foreach>
             </if>
             <if test="studentId != null">
                 and user_id_ = #{studentId}