瀏覽代碼

Merge branch 'dev_v1.3.4_20220902' of http://git.dayaedu.com/yonge/cooleshow into dev_v1.3.4_20220902

Eric 2 年之前
父節點
當前提交
073a6641a9
共有 66 個文件被更改,包括 2135 次插入220 次删除
  1. 1 1
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/NewsController.java
  2. 10 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dto/AppParam.java
  3. 5 3
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/PmsPortalProductServiceImpl.java
  4. 1 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java
  5. 68 8
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/coupon/CouponIssueController.java
  6. 301 45
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/coupon/CouponIssueVo.java
  7. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityEvaluationRecordDao.java
  8. 30 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/LiveBroadcastRoomMemberDao.java
  9. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/LiveRoomDao.java
  10. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherDao.java
  11. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/LiveBroadcastRoomMemberDto.java
  12. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserParam.java
  13. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/LiveBroadcastRoomMemberSearch.java
  14. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumDetailSearch.java
  15. 26 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicSheetRelatedQueryInfo.java
  16. 103 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/LiveBroadcastRoomMember.java
  17. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/RoomInfoCache.java
  18. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MusicSheetType.java
  19. 5 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/CouponIssueMapper.java
  20. 16 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/SysUserMapper.java
  21. 47 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/CouponIssueQueryInfo.java
  22. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationRecordService.java
  23. 26 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CouponIssueService.java
  24. 43 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveBroadcastRoomMemberService.java
  25. 18 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomService.java
  26. 26 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  27. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java
  28. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationRecordServiceImpl.java
  29. 41 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityRegistrationServiceImpl.java
  30. 95 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CouponIssueServiceImp.java
  31. 46 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveBroadcastRoomMemberServiceImpl.java
  32. 101 13
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java
  33. 14 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java
  34. 32 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  35. 12 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  36. 32 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityRegistrationVo.java
  37. 70 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CouponIssueUserVo.java
  38. 46 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/HotTeacherVo.java
  39. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveBroadcastRoomMemberVo.java
  40. 5 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ShareProfitVo.java
  41. 72 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherLivingInfoVo.java
  42. 241 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/coupon/CouponIssueWrapper.java
  43. 27 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationRecordMapper.xml
  44. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityPlanRewardMapper.xml
  45. 40 9
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CouponIssueMapper.xml
  46. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  47. 37 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/LiveBroadcastRoomMemberMapper.xml
  48. 7 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/LiveRoomMapper.xml
  49. 3 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml
  50. 5 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  51. 2 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml
  52. 30 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SysUserMapper.xml
  53. 19 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  54. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherStyleVideoMapper.xml
  55. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml
  56. 24 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicAlbumController.java
  57. 55 29
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java
  58. 25 8
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentLiveRoomController.java
  59. 26 12
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/TeacherController.java
  60. 29 6
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/OpenClient.java
  61. 35 8
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicAlbumController.java
  62. 24 10
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java
  63. 10 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherLiveRoomController.java
  64. 16 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/open/OpenShareController.java
  65. 29 13
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/MusicSheetController.java
  66. 5 5
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenMusicAlbumController.java

+ 1 - 1
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/NewsController.java

@@ -259,7 +259,7 @@ public class NewsController extends BaseController {
 		// 1热门资讯
 		queryInfo.setType(1);
 		queryInfo.setPage(1);
-		queryInfo.setRows(3);
+		queryInfo.setRows(param.getNewsLimit());
 		Map<String, Object> params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
 		List<SysNewsInformationDto> rows = sysNewsInformationService.selectPage(queryInfo).getRows();

+ 10 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dto/AppParam.java

@@ -21,6 +21,16 @@ public class AppParam {
     @ApiModelProperty("老师端:TEACHER 学生端:STUDENT")
     private String clientType;
 
+    @ApiModelProperty("个人资讯条数 默认10条")
+    private int newsLimit = 10;
+
+    public int getNewsLimit() {
+        return newsLimit;
+    }
+
+    public void setNewsLimit(int newsLimit) {
+        this.newsLimit = newsLimit;
+    }
 
     public String getClientType() {
         return clientType;

+ 5 - 3
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/PmsPortalProductServiceImpl.java

@@ -81,11 +81,13 @@ public class PmsPortalProductServiceImpl implements PmsPortalProductService {
         if (sort == 1) {
             example.setOrderByClause("id desc");
         } else if (sort == 2) {
-            example.setOrderByClause("sale desc");
+            example.setOrderByClause("sale desc,id desc");
         } else if (sort == 3) {
-            example.setOrderByClause("price asc");
+            example.setOrderByClause("price asc,id desc");
         } else if (sort == 4) {
-            example.setOrderByClause("price desc");
+            example.setOrderByClause("price desc,id desc");
+        } else {
+            example.setOrderByClause("sort desc,id desc");
         }
         List<PmsProduct> pmsProducts = productMapper.selectByExample(example);
         List<Long> productIdList = pmsProducts.stream().map(PmsProduct::getId).collect(Collectors.toList());

+ 1 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java

@@ -99,6 +99,7 @@ public class MusicAlbumController extends BaseController {
         if (sysUser == null  || sysUser.getId() == null) {
             return failed("用户信息获取失败");
         }
+        query.setUserId(sysUser.getId());
         IPage<MusicAlbumVo> iPage = musicAlbumService.selectPage(PageUtil.getPage(query),query);
         return succeed(PageUtil.pageInfo(iPage));
     }

+ 68 - 8
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/coupon/CouponIssueController.java

@@ -1,19 +1,34 @@
 package com.yonge.cooleshow.admin.controller.coupon;
 
 
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.admin.io.request.coupon.CouponInfoVO;
 import com.yonge.cooleshow.admin.io.request.coupon.CouponIssueVo;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.CouponIssue;
 import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
+import com.yonge.cooleshow.biz.dal.queryInfo.CouponInfoQuery;
+import com.yonge.cooleshow.biz.dal.queryInfo.CouponIssueQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.CouponIssueService;
+import com.yonge.cooleshow.biz.dal.vo.CouponIssueUserVo;
+import com.yonge.cooleshow.biz.dal.vo.coupon.CouponIssueWrapper;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 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.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.time.Instant;
+import java.util.List;
+
+import static com.yonge.cooleshow.common.entity.HttpResponseResult.failed;
+import static com.yonge.cooleshow.common.entity.HttpResponseResult.succeed;
 
 /**
  * <p>
@@ -26,11 +41,15 @@ import java.time.Instant;
 @RestController
 @RequestMapping("/couponIssue")
 @Api(value = "优惠券发放信息", tags = "优惠券发放信息")
+@Validated
 public class CouponIssueController {
 
     @Autowired
     private CouponIssueService couponIssueService;
 
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
     /**
      * 优惠券发放分页信息
      */
@@ -38,7 +57,18 @@ public class CouponIssueController {
     @ApiOperation(value = "查询优惠券发放分页")
     public HttpResponseResult<PageInfo<CouponIssueVo.CouponIssuePageInfo>> queryCouponIssuePageInfo(@RequestBody @Valid CouponIssueVo.PageRequest request) {
 
-        return null;
+        if (request.getCouponId() == null) {
+            return failed("优惠券id不能为空");
+        }
+        IPage<CouponIssueWrapper> couponIssueWrapperIPage = couponIssueService.queryCouponIssueInfo(
+                PageUtil.getPage(request), CouponIssueQueryInfo.from(request.jsonString()));
+
+
+        // 数据转换
+        List<CouponIssueVo.CouponIssuePageInfo> pageInfos = JSON.parseArray(JSON.toJSONString(couponIssueWrapperIPage.getRecords()),
+                                                                    CouponIssueVo.CouponIssuePageInfo.class);
+
+        return succeed(PageUtil.getPageInfo(couponIssueWrapperIPage,pageInfos));
     }
 
 
@@ -47,18 +77,28 @@ public class CouponIssueController {
      */
     @PostMapping("/userPage")
     @ApiOperation(value = "优惠券发放用户分页信息")
-    public HttpResponseResult<PageInfo<CouponIssueVo.CouponIssueUserPageInfo>> queryCouponIssueUserPageInfo(@RequestBody @Valid CouponIssueVo.CouponIssueUserRequest request) {
+    public HttpResponseResult<PageInfo<CouponIssueUserVo>> queryCouponIssueUserPageInfo(@RequestBody @Valid CouponIssueVo.CouponIssueUserRequest request) {
+
+        IPage<CouponIssueUserVo> couponIssueUserVoIPage = couponIssueService.queryUser(PageUtil.getPage(request),
+                                                                                       request.getCouponId(),
+                                                                                       request.getClient(),
+                                                                                       request.getKeyword());
+
 
-        return null;
+        return succeed(PageUtil.pageInfo(couponIssueUserVoIPage));
     }
 
 
     @PostMapping("/issueUser")
     @ApiOperation(value = "发送优惠券")
     public HttpResponseResult<Boolean> issueCoupon(@RequestBody @Valid CouponIssueVo.CouponIssueUserParam param) {
-        couponIssueService.issueCoupon(param.getCouponId(),param.getUserParam());
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+        couponIssueService.issueCoupon(param.getCouponId(),param.getUserParam(),sysUser.getId(),param.getRemark());
 
-        return null;
+        return succeed();
     }
 
     @PostMapping("/withdraw/{couponIssueId}")
@@ -66,13 +106,33 @@ public class CouponIssueController {
     public HttpResponseResult<Boolean> withdrawCoupon(@PathVariable Long couponIssueId) {
         CouponIssue couponIssue = couponIssueService.getById(couponIssueId);
         if (couponIssue == null) {
-            return HttpResponseResult.failed("未找到数据");
+            return failed("未找到数据");
         }
         if (couponIssue.getUseState().equals(CouponUseStateEnum.USED)) {
-            return HttpResponseResult.failed("优惠券已被使用");
+            return failed("优惠券已被使用");
         }  else if(couponIssue.getEndTime().compareTo(Instant.now().getEpochSecond()) <0) {
-            return HttpResponseResult.failed("优惠券已过期");
+            return failed("优惠券已过期");
         }
         return HttpResponseResult.status(couponIssueService.withdrawCoupon(couponIssueId));
     }
+
+
+    /**
+     * 优惠券发放分页信息
+     */
+    @PostMapping("/user/page")
+    @ApiOperation(value = "查询用户(老师/学生)优惠券发放分页")
+    public HttpResponseResult<PageInfo<CouponIssueVo.UserCouponIssuePageInfo>> queryCouponIssuePageInfo(@RequestBody @Valid CouponIssueVo.UserCouponIssuePageRequest request) {
+
+        IPage<CouponIssueWrapper> couponIssueWrapperIPage = couponIssueService.queryCouponIssueInfo(
+                PageUtil.getPage(request), CouponIssueQueryInfo.from(request.jsonString()));
+
+
+        // 数据转换
+        List<CouponIssueVo.UserCouponIssuePageInfo> pageInfos = JSON.parseArray(JSON.toJSONString(couponIssueWrapperIPage.getRecords()),
+                                                                            CouponIssueVo.UserCouponIssuePageInfo.class);
+
+        return succeed(PageUtil.getPageInfo(couponIssueWrapperIPage,pageInfos));
+    }
+
 }

+ 301 - 45
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/coupon/CouponIssueVo.java

@@ -5,6 +5,8 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.dto.UserParam;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.SendTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponCategoryEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
@@ -28,20 +30,22 @@ import java.util.List;
  */
 public class CouponIssueVo {
 
-    @ApiModel(value = "优惠券发放信息分页请求", description = "优惠券发放信息分页请求")
+    @ApiModel("优惠券发放信息分页请求")
     public static class PageRequest extends QueryInfo {
 
         @ApiModelProperty(value = "优惠券id",required = true)
-        @NotNull(message = "优惠券id不能为空")
         private Long couponId;
 
         // 真实姓名/昵称/手机号/编号
         @ApiModelProperty("真实姓名/昵称/手机号/编号")
         private String keyword;
 
+        @ApiModelProperty("用户id")
+        private Long userId;
+
         // 客户端 TEACHER  STUDENT
         @ApiModelProperty("客户端 TEACHER  STUDENT")
-        private ClientEnum client;
+        private ClientEnum clientType;
 
         // 发放方式 PLATFORM AVTIVITY
         @ApiModelProperty("发放方式 PLATFORM:后台发放 AVTIVITY:活动领取")
@@ -75,6 +79,14 @@ public class CouponIssueVo {
         @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
         private Date usedEndTime;
 
+        public Long getUserId() {
+            return userId;
+        }
+
+        public void setUserId(Long userId) {
+            this.userId = userId;
+        }
+
         public Long getCouponId() {
             return couponId;
         }
@@ -91,12 +103,12 @@ public class CouponIssueVo {
             this.keyword = keyword;
         }
 
-        public ClientEnum getClient() {
-            return client;
+        public ClientEnum getClientType() {
+            return clientType;
         }
 
-        public void setClient(ClientEnum client) {
-            this.client = client;
+        public void setClientType(ClientEnum clientType) {
+            this.clientType = clientType;
         }
 
         public SendTypeEnum getIssueWay() {
@@ -158,7 +170,7 @@ public class CouponIssueVo {
     @Data
     @NoArgsConstructor
     @AllArgsConstructor
-    @ApiModel(value = "优惠券信息分页信息", description = "优惠券信息分页信息")
+    @ApiModel("优惠券发放信息分页信息")
     public static class CouponIssuePageInfo implements Serializable {
 
         @ApiModelProperty("用户id")
@@ -252,46 +264,105 @@ public class CouponIssueVo {
         }
     }
 
-    @ApiModel("发放优惠券用户分页数据")
-    public static class CouponIssueUserPageInfo {
+    @ApiModel("发送优惠券")
+    public static class CouponIssueUserParam {
+
+        @ApiModelProperty(value = "优惠券id",required = true)
+        @NotNull(message = "优惠券id不能为空")
+        private Long couponId;
+
+        @ApiModelProperty("用户信息")
+        @Size(min = 1,message = "请选择发送优惠券用户")
+        private List<UserParam> userParam;
+
+
+        @ApiModelProperty(value = "发放原因",required = true)
+        private String remark;
+
+        public String getRemark() {
+            return remark;
+        }
+
+        public void setRemark(String remark) {
+            this.remark = remark;
+        }
+
+        public Long getCouponId() {
+            return couponId;
+        }
+
+        public void setCouponId(Long couponId) {
+            this.couponId = couponId;
+        }
+
+        public List<UserParam> getUserParam() {
+            return userParam;
+        }
+
+        public void setUserParam(List<UserParam> userParam) {
+            this.userParam = userParam;
+        }
+
+
+    }
+
+    @ApiModel("用户查询优惠券分页请求")
+    public static class UserCouponIssuePageRequest extends QueryInfo{
+
 
         @ApiModelProperty("用户id")
+        @NotNull(message = "用户id不能为空")
         private Long userId;
 
-        @ApiModelProperty("实名")
-        private String realName;
-
-        @ApiModelProperty("昵称")
-        private String username;
 
-        @ApiModelProperty("客户端")
+        @ApiModelProperty("用户类型")
+        @NotNull(message = "用户类型不能为空")
         private ClientEnum clientType;
 
-        @ApiModelProperty("手机号")
-        private String phone;
+        @ApiModelProperty("优惠券编号/名称")
+        private String couponKeyword;
 
-        public Long getUserId() {
-            return userId;
+        @ApiModelProperty("优惠券类型 ")
+        private CouponTypeEnum couponType;
+
+        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:陪练课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
+        private CouponCategoryEnum couponCategory;
+
+        @ApiModelProperty("获取途径 PLATFORM:平台,ACTIVITY:活动")
+        private SendTypeEnum issueWay;
+
+        @ApiModelProperty("使用状态 USED:已使用 USABLE:未使用 EXPIRED:过期")
+        private CouponUseStateEnum useState;
+
+        @ApiModelProperty("领取开始时间")
+        private Date issueStartTime;
+
+        @ApiModelProperty("领取结束时间")
+        private Date issueEndTime;
+
+
+        public SendTypeEnum getIssueWay() {
+            return issueWay;
         }
 
-        public void setUserId(Long userId) {
-            this.userId = userId;
+        public void setIssueWay(SendTypeEnum issueWay) {
+            this.issueWay = issueWay;
         }
 
-        public String getRealName() {
-            return realName;
+        public CouponUseStateEnum getUseState() {
+            return useState;
         }
 
-        public void setRealName(String realName) {
-            this.realName = realName;
+        public void setUseState(CouponUseStateEnum useState) {
+            this.useState = useState;
         }
 
-        public String getUsername() {
-            return username;
+        public Long getUserId() {
+            return userId;
         }
 
-        public void setUsername(String username) {
-            this.username = username;
+        public void setUserId(Long userId) {
+            this.userId = userId;
         }
 
         public ClientEnum getClientType() {
@@ -302,25 +373,108 @@ public class CouponIssueVo {
             this.clientType = clientType;
         }
 
-        public String getPhone() {
-            return phone;
+        public String getCouponKeyword() {
+            return couponKeyword;
+        }
+
+        public void setCouponKeyword(String couponKeyword) {
+            this.couponKeyword = couponKeyword;
+        }
+
+        public CouponTypeEnum getCouponType() {
+            return couponType;
         }
 
-        public void setPhone(String phone) {
-            this.phone = phone;
+        public void setCouponType(CouponTypeEnum couponType) {
+            this.couponType = couponType;
+        }
+
+        public CouponCategoryEnum getCouponCategory() {
+            return couponCategory;
+        }
+
+        public void setCouponCategory(CouponCategoryEnum couponCategory) {
+            this.couponCategory = couponCategory;
+        }
+
+        public Date getIssueStartTime() {
+            return issueStartTime;
+        }
+
+        public void setIssueStartTime(Date issueStartTime) {
+            this.issueStartTime = issueStartTime;
+        }
+
+        public Date getIssueEndTime() {
+            return issueEndTime;
+        }
+
+        public void setIssueEndTime(Date issueEndTime) {
+            this.issueEndTime = issueEndTime;
+        }
+        public String jsonString() {
+            return JSON.toJSONString(this);
         }
     }
 
-    @ApiModel("发送优惠券")
-    public static class CouponIssueUserParam {
+    @ApiModel("老师学生查看领取过的优惠券信息分页数据")
+    public static class UserCouponIssuePageInfo {
 
-        @ApiModelProperty(value = "优惠券id",required = true)
-        @NotNull(message = "优惠券id不能为空")
+        @ApiModelProperty("用户id")
+        private Long userId;
+
+        @ApiModelProperty("优惠券id")
         private Long couponId;
 
-        @ApiModelProperty("用户信息")
-        @Size(min = 1,message = "请选择发送优惠券用户")
-        private List<UserParam> userParam;
+        @ApiModelProperty("优惠券名称")
+        private String couponName;
+
+        @ApiModelProperty("优惠券类型 ")
+        private CouponTypeEnum couponType;
+
+        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:陪练课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
+        private CouponCategoryEnum couponCategory;
+
+        @ApiModelProperty("使用状态 USED:已使用 USABLE:未使用 EXPIRED:过期")
+        private CouponUseStateEnum useState;
+
+        @ApiModelProperty("订单号")
+        private String orderNo;
+
+        @ApiModelProperty("有效期开始时间")
+        private Date startTime;
+
+        @ApiModelProperty("有效期结束时间")
+        private Date endTime;
+
+        @ApiModelProperty("发放时间")
+        private Date issueTime;
+
+        @ApiModelProperty("使用时间")
+        private Date useTime;
+
+        @ApiModelProperty("发放途径PLATFORM:后台发放 ACTIVITY:活动领取")
+        private SendTypeEnum issueWay;
+
+        @ApiModelProperty("发放人id")
+        private Long issuer;
+
+        @ApiModelProperty("发放人昵称")
+        private String issueUsername;
+
+        @ApiModelProperty("发放人实名")
+        private String issueRealName;
+
+        @ApiModelProperty("备注")
+        private String remark;
+
+        public Long getUserId() {
+            return userId;
+        }
+
+        public void setUserId(Long userId) {
+            this.userId = userId;
+        }
 
         public Long getCouponId() {
             return couponId;
@@ -330,14 +484,116 @@ public class CouponIssueVo {
             this.couponId = couponId;
         }
 
-        public List<UserParam> getUserParam() {
-            return userParam;
+        public String getCouponName() {
+            return couponName;
         }
 
-        public void setUserParam(List<UserParam> userParam) {
-            this.userParam = userParam;
+        public void setCouponName(String couponName) {
+            this.couponName = couponName;
         }
 
+        public CouponTypeEnum getCouponType() {
+            return couponType;
+        }
 
+        public void setCouponType(CouponTypeEnum couponType) {
+            this.couponType = couponType;
+        }
+
+        public CouponCategoryEnum getCouponCategory() {
+            return couponCategory;
+        }
+
+        public void setCouponCategory(CouponCategoryEnum couponCategory) {
+            this.couponCategory = couponCategory;
+        }
+
+        public CouponUseStateEnum getUseState() {
+            return useState;
+        }
+
+        public void setUseState(CouponUseStateEnum useState) {
+            this.useState = useState;
+        }
+
+        public String getOrderNo() {
+            return orderNo;
+        }
+
+        public void setOrderNo(String orderNo) {
+            this.orderNo = orderNo;
+        }
+
+        public Date getStartTime() {
+            return startTime;
+        }
+
+        public void setStartTime(Date startTime) {
+            this.startTime = startTime;
+        }
+
+        public Date getEndTime() {
+            return endTime;
+        }
+
+        public void setEndTime(Date endTime) {
+            this.endTime = endTime;
+        }
+
+        public Date getIssueTime() {
+            return issueTime;
+        }
+
+        public void setIssueTime(Date issueTime) {
+            this.issueTime = issueTime;
+        }
+
+        public Date getUseTime() {
+            return useTime;
+        }
+
+        public void setUseTime(Date useTime) {
+            this.useTime = useTime;
+        }
+
+        public SendTypeEnum getIssueWay() {
+            return issueWay;
+        }
+
+        public void setIssueWay(SendTypeEnum issueWay) {
+            this.issueWay = issueWay;
+        }
+
+        public Long getIssuer() {
+            return issuer;
+        }
+
+        public void setIssuer(Long issuer) {
+            this.issuer = issuer;
+        }
+
+        public String getIssueUsername() {
+            return issueUsername;
+        }
+
+        public void setIssueUsername(String issueUsername) {
+            this.issueUsername = issueUsername;
+        }
+
+        public String getIssueRealName() {
+            return issueRealName;
+        }
+
+        public void setIssueRealName(String issueRealName) {
+            this.issueRealName = issueRealName;
+        }
+
+        public String getRemark() {
+            return remark;
+        }
+
+        public void setRemark(String remark) {
+            this.remark = remark;
+        }
     }
 }

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityEvaluationRecordDao.java

@@ -51,4 +51,11 @@ public interface ActivityEvaluationRecordDao extends BaseMapper<ActivityEvaluati
 	ActivityRankingVo queryUserRanking(@Param("activityPlanId") Long activityPlanId, @Param("activityEvaluationId") Long activityEvaluationId, @Param("userId") Long userId);
 	
 	ActivityEvaluationRecord queryLastestRecord(@Param("activityPlanId") Long activityPlanId, @Param("userId") Long userId);
+
+	/**
+	 * 用户活动最高排名信息
+	 * @param userIds 用户ID
+	 * @return List<ActivityEvaluationRecord>
+	 */
+    List<ActivityEvaluationRecord> selectUserHighestRankingInfo(@Param("activityId") Long activityId, @Param("userIds") List<Long> userIds);
 }

+ 30 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/LiveBroadcastRoomMemberDao.java

@@ -0,0 +1,30 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+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 com.yonge.cooleshow.biz.dal.entity.LiveBroadcastRoomMember;
+import com.yonge.cooleshow.biz.dal.vo.LiveBroadcastRoomMemberVo;
+import com.yonge.cooleshow.biz.dal.dto.search.LiveBroadcastRoomMemberSearch;
+
+
+public interface LiveBroadcastRoomMemberDao extends BaseMapper<LiveBroadcastRoomMember>{
+	/**
+	 * 查询详情
+     * @author liweifan
+     * @date 2022-08-31 18:56:07
+     * @return: com.yonge.cooleshow.biz.dal.vo.LiveBroadcastRoomMemberVo
+	 */
+	LiveBroadcastRoomMemberVo detail(@Param("id") Long id);
+
+	/**
+	 * 分页查询
+     * @author liweifan
+     * @date 2022-08-31 18:56:07
+     * @return: com.yonge.cooleshow.biz.dal.vo.LiveBroadcastRoomMemberVo
+	 */
+	List<LiveBroadcastRoomMemberVo> selectPage(@Param("page") IPage page, @Param("param") LiveBroadcastRoomMemberSearch liveBroadcastRoomMember);
+	
+}

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/LiveRoomDao.java

@@ -2,6 +2,8 @@ package com.yonge.cooleshow.biz.dal.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yonge.cooleshow.biz.dal.entity.LiveRoom;
+import com.yonge.cooleshow.biz.dal.vo.TeacherLivingInfoVo;
+
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -17,5 +19,7 @@ public interface LiveRoomDao extends BaseMapper<LiveRoom> {
     int insertBatch(@Param("entities") List<LiveRoom> entities);
 
     LiveRoom getLiveInRoomBySpeakerId(@Param("speakerId") Long speakerId);
+    
+    List<TeacherLivingInfoVo> queryTeacherLivingList();
 }
 

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherDao.java

@@ -9,8 +9,10 @@ import com.yonge.cooleshow.biz.dal.dto.BasicUserInfo;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
+import com.yonge.cooleshow.biz.dal.vo.HotTeacherVo;
 import com.yonge.cooleshow.biz.dal.vo.MyFens;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
+
 import org.apache.ibatis.annotations.Param;
 
 public interface TeacherDao extends BaseMapper<Teacher> {
@@ -90,4 +92,10 @@ public interface TeacherDao extends BaseMapper<Teacher> {
      * @return
      */
     List<MyFens> queryMyFans(@Param("page") IPage<MyFens> page, @Param("teacherId") Long teacherId);
+    
+    /**
+     * 查询热门老师
+     * @return
+     */
+    List<HotTeacherVo> queryHotTeacherList();
 }

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/LiveBroadcastRoomMemberDto.java

@@ -0,0 +1,13 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.entity.LiveBroadcastRoomMember;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-08-31 18:56:07
+ */
+@ApiModel(value = "LiveBroadcastRoomMemberDto对象", description = "直播进出记录数据传输对象")
+public class LiveBroadcastRoomMemberDto extends LiveBroadcastRoomMember{
+	private static final long serialVersionUID = 1L;
+}

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserParam.java

@@ -4,6 +4,8 @@ import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * Description
  *
@@ -14,9 +16,11 @@ import io.swagger.annotations.ApiModelProperty;
 public class UserParam{
 
     @ApiModelProperty("用户id")
+    @NotNull(message = "用户id不能为空")
     private Long userId;
 
     @ApiModelProperty("客户端类型 TEACHER :老师 STUDENT:学生")
+    @NotNull(message = "客户端类型不能为空")
     private ClientEnum clientType;
 
     public Long getUserId() {

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/LiveBroadcastRoomMemberSearch.java

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-08-31 18:56:07
+ */
+@ApiModel(value = "LiveBroadcastRoomMemberSearch对象", description = "直播进出记录查询对象")
+public class LiveBroadcastRoomMemberSearch extends QueryInfo{
+	private static final long serialVersionUID = 1L;
+
+}

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumDetailSearch.java

@@ -27,6 +27,18 @@ public class MusicAlbumDetailSearch extends MusicSheetSearch {
     @ApiModelProperty(value = "假删除 0 : 未删除 1:已删除",hidden = true)
     private Boolean delFlag = false;
 
+    @ApiModelProperty("相关专辑数,默认4")
+    private Integer relatedNum = 4;
+
+
+    public Integer getRelatedNum() {
+        return relatedNum;
+    }
+
+    public void setRelatedNum(Integer relatedNum) {
+        this.relatedNum = relatedNum;
+    }
+
     public Long getId() {
         return id;
     }

+ 26 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicSheetRelatedQueryInfo.java

@@ -0,0 +1,26 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.yonge.toolset.base.page.QueryInfo;
+
+public class MusicSheetRelatedQueryInfo extends QueryInfo {
+
+	private Long albumId;
+	
+	private Long musicSheetId;
+
+	public Long getAlbumId() {
+		return albumId;
+	}
+
+	public void setAlbumId(Long albumId) {
+		this.albumId = albumId;
+	}
+
+	public Long getMusicSheetId() {
+		return musicSheetId;
+	}
+
+	public void setMusicSheetId(Long musicSheetId) {
+		this.musicSheetId = musicSheetId;
+	}
+}

+ 103 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/LiveBroadcastRoomMember.java

@@ -0,0 +1,103 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * 直播进出记录
+ */
+@TableName("live_broadcast_room_member")
+@ApiModel(value = "LiveBroadcastRoomMember对象", description = "直播进出记录")
+public class LiveBroadcastRoomMember implements Serializable {
+	private static final long serialVersionUID = 1L;
+    @ApiModelProperty("主键 ")
+    @TableId(value = "id_", type = IdType.AUTO)
+    private Integer id;
+    @ApiModelProperty("房间编号 ")
+	@TableField(value = "room_uid_")
+    private String roomUid;
+    @ApiModelProperty("进入房间的人员id/学生id ")
+	@TableField(value = "user_id_")
+    private Integer userId;
+    @ApiModelProperty("进入房间时间 ")
+	@TableField(value = "join_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date joinTime;
+    @ApiModelProperty("进出类型 IN  OUT ")
+	@TableField(value = "type_")
+    private String type;
+    @ApiModelProperty("是否主讲人 0:否 1:是 ")
+	@TableField(value = "speaker_")
+    private Integer speaker;
+
+    @ApiModelProperty("clientIp")
+    @TableField(value = "client_ip_")
+    private String clientIp;
+
+    public String getClientIp() {
+        return clientIp;
+    }
+
+    public void setClientIp(String clientIp) {
+        this.clientIp = clientIp;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+    
+	public String getRoomUid() {
+        return roomUid;
+    }
+
+    public void setRoomUid(String roomUid) {
+        this.roomUid = roomUid;
+    }
+    
+	public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+    
+	public Date getJoinTime() {
+        return joinTime;
+    }
+
+    public void setJoinTime(Date joinTime) {
+        this.joinTime = joinTime;
+    }
+    
+	public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+    
+	public Integer getSpeaker() {
+        return speaker;
+    }
+
+    public void setSpeaker(Integer speaker) {
+        this.speaker = speaker;
+    }
+    
+}

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/RoomInfoCache.java

@@ -72,6 +72,17 @@ public class RoomInfoCache implements Serializable {
     @ApiModelProperty(value = "当前观看人数")
     private Integer lookNum;
 
+    @ApiModelProperty(value = "是否允许连麦 0允许 1不允许")
+    private Integer whether_mic = 0;
+
+    public Integer getWhether_mic() {
+        return whether_mic;
+    }
+
+    public void setWhether_mic(Integer whether_mic) {
+        this.whether_mic = whether_mic;
+    }
+
     public Integer getExpiredCloseMinute() {
         return expiredCloseMinute;
     }

+ 27 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MusicSheetType.java

@@ -0,0 +1,27 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.yonge.toolset.base.enums.BaseEnum;
+
+public enum MusicSheetType implements BaseEnum<String, MusicSheetType> {
+	
+	ALBUM("专辑"),SINGLE("单曲");
+	
+	private String code;
+	
+	private String msg;
+	
+	MusicSheetType(String msg) {
+		this.msg = msg;
+		this.code = this.name();
+	}
+
+	@Override
+	public String getCode() {
+		return this.code;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+}

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

@@ -1,11 +1,15 @@
 package com.yonge.cooleshow.biz.dal.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.entity.CouponIssue;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yonge.cooleshow.biz.dal.queryInfo.CouponIssueQueryInfo;
+import com.yonge.cooleshow.biz.dal.vo.coupon.CouponIssueWrapper;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * <p>
  * 优惠券发放 Mapper 接口
@@ -17,5 +21,5 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface CouponIssueMapper extends BaseMapper<CouponIssue> {
 
-    void queryCouponIssueInfo(@Param("query") CouponIssueQueryInfo query);
+    List<CouponIssueWrapper> queryCouponIssueInfo(IPage<CouponIssueWrapper> page, @Param("query") CouponIssueQueryInfo query);
 }

+ 16 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/SysUserMapper.java

@@ -1,9 +1,15 @@
 package com.yonge.cooleshow.biz.dal.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.entity.SysUser;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.vo.CouponIssueUserVo;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * <p>
  * 用户表 Mapper 接口
@@ -15,4 +21,14 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface SysUserMapper extends BaseMapper<SysUser> {
 
+    /**
+     * 获取能发放优惠券的用户信息
+     *
+     * @param iPage
+     * @param client  客户端类型
+     * @param keyword 查询条件
+     * @return
+     */
+    List<CouponIssueUserVo> queryCouponIssueUser(@Param("iPage") IPage<CouponIssueUserVo> iPage, @Param(
+            "client") ClientEnum client, @Param("keyword") String keyword);
 }

+ 47 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/CouponIssueQueryInfo.java

@@ -1,7 +1,10 @@
 package com.yonge.cooleshow.biz.dal.queryInfo;
 
+import com.alibaba.fastjson.JSON;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.SendTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponCategoryEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
 
 import java.io.Serializable;
@@ -30,7 +33,7 @@ public class CouponIssueQueryInfo implements Serializable {
     private SendTypeEnum issueWay;
 
     // 使用状态 USED USABLE EXPIRED
-    private CouponUseStateEnum useStatus;
+    private CouponUseStateEnum useState;
 
     //  发放开始时间
     private Date issueStartTime;
@@ -44,6 +47,45 @@ public class CouponIssueQueryInfo implements Serializable {
     // 使用结束时间
     private Date usedEndTime;
 
+
+    // 优惠券编号/名称
+    private String couponKeyword;
+
+    // 优惠券类型
+    private CouponTypeEnum couponType;
+
+    // 可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:陪练课购买券 LIVE:直播课购买券  VIDEO:视频课购买券
+    private CouponCategoryEnum couponCategory;
+
+    public static CouponIssueQueryInfo from(String recv) {
+
+        return JSON.parseObject(recv, CouponIssueQueryInfo.class);
+    }
+
+    public String getCouponKeyword() {
+        return couponKeyword;
+    }
+
+    public void setCouponKeyword(String couponKeyword) {
+        this.couponKeyword = couponKeyword;
+    }
+
+    public CouponTypeEnum getCouponType() {
+        return couponType;
+    }
+
+    public void setCouponType(CouponTypeEnum couponType) {
+        this.couponType = couponType;
+    }
+
+    public CouponCategoryEnum getCouponCategory() {
+        return couponCategory;
+    }
+
+    public void setCouponCategory(CouponCategoryEnum couponCategory) {
+        this.couponCategory = couponCategory;
+    }
+
     public Long getUserId() {
         return userId;
     }
@@ -84,12 +126,12 @@ public class CouponIssueQueryInfo implements Serializable {
         this.couponId = couponId;
     }
 
-    public CouponUseStateEnum getUseStatus() {
-        return useStatus;
+    public CouponUseStateEnum getUseState() {
+        return useState;
     }
 
-    public void setUseStatus(CouponUseStateEnum useStatus) {
-        this.useStatus = useStatus;
+    public void setUseState(CouponUseStateEnum useState) {
+        this.useState = useState;
     }
 
     public Date getIssueStartTime() {

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

@@ -79,4 +79,12 @@ public interface ActivityEvaluationRecordService extends IService<ActivityEvalua
 	 * @return
 	 */
 	ActivityRankingVo queryUserRanking(Long activityPlanId, Long activityEvaluationId, Long userId);
+
+	/**
+	 * 用户活动最高排名信息
+	 * @param activityId 活动ID
+	 * @param userIds 用户ID
+	 * @return List<ActivityEvaluationRecord>
+	 */
+	List<ActivityEvaluationRecord> queryActivityUserHighestRankingInfo(Long activityId, List<Long> userIds);
 }

+ 26 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CouponIssueService.java

@@ -1,8 +1,13 @@
 package com.yonge.cooleshow.biz.dal.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.UserParam;
 import com.yonge.cooleshow.biz.dal.entity.CouponIssue;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.queryInfo.CouponIssueQueryInfo;
+import com.yonge.cooleshow.biz.dal.vo.CouponIssueUserVo;
+import com.yonge.cooleshow.biz.dal.vo.coupon.CouponIssueWrapper;
 
 import java.util.List;
 
@@ -17,6 +22,15 @@ import java.util.List;
 public interface CouponIssueService extends IService<CouponIssue> {
 
     /**
+     * 优惠券发放记录分页
+     *
+     * @param page
+     * @param query
+     * @return
+     */
+    IPage<CouponIssueWrapper> queryCouponIssueInfo(IPage<CouponIssueWrapper> page, CouponIssueQueryInfo query);
+
+    /**
      * 撤销优惠券
      *
      * @param couponIssueId 优惠券发放记录id
@@ -26,9 +40,19 @@ public interface CouponIssueService extends IService<CouponIssue> {
 
     /**
      * 发放优惠券
-     *
      * @param couponId 优惠券id
      * @param userParam 用户信息
+     * @param issuer
+     * @param reason
+     */
+    void issueCoupon(Long couponId, List<UserParam> userParam, Long issuer, String reason);
+
+    /**
+     * 查询能发放优惠券的用户列表
+     *
+     * @param couponId 优惠券id
+     * @param client 客户端
+     * @param keyword 真实姓名/昵称/手机号/编号
      */
-    void issueCoupon(Long couponId, List<UserParam> userParam);
+    IPage<CouponIssueUserVo> queryUser(IPage<CouponIssueUserVo> iPage, Long couponId, ClientEnum client, String keyword);
 }

+ 43 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveBroadcastRoomMemberService.java

@@ -0,0 +1,43 @@
+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.InOrOutEnum;
+import com.yonge.cooleshow.biz.dal.vo.LiveBroadcastRoomMemberVo;
+import com.yonge.cooleshow.biz.dal.dto.search.LiveBroadcastRoomMemberSearch;
+import com.yonge.cooleshow.biz.dal.entity.LiveBroadcastRoomMember;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+
+import java.util.Date;
+
+/**
+ * 直播进出记录 服务类
+ * @author liweifan
+ * @date 2022-08-31
+ */
+public interface LiveBroadcastRoomMemberService extends IService<LiveBroadcastRoomMember>  {
+
+	/**
+     * 查询详情
+     * @author liweifan
+ 	 * @date 2022-08-31
+     */
+	LiveBroadcastRoomMemberVo detail(Long id);
+
+    /**
+     * 分页查询
+     * @author liweifan
+ 	 * @date 2022-08-31
+     */
+    IPage<LiveBroadcastRoomMemberVo> selectPage(IPage<LiveBroadcastRoomMemberVo> page, LiveBroadcastRoomMemberSearch query);
+
+	/**
+	 * 直播进出记录
+	 *
+	 * @param roomUid 直播房间号
+	 * @param userId 用户id
+	 * @param inOrOut 进出类型
+	 * @param speaker 是否主讲人
+	 */
+	void saveRecord(String roomUid, Long userId, InOrOutEnum inOrOut, YesOrNoEnum speaker);
+}

+ 18 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomService.java

@@ -1,16 +1,17 @@
 package com.yonge.cooleshow.biz.dal.service;
 
+import java.util.List;
+import java.util.Map;
+
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.LiveRoomDao;
 import com.yonge.cooleshow.biz.dal.entity.ImRoomMessage;
 import com.yonge.cooleshow.biz.dal.entity.ImUserStateSync;
 import com.yonge.cooleshow.biz.dal.entity.LiveRoom;
 import com.yonge.cooleshow.biz.dal.entity.RoomInfoCache;
+import com.yonge.cooleshow.biz.dal.vo.TeacherLivingInfoVo;
 import com.yonge.toolset.base.page.PageInfo;
 
-import java.util.List;
-import java.util.Map;
-
 /**
  * 直播房间与课程的关系表表(LiveRoom)表服务接口
  *
@@ -120,6 +121,20 @@ public interface LiveRoomService extends IService<LiveRoom> {
      * @param speakerId 房间uid
      */
     LiveRoom getLiveInRoomBySpeakerId(Long speakerId);
+    
+    /**
+     * 查询老师正在直播的列表
+     * 
+     * @return
+     */
+    List<TeacherLivingInfoVo> queryTeacherLivingList();
 
+    /**
+     * 设置是否连麦
+     *
+     * @param roomUid 房间号
+     * @param whetherMic 是否连麦 0: 是 1:否
+     */
+    void whetherMic(String roomUid, Integer whetherMic);
 }
 

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

@@ -1,23 +1,40 @@
 package com.yonge.cooleshow.biz.dal.service;
 
+import java.util.List;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.dto.ReasonDto;
-import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetExport;
+import com.yonge.cooleshow.biz.dal.dto.ReasonDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
-import com.yonge.cooleshow.biz.dal.dto.search.*;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumDetailSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetOrderSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.TeacherMusicSheetAuditSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.TeacherMusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MusicSheetType;
+import com.yonge.cooleshow.biz.dal.vo.HomeMusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetShareVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetWebsiteDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.ShareProfitVo;
+import com.yonge.cooleshow.biz.dal.vo.StudentMusicSheetOrderVo;
+import com.yonge.cooleshow.biz.dal.vo.StudentTotalVo;
+import com.yonge.cooleshow.biz.dal.vo.TeacherAuditMusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.TeacherMusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.TeacherTotalVo;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 
-import java.util.List;
-
 /**
  * MusicSheetService服务类
  * @author yzp
@@ -35,6 +52,8 @@ public interface MusicSheetService extends IService<MusicSheet> {
      * @return iPage 分页信息
      */
     IPage<MusicSheetVo> selectPage(IPage<MusicSheetVo> page, MusicSheetSearch query);
+    
+    IPage<MusicSheetVo> queryRelatedList(IPage<MusicSheetVo> page, Long albumId, Long musicSheetId);
 
     /**
      * 曲目状态修改 启用、停用

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

@@ -134,4 +134,11 @@ public interface TeacherService extends IService<Teacher> {
      * @param teacherTagEnum 标签
      */
     void setTeacherTag(Long userId, TeacherTagEnum teacherTagEnum);
+    
+    /**
+     * 查询热门老师 
+     * 按照老师粉丝数按降序排列,且标记老师是否真正临时直播
+     * @return
+     */
+    List<HotTeacherVo> queryHotTeacherList();
 }

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

@@ -3,7 +3,9 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 
+import com.google.common.collect.Lists;
 import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -99,4 +101,24 @@ public class ActivityEvaluationRecordServiceImpl extends ServiceImpl<ActivityEva
 		return baseMapper.queryUserRanking(activityPlanId, activityEvaluationId, userId);
 	}
 
+    /**
+     * 用户活动最高排名信息
+     *
+     * @param activityId 活动ID
+     * @param userIds 用户ID
+     * @return List<ActivityEvaluationRecord>
+     */
+    @Override
+    public List<ActivityEvaluationRecord> queryActivityUserHighestRankingInfo(Long activityId, List<Long> userIds) {
+
+        if (CollectionUtils.isEmpty(userIds)) {
+            return Lists.newArrayList();
+        }
+
+        // 用户最高排名信息
+        List<ActivityEvaluationRecord> records = getBaseMapper().selectUserHighestRankingInfo(activityId, userIds);
+
+        return Optional.ofNullable(records).orElse(Lists.newArrayList());
+    }
+
 }

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

@@ -2,29 +2,65 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluationRecord;
+import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationRecordService;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import com.yonge.cooleshow.biz.dal.entity.ActivityRegistration;
 import com.yonge.cooleshow.biz.dal.vo.ActivityRegistrationVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityRegistrationSearch;
 import com.yonge.cooleshow.biz.dal.dao.ActivityRegistrationDao;
 import com.yonge.cooleshow.biz.dal.service.ActivityRegistrationService;
 
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
+@Slf4j
 @Service
 public class ActivityRegistrationServiceImpl extends ServiceImpl<ActivityRegistrationDao, ActivityRegistration> implements ActivityRegistrationService {
-    private final static Logger log = LoggerFactory.getLogger(ActivityRegistrationServiceImpl.class);
 
+    @Autowired
+    private ActivityEvaluationRecordService activityEvaluationRecordService;
 	@Override
     public ActivityRegistrationVo detail(Long id) {
         return baseMapper.detail(id);
     }
     
     @Override
-    public IPage<ActivityRegistrationVo> selectPage(IPage<ActivityRegistrationVo> page, ActivityRegistrationSearch query){
-        return page.setRecords(baseMapper.selectPage(page, query));
+    public IPage<ActivityRegistrationVo> selectPage(IPage<ActivityRegistrationVo> page, ActivityRegistrationSearch query) {
+
+        // 活动参与用户信息
+        List<ActivityRegistrationVo> activityUserInfos = baseMapper.selectPage(page, query);
+
+        List<Long> userIds = activityUserInfos.stream()
+                .map(ActivityRegistration::getUserId).distinct().collect(Collectors.toList());
+
+        // 查询用户活动评测获排名最高记录
+        if (CollectionUtils.isNotEmpty(userIds)) {
+
+            Map<Long, ActivityEvaluationRecord> collect = activityEvaluationRecordService.queryActivityUserHighestRankingInfo(query.getActivityId(), userIds).stream()
+                    .collect(Collectors.toMap(ActivityEvaluationRecord::getUserId, Function.identity(), (o, n) -> n));
+
+            ActivityEvaluationRecord record;
+            for (ActivityRegistrationVo item : activityUserInfos) {
+
+                if (collect.containsKey(item.getUserId())) {
+
+                    record = collect.get(item.getUserId());
+                    // 重置当前时间为用户最高排名时间
+                    item.score(record.getScore())
+                            .times(record.getTimes())
+                            .setCreateTime(record.getCreateTime());
+                }
+            }
+        }
+
+        return page.setRecords(activityUserInfos);
     }
 
     @Override

+ 95 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CouponIssueServiceImp.java

@@ -1,18 +1,34 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.UserParam;
 import com.yonge.cooleshow.biz.dal.entity.CouponInfo;
 import com.yonge.cooleshow.biz.dal.entity.CouponIssue;
+import com.yonge.cooleshow.biz.dal.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.SendTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
 import com.yonge.cooleshow.biz.dal.mapper.CouponIssueMapper;
+import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.queryInfo.CouponIssueQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.CouponInfoService;
 import com.yonge.cooleshow.biz.dal.service.CouponIssueService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.vo.CouponIssueUserVo;
+import com.yonge.cooleshow.biz.dal.vo.coupon.CouponIssueWrapper;
 import com.yonge.cooleshow.common.enums.EStatus;
+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 java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -27,10 +43,36 @@ public class CouponIssueServiceImp extends ServiceImpl<CouponIssueMapper, Coupon
 
     @Autowired
     private CouponInfoService couponInfoService;
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+
+    @Override
+    public IPage<CouponIssueWrapper> queryCouponIssueInfo(IPage<CouponIssueWrapper> page, CouponIssueQueryInfo query) {
+        List<CouponIssueWrapper> couponIssueWrappers = baseMapper.queryCouponIssueInfo(page, query);
+
+        // 获取发放人信息
+        List<Long> issuerIdList = couponIssueWrappers.stream()
+                                                .map(CouponIssueWrapper::getIssuer)
+                                                .collect(Collectors.toList());
+        List<SysUser> sysUsers = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(issuerIdList)) {
+            sysUsers = sysUserMapper.selectBatchIds(issuerIdList);
+        }
+
+        Map<Long, List<SysUser>> userIdMap = sysUsers.stream().collect(Collectors.groupingBy(SysUser::getId));
+
+
+        for (CouponIssueWrapper couponIssueWrapper : couponIssueWrappers) {
+            List<SysUser> issuerList = userIdMap.get(couponIssueWrapper.getIssuer());
+            if (!CollectionUtils.isEmpty(issuerList)) {
+                couponIssueWrapper.setIssueRealName(issuerList.get(0).getRealName());
+                couponIssueWrapper.setIssueUsername(issuerList.get(0).getUsername());
+            }
+        }
+        return page.setRecords(couponIssueWrappers);
 
 
-    public void queryCouponIssueInfo(CouponIssueQueryInfo query) {
-        baseMapper.queryCouponIssueInfo(query);
     }
 
     @Override
@@ -42,9 +84,59 @@ public class CouponIssueServiceImp extends ServiceImpl<CouponIssueMapper, Coupon
     }
 
     @Override
-    public void issueCoupon(Long couponId, List<UserParam> userParam) {
+    public void issueCoupon(Long couponId, List<UserParam> userParam, Long issuer, String reason) {
         CouponInfo couponInfo = couponInfoService.queryCouponInfoById(couponId);
         // 判断优惠券类型 设置优惠券时间
+        Long startTime = null;
+        Long endTime = null;
+        if (couponInfo.getValidDay() != null && couponInfo.getValidDay() >0) {
+            startTime = LocalDateTime.now().atZone(ZoneId.systemDefault()).toEpochSecond();
+            endTime = LocalDateTime.now().plusDays(couponInfo.getValidDay()).atZone(ZoneId.systemDefault()).toEpochSecond();
+        } else {
+            startTime = couponInfo.getStartTime();
+            endTime = couponInfo.getEndTime();
+        }
+        List<CouponIssue> couponIssueList = new ArrayList<>();
+        for (UserParam param : userParam) {
+            if (param.getUserId() == null) {
+                throw new BizException("发放用户id不能为空");
+            }
+            if (param.getClientType() == null) {
+                throw new BizException("发放客户端不能为空");
+            }
+            CouponIssue couponIssue = new CouponIssue();
+            couponIssue.setCouponId(couponId);
+            couponIssue.setIssuer(issuer);
+            couponIssue.setIssueTime(new Date().getTime());
+            couponIssue.setIssueWay(SendTypeEnum.PLATFORM.getCode());
+            couponIssue.setRemark(reason);
+            couponIssue.setStartTime(startTime);
+            couponIssue.setEndTime(endTime);
+            couponIssue.setUseState(CouponUseStateEnum.USABLE);
+            couponIssue.setClientType(param.getClientType().getCode());
+            couponIssue.setUserId(param.getUserId());
+            couponIssue.setStatus(1);
+            couponIssueList.add(couponIssue);
+        }
+        this.saveBatch(couponIssueList);
+
+
+    }
+
+    @Override
+    public IPage<CouponIssueUserVo> queryUser(IPage<CouponIssueUserVo> iPage, Long couponId, ClientEnum client, String keyword) {
+        CouponInfo couponInfo = couponInfoService.getById(couponId);
+        if (couponInfo == null) {
+            throw new BizException("未找到优惠券信息");
+        }
+        if (client == null) {
+            client = ClientEnum.valueOf(couponInfo.getClientType());
+        }
+
+        List<CouponIssueUserVo> list = sysUserMapper.queryCouponIssueUser(iPage,client, keyword);
+
+        return iPage.setRecords(list);
+
 
     }
 }

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

@@ -0,0 +1,46 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import org.springframework.stereotype.Service;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.yonge.cooleshow.biz.dal.entity.LiveBroadcastRoomMember;
+import com.yonge.cooleshow.biz.dal.vo.LiveBroadcastRoomMemberVo;
+import com.yonge.cooleshow.biz.dal.dto.search.LiveBroadcastRoomMemberSearch;
+import com.yonge.cooleshow.biz.dal.dao.LiveBroadcastRoomMemberDao;
+import com.yonge.cooleshow.biz.dal.service.LiveBroadcastRoomMemberService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+
+
+@Service
+public class LiveBroadcastRoomMemberServiceImpl extends ServiceImpl<LiveBroadcastRoomMemberDao, LiveBroadcastRoomMember> implements LiveBroadcastRoomMemberService {
+    private final static Logger log = LoggerFactory.getLogger(LiveBroadcastRoomMemberServiceImpl.class);
+
+	@Override
+    public LiveBroadcastRoomMemberVo detail(Long id) {
+        return baseMapper.detail(id);
+    }
+    
+    @Override
+    public IPage<LiveBroadcastRoomMemberVo> selectPage(IPage<LiveBroadcastRoomMemberVo> page, LiveBroadcastRoomMemberSearch query){
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+
+    @Override
+    @Transactional
+    public void saveRecord(String roomUid, Long userId, InOrOutEnum inOrOut, YesOrNoEnum speaker) {
+        LiveBroadcastRoomMember liveBroadcastRoomMember = new LiveBroadcastRoomMember();
+        liveBroadcastRoomMember.setRoomUid(roomUid);
+        liveBroadcastRoomMember.setUserId(userId.intValue());
+        liveBroadcastRoomMember.setType(inOrOut.getCode());
+        liveBroadcastRoomMember.setSpeaker(speaker.getCode());
+        liveBroadcastRoomMember.setJoinTime(new Date());
+        this.save(liveBroadcastRoomMember);
+    }
+
+}

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

@@ -1,5 +1,35 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.COOLESHOW;
+import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.LIVE_ROOM_HEART_BEAT;
+import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.LIVE_ROOM_INFO;
+import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.LIVE_ROOM_LIKE;
+import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.LIVE_ROOM_ONLINE_USER_LIST;
+import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.LIVE_ROOM_TOTAL_USER_LIST;
+import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.LIVE_USER_LAST_CLIENT_IP;
+import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.LIVE_USER_LAST_TIME;
+import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.LIVE_USER_ROOM;
+import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.ROOM_UID;
+import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.TEACHER_TEMP_LIVE_ROOM;
+import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.USER_ID;
+import static com.yonge.cooleshow.common.constant.SysConfigConstant.DESTROY_EXPIRED_LIVE_ROOM_MINUTE;
+import static com.yonge.cooleshow.common.constant.SysConfigConstant.PRE_CREATE_LIVE_ROOM_MINUTE;
+
+import java.time.LocalDate;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.TimeUnit;
+import java.util.function.BiFunction;
+import java.util.function.BiPredicate;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -14,6 +44,7 @@ import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.IMHelper;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
@@ -30,18 +61,50 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.time.LocalDate;
-import java.util.*;
-import java.util.concurrent.TimeUnit;
-import java.util.function.BiFunction;
-import java.util.function.BiPredicate;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.*;
-import static com.yonge.cooleshow.common.constant.SysConfigConstant.DESTROY_EXPIRED_LIVE_ROOM_MINUTE;
-import static com.yonge.cooleshow.common.constant.SysConfigConstant.PRE_CREATE_LIVE_ROOM_MINUTE;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dao.LiveRoomDao;
+import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentPayment;
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.yonge.cooleshow.biz.dal.entity.IMApiResultInfo;
+import com.yonge.cooleshow.biz.dal.entity.ImRoomMessage;
+import com.yonge.cooleshow.biz.dal.entity.ImUserStateSync;
+import com.yonge.cooleshow.biz.dal.entity.LiveRoom;
+import com.yonge.cooleshow.biz.dal.entity.RoomInfoCache;
+import com.yonge.cooleshow.biz.dal.entity.RoomUserInfoCache;
+import com.yonge.cooleshow.biz.dal.entity.StudentAttendance;
+import com.yonge.cooleshow.biz.dal.entity.TeacherAttendance;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.RoomTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.TeacherSalaryEnum;
+import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleStudentPaymentService;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleTeacherSalaryService;
+import com.yonge.cooleshow.biz.dal.service.LiveRoomService;
+import com.yonge.cooleshow.biz.dal.service.StudentAttendanceService;
+import com.yonge.cooleshow.biz.dal.service.SysConfigService;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
+import com.yonge.cooleshow.biz.dal.service.TeacherAttendanceService;
+import com.yonge.cooleshow.biz.dal.service.UserOrderService;
+import com.yonge.cooleshow.biz.dal.support.IMHelper;
+import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
+import com.yonge.cooleshow.biz.dal.vo.TeacherLivingInfoVo;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
+import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.mybatis.support.PageUtil;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import com.yonge.toolset.utils.date.DateUtil;
 
 /**
  * 直播房间与课程的关系表表(LiveRoom)表服务实现类
@@ -78,6 +141,8 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     @Autowired
     private SysMessageService sysMessageService;
 
+    @Autowired
+    private LiveBroadcastRoomMemberService liveBroadcastRoomMemberService;
     /**
      * 生成房间UID
      *
@@ -274,6 +339,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         String roomTitle = WrapperUtil.toStr(param, "roomTitle", "房间标题不能为空!");
         String liveRemark = WrapperUtil.toStr(param, "liveRemark", "直播间描述不能为空!");
         Integer liveTime = WrapperUtil.toInt(param, "liveTime", "请选择直播时长!");
+        String coverPic = WrapperUtil.toStr(param, "coverPic", "直播封面图不能为空!");
         if (roomTitle.length() > 20) {
             throw new BizException("直播标题不能超出20个字");
         }
@@ -301,6 +367,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         room.setCreatedBy(teacherId);
         room.setCreatedTime(liveStartTime);
         room.setType(en.getCode());
+        room.setCoverPic(coverPic);
         this.save(room);
         log.info("createTempLiveRoom>>>>>>room:{}", room.getRoomUid());
         //去融云创建房间及创建房间缓存信息
@@ -452,6 +519,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         }
         //修改房间状态
         room.setLiveState(2);
+        // room.setRoomState(1);
         this.updateById(room);
 
         String speakerIdStr = room.getSpeakerId().toString();
@@ -598,6 +666,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             if (!onlineUserInfo.isExists()) {
                 return;
             }
+            liveBroadcastRoomMemberService.saveRecord(roomUid,userId, InOrOutEnum.OUT, YesOrNoEnum.NO);
             //从在线人员列表删除该人员
             onlineUserInfo.fastRemove(userId);
             //学员退出 写学生考勤表
@@ -726,6 +795,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         Date now = new Date();
         roomInfo.setSpeakerState(0);
         roomInfo.setJoinRoomTime(now);
+        liveBroadcastRoomMemberService.saveRecord(roomUid, roomInfo.getSpeakerId(), InOrOutEnum.IN, YesOrNoEnum.NO);
         //查询老师是否有进入过,没有则写老师考勤表的进入时间
         this.setTeacherAttendance(roomInfo.getSpeakerId(), roomInfo.getCourseGroupId(), roomInfo.getCourseId());
         //记录当前用户对应的房间uid
@@ -751,6 +821,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         RMap<Long, String> roomTotalUser = this.getTotalUserCache(roomUid);
         //判断是否第一次进房间
         RoomUserInfoCache userInfo;
+        liveBroadcastRoomMemberService.saveRecord(roomUid,userId, InOrOutEnum.IN, YesOrNoEnum.YES);
         if (roomTotalUser.containsKey(userId)) {
             //多次进入更新动态进入时间
             userInfo = JSONObject.toJavaObject(JSONObject.parseObject(roomTotalUser.get(userId)), RoomUserInfoCache.class);
@@ -786,7 +857,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         //校验房间是否存在
         RBucket<RoomInfoCache> roomInfoCache = this.getLiveRoomInfo(roomUid);
         if (!roomInfoCache.isExists()) {
-            throw new BizException("直播还未开始!");
+            throw new BizException("直播还未开始或已结束!");
         }
         RoomInfoCache roomInfo = roomInfoCache.get();
         //校验观看者是否买过课,如果是非临时直播间,则校验是否已经买过课
@@ -1069,5 +1140,22 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     public LiveRoom getLiveInRoomBySpeakerId(Long speakerId) {
         return baseMapper.getLiveInRoomBySpeakerId(speakerId);
     }
+
+	@Override
+	public List<TeacherLivingInfoVo> queryTeacherLivingList() {
+		return baseMapper.queryTeacherLivingList();
+	}
+    @Override
+    public void whetherMic(String roomUid, Integer whetherMic) {
+        //校验房间是否存在
+        RBucket<RoomInfoCache> roomInfoCache = getLiveRoomInfo(roomUid);
+        if (!roomInfoCache.isExists()) {
+            log.error("teacherCheckRoomInfo>>>live not start  roomUid: {} ", roomUid);
+            throw new BizException("直播还未开始!");
+        }
+        RoomInfoCache roomInfo = roomInfoCache.get();
+        roomInfo.setWhether_mic(whetherMic);
+        roomInfoCache.set(roomInfo);
+    }
 }
 

+ 14 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java

@@ -59,8 +59,6 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
 
     @Autowired
     private SysUserFeignService sysUserFeignService;
-    @Autowired
-    private SysConfigService sysConfigService;
 
     @Autowired
     private ActivityPlanService activityPlanService;
@@ -181,15 +179,21 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
 
     @Override
     public ShareProfitVo shareVipProfit(SysUser sysUser, Long vipId) {
+
         ShareProfitVo result = new ShareProfitVo();
-        MemberPriceSettingsVo detail = detail(vipId);
-        result.setVip(detail);
-        result.setAvatar(sysUser.getAvatar());
-        result.setName(sysUser.getUsername());
-        result.setTeacherId(sysUser.getId());
-
-        String teacherVipShareProfitUrl = sysConfigService.findConfigValue(SysConfigConstant.TEACHER_VIP_SHARE_PROFIT_URL);
-        result.setUrl(MessageFormatter.arrayFormat(teacherVipShareProfitUrl, detail.getId(), sysUser.getId()));
+
+        MemberPriceSettingsSearch memberPriceSettingsSearch = new MemberPriceSettingsSearch();
+        YesOrNoEnum discount = YesOrNoEnum.NO;
+        ActivityPlanVo activityPlanVo = activityPlanService.activityShare(ActivityShareEnum.VIP, sysUser.getId());
+        if (activityPlanVo != null) {
+            result.setActivityId(activityPlanVo.getId());
+            discount = YesOrNoEnum.YES;
+            memberPriceSettingsSearch.setActivityId(activityPlanVo.getId());
+        }
+        memberPriceSettingsSearch.setUserId(sysUser.getId());
+        MemberPriceVo vipShare = getVipShare(memberPriceSettingsSearch);
+        result.setDiscount(discount);
+        result.setVip(vipShare.getList());
         return result;
     }
 

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

@@ -145,6 +145,29 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     }
 
     @Override
+	public IPage<MusicSheetVo> queryRelatedList(IPage<MusicSheetVo> page, Long albumId, Long musicSheetId) {
+
+		if (albumId == null) {
+			// 查询专辑下的所有曲目
+
+			MusicSheet musicSheet = baseMapper.selectById(musicSheetId);
+
+			if (musicSheet != null) {
+				MusicAlbumDetailSearch query = new MusicAlbumDetailSearch();
+				query.setMusicTagIds(musicSheet.getMusicTag());
+				return page.setRecords(baseMapper.selectPage(page, query));
+			}
+		} else {
+			// 查询带有当前曲目标签的所有曲目
+			MusicAlbumDetailSearch query = new MusicAlbumDetailSearch();
+			query.setId(albumId);
+			query.setType(2);
+			return page.setRecords(baseMapper.selectAlbumDetailPage(page, query));
+		}
+		return null;
+	}
+
+	@Override
     @Transactional(rollbackFor = Exception.class)
     public boolean state(Long id, String reason, ClientEnum client) {
         MusicSheet musicSheet = this.getById(id);
@@ -271,6 +294,12 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
                 }
             }
         } else if (ChargeTypeEnum.VIP.getCode().equals(detail.getChargeType().getCode())) {
+            // 先判断是否购买过
+            MusicSheetPurchaseRecord musicSheetPurchaseRecord = musicSheetPurchaseRecordService.checkPurchase(
+                    studentId, detail.getId(), userType);
+            if (musicSheetPurchaseRecord != null) {
+                detail.setPlay(YesOrNoEnum.YES);
+            } else
             // 会员 判断是否为会员, 会员可播放
             if (userType.equals(ClientEnum.STUDENT)) {
                 StudentVo studentVo = studentService.detail(studentId);
@@ -337,7 +366,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     public IPage<MusicSheetVo> practiceMusic(IPage<MusicSheetVo> page, StudentMusicSheetSearch query) {
         // 预计最近练习表数据量会很多
         // 先找到最近练习的曲目id 在根据曲目id进行精确查找
-        IPage<Long> practiceMusicIdPage = musicSheetPracticeRecordService.selectPracticeMusic(query, page.getPages(), page.getSize());
+        IPage<Long> practiceMusicIdPage = musicSheetPracticeRecordService.selectPracticeMusic(query, page.getCurrent(), page.getSize());
         List<Long> practiceMusicIdList = practiceMusicIdPage.getRecords();
         if (CollectionUtils.isEmpty(practiceMusicIdList)) {
             page.setRecords(new ArrayList<>());
@@ -1019,8 +1048,8 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
                             .eq(MusicSheet::getTopFlag, YesOrNoEnum.YES)
                             .eq(MusicSheet::getState, YesOrNoEnum.YES)
                             .count();
-        if (count >=10) {
-            throw new BizException("首页推荐数量达到上限,请先取消其他曲谱推荐");
+        if (count >=20) {
+            throw new BizException("首页推荐数量达到[20]上限,请先取消其他曲谱推荐");
         }
         musicSheet.setTopFlag(YesOrNoEnum.YES);
         return this.saveOrUpdate(musicSheet);

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

@@ -17,6 +17,7 @@ import com.yonge.cooleshow.biz.dal.dto.req.TeacherSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.vo.HotTeacherVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
@@ -29,16 +30,20 @@ import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.utils.date.DateUtil;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 import com.yonge.toolset.utils.string.ValueUtil;
+
 import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
+
 import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
+
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -513,7 +518,13 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         this.updateById(teacherVo);
     }
 
-    private void setTagTime(TeacherTagEnum teacherTagEnum, TeacherVo teacherVo) {
+    @Override
+	public List<HotTeacherVo> queryHotTeacherList() {
+    	
+		return baseMapper.queryHotTeacherList();
+	}
+
+	private void setTagTime(TeacherTagEnum teacherTagEnum, TeacherVo teacherVo) {
         if (teacherTagEnum.equals(TeacherTagEnum.LIVE)) {
             teacherVo.setLiveDate(new Date());
         } else if (teacherTagEnum.equals(TeacherTagEnum.MUSIC)) {

+ 32 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityRegistrationVo.java

@@ -36,6 +36,12 @@ public class ActivityRegistrationVo extends ActivityRegistration{
 	@ApiModelProperty("真实姓名")
 	private String realName;
 
+	// 用户高最排名信息
+	@ApiModelProperty("最高排名分数")
+	private Double score;
+	@ApiModelProperty("最高排名次数")
+	private Integer times;
+
 	public String getRealName() {
 		return realName;
 	}
@@ -99,4 +105,30 @@ public class ActivityRegistrationVo extends ActivityRegistration{
 	public void setRewardFlag(Boolean rewardFlag) {
 		this.rewardFlag = rewardFlag;
 	}
+
+	public Double getScore() {
+		return score;
+	}
+
+	public void setScore(Double score) {
+		this.score = score;
+	}
+
+	public Integer getTimes() {
+		return times;
+	}
+
+	public void setTimes(Integer times) {
+		this.times = times;
+	}
+
+	public ActivityRegistrationVo score(Double score) {
+		this.score = score;
+		return this;
+	}
+
+	public ActivityRegistrationVo times(Integer times) {
+		this.times = times;
+		return this;
+	}
 }

+ 70 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CouponIssueUserVo.java

@@ -0,0 +1,70 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-09-05
+ */
+@ApiModel("发放优惠券用户分页数据")
+public class CouponIssueUserVo {
+
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    @ApiModelProperty("实名")
+    private String realName;
+
+    @ApiModelProperty("昵称")
+    private String username;
+
+    @ApiModelProperty("客户端")
+    private ClientEnum clientType;
+
+    @ApiModelProperty("手机号")
+    private String phone;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public ClientEnum getClientType() {
+        return clientType;
+    }
+
+    public void setClientType(ClientEnum clientType) {
+        this.clientType = clientType;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+}

+ 46 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/HotTeacherVo.java

@@ -0,0 +1,46 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import com.yonge.cooleshow.biz.dal.entity.Teacher;
+
+public class HotTeacherVo extends Teacher {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -46639589041719964L;
+
+	@ApiModelProperty("头像地址")
+    private String avatar;
+	
+    @ApiModelProperty("老师昵称")
+    private String username;
+    
+    @ApiModelProperty("是否正在直播")
+    private boolean isLiving;
+
+	public String getAvatar() {
+		return avatar;
+	}
+
+	public void setAvatar(String avatar) {
+		this.avatar = avatar;
+	}
+
+	public String getUsername() {
+		return username;
+	}
+
+	public void setUsername(String username) {
+		this.username = username;
+	}
+
+	public boolean isLiving() {
+		return isLiving;
+	}
+
+	public void setIsLiving(boolean isLiving) {
+		this.isLiving = isLiving;
+	}
+}

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveBroadcastRoomMemberVo.java

@@ -0,0 +1,13 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.LiveBroadcastRoomMember;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-08-31 18:56:07
+ */
+@ApiModel(value = "LiveBroadcastRoomMemberVo对象", description = "直播进出记录查询视图对象")
+public class LiveBroadcastRoomMemberVo extends LiveBroadcastRoomMember{
+	private static final long serialVersionUID = 1L;
+}

+ 5 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ShareProfitVo.java

@@ -5,6 +5,8 @@ import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.List;
+
 /**
  * Description 老师乐谱分享信息
  *
@@ -45,7 +47,7 @@ public class ShareProfitVo {
     private VideoLessonStudentVo videoGroup;
 
     @ApiModelProperty("会员信息")
-    private MemberPriceSettingsVo vip;
+    private List<MemberPriceSettingsVo> vip;
 
     public Long getActivityId() {
         return activityId;
@@ -71,11 +73,11 @@ public class ShareProfitVo {
         this.teacherId = teacherId;
     }
 
-    public MemberPriceSettingsVo getVip() {
+    public List<MemberPriceSettingsVo> getVip() {
         return vip;
     }
 
-    public void setVip(MemberPriceSettingsVo vip) {
+    public void setVip(List<MemberPriceSettingsVo> vip) {
         this.vip = vip;
     }
 

+ 72 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherLivingInfoVo.java

@@ -0,0 +1,72 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+
+public class TeacherLivingInfoVo {
+
+	@ApiModelProperty(value = "直播房间号")
+	private String roomUid;
+
+	@ApiModelProperty(value = "老师编号")
+	private Long teacherId;
+
+	@ApiModelProperty(value = "昵称")
+	private String username;
+
+	@ApiModelProperty(value = "头像")
+	private String avatar;
+
+	@ApiModelProperty(value = "直播封面图")
+	private String liveCoverImg;
+
+	@ApiModelProperty(value = "直播主题")
+	private String liveTitle;
+
+	public String getRoomUid() {
+		return roomUid;
+	}
+
+	public void setRoomUid(String roomUid) {
+		this.roomUid = roomUid;
+	}
+
+	public Long getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(Long teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public String getUsername() {
+		return username;
+	}
+
+	public void setUsername(String username) {
+		this.username = username;
+	}
+
+	public String getLiveCoverImg() {
+		return liveCoverImg;
+	}
+
+	public void setLiveCoverImg(String liveCoverImg) {
+		this.liveCoverImg = liveCoverImg;
+	}
+
+	public String getLiveTitle() {
+		return liveTitle;
+	}
+
+	public void setLiveTitle(String liveTitle) {
+		this.liveTitle = liveTitle;
+	}
+
+	public String getAvatar() {
+		return avatar;
+	}
+
+	public void setAvatar(String avatar) {
+		this.avatar = avatar;
+	}
+}

+ 241 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/coupon/CouponIssueWrapper.java

@@ -0,0 +1,241 @@
+package com.yonge.cooleshow.biz.dal.vo.coupon;
+
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.SendTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponCategoryEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-09-05
+ */
+public class CouponIssueWrapper {
+
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    @ApiModelProperty("优惠券发放id")
+    private Long couponIssueId;
+
+    @ApiModelProperty("优惠券id")
+    private Long couponId;
+
+
+    @ApiModelProperty("优惠券名称")
+    private String couponName;
+
+    @ApiModelProperty("优惠券类型 ")
+    private CouponTypeEnum couponType;
+
+    @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:陪练课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
+    private CouponCategoryEnum couponCategory;
+
+
+    @ApiModelProperty("用户实名")
+    private String realName;
+
+    @ApiModelProperty("用户昵称")
+    private String username;
+
+    @ApiModelProperty("客户端类型 TEACHER :老师端 STUDENT:学生端")
+    private ClientEnum clientType;
+
+    @ApiModelProperty("使用状态 USED:已使用 USABLE:未使用 EXPIRED:过期")
+    private CouponUseStateEnum useState;
+
+    @ApiModelProperty("订单号")
+    private String orderNo;
+
+    @ApiModelProperty("有效期开始时间")
+    private Date startTime;
+
+    @ApiModelProperty("有效期结束时间")
+    private Date endTime;
+
+    @ApiModelProperty("发放时间")
+    private Date issueTime;
+
+    @ApiModelProperty("使用时间")
+    private Date useTime;
+
+    @ApiModelProperty("发放途径PLATFORM:后台发放 ACTIVITY:活动领取")
+    private SendTypeEnum issueWay;
+
+    @ApiModelProperty("发放人id")
+    private Long issuer;
+
+    @ApiModelProperty("发放人昵称")
+    private String issueUsername;
+
+    @ApiModelProperty("发放人实名")
+    private String issueRealName;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    public CouponTypeEnum getCouponType() {
+        return couponType;
+    }
+
+    public void setCouponType(CouponTypeEnum couponType) {
+        this.couponType = couponType;
+    }
+
+    public CouponCategoryEnum getCouponCategory() {
+        return couponCategory;
+    }
+
+    public void setCouponCategory(CouponCategoryEnum couponCategory) {
+        this.couponCategory = couponCategory;
+    }
+
+    public Long getCouponId() {
+        return couponId;
+    }
+
+    public void setCouponId(Long couponId) {
+        this.couponId = couponId;
+    }
+
+    public String getCouponName() {
+        return couponName;
+    }
+
+    public void setCouponName(String couponName) {
+        this.couponName = couponName;
+    }
+
+    public Long getIssuer() {
+        return issuer;
+    }
+
+    public void setIssuer(Long issuer) {
+        this.issuer = issuer;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getCouponIssueId() {
+        return couponIssueId;
+    }
+
+    public void setCouponIssueId(Long couponIssueId) {
+        this.couponIssueId = couponIssueId;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public ClientEnum getClientType() {
+        return clientType;
+    }
+
+    public void setClientType(ClientEnum clientType) {
+        this.clientType = clientType;
+    }
+
+    public CouponUseStateEnum getUseState() {
+        return useState;
+    }
+
+    public void setUseState(CouponUseStateEnum useState) {
+        this.useState = useState;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public Date getIssueTime() {
+        return issueTime;
+    }
+
+    public void setIssueTime(Date issueTime) {
+        this.issueTime = issueTime;
+    }
+
+    public Date getUseTime() {
+        return useTime;
+    }
+
+    public void setUseTime(Date useTime) {
+        this.useTime = useTime;
+    }
+
+    public SendTypeEnum getIssueWay() {
+        return issueWay;
+    }
+
+    public void setIssueWay(SendTypeEnum issueWay) {
+        this.issueWay = issueWay;
+    }
+
+    public String getIssueUsername() {
+        return issueUsername;
+    }
+
+    public void setIssueUsername(String issueUsername) {
+        this.issueUsername = issueUsername;
+    }
+
+    public String getIssueRealName() {
+        return issueRealName;
+    }
+
+    public void setIssueRealName(String issueRealName) {
+        this.issueRealName = issueRealName;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+}

+ 27 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationRecordMapper.xml

@@ -70,4 +70,31 @@
 		from activity_evaluation_record t 
 		where t.activity_id_ = #{activityPlanId} and t.user_id_ = #{userId} and t.score_ >= 0 order by id_ desc limit 1
     </select>
+
+    <!--用户活动最高排名信息-->
+    <select id="selectUserHighestRankingInfo"
+            resultType="com.yonge.cooleshow.biz.dal.entity.ActivityEvaluationRecord">
+        SELECT t.rownum, t.score, t.times, t.id, t.createTime, t.userId FROM
+            (SELECT
+                 @rownum :=@rownum + 1 AS rownum,
+                 t1.score_ AS score,
+                 t1.times_ AS times ,
+                 t1.id_ AS id,
+                 t1.user_id_ AS userId,
+                 t1.create_time_ AS createTime,
+                 t1.evaluation_id_ AS evaluationId
+             FROM
+                 (SELECT @rownum := 0) r,
+                 activity_evaluation_record t1
+             WHERE
+                 t1.activity_id_ = #{activityId}
+             ORDER BY
+                 t1.score_ DESC,
+                 t1.times_ ASC,
+                 t1.id_ ASC
+             ) t
+        WHERE t.userId IN (<foreach collection="userIds" separator="," item="item">#{item}</foreach>)
+        GROUP BY t.userId ORDER BY t.rownum ASC
+    </select>
+    <!--用户活动最高排名信息-->
 </mapper>

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

@@ -46,7 +46,7 @@
         , ar.reward_client_ as "activityReward.rewardClient"
         , ar.reward_name_ as "activityReward.rewardName"
         , ar.reward_type_ as "activityReward.rewardType"
-        , ar.reward_describe_ "activityReward.as rewardDescribe"
+        , ar.reward_describe_ "activityReward.rewardDescribe"
         , ar.img_url_ as "activityReward.imgUrl"
         , ar.stock_ as "activityReward.stock"
         , ar.num_ as "activityReward.num"

+ 40 - 9
cooleshow-user/user-biz/src/main/resources/config/mybatis/CouponIssueMapper.xml

@@ -26,7 +26,7 @@
         id_, user_id_, coupon_id_, client_type_, use_state_, use_time_, order_no_, start_time_, end_time_, issue_way_, issuer_, issue_time_, remark_, status_, created_time_
     </sql>
 
-    <select id="queryCouponIssueInfo" >
+    <select id="queryCouponIssueInfo" resultType="com.yonge.cooleshow.biz.dal.vo.coupon.CouponIssueWrapper">
         select
             su.id_ as userId,
             ci.id_ as couponIssueId,
@@ -35,13 +35,20 @@
             ci.client_type_ as clientType,
             ci.use_state_ as useState,
             ci.order_no_ as orderNo,
-            ci.start_time_ as startTime,
-            ci.end_time_ as endTime,
-            ci.issue_time_ as issueTime,
-            ci.use_time_ as useTime,
-            ci.issue_way_ as issueWay
+        from_unixtime(ci.start_time_) as startTime,
+        from_unixtime(ci.end_time_) as endTime,
+        from_unixtime(ci.issue_time_) as issueTime,
+        from_unixtime(ci.use_time_) as useTime,
+            if( ci.end_time_ &lt; unix_timestamp(now()) and ci.issue_way_  = 'USABLE','EXPIRED',ci.issue_way_) as issueWay,
+            ci.issuer_ as issuer,
+            ci.remark_ as remark,
+            cou.name_ as couponName,
+            cou.id_ as couponId,
+            cou.coupon_type_ as couponType,
+            cou.category_ as couponCategory
         from coupon_issue ci
         left join sys_user su on ci.user_id_ = su.id_
+        left join coupon_info cou on cou.id_ = ci.coupon_id_
         <where>
             <if test="query.userId != null">
                 and #{query.userId} = ci.user_id_
@@ -52,11 +59,33 @@
             <if test="query.clientType != null">
                 and #{query.clientType} = ci.client_type_
             </if>
+            <if test="query.couponCategory != null">
+                and #{query.couponCategory} = cou.category_
+            </if>
+            <if test="query.couponType != null">
+                and #{query.couponType} = cou.coupon_type_
+            </if>
+            <if test="query.couponKeyword != null and query.couponKeyword != ''">
+                and (
+                    cou.id_ like concat('%',#{query.couponKeyword},'%')
+                    or cou.name_ like concat('%',#{query.couponKeyword},'%')
+                )
+            </if>
             <if test="query.issueWay != null">
-                and #{query.issueWay}  = ci.issue_way_
+                <choose>
+                    <when test="query.issueWay.code == 'EXPIRED'">
+                        and ci.end_time_ &lt; unix_timestamp(now()) and ci.issue_way_  = 'USABLE'
+                    </when>
+                    <when test="query.issueWay.code == 'USABLE'">
+                        and ci.end_time_ &gt;= unix_timestamp(now()) and ci.issue_way_ = 'USABLE'
+                    </when>
+                    <otherwise>
+                        and ci.issue_way_ = #{query.issueWay}
+                    </otherwise>
+                </choose>
             </if>
-            <if test="query.useStatus != null">
-                and #{query.useStatus} = ci.use_state_
+            <if test="query.useState != null">
+                and #{query.useState} = ci.use_state_
             </if>
             <if test="query.issueStartTime != null">
                 and unix_timestamp( #{query.issueStartTime}) &lt;= ci.issue_time_
@@ -80,6 +109,8 @@
             </if>
         </where>
 
+        order by ci.id_ desc
+
 
     </select>
 </mapper>

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

@@ -619,7 +619,7 @@
         LEFT JOIN `subject` s ON g.lesson_subject_=s.id_
         LEFT JOIN (SELECT video_lesson_group_id_ ,COUNT(1) AS count_ FROM video_lesson_purchase_record WHERE order_status_='PAID' GROUP BY video_lesson_group_id_) r ON g.id_= r.video_lesson_group_id_
         WHERE u.del_flag_ = 0 and g.audit_status_='PASS' and g.shelves_flag_ = 1 and #{appAuditVersion} = g.audit_version_
-        ORDER BY g.create_time_ DESC LIMIT 4
+        ORDER BY buyCount DESC LIMIT 10
     </select>
     <select id="selectRecentCourses" resultType="com.yonge.cooleshow.biz.dal.vo.StudentHomePage$RecentCourses">
         SELECT

+ 37 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/LiveBroadcastRoomMemberMapper.xml

@@ -0,0 +1,37 @@
+<?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.dao.LiveBroadcastRoomMemberDao">
+	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.LiveBroadcastRoomMember">
+            <result column="id_" property="id" />
+	        <result column="room_uid_" property="roomUid" />
+	        <result column="user_id_" property="userId" />
+	        <result column="join_time_" property="joinTime" />
+	        <result column="type_" property="type" />
+	        <result column="speaker_" property="speaker" />
+	        <result column="client_ip_" property="clientIp" />
+		</resultMap>
+    
+    <!-- 表字段 -->
+    <sql id="baseColumns">
+         t.id_ as id
+        , t.room_uid_ as roomUid
+        , t.user_id_ as userId
+        , t.join_time_ as joinTime
+        , t.type_ as type
+        , t.speaker_ as speaker
+        , t.client_ip_ as clientIp
+        </sql>
+    
+    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.LiveBroadcastRoomMemberVo">
+        SELECT
+            <include refid="baseColumns"/>
+        FROM live_broadcast_room_member t
+        where t.id_ = #{id}
+    </select>
+    
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.LiveBroadcastRoomMemberVo">
+		SELECT         
+        	<include refid="baseColumns" />
+		FROM live_broadcast_room_member t
+	</select>
+</mapper>

+ 7 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/LiveRoomMapper.xml

@@ -45,5 +45,12 @@
         where speaker_id_ = #{speakerId} and live_state_ = 1 and room_state_ = 0
         order by live_start_time_ desc limit 1
     </select>
+    
+    <select id="queryTeacherLivingList" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherLivingInfoVo">
+        select lr.room_uid_ roomUid, lr.room_title_ liveTitle, lr.speaker_id_ teacherId, lr.cover_pic_ liveCoverImg, u.avatar_ avatar, u.username_ username
+        from live_room lr left join sys_user u on lr.speaker_id_ = u.id_
+        where lr.live_state_ = 1 and lr.type_ = 'temp'
+        order by lr.live_start_time_ desc
+    </select>
 
 </mapper>

+ 3 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml

@@ -51,6 +51,9 @@
             where ms.del_flag_ = 0 and ms.state_ = 1 and ms.audit_status_ = 'PASS' and su.del_flag_ = 0
             and amr.album_id_ = t.id_) as musicSheetCount
         ,t2.num as albumFavoriteCount
+        <if test="query.userId != null">
+            ,(select count(1) from album_favorite af where af.album_id_ = t.id_ and af.user_id_ = #{query.userId}) as favorite
+        </if>
         from music_album t
         left join (select count(1) as num,af.album_id_ from album_favorite af
             left join sys_user su on af.user_id_ = su.id_

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

@@ -144,6 +144,8 @@
 
     <select id="selectAlbumDetailPage" resultType="com.yonge.cooleshow.biz.dal.vo.MusicSheetVo">
         select distinct <include refid="Base_Column_List"/>
+        ,su.username_ as addName
+        ,su.avatar_ as addUserAvatar
         ,(select group_concat(mt.name_) from music_tag mt
             where find_in_set(mt.id_,t.music_tag_) and mt.del_flag_ = 0  and mt.state_ = 1) as musicTagNames
         ,(select group_concat(s.name_) from subject s
@@ -153,6 +155,7 @@
         ,amr.sort_number_ as albumSortNumber
         from music_sheet t
         left join album_music_relate amr on t.id_ = amr.music_sheet_id_
+        left join sys_user su on t.create_by_ = su.id_
         <where>
             <if test="param.idAndName != null and param.idAndName != ''">
                 and (t.id_ like concat('%',#{param.idAndName},'%') or
@@ -383,9 +386,9 @@
         where find_in_set(mt.id_,t.music_tag_) and mt.del_flag_ = 0  and mt.state_ = 1) as musicTagNames
         ,(select group_concat(s.name_) from subject s where find_in_set(s.id_,t.music_subject_) ) as subjectNames
         ,if(mf.id_ is not null,1,0) as favorite
-        from music_sheet t
+        from music_sheet_practice_record mspr
+        left join music_sheet t on mspr.music_sheet_id_ = t.id_
         left join sys_user su on t.create_by_ = su.id_
-        left join music_sheet_practice_record mspr on mspr.music_sheet_id_ = t.id_
         left join music_favorite mf on t.id_ = mf.music_sheet_id_ and mspr.user_id_ = mf.user_id_
         <where>
             su.del_flag_ = 0

+ 2 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -130,6 +130,7 @@
                 and u.del_flag_ = #{param.delFlag}
             </if>
         </where>
+        order by t.create_time_ desc
     </select>
 
     <select id="querySubject" resultMap="com.yonge.cooleshow.biz.dal.dao.SubjectDao.Subject">
@@ -241,7 +242,7 @@
         LEFT JOIN sys_user u ON s.teacher_id_ = u.id_
         LEFT JOIN teacher_total t ON s.teacher_id_ = t.user_id_
         LEFT JOIN teacher tr ON s.teacher_id_ = tr.user_id_
-        LEFT JOIN (SELECT room_uid_,speaker_id_ FROM live_room WHERE live_state_=1) r ON t.user_id_= r.speaker_id_
+        LEFT JOIN (SELECT room_uid_,speaker_id_ FROM live_room WHERE live_state_=1 and room_state_  = 0 and type_ = 'TEMP') r ON t.user_id_= r.speaker_id_
         WHERE s.student_id_ = #{param.userId}
         <if test="param.username != null and param.username != ''">
             and u.username_ LIKE CONCAT('%', #{param.username}, '%')

+ 30 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -35,4 +35,34 @@
         id_, username_, password_, salt_, phone_, avatar_, create_time_, update_time_, lock_flag_, wx_openid_, qq_openid_, user_type_, gender_, nation_, birthdate_, email_, im_token_, real_name_, id_card_no_, certificate_type_, is_super_admin_, wechat_id_, del_flag_, last_username_time_
     </sql>
 
+    <select id="queryCouponIssueUser" resultType="com.yonge.cooleshow.biz.dal.vo.CouponIssueUserVo">
+
+        select
+            su.id_ as userId,
+            su.username_ as username,
+            su.real_name_ as realName,
+            #{client} as clientType,
+            su.phone_ as phone
+        from
+        <choose>
+            <when test="client.code == 'TEACHER'">
+                teacher t
+            </when>
+            <when test="client.code == 'STUDENT'">
+                student t
+            </when>
+        </choose>
+        left join sys_user su on su.id_ = t.user_id_
+        <where>
+            <if test="keyword != null and keyword != ''">
+                and (
+                su.real_name_ like concat('%',#{keyword},'%')
+                or su.username_ like concat('%',#{keyword},'%')
+                or su.phone_ like concat('%',#{keyword},'%')
+                or su.id_ like concat('%',#{keyword},'%')
+                )
+            </if>
+        </where>
+
+    </select>
 </mapper>

+ 19 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -35,6 +35,14 @@
         <result column="create_time_" property="createTime" />
         <result column="update_time_" property="updateTime" />
     </resultMap>
+    
+    <resultMap id="HotTeacherVoMap" type="com.yonge.cooleshow.biz.dal.vo.HotTeacherVo">
+        <result column="user_id_" property="userId" />
+        <result column="avatar_" property="avatar" />
+        <result column="graduate_school_" property="graduateSchool" />
+        <result column="username_" property="username" />
+        <result column="isLiving_" property="isLiving" />
+    </resultMap>
 
     <!-- 表字段 -->
     <sql id="baseColumns">
@@ -130,6 +138,7 @@
                 and u.del_flag_ = #{param.delFlag}
             </if>
         </where>
+        order by t.create_time_ desc
     </select>
 
 	<resultMap id="BasicUserInfo" type="com.yonge.cooleshow.biz.dal.dto.BasicUserInfo">
@@ -239,4 +248,14 @@
         LEFT JOIN student sr ON s.student_id_ = sr.user_id_
         WHERE u.del_flag_ = 0 and s.teacher_id_ =#{teacherId}
     </select>
+    
+    <select id="queryHotTeacherList" resultMap="HotTeacherVoMap">
+		select t.user_id_,t.graduate_school_,u.username_,u.avatar_,ifnull(a.speaker_id_,0) isLiving_
+		from teacher t 
+		left join sys_user u on t.user_id_ = u.id_   
+		left join teacher_total tt on tt.user_id_ = t.user_id_
+		left join (SELECT lr.speaker_id_ from live_room lr WHERE live_state_ = 1 and type_ = 'temp' group by lr.speaker_id_) a on a.speaker_id_ = t.user_id_
+		where t.entry_flag_ = 1
+		order by tt.fans_num_ desc limit 10
+    </select>
 </mapper>

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

@@ -122,7 +122,7 @@
 		<if test="param.auditVersion != null">
 			and #{param.auditVersion} = t.audit_version_
 		</if>
-		order by ta.live_flag_ desc,(ta.fans_num_ * 0.3 + t.browse_ * 0.3 + ta.exp_time_ * 0.4) desc
+		order by (ta.fans_num_ * 0.3 + t.browse_ * 0.3 + ta.exp_time_ * 0.4) desc
 	</select>
 
 	<update id="addVideoBrowse">

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

@@ -317,7 +317,7 @@
 				AND s.id_ = #{param.lessonSubject}
 			</if>
 		</where>
-		ORDER BY g.create_time_ DESC
+		ORDER BY countStudent DESC
 	</select>
 	
 	<select id="queryMyLessonGroup" resultType="com.yonge.cooleshow.biz.dal.vo.LessonGroupVo">

+ 24 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicAlbumController.java

@@ -1,5 +1,8 @@
 package com.yonge.cooleshow.student.controller;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
@@ -18,9 +21,11 @@ import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -85,6 +90,25 @@ public class MusicAlbumController extends BaseController {
         YesOrNoEnum yesOrNoEnum = musicAlbumService.checkFavorite(sysUser.getId(),query.getId() );
         AlbumDetailVo albumDetailVo = musicAlbumService.detail(PageUtil.getPage(query), query);
         albumDetailVo.setFavorite(yesOrNoEnum);
+
+        // 相关专辑
+        MusicAlbumSearch musicAlbumSearch = new MusicAlbumSearch();
+        musicAlbumSearch.setAuditVersion(YesOrNoEnum.NO);
+        musicAlbumSearch.setAlbumStatus(YesOrNoEnum.YES);
+        musicAlbumSearch.setSortBy(1);
+        musicAlbumSearch.setPage(1);
+        musicAlbumSearch.setRows(query.getRelatedNum() +1);
+        musicAlbumSearch.setAlbumTagIds(albumDetailVo.getAlbumTag());
+        IPage<MusicAlbumVo> relatedMusicAlbum = musicAlbumService.selectStudentPage(PageUtil.getPage(musicAlbumSearch),musicAlbumSearch);
+        List<MusicAlbumVo> musicAlbumVos1 = relatedMusicAlbum.getRecords()
+                                                      .stream()
+                                                      .filter(musicAlbumVo -> !musicAlbumVo.getId()
+                                                                                           .equals(albumDetailVo.getId()))
+                                                      .collect(Collectors.toList());
+        if (musicAlbumVos1.size() > query.getRelatedNum()) {
+            musicAlbumVos1 = musicAlbumVos1.subList(0,query.getRelatedNum());
+        }
+        albumDetailVo.setRelatedMusicAlbum(musicAlbumVos1);
         return succeed(albumDetailVo);
     }
 

+ 55 - 29
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java

@@ -1,35 +1,47 @@
 package com.yonge.cooleshow.student.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 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.common.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetRelatedQueryInfo;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
+import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
 import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
-import com.yonge.cooleshow.common.enums.YesOrNoEnum;
-import com.yonge.toolset.mybatis.support.PageUtil;
-import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.cooleshow.biz.dal.service.StudentService;
+import com.yonge.cooleshow.biz.dal.vo.AlbumAndSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.CheckVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.base.util.StringUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
 
 /**
  * 曲谱表 web 控制层
@@ -70,32 +82,40 @@ public class MusicSheetController extends BaseController {
         return succeed(musicSheetService.detail(id, sysUser, ClientEnum.STUDENT));
     }
 
-    @ApiOperation(value = "分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
+    @ApiOperation(value = "曲目分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/list", consumes="application/json", produces="application/json")
     public HttpResponseResult<PageInfo<MusicSheetVo>> list(@RequestBody StudentMusicSheetSearch query) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
             return failed("用户信息获取失败");
         }
-        Student student = studentService.getById(sysUser.getId());
-        if (student == null) {
-            return failed("用户信息获取失败");
+        // 老师课查看所有曲目
+        if (query.getMyself() == null || query.getMyself()) {
+            // 设置只查老师用户 状态为启用
+            query.setCreateBy(sysUser.getId());
+            if (query.getAuditStatus() != null && AuthStatusEnum.PASS.getCode().equals(query.getAuditStatus().getCode())) {
+                query.setState(YesOrNoEnum.YES);
+            } else if (query.getAuditStatus() != null && AuthStatusEnum.OUT_SALE.getCode().equals(query.getAuditStatus().getCode())) {
+                query.setState(YesOrNoEnum.NO);
+                query.setAuditStatus(AuthStatusEnum.PASS);
+            }
+            query.setSourceType(SourceTypeEnum.TEACHER);
+            query.setMyself(true);
+        } else {
+            // 检查app版本
+            query.setAuditVersion(appVersionInfoService.getAppAuditVersion(query.getPlatform(),query.getVersion()));
+
+            //  只能看通过审核 并且 启用的 曲目
+            query.setState(YesOrNoEnum.YES);
+            query.setAuditStatus(AuthStatusEnum.PASS);
+            query.setStudentId(sysUser.getId());
+            query.setMyself(false);
         }
-        // 检查app版本
-        query.setAuditVersion(appVersionInfoService.getAppAuditVersion(query.getPlatform(),query.getVersion()));
 
-
-        // query.setSubjectIds(student.getSubjectId());
-
-        // 学生 只能看通过审核 并且 启用的 曲目
-        query.setState(YesOrNoEnum.YES);
-        query.setAuditStatus(AuthStatusEnum.PASS);
-        query.setStudentId(sysUser.getId());
         IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.selectStudentPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(musicSheetVoIPage));
     }
 
-
     @ApiOperation(value = "乐谱(专辑和曲目同时查询)分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/albumAndSheetList", consumes="application/json", produces="application/json")
     public HttpResponseResult<AlbumAndSheetVo> albumAndSheetList(@RequestBody StudentMusicSheetSearch query) {
@@ -246,6 +266,12 @@ public class MusicSheetController extends BaseController {
         return sysUserFeignService.realNameAuth(realNameAuthDto);
     }
 
-
+    @ApiOperation(value = "关联的曲目列表")
+    @GetMapping(value="/queryRelatedList")
+    public HttpResponseResult<PageInfo<MusicSheetVo>> queryRelatedList(MusicSheetRelatedQueryInfo queryInfo) {
+    	
+    	IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.queryRelatedList(PageUtil.getPage(queryInfo),queryInfo.getAlbumId(), queryInfo.getMusicSheetId());
+        return succeed(PageUtil.pageInfo(musicSheetVoIPage));
+    }
 
 }

+ 25 - 8
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentLiveRoomController.java

@@ -1,20 +1,30 @@
 package com.yonge.cooleshow.student.controller;
 
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.alibaba.fastjson.JSONObject;
 import com.yonge.cooleshow.biz.dal.entity.ImUserStateSync;
 import com.yonge.cooleshow.biz.dal.entity.RoomInfoCache;
 import com.yonge.cooleshow.biz.dal.service.LiveRoomService;
+import com.yonge.cooleshow.biz.dal.vo.TeacherLivingInfoVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import java.util.List;
+import com.yonge.toolset.base.page.PageInfo;
 
 /**
  * 直播房间与课程的关系表表(LiveRoom)表控制层
@@ -66,5 +76,12 @@ public class StudentLiveRoomController extends BaseController {
         return liveRoomService.test(roomUid);
     }
 
+    @ApiOperation("老师直播列表")
+    @GetMapping("/queryTeacherLivingList")
+    public HttpResponseResult<List<TeacherLivingInfoVo>> queryTeacherLivingList() {
+    	
+        return succeed(liveRoomService.queryTeacherLivingList());
+    }
+
 }
 

+ 26 - 12
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/TeacherController.java

@@ -1,5 +1,22 @@
 package com.yonge.cooleshow.student.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
@@ -10,23 +27,14 @@ import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
 import com.yonge.cooleshow.biz.dal.service.StudentStarService;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.TeacherStyleVideoService;
-import com.yonge.cooleshow.common.enums.YesOrNoEnum;
-import com.yonge.toolset.mybatis.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.HotTeacherVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherStyleVideoVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.stream.Collectors;
+import com.yonge.toolset.mybatis.support.PageUtil;
 
 @RestController
 @RequestMapping("/teacher")
@@ -112,4 +120,10 @@ public class TeacherController extends BaseController {
         }
         return teacherService.addHomeBrowse(userId);
     }
+
+    @ApiOperation(value = "推荐老师列表")
+    @GetMapping("/queryHotTeacherList")
+    public HttpResponseResult<List<HotTeacherVo>> queryHotTeacherList() {
+        return HttpResponseResult.succeed(teacherService.queryHotTeacherList());
+    }
 }

+ 29 - 6
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/OpenClient.java

@@ -1,6 +1,10 @@
 package com.yonge.cooleshow.student.controller.open;
 
+import com.yonge.cooleshow.biz.dal.dto.search.MemberPriceSettingsSearch;
+import com.yonge.cooleshow.biz.dal.entity.SysConfig;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.CheckVo;
+import com.yonge.cooleshow.biz.dal.vo.MemberPriceVo;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -8,6 +12,8 @@ import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.validation.Valid;
@@ -25,11 +31,6 @@ import com.ksyun.ks3.dto.PostObjectFormFields;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.MusicImgDto;
-import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
-import com.yonge.cooleshow.biz.dal.service.StudentService;
-import com.yonge.cooleshow.biz.dal.service.TeacherService;
-import com.yonge.cooleshow.biz.dal.service.UploadFileService;
 import com.yonge.cooleshow.biz.dal.vo.MusicActivityVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -47,7 +48,8 @@ public class OpenClient extends BaseController {
     private TeacherService teacherService;
     @Autowired
     private SysUserFeignService sysUserFeignService;
-
+    @Autowired
+    private SysConfigService sysConfigService;
     @Autowired
     private UploadFileService uploadFileService;
     @Autowired
@@ -56,6 +58,8 @@ public class OpenClient extends BaseController {
     @Autowired
     private StudentService studentService;
 
+    @Autowired
+    private MemberPriceSettingsService memberPriceSettingsService;
 
     @Autowired
     private ActivityPlanService activityPlanService;
@@ -142,4 +146,23 @@ public class OpenClient extends BaseController {
         checkVo.setCheck(state);
         return succeed(checkVo);
     }
+
+
+
+    @PostMapping("/memberPriceSettings/list")
+    @ApiOperation(value = "查询列表")
+    public HttpResponseResult<MemberPriceVo> list(@RequestBody MemberPriceSettingsSearch query) {
+        MemberPriceVo memberPriceVo = memberPriceSettingsService.getVipShare(query);
+        return succeed(memberPriceVo);
+    }
+
+
+    @PostMapping("/memberPriceSettings/vipPermissions")
+    @ApiOperation(value = "查询vip权限")
+    public HttpResponseResult<List<SysConfig>> vipPermissions() {
+        Map<String,Object> params = new HashMap<>();
+        params.put("group", "VIP_PERMISSION");
+        List<SysConfig> configs = sysConfigService.findAll(params);
+        return succeed(configs);
+    }
 }

+ 35 - 8
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicAlbumController.java

@@ -1,12 +1,27 @@
 package com.yonge.cooleshow.teacher.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumDetailSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicAlbumSearch;
-import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
 import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
@@ -18,13 +33,6 @@ import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
 
 /**
  * 专辑表 web 控制层
@@ -81,6 +89,25 @@ public class MusicAlbumController extends BaseController {
         YesOrNoEnum yesOrNoEnum = musicAlbumService.checkFavorite(sysUser.getId(),query.getId() );
         AlbumDetailVo albumDetailVo = musicAlbumService.detail(PageUtil.getPage(query), query);
         albumDetailVo.setFavorite(yesOrNoEnum);
+
+        // 相关专辑
+        MusicAlbumSearch musicAlbumSearch = new MusicAlbumSearch();
+        musicAlbumSearch.setAuditVersion(YesOrNoEnum.NO);
+        musicAlbumSearch.setAlbumStatus(YesOrNoEnum.YES);
+        musicAlbumSearch.setSortBy(1);
+        musicAlbumSearch.setPage(1);
+        musicAlbumSearch.setRows(query.getRelatedNum() +1);
+        musicAlbumSearch.setAlbumTagIds(albumDetailVo.getAlbumTag());
+        IPage<MusicAlbumVo> relatedMusicAlbum = musicAlbumService.selectStudentPage(PageUtil.getPage(musicAlbumSearch),musicAlbumSearch);
+        List<MusicAlbumVo> musicAlbumVos1 = relatedMusicAlbum.getRecords()
+                                                      .stream()
+                                                      .filter(musicAlbumVo -> !musicAlbumVo.getId()
+                                                                                           .equals(albumDetailVo.getId()))
+                                                      .collect(Collectors.toList());
+        if (musicAlbumVos1.size() > query.getRelatedNum()) {
+            musicAlbumVos1 = musicAlbumVos1.subList(0,query.getRelatedNum());
+        }
+        albumDetailVo.setRelatedMusicAlbum(musicAlbumVos1);
         return succeed(albumDetailVo);
     }
 

+ 24 - 10
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java

@@ -1,10 +1,26 @@
 package com.yonge.cooleshow.teacher.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+
+import java.util.Date;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
-import com.yonge.cooleshow.biz.dal.dto.ReasonDto;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetRelatedQueryInfo;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
@@ -22,14 +38,6 @@ import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.support.PageUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-import java.util.Date;
 
 /**
  * 曲谱表 web 控制层
@@ -212,6 +220,12 @@ public class MusicSheetController extends BaseController {
         return succeed(musicSheetService.countTeacherMusicSheet(sysUser));
     }
 
-
+    @ApiOperation(value = "关联的曲目列表")
+    @GetMapping(value="/queryRelatedList")
+    public HttpResponseResult<PageInfo<MusicSheetVo>> queryRelatedList(MusicSheetRelatedQueryInfo queryInfo) {
+    	
+    	IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.queryRelatedList(PageUtil.getPage(queryInfo),queryInfo.getAlbumId(), queryInfo.getMusicSheetId());
+        return succeed(PageUtil.pageInfo(musicSheetVoIPage));
+    }
 
 }

+ 10 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherLiveRoomController.java

@@ -60,6 +60,7 @@ public class TeacherLiveRoomController extends BaseController {
             @ApiImplicitParam(name = "roomTitle", dataType = "String", value = "房间标题"),
             @ApiImplicitParam(name = "liveRemark", dataType = "String", value = "直播内容/最多200个字"),
             @ApiImplicitParam(name = "liveTime", dataType = "Integer", value = "直播时长"),
+            @ApiImplicitParam(name = "coverPic", dataType = "String", value = "封面图"),
     })
     @ApiOperation("创建临时房间-直播间")
     @PostMapping("/createTempLiveRoom")
@@ -81,6 +82,15 @@ public class TeacherLiveRoomController extends BaseController {
         return succeed(liveRoomService.speakerJoinRoom(roomUid));
     }
 
+
+    @ApiOperation("设置是否允许连麦")
+    @GetMapping("/whetherMic")
+    public HttpResponseResult<Object> whetherMic(@ApiParam(value = "房间uid", required = true) String roomUid,
+                                                      @ApiParam(value = "是否连麦 0:是 1否", required = true) Integer whetherMic) {
+        liveRoomService.whetherMic(roomUid,whetherMic);
+        return succeed();
+    }
+
     @ApiOperation("手动关闭直播间")
     @GetMapping("/destroyLiveRoom")
     public HttpResponseResult<Object> destroyLiveRoom(@ApiParam(value = "房间uid", required = true) String roomUid) {

+ 16 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/open/OpenShareController.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.teacher.controller.open;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.ShareProfitParam;
+import com.yonge.cooleshow.biz.dal.entity.SysConfig;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.CheckVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicActivityVo;
@@ -19,6 +20,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/open")
@@ -40,6 +44,8 @@ public class OpenShareController extends BaseController {
 
     @Autowired
     private ActivityPlanService activityPlanService;
+    @Autowired
+    private SysConfigService sysConfigService;
 
     /**
      * 服务对象
@@ -114,4 +120,14 @@ public class OpenShareController extends BaseController {
         checkVo.setCheck(state);
         return succeed(checkVo);
     }
+
+
+    @PostMapping("/memberPriceSettings/vipPermissions")
+    @ApiOperation(value = "查询vip权限")
+    public HttpResponseResult<List<SysConfig>> vipPermissions() {
+        Map<String,Object> params = new HashMap<>();
+        params.put("group", "VIP_PERMISSION");
+        List<SysConfig> configs = sysConfigService.findAll(params);
+        return succeed(configs);
+    }
 }

+ 29 - 13
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/MusicSheetController.java

@@ -1,10 +1,26 @@
 package com.yonge.cooleshow.website.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+
+import java.util.Date;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
-import com.yonge.cooleshow.biz.dal.dto.ReasonDto;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetRelatedQueryInfo;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
@@ -13,23 +29,15 @@ import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
-import com.yonge.cooleshow.biz.dal.vo.TeacherAuditMusicSheetVo;
-import com.yonge.cooleshow.common.enums.YesOrNoEnum;
-import com.yonge.toolset.base.util.StringUtil;
-import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.TeacherAuditMusicSheetVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-import java.util.Date;
+import com.yonge.toolset.base.util.StringUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 
 /**
  * 曲谱表 web 控制层
@@ -197,4 +205,12 @@ public class MusicSheetController extends BaseController {
             return failed("修改失败");
         }
     }
+
+    @ApiOperation(value = "关联的曲目列表")
+    @GetMapping(value="/queryRelatedList")
+    public HttpResponseResult<PageInfo<MusicSheetVo>> queryRelatedList(MusicSheetRelatedQueryInfo queryInfo) {
+    	
+    	IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.queryRelatedList(PageUtil.getPage(queryInfo),queryInfo.getAlbumId(), queryInfo.getMusicSheetId());
+        return succeed(PageUtil.pageInfo(musicSheetVoIPage));
+    }
 }

+ 5 - 5
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenMusicAlbumController.java

@@ -82,15 +82,15 @@ public class OpenMusicAlbumController extends BaseController {
         musicAlbumSearch.setAlbumStatus(YesOrNoEnum.YES);
         musicAlbumSearch.setSortBy(1);
         musicAlbumSearch.setPage(1);
-        musicAlbumSearch.setRows(5);
+        musicAlbumSearch.setRows(query.getRelatedNum() + 1);
         IPage<MusicAlbumVo> hotMusicAlbum = musicAlbumService.selectStudentPage(PageUtil.getPage(musicAlbumSearch),musicAlbumSearch);
         List<MusicAlbumVo> musicAlbumVos = hotMusicAlbum.getRecords()
                                                   .stream()
                                                   .filter(musicAlbumVo -> !musicAlbumVo.getId()
                                                                                        .equals(albumDetailVo.getId()))
                                                   .collect(Collectors.toList());
-        if (musicAlbumVos.size() > 4) {
-            musicAlbumVos = musicAlbumVos.subList(0,4);
+        if (musicAlbumVos.size() > query.getRelatedNum()) {
+            musicAlbumVos = musicAlbumVos.subList(0,query.getRelatedNum());
         }
         albumDetailVo.setHotMusicAlbum(musicAlbumVos);
 
@@ -102,8 +102,8 @@ public class OpenMusicAlbumController extends BaseController {
                                                       .filter(musicAlbumVo -> !musicAlbumVo.getId()
                                                                                            .equals(albumDetailVo.getId()))
                                                       .collect(Collectors.toList());
-        if (musicAlbumVos1.size() > 4) {
-            musicAlbumVos1 = musicAlbumVos1.subList(0,4);
+        if (musicAlbumVos1.size() > query.getRelatedNum()) {
+            musicAlbumVos1 = musicAlbumVos1.subList(0,query.getRelatedNum());
         }
         albumDetailVo.setRelatedMusicAlbum(musicAlbumVos1);
         return succeed(albumDetailVo);