浏览代码

Merge branch 'ui_20220829' into online

yonge 3 年之前
父节点
当前提交
e2ae56c510
共有 30 个文件被更改,包括 619 次插入131 次删除
  1. 5 3
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/PmsPortalProductServiceImpl.java
  2. 1 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java
  3. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/LiveRoomDao.java
  4. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherDao.java
  5. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumDetailSearch.java
  6. 26 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicSheetRelatedQueryInfo.java
  7. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MusicSheetType.java
  8. 11 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomService.java
  9. 26 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  10. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java
  11. 76 26
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java
  12. 26 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  13. 12 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  14. 46 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/HotTeacherVo.java
  15. 72 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherLivingInfoVo.java
  16. 7 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/LiveRoomMapper.xml
  17. 3 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml
  18. 5 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  19. 1 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml
  20. 19 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  21. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherStyleVideoMapper.xml
  22. 24 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicAlbumController.java
  23. 55 29
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java
  24. 25 8
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentLiveRoomController.java
  25. 26 12
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/TeacherController.java
  26. 35 8
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicAlbumController.java
  27. 24 10
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java
  28. 1 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherLiveRoomController.java
  29. 29 13
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/MusicSheetController.java
  30. 5 5
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenMusicAlbumController.java

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@@ -145,6 +145,29 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     }
 
     @Override
+	public IPage<MusicSheetVo> queryRelatedList(IPage<MusicSheetVo> page, Long albumId, Long musicSheetId) {
+
+		if (albumId == null) {
+			// 查询专辑下的所有曲目
+
+			MusicSheet musicSheet = baseMapper.selectById(musicSheetId);
+
+			if (musicSheet != null) {
+				MusicAlbumDetailSearch query = new MusicAlbumDetailSearch();
+				query.setMusicTagIds(musicSheet.getMusicTag());
+				return page.setRecords(baseMapper.selectPage(page, query));
+			}
+		} else {
+			// 查询带有当前曲目标签的所有曲目
+			MusicAlbumDetailSearch query = new MusicAlbumDetailSearch();
+			query.setId(albumId);
+			query.setType(2);
+			return page.setRecords(baseMapper.selectAlbumDetailPage(page, query));
+		}
+		return null;
+	}
+
+	@Override
     @Transactional(rollbackFor = Exception.class)
     public boolean state(Long id, String reason, ClientEnum client) {
         MusicSheet musicSheet = this.getById(id);
@@ -337,7 +360,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     public IPage<MusicSheetVo> practiceMusic(IPage<MusicSheetVo> page, StudentMusicSheetSearch query) {
         // 预计最近练习表数据量会很多
         // 先找到最近练习的曲目id 在根据曲目id进行精确查找
-        IPage<Long> practiceMusicIdPage = musicSheetPracticeRecordService.selectPracticeMusic(query, page.getPages(), page.getSize());
+        IPage<Long> practiceMusicIdPage = musicSheetPracticeRecordService.selectPracticeMusic(query, page.getCurrent(), page.getSize());
         List<Long> practiceMusicIdList = practiceMusicIdPage.getRecords();
         if (CollectionUtils.isEmpty(practiceMusicIdList)) {
             page.setRecords(new ArrayList<>());
@@ -1019,8 +1042,8 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
                             .eq(MusicSheet::getTopFlag, YesOrNoEnum.YES)
                             .eq(MusicSheet::getState, YesOrNoEnum.YES)
                             .count();
-        if (count >=10) {
-            throw new BizException("首页推荐数量达到上限,请先取消其他曲谱推荐");
+        if (count >=20) {
+            throw new BizException("首页推荐数量达到[20]上限,请先取消其他曲谱推荐");
         }
         musicSheet.setTopFlag(YesOrNoEnum.YES);
         return this.saveOrUpdate(musicSheet);

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

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

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

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

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

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

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

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

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

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

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

@@ -130,6 +130,7 @@
                 and u.del_flag_ = #{param.delFlag}
             </if>
         </where>
+        order by t.create_time_ desc
     </select>
 
     <select id="querySubject" resultMap="com.yonge.cooleshow.biz.dal.dao.SubjectDao.Subject">

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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