Browse Source

腾讯网络教室

zouxuan 1 year ago
parent
commit
84d4969c8d

+ 2 - 16
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkBaseDto.java

@@ -2,7 +2,9 @@ package com.yonge.cooleshow.biz.dal.dto;
 
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
+@Data
 public class ImNetworkBaseDto {
 
     @ApiModelProperty(value = "房间号(课程编号)",required = true)
@@ -10,20 +12,4 @@ public class ImNetworkBaseDto {
 
     @ApiModelProperty("客户端类型 ")
     private ClientEnum clientType;
-
-    public Long getRoomId() {
-        return roomId;
-    }
-
-    public void setRoomId(Long roomId) {
-        this.roomId = roomId;
-    }
-
-    public ClientEnum getClientType() {
-        return clientType;
-    }
-
-    public void setClientType(ClientEnum clientType) {
-        this.clientType = clientType;
-    }
 }

+ 9 - 57
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkCustomMessage.java

@@ -3,8 +3,10 @@ package com.yonge.cooleshow.biz.dal.dto;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import io.rong.messages.BaseMessage;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.apache.commons.lang3.StringUtils;
 
+@Data
 public class ImNetworkCustomMessage extends BaseMessage {
     @ApiModelProperty(value = "节拍器开关",required = true)
     private boolean enable;
@@ -21,67 +23,17 @@ public class ImNetworkCustomMessage extends BaseMessage {
     @ApiModelProperty(value = "学员编号列表,都还分割",required = true)
     private String userId;
 
-    @ApiModelProperty(value = "房间号(课程编号)",required = true)
-    private Long roomId;
+    @ApiModelProperty(value = "当前用户")
+    private Long currentUserId;
+
+    @ApiModelProperty(value = "房间号",required = true)
+    private String roomId;
 
     @ApiModelProperty("客户端类型")
     private ClientEnum clientType;
 
-    public Long getRoomId() {
-        return roomId;
-    }
-
-    public void setRoomId(Long roomId) {
-        this.roomId = roomId;
-    }
-
-    public int getPlayVolume() {
-        return playVolume;
-    }
-
-    public void setPlayVolume(int playVolume) {
-        this.playVolume = playVolume;
-    }
-
-    public Boolean getEnable() {
-        return enable;
-    }
-
-    public void setEnable(Boolean enable) {
-        this.enable = enable;
-    }
-
-    public int getCustomType() {
-        return customType;
-    }
-
-    public void setCustomType(int customType) {
-        this.customType = customType;
-    }
-
-    public int getRate() {
-        return rate;
-    }
-
-    public void setRate(int rate) {
-        this.rate = rate;
-    }
-
-    public String getUserId() {
-        return userId;
-    }
-
-    public void setUserId(String userId) {
-        this.userId = userId;
-    }
-
-    public ClientEnum getClientType() {
-        return clientType;
-    }
-
-    public void setClientType(ClientEnum clientType) {
-        this.clientType = clientType;
-    }
+    @ApiModelProperty("服务提供方")
+    private String serviceProvider;
 
     @Override
     public String getType() {

+ 2 - 30
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkMusicSheetDto.java

@@ -1,8 +1,9 @@
 package com.yonge.cooleshow.biz.dal.dto;
 
-import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
+@Data
 public class ImNetworkMusicSheetDto extends ImNetworkBaseDto{
 
     @ApiModelProperty(value = "伴奏编号",required = true)
@@ -11,35 +12,6 @@ public class ImNetworkMusicSheetDto extends ImNetworkBaseDto{
     @ApiModelProperty(value = "伴奏下载状态(1下载成功0下载中2下载失败)",required = true)
     private Integer status;
 
-    @ApiModelProperty("客户端类型 ")
-    private ClientEnum clientType;
-
-    public Long getAccompanimentId() {
-        return accompanimentId;
-    }
-
-    public void setAccompanimentId(Long accompanimentId) {
-        this.accompanimentId = accompanimentId;
-    }
-
-    public Integer getStatus() {
-        return status;
-    }
-
-    public void setStatus(Integer status) {
-        this.status = status;
-    }
-
-    @Override
-    public ClientEnum getClientType() {
-        return clientType;
-    }
-
-    @Override
-    public void setClientType(ClientEnum clientType) {
-        this.clientType = clientType;
-    }
-
     @Override
     public String toString() {
         return "ImNetworkMusicSheetDto{" +

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImService.java

@@ -1,7 +1,9 @@
 package com.yonge.cooleshow.biz.dal.service;
 
+import com.yonge.cooleshow.biz.dal.dto.ImNetworkCustomMessage;
 import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoom;
 import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 网络教室成员(ImNetworkRoomMember)表服务接口
@@ -17,5 +19,7 @@ public interface ImService{
 
     //发送display改动通知
     void sendDisplay(String imUserId, ImNetworkRoom room,String serviceProvider) throws Exception;
+
+    void sendImPlayMidiMessage(ImNetworkCustomMessage customMessage) throws Exception;
 }
 

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

@@ -300,50 +300,18 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void sendImPlayMidiMessage(ImNetworkCustomMessage customMessage) throws Exception {
-        SysUser user = sysUserService.getUser();
-        Long userId = user.getId();
-        Long roomId = customMessage.getRoomId();
-        log.info("sendImPlayMidiMessage: roomId={}, userId={}", roomId, userId);
-        ImNetworkMetronomeMessage displayMessage = new ImNetworkMetronomeMessage(customMessage);
-
-        String imUserId = imGroupService.getImUserId(userId,customMessage.getClientType());
-        ImNetworkRoomMember roomMember = imNetworkRoomMemberService.lambdaQuery().eq(ImNetworkRoomMember::getUserId, userId)
-                .eq(ImNetworkRoomMember::getRoomId, roomId).last("LIMIT 1").one();
-        // 获取RTC服务提供方
-        CourseSchedule courseSchedule = courseScheduleService.getById(roomId);
-        RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(courseSchedule.getServiceProvider());
-        if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
-
-            // 腾讯云RTC服务
-            RTCRoomMessage.MessageContent messageContent = RTCRoomMessage.MessageContent
-                    .builder()
-                    .enable(customMessage.getEnable())
-                    .rate(customMessage.getRate())
-                    .customType(customMessage.getCustomType())
-                    .userId(customMessage.getUserId())
-                    .playVolume(customMessage.getPlayVolume())
-                    .sendUserInfo(getSendUser(user, RoleEnum.getEnumByValue(roomMember.getRole())))
-                    .build();
-
-            RTCRoomMessage roomMessage = RTCRoomMessage.builder()
-                    .objectName(RTCRoomMessage.PLAY_MIDI_MESSAGE)
-                    .content(messageContent)
-                    .toChatRoomId(roomMember.getRoomId())
-                    .fromUserId(imUserId)
-                    .isIncludeSender(1)
-                    .isPersisted(1)
-                    .build();
-
-            pluginService.sendChatRoomMessage(roomMessage);
-        } else {
-            imHelper.publishMessage(imUserId, roomId.toString(), displayMessage, 1);
-        }
-
+        customMessage.setCurrentUserId(sysUserService.getUserId());
+        CourseSchedule courseSchedule = courseScheduleService.getById(customMessage.getRoomId());
+        customMessage.setServiceProvider(courseSchedule.getServiceProvider());
+        //发送节拍器消息
+        imService.sendImPlayMidiMessage(customMessage);
         //记录节拍器信息
         String collect = Arrays.stream(customMessage.getUserId().split(","))
                 .map(x -> x.split(":")[0]).collect(Collectors.joining(","));
-
-        courseScheduleStudentPaymentService.getDao().adjustPlayMidi(roomId, collect, customMessage.toString());
+        imNetworkRoomMemberStatusService.lambdaUpdate()
+                        .eq(ImNetworkRoomMemberStatus::getRoomId,customMessage.getRoomId())
+                                .in(ImNetworkRoomMemberStatus::getUserId,collect)
+                                        .set(ImNetworkRoomMemberStatus::getPlayMidi,customMessage.toString());
     }
 
     @Override

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

@@ -5,14 +5,10 @@ import com.microsvc.toolkit.middleware.rtc.RTCRoomPluginService;
 import com.microsvc.toolkit.middleware.rtc.enums.EMemberAction;
 import com.microsvc.toolkit.middleware.rtc.impl.TencentCloudRTCPlugin;
 import com.microsvc.toolkit.middleware.rtc.message.RTCRoomMessage;
-import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.*;
-import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
 import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoom;
 import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember;
 import com.yonge.cooleshow.biz.dal.enums.ImNetworkRoomMemberChangedEnum;
-import com.yonge.cooleshow.biz.dal.enums.RoleEnum;
-import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.service.ImNetworkRoomMemberService;
 import com.yonge.cooleshow.biz.dal.service.ImNetworkRoomMemberStatusService;
 import com.yonge.cooleshow.biz.dal.service.ImService;
@@ -21,6 +17,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 
@@ -80,7 +77,7 @@ public class ImServiceImpl implements ImService {
             ImNetworkRoomMemberChangedMessage msg = new ImNetworkRoomMemberChangedMessage(roomMember, ImNetworkRoomMemberChangedEnum.JOIN);
             //获取节拍器信息
             ImNetworkCustomMessage imNetworkCustomMessage = imNetworkRoomMemberStatusService.getMemberMidi(roomMember.getRoomId(), roomMember.getUserId());
-            msg.setMetronomeSwitch(imNetworkCustomMessage.getEnable());
+            msg.setMetronomeSwitch(imNetworkCustomMessage.isEnable());
             //获取伴奏信息
             ImNetworkRoomMusicSheetDownloadData musicSheetDownloadData = imNetworkRoomMemberStatusService.getMemberExamSong(roomMember.getRoomId(), roomMember.getUserId());
             msg.setExamSongSwitch(musicSheetDownloadData.getEnable());
@@ -120,6 +117,43 @@ public class ImServiceImpl implements ImService {
         }
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void sendImPlayMidiMessage(ImNetworkCustomMessage customMessage) throws Exception {
+        log.info("sendImPlayMidiMessage: customMessage={}", customMessage);
+        ImNetworkMetronomeMessage displayMessage = new ImNetworkMetronomeMessage(customMessage);
+
+        ImNetworkRoomMember roomMember = imNetworkRoomMemberService.lambdaQuery().eq(ImNetworkRoomMember::getUserId, customMessage.getCurrentUserId())
+                .eq(ImNetworkRoomMember::getRoomId, customMessage.getRoomId()).last("LIMIT 1").one();
+        // 获取RTC服务提供方
+        RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(customMessage.getServiceProvider());
+        if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
+            // 腾讯云RTC服务
+            RTCRoomMessage.MessageContent messageContent = RTCRoomMessage.MessageContent
+                    .builder()
+                    .enable(customMessage.isEnable())
+                    .rate(customMessage.getRate())
+                    .customType(customMessage.getCustomType())
+                    .userId(customMessage.getUserId())
+                    .playVolume(customMessage.getPlayVolume())
+                    .sendUserInfo(getSendUser(roomMember))
+                    .build();
+
+            RTCRoomMessage roomMessage = RTCRoomMessage.builder()
+                    .objectName(RTCRoomMessage.PLAY_MIDI_MESSAGE)
+                    .content(messageContent)
+                    .toChatRoomId(roomMember.getRoomId())
+                    .fromUserId(roomMember.getImUserId())
+                    .isIncludeSender(1)
+                    .isPersisted(1)
+                    .build();
+
+            pluginService.sendChatRoomMessage(roomMessage);
+        } else {
+            imHelper.publishMessage(roomMember.getImUserId(), roomMember.getRoomId(), displayMessage, 1);
+        }
+    }
+
     private RTCRoomMessage.MessageUser getSendUser(ImNetworkRoomMember roomMember) {
         RTCRoomMessage.MessageUser build = RTCRoomMessage.MessageUser.builder()
                 .sendUserId(roomMember.getImUserId())