Forráskód Böngészése

网络教室曲库

zouxuan 4 éve
szülő
commit
2b97916948

+ 26 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -301,6 +301,14 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     List<Map<Integer, String>> queryMidiByUserIdsAndCourseId(@Param("userIds") Set<String> userIds, @Param("courseScheduleId") String courseScheduleId);
     List<Map<Integer, String>> queryMidiByUserIdsAndCourseId(@Param("userIds") Set<String> userIds, @Param("courseScheduleId") String courseScheduleId);
 
 
     /**
     /**
+     * 获取用户的节拍器信息
+     * @param userIds
+     * @param courseScheduleId
+     * @return
+     */
+    List<Map<Integer, Integer>> queryExamSongByUserIdsAndCourseId(@Param("userIds") Set<String> userIds, @Param("courseScheduleId") String courseScheduleId);
+
+    /**
      * 获取单个用户的midi
      * 获取单个用户的midi
      * @param courseScheduleId
      * @param courseScheduleId
      * @param userId
      * @param userId
@@ -337,5 +345,23 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     List<Map<Integer, Date>> findStudentLastCourseSchedule(@Param("studentIds") List<Integer> StudentIds);
     List<Map<Integer, Date>> findStudentLastCourseSchedule(@Param("studentIds") List<Integer> StudentIds);
 
 
     List<CourseScheduleStudentPayment> queryAll(Map<String, Object> params);
     List<CourseScheduleStudentPayment> queryAll(Map<String, Object> params);
+
     int countAll(Map<String, Object> params);
     int countAll(Map<String, Object> params);
+
+    /**
+     * 修改学员曲目下载状态
+     * @author zouxuan
+     * @param roomId
+     */
+    void adjustExamSong(@Param("roomId") Long roomId, @Param("userId") Integer userId, @Param("status") Integer status);
+
+    /**
+     * 获取学员的曲目下载状态
+     * @author zouxuan
+     * @param roomId
+     * @param userId
+     * @return
+     */
+    Boolean getExamSongDownloadStatus(@Param("roomId") Long roomId,
+                                      @Param("userId") String userId);
 }
 }

+ 0 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysExamSongDao.java

@@ -6,5 +6,4 @@ import com.ym.mec.common.dal.BaseDAO;
 
 
 public interface SysExamSongDao extends BaseDAO<Integer, SysExamSong> {
 public interface SysExamSongDao extends BaseDAO<Integer, SysExamSong> {
 
 
-	
 }
 }

+ 29 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -147,8 +147,28 @@
 			</if>
 			</if>
 		</where>
 		</where>
 	</update>
 	</update>
+	<update id="adjustExamSong">
+		UPDATE course_schedule_student_payment
+		<set>
+			<if test="status != null">
+				exam_song_download_status_ = #{status}
+			</if>
+		</set>
+		WHERE course_schedule_id_ = #{roomId}
+		<if test="userId != null">
+			AND user_id_ = #{userId}
+		</if>
+	</update>
+	<select id="getExamSongDownloadStatus" resultType="boolean">
+		SELECT CASE WHEN exam_song_download_status_ IS NULL THEN 0 ELSE exam_song_download_status_ END
+		FROM course_schedule_student_payment
+		WHERE course_schedule_id_ = #{roomId}
+		<if test="userId != null">
+			AND user_id_ = #{userId}
+		</if>
+	</select>
 
 
-    <!-- 根据主键删除一条记录 -->
+	<!-- 根据主键删除一条记录 -->
 	<delete id="delete" >
 	<delete id="delete" >
 		DELETE FROM course_schedule_student_payment WHERE id_ = #{id} 
 		DELETE FROM course_schedule_student_payment WHERE id_ = #{id} 
 	</delete>
 	</delete>
@@ -462,6 +482,14 @@
 		</foreach>
 		</foreach>
 		AND cssp.course_schedule_id_ = #{courseScheduleId}
 		AND cssp.course_schedule_id_ = #{courseScheduleId}
 	</select>
 	</select>
+	<select id="queryExamSongByUserIdsAndCourseId" resultType="java.util.Map">
+		SELECT user_id_ 'key',CASE WHEN exam_song_download_status_ IS NULL THEN 0 ELSE exam_song_download_status_ END 'value' FROM course_schedule_student_payment
+		WHERE user_id_ IN
+		<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+			#{userId}
+		</foreach>
+		AND course_schedule_id_ = #{courseScheduleId}
+	</select>
 	<select id="getMidiByCourseIdAndUserId" resultType="java.lang.String">
 	<select id="getMidiByCourseIdAndUserId" resultType="java.lang.String">
 		SELECT cssp.open_play_midi_ FROM course_schedule_student_payment cssp
 		SELECT cssp.open_play_midi_ FROM course_schedule_student_payment cssp
 		WHERE cssp.user_id_ = #{userId} AND cssp.course_schedule_id_ = #{courseScheduleId}
 		WHERE cssp.user_id_ = #{userId} AND cssp.course_schedule_id_ = #{courseScheduleId}

+ 12 - 9
mec-im/src/main/java/com/ym/controller/RoomController.java

@@ -13,9 +13,6 @@ import org.springframework.web.bind.annotation.*;
 
 
 import java.util.List;
 import java.util.List;
 
 
-/**
- * Created by weiqinxiao on 2019/2/25.
- */
 @RestController
 @RestController
 @RequestMapping("/room")
 @RequestMapping("/room")
 @Slf4j
 @Slf4j
@@ -51,11 +48,6 @@ public class RoomController{
         return new BaseResponse<>();
         return new BaseResponse<>();
     }
     }
 
 
-    @RequestMapping(value = "/leaveRoomSuccess")
-    public void leaveRoomSuccess() throws Exception {
-        roomService.leaveRoomSuccess("S1560287", "100136");
-    }
-
     @RequestMapping(value = "/statusSync")
     @RequestMapping(value = "/statusSync")
     public void statusSync(@RequestBody String body) throws Exception {
     public void statusSync(@RequestBody String body) throws Exception {
         ChannelStateNotify notify = JSONObject.parseObject(body, ChannelStateNotify.class);
         ChannelStateNotify notify = JSONObject.parseObject(body, ChannelStateNotify.class);
@@ -72,7 +64,6 @@ public class RoomController{
                 roomService.leaveRoomSuccess(roomId, userId);
                 roomService.leaveRoomSuccess(roomId, userId);
                 break;
                 break;
         }
         }
-//        roomService.statusSync(notify);
     }
     }
 
 
     @RequestMapping(value = "/downgrade", method = RequestMethod.POST)
     @RequestMapping(value = "/downgrade", method = RequestMethod.POST)
@@ -153,6 +144,18 @@ public class RoomController{
         return new BaseResponse<>(result);
         return new BaseResponse<>(result);
     }
     }
 
 
+    @RequestMapping(value = "pushDownloadExamSongMsg", method = RequestMethod.POST)
+    public Object pushDownloadExamSongMsg(Long roomId,Integer examSongId) throws Exception {
+        roomService.pushDownloadExamSongMsg(roomId,examSongId);
+        return new BaseResponse<>();
+    }
+
+    @RequestMapping(value = "adjustExamSong", method = RequestMethod.POST)
+    public Object adjustExamSong(Long roomId,Integer status) throws Exception {
+        roomService.adjustExamSong(roomId,status);
+        return new BaseResponse<>();
+    }
+
     @RequestMapping(value = "/device/batchControl", method = RequestMethod.POST)
     @RequestMapping(value = "/device/batchControl", method = RequestMethod.POST)
     public Object batchControlDevice(@RequestBody ReqDeviceControlData data)throws Exception {
     public Object batchControlDevice(@RequestBody ReqDeviceControlData data)throws Exception {
         log.info("batchControl: {}",JSONObject.toJSON(data));
         log.info("batchControl: {}",JSONObject.toJSON(data));

+ 42 - 0
mec-im/src/main/java/com/ym/mec/im/message/ExamSongDownloadMessageMessage.java

@@ -0,0 +1,42 @@
+package com.ym.mec.im.message;
+
+import com.ym.mec.im.BaseMessage;
+
+public class ExamSongDownloadMessageMessage extends BaseMessage {
+    private String url;
+    private String songName;
+    private static final transient String TYPE = "DY:examSongDownloadMessage";
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getSongName() {
+        return songName;
+    }
+
+    public void setSongName(String songName) {
+        this.songName = songName;
+    }
+
+    public static String getTYPE() {
+        return TYPE;
+    }
+
+    @Override
+    public String toString() {
+        return "{" +
+                "url='" + url + '\'' +
+                ", songName='" + songName + '\'' +
+                '}';
+    }
+
+    @Override
+    public String getObjectName() {
+        return TYPE;
+    }
+}

+ 0 - 3
mec-im/src/main/java/com/ym/mec/im/message/MetronomeMessageMessage.java

@@ -4,9 +4,6 @@ import com.ym.mec.im.BaseMessage;
 import com.ym.pojo.CustomMessage;
 import com.ym.pojo.CustomMessage;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 
 
-/**
- * Created by weiqinxiao on 2019/3/6.
- */
 public class MetronomeMessageMessage extends BaseMessage {
 public class MetronomeMessageMessage extends BaseMessage {
     private CustomMessage content;
     private CustomMessage content;
     private static final transient String TYPE = "DY:PlayMidiMessage";
     private static final transient String TYPE = "DY:PlayMidiMessage";

+ 1 - 0
mec-im/src/main/java/com/ym/pojo/DeviceTypeEnum.java

@@ -8,5 +8,6 @@ public enum DeviceTypeEnum {
     Camera,
     Camera,
     MusicMode,
     MusicMode,
     HandUp,
     HandUp,
+    ExamSong,
     PlayMidi,
     PlayMidi,
 }
 }

+ 41 - 0
mec-im/src/main/java/com/ym/pojo/ExamSongDownloadData.java

@@ -0,0 +1,41 @@
+package com.ym.pojo;
+
+import lombok.Data;
+
+@Data
+public class ExamSongDownloadData {
+	private Boolean examSongDownloadOn;
+	private String roomId;
+	private String userId;
+	private String ticket;
+
+	public Boolean getExamSongDownloadOn() {
+		return examSongDownloadOn;
+	}
+
+	public void setExamSongDownloadOn(Boolean examSongDownloadOn) {
+		this.examSongDownloadOn = examSongDownloadOn;
+	}
+
+	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 String getTicket() {
+		return ticket;
+	}
+	public void setTicket(String ticket) {
+		this.ticket = ticket;
+	}
+
+
+
+}

+ 0 - 3
mec-im/src/main/java/com/ym/pojo/PlayMidiMessageData.java

@@ -2,9 +2,6 @@ package com.ym.pojo;
 
 
 import lombok.Data;
 import lombok.Data;
 
 
-/**
- * Created by weiqinxiao on 2019/3/1.
- */
 @Data
 @Data
 public class PlayMidiMessageData {
 public class PlayMidiMessageData {
 	private String content;
 	private String content;

+ 3 - 1
mec-im/src/main/java/com/ym/pojo/RoomResult.java

@@ -34,6 +34,7 @@ public class RoomResult {
         boolean camera;
         boolean camera;
         boolean microphone;
         boolean microphone;
         boolean handUpOn;
         boolean handUpOn;
+        boolean examSongDownloadOn;
         CustomMessage playMidiJson;
         CustomMessage playMidiJson;
     }
     }
 
 
@@ -44,7 +45,7 @@ public class RoomResult {
         int curPg;
         int curPg;
     }
     }
 
 
-    public void setMembers(List<RoomMember> roomMemberList, Map<Integer,String> midiMap) {
+    public void setMembers(List<RoomMember> roomMemberList, Map<Integer,String> midiMap,Map<Integer,String> examSongMap) {
         for (RoomMember member : roomMemberList) {
         for (RoomMember member : roomMemberList) {
             MemberResult result = new MemberResult();
             MemberResult result = new MemberResult();
             result.setUserId(member.getUid());
             result.setUserId(member.getUid());
@@ -56,6 +57,7 @@ public class RoomResult {
             result.setHandUpOn(member.isHand());
             result.setHandUpOn(member.isHand());
             result.setHeadUrl(member.getHeadUrl());
             result.setHeadUrl(member.getHeadUrl());
             result.setPlayMidiJson(JSONObject.parseObject(midiMap.get(Integer.parseInt(member.getUid())),CustomMessage.class));
             result.setPlayMidiJson(JSONObject.parseObject(midiMap.get(Integer.parseInt(member.getUid())),CustomMessage.class));
+            result.setExamSongDownloadOn(examSongMap.get(member.getRid())=="0"?false:true);
             members.add(result);
             members.add(result);
         }
         }
     }
     }

+ 41 - 6
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -13,12 +13,10 @@ import com.ym.dao.WhiteboardDao;
 import com.ym.job.ScheduleManager;
 import com.ym.job.ScheduleManager;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.CourseScheduleDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
-import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.RongyunBasicUserDto;
 import com.ym.mec.biz.dal.dto.RongyunBasicUserDto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.SysExamSong;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
@@ -89,6 +87,8 @@ public class RoomServiceImpl implements RoomService {
     @Autowired
     @Autowired
     private SysUserFeignService sysUserFeignService;
     private SysUserFeignService sysUserFeignService;
     @Autowired
     @Autowired
+    private SysExamSongDao sysExamSongDao;
+    @Autowired
     private SysConfigDao sysConfigDao;
     private SysConfigDao sysConfigDao;
     @Autowired
     @Autowired
     private RedisTemplate<String,String> redisTemplate;
     private RedisTemplate<String,String> redisTemplate;
@@ -200,6 +200,8 @@ public class RoomServiceImpl implements RoomService {
         } else if (roleEnum == RoleEnum.RoleAssistant && display.isEmpty()) {
         } else if (roleEnum == RoleEnum.RoleAssistant && display.isEmpty()) {
             display = "display://type=0?userId=" + userId + "?uri=";
             display = "display://type=0?userId=" + userId + "?uri=";
         }else {
         }else {
+            //获取学员曲目下载状态
+            userResult.setExamSongDownloadOn(courseScheduleStudentPaymentDao.getExamSongDownloadStatus(courseId,userId));
             Room room = roomDao.findByRid(roomId);
             Room room = roomDao.findByRid(roomId);
             if (room != null) {
             if (room != null) {
                 display = room.getDisplay();
                 display = room.getDisplay();
@@ -226,7 +228,8 @@ public class RoomServiceImpl implements RoomService {
         if(roomMemberList != null && roomMemberList.size() > 0){
         if(roomMemberList != null && roomMemberList.size() > 0){
             Set<String> userIds = roomMemberList.stream().map(e -> e.getUid()).collect(Collectors.toSet());
             Set<String> userIds = roomMemberList.stream().map(e -> e.getUid()).collect(Collectors.toSet());
             Map<Integer,String> midiMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.queryMidiByUserIdsAndCourseId(userIds,courseId.toString()));
             Map<Integer,String> midiMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.queryMidiByUserIdsAndCourseId(userIds,courseId.toString()));
-            roomResult.setMembers(roomMemberList,midiMap);
+            Map<Integer,String> examSongMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.queryExamSongByUserIdsAndCourseId(userIds,courseId.toString()));
+            roomResult.setMembers(roomMemberList,midiMap,examSongMap);
         }
         }
         roomResult.setWhiteboards(whiteboardDao.findByRid(roomId));
         roomResult.setWhiteboards(whiteboardDao.findByRid(roomId));
         log.info("join room: roomId = {}, userId = {}, userName={}, role = {}", roomId, userId, userName, roleEnum);
         log.info("join room: roomId = {}, userId = {}, userName={}, role = {}", roomId, userId, userName, roleEnum);
@@ -850,7 +853,8 @@ public class RoomServiceImpl implements RoomService {
             RoomResult roomResult = new RoomResult();
             RoomResult roomResult = new RoomResult();
             Set<String> userIds = roomMemberList.stream().map(e -> e.getUid()).collect(Collectors.toSet());
             Set<String> userIds = roomMemberList.stream().map(e -> e.getUid()).collect(Collectors.toSet());
             Map<Integer,String> midiMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.queryMidiByUserIdsAndCourseId(userIds,roomId.substring(1)));
             Map<Integer,String> midiMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.queryMidiByUserIdsAndCourseId(userIds,roomId.substring(1)));
-            roomResult.setMembers(roomMemberList,midiMap);
+            Map<Integer,String> examSongMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.queryExamSongByUserIdsAndCourseId(userIds,roomId.substring(1)));
+            roomResult.setMembers(roomMemberList,midiMap,examSongMap);
             return roomResult.getMembers();
             return roomResult.getMembers();
         }
         }
         return null;
         return null;
@@ -1273,6 +1277,37 @@ public class RoomServiceImpl implements RoomService {
         return courseScheduleStudentPaymentDao.queryNoJoinStu(roomId,roomId.substring(1));
         return courseScheduleStudentPaymentDao.queryNoJoinStu(roomId,roomId.substring(1));
     }
     }
 
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void pushDownloadExamSongMsg(Long roomId, Integer examSongId) throws Exception {
+        SysUser authUser = sysUserFeignService.queryUserInfo();
+        ExamSongDownloadMessageMessage msg = new ExamSongDownloadMessageMessage();
+        SysExamSong sysExamSong = sysExamSongDao.get(examSongId);
+        if(sysExamSong == null){
+            throw new BizException("曲目信息不存在");
+        }
+        msg.setSongName(sysExamSong.getName());
+        msg.setUrl(sysExamSong.getUrl());
+        imHelper.publishMessage(authUser.getId().toString(), roomId.toString(), msg, 1);
+        //学员曲目下载状态改为未下载
+        courseScheduleStudentPaymentDao.adjustExamSong(roomId,null,0);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void adjustExamSong(Long roomId, Integer status) throws Exception {
+        if(roomId == null || status == null){
+            throw new BizException("参数校验失败");
+        }
+        SysUser authUser = sysUserFeignService.queryUserInfo();
+        CourseSchedule courseSchedule = courseScheduleDao.get(roomId);
+        courseScheduleStudentPaymentDao.adjustExamSong(roomId,authUser.getId(),status);
+        //给老师发送学员曲目下载状态
+        DeviceStateChangedMessage deviceResourceMessage = new DeviceStateChangedMessage(DeviceTypeEnum.ExamSong.ordinal(), status==0?false:true);
+        deviceResourceMessage.setUserId(courseSchedule.getActualTeacherId().toString());
+        imHelper.publishMessage(authUser.getId().toString(), roomId.toString(), deviceResourceMessage, 1);
+    }
+
     public void updateDisplay(String roomId, String senderId, String display, Integer isIncludeSender) throws Exception {
     public void updateDisplay(String roomId, String senderId, String display, Integer isIncludeSender) throws Exception {
         roomDao.updateDisplayByRid(roomId, display);
         roomDao.updateDisplayByRid(roomId, display);
         DisplayMessage displayMessage = new DisplayMessage(display);
         DisplayMessage displayMessage = new DisplayMessage(display);

+ 17 - 1
mec-im/src/main/java/com/ym/service/RoomService.java

@@ -2,6 +2,7 @@ package com.ym.service;
 
 
 import com.ym.mec.biz.dal.dto.RongyunBasicUserDto;
 import com.ym.mec.biz.dal.dto.RongyunBasicUserDto;
 import com.ym.pojo.*;
 import com.ym.pojo.*;
+import org.apache.ibatis.annotations.Param;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -51,7 +52,6 @@ public interface RoomService {
 
 
     Boolean rejectSpeech(String roomId, String requestId) throws  Exception;
     Boolean rejectSpeech(String roomId, String requestId) throws  Exception;
 
 
-
     Boolean transfer(String roomId, String userId) throws Exception;
     Boolean transfer(String roomId, String userId) throws Exception;
 
 
     Boolean inviteUpgradeRole(String roomId, String userId, int role) throws  Exception;
     Boolean inviteUpgradeRole(String roomId, String userId, int role) throws  Exception;
@@ -77,4 +77,20 @@ public interface RoomService {
      * @return
      * @return
      */
      */
     List<RongyunBasicUserDto> queryNoJoinStu(String roomId);
     List<RongyunBasicUserDto> queryNoJoinStu(String roomId);
+
+    /**
+     * 推送学员开始下载伴奏的通知
+     * @author zouxuan
+     * @param roomId
+     * @param examSongId
+     */
+    void pushDownloadExamSongMsg(Long roomId, Integer examSongId) throws Exception;
+
+    /**
+     * 修改学员伴奏下载状态
+     * @author zouxuan
+     * @param roomId
+     * @param status
+     */
+    void adjustExamSong(Long roomId,Integer status) throws Exception;
 }
 }