Pārlūkot izejas kodu

Merge branch 'feature/0803-im'

zouxuan 2 gadi atpakaļ
vecāks
revīzija
e245c819c8

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkDeviceControlDto.java

@@ -39,4 +39,7 @@ public class ImNetworkDeviceControlDto {
 
 	@ApiModelProperty("服务提供方")
 	private String serviceProvider;
+
+	@ApiModelProperty("是否允许用户自行解除静音")
+	private Boolean cancelMuteFlag;
 }

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseSchedule.java

@@ -103,5 +103,9 @@ public class CourseSchedule implements Serializable {
     @TableField("mute_all_")
     private Boolean muteAll;
 
+    @ApiModelProperty("是否允许用户自行解除静音")
+    @TableField("cancel_mute_flag_")
+    private Boolean cancelMuteFlag;
+
 }
 

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

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.microsvc.toolkit.middleware.rtc.RTCRoomPluginService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomDao;
 import com.yonge.cooleshow.biz.dal.dao.SysConfigDao;
@@ -302,8 +303,6 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void quitRoomSuccess(String roomId, String imUserId) throws Exception {
-        // 用户ID
-        Long userId = Long.parseLong(imGroupService.analysisImUserId(imUserId));
         // 客户端类型
         ClientEnum clientType = ClientEnum.valueOf(imGroupService.analysisImUserClient(imUserId));
         // 网络教室用户身份
@@ -311,16 +310,16 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
         if (ClientEnum.STUDENT == clientType) {
             userRole = RoleEnum.RoleStudent;
         }
-        log.info("quitRoomSuccess: roomId={}, userId={}", roomId, userId);
+        log.info("quitRoomSuccess: roomId={}, imUserId={}", roomId, imUserId);
         //防止幂等
         String QUIT_ROOM_SUCCESS = "quitRoomSuccess:";
-        StringBuilder sb  = new StringBuilder(QUIT_ROOM_SUCCESS).append(roomId).append(userId);
-        if (Boolean.FALSE.equals(redisTemplate.opsForValue().setIfAbsent(sb.toString(), userId, 1L, TimeUnit.SECONDS))){
-            log.info("quitRoomSuccess break: roomId={}, userId={}", roomId, userId);
+        StringBuilder sb  = new StringBuilder(QUIT_ROOM_SUCCESS).append(roomId).append(imUserId);
+        if (Boolean.FALSE.equals(redisTemplate.opsForValue().setIfAbsent(sb.toString(), imUserId, 1L, TimeUnit.SECONDS))){
+            log.info("quitRoomSuccess break: roomId={}, imUserId={}", roomId, imUserId);
             return;
         }
         ImNetworkRoomMember roomMember = imNetworkRoomMemberService.lambdaQuery()
-                .eq(ImNetworkRoomMember::getUserId, userId)
+                .eq(ImNetworkRoomMember::getUserId, imUserId)
                 .eq(ImNetworkRoomMember::getRoomId, roomId)
                 .eq(ImNetworkRoomMember::getRole, userRole.getValue())
                 .last("LIMIT 1").one();
@@ -331,23 +330,21 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
         CourseSchedule courseSchedule = Optional.ofNullable(courseScheduleService.getById(roomId))
                 .orElseThrow(()->new BizException("房间信息不存在"));
         Long courseScheduleId = courseSchedule.getId();
-        RoleEnum roleEnum = RoleEnum.RoleStudent;
-        if(Objects.equals(courseSchedule.getTeacherId(),userId)
-                && ClientEnum.TEACHER == clientType){
-            roleEnum = RoleEnum.RoleTeacher;
+        Long userId = Long.parseLong(imGroupService.analysisImUserId(imUserId));
+        if(RoleEnum.RoleTeacher == userRole){
             teacherAttendanceService.signOut(userId,courseSchedule);
         }else {
             //记录考勤签退
             studentAttendanceService.signOut(userId,courseSchedule);
         }
 
-        if (roleEnum == RoleEnum.RoleTeacher ||
+        if (RoleEnum.RoleTeacher == userRole ||
                 imNetworkRoomMemberService.lambdaQuery().eq(ImNetworkRoomMember::getRoomId,roomId).count() <= 1){
             //如果老师退出房间,初始化节拍器和伴奏播放配置
             courseScheduleStudentMusicSheetService.getDao().closePlayStatus(courseScheduleId,null);
         }
         //退出房间
-        roomService.quitRoomSuccess(roleEnum,roomMember,courseSchedule.getServiceProvider());
+        roomService.quitRoomSuccess(userRole,roomMember,courseSchedule.getServiceProvider());
     }
 
 
@@ -461,6 +458,25 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
                 List<ImNetworkRoomMember> roomMembers = imNetworkRoomMemberService.lambdaQuery()
                         .eq(ImNetworkRoomMember::getRoomId,deviceControl.getRoomId())
                         .eq(ImNetworkRoomMember::getRole,RoleEnum.RoleStudent.getValue()).list();
+                // 同步全员静音状态
+                if (deviceControl.getDeviceType() == ImNetworkDeviceTypeEnum.MICROPHONE || deviceControl.getCancelMuteFlag() != null) {
+                    courseScheduleService.lambdaUpdate().eq(CourseSchedule::getId,deviceControl.getRoomId())
+                                    .set(CourseSchedule::getMuteAll,!deviceControl.getEnable())
+                                    .set(CourseSchedule::getCancelMuteFlag,deviceControl.getCancelMuteFlag())
+                            .update();
+                }
+                /*CourseSchedule courseSchedule = courseScheduleService.getById(deviceControl.getRoomId());
+                // 修改网管课群自定义属性
+                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;
+                }*/
                 if (!CollectionUtils.isEmpty(roomMembers)) {
                     for (ImNetworkRoomMember roomMember : roomMembers) {
                         deviceControl.setUserId(roomMember.getUserId());

+ 2 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -21,13 +21,14 @@
         <result column="service_provider_"  property="serviceProvider"/>
         <result column="room_id_"  property="roomId"/>
         <result column="mute_all_"  property="muteAll"/>
+        <result column="cancel_mute_flag_"  property="cancelMuteFlag"/>
     </resultMap>
 
     <sql id="Base_Column_List">
         id_
         , course_group_id_, type_, status_,class_num_, teacher_id_, class_date_,
             start_time_, end_time_, lock_, lock_time_, ex_student_num_,
-            created_by_, created_time_, updated_by_, updated_time_,service_provider_,room_id_,mute_all_
+            created_by_, created_time_, updated_by_, updated_time_,service_provider_,room_id_,mute_all_,cancel_mute_flag_
     </sql>
 
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"

+ 1 - 1
cooleshow-user/user-classroom/src/main/java/com/yonge/cooleshow/classroom/controller/HereWhiteController.java

@@ -21,7 +21,7 @@ public class HereWhiteController extends BaseController {
 
     @ApiOperation("创建白板,默认全部采用零时白板")
     @PostMapping(value = "create")
-    public HttpResponseResult<ImNetworkHereWhite> userAdd(@RequestBody HereWhiteDto hereWhiteDto) throws Exception {
+    public HttpResponseResult<ImNetworkHereWhite> userAdd(HereWhiteDto hereWhiteDto) throws Exception {
         return succeed(hereWhiteService.create(hereWhiteDto.getName(), hereWhiteDto.getUserNum(),hereWhiteDto.getCourseScheduleId()));
     }
 }