Prechádzať zdrojové kódy

Merge branch 'develop-new' of http://git.dayaedu.com/yonge/cooleshow into develop-new

刘俊驰 1 rok pred
rodič
commit
e4ecd05c3e
47 zmenil súbory, kde vykonal 1345 pridanie a 343 odobranie
  1. 0 17
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumController.java
  2. 114 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantGroupAlbumController.java
  3. 6 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/io/request/TenantAlbumVo.java
  4. 10 5
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/TenantAlbumSheetController.java
  5. 47 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/TenantGroupAlbumController.java
  6. 1 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/vo/UserPaymentOrderVo.java
  7. 3 2
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TenantAlbumSheetController.java
  8. 3 2
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumSheetController.java
  9. 46 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantGroupAlbumController.java
  10. 13 18
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java
  11. 3 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/vo/StudentVo.java
  12. 0 16
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumController.java
  13. 10 10
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/TenantAlbumVo.java
  14. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDao.java
  15. 13 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAlbum.java
  16. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAlbumPurchase.java
  17. 86 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantGroupAlbum.java
  18. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderDetail.java
  19. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/PeriodEnum.java
  20. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantAlbumMusicMapper.java
  21. 29 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantGroupAlbumMapper.java
  22. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomService.java
  23. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysMessageService.java
  24. 54 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantGroupAlbumService.java
  25. 59 53
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java
  26. 7 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java
  27. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMessageServiceImpl.java
  28. 27 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java
  29. 60 78
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumMusicServiceImpl.java
  30. 74 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumServiceImpl.java
  31. 127 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantGroupAlbumServiceImpl.java
  32. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantGroupServiceImpl.java
  33. 49 99
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumMusicWrapper.java
  34. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumPurchaseWrapper.java
  35. 18 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumWrapper.java
  36. 268 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantGroupAlbumWrapper.java
  37. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantGroupWrapper.java
  38. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UserPaymentOrderWrapper.java
  39. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumMapper.xml
  40. 18 17
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumMusicMapper.xml
  41. 1 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumPurchaseMapper.xml
  42. 95 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantGroupAlbumMapper.xml
  43. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml
  44. 12 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml
  45. 1 1
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/TenantAlbumSheetController.java
  46. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TenantAlbumSheetController.java
  47. 1 1
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumSheetController.java

+ 0 - 17
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumController.java

@@ -180,7 +180,6 @@ public class TenantAlbumController {
                 }
 
             });
-            tenantAlbumSheets =tenantAlbumSheets.stream().filter(o -> o.getMusicSheetName() != null).collect(Collectors.toList());
 
 
             sheetData.setTenantAlbumSheetList(tenantAlbumSheets);
@@ -199,13 +198,6 @@ public class TenantAlbumController {
     @ApiOperation(value = "新增专辑", notes = "新增专辑")
     @PreAuthorize("@pcs.hasPermissions('tenantAlbum/save')")
     public HttpResponseResult<Boolean> save(@Validated @RequestBody TenantAlbumVo.TenantAlbum album) {
-        //判断当前机构是否已经绑定机构专辑
-        List<TenantAlbumRef> list = tenantAlbumRefService.lambdaQuery()
-                .eq(TenantAlbumRef::getTenantId, album.getTenantId())
-                .list();
-        if (CollectionUtils.isNotEmpty(list)) {
-            throw new BizException("当前机构已有专辑");
-        }
 
         // 检查曲目重复
         if (CollectionUtils.isNotEmpty(album.getMusicSheetData())) {
@@ -244,15 +236,6 @@ public class TenantAlbumController {
     @PreAuthorize("@pcs.hasPermissions('tenantAlbum/update')")
     public HttpResponseResult<Boolean> update( @RequestBody TenantAlbumVo.TenantAlbum album) {
 
-        //判断当前机构是否已经绑定机构专辑
-        List<TenantAlbumRef> list = tenantAlbumRefService.lambdaQuery()
-                .eq(TenantAlbumRef::getTenantId, album.getTenantId())
-                .ne(TenantAlbumRef::getTenantAlbumId, album.getId())
-                .list();
-        if (CollectionUtils.isNotEmpty(list)) {
-            throw new BizException("当前机构已有专辑");
-        }
-
         // 检查曲目重复
         if (CollectionUtils.isNotEmpty(album.getMusicSheetData())) {
             List<Long> musicIds = album.getMusicSheetData().stream().flatMap(o -> o.getMusicSheetList()

+ 114 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantGroupAlbumController.java

@@ -0,0 +1,114 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.microsvc.toolkit.common.response.paging.PageInfo;
+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.TenantGroupAlbum;
+import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
+import com.yonge.cooleshow.biz.dal.service.TenantGroupAlbumService;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper;
+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.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.admin:}/tenantGroupAlbum")
+@Api(tags = "机构小组专辑配置表")
+public class TenantGroupAlbumController {
+
+    @Autowired
+    private TenantGroupAlbumService tenantGroupAlbumService;
+
+    @Resource
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "详情", notes = "机构小组专辑配置表-根据详情ID查询单条, 传入id")
+    @PreAuthorize("@pcs.hasPermissions('tenantGroupAlbum/detail', {'BACKEND'})")
+    //@GetMapping("/detail/{id}")
+    public R<TenantGroupAlbum> detail(@PathVariable("id") Long id) {
+
+        TenantGroupAlbum wrapper = tenantGroupAlbumService.detail(id);
+
+        return R.from(wrapper);
+    }
+
+    @ApiOperation(value = "查询分页", notes = "机构小组专辑配置表- 传入 TenantGroupAlbumWrapper.TenantGroupAlbumQuery")
+    @PreAuthorize("@pcs.hasPermissions('tenantGroupAlbum/page', {'BACKEND'})")
+    @PostMapping("/page")
+    public R<PageInfo<TenantGroupAlbumWrapper.TenantGroupAlbumVo>> page(@RequestBody TenantGroupAlbumWrapper.TenantGroupAlbumQuery query) {
+
+        IPage<TenantGroupAlbumWrapper.TenantGroupAlbumVo> pages = tenantGroupAlbumService.selectPage(QueryInfo.getPage(query), query);
+
+        return R.from(QueryInfo.pageInfo(pages));
+    }
+
+    @ApiOperation(value = "新增", notes = "机构小组专辑配置表- 传入 TenantGroupAlbumWrapper.TenantGroupAlbum")
+    @PreAuthorize("@pcs.hasPermissions('tenantGroupAlbum/save', {'BACKEND'})")
+    @PostMapping("/save")
+    public R<JSONObject> add(@Validated @RequestBody TenantGroupAlbumWrapper.TenantGroupAlbum tenantGroupAlbum) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        // 新增数据
+        TenantGroupAlbum record = JSON.parseObject(JSON.toJSONString(tenantGroupAlbum), TenantGroupAlbum.class);
+        record.setPurchasePeriod(PeriodEnum.DAY.getCode());
+        record.setCreateBy(sysUser.getId());
+        record.setUpdateBy(sysUser.getId());
+        record.setStatus(false);
+        record.setDelFlag(false);
+        tenantGroupAlbumService.save(record);
+
+        return R.defaultR();
+    }
+
+    @ApiOperation(value = "修改", notes = "机构小组专辑配置表- 传入 TenantGroupAlbumWrapper.TenantGroupAlbum")
+    @PreAuthorize("@pcs.hasPermissions('tenantGroupAlbum/update', {'BACKEND'})")
+    @PostMapping("/update")
+    public R<JSONObject> update(@Validated @RequestBody TenantGroupAlbumWrapper.TenantGroupAlbum tenantGroupAlbum) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+
+        TenantGroupAlbum record = JSON.parseObject(JSON.toJSONString(tenantGroupAlbum), TenantGroupAlbum.class);
+        record.setUpdateBy(sysUser.getId());
+        // 更新数据
+        tenantGroupAlbumService.updateById(record);
+
+        return R.defaultR();
+    }
+
+    @ApiOperation(value = "删除", notes = "机构小组专辑配置表- 传入id")
+    @PreAuthorize("@pcs.hasPermissions('tenantGroupAlbum/remove', {'BACKEND'})")
+    @PostMapping("/remove")
+    public R<Boolean> remove(@Validated @RequestBody TenantGroupAlbumWrapper.Remove remove) {
+        tenantGroupAlbumService.lambdaUpdate()
+                .set(TenantGroupAlbum::getDelFlag, true)
+                .eq(TenantGroupAlbum::getId, remove.getId())
+                .update();
+        return R.from(true);
+    }
+
+    @ApiOperation(value = "删除", notes = "机构小组专辑配置表- 传入id")
+    @PreAuthorize("@pcs.hasPermissions('tenantGroupAlbum/remove', {'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();
+        return R.from(true);
+    }
+}

+ 6 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/io/request/TenantAlbumVo.java

@@ -69,6 +69,12 @@ public class TenantAlbumVo {
         @ApiModelProperty("专辑分类等级ID")
         private Long categoryLevelId;
 
+        @ApiModelProperty("采购周期类型")
+        private String purchaseTypes;
+
+        @ApiModelProperty("专辑采购金额")
+        private String purchaseJson;
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }

+ 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)));
     }
-
-
 }

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

@@ -0,0 +1,47 @@
+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.RequestParam;
+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(@RequestParam(required = false) Long tenantGroupAlbumId) {
+
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return HttpResponseResult.failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+    
+		return HttpResponseResult.succeed(tenantGroupAlbumService.buyAlbumInfo(tenantGroupAlbumId,user.getId(), ClientEnum.STUDENT));
+	}
+}

+ 1 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/student/vo/UserPaymentOrderVo.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.student.vo;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import io.swagger.annotations.ApiModel;

+ 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)));

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

@@ -0,0 +1,46 @@
+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.RequestParam;
+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(@RequestParam(required = false) Long tenantGroupAlbumId) {
+
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return HttpResponseResult.failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+    
+		return HttpResponseResult.succeed(tenantGroupAlbumService.buyAlbumInfo(tenantGroupAlbumId, user.getId(), ClientEnum.TENANT));
+	}
+}

+ 13 - 18
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java

@@ -7,13 +7,11 @@ import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.TenantGroup;
 import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.mapper.TenantGroupMapper;
-import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
-import com.yonge.cooleshow.biz.dal.service.ImGroupService;
-import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
 import com.yonge.cooleshow.biz.dal.service.SmsCodeService;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
-import com.yonge.cooleshow.biz.dal.service.TeacherService;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.wrapper.StudentWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -31,9 +29,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.HashSet;
-import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 
 @Slf4j
 @RestController
@@ -44,9 +41,6 @@ public class OpenStudentController extends BaseController {
     private StudentService studentService;
 
     @Autowired
-    private TeacherService teacherService;
-
-    @Autowired
     private TenantInfoService tenantInfoService;
 
     @Autowired
@@ -56,20 +50,14 @@ public class OpenStudentController extends BaseController {
     private SmsCodeService smsCodeService;
 
     @Autowired
-    private ImUserFriendService imUserFriendService;
-
-    @Autowired
-    private ImGroupService imGroupService;
-
-    @Autowired
-    private ImGroupMemberService imGroupMemberService;
+    private SysMessageService sysMessageService;
 
     @Autowired
     private TenantGroupMapper tenantGroupMapper;
 
     @PostMapping("/save")
     @ApiOperation(value = "新增/修改", notes = "传入Student,换绑时按照返回错误码5004判断,是否需要换绑,updateTenant=true表示换绑")
-    public HttpResponseResult<Boolean> save(@Validated @RequestBody StudentVo.Student student) {
+    public HttpResponseResult<String> save(@Validated @RequestBody StudentVo.Student student) {
         String code = student.getCode();
         if (StringUtils.isEmpty(code)) {
             throw new BizException("验证码不能为空");
@@ -131,6 +119,13 @@ public class OpenStudentController extends BaseController {
         studentInfo.setTenantId(tenantInfo.getId());
 
         studentService.save(studentInfo);
-        return succeed();
+
+        // 自动注册登陆验证码
+        String loginCode = "";
+        if (Optional.ofNullable(student.getLoginCode()).orElse(false)) {
+            // 生成登陆验证码
+            loginCode = sysMessageService.sendSecurityCode(MessageTypeEnum.SMS_VERIFY_CODE_LOGIN, student.getPhone());
+        }
+        return succeed(loginCode);
     }
 }

+ 3 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/vo/StudentVo.java

@@ -51,5 +51,8 @@ public class StudentVo {
 
         @ApiModelProperty("短信验证码")
         private String code;
+
+        @ApiModelProperty("登陆验证码")
+        private Boolean loginCode;
     }
 }

+ 0 - 16
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumController.java

@@ -185,13 +185,6 @@ public class TenantAlbumController {
     @ApiOperation(value = "新增专辑", notes = "新增专辑")
     @PreAuthorize("@pcs.hasPermissions('tenantAlbum/save')")
     public HttpResponseResult<Boolean> save(@Validated @RequestBody TenantAlbumVo.TenantAlbum album) {
-        //判断当前机构是否已经绑定机构专辑
-        List<TenantAlbumRef> list = tenantAlbumRefService.lambdaQuery()
-                .eq(TenantAlbumRef::getTenantId, album.getTenantId())
-                .list();
-        if (CollectionUtils.isNotEmpty(list)) {
-            throw new BizException("当前机构已有专辑");
-        }
 
         // 检查曲目重复
         if (CollectionUtils.isNotEmpty(album.getMusicSheetData())) {
@@ -230,15 +223,6 @@ public class TenantAlbumController {
     @PreAuthorize("@pcs.hasPermissions('tenantAlbum/update')")
     public HttpResponseResult<Boolean> update( @RequestBody TenantAlbumVo.TenantAlbum album) {
 
-        //判断当前机构是否已经绑定机构专辑
-        List<TenantAlbumRef> list = tenantAlbumRefService.lambdaQuery()
-                .eq(TenantAlbumRef::getTenantId, album.getTenantId())
-                .ne(TenantAlbumRef::getTenantAlbumId, album.getId())
-                .list();
-        if (CollectionUtils.isNotEmpty(list)) {
-            throw new BizException("当前机构已有专辑");
-        }
-
         // 检查曲目重复
         if (CollectionUtils.isNotEmpty(album.getMusicSheetData())) {
             List<Long> musicIds = album.getMusicSheetData().stream().flatMap(o -> o.getMusicSheetList()

+ 10 - 10
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/TenantAlbumVo.java

@@ -1,25 +1,19 @@
 package com.yonge.cooleshow.admin.io.request;
 
 import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.microsvc.toolkit.common.response.paging.QueryInfo;
-import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
-import com.yonge.cooleshow.biz.dal.entity.TenantAlbumMusic;
 import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.math.BigDecimal;
-import java.util.List;
-
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 /**
  * 机构专辑
@@ -75,6 +69,12 @@ public class TenantAlbumVo {
         @ApiModelProperty("曲目相关信息")
         private List<MusicSheetData> musicSheetData = new ArrayList<>();
 
+        @ApiModelProperty("采购周期类型")
+        private String purchaseTypes;
+
+        @ApiModelProperty("专辑采购金额")
+        private String purchaseJson;
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }

+ 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);
 }

+ 13 - 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_")
@@ -88,4 +87,15 @@ public class TenantAlbum implements Serializable {
     @TableField(value = "category_level_id_")
     private Long categoryLevelId;
 
+
+    @ApiModelProperty("采购周期类型")
+    @TableField(value = "purchase_types_")
+    private String purchaseTypes;
+
+
+
+    @ApiModelProperty("采购金额数据")
+    @TableField(value = "purchase_json_")
+    private String purchaseJson;
+
 }

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

@@ -77,4 +77,9 @@ public class TenantAlbumPurchase implements Serializable {
 	@TableField(value = "create_time_")
     private Date createTime;
 
+
+    @ApiModelProperty("采购周期类型")
+    @TableField(value = "purchase_type_")
+    private String purchaseType;
+
 }

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

@@ -0,0 +1,86 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import lombok.Data;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import java.math.BigDecimal;
+
+/**
+ * 机构小组专辑配置表
+ * 2024-01-24 13:32:00
+ */
+@Data
+@ApiModel(" TenantGroupAlbum-机构小组专辑配置表")
+@TableName("tenant_group_album")
+public class TenantGroupAlbum implements Serializable {
+
+    @ApiModelProperty("主键ID")
+    @TableId(value = "id_", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("机构小组ID") 
+	@TableField(value = "tenant_group_id_")
+    private Long tenantGroupId;
+
+    @ApiModelProperty("专辑ID") 
+	@TableField(value = "tenant_album_id_")
+    private Long tenantAlbumId;
+
+    @ApiModelProperty("状态") 
+	@TableField(value = "status_")
+    private Boolean status;
+
+    @ApiModelProperty("采购数量") 
+	@TableField(value = "purchase_num_")
+    private Integer purchaseNum;
+
+    @ApiModelProperty("采购周期") 
+	@TableField(value = "purchase_period_")
+    private String purchasePeriod;
+
+    @ApiModelProperty("原价") 
+	@TableField(value = "original_price_")
+    private BigDecimal originalPrice;
+
+    @ApiModelProperty("售价") 
+	@TableField(value = "actual_price_")
+    private BigDecimal actualPrice;
+
+    @ApiModelProperty("购买次数限制") 
+	@TableField(value = "buy_times_flag_")
+    private Boolean buyTimesFlag;
+
+    @ApiModelProperty("购买次数") 
+	@TableField(value = "buy_times_")
+    private Integer buyTimes;
+
+    @ApiModelProperty("是否删除") 
+	@TableField(value = "del_flag_")
+    private Boolean delFlag;
+
+    @ApiModelProperty("创建时间") 
+	@TableField(value = "create_time_")
+    private Date createTime;
+
+    @ApiModelProperty("创建人") 
+	@TableField(value = "create_by_")
+    private Long createBy;
+
+    @ApiModelProperty("更新人") 
+	@TableField(value = "update_by_")
+    private Long updateBy;
+
+    @ApiModelProperty("更新时间") 
+	@TableField(value = "update_time_")
+    private Date updateTime;
+
+}

+ 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 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/PeriodEnum.java

@@ -7,6 +7,7 @@ import com.yonge.toolset.base.enums.BaseEnum;
  * 周期
  */
 public enum PeriodEnum implements BaseEnum<String, PeriodEnum> {
+    // DAY 日 MONTH 月 QUARTERLY 季度 YEAR_HALF 半年 YEAR 年
 	DAY("日"),
 	MONTH("月"),
 	QUARTERLY("季度"),

+ 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);
 

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

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.biz.dal.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+import com.yonge.cooleshow.biz.dal.entity.TenantGroupAlbum;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper;
+
+/**
+ * 机构小组专辑配置表
+ * 2024-01-24 13:32:00
+ */
+@Repository
+public interface TenantGroupAlbumMapper extends BaseMapper<TenantGroupAlbum> {
+
+	/**
+	 * 分页查询
+	 * @param page IPage<TenantGroupAlbumWrapper.TenantGroupAlbum>
+	 * @param param TenantGroupAlbumWrapper.TenantGroupAlbumQuery
+	 * @return List<TenantGroupAlbumWrapper.TenantGroupAlbum>
+	 */
+	List<TenantGroupAlbumWrapper.TenantGroupAlbumVo> selectPage(@Param("page") IPage<TenantGroupAlbumWrapper.TenantGroupAlbumVo> page, @Param("param") TenantGroupAlbumWrapper.TenantGroupAlbumQuery param);
+
+
+    List<TenantGroupAlbumWrapper.BuyTenantAlbum> getBuyAlbumInfo(@Param("param") TenantGroupAlbumWrapper.BuyTenantAlbumQuery query);
+}

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomService.java

@@ -232,5 +232,12 @@ public interface LiveRoomService extends IService<LiveRoom> {
     void closeLive(String roomUid, Long speakerId, String sequence);
 
     void startLive(String roomUid, Integer speakerId, String sequence);
+
+    /**
+     * 只修改状态,不关闭三方直播
+     *
+     * @param room 直播间
+     */
+    void closeRoom(LiveRoom room);
 }
 

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysMessageService.java

@@ -64,6 +64,14 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	public boolean sendSecurityCode(MessageSender messageSender, Long userId, MessageTypeEnum messageType, String receiver, String platform);
 
 	/**
+	 * 发送验证码
+	 * @param messageType 消息类型
+	 * @param receiver 消息接受者
+	 * @return 验证码
+	 */
+	String sendSecurityCode(MessageTypeEnum messageType, String receiver);
+
+	/**
 	 * 获取已经发送的验证码
 	 * @param type
 	 * @param mobileNOOrEmailAddr

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

@@ -0,0 +1,54 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+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
+ */
+public interface TenantGroupAlbumService extends IService<TenantGroupAlbum>  {
+
+	/**
+     * 查询详情
+     * @param id 详情ID
+     * @return TenantGroupAlbum
+     */
+	TenantGroupAlbum detail(Long id);
+
+    /**
+     * 分页查询
+     * @param page IPage<TenantGroupAlbum>
+     * @param query TenantGroupAlbumWrapper.TenantGroupAlbumQuery
+     * @return IPage<TenantGroupAlbum>
+     */
+    IPage<TenantGroupAlbumWrapper.TenantGroupAlbumVo> selectPage(IPage<TenantGroupAlbumWrapper.TenantGroupAlbumVo> page, TenantGroupAlbumWrapper.TenantGroupAlbumQuery query);
+	
+    /**
+     * 添加
+     * @param tenantGroupAlbum TenantGroupAlbumWrapper.TenantGroupAlbum
+     * @return Boolean
+     */
+     Boolean add(TenantGroupAlbumWrapper.TenantGroupAlbum tenantGroupAlbum);   
+
+    /**
+     * 更新
+     * @param tenantGroupAlbum TenantGroupAlbumWrapper.TenantGroupAlbum
+     * @return Boolean
+     */
+     Boolean update(TenantGroupAlbumWrapper.TenantGroupAlbum tenantGroupAlbum);
+
+    /**
+     * 可购买机构信息
+     *
+     * @param tenantGroupAlbumId
+     * @param userId             用户ID
+     * @param clientType         客户端类型
+     */
+    List<TenantGroupAlbumWrapper.BuyTenantAlbum> buyAlbumInfo(Long tenantGroupAlbumId, Long userId, ClientEnum clientType);
+}

+ 59 - 53
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java

@@ -49,6 +49,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.alibaba.fastjson.JSONObject;
@@ -698,65 +699,30 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             return;
         }
 
-        CourseSchedule schedule = getCourseScheduleByRoomUid(room.getRoomUid());
-        //直播课
-        if (room.getType().equals(RoomTypeEnum.LIVE.getCode())) {
-            //查询老师分润表
-            List<CourseScheduleTeacherSalary> salaryList = courseScheduleTeacherSalaryService.list(Wrappers.<CourseScheduleTeacherSalary>lambdaQuery()
-                    .eq(CourseScheduleTeacherSalary::getCourseScheduleId,schedule.getId())
-            );
-            if (!CollectionUtils.isEmpty(salaryList)) {
-                salaryList.forEach(salary -> {
-                    //修改教师课酬状态-已结算
-                    salary.setStatus(TeacherSalaryEnum.WAIT.getCode());
-                    courseScheduleTeacherSalaryService.updateById(salary);
-                });
-            }
-        }
-        //修改房间状态
-        room.setLiveState(2);
-        room.setRoomState(2);
-        this.updateById(room);
-
-        String speakerIdStr = room.getSpeakerId().toString();
-        String roomUid = room.getRoomUid();
-
-        //关闭直播间发送消息
-        ImRoomMessage message = new ImRoomMessage();
-        message.setFromUserId(speakerIdStr);
-        message.setToChatroomId(roomUid);
-        message.setClientType(ClientEnum.TEACHER.getCode());
-        message.setObjectName(ImRoomMessage.FORCED_OFFLINE);
-        message.setContent(speakerIdStr);
-        try {
-            this.publishRoomMessage(message);
-            log.info("destroyLiveRoom>>>> FORCED_OFFLINE : {}", speakerIdStr);
-        } catch (Exception e) {
-            log.error("destroyLiveRoom>>>>  FORCED_OFFLINE {}", e.getMessage());
-        }
-
-        Date now = new Date();
-        //给老师签退
-        teacherAttendanceService.update(Wrappers.<TeacherAttendance>lambdaUpdate()
-                .eq(TeacherAttendance::getTeacherId, room.getSpeakerId())
-                .eq(TeacherAttendance::getCourseScheduleId, schedule.getId())
-                .set(TeacherAttendance::getSignOutTime, now));
-        //获取在线人员信息
-        RMap<Long, String> onlineUserCache = this.getOnlineUserCache(roomUid);
-        onlineUserCache.forEach((id, s) -> {
-            //观看者签退
-            studentAttendanceService.update(Wrappers.<StudentAttendance>lambdaUpdate()
-                    .eq(StudentAttendance::getStudentId, id)
-                    .eq(StudentAttendance::getCourseScheduleId,schedule.getId())
-                    .set(StudentAttendance::getSignOutTime, now));
-        });
-
+        liveRoomService.closeRoom(room);
 
         //获取所有直播间缓存数据并写入数据库后并清理缓存
         CompletableFuture.runAsync(() -> insertAndCleanLiveData(room.getRoomUid(), room.getSpeakerId()));
         log.info("roomDestroy>>>> insertAndCleanLiveData {}", JSONObject.toJSONString(room));
 
+        String speakerIdStr = room.getSpeakerId().toString();
+        String roomUid = room.getRoomUid();
         try {
+
+            //关闭直播间发送消息
+            ImRoomMessage message = new ImRoomMessage();
+            message.setFromUserId(speakerIdStr);
+            message.setToChatroomId(roomUid);
+            message.setClientType(ClientEnum.TEACHER.getCode());
+            message.setObjectName(ImRoomMessage.FORCED_OFFLINE);
+            message.setContent(speakerIdStr);
+            try {
+                this.publishRoomMessage(message);
+                log.info("destroyLiveRoom>>>> FORCED_OFFLINE : {}", speakerIdStr);
+            } catch (Exception e) {
+                log.error("destroyLiveRoom>>>>  FORCED_OFFLINE {}", e.getMessage());
+            }
+
             LivePluginService pluginService = livePluginContext.getPluginService(room.getServiceProvider());
 
             //销毁直播间
@@ -789,6 +755,46 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         }
     }
 
+    @Override
+    @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
+    public void closeRoom(LiveRoom room) {
+        CourseSchedule schedule = getCourseScheduleByRoomUid(room.getRoomUid());
+        //直播课
+        if (room.getType().equals(RoomTypeEnum.LIVE.getCode())) {
+            //查询老师分润表
+            List<CourseScheduleTeacherSalary> salaryList = courseScheduleTeacherSalaryService.list(Wrappers.<CourseScheduleTeacherSalary>lambdaQuery()
+                    .eq(CourseScheduleTeacherSalary::getCourseScheduleId,schedule.getId())
+            );
+            if (!CollectionUtils.isEmpty(salaryList)) {
+                for (CourseScheduleTeacherSalary salary : salaryList) {//修改教师课酬状态-已结算
+                    salary.setStatus(TeacherSalaryEnum.WAIT.getCode());
+                    courseScheduleTeacherSalaryService.updateById(salary);
+                }
+            }
+        }
+        //修改房间状态
+        room.setLiveState(2);
+        room.setRoomState(2);
+        this.updateById(room);
+
+
+        Date now = new Date();
+        //给老师签退
+        teacherAttendanceService.update(Wrappers.<TeacherAttendance>lambdaUpdate()
+                .eq(TeacherAttendance::getTeacherId, room.getSpeakerId())
+                .eq(TeacherAttendance::getCourseScheduleId, schedule.getId())
+                .set(TeacherAttendance::getSignOutTime, now));
+        //获取在线人员信息
+        RMap<Long, String> onlineUserCache = this.getOnlineUserCache(room.getRoomUid());
+        onlineUserCache.forEach((id, s) -> {
+            //观看者签退
+            studentAttendanceService.update(Wrappers.<StudentAttendance>lambdaUpdate()
+                    .eq(StudentAttendance::getStudentId, id)
+                    .eq(StudentAttendance::getCourseScheduleId,schedule.getId())
+                    .set(StudentAttendance::getSignOutTime, now));
+        });
+    }
+
     /**
      * <p>主讲人处理进入和退出房间数据
      * <p>观看者只处理退出房间数据

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

@@ -244,7 +244,6 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         // 老师收入
         Map<Long, BigDecimal> bizMap = new HashMap<>();
 
-        tenantdivMap.merge(-1L, userPaymentOrder.getActualPrice(), BigDecimal::add);
         // 计算商品分账数据
         if (userPaymentOrder.getOrderClient().equals(ClientEnum.STUDENT)) {
 
@@ -253,12 +252,15 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
                     .parseObject(userPaymentOrder.getBizContent(), TenantAlbumWrapper.TenantAlbumContent.class);
 
 
-            BigDecimal tenantAmount = tenantAlbumContent.getSalePrice().subtract(tenantAlbumContent.getOriginalPrice())
-                    .multiply(BigDecimal.valueOf(tenantAlbumContent.getBuyMultiple())).setScale(2, RoundingMode.HALF_UP);
+//            BigDecimal tenantAmount = tenantAlbumContent.getSalePrice().subtract(tenantAlbumContent.getOriginalPrice())
+//                    .multiply(BigDecimal.valueOf(tenantAlbumContent.getBuyMultiple())).setScale(2, RoundingMode.HALF_UP);
+
+            tenantdivMap.merge(tenantAlbumContent.getTenantId(), userPaymentOrder.getActualPrice(), BigDecimal::add);
+//            tenantdivMap.merge(-1L, tenantAmount, BigDecimal::subtract);
 
-            tenantdivMap.merge(tenantAlbumContent.getTenantId(), tenantAmount, BigDecimal::add);
-            tenantdivMap.merge(-1L, tenantAmount, BigDecimal::subtract);
+        } else {
 
+            tenantdivMap.merge(-1L, userPaymentOrder.getActualPrice(), BigDecimal::add);
         }
 
         // 计算老师分润数据  平台的真实收益

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

@@ -327,6 +327,28 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		return true;
 	}
 
+	/**
+	 * 发送验证码
+	 *
+	 * @param messageType 消息类型
+	 * @param receiver    消息接受者
+	 * @return true-发送成功  false-发送失败
+	 */
+	@Override
+	public String sendSecurityCode(MessageTypeEnum messageType, String receiver) {
+
+		// 生成验证码
+		String code = String.valueOf(getRandomCode(messageType, receiver));
+
+		// 验证码缓存Key
+		String key = getVerificationCodeCacheKey(messageType, receiver);
+
+		// 发送验证码缓存
+		redisCache.put(key, code, CODE_EXPIRE);
+
+		return code;
+	}
+
 	@Override
 	public String getSendedVerificationCode(MessageTypeEnum type, String mobileNOOrEmailAddr, String verifyCode) {
 

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

@@ -356,10 +356,10 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         if (!update) {
             TenantActivationCode code = this.getById(activationCode.getId());
             if (EActivationCode.WAIT.equals(code.getSendStatus())) {
-                throw new BizException("激活码已撤回");
+                throw new BizException(5101, "激活码已撤回");
             }
             if (Boolean.TRUE.equals(code.getActivationStatus())) {
-                throw new BizException("激活码已经激活");
+                throw new BizException(5102, "激活码已经激活");
             }
         }
         com.yonge.cooleshow.auth.api.entity.SysUser sysUser = sysUserService.findUserByPhone(activationCode.getActivationPhone());
@@ -376,7 +376,7 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         Collection<TenantActivationCode> tenantActivationCodes = this.listByIds(idList);
         for (TenantActivationCode tenantActivationCode : tenantActivationCodes) {
             if (Boolean.TRUE.equals(tenantActivationCode.getActivationStatus())) {
-                throw new BizException("激活码已经被使用");
+                throw new BizException(5102, "激活码已经激活");
             }
         }
         tenantActivationCodes.removeIf(next -> Boolean.TRUE.equals(next.getActivationStatus()));
@@ -616,6 +616,7 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
             userTenantAlbumRecord.setSubOrderNo(userOrderDetailVo.getSubOrderNo());
             userTenantAlbumRecord.setCreateBy(studentId);
             userTenantAlbumRecord.setTimes(tenantAlbumContent.getBuyCycle());
+            userTenantAlbumRecord.setType(tenantAlbumContent.getPurchaseType());
         } else if (purchase != null) {
 
             userTenantAlbumRecord.setTenantId(purchase.getTenantId());
@@ -627,6 +628,7 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
             userTenantAlbumRecord.setSubOrderNo(purchase.getId().toString());
             userTenantAlbumRecord.setCreateBy(studentId);
             userTenantAlbumRecord.setTimes(purchase.getPurchaseCycle());
+            userTenantAlbumRecord.setType(purchase.getPurchaseType());
         }
 
         List<UserTenantAlbumRecord> userTenantAlbumRecords = userTenantAlbumRecordMapper
@@ -641,7 +643,7 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         userTenantAlbumRecord.setCreateBy(studentId);
 
 
-        userTenantAlbumRecord.setType("MONTH");
+//        userTenantAlbumRecord.setType("MONTH");
 
         Calendar instance = Calendar.getInstance();
         if (userTenantAlbumRecords.isEmpty()) {
@@ -658,7 +660,27 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
             }
         }
         userTenantAlbumRecord.setStartTime(instance.getTime());
-        instance.add(Calendar.MONTH, userTenantAlbumRecord.getTimes());
+        //DAY 日 MONTH 月 QUARTERLY 季度 YEAR_HALF 半年 YEAR 年
+        switch (userTenantAlbumRecord.getType()) {
+            case "DAY":
+                instance.add(Calendar.DAY_OF_MONTH, userTenantAlbumRecord.getTimes());
+                break;
+            case "MONTH":
+                instance.add(Calendar.MONTH, userTenantAlbumRecord.getTimes());
+                break;
+            case "QUARTERLY":
+                instance.add(Calendar.MONTH, userTenantAlbumRecord.getTimes() * 3);
+                break;
+            case "YEAR_HALF":
+                instance.add(Calendar.MONTH, userTenantAlbumRecord.getTimes() * 6);
+                break;
+            case "YEAR":
+                instance.add(Calendar.MONTH, userTenantAlbumRecord.getTimes() * 12);
+                break;
+            default:
+                instance.add(Calendar.MONTH, userTenantAlbumRecord.getTimes());
+                break;
+        }
 
         instance.set(Calendar.HOUR_OF_DAY, 23);
         instance.set(Calendar.MINUTE, 59);

+ 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);
     }
 

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

@@ -5,8 +5,10 @@ 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.mapper.TenantAlbumMapper;
@@ -88,6 +90,13 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
 
     @Autowired
     private UserTenantAlbumRecordService userTenantAlbumRecordService;
+
+    @Autowired
+    private TenantGroupAlbumService tenantGroupAlbumService;
+
+    @Autowired
+    private UserOrderDao userOrderDao;
+
     /**
      * 查询详情
      *
@@ -202,9 +211,9 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
             log.error("订单创建前检测,专辑不存在,bizId={}", orderGoodsInfo.getBizId());
             throw new BizException("订单商品信息为空");
         }
-        tenantAlbumContent.setBuyCycle(tenantAlbum.getPurchaseCycle());
-        tenantAlbumContent.setSalePrice(tenantAlbum.getSalePrice());
-        tenantAlbumContent.setOriginalPrice(tenantAlbum.getOriginalPrice());
+//        tenantAlbumContent.setBuyCycle(tenantAlbum.getPurchaseCycle());
+//        tenantAlbumContent.setSalePrice(tenantAlbum.getSalePrice());
+//        tenantAlbumContent.setOriginalPrice(tenantAlbum.getOriginalPrice());
 
         // 查询专辑所在机构
         List<TenantAlbumRef> refList =
@@ -223,7 +232,8 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
 
         // 设置金额入账去向
         UserPaymentOrderWrapper.AccountTenantTo accountTenantTo = teacherService.teacherSettlementFrom(null, orderGoodsInfo.getRecomUserId());
-        BigDecimal price = BigDecimal.ZERO;
+        BigDecimal originalPrice = BigDecimal.ZERO;
+        BigDecimal actualPrice = BigDecimal.ZERO;
         // 学生购买机构专辑
         switch (orderGoodsInfo.getPaymentClient()) {
             case STUDENT: {
@@ -238,10 +248,36 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
                     log.error("订单创建前检测,学生不在当前机构下,userId={},tenantId={}", orderGoodsInfo.getUserId(), student.getTenantId());
                     throw new BizException("用户不在当前机构");
                 }
-                price = tenantAlbum.getSalePrice();
+                if (orderGoodsInfo.getTenantGroupAlbumId() == null) {
+                    log.error("订单创建前检测,学生购买机构专辑,机构小组专辑ID为空,userId={}", orderGoodsInfo.getUserId());
+                    throw new BizException("机构小组专辑ID为空");
+                }
+                // 判断机构小组专辑ID是否能购买,专辑ID和当前机构专辑ID是否对应
+                TenantGroupAlbum tenantGroupAlbum = tenantGroupAlbumService.getById(orderGoodsInfo.getTenantGroupAlbumId());
+                if (tenantGroupAlbum == null) {
+                    log.error("订单创建前检测,学生购买机构专辑,机构小组专辑不存在,userId={},tenantGroupAlbumId={}", orderGoodsInfo.getUserId(), orderGoodsInfo.getTenantGroupAlbumId());
+                    throw new BizException("小组专辑不存在");
+                }
+                if (!tenantGroupAlbum.getTenantAlbumId().equals(orderGoodsInfo.getBizId())) {
+                    log.error("订单创建前检测,学生购买机构专辑,机构小组专辑ID和当前机构专辑ID不对应,userId={},tenantGroupAlbumId={},bizId={}", orderGoodsInfo.getUserId(), orderGoodsInfo.getTenantGroupAlbumId(), orderGoodsInfo.getBizId());
+                    throw new BizException("小组专辑和当前购买专辑不对应");
+                }
+                // 判断购买次数
+                if (tenantGroupAlbum.getBuyTimesFlag()) {
+                    List<Long> studentTenantAlbumNum = userOrderDao.getStudentTenantAlbumNum(student.getUserId(), Lists.newArrayList(tenantGroupAlbum.getId()));
+                    if (CollectionUtils.isNotEmpty(studentTenantAlbumNum) && studentTenantAlbumNum.size() >tenantGroupAlbum.getBuyTimes()) {
+                        log.error("订单创建前检测,学生购买机构专辑,机构小组专辑购买次数超过限制,userId={},tenantGroupAlbumId={},buyTimes={}", orderGoodsInfo.getUserId(), orderGoodsInfo.getTenantGroupAlbumId(), tenantGroupAlbum.getBuyTimes());
+                        throw new BizException("购买次数超过限制");
+                    }
+                }
+
+                originalPrice = tenantGroupAlbum.getOriginalPrice();
+                actualPrice = tenantGroupAlbum.getActualPrice();
                 userOrderDetail.setMerchId(tenantInfo.getId());
+                userOrderDetail.setTenantGroupAlbumId(tenantGroupAlbum.getId());
                 tenantAlbumContent.setBuyNumber(1);
-                tenantAlbumContent.setBuyCycle(tenantAlbumContent.getBuyCycle()*tenantAlbumContent.getBuyMultiple());
+                tenantAlbumContent.setBuyCycle(tenantGroupAlbum.getPurchaseNum());
+                tenantAlbumContent.setPurchaseType(tenantGroupAlbum.getPurchasePeriod());
                 tenantAlbumContent.setTenantId(tenantInfo.getId());
                 accountTenantTo.setIncomeTenant(tenantInfo.getId());
                 break;
@@ -258,7 +294,34 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
                     log.error("订单创建前检测,专辑不在机构下,userId={},tenantId={}", orderGoodsInfo.getUserId(), tenantStaff.getTenantId());
                     throw new BizException("用户不在当前机构");
                 }
-                price = tenantAlbum.getOriginalPrice();
+                // 根据周期判断能不能购买当前周期的专辑
+                if (StringUtil.isEmpty(tenantAlbum.getPurchaseTypes())) {
+                    log.error("订单创建前检测,机构购买机构专辑,专辑周期为空,userId={},bizId={}", orderGoodsInfo.getUserId(), orderGoodsInfo.getBizId());
+                    throw new BizException("专辑不支持当前周期");
+                }
+                List<String> purchaseTypes = Arrays.asList(tenantAlbum.getPurchaseTypes().split(","));
+                if (!purchaseTypes.contains(tenantAlbumContent.getPurchaseType())) {
+                    log.error("订单创建前检测,机构购买机构专辑,专辑周期不支持,userId={},bizId={},purchaseType={}", orderGoodsInfo.getUserId(),
+                        orderGoodsInfo.getBizId(), tenantAlbumContent.getPurchaseType());
+                    throw new BizException("专辑不支持当前周期");
+                }
+                List<TenantAlbumWrapper.TenantAlbumPurchaseJson> tenantAlbumPurchaseJsons = JSON
+                    .parseArray(tenantAlbum.getPurchaseJson(), TenantAlbumWrapper.TenantAlbumPurchaseJson.class);
+                if (CollectionUtils.isEmpty(tenantAlbumPurchaseJsons)) {
+                    log.error("订单创建前检测,机构购买机构专辑,专辑周期不支持,userId={},bizId={},purchaseType={}", orderGoodsInfo.getUserId(),
+                        orderGoodsInfo.getBizId(), tenantAlbumContent.getPurchaseType());
+                    throw new BizException("专辑不支持当前周期");
+                }
+                Optional<TenantAlbumWrapper.TenantAlbumPurchaseJson> first = tenantAlbumPurchaseJsons.stream().filter(o -> o.getPurchaseType().equals(tenantAlbumContent.getPurchaseType())).findFirst();
+                if (!first.isPresent()) {
+                    log.error("订单创建前检测,机构购买机构专辑,专辑周期不支持,userId={},bizId={},purchaseType={}", orderGoodsInfo.getUserId(),
+                        orderGoodsInfo.getBizId(), tenantAlbumContent.getPurchaseType());
+                    throw new BizException("专辑不支持当前周期");
+                }
+                TenantAlbumWrapper.TenantAlbumPurchaseJson tenantAlbumPurchaseJson = first.get();
+
+                originalPrice = tenantAlbumPurchaseJson.getPrice();
+                actualPrice = tenantAlbumPurchaseJson.getPrice();
                 userOrderDetail.setMerchId(0L);
                 tenantAlbumContent.setTenantId(tenantStaff.getTenantId());
                 tenantAlbumContent.setBuyCycle(tenantAlbumContent.getBuyCycle()*tenantAlbumContent.getBuyMultiple());
@@ -272,10 +335,11 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
         userOrderDetail.setBizId(tenantAlbum.getId());
         userOrderDetail.setBizContent(JSON.toJSONString(tenantAlbumContent));
         userOrderDetail.setGoodNum(orderGoodsInfo.getGoodNum());
-        userOrderDetail.setOriginalPrice(price.multiply(new BigDecimal(orderGoodsInfo.getGoodNum()))
+        userOrderDetail.setOriginalPrice(originalPrice.multiply(new BigDecimal(orderGoodsInfo.getGoodNum()))
                 .multiply(new BigDecimal(tenantAlbumContent.getBuyMultiple())));
         userOrderDetail.setCouponAmount(BigDecimal.ZERO);
-        userOrderDetail.setExpectPrice(userOrderDetail.getOriginalPrice());
+        userOrderDetail.setExpectPrice(actualPrice.multiply(new BigDecimal(orderGoodsInfo.getGoodNum()))
+            .multiply(new BigDecimal(tenantAlbumContent.getBuyMultiple())));
         userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice());
         userOrderDetail.setAccountConfig(accountTenantTo.jsonString());
 
@@ -515,6 +579,7 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
         tenantAlbumPurchase.setPurchaseCycle(tenantAlbumContent.getBuyCycle());
         tenantAlbumPurchase.setActiveQuantity(0);
         tenantAlbumPurchase.setOrderNo(orderGoodsInfo.getOrderNo());
+        tenantAlbumPurchase.setPurchaseType(tenantAlbumContent.getPurchaseType());
         tenantAlbumPurchase.setPurchasePrice(orderGoodsInfo.getUserOrderDetail().getActualPrice());
         tenantAlbumPurchase.setPurchaseStatus(OrderStatusEnum.WAIT_PAY.getCode());
         tenantAlbumPurchaseService.save(tenantAlbumPurchase);

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

@@ -0,0 +1,127 @@
+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.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 lombok.extern.slf4j.Slf4j;
+import com.yonge.cooleshow.biz.dal.entity.TenantGroupAlbum;
+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
+ */
+@Slf4j
+@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
+     * @return TenantGroupAlbum
+     */
+	@Override
+    public TenantGroupAlbum detail(Long id) {
+        
+        return baseMapper.selectById(id);
+    }
+    
+    /**
+     * 分页查询
+     * @param page IPage<TenantGroupAlbum>
+     * @param query TenantGroupAlbumWrapper.TenantGroupAlbumQuery
+     * @return IPage<TenantGroupAlbum>
+     */
+    @Override
+    public IPage<TenantGroupAlbumWrapper.TenantGroupAlbumVo> selectPage(IPage<TenantGroupAlbumWrapper.TenantGroupAlbumVo> page, TenantGroupAlbumWrapper.TenantGroupAlbumQuery query) {
+        
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+	
+    /**
+     * 添加
+     * @param tenantGroupAlbum TenantGroupAlbumWrapper.TenantGroupAlbum
+     * @return Boolean
+     */
+    @Override
+    public Boolean add(TenantGroupAlbumWrapper.TenantGroupAlbum tenantGroupAlbum) {    	
+        
+        return this.save(JSON.parseObject(tenantGroupAlbum.jsonString(), TenantGroupAlbum.class));
+    }
+
+    /**
+     * 更新
+     * @param tenantGroupAlbum TenantGroupAlbumWrapper.TenantGroupAlbum
+     * @return Boolean
+     */
+    @Override
+    public Boolean update(TenantGroupAlbumWrapper.TenantGroupAlbum tenantGroupAlbum){
+
+        return this.updateById(JSON.parseObject(tenantGroupAlbum.jsonString(), TenantGroupAlbum.class));       
+    }
+
+    @Override
+    public List<TenantGroupAlbumWrapper.BuyTenantAlbum> buyAlbumInfo(Long tenantGroupAlbumId, Long userId, ClientEnum clientType) {
+        // 学生端 查看小组专辑 获取专辑基本信息, 机构端查看机构专辑 获取专辑基本信息
+
+        TenantGroupAlbumWrapper.BuyTenantAlbumQuery query = new TenantGroupAlbumWrapper.BuyTenantAlbumQuery();
+        query.setTenantGroupAlbumId(tenantGroupAlbumId);
+        if (tenantGroupAlbumId != null) {} else 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;
+    }
+}

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

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
@@ -18,9 +19,12 @@ import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.TenantGroup;
+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.ImGroupMemberRoleType;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
+import com.yonge.cooleshow.biz.dal.mapper.TenantGroupAlbumMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantGroupMapper;
 import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
@@ -64,6 +68,8 @@ public class TenantGroupServiceImpl extends ServiceImpl<TenantGroupMapper, Tenan
     private ImGroupMemberService imGroupMemberService;
     @Autowired
     private SysUserService sysUserService;
+    @Autowired
+    private TenantGroupAlbumMapper tenantGroupAlbumMapper;
 
     /**
      * 查询详情
@@ -112,12 +118,24 @@ 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"));
+            });
             for (TenantGroupWrapper.TenantGroup record : records) {
                 record.setGroupUserCount(groupBy.getOrDefault(record.getId(), 0));
                 record.setImGroupExist(existImgGroupIds.contains(record.getImGroupId()));
                 if (mapByIds.containsKey(record.getAdminId())) {
                     record.setAdminName(mapByIds.get(record.getAdminId()).getUsername());
                 }
+                record.setAlbumCount(countByGroupId.getOrDefault(record.getId(), 0));
             }
         }
         return iPage;
@@ -315,6 +333,10 @@ public class TenantGroupServiceImpl extends ServiceImpl<TenantGroupMapper, Tenan
                 .eq(Student::getTenantId, group.getTenantId())
                 .eq(Student::getTenantGroupId, id)
                 .set(Student::getTenantGroupId, -1L));
+
+        tenantGroupAlbumMapper.update(null, Wrappers.<TenantGroupAlbum>lambdaUpdate()
+                .set(TenantGroupAlbum::getDelFlag, true)
+                .eq(TenantGroupAlbum::getTenantGroupId, id));
         return removeById(id);
     }
 

+ 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);
         }
 
     }
 
-
-    }
+}

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumPurchaseWrapper.java

@@ -106,6 +106,10 @@ public class TenantAlbumPurchaseWrapper {
         @ApiModelProperty("采购状态")
         private String purchaseStatus;
 
+        @ApiModelProperty("采购周期类型 DAY 日 MONTH 月 QUARTERLY 季度 YEAR_HALF 半年 YEAR 年")
+        private String purchaseType;
+
+
         @ApiModelProperty("更新时间")
         private Date updateTime;
 

+ 18 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumWrapper.java

@@ -145,6 +145,12 @@ public class TenantAlbumWrapper {
         @ApiModelProperty("曲目相关信息")
         private List<MusicSheetData> musicSheetData = new ArrayList<>();
 
+        @ApiModelProperty("采购周期类型")
+        private String purchaseTypes;
+
+        @ApiModelProperty("专辑采购金额")
+        private String purchaseJson;
+
 
         @ApiModelProperty("机构专辑有效期开始时间 ")
         @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -221,6 +227,9 @@ public class TenantAlbumWrapper {
         @ApiModelProperty(value = "采购周期", hidden = true)
         private Integer buyCycle;
 
+        @ApiModelProperty(value = "采购周期类型")
+        private String purchaseType;
+
         @ApiModelProperty(value = "采购机构", hidden = true)
         private Long tenantId;
 
@@ -368,5 +377,14 @@ public class TenantAlbumWrapper {
     }
 
 
+    @Data
+    public static class TenantAlbumPurchaseJson {
+
+        @ApiModelProperty("采购周期类型")
+        private String purchaseType;
+
+        @ApiModelProperty("金额")
+        private BigDecimal price;
+    }
 
 }

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

@@ -0,0 +1,268 @@
+package com.yonge.cooleshow.biz.dal.wrapper;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.Optional;
+
+/**
+ * 机构小组专辑配置表
+ * 2024-01-24 13:32:00
+ */
+@ApiModel(value = "TenantGroupAlbumWrapper对象", description = "机构小组专辑配置表查询对象")
+public class TenantGroupAlbumWrapper {
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" TenantGroupAlbumQuery-机构小组专辑配置表")
+    public static class TenantGroupAlbumQuery implements QueryInfo {
+
+        @ApiModelProperty("当前页")
+        private Integer page;
+
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+
+        @ApiModelProperty("关键字匹配")
+        private String keyword;
+
+        @ApiModelProperty("机构ID")
+        private Long tenantId;
+
+        @ApiModelProperty("机构专辑ID")
+        private Long tenantAlbumId;
+
+        @ApiModelProperty("机构小组ID")
+        private Long tenantGroupId;
+
+        public String getKeyword() {
+            return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
+        }
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static TenantGroupAlbumQuery from(String json) {
+            return JSON.parseObject(json, TenantGroupAlbumQuery.class);
+        }
+    }
+
+    @Data
+    @ApiModel(" TenantGroupAlbum-机构小组专辑配置表")
+    public static class TenantGroupAlbum {
+        @ApiModelProperty("主键ID")
+        private Long id;
+
+        @ApiModelProperty("机构小组ID")
+        @NotNull(message = "小组不能为空")
+        private Long tenantGroupId;
+
+        @ApiModelProperty("专辑ID")
+        @NotNull(message = "专辑ID不能为空")
+        private Long tenantAlbumId;
+
+        @ApiModelProperty("采购数量")
+        @NotNull(message = "有效期不能为空")
+        private Integer purchaseNum;
+
+        @ApiModelProperty("原价")
+        private BigDecimal originalPrice;
+
+        @ApiModelProperty("售价")
+        private BigDecimal actualPrice;
+
+        @ApiModelProperty("购买次数限制")
+        @NotNull(message = "购买次数限制不能为空")
+        private Boolean buyTimesFlag;
+
+        @ApiModelProperty("购买次数")
+        private Integer buyTimes = 0;
+
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static TenantGroupAlbum from(String json) {
+            return JSON.parseObject(json, TenantGroupAlbum.class);
+        }
+    }
+
+
+    @Data
+    @ApiModel("修改状态")
+    public static class UpdateStatus {
+
+        @ApiModelProperty("id")
+        @NotNull
+        private String ids;
+
+        @ApiModelProperty("状态")
+        @NotNull
+        private Boolean status;
+
+    }
+
+    @Data
+    @ApiModel("修改状态")
+    public static class Remove {
+
+        @ApiModelProperty("id")
+        @NotNull
+        private Long id;
+    }
+
+    @Data
+    @ApiModel(" TenantGroupAlbum-机构小组专辑配置表")
+    public static class TenantGroupAlbumVo {
+        @ApiModelProperty("主键ID")
+        private Long id;
+
+        @ApiModelProperty("机构小组ID")
+        private Long tenantGroupId;
+
+        @ApiModelProperty("专辑ID")
+        private Long tenantAlbumId;
+
+        @ApiModelProperty("采购数量")
+        private Integer purchaseNum;
+
+        @ApiModelProperty("原价")
+        private BigDecimal originalPrice;
+
+        @ApiModelProperty("售价")
+        private BigDecimal actualPrice;
+
+        @ApiModelProperty("购买次数限制")
+        private Boolean buyTimesFlag;
+
+        @ApiModelProperty("购买次数")
+        private Integer buyTimes;
+
+        @ApiModelProperty("状态")
+        private Boolean status;
+
+        @ApiModelProperty("采购周期")
+        private String purchasePeriod;
+
+        @ApiModelProperty("创建时间")
+        private Date createTime;
+
+        @ApiModelProperty("创建人")
+        private Long createBy;
+
+        @ApiModelProperty("更新人")
+        private Long updateBy;
+
+        @ApiModelProperty("更新时间")
+        private Date updateTime;
+
+        @ApiModelProperty("机构小组名称")
+        private String tenantGroupName;
+
+        @ApiModelProperty("专辑名称")
+        private String tenantAlbumName;
+
+    }
+    @Data
+    @ApiModel(" BuyTenantAlbumQuery-可购买机构专辑信息查询")
+    public static class BuyTenantAlbumQuery {
+
+        @ApiModelProperty("机构ID")
+        private Long tenantId;
+
+        @ApiModelProperty("小组ID")
+        private Long tenantGroupId;
+
+        @ApiModelProperty("机构小组专辑ID")
+        private Long tenantGroupAlbumId;
+    }
+
+
+
+    @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);
+        }
+    }
+
+}

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

@@ -102,6 +102,9 @@ public class TenantGroupWrapper {
         @ApiModelProperty("群成员数量")
         private Integer groupUserCount = 0;
 
+        @ApiModelProperty("专辑数量")
+        private Integer albumCount = 0;
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UserPaymentOrderWrapper.java

@@ -825,6 +825,10 @@ public class UserPaymentOrderWrapper {
         @ApiModelProperty("优惠券Id")
         private Long couponId;
 
+
+        @ApiModelProperty("学生购买机构专辑时的小组ID")
+        private Long tenantGroupAlbumId;
+
         @ApiModelProperty(value = "活动id", hidden = true)
         private Long activityId;
 

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

@@ -19,6 +19,8 @@
         , t.cost_price_ AS costPrice
         , t.category_type_id_ AS categoryTypeId
         , t.category_level_id_ AS categoryLevelId
+        , t.purchase_types_ AS purchaseTypes
+        , t.purchase_json_ AS purchaseJson
     </sql>
 
     <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper$TenantAlbum">

+ 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

+ 1 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumPurchaseMapper.xml

@@ -16,6 +16,7 @@
         , t.active_quantity_ AS activeQuantity
         , t.purchase_price_ AS purchasePrice
         , t.purchase_status_ AS purchaseStatus
+        , t.purchase_type_ AS purchaseType
         , t.active_status_ AS activeStatus
         , t.update_time_ AS updateTime
         , t.create_time_ AS createTime

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

@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.yonge.cooleshow.biz.dal.mapper.TenantGroupAlbumMapper">
+
+	 
+    
+    <!-- 表字段 -->
+    <sql id="baseColumns">
+         t.id_ AS id
+        , t.tenant_group_id_ AS tenantGroupId
+        , t.tenant_album_id_ AS tenantAlbumId
+        , t.status_ AS status
+        , t.purchase_num_ AS purchaseNum
+        , t.purchase_period_ AS purchasePeriod
+        , t.original_price_ AS originalPrice
+        , t.actual_price_ AS actualPrice
+        , t.buy_times_flag_ AS buyTimesFlag
+        , t.buy_times_ AS buyTimes
+        , t.del_flag_ AS delFlag
+        , t.create_time_ AS createTime
+        , t.create_by_ AS createBy
+        , t.update_by_ AS updateBy
+        , t.update_time_ AS updateTime
+        </sql> 
+    
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper$TenantGroupAlbumVo">
+		SELECT         
+        	<include refid="baseColumns" />
+        ,tg.name_ tenantGroupName
+        ,ta.name_ tenantAlbumName
+		FROM tenant_group_album t
+        LEFT JOIN tenant_group tg ON t.tenant_group_id_ = tg.id_
+        LEFT JOIN tenant_album ta ON t.tenant_album_id_ = ta.id_
+        <where>
+            t.del_flag_ = 0
+            <if test="param.tenantAlbumId != null">
+                AND t.tenant_album_id_ = #{param.tenantAlbumId}
+            </if>
+            <if test="param.tenantId != null">
+                AND tg.tenant_id_ = #{param.tenantId}
+            </if>
+            <if test="param.tenantGroupId != null">
+                AND tg.id_ = #{param.tenantGroupId}
+            </if>
+        </where>
+	</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 or param.tenantGroupAlbumId != 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 or param.tenantGroupAlbumId != 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  or param.tenantGroupAlbumId != null">
+                and t2.status_ = 1 and t2.del_flag_ = 0
+                <if test="param.tenantGroupId != null">
+                    and t2.tenant_group_id_ = #{param.tenantGroupId}
+                </if>
+                <if test="param.tenantGroupAlbumId != null">
+                    and t2.id_ = #{param.tenantGroupAlbumId}
+                </if>
+            </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>

+ 1 - 1
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/TenantAlbumSheetController.java

@@ -81,7 +81,7 @@ public class TenantAlbumSheetController extends BaseController {
         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_STUDENT);
         IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> page = tenantAlbumMusicService.selectPage(QueryInfo.getPage(query), query);
         return succeed((PageUtil.pageInfo(page)));

+ 1 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TenantAlbumSheetController.java

@@ -49,7 +49,7 @@ public class TenantAlbumSheetController extends BaseController {
         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.TEACHER);
         IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> page = tenantAlbumMusicService.selectPage(QueryInfo.getPage(query), query);
         return succeed((PageUtil.pageInfo(page)));

+ 1 - 1
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumSheetController.java

@@ -63,7 +63,7 @@ public class TenantAlbumSheetController extends BaseController {
         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)));