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

Merge branch 'feature/0731-bugfix' into saas-1009

Eric 1 éve
szülő
commit
faa6504d0c

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

@@ -2019,7 +2019,7 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @param courseScheduleId 课程ID
      * @param muteAll 全员静音状态
      */
-    void updateGroupMuteAllStatus(@Param("courseScheduleId") Long courseScheduleId, @Param("muteAll") Boolean muteAll);
+    void updateGroupMuteAllStatus(@Param("courseScheduleId") Long courseScheduleId, @Param("muteAll") Boolean muteAll, @Param("cancelMute") Boolean cancelMute);
 
     void updateTeachingPointByClassGroupId(@Param("classGroupId") Integer classGroupId, @Param("teachingPoint") String teachingPoint);
 

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java

@@ -9,6 +9,7 @@ import com.ym.mec.common.enums.BaseEnum;
 
 import io.swagger.annotations.ApiModelProperty;
 
+import lombok.Getter;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
@@ -218,6 +219,10 @@ public class CourseSchedule  extends BaseEntity{
 	@ApiModelProperty("全员静音")
 	private Boolean muteAll;
 
+	@Getter
+	@ApiModelProperty("取消静音")
+	private Boolean cancelMuteFlag;
+
     @ApiModelProperty("教学点")
     private String teachingPoint;
 
@@ -765,6 +770,10 @@ public class CourseSchedule  extends BaseEntity{
 		this.shareMode = shareMode;
 	}
 
+	public void setCancelMuteFlag(Boolean cancelMuteFlag) {
+		this.cancelMuteFlag = cancelMuteFlag;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 10 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -46,6 +46,7 @@
         <result column="settlement_report_flag_" property="settlementReportFlag"/>
         <result column="service_provider_" property="serviceProvider"/>
         <result column="mute_all_" property="muteAll"/>
+        <result column="cancel_mute_flag_" property="cancelMuteFlag"/>
         <result column="live_remind_" property="liveRemind"/>
         <result column="live_room_id_" property="liveRoomId" />
         <result column="continuous_course_" property="continuousCourse" />
@@ -189,6 +190,7 @@
         cs.evaluate_flag_,
         cs.service_provider_,
         cs.mute_all_,
+        cs.cancel_mute_flag_,
         cs.live_room_id_,
         cs.continuous_course_,
         cs.share_mode_
@@ -4285,8 +4287,15 @@
     <!--更新全员静音状态-->
     <update id="updateGroupMuteAllStatus">
         UPDATE course_schedule
-        SET mute_all_ = #{muteAll},
+        <set>
+            <if test="muteAll != null">
+                mute_all_ = #{muteAll},
+            </if>
+            <if test="cancelMute != null">
+                cancel_mute_flag_ = #{cancelMute},
+            </if>
             update_time_ = NOW()
+        </set>
         WHERE id_ = #{courseScheduleId}
     </update>
     <!--更新全员静音状态-->

+ 2 - 1
mec-biz/src/main/resources/config/mybatis/courseScheduleStudentMusicScoreMapper.xml

@@ -113,7 +113,8 @@
             resultMap="CourseScheduleStudentMusicScore">
         SELECT cssm.*,
         CASE WHEN smsa.metronome_mp3_url_ IS NULL OR smsa.metronome_mp3_url_ = '' THEN smsa.mp3_url_ ELSE smsa.metronome_mp3_url_ END url_,
-        sms.url_ mp3_url_,sms.name_ music_score_name_
+        CASE WHEN sms.metronome_url_ IS NULL OR sms.metronome_url_ = '' THEN sms.url_ ELSE sms.metronome_url_ END mp3_url_,
+        sms.name_ music_score_name_
         FROM course_schedule_student_music_score cssm
         LEFT JOIN sys_music_score_accompaniment smsa ON cssm.music_score_accompaniment_id_ = smsa.id_
         LEFT JOIN sys_music_score sms ON sms.id_ = smsa.exam_song_id_

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

@@ -2,12 +2,10 @@ package com.ym.dao;
 
 import com.ym.pojo.RoomMember;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
-import javax.persistence.LockModeType;
 import java.util.List;
 
 /**
@@ -60,21 +58,21 @@ public interface RoomMemberDao extends JpaRepository<RoomMember, Long> {
     boolean existsByRidAndUid(String rid, String uid);
 
     @Modifying
-    @Query(value = "update rongyun_room_member set camera=?3 where rid=?1 and role=?2", nativeQuery = true)
-    void updateCameraByRidAndRole(String roomId, int role, boolean enable);
+    @Query(value = "update rongyun_room_member set camera=?2 where id IN (?1)", nativeQuery = true)
+    void updateCameraByRidAndRole(List<Long> memberIds, boolean enable);
 
 
     @Modifying
-    @Query(value = "update rongyun_room_member set mic=?3 where rid=?1 and role=?2", nativeQuery = true)
-    void updateMicByRidAndRole(String roomId, int role, boolean enable);
+    @Query(value = "update rongyun_room_member set mic=?2 where id IN (?1)", nativeQuery = true)
+    void updateMicByRidAndRole(List<Long> memberIds, boolean enable);
 
 
     @Modifying
-    @Query(value = "update rongyun_room_member set music_mode=?3 where rid=?1 and role=?2", nativeQuery = true)
-    void updateMusicByRidAndRole(String roomId, int role, boolean enable);
+    @Query(value = "update rongyun_room_member set music_mode=?2 where id IN (?1)", nativeQuery = true)
+    void updateMusicByRidAndRole(List<Long> memberIds, boolean enable);
 
 
     @Modifying
-    @Query(value = "update rongyun_room_member set hand=?3 where rid=?1 and role=?2", nativeQuery = true)
-    void updateHandByRidAndRole(String roomId, int role, boolean enable);
+    @Query(value = "update rongyun_room_member set hand=?2 where id IN (?1)", nativeQuery = true)
+    void updateHandByRidAndRole(List<Long> memberIds,  boolean enable);
 }

+ 2 - 1
mec-im/src/main/java/com/ym/enums/DeviceTypeEnum.java

@@ -7,7 +7,8 @@ public enum DeviceTypeEnum {
     HandUp(4),
     ExamSong(5),
     MusicScore(6),
-    MusicScoreAccompaniment(7),;
+    MusicScoreAccompaniment(7),
+    ;
 
 
     private int value;

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

@@ -27,6 +27,8 @@ public class ReqDeviceControlData {
 	private Integer soundVolume = 100;
 	// 服务提供方
 	private String serviceProvider;
+	// 取消静音
+	private Boolean cancelMuteFlag;
 	// 发送用户信息
 	private String sendUserId;
 	private String sendUserName;

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

@@ -14,7 +14,7 @@ import java.util.Date;
 public class RoomMember {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private long id;
+    private @Getter @Setter long id;
 
     private @Getter @Setter String uid;
     private @Getter @Setter String rid;

+ 81 - 18
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -12,6 +12,7 @@ import com.microsvc.toolkit.middleware.rtc.impl.RongCloudRTCPlugin;
 import com.microsvc.toolkit.middleware.rtc.impl.TencentCloudRTCPlugin;
 import com.microsvc.toolkit.middleware.rtc.message.ImGroupMemberWrapper;
 import com.microsvc.toolkit.middleware.rtc.message.RTCRoomMessage;
+import com.microsvc.toolkit.middleware.rtc.message.TencentRequest;
 import com.ym.common.ApiException;
 import com.ym.common.BaseResponse;
 import com.ym.common.DisplayEnum;
@@ -695,6 +696,9 @@ public class RoomServiceImpl implements RoomService {
                     // 生成群组
                     pluginService.chatRoomCreate(roomId, courseSchedule.getName(), courseSchedule.getTeacherId().toString());
 
+                    // 更新群自定义字段
+                    updateChatRoomGroupData(roomId, courseSchedule, pluginService);
+
                     // 群组老师信息
                     List<ImGroupMemberWrapper.ImGroupMember> groupMembers = Lists.newArrayList(ImGroupMemberWrapper.ImGroupMember
                             .builder()
@@ -737,6 +741,39 @@ public class RoomServiceImpl implements RoomService {
 
         }
     }
+
+    /**
+     * 更新群自定义字段
+     * @param roomId 群ID
+     * @param courseSchedule CourseSchedule
+     * @param pluginService RTCRoomPluginService
+     */
+    private void updateChatRoomGroupData(String roomId, CourseSchedule courseSchedule, RTCRoomPluginService pluginService) {
+        // 生成群组自定义字段
+        List<TencentRequest.ChatRoomGroupDefinedData> definedDataList = Lists.newArrayList();
+
+        // 全员静音
+        definedDataList.add(TencentRequest.ChatRoomGroupDefinedData.builder()
+                        .key("isMuteAll").value(courseSchedule.getMuteAll().toString())
+                .build());
+        // 取消静音
+        definedDataList.add(TencentRequest.ChatRoomGroupDefinedData.builder()
+                .key("cancelMuteFlag").value(courseSchedule.getCancelMuteFlag().toString())
+                .build());
+
+        if (CollectionUtils.isNotEmpty(definedDataList)) {
+
+            try {
+                pluginService.chatRoomGroupDefinedData(TencentRequest.ChatRoomGroup.builder()
+                        .groupId(roomId)
+                        .appDefinedData(definedDataList)
+                        .build());
+            } catch (Exception e) {
+                log.error("直播网管课自定义字段设置失败: roomId={}", roomId, e);
+            }
+        }
+    }
+
     private void dismissImGroup(String userId,String roomId, String serviceProvider) throws Exception {
         log.info("dismissImGroup: roomId = {}, userId = {}", roomId, userId);
         String joinImGroupKey = "joinImGroup:" + roomId;
@@ -1819,9 +1856,27 @@ public class RoomServiceImpl implements RoomService {
         }
         data.setServiceProvider(courseSchedule.getServiceProvider());
 
-        // 同步全员静音状态
-        if (Objects.nonNull(data.getMicrophoneOn())) {
-            courseScheduleDao.updateGroupMuteAllStatus(courseScheduleId, !data.getMicrophoneOn());
+        // 同步全员静音状态, 取消静音
+        if (Objects.nonNull(data.getMicrophoneOn()) || Objects.nonNull(data.getCancelMuteFlag())) {
+
+            Boolean muteAll = null;
+            if (Objects.nonNull(data.getMicrophoneOn())) {
+                muteAll = !data.getMicrophoneOn();
+            }
+            courseScheduleDao.updateGroupMuteAllStatus(courseScheduleId, muteAll, data.getCancelMuteFlag());
+
+            CourseSchedule newCourseSchedule = courseScheduleDao.get(courseScheduleId);
+            // 修改网管课群自定义属性
+            RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(courseSchedule.getServiceProvider());
+            if (Objects.nonNull(pluginService) && Objects.nonNull(newCourseSchedule)) {
+                // 更新群自定义字段
+                updateChatRoomGroupData(data.getRoomId(), newCourseSchedule, pluginService);
+            }
+
+            // 取消网络课群静音
+            if (Objects.isNull(data.getMicrophoneOn())) {
+                return true;
+            }
         }
 
         // 课程老师信息
@@ -1858,21 +1913,29 @@ public class RoomServiceImpl implements RoomService {
             data.setUserId(e.getUid());
             controlDevice(data);
         }
-        boolean enable;
-        if (data.getCameraOn() != null) {
-            enable = data.getCameraOn();
-            roomMemberDao.updateCameraByRidAndRole(data.getRoomId(), RoleStudent.getValue(), enable);
-        } else if (data.getMicrophoneOn() != null) {
-            enable = data.getMicrophoneOn();
-            roomMemberDao.updateMicByRidAndRole(data.getRoomId(), RoleStudent.getValue(), enable);
-        } else if (data.getMusicModeOn() != null) {
-            enable = data.getMusicModeOn();
-            roomMemberDao.updateMusicByRidAndRole(data.getRoomId(), RoleStudent.getValue(), enable);
-        } else if (data.getHandUpOn() != null) {
-            enable = data.getHandUpOn();
-            roomMemberDao.updateHandByRidAndRole(data.getRoomId(), RoleStudent.getValue(), enable);
-        }  else
-            return true;
+
+        // 批量修复学生端设备状态
+        List<Long> collect = roomMemberDao.findByRidAndRole(data.getRoomId(), RoleStudent.getValue()).stream()
+                .map(RoomMember::getId).distinct().collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(collect)) {
+
+            boolean enable;
+            if (data.getCameraOn() != null) {
+                enable = data.getCameraOn();
+                roomMemberDao.updateCameraByRidAndRole(collect, enable);
+            } else if (data.getMicrophoneOn() != null) {
+                enable = data.getMicrophoneOn();
+                roomMemberDao.updateMicByRidAndRole(collect, enable);
+            } else if (data.getMusicModeOn() != null) {
+                enable = data.getMusicModeOn();
+                roomMemberDao.updateMusicByRidAndRole(collect, enable);
+            } else if (data.getHandUpOn() != null) {
+                enable = data.getHandUpOn();
+                roomMemberDao.updateHandByRidAndRole(collect, enable);
+            }  else {
+                return true;
+            }
+        }
 
         return true;
     }