Browse Source

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

yonge 3 years ago
parent
commit
2cd4cc1db8
23 changed files with 511 additions and 9 deletions
  1. 1 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/controller/BaseController.java
  2. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityEvaluationRecordDao.java
  3. 30 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/LiveBroadcastRoomMemberDao.java
  4. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/LiveBroadcastRoomMemberDto.java
  5. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/LiveBroadcastRoomMemberSearch.java
  6. 103 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/LiveBroadcastRoomMember.java
  7. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/RoomInfoCache.java
  8. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationRecordService.java
  9. 43 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveBroadcastRoomMemberService.java
  10. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomService.java
  11. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationRecordServiceImpl.java
  12. 41 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityRegistrationServiceImpl.java
  13. 46 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveBroadcastRoomMemberServiceImpl.java
  14. 37 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java
  15. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  16. 32 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityRegistrationVo.java
  17. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveBroadcastRoomMemberVo.java
  18. 27 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationRecordMapper.xml
  19. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  20. 37 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/LiveBroadcastRoomMemberMapper.xml
  21. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml
  22. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml
  23. 9 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherLiveRoomController.java

+ 1 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/controller/BaseController.java

@@ -154,7 +154,7 @@ public class BaseController {
         mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
         mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
         byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
         byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
         String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
         String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
-        StringBuffer sb = new StringBuffer("https://oapi.dingtalk.com/robot/send?access_token=39d0cd9f95e52b2750c37d6b064bcfa7930e37a760711f7790f52e1822e1b9df");
+        StringBuffer sb = new StringBuffer("https://oapi.dingtalk.com/robot/send?access_token=7cc2fe3178ce2432d9fef9316c9b21ff7ae9283af2d3a5acc2d5a8cf29f19fe6&timestamp=");
         sb.append(timestamp).append("&sign=").append(sign);
         sb.append(timestamp).append("&sign=").append(sign);
         return sb.toString();
         return sb.toString();
     }
     }

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

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

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

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

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

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

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

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

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

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

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

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

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

@@ -81,4 +81,13 @@ public interface ActivityEvaluationRecordService extends IService<ActivityEvalua
 	 * @param resourceType 资源类型
 	 * @param resourceType 资源类型
 	 */
 	 */
     void saveActivityRecord(Long activityId, Long userId, Long resourceId, ActivityResourceEnum resourceType);
     void saveActivityRecord(Long activityId, Long userId, Long resourceId, ActivityResourceEnum resourceType);
+
+	/**
+	 * 用户活动最高排名信息
+	 * @param activityId 活动ID
+	 * @param userIds 用户ID
+	 * @return List<ActivityEvaluationRecord>
+	 */
+	List<ActivityEvaluationRecord> queryActivityUserHighestRankingInfo(Long activityId, List<Long> userIds);
+
 }
 }

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

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

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

@@ -129,5 +129,12 @@ public interface LiveRoomService extends IService<LiveRoom> {
      */
      */
     List<TeacherLivingInfoVo> queryTeacherLivingList();
     List<TeacherLivingInfoVo> queryTeacherLivingList();
 
 
+    /**
+     * 设置是否连麦
+     *
+     * @param roomUid 房间号
+     * @param whetherMic 是否连麦 0: 是 1:否
+     */
+    void whetherMic(String roomUid, Integer whetherMic);
 }
 }
 
 

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

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

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

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

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

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

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

@@ -30,6 +30,26 @@ import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dao.LiveRoomDao;
+import com.yonge.cooleshow.biz.dal.entity.*;
+import com.yonge.cooleshow.biz.dal.enums.*;
+import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.support.IMHelper;
+import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.mybatis.support.PageUtil;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import com.yonge.toolset.utils.date.DateUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RBucket;
 import org.redisson.api.RBucket;
@@ -121,6 +141,8 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     @Autowired
     @Autowired
     private SysMessageService sysMessageService;
     private SysMessageService sysMessageService;
 
 
+    @Autowired
+    private LiveBroadcastRoomMemberService liveBroadcastRoomMemberService;
     /**
     /**
      * 生成房间UID
      * 生成房间UID
      *
      *
@@ -643,6 +665,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             if (!onlineUserInfo.isExists()) {
             if (!onlineUserInfo.isExists()) {
                 return;
                 return;
             }
             }
+            liveBroadcastRoomMemberService.saveRecord(roomUid,userId, InOrOutEnum.OUT, YesOrNoEnum.NO);
             //从在线人员列表删除该人员
             //从在线人员列表删除该人员
             onlineUserInfo.fastRemove(userId);
             onlineUserInfo.fastRemove(userId);
             //学员退出 写学生考勤表
             //学员退出 写学生考勤表
@@ -771,6 +794,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         Date now = new Date();
         Date now = new Date();
         roomInfo.setSpeakerState(0);
         roomInfo.setSpeakerState(0);
         roomInfo.setJoinRoomTime(now);
         roomInfo.setJoinRoomTime(now);
+        liveBroadcastRoomMemberService.saveRecord(roomUid, roomInfo.getSpeakerId(), InOrOutEnum.IN, YesOrNoEnum.NO);
         //查询老师是否有进入过,没有则写老师考勤表的进入时间
         //查询老师是否有进入过,没有则写老师考勤表的进入时间
         this.setTeacherAttendance(roomInfo.getSpeakerId(), roomInfo.getCourseGroupId(), roomInfo.getCourseId());
         this.setTeacherAttendance(roomInfo.getSpeakerId(), roomInfo.getCourseGroupId(), roomInfo.getCourseId());
         //记录当前用户对应的房间uid
         //记录当前用户对应的房间uid
@@ -796,6 +820,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         RMap<Long, String> roomTotalUser = this.getTotalUserCache(roomUid);
         RMap<Long, String> roomTotalUser = this.getTotalUserCache(roomUid);
         //判断是否第一次进房间
         //判断是否第一次进房间
         RoomUserInfoCache userInfo;
         RoomUserInfoCache userInfo;
+        liveBroadcastRoomMemberService.saveRecord(roomUid,userId, InOrOutEnum.IN, YesOrNoEnum.YES);
         if (roomTotalUser.containsKey(userId)) {
         if (roomTotalUser.containsKey(userId)) {
             //多次进入更新动态进入时间
             //多次进入更新动态进入时间
             userInfo = JSONObject.toJavaObject(JSONObject.parseObject(roomTotalUser.get(userId)), RoomUserInfoCache.class);
             userInfo = JSONObject.toJavaObject(JSONObject.parseObject(roomTotalUser.get(userId)), RoomUserInfoCache.class);
@@ -1119,5 +1144,17 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
 	public List<TeacherLivingInfoVo> queryTeacherLivingList() {
 	public List<TeacherLivingInfoVo> queryTeacherLivingList() {
 		return baseMapper.queryTeacherLivingList();
 		return baseMapper.queryTeacherLivingList();
 	}
 	}
+    @Override
+    public void whetherMic(String roomUid, Integer whetherMic) {
+        //校验房间是否存在
+        RBucket<RoomInfoCache> roomInfoCache = getLiveRoomInfo(roomUid);
+        if (!roomInfoCache.isExists()) {
+            log.error("teacherCheckRoomInfo>>>live not start  roomUid: {} ", roomUid);
+            throw new BizException("直播还未开始!");
+        }
+        RoomInfoCache roomInfo = roomInfoCache.get();
+        roomInfo.setWhether_mic(whetherMic);
+        roomInfoCache.set(roomInfo);
+    }
 }
 }
 
 

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

@@ -294,6 +294,12 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
                 }
                 }
             }
             }
         } else if (ChargeTypeEnum.VIP.getCode().equals(detail.getChargeType().getCode())) {
         } else if (ChargeTypeEnum.VIP.getCode().equals(detail.getChargeType().getCode())) {
+            // 先判断是否购买过
+            MusicSheetPurchaseRecord musicSheetPurchaseRecord = musicSheetPurchaseRecordService.checkPurchase(
+                    studentId, detail.getId(), userType);
+            if (musicSheetPurchaseRecord != null) {
+                detail.setPlay(YesOrNoEnum.YES);
+            } else
             // 会员 判断是否为会员, 会员可播放
             // 会员 判断是否为会员, 会员可播放
             if (userType.equals(ClientEnum.STUDENT)) {
             if (userType.equals(ClientEnum.STUDENT)) {
                 StudentVo studentVo = studentService.detail(studentId);
                 StudentVo studentVo = studentService.detail(studentId);

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

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

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

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

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

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

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

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

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

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.yonge.cooleshow.biz.dal.dao.LiveBroadcastRoomMemberDao">
+	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.LiveBroadcastRoomMember">
+            <result column="id_" property="id" />
+	        <result column="room_uid_" property="roomUid" />
+	        <result column="user_id_" property="userId" />
+	        <result column="join_time_" property="joinTime" />
+	        <result column="type_" property="type" />
+	        <result column="speaker_" property="speaker" />
+	        <result column="client_ip_" property="clientIp" />
+		</resultMap>
+    
+    <!-- 表字段 -->
+    <sql id="baseColumns">
+         t.id_ as id
+        , t.room_uid_ as roomUid
+        , t.user_id_ as userId
+        , t.join_time_ as joinTime
+        , t.type_ as type
+        , t.speaker_ as speaker
+        , t.client_ip_ as clientIp
+        </sql>
+    
+    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.LiveBroadcastRoomMemberVo">
+        SELECT
+            <include refid="baseColumns"/>
+        FROM live_broadcast_room_member t
+        where t.id_ = #{id}
+    </select>
+    
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.LiveBroadcastRoomMemberVo">
+		SELECT         
+        	<include refid="baseColumns" />
+		FROM live_broadcast_room_member t
+	</select>
+</mapper>

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

@@ -242,7 +242,7 @@
         LEFT JOIN sys_user u ON s.teacher_id_ = u.id_
         LEFT JOIN sys_user u ON s.teacher_id_ = u.id_
         LEFT JOIN teacher_total t ON s.teacher_id_ = t.user_id_
         LEFT JOIN teacher_total t ON s.teacher_id_ = t.user_id_
         LEFT JOIN teacher tr ON s.teacher_id_ = tr.user_id_
         LEFT JOIN teacher tr ON s.teacher_id_ = tr.user_id_
-        LEFT JOIN (SELECT room_uid_,speaker_id_ FROM live_room WHERE live_state_=1) r ON t.user_id_= r.speaker_id_
+        LEFT JOIN (SELECT room_uid_,speaker_id_ FROM live_room WHERE live_state_=1 and room_state_  = 0 and type_ = 'TEMP') r ON t.user_id_= r.speaker_id_
         WHERE s.student_id_ = #{param.userId}
         WHERE s.student_id_ = #{param.userId}
         <if test="param.username != null and param.username != ''">
         <if test="param.username != null and param.username != ''">
             and u.username_ LIKE CONCAT('%', #{param.username}, '%')
             and u.username_ LIKE CONCAT('%', #{param.username}, '%')

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

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

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

@@ -82,6 +82,15 @@ public class TeacherLiveRoomController extends BaseController {
         return succeed(liveRoomService.speakerJoinRoom(roomUid));
         return succeed(liveRoomService.speakerJoinRoom(roomUid));
     }
     }
 
 
+
+    @ApiOperation("设置是否允许连麦")
+    @GetMapping("/whetherMic")
+    public HttpResponseResult<Object> whetherMic(@ApiParam(value = "房间uid", required = true) String roomUid,
+                                                      @ApiParam(value = "是否连麦 0:是 1否", required = true) Integer whetherMic) {
+        liveRoomService.whetherMic(roomUid,whetherMic);
+        return succeed();
+    }
+
     @ApiOperation("手动关闭直播间")
     @ApiOperation("手动关闭直播间")
     @GetMapping("/destroyLiveRoom")
     @GetMapping("/destroyLiveRoom")
     public HttpResponseResult<Object> destroyLiveRoom(@ApiParam(value = "房间uid", required = true) String roomUid) {
     public HttpResponseResult<Object> destroyLiveRoom(@ApiParam(value = "房间uid", required = true) String roomUid) {