Browse Source

网络教室

zouxuan 3 years ago
parent
commit
dd4d10cae7
29 changed files with 1211 additions and 1 deletions
  1. 12 0
      cooleshow-gateway/gateway-web/src/main/resources/bootstrap-prod.yml
  2. 1 1
      cooleshow-gateway/gateway-web/src/main/resources/logback-spring.xml
  3. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentMusicScoreDao.java
  4. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  5. 28 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImNetworkRoomDao.java
  6. 25 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImNetworkRoomMemberDao.java
  7. 50 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseScheduleStudentMusicScoreResult.java
  8. 43 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkRoomResult.java
  9. 54 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/NetworkRoomParamDto.java
  10. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/NetworkRoomResult.java
  11. 156 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleStudentMusicScore.java
  12. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleStudentPayment.java
  13. 108 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImNetworkRoom.java
  14. 166 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImNetworkRoomMember.java
  15. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/UserRoleEnum.java
  16. 20 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleStudentMusicScoreService.java
  17. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleStudentPaymentService.java
  18. 25 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImNetworkRoomMemberService.java
  19. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImNetworkRoomService.java
  20. 29 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleStudentMusicScoreServiceImpl.java
  21. 56 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImNetworkRoomMemberServiceImpl.java
  22. 115 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImNetworkRoomServiceImpl.java
  23. 51 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleStudentMusicScoreMapper.xml
  24. 3 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  25. 22 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ImNetworkRoomMapper.xml
  26. 53 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ImNetworkRoomMemberMapper.xml
  27. 29 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseScheduleStudentMusicScoreController.java
  28. 46 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImNetworkRoomController.java
  29. 29 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImNetworkRoomMemberController.java

+ 12 - 0
cooleshow-gateway/gateway-web/src/main/resources/bootstrap-prod.yml

@@ -0,0 +1,12 @@
+spring:
+  cloud:
+    nacos:
+      config:
+        server-addr: 47.114.1.200:8848
+        namespace: 6f8374a9-598f-4889-bb17-476070ffb8de
+        group: DEFAULT_GROUP
+        prefix: teacher
+        file-extension: yaml
+        refresh:
+          enabled: true
+        enabled: true

+ 1 - 1
cooleshow-gateway/gateway-web/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/logs/gateway-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="LOG_HOME" value="/Users/chenxiaoyu/Documents/logs/gateway-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
 		value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 

+ 27 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentMusicScoreDao.java

@@ -0,0 +1,27 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.dto.CourseScheduleStudentMusicScoreResult;
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentMusicScore;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * (CourseScheduleStudentMusicScore)表数据库访问层
+ *
+ * @author zx
+ * @since 2022-04-02 15:56:01
+ */
+public interface CourseScheduleStudentMusicScoreDao extends BaseMapper<CourseScheduleStudentMusicScore> {
+
+    int insertBatch(@Param("entities") List<CourseScheduleStudentMusicScore> entities);
+
+    List<CourseScheduleStudentMusicScoreResult> queryByScoreIdAndCourseId(@Param("musicScoreAccompanimentId") Integer musicScoreAccompanimentId,
+                                                                          @Param("courseId") Long courseId,
+                                                                          @Param("userId") Long userId,
+                                                                          @Param("downStatus") Integer downStatus,
+                                                                          @Param("userType") Integer userType);
+
+}
+

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

@@ -27,5 +27,8 @@ public interface CourseScheduleStudentPaymentDao extends BaseMapper<CourseSchedu
      */
     Set<Long> queryStudentIds(@Param("courseGroupId") Long courseGroupId,
                                  @Param("courseGroupType") String courseGroupType);
+
+    //重置节拍器设置
+    void cleanPlayMidi(@Param("courseScheduleId") Long courseScheduleId);
 }
 

+ 28 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImNetworkRoomDao.java

@@ -0,0 +1,28 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoom;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 网络教室房间(ImNetworkRoom)表数据库访问层
+ *
+ * @author zx
+ * @since 2022-03-30 16:36:36
+ */
+public interface ImNetworkRoomDao extends BaseMapper<ImNetworkRoom> {
+
+    int insertBatch(@Param("entities") List<ImNetworkRoom> entities);
+
+    /**
+    * @description: 根据房间号获取
+     * @param roomId
+    * @return com.yonge.cooleshow.biz.dal.entity.ImNetworkRoom
+    * @author zx
+    * @date 2022/3/30 17:57
+    */
+    ImNetworkRoom findByRoomId(String roomId);
+}
+

+ 25 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImNetworkRoomMemberDao.java

@@ -0,0 +1,25 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 网络教室成员(ImNetworkRoomMember)表数据库访问层
+ *
+ * @author zx
+ * @since 2022-03-30 16:36:37
+ */
+public interface ImNetworkRoomMemberDao extends BaseMapper<ImNetworkRoomMember> {
+
+    int insertBatch(@Param("entities") List<ImNetworkRoomMember> entities);
+
+    int insert(@Param("entity") ImNetworkRoomMember roomMember);
+
+    ImNetworkRoomMember findByRidAndUid(@Param("roomId") String roomId, @Param("userId") Long userId);
+
+    List<ImNetworkRoomMember> queryByRoomId(@Param("roomId") String roomId);
+}
+

+ 50 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseScheduleStudentMusicScoreResult.java

@@ -0,0 +1,50 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentMusicScore;
+import io.swagger.annotations.ApiModelProperty;
+
+public class CourseScheduleStudentMusicScoreResult extends CourseScheduleStudentMusicScore {
+    @ApiModelProperty(value = "原音")
+    private String mp3Url;
+
+    @ApiModelProperty(value = "伴奏")
+    private String audioFileUrl;
+
+    @ApiModelProperty(value = "曲目名")
+    private String musicSheetName;
+
+    @ApiModelProperty(value = "伴奏音量")
+    private Integer soundVolume = 100;
+
+    public Integer getSoundVolume() {
+        return soundVolume;
+    }
+
+    public void setSoundVolume(Integer soundVolume) {
+        this.soundVolume = soundVolume;
+    }
+
+    public String getMp3Url() {
+        return mp3Url;
+    }
+
+    public void setMp3Url(String mp3Url) {
+        this.mp3Url = mp3Url;
+    }
+
+    public String getAudioFileUrl() {
+        return audioFileUrl;
+    }
+
+    public void setAudioFileUrl(String audioFileUrl) {
+        this.audioFileUrl = audioFileUrl;
+    }
+
+    public String getMusicSheetName() {
+        return musicSheetName;
+    }
+
+    public void setMusicSheetName(String musicSheetName) {
+        this.musicSheetName = musicSheetName;
+    }
+}

+ 43 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkRoomResult.java

@@ -0,0 +1,43 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoom;
+import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+public class ImNetworkRoomResult extends ImNetworkRoom {
+
+    @ApiModelProperty(value = "房间成员列表,包含当前用户;")
+    private List<ImNetworkRoomMember> roomMemberList;
+
+    @ApiModelProperty(value = "当前用户")
+    private ImNetworkRoomMember roomMember;
+
+    @ApiModelProperty(value = "当前用户伴奏信息")
+    private List<CourseScheduleStudentMusicScoreResult> musicScoreResults;
+
+    public List<ImNetworkRoomMember> getRoomMemberList() {
+        return roomMemberList;
+    }
+
+    public void setRoomMemberList(List<ImNetworkRoomMember> roomMemberList) {
+        this.roomMemberList = roomMemberList;
+    }
+
+    public ImNetworkRoomMember getRoomMember() {
+        return roomMember;
+    }
+
+    public void setRoomMember(ImNetworkRoomMember roomMember) {
+        this.roomMember = roomMember;
+    }
+
+    public List<CourseScheduleStudentMusicScoreResult> getMusicScoreResults() {
+        return musicScoreResults;
+    }
+
+    public void setMusicScoreResults(List<CourseScheduleStudentMusicScoreResult> musicScoreResults) {
+        this.musicScoreResults = musicScoreResults;
+    }
+}

+ 54 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/NetworkRoomParamDto.java

@@ -0,0 +1,54 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+public class NetworkRoomParamDto {
+
+    private String userName;
+
+    private String roomId;
+
+    private String userId;
+
+    private boolean audience;
+
+    private boolean disableCamera;
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getRoomId() {
+        return roomId;
+    }
+
+    public void setRoomId(String roomId) {
+        this.roomId = roomId;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public boolean isAudience() {
+        return audience;
+    }
+
+    public void setAudience(boolean audience) {
+        this.audience = audience;
+    }
+
+    public boolean isDisableCamera() {
+        return disableCamera;
+    }
+
+    public void setDisableCamera(boolean disableCamera) {
+        this.disableCamera = disableCamera;
+    }
+}

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

@@ -0,0 +1,4 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+public class NetworkRoomResult {
+}

+ 156 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleStudentMusicScore.java

@@ -0,0 +1,156 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+
+/**
+ * (CourseScheduleStudentMusicScore)表实体类
+ *
+ * @author zx
+ * @since 2022-04-02 15:56:01
+ */
+@ApiModel(value = "course_schedule_student_music_score-${tableInfo.comment}")
+public class CourseScheduleStudentMusicScore implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    @TableField("course_schedule_id_")
+    @ApiModelProperty(value = "课程编号")
+    private Long courseScheduleId;
+
+    @TableField("user_id_")
+    @ApiModelProperty(value = "用户编号")
+    private Long userId;
+
+    @TableField("down_status_")
+    @ApiModelProperty(value = "伴奏下载状态(1下载成功0下载中2下载失败)")
+    private Integer downStatus;
+
+    @TableField("music_sheet_accompaniment_id_")
+    @ApiModelProperty(value = "伴奏编号")
+    private Integer musicSheetAccompanimentId;
+
+    @TableField("play_status_")
+    @ApiModelProperty(value = "原音播放状态(1是0否)")
+    private Integer playStatus;
+
+    @TableField("accompaniment_play_status_")
+    @ApiModelProperty(value = "伴奏播放状态")
+    private Integer accompanimentPlayStatus;
+
+    @TableField("user_type_")
+    @ApiModelProperty(value = "0学生1老师")
+    private Integer userType;
+
+    @TableField("speed_")
+    @ApiModelProperty(value = "播放速度")
+    private Integer speed;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "${column.comment}")
+    private Date createTime;
+
+    @TableField("update_time_")
+    @ApiModelProperty(value = "${column.comment}")
+    private Date updateTime;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getCourseScheduleId() {
+        return courseScheduleId;
+    }
+
+    public void setCourseScheduleId(Long courseScheduleId) {
+        this.courseScheduleId = courseScheduleId;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Integer getDownStatus() {
+        return downStatus;
+    }
+
+    public void setDownStatus(Integer downStatus) {
+        this.downStatus = downStatus;
+    }
+
+    public Integer getMusicSheetAccompanimentId() {
+        return musicSheetAccompanimentId;
+    }
+
+    public void setMusicSheetAccompanimentId(Integer musicSheetAccompanimentId) {
+        this.musicSheetAccompanimentId = musicSheetAccompanimentId;
+    }
+
+    public Integer getPlayStatus() {
+        return playStatus;
+    }
+
+    public void setPlayStatus(Integer playStatus) {
+        this.playStatus = playStatus;
+    }
+
+    public Integer getAccompanimentPlayStatus() {
+        return accompanimentPlayStatus;
+    }
+
+    public void setAccompanimentPlayStatus(Integer accompanimentPlayStatus) {
+        this.accompanimentPlayStatus = accompanimentPlayStatus;
+    }
+
+    public Integer getUserType() {
+        return userType;
+    }
+
+    public void setUserType(Integer userType) {
+        this.userType = userType;
+    }
+
+    public Integer getSpeed() {
+        return speed;
+    }
+
+    public void setSpeed(Integer speed) {
+        this.speed = speed;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+}
+

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

@@ -63,6 +63,17 @@ public class CourseScheduleStudentPayment implements Serializable {
     @ApiModelProperty(value = "类型 practice陪练课 live直播课")
     private String courseType;
 
+    @TableField("play_midi_")
+    @ApiModelProperty(value = "节拍器参数")
+    private String playMidi;
+
+    public String getPlayMidi() {
+        return playMidi;
+    }
+
+    public void setPlayMidi(String playMidi) {
+        this.playMidi = playMidi;
+    }
 
     public Long getId() {
         return id;

+ 108 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImNetworkRoom.java

@@ -0,0 +1,108 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+
+/**
+ * 网络教室房间(ImNetworkRoom)表实体类
+ *
+ * @author zx
+ * @since 2022-03-30 16:36:36
+ */
+@ApiModel(value = "im_network_room-网络教室房间")
+public class ImNetworkRoom implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键;")
+    private Long id;
+
+    @TableField("room_id_")
+    @ApiModelProperty(value = "房间编号;")
+    private String roomId;
+
+    @TableField("course_schedule_id_")
+    @ApiModelProperty(value = "课程编号")
+    private Long courseScheduleId;
+
+    @TableField("display_")
+    @ApiModelProperty(value = "用于移动端房间渲染")
+    //type 1老师0助教
+    private String display = "";
+
+    @TableField("sound_volume_")
+    @ApiModelProperty(value = "伴奏音量")
+    private Integer soundVolume = 100;
+
+    @TableField("update_time_")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "创建时间;")
+    private Date createTime;
+
+    public Integer getSoundVolume() {
+        return soundVolume;
+    }
+
+    public void setSoundVolume(Integer soundVolume) {
+        this.soundVolume = soundVolume;
+    }
+
+    public String getDisplay() {
+        return display;
+    }
+
+    public void setDisplay(String display) {
+        this.display = display;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getRoomId() {
+        return roomId;
+    }
+
+    public void setRoomId(String roomId) {
+        this.roomId = roomId;
+    }
+
+    public Long getCourseScheduleId() {
+        return courseScheduleId;
+    }
+
+    public void setCourseScheduleId(Long courseScheduleId) {
+        this.courseScheduleId = courseScheduleId;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+}
+

+ 166 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImNetworkRoomMember.java

@@ -0,0 +1,166 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+
+/**
+ * 网络教室成员(ImNetworkRoomMember)表实体类
+ *
+ * @author zx
+ * @since 2022-03-30 16:36:37
+ */
+@ApiModel(value = "im_network_room_member-网络教室成员")
+public class ImNetworkRoomMember implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键;")
+    private Long id;
+
+    @TableField("course_schedule_id_")
+    @ApiModelProperty(value = "课程编号")
+    private Long courseScheduleId;
+
+    @TableField("room_id_")
+    @ApiModelProperty(value = "房间号")
+    private String roomId;
+
+    @TableField("user_id_")
+    @ApiModelProperty(value = "用户编号")
+    private Long userId;
+
+    @TableField("username_")
+    @ApiModelProperty(value = "用户名")
+    private String username;
+
+    @TableField("avatar_")
+    @ApiModelProperty(value = "用户头像")
+    private String avatar;
+
+    @TableField("join_time_")
+    @ApiModelProperty(value = "进入时间;")
+    private Date joinTime;
+
+    @TableField("role_")
+    @ApiModelProperty(value = "角色0学员1老师;")
+    private Integer role;
+
+    @TableField("camera_flag_")
+    @ApiModelProperty(value = "是否开启摄像头;")
+    private boolean cameraFlag;
+
+    @TableField("mic_flag_")
+    @ApiModelProperty(value = "是否开启麦克风")
+    private boolean micFlag;
+
+    @TableField("music_mode_flag_")
+    @ApiModelProperty(value = "是否开启音乐模式")
+    private boolean musicModeFlag;
+
+    @TableField("hand_flag_")
+    @ApiModelProperty(value = "是否举手")
+    private boolean handFlag;
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getCourseScheduleId() {
+        return courseScheduleId;
+    }
+
+    public void setCourseScheduleId(Long courseScheduleId) {
+        this.courseScheduleId = courseScheduleId;
+    }
+
+    public String getRoomId() {
+        return roomId;
+    }
+
+    public void setRoomId(String roomId) {
+        this.roomId = roomId;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Date getJoinTime() {
+        return joinTime;
+    }
+
+    public void setJoinTime(Date joinTime) {
+        this.joinTime = joinTime;
+    }
+
+    public Integer getRole() {
+        return role;
+    }
+
+    public void setRole(Integer role) {
+        this.role = role;
+    }
+
+    public boolean isCameraFlag() {
+        return cameraFlag;
+    }
+
+    public void setCameraFlag(boolean cameraFlag) {
+        this.cameraFlag = cameraFlag;
+    }
+
+    public boolean isMicFlag() {
+        return micFlag;
+    }
+
+    public void setMicFlag(boolean micFlag) {
+        this.micFlag = micFlag;
+    }
+
+    public boolean isMusicModeFlag() {
+        return musicModeFlag;
+    }
+
+    public void setMusicModeFlag(boolean musicModeFlag) {
+        this.musicModeFlag = musicModeFlag;
+    }
+
+    public boolean isHandFlag() {
+        return handFlag;
+    }
+
+    public void setHandFlag(boolean handFlag) {
+        this.handFlag = handFlag;
+    }
+}
+

+ 22 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/UserRoleEnum.java

@@ -0,0 +1,22 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
+public enum UserRoleEnum implements BaseEnum<String, UserRoleEnum> {
+    STUDENT("学生"),TEACHER("老师");
+
+    private String msg;
+
+    UserRoleEnum(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.name();
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}

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

@@ -0,0 +1,20 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentMusicScoreDao;
+import com.yonge.cooleshow.biz.dal.dto.CourseScheduleStudentMusicScoreResult;
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentMusicScore;
+
+import java.util.List;
+
+/**
+ * (CourseScheduleStudentMusicScore)表服务接口
+ *
+ * @author zx
+ * @since 2022-04-02 15:56:01
+ */
+public interface CourseScheduleStudentMusicScoreService extends IService<CourseScheduleStudentMusicScore> {
+
+    CourseScheduleStudentMusicScoreDao getDao();
+}
+

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleStudentPaymentService.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentPaymentDao;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentPayment;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 课程学生缴费表(CourseScheduleStudentPayment)表服务接口

+ 25 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImNetworkRoomMemberService.java

@@ -0,0 +1,25 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomMemberDao;
+import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember;
+import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 网络教室成员(ImNetworkRoomMember)表服务接口
+ *
+ * @author zx
+ * @since 2022-03-30 16:36:38
+ */
+public interface ImNetworkRoomMemberService extends IService<ImNetworkRoomMember> {
+
+    ImNetworkRoomMemberDao getDao();
+
+    ImNetworkRoomMember initRoomMember(String roomId, SysUser sysUser, UserRoleEnum userRole);
+
+}
+

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

@@ -0,0 +1,22 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomDao;
+import com.yonge.cooleshow.biz.dal.dto.NetworkRoomResult;
+import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoom;
+import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
+
+/**
+ * 网络教室房间(ImNetworkRoom)表服务接口
+ *
+ * @author zx
+ * @since 2022-03-30 16:36:36
+ */
+public interface ImNetworkRoomService extends IService<ImNetworkRoom> {
+
+    ImNetworkRoomDao getDao();
+
+    //加入网络教室
+    NetworkRoomResult joinRoom(Long courseScheduleId, UserRoleEnum userRole);
+}
+

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

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentMusicScoreDao;
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentMusicScore;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleStudentMusicScoreService;
+import org.springframework.stereotype.Service;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * (CourseScheduleStudentMusicScore)表服务实现类
+ *
+ * @author zx
+ * @since 2022-04-02 15:56:01
+ */
+@Service("courseScheduleStudentMusicScoreService")
+public class CourseScheduleStudentMusicScoreServiceImpl extends ServiceImpl<CourseScheduleStudentMusicScoreDao, CourseScheduleStudentMusicScore> implements CourseScheduleStudentMusicScoreService {
+
+    private final static Logger log = LoggerFactory.getLogger(CourseScheduleStudentMusicScoreServiceImpl.class);
+
+    @Override
+    public CourseScheduleStudentMusicScoreDao getDao() {
+        return this.baseMapper;
+    }
+
+}
+

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

@@ -0,0 +1,56 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomMemberDao;
+import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember;
+import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
+import com.yonge.cooleshow.biz.dal.service.ImNetworkRoomMemberService;
+import org.springframework.stereotype.Service;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * 网络教室成员(ImNetworkRoomMember)表服务实现类
+ *
+ * @author zx
+ * @since 2022-03-30 16:36:38
+ */
+@Service("imNetworkRoomMemberService")
+public class ImNetworkRoomMemberServiceImpl extends ServiceImpl<ImNetworkRoomMemberDao, ImNetworkRoomMember> implements ImNetworkRoomMemberService {
+
+    private final static Logger log = LoggerFactory.getLogger(ImNetworkRoomMemberServiceImpl.class);
+
+    @Override
+    public ImNetworkRoomMemberDao getDao() {
+        return this.baseMapper;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public ImNetworkRoomMember initRoomMember(String roomId, SysUser sysUser, UserRoleEnum userRole) {
+        ImNetworkRoomMember roomMember = baseMapper.findByRidAndUid(roomId, sysUser.getId());
+        if(Objects.isNull(roomMember)){
+            roomMember = new ImNetworkRoomMember();
+            roomMember.setRoomId(roomId);
+            roomMember.setCameraFlag(true);
+            roomMember.setHandFlag(false);
+            roomMember.setMicFlag(true);
+            roomMember.setMusicModeFlag(false);
+            roomMember.setRole(userRole.ordinal());
+            roomMember.setUserId(sysUser.getId());
+            roomMember.setUsername(userRole == UserRoleEnum.STUDENT?sysUser.getUsername():sysUser.getRealName());
+            roomMember.setAvatar(sysUser.getAvatar());
+            roomMember.setCourseScheduleId(Long.parseLong(roomId));
+            baseMapper.insert(roomMember);
+        }
+        return roomMember;
+    }
+
+}
+

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

@@ -0,0 +1,115 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+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.constant.SysConfigConstant;
+import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomDao;
+import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomMemberDao;
+import com.yonge.cooleshow.biz.dal.dao.SysConfigDao;
+import com.yonge.cooleshow.biz.dal.dto.CourseScheduleStudentMusicScoreResult;
+import com.yonge.cooleshow.biz.dal.dto.ImNetworkRoomResult;
+import com.yonge.cooleshow.biz.dal.dto.NetworkRoomResult;
+import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoom;
+import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember;
+import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
+import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.common.exception.BizException;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * 网络教室房间(ImNetworkRoom)表服务实现类
+ *
+ * @author zx
+ * @since 2022-03-30 16:36:36
+ */
+@Service("imNetworkRoomService")
+public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNetworkRoom> implements ImNetworkRoomService {
+
+    private final static Logger log = LoggerFactory.getLogger(ImNetworkRoomServiceImpl.class);
+
+    @Resource
+    private SysUserFeignService sysUserFeignService;
+    @Resource
+    private ImNetworkRoomMemberService imNetworkRoomMemberService;
+    @Resource
+    private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
+    @Resource
+    private CourseScheduleStudentMusicScoreService courseScheduleStudentMusicScoreService;
+    @Resource
+    private SysConfigDao sysConfigDao;
+
+    @Override
+    public ImNetworkRoomDao getDao() {
+        return this.baseMapper;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public NetworkRoomResult joinRoom(Long courseScheduleId, UserRoleEnum userRole) {
+        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
+                orElseThrow(()-> new BizException("请登录"));
+        Date now = new Date();
+        String roomId = courseScheduleId.toString();
+        ImNetworkRoomResult joinRoomResult = new ImNetworkRoomResult();
+        //获取房间
+        ImNetworkRoom room = initRoom(roomId,courseScheduleId,userRole,sysUser.getId());
+        BeanUtils.copyProperties(room,joinRoomResult);
+        //创建群聊
+        //定时销毁房间
+        //获取房间用户信息
+        ImNetworkRoomMember roomMember = imNetworkRoomMemberService.initRoomMember(roomId,sysUser,userRole);
+        joinRoomResult.setRoomMember(roomMember);
+        //获取房间所有成员
+        List<ImNetworkRoomMember> roomMemberList = imNetworkRoomMemberService.getDao().queryByRoomId(roomId);
+        joinRoomResult.setRoomMemberList(roomMemberList);
+        //如果是老师,重置节拍器数据
+        if(userRole == UserRoleEnum.TEACHER){
+            courseScheduleStudentPaymentService.getDao().cleanPlayMidi(courseScheduleId);
+        }
+        //获取用户已下载的伴奏列表
+        List<CourseScheduleStudentMusicScoreResult> musicScoreResults = courseScheduleStudentMusicScoreService.getDao().
+                queryByScoreIdAndCourseId(null,courseScheduleId,sysUser.getId(),null,null);
+        joinRoomResult.setMusicScoreResults(musicScoreResults);
+        //网络教室配置项
+        String autoCloseNetworkRoomTime = sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_LIVE_ROOM_MINUTE, courseSchedule.getTenantId());
+        return null;
+    }
+
+    public ImNetworkRoom initRoom(String roomId,Long courseId,UserRoleEnum userRole,Long userId){
+        ImNetworkRoom room = baseMapper.findByRoomId(roomId);
+        if(Objects.isNull(room)){
+            Date date = new Date();
+            room = new ImNetworkRoom();
+            //创建房间
+            room.setCourseScheduleId(courseId);
+            room.setRoomId(roomId);
+            room.setCreateTime(date);
+            room.setUpdateTime(date);
+            baseMapper.insert(room);
+        }else {
+            if(userRole == UserRoleEnum.TEACHER){
+                room.setDisplay(new StringBuilder("display://type=1?userId=")
+                        .append(userId)
+                        .append("?uri=").toString());
+            }
+        }
+        return room;
+    }
+
+    public void updateDisplay(){
+
+    }
+
+}

+ 51 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleStudentMusicScoreMapper.xml

@@ -0,0 +1,51 @@
+<?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.CourseScheduleStudentMusicScoreDao">
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentMusicScore">
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="course_schedule_id_" jdbcType="INTEGER" property="courseScheduleId"/>
+        <result column="user_id_" jdbcType="INTEGER" property="userId"/>
+        <result column="down_status_" jdbcType="INTEGER" property="downStatus"/>
+        <result column="music_sheet_accompaniment_id_" jdbcType="INTEGER" property="musicSheetAccompanimentId"/>
+        <result column="play_status_" jdbcType="INTEGER" property="playStatus"/>
+        <result column="accompaniment_play_status_" jdbcType="INTEGER" property="accompanimentPlayStatus"/>
+        <result column="user_type_" jdbcType="INTEGER" property="userType"/>
+        <result column="speed_" jdbcType="INTEGER" property="speed"/>
+        <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
+        <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id_
+        , course_schedule_id_, user_id_, down_status_, music_sheet_accompaniment_id_, play_status_, accompaniment_play_status_, user_type_, speed_, create_time_, update_time_
+    </sql>
+
+    <resultMap id="CourseScheduleStudentMusicScoreResult" type="com.yonge.cooleshow.biz.dal.dto.CourseScheduleStudentMusicScoreResult" extends="BaseResultMap">
+        <result property="audioFileUrl" column="audio_file_url_"/>
+        <result property="mp3Url" column="mp3_url_"/>
+        <result property="musicSheetName" column="music_sheet_name_"/>
+    </resultMap>
+    <select id="queryByScoreIdAndCourseId" resultMap="CourseScheduleStudentMusicScoreResult">
+        SELECT cssm.*,msa.audio_file_url_ mp3_url_,ms.audio_file_url_,ms.music_sheet_name_  FROM course_schedule_student_music_score cssm
+        LEFT JOIN music_sheet_accompaniment msa ON cssm.music_sheet_accompaniment_id_ = msa.id_
+        LEFT JOIN music_sheet ms ON ms.id_ = msa.music_sheet_id_
+        <where>
+            <if test="courseId != null">
+                AND cssm.course_schedule_id_ = #{courseId}
+            </if>
+            <if test="musicScoreAccompanimentId != null">
+                AND cssm.music_score_accompaniment_id_ = #{musicScoreAccompanimentId}
+            </if>
+            <if test="userType != null">
+                AND cssm.user_type_ = #{userType}
+            </if>
+            <if test="userId != null">
+                AND cssm.user_id_ = #{userId}
+            </if>
+            <if test="downStatus != null">
+                AND cssm.down_status_ = #{downStatus}
+            </if>
+        </where>
+    </select>
+
+</mapper>

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

@@ -31,6 +31,9 @@
             #{entity.courseType})
         </foreach>
     </insert>
+    <update id="cleanPlayMidi">
+        UPDATE course_schedule_student_payment SET play_midi_ = NULL WHERE course_id_ = #{courseScheduleId}
+    </update>
     <select id="queryStudentIds" resultType="java.lang.Long">
         SELECT DISTINCT user_id_ FROM course_schedule_student_payment
         <where>

+ 22 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/ImNetworkRoomMapper.xml

@@ -0,0 +1,22 @@
+<?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.ImNetworkRoomDao">
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.ImNetworkRoom">
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="room_id_" jdbcType="VARCHAR" property="roomId"/>
+        <result column="course_schedule_id_" jdbcType="INTEGER" property="courseScheduleId"/>
+        <result column="display_" jdbcType="VARCHAR" property="display"/>
+        <result column="sound_volume_" jdbcType="INTEGER" property="soundVolume"/>
+        <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
+        <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id_ , room_id_, course_schedule_id_,display_,sound_volume_, update_time_, create_time_
+    </sql>
+
+    <select id="findByRoomId" resultMap="BaseResultMap">
+        SELECT * FROM im_network_room WHERE room_id_ = #{roomId} LIMIT 1
+    </select>
+
+</mapper>

+ 53 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/ImNetworkRoomMemberMapper.xml

@@ -0,0 +1,53 @@
+<?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.ImNetworkRoomMemberDao">
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember">
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="course_schedule_id_" jdbcType="INTEGER" property="courseScheduleId"/>
+        <result column="room_id_" jdbcType="VARCHAR" property="roomId"/>
+        <result column="user_id_" jdbcType="INTEGER" property="userId"/>
+        <result column="username_" jdbcType="VARCHAR" property="username"/>
+        <result column="avatar_" jdbcType="VARCHAR" property="avatar"/>
+        <result column="join_time_" jdbcType="TIMESTAMP" property="joinTime"/>
+        <result column="role_" jdbcType="INTEGER" property="role"/>
+        <result column="camera_flag_" jdbcType="BOOLEAN" property="cameraFlag"/>
+        <result column="mic_flag_" jdbcType="BOOLEAN" property="micFlag"/>
+        <result column="music_mode_flag_" jdbcType="BOOLEAN" property="musicModeFlag"/>
+        <result column="hand_flag_" jdbcType="BOOLEAN" property="handFlag"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id_
+        , course_schedule_id_, room_id_, user_id_, join_time_, role_,
+        camera_flag_, mic_flag_, music_mode_flag_, hand_flag_,username_,avatar_
+    </sql>
+
+    <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
+            parameterType="com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember">
+        insert into im_network_room_member(course_schedule_id_, room_id_, user_id_, join_time_, role_, camera_flag_,
+        mic_flag_, music_mode_flag_, hand_flag_,username_,avatar_)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.courseScheduleId}, #{entity.roomId}, #{entity.userId}, #{entity.joinTime}, #{entity.role},
+            #{entity.cameraFlag}, #{entity.micFlag}, #{entity.musicModeFlag}, #{entity.handFlag}, #{entity.username}, #{entity.avatar})
+        </foreach>
+    </insert>
+    <insert id="insert" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
+            parameterType="com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember">
+        INSERT INTO im_network_room_member(course_schedule_id_, room_id_, user_id_, join_time_, role_, camera_flag_,
+                                           mic_flag_, music_mode_flag_, hand_flag_,username_,avatar_)
+        VALUES (#{entity.courseScheduleId}, #{entity.roomId}, #{entity.userId},NOW(), #{entity.role},
+                #{entity.cameraFlag}, #{entity.micFlag}, #{entity.musicModeFlag}, #{entity.handFlag}, #{entity.username}, #{entity.avatar})
+        ON DUPLICATE KEY UPDATE
+        room_id_ = VALUES(room_id_),
+        user_id_ = VALUES(user_id_))
+    </insert>
+    <select id="findByRidAndUid" resultMap="BaseResultMap">
+        SELECT <include refid="Base_Column_List"/> FROM im_network_room_member
+        WHERE room_id_ = #{roomId} AND user_id_ = #{userId} LIMIT 1
+    </select>
+    <select id="queryByRoomId" resultMap="BaseResultMap">
+        SELECT <include refid="Base_Column_List"/> FROM im_network_room_member WHERE room_id_ = #{roomId}
+    </select>
+
+</mapper>

+ 29 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseScheduleStudentMusicScoreController.java

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.teacher.controller;
+
+
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentMusicScore;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleStudentMusicScoreService;
+import org.springframework.web.bind.annotation.*;
+import com.yonge.cooleshow.common.controller.BaseController;
+import io.swagger.annotations.Api;
+
+import javax.annotation.Resource;
+
+/**
+ * (CourseScheduleStudentMusicScore)表控制层
+ *
+ * @author zx
+ * @since 2022-04-02 15:56:00
+ */
+@Api(tags = "")
+@RestController
+@RequestMapping("/courseScheduleStudentMusicScore")
+public class CourseScheduleStudentMusicScoreController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private CourseScheduleStudentMusicScoreService courseScheduleStudentMusicScoreService;
+
+}
+

+ 46 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImNetworkRoomController.java

@@ -0,0 +1,46 @@
+package com.yonge.cooleshow.teacher.controller;
+
+
+import com.yonge.cooleshow.biz.dal.dto.NetworkRoomResult;
+import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
+import com.yonge.cooleshow.biz.dal.service.ImNetworkRoomService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.exception.BizException;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * 网络教室房间(ImNetworkRoom)表控制层
+ *
+ * @author zx
+ * @since 2022-03-30 16:36:36
+ */
+@Api(tags = "网络教室房间")
+@RestController
+@RequestMapping("/imNetworkRoom")
+public class ImNetworkRoomController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private ImNetworkRoomService imNetworkRoomService;
+
+    @PostMapping(value = "/join", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    @ApiImplicitParam(name = "courseScheduleId", dataType = "Long", value = "课程编号")
+    public HttpResponseResult<NetworkRoomResult> joinRoom(Long courseScheduleId){
+        courseScheduleId = Optional.ofNullable(courseScheduleId)
+                .orElseThrow(()->new BizException("房间号不可为空"));
+        return succeed(imNetworkRoomService.joinRoom(courseScheduleId, UserRoleEnum.TEACHER));
+    }
+}
+

+ 29 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImNetworkRoomMemberController.java

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.teacher.controller;
+
+
+import com.yonge.cooleshow.biz.dal.service.ImNetworkRoomMemberService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * 网络教室成员(ImNetworkRoomMember)表控制层
+ *
+ * @author zx
+ * @since 2022-03-30 16:36:37
+ */
+@Api(tags = "网络教室成员")
+@RestController
+@RequestMapping("/imNetworkRoomMember")
+public class ImNetworkRoomMemberController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private ImNetworkRoomMemberService imNetworkRoomMemberService;
+
+}
+