Jelajahi Sumber

Merge branch 'master' of http://git.dayaedu.com/yonge/cooleshow

Eric 2 tahun lalu
induk
melakukan
6da99d13a3
92 mengubah file dengan 2455 tambahan dan 283 penghapusan
  1. 1 0
      .gitignore
  2. 1 1
      audio-analysis/src/main/resources/logback-spring.xml
  3. 35 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ActivityResourceEnum.java
  4. 39 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ActivityShareEnum.java
  5. 1 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ActivityTypeEnum.java
  6. 69 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/EStatus.java
  7. 6 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/UnitEnum.java
  8. 1 1
      cooleshow-mall/mall-portal/src/main/resources/logback-spring.xml
  9. 42 10
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityEvaluationController.java
  10. 8 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityPlanController.java
  11. 33 13
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  12. 2 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VideoLessonController.java
  13. 133 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/ActivityTeacherVO.java
  14. 10 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityEvaluationDao.java
  15. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityPlanDao.java
  16. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityUserRewardDao.java
  17. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/LiveRoomDao.java
  18. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherDao.java
  19. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonGroupDao.java
  20. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonPurchaseRecordDao.java
  21. 12 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityEvaluationDto.java
  22. 103 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityPlanDto.java
  23. 102 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/activity/ActivityTeacherQuery.java
  24. 33 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java
  25. 0 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/ActivityPlanSearch.java
  26. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MemberPriceSettingsSearch.java
  27. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityEvaluation.java
  28. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityEvaluationRecord.java
  29. 16 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityPlan.java
  30. 17 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityReward.java
  31. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrder.java
  32. 5 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonPurchaseRecord.java
  33. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MK.java
  34. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MusicSheetType.java
  35. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationRecordService.java
  36. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationService.java
  37. 21 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityPlanService.java
  38. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityUserRewardService.java
  39. 11 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomService.java
  40. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MemberPriceSettingsService.java
  41. 26 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  42. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java
  43. 20 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationRecordServiceImpl.java
  44. 141 16
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationServiceImpl.java
  45. 129 24
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java
  46. 72 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityUserRewardServiceImpl.java
  47. 76 26
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java
  48. 54 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java
  49. 50 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  50. 12 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  51. 67 26
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  52. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupDetailServiceImpl.java
  53. 4 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupServiceImpl.java
  54. 46 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/HotTeacherVo.java
  55. 26 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MemberPriceSettingsVo.java
  56. 62 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MemberPriceVo.java
  57. 23 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ShareProfitVo.java
  58. 72 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherLivingInfoVo.java
  59. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderDetailVo.java
  60. 66 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserRewardVo.java
  61. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonShelvesVo.java
  62. 47 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/activity/ActivityTeacherWrapper.java
  63. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/OrderCreateRes.java
  64. 70 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationMapper.xml
  65. 29 8
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityPlanMapper.xml
  66. 2 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityPlanRewardMapper.xml
  67. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityRewardMapper.xml
  68. 12 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityUserRewardMapper.xml
  69. 7 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/LiveRoomMapper.xml
  70. 7 7
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  71. 18 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  72. 4 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml
  73. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupDetailMapper.xml
  74. 54 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml
  75. 5 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonPurchaseRecordMapper.xml
  76. 4 3
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MemberPriceSettingsController.java
  77. 24 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicAlbumController.java
  78. 54 29
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java
  79. 25 8
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentLiveRoomController.java
  80. 26 12
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/TeacherController.java
  81. 42 10
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/OpenClient.java
  82. 35 8
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicAlbumController.java
  83. 25 10
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java
  84. 1 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherLiveRoomController.java
  85. 3 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/VideoLessonGroupController.java
  86. 19 6
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/open/OpenShareController.java
  87. 1 1
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/MusicSheetController.java
  88. 3 0
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/VideoLessonGroupController.java
  89. 2 1
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenClient.java
  90. 6 0
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenVideoGroupController.java
  91. 12 0
      pom.xml
  92. 17 0
      toolset/toolset-mybatis/src/main/java/com/yonge/toolset/mybatis/support/PageUtil.java

+ 1 - 0
.gitignore

@@ -1,4 +1,5 @@
 /target/
+logback-test.xml
 
 logback-test.xml
 

+ 1 - 1
audio-analysis/src/main/resources/logback-spring.xml

@@ -27,7 +27,7 @@
 		</encoder>
 	</appender>
 
-	<logger name="com.yonge" level="debug" />
+	<logger name="com.yonge" level="info" />
 
 	<!--开发环境:打印控制台 -->
 	<springProfile name="local">

+ 35 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ActivityResourceEnum.java

@@ -0,0 +1,35 @@
+package com.yonge.cooleshow.common.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 活动资源类型
+ *
+ * @Author: liweifan
+ * @Data: 2022/4/7 15:48
+ */
+public enum ActivityResourceEnum implements BaseEnum<String, ActivityResourceEnum> {
+
+    MUSIC_SHEET("曲谱"),
+    TEACHER("老师"),
+    ;
+
+    @EnumValue
+    private String code;
+    private String msg;
+
+    ActivityResourceEnum(String msg) {
+        this.code = this.name();
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}

+ 39 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ActivityShareEnum.java

@@ -0,0 +1,39 @@
+package com.yonge.cooleshow.common.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 活动分类类型
+ *
+ * @Author: liweifan
+ * @Data: 2022/4/7 15:48
+ */
+public enum ActivityShareEnum implements BaseEnum<String, ActivityShareEnum> {
+
+    MUSIC_SHEET("曲谱"),
+    MUSIC("音乐"),
+    VIP("会员"),
+    VIDEO("视频"),
+    LIVE("直播"),
+    GOODS("商品"),
+    ;
+
+    @EnumValue
+    private String code;
+    private String msg;
+
+    ActivityShareEnum(String msg) {
+        this.code = this.name();
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}

+ 1 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ActivityTypeEnum.java

@@ -13,6 +13,7 @@ public enum ActivityTypeEnum implements BaseEnum<String, ActivityTypeEnum> {
 
     EVALUATION("评测活动"),
     STANDARD_GIFT("达标赠送"),
+    SHARE("活动分享"),
     ;
 
     @EnumValue

+ 69 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/EStatus.java

@@ -0,0 +1,69 @@
+package com.yonge.cooleshow.common.enums;
+
+import lombok.Getter;
+
+import java.util.Optional;
+
+/**
+ * @author: James
+ * @date: 2018/8/20 上午11:29
+ * @description:
+ */
+@Getter
+public enum EStatus {
+
+    DELETE(-1, "删除"),
+    DISABLE(0, "禁用"),
+    ENABLE(1, "启用"),
+    SELECTED(2, "选择");
+
+    private final int value;
+    private final String name;
+
+    EStatus(Integer value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    /**
+     * 校验参数合法性
+     * @param value 数据状态
+     * @return boolean
+     */
+    public static boolean invalid(Integer value) {
+        if (value != null) {
+            EStatus[] values = EStatus.values();
+            for (EStatus item : values) {
+                if (item.getValue() == value) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 数据状态
+     * @param value 状态值
+     * @return EStatus
+     */
+    public static EStatus get(int value) {
+        EStatus[] values = EStatus.values();
+        for (EStatus item : values) {
+            if (item.getValue() == value) {
+                return item;
+            }
+        }
+        return ENABLE;
+    }
+
+    /**
+     * 状态匹配
+     * @param dataType 匹配类型
+     * @return boolean
+     */
+    public boolean match(Integer dataType) {
+        return getValue() == Optional.ofNullable(dataType).orElse(-99);
+    }
+
+}

+ 6 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/UnitEnum.java

@@ -16,6 +16,12 @@ public enum UnitEnum implements BaseEnum<String, UnitEnum> {
     YEAR("年"),
     MINUTE("分钟数"),
     PCS("个"),
+
+//    DAY("日"),
+//    MONTH("月"),
+//    YEAR("年"),
+    QUARTERLY("季度"),
+    YEAR_HALF("半年"),
     ;
 
     @EnumValue

+ 1 - 1
cooleshow-mall/mall-portal/src/main/resources/logback-spring.xml

@@ -27,7 +27,7 @@
 		</encoder>
 	</appender>
 
-	<logger name="com.yonge" level="INFO" />
+	<logger name="com.yonge" level="info" />
 
 	<!--本地环境:打印控制台 -->
 	<springProfile name="local">

+ 42 - 10
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityEvaluationController.java

@@ -1,33 +1,41 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.admin.io.request.ActivityTeacherVO;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.ActivityEvaluationDto;
+import com.yonge.cooleshow.biz.dal.dto.activity.ActivityTeacherQuery;
+import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
+import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.activity.ActivityTeacherWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.mybatis.support.PageUtil;
-
 import com.yonge.toolset.base.util.StringUtil;
-import io.swagger.annotations.*;
+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.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+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 javax.annotation.Resource;
 import javax.validation.Valid;
-
-import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo;
-import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationSearch;
-import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
-
 import java.util.List;
+import java.util.Objects;
 
 @RestController
 @RequestMapping("/activityEvaluation")
@@ -103,4 +111,28 @@ public class ActivityEvaluationController extends BaseController {
 		return succeed(PageUtil.pageInfo(musicSheetVoIPage));
 	}
 
+	/**
+	 * 分享活动老师信息
+	 * @param request ActivityTeacherInfoRequest
+	 * @return HttpResponseResult<PageInfo<ActivityTeacherResponse>>
+	 */
+	@ApiOperation(value = "分页查询活动老师信息", httpMethod="POST", consumes="application/json", produces="application/json")
+	@PostMapping(value="/teachers", consumes="application/json", produces="application/json")
+	public HttpResponseResult<PageInfo<ActivityTeacherVO.ResponseInfo>> activityTeacherPageInfo(@RequestBody ActivityTeacherVO.RequestInfo request) {
+
+		if(Objects.isNull(request.getActivityId())){
+			return failed("活动id不能为空");
+		}
+
+		// 老师信息
+		IPage<ActivityTeacherWrapper> wrapper = activityEvaluationService.activityTeacherPageInfo(PageUtil.getPage(request),
+				ActivityTeacherQuery.from(request.jsonString()));
+
+		// 数据转换
+		List<ActivityTeacherVO.ResponseInfo> responses = JSON.parseArray(JSON.toJSONString(wrapper.getRecords()),
+				ActivityTeacherVO.ResponseInfo.class);
+
+		// 分页数据信息
+		return succeed(PageUtil.getPageInfo(wrapper, responses));
+	}
 }

+ 8 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityPlanController.java

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.biz.dal.dto.SaveOrUpdateRewardDto;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
@@ -74,6 +75,13 @@ public class ActivityPlanController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         activityPlan.setUserId(user.getId());
+
+        // 分享活动奖品校验
+        if (ActivityTypeEnum.SHARE == activityPlan.getActivityType()
+                && CollectionUtils.isEmpty(activityPlan.getRewardItems())) {
+            return failed("分享活动奖品信息为空");
+        }
+
         try {
             return HttpResponseResult.succeed(activityPlanService.submit(activityPlan));
         } catch (BizException e) {

+ 33 - 13
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java

@@ -1,5 +1,26 @@
 package com.yonge.cooleshow.admin.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
@@ -12,7 +33,10 @@ import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetOrderSearch;
 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.yonge.cooleshow.biz.dal.enums.*;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+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.service.MusicTagService;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
@@ -20,27 +44,23 @@ import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetStudentByMessage;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.StudentMusicSheetOrderVo;
+import com.yonge.cooleshow.biz.dal.vo.TeacherMusicSheetVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.BizHttpStatus;
+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.base.util.StringUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.utils.easyexcel.ErrMsg;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReader;
 import com.yonge.toolset.utils.easyexcel.ExcelException;
 import com.yonge.toolset.utils.easyexcel.ExcelUtils;
-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.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.validation.Valid;
-import java.util.Date;
-import java.util.List;
 
 /**
  * 曲谱表 web 控制层

+ 2 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VideoLessonController.java

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.VideoGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonSearch;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupDetailService;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupService;
 import com.yonge.toolset.base.util.StringUtil;
@@ -177,6 +178,7 @@ public class VideoLessonController extends BaseController {
 
         shelvesVo.setShelvesId(user.getId());
         shelvesVo.setShelvesTime(new Date());
+        shelvesVo.setClientType(ClientEnum.SYSTEM);
         lessonGroupService.updateShelves(shelvesVo);
         return succeed();
     }

+ 133 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/ActivityTeacherVO.java

@@ -0,0 +1,133 @@
+package com.yonge.cooleshow.admin.io.request;
+
+import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.biz.dal.enums.MK;
+import com.yonge.toolset.base.page.QueryInfo;
+import com.yonge.toolset.base.util.StringUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * 活动老师信息
+ * Created by Eric.Shang on 2022/8/29.
+ */
+public class ActivityTeacherVO {
+
+    /**
+     * 活动老师请求信息
+     */
+    @Data
+    @EqualsAndHashCode(callSuper = false)
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(value = "分享活动老师请求", description = "分享活动老师信息")
+    public static class RequestInfo extends QueryInfo {
+
+        @ApiModelProperty("活动ID")
+        private Long activityId;
+        @ApiModelProperty("老师编号/真实姓名/昵称/手机号")
+        private String keyword;
+        @ApiModelProperty("声部id(多个逗号隔开)")
+        private String subjectIds;
+        @ApiModelProperty("新增老师搜索, 1: 新增搜索; 0:已添加老师")
+        private Integer addType;
+
+        @ApiModelProperty(hidden = true)
+        private List<Long> subjectIdList;
+        @ApiModelProperty(hidden = true)
+        private Long id;
+        @ApiModelProperty(hidden = true)
+        private String mobile;
+        @ApiModelProperty(hidden = true)
+        private String name;
+
+        public String jsonString() {
+
+            return JSON.toJSONString(this);
+        }
+
+        public Integer getAddType() {
+            return Optional.ofNullable(addType).orElse(0);
+        }
+
+        public List<Long> getSubjectIdList() {
+
+            if (StringUtils.isNotEmpty(getSubjectIds())) {
+                this.subjectIdList = StringUtil.toLongList(subjectIds);
+            }
+
+            return subjectIdList;
+        }
+
+        public Long getId() {
+
+            if (StringUtils.isNotEmpty(getKeyword())
+                    && !getKeyword().matches(MK.EXP_MOBILE_NUMBER)
+                    && getKeyword().matches(MK.EXP_INT)) {
+
+                return Long.parseLong(getKeyword());
+            }
+            return id;
+        }
+
+        public String getMobile() {
+            if (StringUtils.isNotEmpty(getKeyword())
+                    && getKeyword().matches(MK.EXP_MOBILE_NUMBER)) {
+                return getKeyword();
+            }
+            return mobile;
+        }
+
+        public String getName() {
+
+            if (StringUtils.isNotEmpty(getKeyword())
+                    && !getKeyword().matches(MK.EXP_MOBILE_NUMBER)
+                    && !getKeyword().matches(MK.EXP_INT)) {
+
+                return getKeyword();
+            }
+
+            return name;
+        }
+
+        public Long getActivityId() {
+
+            if (Optional.ofNullable(this.activityId).orElse(0L) > 0) {
+                return this.activityId;
+            }
+            return null;
+        }
+    }
+
+    /**
+     * 活动老师响应信息
+     */
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(value = "分享活动老师响应", description = "分享活动老师信息")
+    public static class ResponseInfo implements Serializable {
+
+        @ApiModelProperty(value = "老师编号")
+        private Long id;
+        @ApiModelProperty("昵称")
+        private String username;
+        @ApiModelProperty("真实姓名")
+        private String realName;
+        @ApiModelProperty("手机号")
+        private String phone;
+        @ApiModelProperty("声部ID")
+        private String subjectId;
+        @ApiModelProperty("声部")
+        private String subjectName;
+    }
+}

+ 10 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityEvaluationDao.java

@@ -4,9 +4,11 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dto.activity.ActivityTeacherQuery;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.vo.ActivityMusicVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.activity.ActivityTeacherWrapper;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
 import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo;
@@ -40,7 +42,7 @@ public interface ActivityEvaluationDao extends BaseMapper<ActivityEvaluation> {
      * @param musicSheetIds
      * @return
      */
-    Integer addBatch(@Param("activityId") Long activityId,@Param("userId") Long userId , @Param("musicSheetIds") List<Long> musicSheetIds);
+    Integer addBatch(@Param("activityId") Long activityId,@Param("userId") Long userId , @Param("musicSheetIds") List<Long> musicSheetIds, @Param("resourceType") String resourceType);
 
 	/**
 	 * 获取活动曲目信息
@@ -67,4 +69,11 @@ public interface ActivityEvaluationDao extends BaseMapper<ActivityEvaluation> {
 	 */
 	List<MusicSheetVo> musicPage(@Param("page") IPage<MusicSheetVo> page, @Param("param") MusicSheetSearch query);
 
+	/**
+	 * 活动老师信息
+	 * @param page IPage<ActivityTeacherWrapper>
+	 * @param query ActivityTeacherQuery
+	 * @return List<ActivityTeacherWrapper>
+	 */
+	List<ActivityTeacherWrapper> selectActivityTeacherPageInfo(@Param("page") IPage<ActivityTeacherWrapper> page, @Param("record") ActivityTeacherQuery query);
 }

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityPlanDao.java

@@ -55,9 +55,18 @@ public interface ActivityPlanDao extends BaseMapper<ActivityPlan> {
 
 	/**
 	 * 查询需要变更状态的活动
+	 *
 	 * @return
 	 */
     List<ActivityPlan> activityState();
 
 
+	/**
+	 * 获取用户参与的分享活动
+	 *
+	 * @param type   活动分享类型
+	 * @param userId 用户id
+	 * @return
+	 */
+	ActivityPlanVo selectActivityShare(@Param("type") String type, @Param("userId") Long userId);
 }

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityUserRewardDao.java

@@ -27,5 +27,12 @@ public interface ActivityUserRewardDao extends BaseMapper<ActivityUserReward>{
      * @return: com.yonge.cooleshow.biz.dal.vo.ActivityUserRewardVo
 	 */
 	List<UserRewardVo> selectPage(@Param("page") IPage page, @Param("param") ActivityUserRewardSearch activityUserReward);
-	
+
+	/**
+	 * 用户关联活动分享老师信息
+	 * @param activityId 活动ID
+	 * @param userIds 用户ID
+	 * @return List<UserRewardVo>
+	 */
+	List<UserRewardVo> selectActivityShareTeacher(@Param("activityId") Long activityId, @Param("userIds") List<Long> userIds);
 }

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

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

@@ -51,6 +51,9 @@ public interface VideoLessonGroupDao extends BaseMapper<VideoLessonGroup> {
 
     //查询视频课组
     List<LessonGroupVo> selectLessonGroup(IPage page, @Param("param") VideoLessonGroupSearch search);
+    
+  //查询我的视频课组
+    List<LessonGroupVo> queryMyLessonGroup(IPage page, @Param("param") VideoLessonGroupSearch search);
 
     //查询所有视频课组
     List<VideoLessonAuthGroup> queryGroupList(IPage<VideoLessonAuthGroup> page, @Param("param") VideoGroupSearch query);

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonPurchaseRecordDao.java

@@ -21,4 +21,6 @@ public interface VideoLessonPurchaseRecordDao extends BaseMapper<VideoLessonPurc
 
     //修改订单状态
     void updateStatus(@Param("orderNo") String orderNo,@Param("status") String status);
+    
+    List<VideoLessonPurchaseRecord> queryByVideoLessonGroupId(@Param("videoLessonGroupId") Long videoLessonGroupId, @Param("orderStatus") String orderStatus);
 }

+ 12 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityEvaluationDto.java

@@ -4,7 +4,6 @@ import com.yonge.cooleshow.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
-import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
 /**
@@ -19,8 +18,18 @@ public class ActivityEvaluationDto extends BaseEntity {
 	@NotNull(message = "活动id不能为空")
 	private Long activityId;
 	@ApiModelProperty("曲目id 多个用,分割 ")
-	@NotBlank(message = "曲子id不能为空")
-	private String musicSheetIds;
+	//@NotBlank(message = "曲子id不能为空")
+	private String musicSheetIds; // 评测活动曲目ID
+	@ApiModelProperty("活动老师id 多个用,分割 ")
+	private String teacherIds; // 分享活动老师ID
+
+	public String getTeacherIds() {
+		return teacherIds;
+	}
+
+	public void setTeacherIds(String teacherIds) {
+		this.teacherIds = teacherIds;
+	}
 
 	public Long getActivityId() {
 		return activityId;

+ 103 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityPlanDto.java

@@ -1,12 +1,24 @@
 package com.yonge.cooleshow.biz.dal.dto;
 
+import com.google.common.collect.Lists;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlanEvaluation;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlanStandard;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.common.enums.EStatus;
+import com.yonge.cooleshow.common.enums.RewardTypeEnum;
+import com.yonge.cooleshow.common.enums.UnitEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
-import javax.validation.Valid;
+import java.io.Serializable;
+import java.text.MessageFormat;
+import java.util.List;
+import java.util.Optional;
 
 /**
  * @Author: liweifan
@@ -24,6 +36,8 @@ public class ActivityPlanDto extends ActivityPlan{
 
 	@ApiModelProperty(value = "活动计划-达标赠送活动拓展")
 	private ActivityPlanStandard planStandard;
+	@ApiModelProperty(value = "分享活动-奖品信息")
+	private List<RewardItem> rewardItems;
 
 	public Long getUserId() {
 		return userId;
@@ -48,4 +62,92 @@ public class ActivityPlanDto extends ActivityPlan{
 	public void setPlanStandard(ActivityPlanStandard planStandard) {
 		this.planStandard = planStandard;
 	}
+
+	public List<RewardItem> getRewardItems() {
+		return Optional.ofNullable(rewardItems).orElse(Lists.newArrayList());
+	}
+
+	public void setRewardItems(List<RewardItem> rewardItems) {
+		this.rewardItems = rewardItems;
+	}
+
+	/**
+	 * 分享活动-奖品信息
+	 */
+	@Data
+	@NoArgsConstructor
+	@AllArgsConstructor
+	public static class RewardItem implements Serializable {
+
+		private Long activityId; // 业务更新活动ID
+		private String rewardClient;
+		private String rewardName;
+		private RewardTypeEnum rewardType;
+		private String rewardDescribe;
+		private String imgUrl;
+		private Integer stock;
+		private Integer num;
+		private UnitEnum unit; // 更新奖品会员类型
+		private Integer status;
+		private Double discountPrice; // 更新优惠价格
+
+		public Long getActivityId() {
+			return activityId;
+		}
+
+		public String getRewardClient() {
+			return Optional.ofNullable(rewardClient).orElse(ClientEnum.STUDENT.getCode());
+		}
+
+		public String getRewardName() {
+			return Optional.ofNullable(rewardName).orElse(MessageFormat.format("{0}会员", getUnit().getMsg()));
+		}
+
+		public RewardTypeEnum getRewardType() {
+			return Optional.ofNullable(rewardType).orElse(RewardTypeEnum.VIP);
+		}
+
+		public String getRewardDescribe() {
+
+			return Optional.ofNullable(rewardDescribe).orElse(getRewardName());
+		}
+
+		public String getImgUrl() {
+			return Optional.ofNullable(imgUrl).orElse("");
+		}
+
+		public Integer getStock() {
+			return Optional.ofNullable(stock).orElse(1);
+		}
+
+		public Integer getNum() {
+			return Optional.ofNullable(num).orElse(1);
+		}
+
+		public UnitEnum getUnit() {
+			return Optional.ofNullable(unit).orElse(UnitEnum.MONTH);
+		}
+
+		public Integer getStatus() {
+			return Optional.ofNullable(status).orElse(EStatus.DISABLE.getValue());
+		}
+
+		public Double getDiscountPrice() {
+			return Optional.ofNullable(discountPrice).orElse(0D);
+		}
+	}
+
+	/**
+	 * 活动奖品-逻辑映射关系
+	 */
+	@Data
+	@Builder
+	@NoArgsConstructor
+	@AllArgsConstructor
+	public static class ActivityRewardRecord implements Serializable {
+
+		private Long activityId;
+		private Long rewardId;
+		private Integer rewardNum;
+	}
 }

+ 102 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/activity/ActivityTeacherQuery.java

@@ -0,0 +1,102 @@
+package com.yonge.cooleshow.biz.dal.dto.activity;
+
+import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.common.enums.EStatus;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * 分享活动老师查询信息
+ * Created by Eric.Shang on 2022/8/29.
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ActivityTeacherQuery implements Serializable {
+
+    // 活动ID
+    private Long activityId;
+    // 声音ID
+    private List<Long> subjectIdList;
+    // 老师编号
+    private Long id;
+    // 老师手机号
+    private String mobile;
+    // 老师姓名或昵称
+    private String name;
+    // 锁定状态
+    private Integer lockFlag;
+    // 删除状态
+    private Integer deleteFlag;
+    // 新增搜索
+    private Integer addType;
+
+    // 活动开始时间
+    private Long startTime;
+    // 活动结束时间
+    private Long endTime;
+    private String resourceType;
+    private String activityType;
+    private Integer activityState;
+
+
+    /**
+     * 构建对象
+     * @param recv 数据信息
+     * @return ActivityTeacherQuery
+     */
+    public static ActivityTeacherQuery from(String recv) {
+
+        return JSON.parseObject(recv, ActivityTeacherQuery.class);
+    }
+
+    public Integer getLockFlag() {
+        return Optional.ofNullable(lockFlag).orElse(EStatus.DISABLE.getValue());
+    }
+
+    public Integer getDeleteFlag() {
+        return Optional.ofNullable(deleteFlag).orElse(EStatus.DISABLE.getValue());
+    }
+
+    public Integer getAddType() {
+        return Optional.ofNullable(addType).orElse(EStatus.DISABLE.getValue());
+    }
+
+
+    public ActivityTeacherQuery startTime(Long startTime) {
+        this.startTime = startTime;
+        return this;
+    }
+
+    public ActivityTeacherQuery endTime(Long endTime) {
+        this.endTime = endTime;
+        return this;
+    }
+
+    public ActivityTeacherQuery activityId(Long activityId) {
+        this.activityId = activityId;
+        return this;
+    }
+
+    public ActivityTeacherQuery resourceType(String resourceType) {
+        this.resourceType = resourceType;
+        return this;
+    }
+
+    public ActivityTeacherQuery activityType(String activityType) {
+        this.activityType = activityType;
+        return this;
+    }
+
+    public ActivityTeacherQuery activityState(Integer activityState) {
+        this.activityState = activityState;
+        return this;
+    }
+}

+ 33 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java

@@ -42,6 +42,12 @@ public class OrderReq {
     private Long couponId;
     @ApiModelProperty(value = "推荐用户id(有推荐人的情况)")
     private Long recomUserId;
+
+    @ApiModelProperty(value = "活动id")
+    private Long activityId;
+
+    @ApiModelProperty(value = "活动id",hidden = true)
+    private Long rewardId;
     @NotNull(message = "订单金额不能为空")
     @ApiModelProperty(value = "订单金额", required = true)
     private BigDecimal actualPrice;
@@ -72,6 +78,17 @@ public class OrderReq {
         @ApiModelProperty(value = "调用业务创建方法返回", hidden = true)
         private OrderCreateRes createRes;
 
+        @ApiModelProperty(value = "活动id")
+        private Long activityId;
+
+        public Long getActivityId() {
+            return activityId;
+        }
+
+        public void setActivityId(Long activityId) {
+            this.activityId = activityId;
+        }
+
         public Long getUserId() {
             return userId;
         }
@@ -145,6 +162,14 @@ public class OrderReq {
         }
     }
 
+    public Long getRewardId() {
+        return rewardId;
+    }
+
+    public void setRewardId(Long rewardId) {
+        this.rewardId = rewardId;
+    }
+
     public Long getUserId() {
         return userId;
     }
@@ -232,4 +257,12 @@ public class OrderReq {
     public void setRecomUserId(Long recomUserId) {
         this.recomUserId = recomUserId;
     }
+
+    public Long getActivityId() {
+        return activityId;
+    }
+
+    public void setActivityId(Long activityId) {
+        this.activityId = activityId;
+    }
 }

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

@@ -1,6 +1,5 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
@@ -9,9 +8,6 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import javax.validation.constraints.NotNull;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
 import java.util.Date;
 
 /**

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.dto.search;
 
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 
 /**
  * @Author: liweifan
@@ -11,4 +12,25 @@ import io.swagger.annotations.ApiModel;
 public class MemberPriceSettingsSearch extends QueryInfo{
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty("分享老师id")
+	private Long userId;
+
+	@ApiModelProperty("活动id")
+	private Long  activityId;
+
+	public Long getActivityId() {
+		return activityId;
+	}
+
+	public void setActivityId(Long activityId) {
+		this.activityId = activityId;
+	}
+
+	public Long getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
 }

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityEvaluation.java

@@ -4,6 +4,7 @@ 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 com.yonge.cooleshow.common.enums.ActivityResourceEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -28,6 +29,11 @@ public class ActivityEvaluation implements Serializable {
     @ApiModelProperty("曲目id ")
     @TableField(value = "music_sheet_id_")
     private Long musicSheetId;
+
+    @ApiModelProperty("资源类型 ")
+    @TableField(value = "resource_type_")
+    private ActivityResourceEnum resourceType;
+
     @ApiModelProperty("创建时间 ")
     @TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -37,6 +43,14 @@ public class ActivityEvaluation implements Serializable {
     @TableField(value = "create_by_")
     private Long createBy;
 
+    public ActivityResourceEnum getResourceType() {
+        return resourceType;
+    }
+
+    public void setResourceType(ActivityResourceEnum resourceType) {
+        this.resourceType = resourceType;
+    }
+
     public Long getId() {
         return id;
     }

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityEvaluationRecord.java

@@ -31,6 +31,11 @@ public class ActivityEvaluationRecord implements Serializable {
     @ApiModelProperty("评测活动id ")
     @TableField(value = "evaluation_id_")
     private Long evaluationId;
+
+    @ApiModelProperty("活动内容资源ID ")
+    @TableField(value = "resource_id_")
+    private Long resourceId;
+
     @ApiModelProperty("分数 ")
     @TableField(value = "score_")
     private Double score;
@@ -40,6 +45,14 @@ public class ActivityEvaluationRecord implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date createTime;
 
+    public Long getResourceId() {
+        return resourceId;
+    }
+
+    public void setResourceId(Long resourceId) {
+        this.resourceId = resourceId;
+    }
+
     public Long getId() {
         return id;
     }

+ 16 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityPlan.java

@@ -4,22 +4,20 @@ 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 com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
 import com.yonge.cooleshow.common.enums.RegistrationMethodEnum;
 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;
 
-import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.io.Serializable;
 import java.math.BigDecimal;
+import java.util.Date;
+import java.util.Optional;
 
 /**
  * 活动计划表
@@ -31,7 +29,7 @@ public class ActivityPlan implements Serializable {
     @ApiModelProperty("主键 ")
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
-    @ApiModelProperty(value = "活动类型 EVALUATION 评测活动 STANDARD_GIFT 达标赠送", required = true)
+    @ApiModelProperty(value = "活动类型 EVALUATION 评测活动 STANDARD_GIFT 达标赠送 SHARE分享活动", required = true)
     @TableField(value = "activity_type_")
     @NotNull(message = "活动类型不能为空")
     private ActivityTypeEnum activityType;
@@ -92,6 +90,9 @@ public class ActivityPlan implements Serializable {
     @ApiModelProperty("发奖状态(完成状态) 0 未发奖 1 已发奖 ")
     @TableField(value = "reward_flag_")
     private Integer rewardFlag;
+    @ApiModelProperty(value = "活动分类类型, MUSIC_SHEET(曲谱) MUSIC(音乐) VIP(会员) VIDEO(视频) LIVE(直播) GOODS(商品)")
+    @TableField(value = "share_type_")
+    private String shareType;
     @ApiModelProperty("创建时间 ")
     @TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -213,6 +214,14 @@ public class ActivityPlan implements Serializable {
         this.activityState = activityState;
     }
 
+    public String getShareType() {
+        return Optional.ofNullable(shareType).orElse("");
+    }
+
+    public void setShareType(String shareType) {
+        this.shareType = shareType;
+    }
+
     public Date getCreateTime() {
         return createTime;
     }

+ 17 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityReward.java

@@ -4,21 +4,19 @@ 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 com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.common.enums.RewardTypeEnum;
 import com.yonge.cooleshow.common.enums.UnitEnum;
 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;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Positive;
 import javax.validation.constraints.PositiveOrZero;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
 
 
 /**
@@ -85,6 +83,18 @@ public class ActivityReward implements Serializable {
     @TableField(value = "update_by_")
     private Long updateBy;
 
+    @ApiModelProperty("优惠金额")
+    @TableField(value = "discount_price_")
+    private BigDecimal discountPrice;
+
+    public BigDecimal getDiscountPrice() {
+        return discountPrice;
+    }
+
+    public void setDiscountPrice(BigDecimal discountPrice) {
+        this.discountPrice = discountPrice;
+    }
+
     public Long getId() {
         return id;
     }
@@ -204,4 +214,5 @@ public class ActivityReward implements Serializable {
     public void setUpdateBy(Long updateBy) {
         this.updateBy = updateBy;
     }
+
 }

+ 24 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrder.java

@@ -36,6 +36,15 @@ public class UserOrder implements Serializable {
     @ApiModelProperty(value = "推荐用户id(有推荐人的情况)")
     @TableField(value = "recom_user_id_")
     private Long recomUserId;
+
+    @ApiModelProperty(value = "活动id(有活动的情况)")
+    @TableField(value = "activity_id_")
+    private Long activityId;
+
+    @ApiModelProperty(value = "活动奖品id(有活动的情况)")
+    @TableField(value = "reward_id_")
+    private Long rewardId;
+
     @ApiModelProperty("订单名称 ")
     @TableField(value = "order_name_")
     private String orderName;
@@ -87,6 +96,21 @@ public class UserOrder implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
+    public Long getRewardId() {
+        return rewardId;
+    }
+
+    public void setRewardId(Long rewardId) {
+        this.rewardId = rewardId;
+    }
+
+    public Long getActivityId() {
+        return activityId;
+    }
+
+    public void setActivityId(Long activityId) {
+        this.activityId = activityId;
+    }
 
 
     public Long getId() {

+ 5 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonPurchaseRecord.java

@@ -1,15 +1,16 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
-import com.yonge.cooleshow.common.entity.BaseEntity;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
 import java.util.Date;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.yonge.cooleshow.common.entity.BaseEntity;
+
 /**
  * 视频课购买记录表
  * @author yzp

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MK.java

@@ -0,0 +1,13 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+/**
+ * 常用数据类型正则
+ * Created by Eric.Shang on 2022/8/29.
+ */
+public interface MK {
+
+    // 手机号
+    String EXP_MOBILE_NUMBER = "^\\d{3,11}$";
+    // 正型
+    String EXP_INT = "^\\d+$";
+}

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

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationRecordVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluationRecord;
+import com.yonge.cooleshow.common.enums.ActivityResourceEnum;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -47,4 +48,14 @@ public interface ActivityEvaluationRecordService extends IService<ActivityEvalua
 	 * @param score 分数
 	 */
     void saveRecord(Long evaluationId, Long userId, BigDecimal score);
+
+	/**
+	 * 添加活动参与记录
+	 *
+	 * @param activityId 活动id
+	 * @param userId 用户id
+	 * @param resourceId 资源id
+	 * @param resourceType 资源类型
+	 */
+    void saveActivityRecord(Long activityId, Long userId, Long resourceId, ActivityResourceEnum resourceType);
 }

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationService.java

@@ -4,12 +4,14 @@ 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.ActivityEvaluationDto;
+import com.yonge.cooleshow.biz.dal.dto.activity.ActivityTeacherQuery;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
 import com.yonge.cooleshow.biz.dal.vo.ActivityMusicVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.activity.ActivityTeacherWrapper;
 
 import java.util.List;
 
@@ -60,4 +62,11 @@ public interface ActivityEvaluationService extends IService<ActivityEvaluation>
 	 */
 	IPage<MusicSheetVo> musicPage(IPage<MusicSheetVo> page, MusicSheetSearch query);
 
+	/**
+	 * 活动老师信息
+	 * @param page ActivityTeacherWrapper
+	 * @param query ActivityTeacherQuery
+	 * @return IPage<ActivityTeacherWrapper>
+	 */
+	IPage<ActivityTeacherWrapper> activityTeacherPageInfo(IPage<ActivityTeacherWrapper> page, ActivityTeacherQuery query);
 }

+ 21 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityPlanService.java

@@ -3,23 +3,18 @@ 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.auth.api.entity.SysUser;
-
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanDto;
-
-import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto;
 import com.yonge.cooleshow.biz.dal.dto.SaveOrUpdateRewardDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
-
-import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityPlanSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
+import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicActivityVo;
 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 java.util.List;
+import com.yonge.cooleshow.common.enums.ActivityShareEnum;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 
 /**
  * 活动计划表 服务类
@@ -104,8 +99,26 @@ public interface ActivityPlanService extends IService<ActivityPlan>  {
 
 	/**
 	 * 变更活动奖品
+	 *
 	 * @param saveOrUpdateRewardDto
 	 * @return
 	 */
     Boolean saveOrUpdateReward(SaveOrUpdateRewardDto saveOrUpdateRewardDto);
+
+
+	/**
+	 * 活动分享
+	 * @param type 分享类型
+	 * @param userId 用户id
+	 * @return
+	 */
+	ActivityPlanVo activityShare(ActivityShareEnum type, Long userId);
+
+	/**
+	 * 检查活动是否进行中
+	 *
+	 * @param activityId 活动id
+	 * @return
+	 */
+	YesOrNoEnum state(Long activityId);
 }

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityUserRewardService.java

@@ -27,4 +27,13 @@ public interface ActivityUserRewardService extends IService<ActivityUserReward>
  	 * @date 2022-08-04
      */
     IPage<UserRewardVo> selectPage(IPage<UserRewardVo> page, ActivityUserRewardSearch query);
+
+	/**
+	 * 订单购买的发奖记录
+	 *
+	 * @param activityId 活动id
+	 * @param rewardId 奖品id
+	 * @param userId 用户id
+	 */
+    void saveRewardRecord(Long activityId, Long rewardId, Long userId);
 }

+ 11 - 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,13 @@ public interface LiveRoomService extends IService<LiveRoom> {
      * @param speakerId 房间uid
      */
     LiveRoom getLiveInRoomBySpeakerId(Long speakerId);
+    
+    /**
+     * 查询老师正在直播的列表
+     * 
+     * @return
+     */
+    List<TeacherLivingInfoVo> queryTeacherLivingList();
 
 }
 

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MemberPriceSettingsService.java

@@ -10,6 +10,7 @@ import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.vo.MemberPriceSettingsVo;
 import com.yonge.cooleshow.biz.dal.dto.search.MemberPriceSettingsSearch;
 import com.yonge.cooleshow.biz.dal.entity.MemberPriceSettings;
+import com.yonge.cooleshow.biz.dal.vo.MemberPriceVo;
 import com.yonge.cooleshow.biz.dal.vo.ShareProfitVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
@@ -86,4 +87,12 @@ public interface MemberPriceSettingsService extends IService<MemberPriceSettings
      * @return
      */
     Boolean addVip(VipSubmitReq vipSubmitReq, ClientEnum client, SysUser sysUser);
+
+    /**
+     * 会员信息
+     *
+     * @param query
+     * @return
+     */
+    MemberPriceVo getVipShare(MemberPriceSettingsSearch query);
 }

+ 26 - 8
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);
 
     /**
      * 曲目状态修改 启用、停用
@@ -305,7 +324,6 @@ public interface MusicSheetService extends IService<MusicSheet> {
      /** 查询审核曲目信息
      *
      * @param authMusicSheetId 曲目审核id
-     * @return
      */
     MusicSheetDetailVo auditDetail(Long authMusicSheetId);
 

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

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
 import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
+import com.yonge.cooleshow.common.enums.ActivityResourceEnum;
 import com.yonge.toolset.base.exception.BizException;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -62,4 +63,23 @@ public class ActivityEvaluationRecordServiceImpl extends ServiceImpl<ActivityEva
         save(activityEvaluationRecord);
     }
 
+    @Override
+    public void saveActivityRecord(Long activityId, Long userId, Long resourceId, ActivityResourceEnum resourceType) {
+        List<ActivityEvaluation> list = activityEvaluationService.lambdaQuery()
+                                                                 .eq(ActivityEvaluation::getActivityId, activityId)
+                                                                 .eq(ActivityEvaluation::getMusicSheetId, resourceId)
+                                                                 .eq(ActivityEvaluation::getResourceType, resourceType)
+                                                                 .list();
+        ActivityEvaluation activityEvaluation = new ActivityEvaluation();
+        if (!CollectionUtils.isEmpty(list)) {
+            activityEvaluation = list.get(0);
+        }
+        ActivityEvaluationRecord activityEvaluationRecord = new ActivityEvaluationRecord();
+        activityEvaluationRecord.setResourceId(resourceId);
+        activityEvaluationRecord.setUserId(userId);
+        activityEvaluationRecord.setActivityId(activityId);
+        activityEvaluationRecord.setEvaluationId(activityEvaluation.getId());
+        this.save(activityEvaluationRecord);
+    }
+
 }

+ 141 - 16
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationServiceImpl.java

@@ -3,38 +3,51 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dao.ActivityEvaluationDao;
 import com.yonge.cooleshow.biz.dal.dto.ActivityEvaluationDto;
+import com.yonge.cooleshow.biz.dal.dto.activity.ActivityTeacherQuery;
+import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
+import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
+import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
 import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
+import com.yonge.cooleshow.biz.dal.service.SubjectService;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
+import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo;
 import com.yonge.cooleshow.biz.dal.vo.ActivityMusicVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.activity.ActivityTeacherWrapper;
+import com.yonge.cooleshow.common.enums.ActivityResourceEnum;
+import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
+import com.yonge.cooleshow.common.enums.EStatus;
 import com.yonge.toolset.base.exception.BizException;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
-import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo;
-import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationSearch;
-import com.yonge.cooleshow.biz.dal.dao.ActivityEvaluationDao;
-import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
 
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
-
 import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
-
+@Slf4j
 @Service
 public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluationDao, ActivityEvaluation> implements ActivityEvaluationService {
-    private final static Logger log = LoggerFactory.getLogger(ActivityEvaluationServiceImpl.class);
+
     @Autowired
     private ActivityPlanService activityPlanService;
+    @Autowired
+    private SubjectService subjectService;
 
     @Override
     public ActivityEvaluationVo detail(Long id) {
@@ -53,20 +66,79 @@ public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluatio
 
     @Override
     public Boolean addBatch(ActivityEvaluationDto param, SysUser user) {
-        List<Long> musicSheetIds = WrapperUtil.toLongList(param.getMusicSheetIds());
+
+        // 活动信息
+        ActivityPlan activity = activityPlanService.getBaseMapper().selectById(param.getActivityId());
+        if (Objects.isNull(activity)) {
+            throw new BizException("无效的活动ID");
+        }
+
+        List<Long> activityContentIds = Lists.newArrayList();
+        switch (activity.getActivityType()) {
+            case EVALUATION: // 评测活动
+                if (StringUtils.isEmpty(param.getMusicSheetIds())) {
+                    throw new BizException("曲子id不能为空");
+                }
+
+                // 活动曲目ID
+                activityContentIds = WrapperUtil.toLongList(param.getMusicSheetIds());
+                break;
+            case SHARE: // 分享活动
+                if (StringUtils.isEmpty(param.getTeacherIds())) {
+                    throw new BizException("老师ID不能为空");
+                }
+
+                // 活动关联老师ID
+                activityContentIds = WrapperUtil.toLongList(param.getTeacherIds());
+                break;
+            case STANDARD_GIFT:
+            default:
+                break;
+        }
+
+        if (CollectionUtils.isEmpty(activityContentIds)) {
+            // 活动内容请求ID为空,直接忽略后面业务逻辑流程
+            return true;
+        }
 
         List<ActivityEvaluation> activityEvaluations = baseMapper.selectList(Wrappers.<ActivityEvaluation>lambdaQuery()
                 .eq(ActivityEvaluation::getActivityId, param.getActivityId())
         );
 
-        List<Long> oldMusicSheetIds = activityEvaluations.stream().map(o -> o.getMusicSheetId()).collect(Collectors.toList());
-        musicSheetIds.removeAll(oldMusicSheetIds);
+        // 活动类型
+        ActivityTypeEnum activityType = ActivityTypeEnum.EVALUATION;
+        String resourceType = ActivityResourceEnum.MUSIC_SHEET.getCode();
+
+        if (Objects.nonNull(param.getActivityId())) {
+            ActivityPlan activityPlan = activityPlanService.getBaseMapper().selectById(param.getActivityId());
+
+            if (Objects.isNull(activityPlan)) {
+                throw new BizException("当前活动ID无效");
+            }
+            activityType = activityPlan.getActivityType();
+
+            switch (activityType) {
+                case SHARE: // 活动分享老师
+                    resourceType = ActivityResourceEnum.TEACHER.getCode();
+                    break;
+                case EVALUATION: // 曲目分享
+                    resourceType = ActivityResourceEnum.MUSIC_SHEET.getCode();
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        List<Long> oldMusicSheetIds = activityEvaluations.stream().map(ActivityEvaluation::getMusicSheetId).collect(Collectors.toList());
+        activityContentIds.removeAll(oldMusicSheetIds);
+
+        if ((oldMusicSheetIds.size() + activityContentIds.size()) > 10
+                && activityType == ActivityTypeEnum.EVALUATION) {
 
-        if ((oldMusicSheetIds.size() + musicSheetIds.size()) > 10) {
             throw new BizException("添加的曲目不能多余10首");
         }
-        if (CollectionUtils.isNotEmpty(musicSheetIds)) {
-            baseMapper.addBatch(param.getActivityId(), user.getId(), musicSheetIds);
+        if (CollectionUtils.isNotEmpty(activityContentIds)) {
+            baseMapper.addBatch(param.getActivityId(), user.getId(), activityContentIds, resourceType);
             //更新修改人和修改时间
             activityPlanService.update(Wrappers.<ActivityPlan>lambdaUpdate()
                     .set(ActivityPlan::getUpdateBy, user.getId())
@@ -102,4 +174,57 @@ public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluatio
         return page.setRecords(baseMapper.musicPage(page, query));
     }
 
+    /**
+     * 活动老师信息
+     *
+     * @param page  ActivityTeacherWrapper
+     * @param query ActivityTeacherQuery
+     * @return IPage<ActivityTeacherWrapper>
+     */
+    @Override
+    public IPage<ActivityTeacherWrapper> activityTeacherPageInfo(IPage<ActivityTeacherWrapper> page, ActivityTeacherQuery query) {
+
+        // 排除存在时间冲突的已参加活动老师
+        if (EStatus.ENABLE.match(query.getAddType())) {
+
+            ActivityPlan activityPlan = activityPlanService.getBaseMapper().selectById(query.getActivityId());
+
+            if (Objects.nonNull(activityPlan)) {
+
+                // 排除存在时间冲突的老师
+                query.activityType(ActivityTypeEnum.SHARE.getCode())
+                        .resourceType(ActivityResourceEnum.TEACHER.getCode())
+                        .activityState(EStatus.ENABLE.getValue())
+                        .startTime(Optional.ofNullable(activityPlan.getActivityStart()).map(Date::getTime).orElse(null))
+                        .endTime(Optional.ofNullable(activityPlan.getActivityEnd()).map(Date::getTime).orElse(null))
+                        .activityId(null); // 重置活动匹配
+            }
+        }
+
+        List<ActivityTeacherWrapper> wrappers = baseMapper.selectActivityTeacherPageInfo(page, query);
+
+        // 查询老师声部信息
+        List<Long> subjectIds = wrappers.stream()
+                .filter(x -> StringUtils.isNotEmpty(x.getSubjectId()))
+                .flatMap(x -> Arrays.stream(x.getSubjectId().split(",")))
+                .map(Long::parseLong).distinct().collect(Collectors.toList());
+
+        Map<Long, String> subjectNameMap = Maps.newHashMap();
+        if (CollectionUtils.isNotEmpty(subjectIds)) {
+
+            subjectNameMap = subjectService.findBySubjectByIdList(subjectIds).stream()
+                    .collect(Collectors.toMap(Subject::getId, Subject::getName, (o, n) -> n));
+        }
+
+        for (ActivityTeacherWrapper item : wrappers) {
+
+            item.setSubjectName(subjectNameMap.entrySet().stream()
+                    .filter(x -> item.getSubjectIds().contains(x.getKey()))
+                    .map(Map.Entry::getValue)
+                    .collect(Collectors.joining("、")));
+        }
+
+        return page.setRecords(wrappers);
+    }
+
 }

+ 129 - 24
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java

@@ -2,54 +2,64 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.api.R;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.google.common.collect.Lists;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.ActivityPlanDao;
-import com.yonge.cooleshow.biz.dal.dao.ActivityPlanEvaluationDao;
-import com.yonge.cooleshow.biz.dal.dao.ActivityRewardChangeStockDao;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanDto;
+import com.yonge.cooleshow.biz.dal.dto.ActivityPlanPayDto;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto;
 import com.yonge.cooleshow.biz.dal.dto.SaveOrUpdateRewardDto;
-import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
-import com.yonge.cooleshow.biz.dal.entity.ActivityPlanEvaluation;
-import com.yonge.cooleshow.biz.dal.dto.ActivityPlanPayDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityPlanSearch;
-import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.enums.*;
-import com.yonge.cooleshow.biz.dal.service.*;
-import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
-import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
+import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluationRecord;
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlanReward;
+import com.yonge.cooleshow.biz.dal.entity.ActivityRegistration;
+import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
+import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationRecordService;
+import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanEvaluationService;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanRewardService;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanStandardService;
+import com.yonge.cooleshow.biz.dal.service.ActivityRegistrationService;
+import com.yonge.cooleshow.biz.dal.service.ActivityRewardService;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
+import com.yonge.cooleshow.biz.dal.vo.ActivityMusicVo;
+import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicActivityVo;
+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.cooleshow.common.enums.ActivityTypeEnum;
-import com.yonge.cooleshow.common.enums.CacheNameEnum;
-import com.yonge.cooleshow.common.enums.RegistrationMethodEnum;
+import com.yonge.cooleshow.common.enums.*;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.payment.util.DistributedLock;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
-import org.redisson.api.RedissonClient;
-import org.springframework.stereotype.Service;
 import org.apache.commons.collections.CollectionUtils;
+import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
-import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.util.*;
+import java.util.ArrayList;
 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.function.Consumer;
 import java.util.stream.Collectors;
@@ -127,6 +137,9 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
 
     @Override
     public ActivityPlanVo detail(Long id) {
+        if (id == null) {
+            return null;
+        }
         ActivityPlanVo detail = baseMapper.detail(id);
         if (null != detail) {
             if (ActivityTypeEnum.EVALUATION.equals(detail.getActivityType())) {
@@ -135,6 +148,8 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
             if (ActivityTypeEnum.STANDARD_GIFT.equals(detail.getActivityType())) {
                 detail.setPlanStandard(activityPlanStandardService.getById(id));
             }
+        } else {
+            return null;
         }
         //查询活动奖品
         List<ActivityPlanRewardDto> activityRewardList = activityPlanRewardService.queryActivityPlanReward(id);
@@ -155,11 +170,16 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
             throw new BizException("参数异常");
         }
 
+        // 活动ID
+        long activityId;
         if (null == activityPlan.getId()) {
             activityPlan.setDraftFlag(1);
             activityPlan.setCreateBy(activityPlan.getUserId());
             activityPlan.setUpdateBy(activityPlan.getUserId());
             save(activityPlan);
+
+            // 更新分享活动奖品信息
+            activityId = activityPlan.getId();
         } else {
             ActivityPlan old = getById(activityPlan.getId());
             //启用状态,只能修改活动结束时间
@@ -173,6 +193,15 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
                 activityPlan.setUpdateBy(activityPlan.getUserId());
                 updateById(activityPlan);
             }
+
+            // 更新活动ID
+            activityId = old.getId();
+        }
+
+        // 分享活动-奖品信息
+        if (CollectionUtils.isNotEmpty(activityPlan.getRewardItems())) {
+
+            insertActivityRewardSelectiveInfo(activityPlan, activityId);
         }
 
         //修改拓展信息
@@ -183,6 +212,55 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
         return activityPlan;
     }
 
+    /**
+     * 分享活动奖品信息
+     * @param activityPlan ActivityPlanDto
+     * @param activityId 活动ID
+     */
+    private void insertActivityRewardSelectiveInfo(ActivityPlanDto activityPlan, long activityId) {
+
+        for (ActivityPlanDto.RewardItem item : activityPlan.getRewardItems()) {
+            // 更新活动ID
+            item.setActivityId(activityId);
+        }
+
+        List<Long> deleteRewardIds = activityPlanRewardService.getBaseMapper().selectBatchIds(Lists.newArrayList(activityId)).stream()
+                .map(ActivityPlanReward::getRewardId).distinct().collect(Collectors.toList());
+
+        // 删除原始活动奖品映射关系
+        activityPlanRewardService.getBaseMapper().delete(Wrappers.<ActivityPlanReward>lambdaQuery().eq(ActivityPlanReward::getActivityId, activityId));
+
+        // 删除原始活动奖品信息
+        if (CollectionUtils.isNotEmpty(deleteRewardIds)) {
+
+            activityRewardService.getBaseMapper().deleteBatchIds(deleteRewardIds);
+        }
+
+        // 重新插入奖品信息
+        List<ActivityReward> rewards = JSON.parseArray(JSON.toJSONString(activityPlan.getRewardItems()), ActivityReward.class);
+
+        if (CollectionUtils.isNotEmpty(rewards)) {
+
+            activityRewardService.saveBatch(rewards, 30);
+        }
+
+        // 重新插入活动奖品映射关系
+        List<ActivityPlanDto.ActivityRewardRecord> records = Lists.newArrayList();
+
+        for (ActivityReward item : rewards) {
+
+            records.add(ActivityPlanDto.ActivityRewardRecord.builder()
+                            .activityId(activityId)
+                            .rewardId(item.getId())
+                            .rewardNum(1)
+                    .build());
+        }
+        if (CollectionUtils.isNotEmpty(records)) {
+
+            activityPlanRewardService.saveBatch(JSON.parseArray(JSON.toJSONString(records), ActivityPlanReward.class), 30);
+        }
+    }
+
     @Override
     public Boolean updateActivityState(Long activityId, Integer activityState, Long id) {
         ActivityPlanVo detail = detail(activityId);
@@ -475,10 +553,12 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
         Long activityId = saveOrUpdateRewardDto.getActivityId();
         List<ActivityPlanRewardDto> updateRewardDtoList = saveOrUpdateRewardDto.getUpdateRewardDtoList();
 
-        if(CollectionUtils.isEmpty(updateRewardDtoList)){
+
+		if(CollectionUtils.isEmpty(updateRewardDtoList)){
             updateRewardDtoList = new ArrayList<>();
         }
 
+
         for (ActivityPlanRewardDto rewardDto : updateRewardDtoList) {
             activityPlanRewardService.saveOrUpdateReward(rewardDto);
         }
@@ -494,6 +574,31 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
         return true;
     }
 
+    @Override
+    public ActivityPlanVo activityShare(ActivityShareEnum type, Long userId) {
+        if (userId == null || type == null) {
+            return null;
+        }
+        ActivityPlanVo detail = baseMapper.selectActivityShare(type.getCode(), userId);
+        if (detail ==null) {
+            return null;
+        }
+        //查询活动奖品
+        List<ActivityPlanRewardDto> activityRewardList = activityPlanRewardService.queryActivityPlanReward(detail.getId());
+        detail.setActivityRewardList(activityRewardList);
+        return detail;
+    }
+
+    @Override
+    public YesOrNoEnum state(Long activityId) {
+        List<ActivityPlan> list = this.lambdaQuery()
+                                      .eq(ActivityPlan::getId, activityId)
+                                      .eq(ActivityPlan::getActivityStart, 1)
+                                      .list();
+        return CollectionUtils.isEmpty(list)?YesOrNoEnum.NO:YesOrNoEnum.YES;
+
+    }
+
     /**
      * 参与活动消息
      */

+ 72 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityUserRewardServiceImpl.java

@@ -2,29 +2,95 @@ 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.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
 import com.yonge.cooleshow.biz.dal.vo.UserRewardVo;
+import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
+import com.yonge.toolset.base.exception.BizException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import com.yonge.cooleshow.biz.dal.entity.ActivityUserReward;
 import com.yonge.cooleshow.biz.dal.vo.ActivityUserRewardVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityUserRewardSearch;
 import com.yonge.cooleshow.biz.dal.dao.ActivityUserRewardDao;
 import com.yonge.cooleshow.biz.dal.service.ActivityUserRewardService;
 
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
+@Slf4j
 @Service
 public class ActivityUserRewardServiceImpl extends ServiceImpl<ActivityUserRewardDao, ActivityUserReward> implements ActivityUserRewardService {
-    private final static Logger log = LoggerFactory.getLogger(ActivityUserRewardServiceImpl.class);
+
+    @Autowired
+    private ActivityPlanService activityPlanService;
 
 	@Override
     public ActivityUserRewardVo detail(Long id) {
         return baseMapper.detail(id);
     }
-    
+
     @Override
     public IPage<UserRewardVo> selectPage(IPage<UserRewardVo> page, ActivityUserRewardSearch query){
-        return page.setRecords(baseMapper.selectPage(page, query));
+
+        // 活动信息
+        ActivityPlan activityPlan = activityPlanService.getBaseMapper().selectById(query.getActivityId());
+        if (Objects.isNull(activityPlan)) {
+            throw  new BizException("无效的活动ID");
+        }
+
+        // 活动获奖用户信息
+        List<UserRewardVo> userRewards = baseMapper.selectPage(page, query);
+
+        // 分享活动关联老师信息
+        if (ActivityTypeEnum.SHARE == activityPlan.getActivityType()) {
+
+            Map<Long, String> teacherNameMap = Maps.newConcurrentMap();
+            List<Long> userIds = userRewards.stream().map(UserRewardVo::getUserId).distinct().collect(Collectors.toList());
+
+            Lists.partition(userIds, 30).parallelStream().forEach(item -> {
+
+                // 同一个活动,用户关联多个老师信息
+                Map<Long, String> collect = getBaseMapper().selectActivityShareTeacher(activityPlan.getId(), item).stream()
+                        .collect(Collectors.groupingBy(UserRewardVo::getUserId, Collectors.mapping(x -> {
+
+                            if (StringUtils.isNotEmpty(x.getRealName())) {
+                                return x.getRealName();
+                            }
+                            return x.getUsername();
+                        }, Collectors.joining("、"))));
+
+                teacherNameMap.putAll(collect);
+            });
+
+            // 填充老师信息
+            for (UserRewardVo item : userRewards) {
+
+                item.setTeacherName(teacherNameMap.getOrDefault(item.getUserId(), ""));
+            }
+        }
+
+        return page.setRecords(userRewards);
+    }
+
+    @Override
+    public void saveRewardRecord(Long activityId, Long rewardId, Long userId) {
+        ActivityUserReward activityUserReward = new ActivityUserReward();
+        activityUserReward.setActivityId(activityId);
+        activityUserReward.setRewardId(rewardId);
+        activityUserReward.setUserId(userId);
+        activityUserReward.setCreateTime(new Date());
+        activityUserReward.setUpdateTime(new Date());
+        activityUserReward.setGrantFlag(1);
+        activityUserReward.setReceiveFlag(1);
+        this.save(activityUserReward);
     }
-	
 }

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

@@ -1,5 +1,46 @@
 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 org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.redisson.api.RBucket;
+import org.redisson.api.RMap;
+import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -8,40 +49,42 @@ 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.*;
-import com.yonge.cooleshow.biz.dal.enums.*;
-import com.yonge.cooleshow.biz.dal.service.*;
+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;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.redisson.api.RBucket;
-import org.redisson.api.RMap;
-import org.redisson.api.RedissonClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.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;
 
 /**
  * 直播房间与课程的关系表表(LiveRoom)表服务实现类
@@ -274,6 +317,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 +345,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());
         //去融云创建房间及创建房间缓存信息
@@ -1069,5 +1114,10 @@ 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();
+	}
 }
 

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 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.dto.ActivityPlanRewardDto;
 import com.yonge.cooleshow.biz.dal.dto.VipSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.entity.*;
@@ -23,6 +24,9 @@ import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.ActivityShareEnum;
+import com.yonge.cooleshow.common.enums.RewardTypeEnum;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.string.MessageFormatter;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
@@ -35,6 +39,7 @@ import org.slf4j.LoggerFactory;
 import com.yonge.cooleshow.biz.dal.dto.search.MemberPriceSettingsSearch;
 import com.yonge.cooleshow.biz.dal.dao.MemberPriceSettingsDao;
 
+import java.math.BigDecimal;
 import java.util.*;
 
 
@@ -56,6 +61,10 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private SysConfigService sysConfigService;
+
+    @Autowired
+    private ActivityPlanService activityPlanService;
+
     @Override
     public MemberPriceSettingsVo detail(Long id) {
         return baseMapper.detail(id);
@@ -78,13 +87,29 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
         if (null == detail) {
             return HttpResponseResult.failed("未找到会员卡信息");
         }
+
         OrderCreateRes orderCreateRes = new OrderCreateRes();
+        BigDecimal couponAmount = BigDecimal.ZERO;
+        ActivityPlanVo activityPlanVo = activityPlanService.detail(orderReqInfo.getActivityId());
+
+        if (activityPlanVo != null && activityPlanVo.getActivityState() == 1) {
+            for (ActivityPlanRewardDto activityPlanRewardDto : activityPlanVo.getActivityRewardList()) {
+                if (activityPlanRewardDto.getActivityReward().getUnit().getCode().equals(detail.getPeriod().getCode())) {
+                    couponAmount = activityPlanRewardDto.getActivityReward().getDiscountPrice();
+                    orderCreateRes.setActivityId(activityPlanVo.getId());
+                    orderCreateRes.setRewardId(activityPlanRewardDto.getActivityReward().getId());
+                    break;
+                }
+            }
+        }
+
         orderCreateRes.setRes(true);
         orderCreateRes.setMerchId(0l);
         orderCreateRes.setBizId(detail.getId());
         orderCreateRes.setBizContent("会员卡购买-" + detail.getPeriod().getMsg());
         orderCreateRes.setGoodNum(1);
         orderCreateRes.setOriginalPrice(detail.getOriginalPrice());
+        orderCreateRes.setCouponAmount(couponAmount);
         orderCreateRes.setExpectPrice(detail.getSalePrice());
         return HttpResponseResult.succeed(orderCreateRes);
     }
@@ -182,6 +207,35 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
         return true;
     }
 
+    @Override
+    public MemberPriceVo getVipShare(MemberPriceSettingsSearch query) {
+        MemberPriceVo memberPriceVo = new MemberPriceVo();
+        List<MemberPriceSettingsVo> memberPriceSettingsVos = baseMapper.selectList(query);
+
+        memberPriceVo.setList(memberPriceSettingsVos);
+        ActivityPlanVo activityPlan = activityPlanService.detail(query.getActivityId());
+
+        if (activityPlan == null || activityPlan.getActivityState() != 1) {
+            return memberPriceVo;
+        }
+
+        SysUser user = sysUserFeignService.queryUserById(query.getUserId());
+        memberPriceVo.setDiscount(YesOrNoEnum.YES);
+        memberPriceVo.setAvatar(user.getAvatar());
+        memberPriceVo.setUsername(user.getUsername());
+
+        for (ActivityPlanRewardDto activityPlanRewardDto : activityPlan.getActivityRewardList()) {
+            for (MemberPriceSettingsVo memberPriceSettingsVo : memberPriceSettingsVos) {
+                memberPriceSettingsVo.setDiscount(YesOrNoEnum.NO);
+                if (memberPriceSettingsVo.getPeriod().getCode().equals( activityPlanRewardDto.getActivityReward().getUnit().getCode())) {
+                    memberPriceSettingsVo.setDiscount(YesOrNoEnum.YES);
+                    memberPriceSettingsVo.setDiscountPrice(activityPlanRewardDto.getActivityReward().getDiscountPrice());
+                }
+            }
+        }
+        return memberPriceVo;
+    }
+
     private void sendAddVipMessage(Long userId, ClientEnum client, Integer times, PeriodEnum type, String reason) {
         try {
             SysUser user = sysUserFeignService.queryUserById(userId);

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

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.*;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
+import com.yonge.cooleshow.common.enums.ActivityShareEnum;
 import com.yonge.cooleshow.common.enums.PostStatusEnum;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
@@ -29,6 +30,7 @@ import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import com.yonge.toolset.utils.easyexcel.ErrMsg;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 import com.yonge.toolset.utils.easyexcel.ExcelException;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -38,6 +40,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
@@ -65,6 +68,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     private MusicFavoriteService musicFavoriteService;
 
     @Autowired
+    private ActivityPlanService  activityPlanService;
+
+    @Autowired
     private SysConfigService sysConfigService;
 
     @Autowired
@@ -139,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);
@@ -376,17 +405,20 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         boolean flag;
         Long originalMusicSheetId = musicSheetAuthRecordService.audit(param, userId);
         musicSheet.setAuditStatus(param.getAuthStatus());
+
         if (param.getAuthStatus().equals(AuthStatusEnum.PASS) && StringUtil.isEmpty(param.getMusicImg())) {
             throw new BizException("曲目渲染失败");
         } else if (param.getAuthStatus().equals(AuthStatusEnum.PASS) && !StringUtil.isEmpty(param.getMusicImg())) {
             musicSheet.setMusicImg(param.getMusicImg());
         }
+
         musicSheet.setUpdateBy(userId);
         musicSheet.setUpdateTime(new Date());
         if (AuthStatusEnum.PASS.getCode().equals(param.getAuthStatus().getCode())) {
             musicSheet.setState(YesOrNoEnum.YES);
             // 替换曲目id
             replaceMusicSheet(param, musicSheet, originalMusicSheetId);
+
             // 修改老师标签
             teacherService.setTeacherTag(musicSheet.getUserId(), TeacherTagEnum.MUSIC);
 
@@ -969,6 +1001,22 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         ShareProfitVo result = new ShareProfitVo();
         MusicSheetDetailVo musicSheet = detail(musicSheetId, null, null);
 
+        YesOrNoEnum discount = YesOrNoEnum.NO;
+        if (ChargeTypeEnum.VIP.equals(musicSheet.getChargeType())) {
+            ActivityPlanVo activityPlanVo = activityPlanService.activityShare(ActivityShareEnum.VIP, sysUser.getId());
+            if (activityPlanVo != null) {
+                result.setActivityId(activityPlanVo.getId());
+                discount = YesOrNoEnum.YES;
+            }
+        } else if (ChargeTypeEnum.CHARGE.equals(musicSheet.getChargeType())) {
+            ActivityPlanVo activityPlanVo = activityPlanService.activityShare(ActivityShareEnum.MUSIC_SHEET,
+                                                                              sysUser.getId());
+            if (activityPlanVo != null) {
+                result.setActivityId(activityPlanVo.getId());
+                discount = YesOrNoEnum.YES;
+            }
+        }
+        result.setDiscount(discount);
         result.setTeacherId(sysUser.getId());
         result.setType("MUSIC");
         result.setMusicSheet(musicSheet);
@@ -1064,7 +1112,8 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         return baseMapper.auditDetailList(musicSheetAuthRecord.getOriginalMusicSheetId(),authMusicSheetId);
     }
 
-    private SysUser getSysUser(Long userId) {
+
+	private SysUser getSysUser(Long userId) {
         return Optional.ofNullable(userId)
                 .map(sysUserFeignService::queryUserById)
                 .orElseThrow(() -> new BizException("用户不存在"));

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

+ 67 - 26
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -17,6 +17,7 @@ import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.ActivityResourceEnum;
 import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.common.enums.PostStatusEnum;
 import com.yonge.cooleshow.common.service.IdGeneratorService;
@@ -85,8 +86,17 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     private PaymentProperties paymentProperties;
 
     @Autowired
+    private ActivityEvaluationRecordService activityEvaluationRecordService;
+
+    @Autowired
+    private ActivityRegistrationService activityRegistrationService;
+
+    @Autowired
     private ActivityPlanService activityPlanService;
 
+    @Autowired
+    private ActivityUserRewardService activityUserRewardService;
+
     //验证订单是否可以下单,获取订单金额信息
     private static final Map<GoodTypeEnum, Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
     //插入订单后执行
@@ -287,6 +297,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             info.setSubOrderNo(Long.toString(subOrderNo));
             info.setUserId(orderReq.getUserId());
             info.setRecomUserId(orderReq.getRecomUserId());
+            info.setActivityId(orderReq.getActivityId());
 
             HttpResponseResult<OrderCreateRes> createResult = createFunction.apply(info);
             OrderCreateRes createRes = createResult.getData();
@@ -297,10 +308,18 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             createRes.setGoodType(info.getGoodType());
             //todo 优惠券优惠金额,暂时为0
             BigDecimal couponAmount = BigDecimal.ZERO;
+            if (createRes.getCouponAmount() != null) {
+                couponAmount = createRes.getCouponAmount();
+            }
+            if (couponAmount.compareTo(createRes.getExpectPrice()) > 0 ){
+                couponAmount = createRes.getActualPrice();
+            }
             createRes.setActualPrice(createRes.getExpectPrice().subtract(couponAmount).setScale(2, RoundingMode.HALF_UP));
             createRes.setCouponAmount(couponAmount);
             //累计实际支付金额
             actualPrice = actualPrice.add(createRes.getActualPrice());
+            orderReq.setActivityId(createRes.getActivityId());
+            orderReq.setRewardId(createRes.getRewardId());
 
             info.setCreateRes(createRes);
         }
@@ -531,7 +550,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
      */
     private UserOrderVo insertOrder(OrderReq orderReq) {
         UserOrder userOrder = new UserOrder();
-
+        userOrder.setRewardId(orderReq.getRewardId());
+        userOrder.setActivityId(orderReq.getActivityId());
         userOrder.setOrderNo(orderReq.getOrderNo());
         userOrder.setUserId(orderReq.getUserId());
         userOrder.setOrderName(orderReq.getOrderName());
@@ -601,10 +621,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             userOrder.setPlantformFee(userOrder.getPlantformFee().add(orderDetail.getPlantformFee()));
         }
 
-        //todo 优惠券优惠金额,暂时为0
-        BigDecimal couponAmount = BigDecimal.ZERO;
-        userOrder.setActualPrice(userOrder.getActualPrice().subtract(couponAmount));
-        userOrder.setCouponAmount(userOrder.getCouponAmount().add(couponAmount));
+        userOrder.setActualPrice(userOrder.getActualPrice());
+        userOrder.setCouponAmount(userOrder.getCouponAmount());
 
         if (userOrder.getActualPrice().subtract(orderReq.getActualPrice()).abs()
                 .compareTo(new BigDecimal("0.01")) > 0) {
@@ -774,6 +792,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             orderDetailVo.setUserId(detail.getUserId());
             orderDetailVo.setOrderId(detail.getId());
             orderDetailVo.setRecomUserId(detail.getRecomUserId());
+            orderDetailVo.setActivityId(detail.getActivityId());
+            orderDetailVo.setRewardId(detail.getRewardId());
             //调用业务
             Consumer<UserOrderDetailVo> userOrderVoConsumer = orderSuccess.get(orderDetailVo.getGoodType());
             if (!Objects.isNull(userOrderVoConsumer)) {
@@ -786,6 +806,9 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             if (merchId != null && merchId != 0) {
                 redissonClient.getBucket(CacheNameEnum.TEACHER_TOTAL.getRedisKey(merchId)).delete();
             }
+
+            // 记录活动参与
+            saveActivityRecord(orderDetailVo);
         }
         //清除买家统计缓存
         if (ClientEnum.STUDENT.getCode().equals(detail.getPaymentClient())) {
@@ -795,6 +818,22 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         }
     }
 
+    private void saveActivityRecord(UserOrderDetailVo orderDetailVo) {
+        if (orderDetailVo.getActivityId() == null || orderDetailVo.getActivityId() == 0 || orderDetailVo.getRecomUserId() == null) {
+            return;
+        }
+        ActivityRegistration activityRegistration = new ActivityRegistration();
+        activityRegistration.setActivityId(orderDetailVo.getActivityId());
+        activityRegistration.setOrderNo(orderDetailVo.getOrderNo());
+        activityRegistration.setSubOrderNo(orderDetailVo.getSubOrderNo());
+        activityRegistration.setUserId(orderDetailVo.getUserId());
+        activityRegistration.setCreateTime(new Date());
+        activityRegistrationService.save(activityRegistration);
+        activityEvaluationRecordService.saveActivityRecord(orderDetailVo.getActivityId(), orderDetailVo.getUserId(),
+                                                           orderDetailVo.getRecomUserId(), ActivityResourceEnum.TEACHER);
+        activityUserRewardService.saveRewardRecord(orderDetailVo.getActivityId(),orderDetailVo.getRewardId(),orderDetailVo.getUserId());
+    }
+
     /**
      * 记录平台收入和用户分润收入
      *
@@ -817,6 +856,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             platformFeeRate = BigDecimal.ONE;
         }
         BigDecimal platformFee = expectPrice.multiply(platformFeeRate).setScale(2, RoundingMode.HALF_UP);
+        platformFee = platformFee.subtract(orderDetailVo.getCouponAmount());
 
         if (platformFee.compareTo(BigDecimal.ZERO) > 0) {
             PlatformCashAccountRecord platformCashAccountRecord;
@@ -831,31 +871,32 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                         orderDetailVo.getOrderNo(), accountPeriodTime);
             }
             platformCashAccountRecordService.save(platformCashAccountRecord);
-        }
 
-        //卖家不能分润自己
-        if (null != orderDetailVo.getRecomUserId()
-                && !orderDetailVo.getRecomUserId().equals(orderDetailVo.getMerchId())) {
-            //获取分润收益费率
-            BigDecimal shareFeeRate = getShareFreeByGoodType(orderDetailVo.getGoodType()
-                    , orderDetailVo.getBizId());
-            //入老师账户
-            BigDecimal shareFee = expectPrice.multiply(shareFeeRate).setScale(2, RoundingMode.HALF_UP);
-            if (shareFee.compareTo(BigDecimal.ZERO) > 0) {
-                AccountBizTypeEnum bizTypeEnum = AccountBizTypeEnum.valueOf(orderDetailVo.getGoodType().getCode() + "_SHARE");
-                if (null != bizTypeEnum) {
-                    //插入分润老师账户变更记录-分润老师预收
-                    HttpResponseResult<UserAccountRecord> recomRecordRes = userAccountService.accountRecord(
-                            new UserAccountRecordDto(orderDetailVo.getRecomUserId(), PostStatusEnum.WAIT, shareFee, InOrOutEnum.IN,
-                                    bizTypeEnum, orderDetailVo.getBizId(), bizTypeEnum.getMsg(), orderDetailVo.getOrderNo(), orderDetailVo.getUserId(), accountPeriodTime));
-                    if (recomRecordRes.getStatus()) {
-                        //插入平台预支
-                        PlatformCashAccountRecord platformCashAccountRecord = new PlatformCashAccountRecord(orderDetailVo.getRecomUserId(), shareFee,
-                                InOrOutEnum.OUT, PostStatusEnum.WAIT, bizTypeEnum, orderDetailVo.getBizId(), orderDetailVo.getOrderNo(), accountPeriodTime);
-                        platformCashAccountRecordService.save(platformCashAccountRecord);
+            //卖家不能分润自己
+            if (null != orderDetailVo.getRecomUserId()
+                    && !orderDetailVo.getRecomUserId().equals(orderDetailVo.getMerchId())) {
+                //获取分润收益费率
+                BigDecimal shareFeeRate = getShareFreeByGoodType(orderDetailVo.getGoodType()
+                        , orderDetailVo.getBizId());
+                //入老师账户
+                BigDecimal shareFee = platformFee.multiply(shareFeeRate).setScale(2, RoundingMode.HALF_UP);
+                if (shareFee.compareTo(BigDecimal.ZERO) > 0) {
+                    AccountBizTypeEnum bizTypeEnum = AccountBizTypeEnum.valueOf(orderDetailVo.getGoodType().getCode() + "_SHARE");
+                    if (null != bizTypeEnum) {
+                        //插入分润老师账户变更记录-分润老师预收
+                        HttpResponseResult<UserAccountRecord> recomRecordRes = userAccountService.accountRecord(
+                                new UserAccountRecordDto(orderDetailVo.getRecomUserId(), PostStatusEnum.WAIT, shareFee, InOrOutEnum.IN,
+                                        bizTypeEnum, orderDetailVo.getBizId(), bizTypeEnum.getMsg(), orderDetailVo.getOrderNo(), orderDetailVo.getUserId(), accountPeriodTime));
+                        if (recomRecordRes.getStatus()) {
+                            //插入平台预支
+                            platformCashAccountRecord = new PlatformCashAccountRecord(orderDetailVo.getRecomUserId(), shareFee,
+                                    InOrOutEnum.OUT, PostStatusEnum.WAIT, bizTypeEnum, orderDetailVo.getBizId(), orderDetailVo.getOrderNo(), accountPeriodTime);
+                            platformCashAccountRecordService.save(platformCashAccountRecord);
+                        }
                     }
                 }
             }
+
         }
     }
 

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

@@ -26,6 +26,7 @@ import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupLog;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonPurchaseRecord;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
@@ -187,6 +188,9 @@ public class VideoLessonGroupDetailServiceImpl extends ServiceImpl<VideoLessonGr
         BeanUtils.copyProperties(videoLessonGroupLog, videoLessonGroupVo);
         
         videoLessonGroupVo.setId(videoLessonGroupLog.getVideoLessonGroupId());
+        
+        List<VideoLessonPurchaseRecord> videoLessonPurchaseRecordList = videoLessonPurchaseRecordDao.queryByVideoLessonGroupId(videoLessonGroupLog.getVideoLessonGroupId(), OrderStatusEnum.PAID.getCode());
+        videoLessonGroupVo.setCountStudent(videoLessonPurchaseRecordList.size());
 
         Teacher teacher = teacherService.getById(videoLessonGroupVo.getTeacherId());
         if (teacher != null) {

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

@@ -167,7 +167,7 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
     	}
         //改主表
         videoLessonGroupDao.updateExamine(examineVo);
-
+        
         VideoLessonGroup lessonGroup = baseMapper.selectById(examineVo.getId());
         //插从表
         VideoLessonAuthRecord record = new VideoLessonAuthRecord();
@@ -219,7 +219,7 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
     public void updateShelves(VideoLessonShelvesVo shelvesVo) {
         //改主表
         videoLessonGroupDao.updateShelves(shelvesVo);
-        if(shelvesVo.getShelvesFlag() == 0){
+        if(shelvesVo.getShelvesFlag() == 0 && ClientEnum.SYSTEM.equals(shelvesVo.getClientType())){
             //发推送
             sendOutSaleMessage(shelvesVo);
         }
@@ -536,7 +536,8 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
      */
     @Override
     public IPage<LessonGroupVo> selectLessonGroupById(IPage<LessonGroupVo> page, VideoLessonGroupSearch query) {
-        return page.setRecords(baseMapper.selectLessonGroup(page, query));
+
+        return page.setRecords(baseMapper.queryMyLessonGroup(page, query));
     }
 
     /**

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

+ 26 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MemberPriceSettingsVo.java

@@ -1,9 +1,12 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
 import com.yonge.cooleshow.biz.dal.entity.MemberPriceSettings;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
+
 /**
  * @Author: liweifan
  * @Data: 2022-04-25 14:34:49
@@ -14,6 +17,29 @@ public class MemberPriceSettingsVo extends MemberPriceSettings{
     @ApiModelProperty("更新人 ")
     private String modifierName;
 
+
+    @ApiModelProperty("专属优惠 0:否 1:是")
+    private YesOrNoEnum discount = YesOrNoEnum.NO;
+
+    @ApiModelProperty("优惠价格")
+    private BigDecimal discountPrice;
+
+    public YesOrNoEnum getDiscount() {
+        return discount;
+    }
+
+    public void setDiscount(YesOrNoEnum discount) {
+        this.discount = discount;
+    }
+
+    public BigDecimal getDiscountPrice() {
+        return discountPrice;
+    }
+
+    public void setDiscountPrice(BigDecimal discountPrice) {
+        this.discountPrice = discountPrice;
+    }
+
     public String getModifierName() {
         return modifierName;
     }

+ 62 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MemberPriceVo.java

@@ -0,0 +1,62 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-08-29
+ */
+@ApiModel("会员列表")
+public class MemberPriceVo {
+
+
+    @ApiModelProperty("分享人姓名")
+    private String username;
+
+    @ApiModelProperty("分享人头像")
+    private String avatar;
+
+    @ApiModelProperty("专属优惠 0:否 1:是")
+    private YesOrNoEnum discount = YesOrNoEnum.NO;
+
+    @ApiModelProperty("会员列表")
+    List<MemberPriceSettingsVo> list;
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public YesOrNoEnum getDiscount() {
+        return discount;
+    }
+
+    public void setDiscount(YesOrNoEnum discount) {
+        this.discount = discount;
+    }
+
+    public List<MemberPriceSettingsVo> getList() {
+        return list;
+    }
+
+    public void setList(List<MemberPriceSettingsVo> list) {
+        this.list = list;
+    }
+}

+ 23 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ShareProfitVo.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -28,6 +29,12 @@ public class ShareProfitVo {
     @ApiModelProperty("曲目: MUSIC,直播课 :LIVE,视频课:VIDEO ,会员 :VIP")
     private String type;
 
+    @ApiModelProperty("专属优惠 0:否 1:是")
+    private YesOrNoEnum discount;
+
+    @ApiModelProperty("活动id")
+    private Long activityId;
+
     @ApiModelProperty("乐谱信息")
     private MusicSheetDetailVo musicSheet;
 
@@ -40,10 +47,26 @@ public class ShareProfitVo {
     @ApiModelProperty("会员信息")
     private MemberPriceSettingsVo vip;
 
+    public Long getActivityId() {
+        return activityId;
+    }
+
+    public void setActivityId(Long activityId) {
+        this.activityId = activityId;
+    }
+
     public Long getTeacherId() {
         return teacherId;
     }
 
+    public YesOrNoEnum getDiscount() {
+        return discount;
+    }
+
+    public void setDiscount(YesOrNoEnum discount) {
+        this.discount = discount;
+    }
+
     public void setTeacherId(Long teacherId) {
         this.teacherId = teacherId;
     }

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

+ 22 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderDetailVo.java

@@ -36,6 +36,28 @@ public class UserOrderDetailVo extends UserOrderDetail {
     @ApiModelProperty(value = "分润用户编号")
     private Long recomUserId;
 
+    @ApiModelProperty("活动id")
+    private Long activityId;
+
+    @ApiModelProperty("活动奖品id")
+    private Long rewardId;
+
+    public Long getRewardId() {
+        return rewardId;
+    }
+
+    public void setRewardId(Long rewardId) {
+        this.rewardId = rewardId;
+    }
+
+    public Long getActivityId() {
+        return activityId;
+    }
+
+    public void setActivityId(Long activityId) {
+        this.activityId = activityId;
+    }
+
     public ClientEnum getOrderClient() {
         return orderClient;
     }

+ 66 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserRewardVo.java

@@ -1,10 +1,13 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.common.enums.RewardTypeEnum;
+import com.yonge.cooleshow.common.enums.UnitEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.io.Serializable;
 import java.util.Date;
 
 /**
@@ -12,7 +15,7 @@ import java.util.Date;
  * @Data: 2022-08-04 10:19:49
  */
 @ApiModel(value = "UserRewardVo对象", description = "获奖名单")
-public class UserRewardVo{
+public class UserRewardVo implements Serializable {
 
 
 	@ApiModelProperty("用户id")
@@ -35,6 +38,26 @@ public class UserRewardVo{
 	@ApiModelProperty("奖品名 逗号隔开")
 	private String rewardNames;
 
+	// 分享活动拓展信息
+	@ApiModelProperty("数量")
+	private Long amount;
+	@ApiModelProperty("购买内容")
+	private RewardTypeEnum rewardType;
+	@ApiModelProperty("单位 ")
+	private UnitEnum unit;
+	@ApiModelProperty("关联老师 ")
+	private String teacherName;
+	@ApiModelProperty("关联老师ID ")
+	private Long teacherId;
+
+	public Long getAmount() {
+		return amount;
+	}
+
+	public void setAmount(Long amount) {
+		this.amount = amount;
+	}
+
 	public Long getUserId() {
 		return userId;
 	}
@@ -82,4 +105,46 @@ public class UserRewardVo{
 	public void setRewardNames(String rewardNames) {
 		this.rewardNames = rewardNames;
 	}
+
+	public RewardTypeEnum getRewardType() {
+		return rewardType;
+	}
+
+	public void setRewardType(RewardTypeEnum rewardType) {
+		this.rewardType = rewardType;
+	}
+
+	public UnitEnum getUnit() {
+		return unit;
+	}
+
+	public void setUnit(UnitEnum unit) {
+		this.unit = unit;
+	}
+
+	public String getTeacherName() {
+		return teacherName;
+	}
+
+	public void setTeacherName(String teacherName) {
+		this.teacherName = teacherName;
+	}
+
+	public Long getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(Long teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public UserRewardVo teacherName(String teacherName) {
+		this.teacherName = teacherName;
+		return this;
+	}
+
+	public UserRewardVo teacherId(Long teacherId) {
+		this.teacherId = teacherId;
+		return this;
+	}
 }

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.valid.ListValue;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModel;
@@ -33,6 +34,16 @@ public class VideoLessonShelvesVo extends BaseEntity {
     @ApiModelProperty(value = "上下架操作人", hidden = true)
     private Long shelvesId;
 
+    private ClientEnum clientType;
+
+    public ClientEnum getClientType() {
+        return clientType;
+    }
+
+    public void setClientType(ClientEnum clientType) {
+        this.clientType = clientType;
+    }
+
     public Long getId() {
         return id;
     }

+ 47 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/activity/ActivityTeacherWrapper.java

@@ -0,0 +1,47 @@
+package com.yonge.cooleshow.biz.dal.vo.activity;
+
+import com.google.common.collect.Lists;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * 分享活动老师信息
+ * Created by Eric.Shang on 2022/8/29.
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ActivityTeacherWrapper implements Serializable {
+
+    private Long id;
+    private Long teacherId;
+    private String username;
+    private String realName;
+    private String phone;
+    private String subjectId;
+
+    private List<Long> subjectIds;
+    private String subjectName;
+
+    public List<Long> getSubjectIds() {
+        if (StringUtils.isNotEmpty(getSubjectId())) {
+
+            return Arrays.stream(getSubjectId().split(",")).map(Long::parseLong).collect(Collectors.toList());
+        }
+        return Optional.ofNullable(subjectIds).orElse(Lists.newArrayList());
+    }
+
+    public String getSubjectName() {
+        return Optional.ofNullable(subjectName).orElse("");
+    }
+}

+ 22 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/OrderCreateRes.java

@@ -33,9 +33,31 @@ public class OrderCreateRes {
     @ApiModelProperty("优惠金额 ")
     private BigDecimal couponAmount;
 
+    @ApiModelProperty("活动id")
+    private Long activityId;
+
+    @ApiModelProperty("奖品id")
+    private Long rewardId;
+
     @ApiModelProperty(value = "冗余字段,用于传递参数用")
     private Object bizParam;
 
+    public Long getRewardId() {
+        return rewardId;
+    }
+
+    public void setRewardId(Long rewardId) {
+        this.rewardId = rewardId;
+    }
+
+    public Long getActivityId() {
+        return activityId;
+    }
+
+    public void setActivityId(Long activityId) {
+        this.activityId = activityId;
+    }
+
     public Boolean getRes() {
         return res;
     }

+ 70 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationMapper.xml

@@ -5,6 +5,7 @@
         <result column="id_" property="id" />
         <result column="activity_id_" property="activityId" />
         <result column="music_sheet_id_" property="musicSheetId" />
+        <result column="resource_type_" property="resourceType" />
         <result column="create_time_" property="createTime" />
         <result column="create_by_" property="createBy" />
     </resultMap>
@@ -14,6 +15,7 @@
         t.id_ as id
         , t.activity_id_ as activityId
         , t.music_sheet_id_ as musicSheetId
+        , t.resource_type_ as resourceType
         , t.create_time_ as createTime
         , t.create_by_ as createBy
     </sql>
@@ -54,9 +56,9 @@
     </select>
 
     <insert id="addBatch">
-        insert into activity_evaluation (activity_id_,create_by_, music_sheet_id_) values
+        insert into activity_evaluation (activity_id_,create_by_, music_sheet_id_, resource_type_) values
         <foreach collection="musicSheetIds" item="item" separator="," index="index">
-            (#{activityId,jdbcType=BIGINT},#{userId,jdbcType=BIGINT},#{item,jdbcType=BIGINT})
+            (#{activityId,jdbcType=BIGINT},#{userId,jdbcType=BIGINT},#{item,jdbcType=BIGINT}, #{resourceType,jdbcType=VARCHAR})
         </foreach>
     </insert>
 
@@ -132,4 +134,70 @@
         </where>
         order by t.id_ desc
     </select>
+
+    <!--活动老师信息-->
+    <resultMap id="ActivityTeacherPageInfoResultMap" type="com.yonge.cooleshow.biz.dal.vo.activity.ActivityTeacherWrapper">
+        <result column="id_" jdbcType="BIGINT" property="id" />
+        <result column="real_name_" jdbcType="BIGINT" property="realName" />
+        <result column="username_" jdbcType="VARCHAR" property="username" />
+        <result column="phone_" jdbcType="VARCHAR" property="phone" />
+        <result column="subject_id_" jdbcType="VARCHAR" property="subjectId" />
+        <result column="teacher_id" jdbcType="BIGINT" property="teacherId" />
+    </resultMap>
+    <sql id="ActivityTeacherPageInfo_Column_List">
+        t1.id_ AS teacher_id, t1.real_name_, t1.username_, t1.phone_, t2.subject_id_, <if test="record.activityId != null"> t3.id_ AS id</if>
+    </sql>
+    <sql id="ActivityTeacherPageInfo_Condition_List">
+        <if test="record.id != null">
+            AND t1.id_ = #{record.id}
+        </if>
+        <if test="record.mobile != null">
+            AND t1.phone_ = #{record.mobile}
+        </if>
+        <if test="record.name != null">
+            AND (t1.real_name_ LIKE '%${record.name}%' OR t1.username_ LIKE '%${record.name}%')
+        </if>
+        <if test="record.lockFlag != null">
+            AND t1.lock_flag_ = #{record.lockFlag}
+        </if>
+        <if test="record.deleteFlag != null">
+            AND t1.del_flag_ = #{record.deleteFlag}
+        </if>
+        <if test="record.addType == 1">
+            AND t4.user_id IS NULL
+        </if>
+    </sql>
+    <sql id="ActivityTeacherNotIn_Condition_List">
+        <if test="record.activityType != null">
+            AND t1.activity_type_ = #{record.activityType}
+        </if>
+        <if test="record.activityState != null">
+            AND t1.activity_state_ = #{record.activityState}
+        </if>
+        <if test="record.resourceType != null">
+            AND t2.resource_type_ = #{record.resourceType})
+        </if>
+        <if test="record.startTime != null and record.endTime != null">
+            AND (unix_timestamp(t1.activity_start_) &lt;= #{record.startTime} AND #{record.startTime} &lt;= unix_timestamp(t1.activity_end_) OR unix_timestamp(t1.activity_start_) &lt;= #{record.endTime} AND #{record.endTime} &lt;= unix_timestamp(t1.activity_end_))
+        </if>
+    </sql>
+    <select id="selectActivityTeacherPageInfo" resultMap="ActivityTeacherPageInfoResultMap">
+        SELECT <include refid="ActivityTeacherPageInfo_Column_List" />
+        FROM sys_user t1 JOIN teacher t2 ON (t1.id_ = t2.user_id_ <if test="record.lockFlag !=null"> AND t2.lock_flag_ = #{record.lockFlag} </if> )
+        <choose>
+            <when test="record.addType == 1">
+                LEFT JOIN (SELECT t2.music_sheet_id_ AS user_id FROM activity_plan t1 JOIN activity_evaluation t2 ON (t1.id_ = t2.activity_id_ <include refid="ActivityTeacherNotIn_Condition_List"/> ) t4 ON (t4.user_id = t1.id_)
+            </when>
+            <otherwise>
+                <if test="record.activityId != null"> JOIN activity_evaluation t3 ON (t1.id_ = t3.music_sheet_id_ AND t3.activity_id_ = #{record.activityId}) </if>
+            </otherwise>
+        </choose>
+        <where>
+            <include refid="ActivityTeacherPageInfo_Condition_List" />
+            <if test="record.subjectIdList != null">
+                AND <foreach collection="record.subjectIdList" separator="or" item="item" open="(" close=")"> FIND_IN_SET(#{item}, t2.subject_id_) </foreach>
+            </if>
+        </where>
+    </select>
+    <!--活动老师信息-->
 </mapper>

+ 29 - 8
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityPlanMapper.xml

@@ -42,6 +42,7 @@
         , t.registration_method_ as registrationMethod
         , t.registration_price_ as registrationPrice
         , t.share_rate_ as shareRate
+        , t.share_type_ as shareType
         , t.draft_flag_ as draftFlag
         , if(t.activity_state_ = 1, 1, 0) as activityState
         , t.create_time_ as createTime
@@ -72,14 +73,17 @@
             <if test="param.draftFlag != null">
                 and t.draft_flag_ = #{param.draftFlag}
             </if>
-            <if test="param.activityState != null">
-                <if test="param.activityState == 0">
-                    and (t.activity_state_ = 0 or t.activity_state_ = 2)
-                </if>
-                <if test="param.activityState == 1">
-                    and t.activity_state_ = 1
-                </if>
-            </if>
+            <choose>
+                <when test="param.activityState != null">
+                    <if test="param.activityState == 0">
+                        and (t.activity_state_ = 0 or t.activity_state_ = 2)
+                    </if>
+                    <if test="param.activityState == 1">
+                        and t.activity_state_ = 1
+                    </if>
+                </when>
+                <otherwise> AND t.activity_start_ &gt;= -1 </otherwise>
+            </choose>
             <if test="param.startTime !=null">
                 and t.activity_start_ &gt;= #{param.startTime}
             </if>
@@ -110,4 +114,21 @@
             or (t.activity_end_ &lt;= now() and activity_state_ = 1)
         )
     </select>
+
+	<select id="selectActivityShare" resultType="com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo">
+        select
+        <include refid="baseColumns"/>
+        from activity_plan t
+        left join activity_evaluation ae on t.id_ = ae.activity_id_
+        <where>
+            activity_state_ = 1 and activity_start_ &lt;= now() and activity_end_ &gt;= now() and activity_type_ = 'SHARE'
+            <if test="type != null and type != ''">
+                and #{type} = t.share_type_
+            </if>
+            <if test="userId != null">
+                and ae.music_sheet_id_ = #{userId}
+                and ae.resource_type_ = 'TEACHER'
+            </if>
+        </where>
+    </select>
 </mapper>

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

@@ -16,7 +16,7 @@
         , t.reward_id_ as rewardId
         , t.reward_num_ as rewardNum
         , t.create_time_ as createTime
-        </sql> 
+        </sql>
     
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.ActivityPlanRewardVo">
         SELECT
@@ -56,6 +56,7 @@
         , ar.create_by_ as "activityReward.createBy"
         , ar.update_time_ as "activityReward.updateTime"
         , ar.update_by_ as "activityReward.updateBy"
+        , ar.discount_price_ as "activityReward.discountPrice"
     </sql>
 
     <select id="queryActivityPlanReward" resultType="com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto">

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

@@ -17,6 +17,7 @@
         <result column="create_by_" property="createBy" />
         <result column="update_time_" property="updateTime" />
         <result column="update_by_" property="updateBy" />
+        <result column="discount_price_" property="discountPrice" />
     </resultMap>
 
     <!-- 表字段 -->
@@ -36,6 +37,7 @@
         , t.create_by_ as createBy
         , t.update_time_ as updateTime
         , t.update_by_ as updateBy
+        , t.discount_price_   as discountPrice
     </sql>
 
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.ActivityRewardVo">

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

@@ -40,6 +40,9 @@
             su.username_ as username,
             su.phone_ as phone,
             min(t.create_time_) as createTime,
+            COUNT(DISTINCT t.id_) AS amount,
+            ar.reward_type_ AS rewardType,
+            ar.unit_ AS unit,
             group_concat(if(t.grant_flag_ = 1,ar.reward_name_,null)) as rewardNames
         FROM activity_user_reward t
         left join activity_reward ar on ar.id_ = t.reward_id_
@@ -65,4 +68,13 @@
         </where>
         GROUP BY t.user_id_,t.activity_id_
     </select>
+
+    <!--分享活动关联老师-->
+    <select id="selectActivityShareTeacher" resultType="com.yonge.cooleshow.biz.dal.vo.UserRewardVo">
+        SELECT t1.id_ AS teacherId, t1.username_ AS username, t1.real_name_ AS realName, t3.user_id_ AS userId
+        FROM sys_user t1 JOIN activity_evaluation t2 ON t1.id_ = t2.music_sheet_id_ JOIN activity_evaluation_record t3 ON t2.id = t3.evaluation_id_
+        WHERE t3.activity_id_ = #{activityId} AND t3.user_id_ =  IN (<foreach collection="userIds" separator="," item="item">#{item}</foreach>)
+    </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>

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

@@ -298,19 +298,19 @@
         where find_in_set(s.id_,t.music_subject_)  and s.del_flag_ = 0) as subjectNames
         <if test="param.studentId != null">
             ,if(mf.id_ is not null,1,0) as favorite
-            ,case when mspr.id_ is not null then 1
-                when t.charge_type_ = 'FREE' then 1
-                else 0 end as play
+<!--            ,case when mspr.id_ is not null then 1-->
+<!--                when t.charge_type_ = 'FREE' then 1-->
+<!--                else 0 end as play-->
         </if>
         from music_sheet t
         left join sys_user su on t.create_by_ = su.id_
         left join (select count(1) as num,mf.music_sheet_id_
             from music_favorite mf group by mf.music_sheet_id_) t2 on t2.music_sheet_id_ = t.id_
         <if test="param.studentId != null">
-            left join music_sheet_purchase_record mspr
-                on mspr.music_sheet_id_ = t.id_
-                and mspr.student_id_ = #{param.studentId}
-                and order_status_ = 'PAID'
+<!--            left join music_sheet_purchase_record mspr-->
+<!--                on mspr.music_sheet_id_ = t.id_-->
+<!--                and mspr.student_id_ = #{param.studentId}-->
+<!--                and order_status_ = 'PAID'-->
             left join music_favorite mf on t.id_ = mf.music_sheet_id_ and mf.user_id_ = #{param.studentId}
         </if>
         <where>

+ 18 - 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">
@@ -239,4 +247,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 	
+    </select>
 </mapper>

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

@@ -6,6 +6,8 @@
         <result column="order_no_" property="orderNo"/>
         <result column="user_id_" property="userId"/>
         <result column="recom_user_id_" property="recomUserId"/>
+        <result column="activity_id_" property="activityId"/>
+        <result column="reward_id_" property="rewardId"/>
         <result column="order_name_" property="orderName"/>
         <result column="order_client_" property="orderClient"/>
         <result column="order_type_" property="orderType"/>
@@ -29,6 +31,8 @@
         , t.order_no_ as orderNo
         , t.user_id_ as userId
         , t.recom_user_id_ as recomUserId
+        , t.activity_id_ as activityId
+        , t.reward_id_ as rewardId
         , t.order_name_ as orderName
         , t.order_client_ as orderClient
         , t.order_type_ as orderType

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

@@ -100,7 +100,7 @@
 				</if>
 			</where>
 	</select>
-	<insert id="insertVideoLesson" parameterType="java.util.List">
+	<insert id="insertVideoLesson" useGeneratedKeys="true" keyProperty="id" parameterType="java.util.List">
 		INSERT INTO video_lesson_group_detail (video_lesson_group_id_,video_title_,video_content_,video_url_,cover_url_,teacher_id_)
 		VALUES
 		<foreach collection="list" item="item" index="index" separator=",">

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

@@ -319,6 +319,60 @@
 		</where>
 		ORDER BY g.create_time_ DESC
 	</select>
+	
+	<select id="queryMyLessonGroup" resultType="com.yonge.cooleshow.biz.dal.vo.LessonGroupVo">
+		SELECT
+			g.video_lesson_group_id_ AS id,
+			g.lesson_name_ AS lessonName,
+			g.lesson_subject_ AS lessonSubject,
+			s.name_ AS lessonSubjectName,
+			g.lesson_desc_ AS lessonDesc,
+			g.lesson_price_ AS lessonPrice,
+			g.lesson_cover_url_ AS lessonCoverUrl,
+			g.lesson_count_ AS lessonCount,
+			g.teacher_id_ AS teacherId,
+			u.username_ AS userName,
+			u.real_name_ AS realName,
+			u.avatar_ AS avatar,
+			g.audit_version_ as auditVersion,
+			(SELECT COUNT(1) FROM video_lesson_purchase_record r WHERE r.video_lesson_group_id_=g.video_lesson_group_id_ AND r.order_status_='PAID') AS countStudent
+		FROM video_lesson_purchase_record pr
+		left join (
+		SELECT gg.* FROM video_lesson_auth_record ar left join video_lesson_group_log gg on ar.video_group_id_ = gg.video_lesson_group_id_ and ar.version_ = gg.version_
+		where ar.id_ in (select max(id_) from video_lesson_auth_record where audit_status_ = 'PASS' group by video_group_id_)
+		 ) g on g.video_lesson_group_id_ = pr.video_lesson_group_id_
+		LEFT JOIN sys_user u ON g.teacher_id_=u.id_
+		LEFT JOIN `subject` s ON g.lesson_subject_ = s.id_
+		<where>
+			AND  u.del_flag_ = 0
+			<if test="null != param.search and '' != param.search">
+				AND (
+				u.username_ LIKE CONCAT('%', #{param.search}, '%') OR
+				g.lesson_name_ LIKE CONCAT('%', #{param.search}, '%')
+				)
+			</if>
+			<if test="param.shelvesFlag !=null">
+				AND g.shelves_flag_ = #{param.shelvesFlag}
+			</if>
+			<if test="param.auditStatus !=null">
+				AND g.audit_status_ = #{param.auditStatus}
+			</if>
+			<if	test="param.studentId != null">
+				AND pr.student_id_ = #{param.studentId}
+			</if>
+			<if	test="param.teacherId != null">
+				AND g.teacher_id_ = #{param.teacherId}
+			</if>
+			<if test="param.auditVersion != null">
+				AND g.audit_version_ = #{param.auditVersion}
+			</if>
+			<if test="param.lessonSubject != null">
+				AND s.id_ = #{param.lessonSubject}
+			</if>
+		</where>
+		ORDER BY g.create_time_ DESC
+	</select>
+	
 	<select id="queryGroupList" resultType="com.yonge.cooleshow.biz.dal.vo.VideoLessonAuthGroup">
 		SELECT
 			g.id_ AS id,

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

@@ -10,7 +10,7 @@
 		 <result column="purchase_time_" jdbcType="TIMESTAMP" property="purchaseTime" />
 		 <result column="pay_money_" jdbcType="DECIMAL" property="payMoney" />
 		 <result column="order_no_" jdbcType="VARCHAR" property="orderNo" />
-		 <result column="order_status_" jdbcType="TINYINT" property="orderStatus" />
+		 <result column="order_status_" jdbcType="VARCHAR" property="orderStatus" />
 	</resultMap>
 
 	<sql id="Base_Column_List">
@@ -29,4 +29,8 @@
 	<update id="updateStatus" parameterType="java.lang.String">
 		UPDATE video_lesson_purchase_record SET order_status_=#{status} WHERE order_no_=#{orderNo}
 	</update>
+	
+	<select id="queryByVideoLessonGroupId" resultMap="BaseResultMap">
+		SELECT * FROM video_lesson_purchase_record WHERE video_lesson_group_id_ = #{videoLessonGroupId} and order_status_  = #{orderStatus}
+	</select>
 </mapper>

+ 4 - 3
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MemberPriceSettingsController.java

@@ -5,6 +5,7 @@ import com.yonge.cooleshow.biz.dal.entity.SysConfig;
 import com.yonge.cooleshow.biz.dal.service.MemberPriceSettingsService;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.vo.MemberPriceSettingsVo;
+import com.yonge.cooleshow.biz.dal.vo.MemberPriceVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
@@ -36,9 +37,9 @@ public class MemberPriceSettingsController extends BaseController {
 
 	@PostMapping("/list")
 	@ApiOperation(value = "查询列表")
-	public HttpResponseResult<List<MemberPriceSettingsVo>> list(@RequestBody MemberPriceSettingsSearch query) {
-		List<MemberPriceSettingsVo> list = memberPriceSettingsService.selectList(query);
-		return succeed(list);
+	public HttpResponseResult<MemberPriceVo> list(@RequestBody MemberPriceSettingsSearch query) {
+		MemberPriceVo memberPriceVo = memberPriceSettingsService.getVipShare(query);
+		return succeed(memberPriceVo);
 	}
 
 	@PostMapping("/vipPermissions")

+ 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(5);
+        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() > 4) {
+            musicAlbumVos1 = musicAlbumVos1.subList(0,4);
+        }
+        albumDetailVo.setRelatedMusicAlbum(musicAlbumVos1);
         return succeed(albumDetailVo);
     }
 

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

@@ -1,35 +1,46 @@
 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.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 +81,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 +265,12 @@ public class MusicSheetController extends BaseController {
         return sysUserFeignService.realNameAuth(realNameAuthDto);
     }
 
-
+    @ApiOperation(value = "关联的曲目列表")
+    @GetMapping(value="/queryRelatedList")
+    public HttpResponseResult<PageInfo<MusicSheetVo>> queryRelatedList(Long albumId, Long musicSheetId) {
+    	
+    	IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.queryRelatedList(PageUtil.getPage(new QueryInfo()),albumId, musicSheetId);
+        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());
+    }
 }

+ 42 - 10
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/OpenClient.java

@@ -1,10 +1,36 @@
 package com.yonge.cooleshow.student.controller.open;
 
+import com.yonge.cooleshow.biz.dal.vo.CheckVo;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+
+import java.util.Map;
+
+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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
 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.*;
+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;
@@ -12,12 +38,6 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.thirdparty.entity.UploadSign;
 import com.yonge.toolset.utils.string.ValueUtil;
-import io.swagger.annotations.*;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-import java.util.Map;
 
 
 @RestController
@@ -37,6 +57,10 @@ public class OpenClient extends BaseController {
     @Autowired
     private StudentService studentService;
 
+
+    @Autowired
+    private ActivityPlanService activityPlanService;
+
     @ApiOperation(value = "查询老师头像昵称信息")
     @GetMapping("/getTeacher")
     public HttpResponseResult<TeacherVo> getTeacher(@ApiParam(value = "老师ID", required = true) @RequestParam("userId") Long userId) {
@@ -68,10 +92,6 @@ public class OpenClient extends BaseController {
 
 
 
-    @Autowired
-    private ActivityPlanService activityPlanService;
-
-
     @ApiOperation(value = "活动信息", notes = "活动id")
     @PostMapping(value = "/activity/info/{id}")
     public HttpResponseResult<MusicActivityVo> getDetail(@PathVariable Long id) {
@@ -111,4 +131,16 @@ public class OpenClient extends BaseController {
     public HttpResponseResult<PostObjectFormFields> getUploadSign(@RequestBody UploadSign uploadSign) {
         return succeed(uploadFileService.getUploadSign(uploadSign));
     }
+
+    @ApiOperation(value = "检查活动状态", notes = "活动id")
+    @PostMapping(value = "/activity/state/{id}")
+    public HttpResponseResult<CheckVo> state(@PathVariable Long id) {
+        // SysUser user = sysUserFeignService.queryUserInfo();
+
+        YesOrNoEnum state = activityPlanService.state(id);
+
+        CheckVo checkVo = new CheckVo();
+        checkVo.setCheck(state);
+        return succeed(checkVo);
+    }
 }

+ 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(5);
+        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() > 4) {
+            musicAlbumVos1 = musicAlbumVos1.subList(0,4);
+        }
+        albumDetailVo.setRelatedMusicAlbum(musicAlbumVos1);
         return succeed(albumDetailVo);
     }
 

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

@@ -1,10 +1,25 @@
 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.StudentMusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
@@ -20,16 +35,9 @@ 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 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 控制层
@@ -186,6 +194,7 @@ public class MusicSheetController extends BaseController {
         search.setStudentId(sysUser.getId());
         // search.setState(YesOrNoEnum.YES);
         search.setAuditStatus(AuthStatusEnum.PASS);
+        search.setUserType(ClientEnum.TEACHER);
         IPage<MusicSheetVo> sheetVoIPage = musicSheetService.myMusic(PageUtil.getPage(search),search);
         return succeed(PageUtil.pageInfo(sheetVoIPage));
     }
@@ -211,6 +220,12 @@ public class MusicSheetController extends BaseController {
         return succeed(musicSheetService.countTeacherMusicSheet(sysUser));
     }
 
-
+    @ApiOperation(value = "关联的曲目列表")
+    @GetMapping(value="/queryRelatedList")
+    public HttpResponseResult<PageInfo<MusicSheetVo>> queryRelatedList(Long albumId, Long musicSheetId) {
+    	
+    	IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.queryRelatedList(PageUtil.getPage(new QueryInfo()),albumId, musicSheetId);
+        return succeed(PageUtil.pageInfo(musicSheetVoIPage));
+    }
 
 }

+ 1 - 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")

+ 3 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/VideoLessonGroupController.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.teacher.controller;
 
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
@@ -193,6 +194,8 @@ public class VideoLessonGroupController extends BaseController {
 
         shelvesVo.setShelvesId(user.getId());
         shelvesVo.setShelvesTime(new Date());
+
+        shelvesVo.setClientType(ClientEnum.TEACHER);
         videoLessonGroupService.updateShelves(shelvesVo);
         return succeed();
     }

+ 19 - 6
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/open/OpenShareController.java

@@ -4,10 +4,13 @@ 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.service.*;
+import com.yonge.cooleshow.biz.dal.vo.CheckVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicActivityVo;
 import com.yonge.cooleshow.biz.dal.vo.ShareProfitVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.ActivityShareEnum;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
@@ -35,6 +38,9 @@ public class OpenShareController extends BaseController {
     @Autowired
     private MemberPriceSettingsService memberPriceSettingsService;
 
+    @Autowired
+    private ActivityPlanService activityPlanService;
+
     /**
      * 服务对象
      */
@@ -86,12 +92,6 @@ public class OpenShareController extends BaseController {
         return succeed(memberPriceSettingsService.shareVipProfit(sysUser,param.getBizId()));
     }
 
-
-
-    @Autowired
-    private ActivityPlanService activityPlanService;
-
-
     @ApiOperation(value = "老师活动分享", notes = "活动id")
     @PostMapping(value = "/activity/info/{id}")
     public HttpResponseResult<MusicActivityVo> getDetail(@PathVariable Long id) {
@@ -101,4 +101,17 @@ public class OpenShareController extends BaseController {
 
         return succeed(activityVo);
     }
+
+
+    @ApiOperation(value = "检查活动状态", notes = "活动id")
+    @PostMapping(value = "/activity/state/{id}")
+    public HttpResponseResult<CheckVo> state(@PathVariable Long id) {
+        // SysUser user = sysUserFeignService.queryUserInfo();
+
+        YesOrNoEnum state = activityPlanService.state(id);
+
+        CheckVo checkVo = new CheckVo();
+        checkVo.setCheck(state);
+        return succeed(checkVo);
+    }
 }

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

@@ -74,8 +74,8 @@ public class MusicSheetController extends BaseController {
         }
         StudentMusicSheetSearch search = new StudentMusicSheetSearch();
         search.setStudentId(sysUser.getId());
-        search.setState(YesOrNoEnum.YES);
         search.setAuditStatus(AuthStatusEnum.PASS);
+        search.setUserType(ClientEnum.STUDENT);
         IPage<MusicSheetVo> sheetVoIPage = musicSheetService.myMusic(PageUtil.getPage(query),search);
         return succeed(PageUtil.pageInfo(sheetVoIPage));
     }

+ 3 - 0
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/VideoLessonGroupController.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.website.controller;
 
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
@@ -55,6 +56,8 @@ public class VideoLessonGroupController extends BaseController {
 
         shelvesVo.setShelvesId(user.getId());
         shelvesVo.setShelvesTime(new Date());
+
+        shelvesVo.setClientType(ClientEnum.WEBSITE);
         videoLessonGroupService.updateShelves(shelvesVo);
         return succeed();
     }

+ 2 - 1
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenClient.java

@@ -16,14 +16,15 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 
-
 @RestController
 @RequestMapping("/open")
 @Api(value = "开放权限接口", tags = "开放权限接口")
 public class OpenClient extends BaseController {
+
     @Autowired
     private UploadFileService uploadFileService;
 
+
     @ApiImplicitParams({
             @ApiImplicitParam(name = "bucketName", dataType = "String", value = "为空时默认使用daya"),
             @ApiImplicitParam(name = "fileName", dataType = "String", value = "要上传的文件名称,不包含路径信息"),

+ 6 - 0
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenVideoGroupController.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.website.controller.open;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonSearch;
+import com.yonge.cooleshow.biz.dal.enums.AuditStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupDetailService;
@@ -14,12 +15,15 @@ import com.yonge.cooleshow.common.controller.BaseController;
 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.web.bind.annotation.*;
 
 import javax.validation.constraints.NotNull;
+
 import java.util.List;
 
 /**
@@ -82,6 +86,8 @@ public class OpenVideoGroupController extends BaseController {
     @PostMapping("/otherLesson")
     public HttpResponseResult<List<VideoLessonGroupVo>> otherLesson(@RequestBody VideoLessonGroupSearch query) {
 
+    	query.setAuditStatus(AuthStatusEnum.PASS.getCode());
+    	query.setShelvesFlag(1);
         // 检查app版本
         query.setAuditVersion(appVersionInfoService.getAppAuditVersion(query.getPlatform(),query.getVersion()));
         return succeed(videoLessonGroupService.selectPage(query));

+ 12 - 0
pom.xml

@@ -280,6 +280,18 @@
 				</exclusion>
 			</exclusions>
 		</dependency>
+
+		<!--增加lombok编译-->
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-api</artifactId>
+			<scope>provided</scope>
+		</dependency>
 	</dependencies>
 
 	<build>

+ 17 - 0
toolset/toolset-mybatis/src/main/java/com/yonge/toolset/mybatis/support/PageUtil.java

@@ -8,6 +8,7 @@ import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.base.util.StringUtil;
 import org.springframework.beans.BeanUtils;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
@@ -109,6 +110,22 @@ public class PageUtil {
         return resultPage;
     }
 
+    /**
+     * 将mybatisPlus的分页模型 转换为本项目的分页模型
+     * @param wrapper IPage<?>
+     * @param responses List<T>
+     * @return PageInfo<T>
+     * @param <T> 返回的类
+     */
+    public static<T> PageInfo<T> getPageInfo(IPage<?> wrapper, List<T> responses) {
+
+        PageInfo<T> pageInfo = new PageInfo<>((int) wrapper.getCurrent(), (int) wrapper.getSize());
+
+        pageInfo.setRows(responses);
+        pageInfo.setLimit((int) wrapper.getSize());
+        pageInfo.setTotal((int) wrapper.getTotal());
+        return pageInfo;
+    }
 
     /**
      * 获取Map中的关键字获取分页数据