liujc 1 年之前
父节点
当前提交
132121c313

+ 7 - 0
cooleshow-user/user-biz/pom.xml

@@ -108,6 +108,13 @@
             <groupId>com.microsvc.toolkit.middleware</groupId>
             <artifactId>microsvc-middleware-live</artifactId>
         </dependency>
+
+
+        <dependency>
+            <groupId>com.microsvc.toolkit.middleware</groupId>
+            <artifactId>microsvc-middleware-im</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 26 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupService.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.biz.dal.dto.ImGroupResultDto;
 import com.yonge.cooleshow.biz.dal.dto.ImGroupSearchDto;
 import com.yonge.cooleshow.biz.dal.entity.ImGroup;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
 
 import java.util.List;
 
@@ -19,6 +20,31 @@ public interface ImGroupService extends IService<ImGroup> {
 
     ImGroupDao getDao();
 
+
+
+    /**
+     * IM 用户注册
+     * @param userId 用户ID
+     * @param username 用户名
+     * @param avatar 用户头象
+     * @return IM聊天Token
+     */
+    ImGroupWrapper.ImUserInfo register(String userId, String username, String avatar) throws Exception;
+
+    /**
+     * IM 用户注册
+     * @param userId 用户Id
+     * @return String
+     */
+    String getImUserId(String userId);
+
+    /**
+     * 解析IM用户规则
+     * @param imUserId IM用户Id
+     * @return String
+     */
+    String analysisImUserId(String imUserId);
+
     /**
     * @description: 用户主动创建群聊
      * @param imGroup

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

@@ -2,6 +2,8 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
+import com.microsvc.toolkit.middleware.im.ImPluginContext;
+import com.microsvc.toolkit.middleware.im.properties.ImConfigProperties;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.config.AppGlobalServiceConfig;
@@ -31,12 +33,14 @@ import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
 import com.yonge.cooleshow.biz.dal.service.StudentStarService;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
+import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.util.ThreadPool;
 import io.rong.models.Result;
 import io.rong.models.group.GroupMember;
 import io.rong.models.group.GroupModel;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RBucket;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
@@ -95,11 +99,79 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
     @Autowired
     private StudentStarService studentStarService;
 
+
+    @Autowired
+    private ImPluginContext imPluginContext;
+
+    @Autowired
+    private ImConfigProperties imConfig;
+
     @Override
     public ImGroupDao getDao() {
         return this.baseMapper;
     }
 
+
+    /**
+     * IM 用户注册
+     *
+     * @param userId   用户ID
+     * @param username 用户名
+     * @param avatar   用户头象
+     * @return IM聊天Token
+     */
+    @Override
+    public ImGroupWrapper.ImUserInfo register(String userId, String username, String avatar) throws Exception {
+
+        ImGroupWrapper.ImUserInfo userInfo = ImGroupWrapper.ImUserInfo.builder()
+                .imUserId("").imToken("").build();
+        // 生成IM聊天Token
+        try {
+
+            // 聊天Token
+            String imUserId = getImUserId(userId);
+
+            // 生成签名
+            userInfo.imUserId(imUserId)
+                    .setImToken(imPluginContext.getPluginService().register(imUserId, username, avatar));
+
+        } catch (Exception e) {
+            log.error("register ImToken EX, userId={}, username={}", userId, username, e);
+        }
+        return userInfo;
+    }
+
+
+    /**
+     * IM 用户注册
+     *
+     * @param userId 用户Id
+     * @return String
+     */
+    @Override
+    public String getImUserId(String userId) {
+        String imUserId = userId;
+        if (StringUtils.isNotBlank(imConfig.getAppPrefix()) && !userId.startsWith(imConfig.getAppPrefix())) {
+            imUserId = MessageFormat.format("{0}:{1}", imConfig.getAppPrefix(), userId);
+        }
+        return imUserId;
+    }
+
+
+    /**
+     * 解析IM用户规则
+     *
+     * @param imUserId IM用户Id
+     * @return String
+     */
+    @Override
+    public String analysisImUserId(String imUserId) {
+        if (StringUtils.isNotBlank(imConfig.getAppPrefix())) {
+            return imUserId.replace(imConfig.getAppPrefix() + ":", "");
+        }
+        return imUserId;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void create(ImGroup imGroup) throws Exception {

+ 37 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/im/ImGroupWrapper.java

@@ -0,0 +1,37 @@
+package com.yonge.cooleshow.biz.dal.wrapper.im;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 即时通讯群组
+ * 2022-11-26 10:55:18
+ */
+@ApiModel(value = "ImGroupWrapper对象", description = "即时通讯群组查询对象")
+public class ImGroupWrapper {
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("IM用户信息")
+    public static class ImUserInfo implements Serializable {
+
+        @ApiModelProperty("用户ID")
+        private String imUserId;
+
+        @ApiModelProperty("授权Token")
+        private String imToken;
+
+        public ImUserInfo imUserId(String imUserId) {
+            this.imUserId = imUserId;
+            return this;
+        }
+    }
+}