Bläddra i källkod

直播黑名单处理

liujunchi 2 år sedan
förälder
incheckning
c3f86990a3

+ 46 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/EGroupDefinedDataType.java

@@ -0,0 +1,46 @@
+package com.ym.mec.biz.dal.enums;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2023-03-20
+ */
+public enum EGroupDefinedDataType {
+
+    /**
+     * 主讲人状态
+     */
+    ANCHOR_STATUS("主讲人状态"), // "ONLINE":"OFFLINE"
+
+    /**
+     * 全局禁言
+     */
+    GLOBAL_BAN("全局禁言"), //  0允许 1不允许
+
+    ;
+    private String code;
+
+    private String msg;
+
+    EGroupDefinedDataType(String msg) {
+        this.msg = msg;
+        this.code = this.name();
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveRoomBlackService.java

@@ -35,6 +35,8 @@ public interface ImLiveRoomBlackService extends IService<ImLiveRoomBlack> {
      */
     void add(Map<String, Object> param);
 
+    void setBlack(Integer userId, ImLiveBroadcastRoomVo roomVo);
+
     /**
      * 删除该用户从房间黑名单中移除
      *

+ 22 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -34,6 +34,7 @@ import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomData;
 import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomMember;
 import com.ym.mec.biz.dal.entity.ImLiveRoomBlack;
 import com.ym.mec.biz.dal.entity.ImLiveRoomVideo;
+import com.ym.mec.biz.dal.enums.EGroupDefinedDataType;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.page.LiveRoomGoodsOrderQueryInfo;
 import com.ym.mec.biz.dal.vo.*;
@@ -415,6 +416,10 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         roomConfig.setWhether_chat(whetherChat);
         obj.setRoomConfig(JSONObject.toJSONString(roomConfig));
         this.updateById(obj);
+
+
+        ImLiveBroadcastRoomVo roomVo = getImLiveBroadcastRoomVo(obj.getRoomUid());
+        setGroupDefinedData(roomVo,EGroupDefinedDataType.GLOBAL_BAN,whetherChat.toString());
     }
 
     /**
@@ -1167,7 +1172,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                 .update(room);
 
         // 设置直播群组自定义数据
-        setGroupDefinedData(roomVo,false);
+        setGroupDefinedData(roomVo,EGroupDefinedDataType.ANCHOR_STATUS,"OFFLINE");
 
         return true;
     }
@@ -1214,16 +1219,16 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                 .update();
 
         // 设置直播群组自定义数据
-        setGroupDefinedData(roomVo,true);
+        setGroupDefinedData(roomVo,EGroupDefinedDataType.ANCHOR_STATUS,"ONLINE");
 
         return roomVo;
     }
 
-    private void setGroupDefinedData( ImLiveBroadcastRoomVo roomVo,Boolean onlineStatus) {
+    private void setGroupDefinedData(ImLiveBroadcastRoomVo roomVo, EGroupDefinedDataType type, String value) {
         List<TencentRequest.ChatRoomGroupDefinedData> appDefinedData = new ArrayList<>();
         appDefinedData.add(TencentRequest.ChatRoomGroupDefinedData.builder()
-                                                                  .key("ANCHOR_STATUS")
-                                                                  .value(onlineStatus?"ONLINE":"OFFLINE")
+                                                                  .key(type.getCode())
+                                                                  .value(value)
                                                                   .build());
         try {
             livePluginContext.getPluginService(roomVo.getServiceProvider())
@@ -1598,6 +1603,18 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             //推送直播开始消息
             this.sendRoomLiveState(sysUser, room, MessageTypeEnum.JIGUANG_LIVE_STARTED);
 
+            // 查询黑名单人员
+            List<ImLiveRoomBlack> blackList = imLiveRoomBlackService.lambdaQuery()
+                .eq(ImLiveRoomBlack::getRoomUid, room.getRoomUid())
+                .list();
+
+            ImLiveBroadcastRoomVo roomVo = getImLiveBroadcastRoomVo(room.getRoomUid());
+            if (CollectionUtils.isNotEmpty(blackList)) {
+                // 将黑名单人员踢出房间
+                for (ImLiveRoomBlack black : blackList) {
+                    imLiveRoomBlackService.setBlack(black.getUserId(),roomVo);
+                }
+            }
         } catch (Exception e) {
             log.error(">>>>>>>>>> createLiveRoom error roomUid:{} msg:{}", room.getRoomUid(), e.getMessage());
         }

+ 20 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveRoomBlackServiceImpl.java

@@ -96,18 +96,30 @@ public class ImLiveRoomBlackServiceImpl extends ServiceImpl<ImLiveRoomBlackDao,
             imLiveRoomBlack.setCreateTime(new Date());
             this.save(imLiveRoomBlack);
             ImLiveBroadcastRoomVo roomVo = imLiveBroadcastRoomService.queryRoomInfo(roomUid);
-            //发送消息到直播房间
-            this.sendBlackMsg(roomVo, userId, userId, ImRoomMessage.BLOCK_BLACK_USER);
-            //调用融云方法加入禁言
-            LivePluginService pluginService = livePluginContext.getPluginService(roomVo.getServiceProvider());
-            try {
-                pluginService.chatRoomUserGagCreate(userIdStr, roomUid, -1L);
-            } catch (Exception e) {
-                throw new RuntimeException(e);
+            if (roomVo == null) {
+                throw new BizException("直播房间不存在");
+            }
+            if (roomVo.getLiveState() != 1) {
+                log.info("直播房间未开播,不需要发送消息");
+                return;
             }
+            setBlack( userId, roomVo);
         });
     }
 
+    @Override
+    public void setBlack(Integer userId, ImLiveBroadcastRoomVo roomVo) {
+        //发送消息到直播房间
+        this.sendBlackMsg(roomVo, userId, userId, ImRoomMessage.BLOCK_BLACK_USER);
+        //调用融云方法加入禁言
+        LivePluginService pluginService = livePluginContext.getPluginService(roomVo.getServiceProvider());
+        try {
+            pluginService.chatRoomUserGagCreate(userId.toString(), roomVo.getRoomUid(),-1L);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
     /**
      * 删除该用户从房间黑名单中移除
      *

+ 8 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ImLiveBroadcastRoomController.java

@@ -150,6 +150,14 @@ public class ImLiveBroadcastRoomController extends BaseController {
         return succeed();
     }
 
+
+    @ApiOperation("关闭直播间")
+    @GetMapping(value = "/roomDestroy")
+    public HttpResponseResult<Object> roomDestroy(@ApiParam(value = "房间Uid", required = true) String roomUid) {
+        imLiveBroadcastRoomService.roomDestroy(roomUid);
+        return succeed();
+    }
+
     @ApiImplicitParams({
             @ApiImplicitParam(name = "id", dataType = "Integer", value = "房间id"),
     })