浏览代码

节拍器状态同步

zouxuan 5 年之前
父节点
当前提交
f700e1effe

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

@@ -272,4 +272,27 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
      */
     int countStudentNotStartCourseNumWithCourseType(@Param("studentId") Integer studentId,
                                                     @Param("courseScheduleType")CourseSchedule.CourseScheduleType courseScheduleType);
+
+    /**
+     * 批量操作节拍器状态
+     * @param courseScheduleId
+     * @param userId
+     */
+    void adjustPlayMidi(@Param("courseScheduleId") long courseScheduleId, @Param("userId") String userId, @Param("content") String content);
+
+    /**
+     * 获取用户的节拍器信息
+     * @param userIds
+     * @param courseScheduleId
+     * @return
+     */
+    List<Map<Integer, String>> queryMidiByUserIdsAndCourseId(@Param("userIds") Set<String> userIds, @Param("courseScheduleId") String courseScheduleId);
+
+    /**
+     * 获取单个用户的midi
+     * @param courseScheduleId
+     * @param userId
+     * @return
+     */
+    String getMidiByCourseIdAndUserId(@Param("courseScheduleId") String courseScheduleId, @Param("userId") String userId);
 }

+ 31 - 2
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -130,8 +130,25 @@
 			</set> WHERE id_ = #{courseScheduleStudentPayment.id}
 		</foreach>
 	</update>
-	
-	<!-- 根据主键删除一条记录 -->
+    <update id="adjustPlayMidi">
+		UPDATE course_schedule_student_payment cssp
+		<set>
+			<if test="content == null or content == ''">
+				cssp.open_play_midi_ = NULL,cssp.update_time_ = NOW()
+			</if>
+			<if test="content != null and content != ''">
+				cssp.open_play_midi_ = #{content},cssp.update_time_ = NOW()
+			</if>
+		</set>
+		<where>
+			cssp.course_schedule_id_ = #{courseScheduleId}
+			<if test="userId != null and userId != ''">
+				AND FIND_IN_SET(cssp.user_id_,#{userId})
+			</if>
+		</where>
+	</update>
+
+    <!-- 根据主键删除一条记录 -->
 	<delete id="delete" >
 		DELETE FROM course_schedule_student_payment WHERE id_ = #{id} 
 	</delete>
@@ -435,4 +452,16 @@
 		WHERE cssp.user_id_=#{studentId} AND cs.type_= #{courseScheduleType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 		AND CONCAT(class_date_, ' ', start_class_time_)&gt;NOW()
 	</select>
+	<select id="queryMidiByUserIdsAndCourseId" resultType="java.util.Map">
+		SELECT cssp.user_id_ 'key',CASE WHEN cssp.open_play_midi_ IS NULL THEN '' ELSE cssp.open_play_midi_ END 'value' FROM course_schedule_student_payment cssp
+		WHERE cssp.user_id_ IN
+		<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+			#{userId}
+		</foreach>
+		AND cssp.course_schedule_id_ = #{courseScheduleId}
+	</select>
+	<select id="getMidiByCourseIdAndUserId" resultType="java.lang.String">
+		SELECT cssp.open_play_midi_ FROM course_schedule_student_payment cssp
+		WHERE cssp.user_id_ = #{userId} AND cssp.course_schedule_id_ = #{courseScheduleId}
+	</select>
 </mapper>

+ 5 - 0
mec-im/src/main/java/com/ym/dao/RoomDao.java

@@ -31,6 +31,11 @@ public interface RoomDao extends JpaRepository<Room, Long> {
 
     @Transactional
     @Modifying
+    @Query(value = "update rongyun_room set play_midi_json=?2 where rid=?1", nativeQuery = true)
+    public int updatePlayMidiByRid(String rid, String playMidi);
+
+    @Transactional
+    @Modifying
     @Query(value = "update rongyun_room set whiteboard_name_index=?2 where rid=?1", nativeQuery = true)
     public int updateWhiteboardNameIndexByRid(String rid, int whiteboardNameIndex);
 }

+ 0 - 10
mec-im/src/main/java/com/ym/dao/RoomMemberDao.java

@@ -64,16 +64,6 @@ public interface RoomMemberDao extends JpaRepository<RoomMember, Long> {
 
     @Transactional
     @Modifying
-    @Query(value = "update rongyun_room_member set play_midi_json=?3 where rid=?1 and FIND_IN_SET(uid,?2)>0", nativeQuery = true)
-    public int updatePlayMidiJsonByRidAndUid(String rid, String uid, String playMidiJson);
-
-    @Transactional
-    @Modifying
-    @Query(value = "update rongyun_room_member set play_midi_json=?3 where rid=?1 and role=?2", nativeQuery = true)
-    public int updatePlayMidiJsonByRidAndRole(String rid, int role, String playMidiJson);
-
-    @Transactional
-    @Modifying
     @Query(value = "update rongyun_room_member set music_mode=?3 where rid=?1 and uid=?2", nativeQuery = true)
     public int updateMusicByRidAndUid(String rid, String uid, boolean musicMode);
 

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

@@ -34,4 +34,13 @@ public class PlayMidiMessageData {
 	public void setUserId(String userId) {
 		this.userId = userId;
 	}
+
+	@Override
+	public String toString() {
+		return "PlayMidiMessageData{" +
+				"content='" + content + '\'' +
+				", roomId='" + roomId + '\'' +
+				", userId='" + userId + '\'' +
+				'}';
+	}
 }

+ 0 - 2
mec-im/src/main/java/com/ym/pojo/RoomMember.java

@@ -21,7 +21,6 @@ public class RoomMember {
     private @Getter @Setter int role;
     private @Getter @Setter Date joinDt;
     private @Getter @Setter String name;
-    private @Getter @Setter String playMidiJson;
     private @Getter @Setter boolean camera = true;
     private @Getter @Setter boolean musicMode = true;
     private @Getter @Setter boolean mic = true;
@@ -48,7 +47,6 @@ public class RoomMember {
                 ", name='" + name + '\'' +
                 ", camera=" + camera +
                 ", musicMode=" + musicMode +
-                ", playMidiJson=" + playMidiJson +
                 ", mic=" + mic +
                 '}';
     }

+ 5 - 4
mec-im/src/main/java/com/ym/pojo/RoomResult.java

@@ -1,13 +1,14 @@
 package com.ym.pojo;
 
+import com.alibaba.fastjson.JSONObject;
 import lombok.Data;
 import lombok.Getter;
 import lombok.Setter;
-import org.apache.commons.lang.StringEscapeUtils;
 
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Created by weiqinxiao on 2019/2/28.
@@ -31,7 +32,7 @@ public class RoomResult {
         Date joinTime;
         boolean camera;
         boolean microphone;
-        String playMidiJson;
+        CustomMessage playMidiJson;
     }
 
     @Data
@@ -41,7 +42,7 @@ public class RoomResult {
         int curPg;
     }
 
-    public void setMembers(List<RoomMember> roomMemberList) {
+    public void setMembers(List<RoomMember> roomMemberList, Map<Integer,String> midiMap) {
         for (RoomMember member : roomMemberList) {
             MemberResult result = new MemberResult();
             result.setUserId(member.getUid());
@@ -50,7 +51,7 @@ public class RoomResult {
             result.setMicrophone(member.isMic());
             result.setCamera(member.isCamera());
             result.setUserName(member.getName());
-            result.setPlayMidiJson(StringEscapeUtils.unescapeJavaScript(member.getPlayMidiJson()));
+            result.setPlayMidiJson(JSONObject.parseObject(midiMap.get(Integer.parseInt(member.getUid())),CustomMessage.class));
             members.add(result);
         }
     }

+ 38 - 22
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -13,10 +13,7 @@ import com.ym.dao.WhiteboardDao;
 import com.ym.job.ScheduleManager;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.CourseScheduleDao;
-import com.ym.mec.biz.dal.dao.StudentDao;
-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.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.StudentAttendance;
 import com.ym.mec.biz.dal.entity.Teacher;
@@ -30,6 +27,7 @@ import com.ym.mec.biz.service.TeacherAttendanceService;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.im.IMHelper;
 import com.ym.mec.im.message.*;
+import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.pojo.*;
 import com.ym.service.MessageService;
@@ -41,7 +39,6 @@ import com.ym.utils.IdentifierUtils;
 import com.ym.whiteboard.WhiteBoardHelper;
 import io.rong.models.message.GroupMessage;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -49,9 +46,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * Created by super_zou on 2019/11/28.
@@ -72,6 +68,9 @@ public class RoomServiceImpl implements RoomService {
     private RoomMemberDao roomMemberDao;
 
     @Autowired
+    private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
+
+    @Autowired
     private WhiteBoardHelper whiteBoardHelper;
 
     @Autowired
@@ -171,6 +170,8 @@ public class RoomServiceImpl implements RoomService {
         roomResult.setSurplusTime(DateUtil.secondsBetween(new Date(),DateUtil.stringToDate(classDate + " " + endClassTime,DateUtil.EXPANDED_DATE_TIME_FORMAT)));
         RoomResult.MemberResult userResult = new RoomResult.MemberResult();
         List<RoomMember> memberList = roomMemberDao.findByRidAndUid(roomId, userId);
+        String midi = courseScheduleStudentPaymentDao.getMidiByCourseIdAndUserId(roomId.substring(1),userId);
+        userResult.setPlayMidiJson(JSONObject.parseObject(midi,CustomMessage.class));
         if (memberList.isEmpty()) {
             int count = roomMemberDao.countByRidAndExcludeRole(roomId, RoleEnum.RoleAudience.getValue());
             if (!isAudience && count == roomProperties.getMaxCount()) {
@@ -197,8 +198,6 @@ public class RoomServiceImpl implements RoomService {
 //            roomMemberDao.updateCameraByRidAndUid(roomId, userId, !isDisableCamera);
             userResult.setCamera(roomMember.isCamera());
             userResult.setJoinTime(roomMember.getJoinDt());
-            userResult.setPlayMidiJson(StringEscapeUtils.unescapeJavaScript(roomMember.getPlayMidiJson()));
-
             log.info("user exist in the room: roomId={} , userId={}, use the last role={}", roomId, userId, roleEnum);
         }
 
@@ -239,8 +238,11 @@ public class RoomServiceImpl implements RoomService {
         roomResult.setRoomId(roomId);
 
         List<RoomMember> roomMemberList = roomMemberDao.findByRid(roomId);
-        roomResult.setMembers(roomMemberList);
-
+        if(roomMemberList != null && roomMemberList.size() > 0){
+            Set<String> userIds = roomMemberList.stream().map(e -> e.getUid()).collect(Collectors.toSet());
+            Map<Integer,String> midiMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.queryMidiByUserIdsAndCourseId(userIds,roomId.substring(1)));
+            roomResult.setMembers(roomMemberList,midiMap);
+        }
         List<Whiteboard> whiteboardList = whiteboardDao.findByRid(roomId);
         roomResult.setWhiteboards(whiteboardList);
         log.info("join success: roomId = {}, userId = {}, userName={}, role = {}", roomId, userId, userName, roleEnum);
@@ -897,11 +899,15 @@ public class RoomServiceImpl implements RoomService {
     @Override
     public List<RoomResult.MemberResult> getMembers(String roomId) throws ApiException, Exception {
         CheckUtils.checkArgument(roomId != null, "roomId must't be null");
-
         List<RoomMember> roomMemberList = roomMemberDao.findByRid(roomId);
-        RoomResult roomResult = new RoomResult();
-        roomResult.setMembers(roomMemberList);
-        return roomResult.getMembers();
+        if(roomMemberList != null && roomMemberList.size() > 0){
+            RoomResult roomResult = new RoomResult();
+            Set<String> userIds = roomMemberList.stream().map(e -> e.getUid()).collect(Collectors.toSet());
+            Map<Integer,String> midiMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.queryMidiByUserIdsAndCourseId(userIds,roomId.substring(1)));
+            roomResult.setMembers(roomMemberList,midiMap);
+            return roomResult.getMembers();
+        }
+        return null;
     }
 
     @Override
@@ -1390,19 +1396,29 @@ public class RoomServiceImpl implements RoomService {
         }
 //        roomService.sendImPlayMidiMessage(playMidiMessageData);
         GroupMessage groupMessage = new GroupMessage();
-        CustomMessage customMessage = JSONObject.parseObject(playMidiMessageData.getContent(),CustomMessage.class);
+        String content = playMidiMessageData.getContent();
+        String roomId = playMidiMessageData.getRoomId();
+        CustomMessage customMessage = JSONObject.parseObject(content,CustomMessage.class);
         groupMessage.setContent(customMessage);
-        groupMessage.setTargetId(playMidiMessageData.getRoomId().split(","));
+        groupMessage.setTargetId(roomId.split(","));
         groupMessage.setSenderId(sysUser.getId().toString());
         groupMessage.setObjectName("DY:PlayMidiMessage");
         messageService.groupSend(groupMessage);
         //记录节拍器消息
         String userId = playMidiMessageData.getUserId();
-        if(StringUtils.isEmpty(userId)){
-            roomMemberDao.updatePlayMidiJsonByRidAndRole(playMidiMessageData.getRoomId(),RoleEnum.RoleStudent.getValue(), playMidiMessageData.getContent());
+//        long courseId = Long.parseLong(roomId.substring(1));
+        courseScheduleStudentPaymentDao.adjustPlayMidi(Long.parseLong(roomId.substring(1)),userId,content);
+        /*if(StringUtils.isEmpty(userId)){
+            //批量操作节拍器状态
+            courseScheduleStudentPaymentDao.openPlayMidi(courseId,userId,content);
+            roomMemberDao.updatePlayMidiJsonByRidAndRole(roomId,RoleEnum.RoleStudent.getValue(), content);
         }else {
-            roomMemberDao.updatePlayMidiJsonByRidAndUid(playMidiMessageData.getRoomId(),userId,playMidiMessageData.getContent());
-        }
+            //关闭某个学员
+            if(!customMessage.getEnable()){
+                roomMemberDao.updatePlayMidiJsonByRidAndRole(playMidiMessageData.getRoomId(),RoleEnum.RoleTeacher.getValue(), null);
+            }
+            roomMemberDao.updatePlayMidiJsonByRidAndUid(playMidiMessageData.getRoomId(),userId,content);
+        }*/
     }
 
     /*@Override