Ver código fonte

网络教室

zouxuan 3 anos atrás
pai
commit
78e4800d73
22 arquivos alterados com 599 adições e 105 exclusões
  1. 9 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentMusicSheetDao.java
  2. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  3. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImNetworkRoomMemberDao.java
  4. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseScheduleStudentMusicSheetResult.java
  5. 21 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkCustomMessage.java
  6. 38 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkMetronomeMessage.java
  7. 45 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkMusicSheetDownloadMessage.java
  8. 154 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkMusicSheetDownloadMessageContent.java
  9. 61 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkRoomMusicSheetData.java
  10. 11 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkRoomMusicSheetDownloadData.java
  11. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkRoomResult.java
  12. 6 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleStudentMusicSheet.java
  13. 0 20
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleStudentMusicScoreService.java
  14. 17 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleStudentMusicSheetService.java
  15. 13 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImNetworkRoomService.java
  16. 8 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleStudentMusicSheetServiceImpl.java
  17. 98 17
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImNetworkRoomServiceImpl.java
  18. 23 8
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleStudentMusicSheetDao.xml
  19. 30 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  20. 3 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ImNetworkRoomMemberMapper.xml
  21. 7 7
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseScheduleStudentMusicSheetController.java
  22. 37 11
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImNetworkRoomController.java

+ 9 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentMusicScoreDao.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentMusicSheetDao.java

@@ -1,27 +1,29 @@
 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 com.yonge.cooleshow.biz.dal.dto.CourseScheduleStudentMusicSheetResult;
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentMusicSheet;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
 /**
- * (CourseScheduleStudentMusicScore)表数据库访问层
+ * (CourseScheduleStudentMusicSheet)表数据库访问层
  *
  * @author zx
  * @since 2022-04-02 15:56:01
  */
-public interface CourseScheduleStudentMusicScoreDao extends BaseMapper<CourseScheduleStudentMusicScore> {
+public interface CourseScheduleStudentMusicSheetDao extends BaseMapper<CourseScheduleStudentMusicSheet> {
 
-    int insertBatch(@Param("entities") List<CourseScheduleStudentMusicScore> entities);
-
-    List<CourseScheduleStudentMusicScoreResult> queryByScoreIdAndCourseId(@Param("musicScoreAccompanimentId") Integer musicScoreAccompanimentId,
+    List<CourseScheduleStudentMusicSheetResult> queryBySheetIdAndCourseId(@Param("musicSheetAccompanimentId") Integer musicSheetAccompanimentId,
                                                                           @Param("courseId") Long courseId,
                                                                           @Param("userId") Long userId,
                                                                           @Param("downStatus") Integer downStatus,
                                                                           @Param("userType") Integer userType);
 
+    //关闭伴奏
+    void closePlayStatus(@Param("courseId") long courseId);
+
+    void batchInsert(@Param("musicSheet") List<CourseScheduleStudentMusicSheetResult> musicSheet);
 }
 

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

@@ -36,5 +36,14 @@ public interface CourseScheduleStudentPaymentDao extends BaseMapper<CourseSchedu
 
     //获取伴奏数据
     String getMusicSheetByCourseIdAndUserId(@Param("courseScheduleId") Long courseScheduleId, @Param("userId") Long userId);
+
+    //调整节拍器
+    void adjustPlayMidi(@Param("courseScheduleId") long courseScheduleId, @Param("userId") Long userId, @Param("content") String content);
+
+    //调整伴奏
+    void adjustExamSong(@Param("courseScheduleId") long courseScheduleId, @Param("userId") Long userId, @Param("examSongJson") String examSongJson);
+
+    //获取课程学员关联
+    List<CourseScheduleStudentPayment> queryByCourseId(@Param("courseScheduleId") Long courseScheduleId);
 }
 

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

@@ -21,5 +21,7 @@ public interface ImNetworkRoomMemberDao extends BaseMapper<ImNetworkRoomMember>
     ImNetworkRoomMember findByRidAndUid(@Param("roomId") String roomId, @Param("userId") Long userId);
 
     List<ImNetworkRoomMember> queryByRoomId(@Param("roomId") String roomId);
+
+    void delByRidAndUid(@Param("roomId") String roomId, @Param("userId") Long userId);
 }
 

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseScheduleStudentMusicScoreResult.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CourseScheduleStudentMusicSheetResult.java

@@ -1,9 +1,9 @@
 package com.yonge.cooleshow.biz.dal.dto;
 
-import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentMusicScore;
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentMusicSheet;
 import io.swagger.annotations.ApiModelProperty;
 
-public class CourseScheduleStudentMusicScoreResult extends CourseScheduleStudentMusicScore {
+public class CourseScheduleStudentMusicSheetResult extends CourseScheduleStudentMusicSheet {
     @ApiModelProperty(value = "原音")
     private String mp3Url;
 

+ 21 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkCustomMessage.java

@@ -1,20 +1,36 @@
 package com.yonge.cooleshow.biz.dal.dto;
 
 import io.rong.messages.BaseMessage;
+import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.StringUtils;
 
 public class ImNetworkCustomMessage extends BaseMessage {
-    //开关
+    @ApiModelProperty(value = "节拍器开关",required = true)
     private boolean enable;
-    //消息类型
+
+    @ApiModelProperty(value = "消息类型",required = true)
     private int customType;
-    //速度
+
+    @ApiModelProperty(value = "速度",required = true)
     private int rate;
-    //音量
+
+    @ApiModelProperty(value = "音量",required = true)
     private int playVolume;
-    //用户
+
+    @ApiModelProperty(value = "用户",required = false)
     private String userId;
 
+    @ApiModelProperty(value = "课程编号",required = true)
+    private Long courseScheduleId;
+
+    public Long getCourseScheduleId() {
+        return courseScheduleId;
+    }
+
+    public void setCourseScheduleId(Long courseScheduleId) {
+        this.courseScheduleId = courseScheduleId;
+    }
+
     public int getPlayVolume() {
         return playVolume;
     }

+ 38 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkMetronomeMessage.java

@@ -0,0 +1,38 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.entity.BaseMessage;
+import org.apache.commons.lang3.StringUtils;
+
+//节拍器消息
+public class ImNetworkMetronomeMessage extends BaseMessage {
+    private ImNetworkCustomMessage content;
+
+    private static final transient String TYPE = "DY:PlayMidiMessage";
+
+    public ImNetworkMetronomeMessage(ImNetworkCustomMessage content) {
+        this.content = content;
+    }
+
+    public ImNetworkCustomMessage getContent() {
+        return content;
+    }
+
+    public void setContent(ImNetworkCustomMessage content) {
+        this.content = content;
+    }
+
+    @Override
+    public String toString() {
+        return "{\"enable\":" + content.getEnable() +
+                ", \"customType\":" + content.getCustomType() +
+                ", \"rate\":" + content.getRate() +
+                ", \"playVolume\":" + content.getPlayVolume() +
+                ", \"userId\":" + (StringUtils.isEmpty(content.getUserId())?"\"\"":"\"" + content.getUserId() + "\"") +
+                '}';
+    }
+
+    @Override
+    public String getObjectName() {
+        return TYPE;
+    }
+}

+ 45 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkMusicSheetDownloadMessage.java

@@ -0,0 +1,45 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+
+import com.yonge.cooleshow.biz.dal.entity.BaseMessage;
+
+public class ImNetworkMusicSheetDownloadMessage extends BaseMessage {
+    
+    private ImNetworkMusicSheetDownloadMessageContent content;
+    
+    private static final transient String TYPE = "DY:musicScoreDownloadMessage";
+
+    public ImNetworkMusicSheetDownloadMessage(ImNetworkMusicSheetDownloadMessageContent content) {
+        this.content = content;
+    }
+
+    public ImNetworkMusicSheetDownloadMessageContent getContent() {
+        return content;
+    }
+
+    public void setContent(ImNetworkMusicSheetDownloadMessageContent content) {
+        this.content = content;
+    }
+
+    @Override
+    public String toString() {
+        return "{\"id\":\"" + content.getId() +
+                "\", \"examSongId\":\"" + content.getExamSongId() +
+                "\", \"subjectId\":\"" + content.getSubjectId() +
+                "\", \"subjectName\":\"" + content.getSubjectName() +
+                "\", \"mp3Url\":\"" + content.getMp3Url() +
+                "\", \"speed\":\"" + content.getSpeed() +
+                "\", \"xmlUrl\":\"" + content.getXmlUrl() +
+                "\", \"examSongName\":\"" + content.getExamSongName() +
+                "\", \"categoriesName\":\"" + content.getCategoriesName() +
+                "\", \"categoriesId\":\"" + content.getCategoriesId() +
+                "\", \"type\":\"" + content.getType() +
+                "\", \"url\":\"" + content.getUrl() +
+                "\"}";
+    }
+
+    @Override
+    public String getObjectName() {
+        return TYPE;
+    }
+}

+ 154 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkMusicSheetDownloadMessageContent.java

@@ -0,0 +1,154 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+
+public class ImNetworkMusicSheetDownloadMessageContent {
+    /**  */
+    private Integer id;
+
+    /**  */
+    private Integer examSongId;
+
+    /**  */
+    private Integer subjectId;
+
+    /**  */
+    private String subjectName;
+
+    /**  */
+    private String mp3Url = "";
+
+    /** 速度 */
+    private Integer speed;
+
+    /**  */
+    private String xmlUrl = "";
+
+    /**  */
+    private String examSongName;
+
+    /**  */
+    private String categoriesName;
+
+    /**  */
+    private Integer categoriesId;
+
+    /**  */
+    private String type;
+
+    /**  */
+    private String url = "";
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getExamSongId() {
+        return examSongId;
+    }
+
+    public void setExamSongId(Integer examSongId) {
+        this.examSongId = examSongId;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public String getMp3Url() {
+        return mp3Url;
+    }
+
+    public void setMp3Url(String mp3Url) {
+        this.mp3Url = mp3Url;
+    }
+
+    public Integer getSpeed() {
+        return speed;
+    }
+
+    public void setSpeed(Integer speed) {
+        this.speed = speed;
+    }
+
+    public String getXmlUrl() {
+        return xmlUrl;
+    }
+
+    public void setXmlUrl(String xmlUrl) {
+        this.xmlUrl = xmlUrl;
+    }
+
+    public String getExamSongName() {
+        return examSongName;
+    }
+
+    public void setExamSongName(String examSongName) {
+        this.examSongName = examSongName;
+    }
+
+    public String getCategoriesName() {
+        return categoriesName;
+    }
+
+    public void setCategoriesName(String categoriesName) {
+        this.categoriesName = categoriesName;
+    }
+
+    public Integer getCategoriesId() {
+        return categoriesId;
+    }
+
+    public void setCategoriesId(Integer categoriesId) {
+        this.categoriesId = categoriesId;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    @Override
+    public String toString() {
+        return "MusicSheetMessage{" +
+                "id='" + id + '\'' +
+                ", examSongId='" + examSongId + '\'' +
+                ", subjectId='" + subjectId + '\'' +
+                ", subjectName='" + subjectName + '\'' +
+                ", mp3Url='" + mp3Url + '\'' +
+                ", speed='" + speed + '\'' +
+                ", xmlUrl='" + xmlUrl + '\'' +
+                ", examSongName='" + examSongName + '\'' +
+                ", categoriesName='" + categoriesName + '\'' +
+                ", categoriesId='" + categoriesId + '\'' +
+                ", type='" + type + '\'' +
+                ", url='" + url + '\'' +
+                '}';
+    }
+}

+ 61 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkRoomMusicSheetData.java

@@ -0,0 +1,61 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+//学员伴奏下载
+public class ImNetworkRoomMusicSheetData {
+	@ApiModelProperty(value = "课程编号")
+	private Long courseScheduleId;
+
+	@ApiModelProperty(value = "伴奏编号")
+	private Integer musicSheetAccompanimentId;
+
+	@ApiModelProperty(value = "用户")
+	private Integer userId;
+
+	@ApiModelProperty(value = "0学生1老师")
+	private Integer userType;
+
+	@ApiModelProperty(value = "伴奏下载状态(1下载成功0下载中2下载失败)")
+	private Integer status;
+
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	public Integer getUserType() {
+		return userType;
+	}
+
+	public void setUserType(Integer userType) {
+		this.userType = userType;
+	}
+
+	public Integer getMusicSheetAccompanimentId() {
+		return musicSheetAccompanimentId;
+	}
+
+	public void setMusicSheetAccompanimentId(Integer musicSheetAccompanimentId) {
+		this.musicSheetAccompanimentId = musicSheetAccompanimentId;
+	}
+
+	public Integer getStatus() {
+		return status;
+	}
+
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+
+	public Long getCourseScheduleId() {
+		return courseScheduleId;
+	}
+
+	public void setCourseScheduleId(Long courseScheduleId) {
+		this.courseScheduleId = courseScheduleId;
+	}
+}

+ 11 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkRoomMusicSheetDownloadData.java

@@ -1,16 +1,22 @@
 package com.yonge.cooleshow.biz.dal.dto;
 
+import io.swagger.annotations.ApiModelProperty;
+
 //网络教室伴奏下载信息
 public class ImNetworkRoomMusicSheetDownloadData {
-    //下载状态
+    @ApiModelProperty(value = "伴奏下载状态(1下载成功0下载中2下载失败)")
     private Integer status;
-    //伴奏原音
+
+    @ApiModelProperty(value = "伴奏原音")
     private String url;
-    //伴奏名
+
+    @ApiModelProperty(value = "伴奏名")
     private String examSongName;
-    //伴奏编号
+
+    @ApiModelProperty(value = "伴奏编号")
     private Integer examSongId;
-    //是否开启伴奏
+
+    @ApiModelProperty(value = "是否开启伴奏")
     private Boolean enable = false;
 
     public Boolean getEnable() {

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

@@ -21,7 +21,7 @@ public class ImNetworkRoomResult extends ImNetworkRoom {
     private ImNetworkRoomMember roomMember;
 
     @ApiModelProperty(value = "当前用户伴奏信息")
-    private List<CourseScheduleStudentMusicScoreResult> musicScoreResults;
+    private List<CourseScheduleStudentMusicSheetResult> musicSheetResults;
 
     @ApiModelProperty(value = "节拍器参数")
     private ImNetworkCustomMessage midiJson = new ImNetworkCustomMessage();
@@ -66,11 +66,11 @@ public class ImNetworkRoomResult extends ImNetworkRoom {
         this.roomMember = roomMember;
     }
 
-    public List<CourseScheduleStudentMusicScoreResult> getMusicScoreResults() {
-        return musicScoreResults;
+    public List<CourseScheduleStudentMusicSheetResult> getMusicSheetResults() {
+        return musicSheetResults;
     }
 
-    public void setMusicScoreResults(List<CourseScheduleStudentMusicScoreResult> musicScoreResults) {
-        this.musicScoreResults = musicScoreResults;
+    public void setMusicSheetResults(List<CourseScheduleStudentMusicSheetResult> musicSheetResults) {
+        this.musicSheetResults = musicSheetResults;
     }
 }

+ 6 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleStudentMusicScore.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleStudentMusicSheet.java

@@ -12,13 +12,13 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import java.io.Serializable;
 
 /**
- * (CourseScheduleStudentMusicScore)表实体类
+ * (CourseScheduleStudentMusicSheet)表实体类
  *
  * @author zx
  * @since 2022-04-02 15:56:01
  */
-@ApiModel(value = "course_schedule_student_music_score-${tableInfo.comment}")
-public class CourseScheduleStudentMusicScore implements Serializable {
+@ApiModel(value = "course_schedule_student_music_sheet-${tableInfo.comment}")
+public class CourseScheduleStudentMusicSheet implements Serializable {
     @TableId(value = "id_", type = IdType.AUTO)
     @ApiModelProperty(value = "主键")
     private Long id;
@@ -37,7 +37,7 @@ public class CourseScheduleStudentMusicScore implements Serializable {
 
     @TableField("music_sheet_accompaniment_id_")
     @ApiModelProperty(value = "伴奏编号")
-    private Integer musicSheetAccompanimentId;
+    private Long musicSheetAccompanimentId;
 
     @TableField("play_status_")
     @ApiModelProperty(value = "原音播放状态(1是0否)")
@@ -96,11 +96,11 @@ public class CourseScheduleStudentMusicScore implements Serializable {
         this.downStatus = downStatus;
     }
 
-    public Integer getMusicSheetAccompanimentId() {
+    public Long getMusicSheetAccompanimentId() {
         return musicSheetAccompanimentId;
     }
 
-    public void setMusicSheetAccompanimentId(Integer musicSheetAccompanimentId) {
+    public void setMusicSheetAccompanimentId(Long musicSheetAccompanimentId) {
         this.musicSheetAccompanimentId = musicSheetAccompanimentId;
     }
 

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

@@ -1,20 +0,0 @@
-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();
-}
-

+ 17 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleStudentMusicSheetService.java

@@ -0,0 +1,17 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentMusicSheetDao;
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentMusicSheet;
+
+/**
+ * (CourseScheduleStudentMusicSheet)表服务接口
+ *
+ * @author zx
+ * @since 2022-04-02 15:56:01
+ */
+public interface CourseScheduleStudentMusicSheetService extends IService<CourseScheduleStudentMusicSheet> {
+
+    CourseScheduleStudentMusicSheetDao getDao();
+}
+

+ 13 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImNetworkRoomService.java

@@ -2,6 +2,8 @@ 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.ImNetworkCustomMessage;
+import com.yonge.cooleshow.biz.dal.dto.ImNetworkRoomMusicSheetData;
 import com.yonge.cooleshow.biz.dal.dto.ImNetworkRoomResult;
 import com.yonge.cooleshow.biz.dal.dto.NetworkRoomResult;
 import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoom;
@@ -22,9 +24,18 @@ public interface ImNetworkRoomService extends IService<ImNetworkRoom> {
     HttpResponseResult<ImNetworkRoomResult> joinRoom(Long courseScheduleId, UserRoleEnum userRole) throws Exception;
 
     //加入网络教室成功
-    void joinRoomSuccess(String roomId, Long userId, UserRoleEnum userRole) throws Exception;
+    void joinRoomSuccess(String roomId, UserRoleEnum userRole) throws Exception;
 
     //加入网络教室失败
-    void joinRoomFailure(String roomId, Long userId);
+    void joinRoomFailure(String roomId);
+
+    //退出房间
+    void leaveRoom(String roomId,UserRoleEnum userRole) throws Exception;
+
+    //控制用户节拍器
+    void sendImPlayMidiMessage(ImNetworkCustomMessage customMessage) throws Exception;
+
+    //老师通知学员下载伴奏
+    void pushDownloadMusicSheetMsg(ImNetworkRoomMusicSheetData musicSheetData);
 }
 

+ 8 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleStudentMusicScoreServiceImpl.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleStudentMusicSheetServiceImpl.java

@@ -1,27 +1,27 @@
 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 com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentMusicSheetDao;
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentMusicSheet;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleStudentMusicSheetService;
 import org.springframework.stereotype.Service;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * (CourseScheduleStudentMusicScore)表服务实现类
+ * (CourseScheduleStudentMusicSheet)表服务实现类
  *
  * @author zx
  * @since 2022-04-02 15:56:01
  */
-@Service("courseScheduleStudentMusicScoreService")
-public class CourseScheduleStudentMusicScoreServiceImpl extends ServiceImpl<CourseScheduleStudentMusicScoreDao, CourseScheduleStudentMusicScore> implements CourseScheduleStudentMusicScoreService {
+@Service("courseScheduleStudentMusicSheetService")
+public class CourseScheduleStudentMusicSheetServiceImpl extends ServiceImpl<CourseScheduleStudentMusicSheetDao, CourseScheduleStudentMusicSheet> implements CourseScheduleStudentMusicSheetService {
 
-    private final static Logger log = LoggerFactory.getLogger(CourseScheduleStudentMusicScoreServiceImpl.class);
+    private final static Logger log = LoggerFactory.getLogger(CourseScheduleStudentMusicSheetServiceImpl.class);
 
     @Override
-    public CourseScheduleStudentMusicScoreDao getDao() {
+    public CourseScheduleStudentMusicSheetDao getDao() {
         return this.baseMapper;
     }
 

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

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
@@ -8,10 +8,7 @@ import com.yonge.cooleshow.biz.dal.constant.SysConfigConstant;
 import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomDao;
 import com.yonge.cooleshow.biz.dal.dao.SysConfigDao;
 import com.yonge.cooleshow.biz.dal.dto.*;
-import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
-import com.yonge.cooleshow.biz.dal.entity.IMApiResultInfo;
-import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoom;
-import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember;
+import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.ImNetworkRoomErrorEnum;
 import com.yonge.cooleshow.biz.dal.enums.ImNetworkRoomMemberChangedEnum;
 import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
@@ -28,10 +25,8 @@ import org.springframework.stereotype.Service;
 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;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 网络教室房间(ImNetworkRoom)表服务实现类
@@ -51,13 +46,15 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     @Resource
     private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
     @Resource
-    private CourseScheduleStudentMusicScoreService courseScheduleStudentMusicScoreService;
+    private CourseScheduleStudentMusicSheetService courseScheduleStudentMusicSheetService;
     @Resource
     private CourseScheduleService courseScheduleService;
     @Resource
     private SysConfigDao sysConfigDao;
     @Resource
     private IMHelper imHelper;
+    @Resource
+    private MusicSheetAccompanimentService musicSheetAccompanimentService;
 
     @Override
     public ImNetworkRoomDao getDao() {
@@ -98,9 +95,9 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
             joinRoomResult.setMidiJson(courseScheduleStudentPaymentService.getMemberMidi(courseScheduleId,sysUser.getId()));
         }
         //获取用户已下载的伴奏列表
-        List<CourseScheduleStudentMusicScoreResult> musicScoreResults = courseScheduleStudentMusicScoreService.getDao().
-                queryByScoreIdAndCourseId(null,courseScheduleId,sysUser.getId(),null,null);
-        joinRoomResult.setMusicScoreResults(musicScoreResults);
+        List<CourseScheduleStudentMusicSheetResult> musicSheetResults = courseScheduleStudentMusicSheetService.getDao().
+                queryBySheetIdAndCourseId(null,courseScheduleId,sysUser.getId(),null,null);
+        joinRoomResult.setMusicSheetResults(musicSheetResults);
         //课程结束后关闭教室的时间
         String autoCloseNetworkRoomTime = sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE);
         joinRoomResult.setAutoCloseNetworkRoomTime(autoCloseNetworkRoomTime);
@@ -117,10 +114,11 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void joinRoomSuccess(String roomId, Long userId,UserRoleEnum userRole) throws Exception {
-        log.info("joinRoomSuccess: roomId={}, userId={}", roomId, userId);
+    public void joinRoomSuccess(String roomId,UserRoleEnum userRole) throws Exception {
         SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
                 orElseThrow(()-> new BizException("请登录"));
+        Long userId = sysUser.getId();
+        log.info("joinRoomSuccess: roomId={}, userId={}", roomId, userId);
         Date now = new Date();
         //获取房间信息
         this.initRoom(roomId, Long.parseLong(roomId), userRole, userId, now);
@@ -139,8 +137,91 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     }
 
     @Override
-    public void joinRoomFailure(String roomId, Long userId) {
-        log.info("joinRoomSuccess: roomId={}, userId={}", roomId, userId);
+    @Transactional(rollbackFor = Exception.class)
+    public void joinRoomFailure(String roomId) {
+        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
+                orElseThrow(()-> new BizException("请登录"));
+        Long userId = sysUser.getId();
+        log.info("joinRoomFailure: roomId={}, userId={}", roomId, userId);
+        imNetworkRoomMemberService.getDao().delByRidAndUid(roomId, userId);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void leaveRoom(String roomId,UserRoleEnum userRole) throws Exception {
+        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
+                orElseThrow(()-> new BizException("请登录"));
+        Long userId = sysUser.getId();
+        log.info("leaveRoom: roomId={}, userId={}", roomId, userId);
+        long courseScheduleId = Long.parseLong(roomId);
+        if (userRole == UserRoleEnum.TEACHER){
+            //如果老师退出房间,关闭伴奏
+            courseScheduleStudentMusicSheetService.getDao().closePlayStatus(courseScheduleId);
+            courseScheduleStudentPaymentService.getDao().adjustPlayMidi(courseScheduleId, null, null);
+            courseScheduleStudentPaymentService.getDao().adjustExamSong(courseScheduleId, null, null);
+        }
+        ImNetworkRoomMember roomMember = imNetworkRoomMemberService.getDao().findByRidAndUid(roomId, userId);
+        //删除用户信息
+        imNetworkRoomMemberService.getDao().delByRidAndUid(roomId,userId);
+        //发送退出房间的消息
+        ImNetworkRoomMemberChangedMessage msg = new ImNetworkRoomMemberChangedMessage(roomMember,ImNetworkRoomMemberChangedEnum.JOIN);
+        imHelper.publishMessage(userId.toString(), roomId, msg);
+        imHelper.quit(new String[]{userId.toString()}, roomId);
+        //记录考勤信息
+        //是否删除房间信息
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void sendImPlayMidiMessage(ImNetworkCustomMessage customMessage) throws Exception {
+        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
+                orElseThrow(()-> new BizException("请登录"));
+        Long userId = sysUser.getId();
+        Long courseScheduleId = customMessage.getCourseScheduleId();
+        log.info("sendImPlayMidiMessage: roomId={}, userId={}", courseScheduleId, userId);
+        ImNetworkMetronomeMessage displayMessage = new ImNetworkMetronomeMessage(customMessage);
+        imHelper.publishMessage(userId.toString(), courseScheduleId.toString(), displayMessage, 0);
+        //记录节拍器信息
+        courseScheduleStudentPaymentService.getDao().adjustPlayMidi(courseScheduleId,userId,customMessage.toString());
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void pushDownloadMusicSheetMsg(ImNetworkRoomMusicSheetData musicSheetData) {
+        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
+                orElseThrow(()-> new BizException("请登录"));
+        Long userId = sysUser.getId();
+        Long courseScheduleId = musicSheetData.getCourseScheduleId();
+        log.info("pushDownloadMusicSheetMsg: roomId={}, userId={}", courseScheduleId, userId);
+        //获取已通知下载的伴奏列表
+        List<CourseScheduleStudentMusicSheetResult> musicSheetResults = courseScheduleStudentMusicSheetService.getDao().queryBySheetIdAndCourseId(musicSheetData.getMusicSheetAccompanimentId(),
+                courseScheduleId, null, null, UserRoleEnum.STUDENT.ordinal());
+        ImNetworkMusicSheetDownloadMessageContent content = musicSheetAccompanimentService.getDao().findMsgContentByAccompanimentId(musicSheetData.getMusicSheetAccompanimentId());
+        if (musicSheetResults.size() == 0) {
+            //第一次下载,生成数据
+            List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentService.getDao().queryByCourseId(courseScheduleId);
+            Set<Long> studentIds = courseScheduleStudentPayments.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
+            studentIds.forEach(e -> {
+                CourseScheduleStudentMusicSheetResult musicSheetResult = new CourseScheduleStudentMusicSheetResult();
+                musicSheetResult.setMusicSheetAccompanimentId(accompaniment.getId());
+                musicSheetResult.setSpeed(100);
+                musicSheetResult.setCourseScheduleId(courseScheduleId);
+                musicSheetResult.setUserId(e);
+                musicSheetResult.setUserType(UserRoleEnum.STUDENT.ordinal());
+                musicSheetResults.add(musicSheetResult);
+            });
+            CourseScheduleStudentMusicSheetResult musicSheetResult = new CourseScheduleStudentMusicSheetResult();
+            musicSheetResult.setMusicSheetAccompanimentId(accompaniment.getId());
+            musicSheetResult.setSpeed(100);
+            musicSheetResult.setCourseScheduleId(courseScheduleId);
+            musicSheetResult.setUserId(userId);
+            musicSheetResult.setUserType(UserRoleEnum.TEACHER.ordinal());
+            musicSheetResults.add(musicSheetResult);
+            courseScheduleStudentMusicSheetService.getDao().batchInsert(musicSheetResults);
+        }
+        ImNetworkRoomMusicSheetData musicScoreMessage = JSON.parseObject(JSON.toJSONString(accompaniment), ImNetworkRoomMusicSheetData.class);
+        ImNetworkMusicSheetDownloadMessage msg = new ImNetworkMusicSheetDownloadMessage(musicScoreMessage);
+        imHelper.publishMessage(authUser.getId().toString(), roomId, msg, 0);
     }
 
     //校验用户是否提前进入教室

+ 23 - 8
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleStudentMusicScoreMapper.xml → cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleStudentMusicSheetDao.xml

@@ -1,7 +1,7 @@
 <?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">
+<mapper namespace="com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentMusicSheetDao">
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentMusicSheet">
         <id column="id_" jdbcType="INTEGER" property="id"/>
         <result column="course_schedule_id_" jdbcType="INTEGER" property="courseScheduleId"/>
         <result column="user_id_" jdbcType="INTEGER" property="userId"/>
@@ -17,24 +17,39 @@
 
     <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_
+        , course_schedule_id_, user_id_, down_status_, music_sheet_accompaniment_id_, play_status_,
+    accompaniment_play_status_, user_type_, speed_, create_time_, update_time_
     </sql>
+    <insert id="batchInsert">
+        INSERT INTO course_schedule_student_music_score (course_schedule_id_,user_id_,user_type_,down_status_,
+        music_sheet_accompaniment_id_,play_status_,accompaniment_play_status_,
+                                                         speed_,create_time_,update_time_)
+        VALUE
+        <foreach collection="musicSheet" item="item" separator=",">
+            (#{item.courseScheduleId},#{item.userId},#{item.userType},#{item.downStatus},#{item.musicScoreAccompanimentId},
+            #{item.playStatus},#{item.accompanimentPlayStatus},#{item.speed},now(),now())
+        </foreach>
+    </insert>
+    <update id="closePlayStatus">
+        UPDATE course_schedule_student_music_sheet SET play_status_ = 0,accompaniment_play_status_ = 0,update_time_ = NOW()
+        WHERE course_schedule_id_ = #{courseId}
+    </update>
 
-    <resultMap id="CourseScheduleStudentMusicScoreResult" type="com.yonge.cooleshow.biz.dal.dto.CourseScheduleStudentMusicScoreResult" extends="BaseResultMap">
+    <resultMap id="CourseScheduleStudentMusicSheetResult" type="com.yonge.cooleshow.biz.dal.dto.CourseScheduleStudentMusicSheetResult" 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
+    <select id="queryBySheetIdAndCourseId" resultMap="CourseScheduleStudentMusicSheetResult">
+        SELECT cssm.*,msa.audio_file_url_ mp3_url_,ms.audio_file_url_,ms.music_sheet_name_  FROM course_schedule_student_music_sheet 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 test="musicSheetAccompanimentId != null">
+                AND cssm.music_sheet_accompaniment_id_ = #{musicSheetAccompanimentId}
             </if>
             <if test="userType != null">
                 AND cssm.user_type_ = #{userType}

+ 30 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -35,6 +35,30 @@
     <update id="cleanPlayMidi">
         UPDATE course_schedule_student_payment SET play_midi_ = NULL WHERE course_id_ = #{courseScheduleId}
     </update>
+    <update id="adjustPlayMidi">
+        UPDATE course_schedule_student_payment cssp
+        <set>
+            <if test="content == null or content == ''">
+                cssp.play_midi_ = NULL,cssp.update_time_ = NOW()
+            </if>
+            <if test="content != null and content != ''">
+                cssp.play_midi_ = #{content},cssp.update_time_ = NOW()
+            </if>
+        </set>
+        <where>
+            cssp.course_id_ = #{courseScheduleId}
+            <if test="userId != null and userId != ''">
+                AND FIND_IN_SET(cssp.user_id_,#{userId})
+            </if>
+        </where>
+    </update>
+    <update id="adjustExamSong">
+        UPDATE course_schedule_student_payment SET music_sheet_download_json_ = #{examSongJson}
+        WHERE course_id_ = #{roomId}
+        <if test="userId != null">
+            AND user_id_ = #{userId}
+        </if>
+    </update>
     <select id="queryStudentIds" resultType="java.lang.Long">
         SELECT DISTINCT user_id_ FROM course_schedule_student_payment
         <where>
@@ -48,11 +72,15 @@
     </select>
     <select id="getMidiByCourseIdAndUserId" resultType="java.lang.String">
         SELECT play_midi_ FROM course_schedule_student_payment
-        WHERE user_id_ = #{userId} AND course_schedule_id_ = #{courseScheduleId} LIMIT 1
+        WHERE user_id_ = #{userId} AND course_id_ = #{courseScheduleId} LIMIT 1
     </select>
     <select id="getMusicSheetByCourseIdAndUserId" resultType="java.lang.String">
         SELECT music_sheet_download_json_ FROM course_schedule_student_payment
-        WHERE user_id_ = #{userId} AND cssp.course_schedule_id_ = #{courseScheduleId} LIMIT 1
+        WHERE user_id_ = #{userId} AND course_id_ = #{courseScheduleId} LIMIT 1
+    </select>
+    <select id="queryByCourseId" resultMap="BaseResultMap">
+        SELECT <include refid="Base_Column_List"/> FROM course_schedule_student_payment
+        WHERE course_id_ = #{courseScheduleId}
     </select>
 
 </mapper>

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

@@ -42,6 +42,9 @@
         room_id_ = VALUES(room_id_),
         user_id_ = VALUES(user_id_))
     </insert>
+    <delete id="delByRidAndUid">
+        DELETE FROM im_network_room_member WHERE room_id_ = #{roomId} AND user_id_ = #{userId}
+    </delete>
     <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

+ 7 - 7
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseScheduleStudentMusicScoreController.java → cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseScheduleStudentMusicSheetController.java

@@ -1,29 +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.biz.dal.service.CourseScheduleStudentMusicSheetService;
 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;
 
 /**
- * (CourseScheduleStudentMusicScore)表控制层
+ * (CourseScheduleStudentMusicSheet)表控制层
  *
  * @author zx
  * @since 2022-04-02 15:56:00
  */
 @Api(tags = "")
 @RestController
-@RequestMapping("/courseScheduleStudentMusicScore")
-public class CourseScheduleStudentMusicScoreController extends BaseController {
+@RequestMapping("/courseScheduleStudentMusicSheet")
+public class CourseScheduleStudentMusicSheetController extends BaseController {
     /**
      * 服务对象
      */
     @Resource
-    private CourseScheduleStudentMusicScoreService courseScheduleStudentMusicScoreService;
+    private CourseScheduleStudentMusicSheetService courseScheduleStudentMusicSheetService;
 
 }
 

+ 37 - 11
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImNetworkRoomController.java

@@ -1,6 +1,9 @@
 package com.yonge.cooleshow.teacher.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
+import com.yonge.cooleshow.biz.dal.dto.ImNetworkCustomMessage;
+import com.yonge.cooleshow.biz.dal.dto.ImNetworkRoomMusicSheetData;
 import com.yonge.cooleshow.biz.dal.dto.ImNetworkRoomResult;
 import com.yonge.cooleshow.biz.dal.dto.ImNetworkRoomStatusNotify;
 import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
@@ -10,12 +13,10 @@ 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 io.swagger.annotations.ApiOperation;
 import org.springframework.http.MediaType;
-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 org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.util.Optional;
@@ -46,13 +47,38 @@ public class ImNetworkRoomController extends BaseController {
     }
 
     @ApiOperation("加入网络教室状态回调")
-    @PostMapping(value = "joinRoomStatusNotify", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-    public HttpResponseResult joinRoomStatusNotify(@RequestBody ImNetworkRoomStatusNotify roomStatusNotify) throws Exception {
-        if(roomStatusNotify.isRequestStatus()){
-            imNetworkRoomService.joinRoomSuccess(roomStatusNotify.getRoomId(), roomStatusNotify.getUserId(),UserRoleEnum.TEACHER);
-        }else {
-            imNetworkRoomService.joinRoomFailure(roomStatusNotify.getRoomId(), roomStatusNotify.getUserId());
-        }
+    @PostMapping(value = "joinRoomSuccess", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public HttpResponseResult joinRoomSuccess(Long courseScheduleId) throws Exception {
+        imNetworkRoomService.joinRoomSuccess(courseScheduleId.toString(),UserRoleEnum.TEACHER);
+        return succeed();
+    }
+
+    @ApiOperation("加入网络教室状态回调")
+    @PostMapping(value = "joinRoomFailure", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public HttpResponseResult joinRoomFailure(Long courseScheduleId){
+        imNetworkRoomService.joinRoomFailure(courseScheduleId.toString());
+        return succeed();
+    }
+
+    @ApiOperation("退出网络教室")
+    @ApiImplicitParam(name = "courseScheduleId", dataType = "Long", value = "课程编号")
+    @PostMapping(value = "/leave", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public HttpResponseResult leaveRoom(Long courseScheduleId) throws Exception {
+        imNetworkRoomService.leaveRoom(courseScheduleId.toString(),UserRoleEnum.TEACHER);
+        return succeed();
+    }
+
+    @ApiOperation("控制学员节拍器")
+    @PostMapping(value = "/sendImPlayMidiMessage", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public HttpResponseResult sendImPlayMidiMessage(@RequestBody ImNetworkCustomMessage customMessage) throws Exception {
+        imNetworkRoomService.sendImPlayMidiMessage(customMessage);
+        return succeed();
+    }
+
+    @ApiOperation("老师通知学员下载伴奏")
+    @PostMapping(value = "/pushDownloadMusicSheetMsg", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public Object pushDownloadMusicSheetMsg(@RequestBody ImNetworkRoomMusicSheetData musicSheetData) throws Exception {
+        imNetworkRoomService.pushDownloadMusicSheetMsg(musicSheetData);
         return succeed();
     }
 }