Ver código fonte

Merge branch 'feature/0803-im' of http://git.dayaedu.com/yonge/cooleshow

zouxuan 2 anos atrás
pai
commit
b04a9d98c3

+ 0 - 4
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupController.java

@@ -137,10 +137,6 @@ public class ImGroupController extends BaseController {
             info = imGroupService.getRongYunInfo(page,size);
             //IM导入
             imGroupService.importInfo(info);
-
-            //为已导入数据更改标识
-            imGroupService.updateStatus(info);
-
         }
     }
 

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/ImController.java

@@ -233,7 +233,7 @@ public class ImController extends BaseController {
     }
 
     private Integer getSpeakerId(String streamId) {
-        return Integer.parseInt(imGroupService.analysisImUserId(streamId.split("_")[1]));
+        return Integer.parseInt(imGroupService.analysisImUserId(streamId.split("_",2)[1]));
     }
 
     private String getRoomUid(String streamId) {

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

@@ -26,7 +26,7 @@ public class ImNetworkRoomResult extends ImNetworkRoom {
     private ImNetworkRoomMember roomMember;
 
     @ApiModelProperty(value = "节拍器参数")
-    private ImNetworkMetronomeMessage midiJson = new ImNetworkMetronomeMessage();
+    private ImNetworkMetronomeMessage playMidiJson = new ImNetworkMetronomeMessage();
 
     @ApiModelProperty("RTC接入参数")
     private RTCRoomConfig rtcRoomConfig;

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

@@ -53,19 +53,19 @@ public class ImNetworkRoomMember implements Serializable {
 
     @TableField("camera_flag_")
     @ApiModelProperty(value = "是否开启摄像头;")
-    private boolean cameraFlag;
+    private boolean camera;
 
     @TableField("mic_flag_")
     @ApiModelProperty(value = "是否开启麦克风")
-    private boolean micFlag;
+    private boolean microphone;
 
     @TableField("music_mode_flag_")
     @ApiModelProperty(value = "是否开启音乐模式")
-    private boolean musicModeFlag;
+    private boolean musicModeOn;
 
     @TableField("hand_flag_")
     @ApiModelProperty(value = "是否举手")
-    private boolean handFlag;
+    private boolean handUpOn;
 
     @ApiModelProperty(value = "当前用户伴奏信息")
     @TableField(exist = false)

+ 1 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UploadFileService.java

@@ -59,9 +59,7 @@ public class UploadFileService {
             uploadReturn.setMessage("上传图片格式错误,目前只支持" + supportType);
             return uploadReturn;
         }
-
-        String root = "d:";
-                //fileRoot;
+        String root = fileRoot;
         if (StringUtils.isBlank(root)) {
             uploadReturn.setMessage("上传临时目录没有配置");
             return uploadReturn;

+ 7 - 22
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java

@@ -834,10 +834,9 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                     String size = jsonObject.getString("size");
                     int duration = jsonObject.getInteger("duration");
                     String content = jsonObject.getString("content");
-                    String name = jsonObject.getString("name");
                     TencentRequest.MessageBody body1 = null;
                     try {
-                        body1 = getTimVideoFileElem(sightUrl,size,duration,content,name);
+                        body1 = getTimVideoFileElem(sightUrl,size,duration,content);
                     } catch (IOException e) {
                         e.printStackTrace();
                     }
@@ -960,10 +959,9 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                     String size = jsonObject.getString("size");
                     int duration = jsonObject.getInteger("duration");
                     String content = jsonObject.getString("content");
-                    String name = jsonObject.getString("name");
                     TencentRequest.MessageBody body1 = null;
                     try {
-                        body1 = getTimVideoFileElem(sightUrl,size,duration,content,name);
+                        body1 = getTimVideoFileElem(sightUrl,size,duration,content);
                     } catch (IOException e) {
                         e.printStackTrace();
                     }
@@ -1007,6 +1005,8 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                 groupImportMessage.setMsgList(list);
                 try {
                     imPluginContext.getPluginService().importGroupMessage(groupImportMessage);
+                    //为已导入数据更改标识
+                    imGroupService.updateStatus(info);
                 } catch (Exception e) {
                     log.error("导入群组IM消息失败 msg:{}",list,e);
                 }
@@ -1081,7 +1081,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
     }
 
     //构建视频请求体
-    public  TencentRequest.MessageBody getTimVideoFileElem(String sightUrl, String size, int duration, String content,String name) throws IOException {
+    public  TencentRequest.MessageBody getTimVideoFileElem(String sightUrl, String size, int duration, String content) throws IOException {
         if (StringUtils.isEmpty(sightUrl) && StringUtils.isEmpty(sightUrl) && duration == 0) {
             return null;
         }
@@ -1097,26 +1097,9 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
             format = "JPG";
         }
 
-        //获取JDK8里的解码器Base64.Decoder,将base64字符串转为字节数组
-        //byte[] bytes = Base64.getDecoder().decode(content);
-        //构建字节数组输入流
-        //bais = new ByteArrayInputStream(bytes);
-
-            //获取图片类型
-            //String suffix = name.substring(name.lastIndexOf(".") + 1);
-            //获取JDK8里的解码器Base64.Decoder,将base64字符串转为字节数组
             byte[] bytes = Base64.getDecoder().decode(content);
             //构建字节数组输入流
             bais = new ByteArrayInputStream(bytes);
-           /* //通过ImageIO把字节数组输入流转为BufferedImage
-            BufferedImage bufferedImage = ImageIO.read(bais);
-
-            //构建文件
-            File imageFile = new File(name);
-            //写入生成文件
-            ImageIO.write(bufferedImage, format, imageFile);*/
-
-
 
 
 
@@ -1132,6 +1115,8 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                 .suffix(format)
                 .build();
 
+        // 获取图片基本信息
+        ImageUtil.imageToBase64(imageReq);
 
         ImHistoryMessageWrapper.TimVideoFileElem timVideoFileElem = new ImHistoryMessageWrapper.TimVideoFileElem();
         timVideoFileElem.setVideoUrl(sightUrl);

+ 4 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImNetworkRoomMemberServiceImpl.java

@@ -50,10 +50,10 @@ public class ImNetworkRoomMemberServiceImpl extends ServiceImpl<ImNetworkRoomMem
         if(Objects.isNull(roomMember)){
             roomMember = new ImNetworkRoomMember();
             roomMember.setRoomId(roomId);
-            roomMember.setCameraFlag(true);
-            roomMember.setHandFlag(false);
-            roomMember.setMicFlag(microphone);
-            roomMember.setMusicModeFlag(false);
+            roomMember.setCamera(true);
+            roomMember.setHandUpOn(false);
+            roomMember.setMicrophone(microphone);
+            roomMember.setMusicModeOn(false);
             roomMember.setRole(userRole.getValue());
             roomMember.setUserId(sysUser.getUserId());
             roomMember.setUsername(sysUser.getUsername());

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

@@ -141,7 +141,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
             setMusicSheetList(roomMemberList,Long.parseLong(roomId));
         }else {
             //获取节拍器信息
-            joinRoomResult.setMidiJson(imNetworkRoomMemberStatusService.getMemberMidi(roomId, sysUser.getUserId()));
+            joinRoomResult.setPlayMidiJson(imNetworkRoomMemberStatusService.getMemberMidi(roomId, sysUser.getUserId()));
         }
         //课程结束后关闭教室的时间
         joinRoomResult.setAutoCloseNetworkRoomTime(sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
@@ -203,7 +203,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
             setMusicSheetList(roomMemberList,Long.parseLong(roomId));
         }else {
             //获取节拍器信息
-            joinRoomResult.setMidiJson(imNetworkRoomMemberStatusService.getMemberMidi(roomId, sysUser.getUserId()));
+            joinRoomResult.setPlayMidiJson(imNetworkRoomMemberStatusService.getMemberMidi(roomId, sysUser.getUserId()));
         }
         //课程结束后关闭教室的时间
         joinRoomResult.setAutoCloseNetworkRoomTime(sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));

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

@@ -68,12 +68,11 @@ public class ImServiceImpl implements ImService {
             RTCRoomMessage.MessageContent.MessageContentBuilder action = RTCRoomMessage.MessageContent.builder()
                     .action(EMemberAction.JOIN.getValue());
 
-            action.handUpOn(roomMember.isHandFlag())
-                    .microphone(roomMember.isMicFlag())
+            action.handUpOn(roomMember.isHandUpOn())
+                    .microphone(roomMember.isMicrophone())
                     .timestamp(new Date().getTime())
-                    .camera(roomMember.isCameraFlag())
+                    .camera(roomMember.isCamera())
                     .role(roomMember.getRole())
-                    .microphone(roomMember.isMicFlag())
                     .sendUserInfo(this.getSendUser(roomMember));
 
             RTCRoomMessage roomMessage = RTCRoomMessage.builder()
@@ -291,16 +290,16 @@ public class ImServiceImpl implements ImService {
                     .orElseThrow(()-> new BizException("用户不在房间内"));
             switch (deviceControl.getDeviceType()) {
                 case CAMERA:
-                    roomMember.setCameraFlag(deviceControl.getEnable());
+                    roomMember.setCamera(deviceControl.getEnable());
                     break;
                 case MICROPHONE:
-                    roomMember.setMicFlag(deviceControl.getEnable());
+                    roomMember.setMicrophone(deviceControl.getEnable());
                     break;
                 case HAND_UP:
-                    roomMember.setHandFlag(deviceControl.getEnable());
+                    roomMember.setHandUpOn(deviceControl.getEnable());
                     break;
                 case MUSIC_MODE:
-                    roomMember.setMusicModeFlag(deviceControl.getEnable());
+                    roomMember.setMusicModeOn(deviceControl.getEnable());
                     break;
                 case EXAM_SONG:
                     ImNetworkRoomMusicSheetDownloadData msg = imNetworkRoomMemberStatusService.getMemberExamSong(roomId, roomMember.getUserId());
@@ -333,7 +332,7 @@ public class ImServiceImpl implements ImService {
     public void pushApproveControlDevice(ImNetworkDeviceControlDto deviceControl, ImNetworkRoomMember roomMember,BasicUserInfo student,BasicUserInfo teacher) throws Exception {
         switch (deviceControl.getDeviceType()) {
             case CAMERA:
-                roomMember.setCameraFlag(deviceControl.getEnable());
+                roomMember.setCamera(deviceControl.getEnable());
                 break;
             case EXAM_SONG:
                 ImNetworkRoomMusicSheetDownloadData msg = imNetworkRoomMemberStatusService.getMemberExamSong(roomMember.getRoomId(), roomMember.getUserId());
@@ -344,7 +343,7 @@ public class ImServiceImpl implements ImService {
                         .set(ImNetworkRoomMemberStatus::getMusicSheetDownloadJson,JSON.toJSONString(msg)).update();
                 break;
             case MICROPHONE:
-                roomMember.setMicFlag(deviceControl.getEnable());
+                roomMember.setMicrophone(deviceControl.getEnable());
                 break;
         }
         if(deviceControl.getDeviceType() == ImNetworkDeviceTypeEnum.CAMERA ||
@@ -416,16 +415,16 @@ public class ImServiceImpl implements ImService {
         ImNetworkDeviceTypeEnum deviceType = deviceStatusSync.getDeviceType();
         switch (deviceType) {
             case CAMERA:
-                roomMember.setCameraFlag(deviceStatusSync.getEnable());
+                roomMember.setCamera(deviceStatusSync.getEnable());
                 break;
             case MICROPHONE:
-                roomMember.setMicFlag(deviceStatusSync.getEnable());
+                roomMember.setMicrophone(deviceStatusSync.getEnable());
                 break;
             case HAND_UP:
-                roomMember.setHandFlag(deviceStatusSync.getEnable());
+                roomMember.setHandUpOn(deviceStatusSync.getEnable());
                 break;
             case MUSIC_MODE:
-                roomMember.setMusicModeFlag(deviceStatusSync.getEnable());
+                roomMember.setMusicModeOn(deviceStatusSync.getEnable());
                 break;
             case EXAM_SONG:
                 ImNetworkRoomMusicSheetDownloadData msg = imNetworkRoomMemberStatusService.getMemberExamSong(roomMember.getRoomId(), roomMember.getUserId());

+ 46 - 21
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java

@@ -874,22 +874,22 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
                     .update(roomMember);
 
             //向直播间发送当前在线人数消息
-//            this.sendOnlineUserCount(roomUid, roomInfo.getSpeakerId(), onlineUserInfo.size());
+            this.sendOnlineUserCount(roomUid, roomInfo.getSpeakerId(), onlineUserInfo.size());
             log.info("opsRoom>>>> looker userInfo: {}", userJsonStr);
-//            //用户离开直播间发送退出房间消息给主讲人
-//            ImRoomMessage message = new ImRoomMessage();
-//            message.setFromUserId(userId.toString());
-//            message.setToChatroomId(roomUid);
-//            message.setClientType(ClientEnum.STUDENT.getCode());
-//            message.setObjectName(ImRoomMessage.LOOKER_LOGIN_OUT);
-//            message.setContent(userId);
-//            try {
-//                this.publishRoomMessage(message);
-//                log.info("opsRoom>>>> looker RC_CHATROOM_LEAVE : {}", userJsonStr);
-//            } catch (Exception e) {
-//                log.error("opsRoom>>>>  looker error RC_CHATROOM_LEAVE {}", e.getMessage());
-//                log.error("opsRoom>>>>  looker error sendMessage {} : RC_CHATROOM_LEAVE : {}", message, userJsonStr);
-//            }
+            //用户离开直播间发送退出房间消息给主讲人
+            ImRoomMessage message = new ImRoomMessage();
+            message.setFromUserId(userId.toString());
+            message.setToChatroomId(roomUid);
+            message.setClientType(ClientEnum.STUDENT.getCode());
+            message.setObjectName(ImRoomMessage.LOOKER_LOGIN_OUT);
+            message.setContent(userId);
+            try {
+                this.publishRoomMessage(message);
+                log.info("opsRoom>>>> looker RC_CHATROOM_LEAVE : {}", userJsonStr);
+            } catch (Exception e) {
+                log.error("opsRoom>>>>  looker error RC_CHATROOM_LEAVE {}", e.getMessage());
+                log.error("opsRoom>>>>  looker error sendMessage {} : RC_CHATROOM_LEAVE : {}", message, userJsonStr);
+            }
         });
 
     }
@@ -1173,10 +1173,8 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
                     .build();
         }
 
-        LiveRoomMessage.MessageContent messageContent = LiveRoomMessage.MessageContent
-                .builder()
-                .sendUserInfo(messageUser)
-                .build();
+        LiveRoomMessage.MessageContent messageContent = getMessageContent(message);
+        messageContent.setSendUserInfo(messageUser);
 
         LiveRoomMessage build = LiveRoomMessage.builder()
                 .isIncludeSender(1)
@@ -1189,13 +1187,40 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
 
             LivePluginService pluginService = livePluginContext.getPluginService(message.getServiceProvider());
             pluginService.sendChatRoomMessage(build);
-            log.info("sendLiveRoomLoginOutMessage>>>> looker {} : roomId={}, userId={}",message.getObjectName(), message.getToChatroomId(), message.getFromUserId());
+            log.info("sendLiveRoomMessage>>>> looker {} : roomId={}, userId={}",message.getObjectName(), message.getToChatroomId(), message.getFromUserId());
         } catch (Exception e) {
             log.error("sendLiveRoomMessage>>>>  looker error {} {}", message.getObjectName(),e.getMessage());
             log.error("sendLiveRoomMessage>>>>  looker error sendMessage {} : {} : : roomId={}, userId={}",message.getObjectName(), message, message.getToChatroomId(), message.getFromUserId());
         }
     }
 
+    private LiveRoomMessage.MessageContent getMessageContent(ImRoomMessage message) {
+
+        switch (message.getObjectName()) {
+            case LiveRoomMessage.FORCED_OFFLINE:
+                return LiveRoomMessage.MessageContent.builder()
+                        .build();
+            case LiveRoomMessage.LOOKER_LOGIN_OUT:
+                return LiveRoomMessage.MessageContent.builder()
+                        .targetId( imGroupService.getImUserId(message.getFromUserId(),message.getClientType()))
+                        .build();
+            case LiveRoomMessage.MEMBER_COUNT:
+                LiveRoomWrapper.LiveRoomVo liveRoomVo = queryRoomInfo(message.getToChatroomId());
+                return LiveRoomMessage.MessageContent.builder()
+                        .count(liveRoomVo.getLookNum().longValue())
+                        .onlineUsers(liveRoomVo.getLookNum().longValue())
+                        .viewers(liveRoomVo.getTotalLookNum().longValue())
+                        .likes(liveRoomVo.getLikeNum().longValue())
+                        .build();
+            case LiveRoomMessage.WELCOME:
+                return LiveRoomMessage.MessageContent.builder()
+                        .build();
+            default:
+                return LiveRoomMessage.MessageContent.builder()
+                        .build();
+        }
+    }
+
     private SysUser getSysUser(Long userId) {
         return Optional.ofNullable(userId)
                 .map(sysUserFeignService::queryUserById)
@@ -2130,7 +2155,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         onlineUserCache.fastPut(userId, userJsonStr);
         log.info("joinRoom>>>> userInfo: {}", userJsonStr);
         //向直播间发送当前在线人数消息
-//        this.sendOnlineUserCount(roomUid, userId, onlineUserCache.size());
+        this.sendOnlineUserCount(roomUid, userId, onlineUserCache.size());
         log.info("join sendOnlineUserCount>>>> param is null   roomUid: {}  fromUserId:{}  count:{}", roomUid, userId, onlineUserCache.size());
         log.info("joinRoom>>>> userInfo: {}", userJsonStr);
         //记录当前用户对应的房间uid

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/ImHistoryMessageWrapper.java

@@ -14,18 +14,23 @@ public class ImHistoryMessageWrapper {
     @ApiModel("ImHistoryMessage-iM语音消息")
     public static class TimSoundElem {
 
+        @JSONField(name = "Url")
         @ApiModelProperty("语音下载地址,可通过该 URL 地址直接下载相应语音。")
         private String Url;
 
+        @JSONField(name = "UUID")
         @ApiModelProperty("语音的唯一标识,客户端用于索引语音的键值")
         private String UUID;
 
+        @JSONField(name = "Size")
         @ApiModelProperty("语音数据大小,单位:字节。")
         private Integer Size;
 
+        @JSONField(name = "Second")
         @ApiModelProperty("语音时长,单位:秒。")
         private Integer Second;
 
+        @JSONField(name = "Download_Flag")
         @ApiModelProperty("语音下载方式标记。目前 Download_Flag 取值只能为2,表示可通过Url字段值的 URL 地址直接下载语音。")
         private Integer Download_Flag;