| package com.ruoyi.rongcloud.service.Impl; | 
|   | 
| import com.ruoyi.common.core.redis.RedisCache; | 
| import com.ruoyi.common.utils.SecurityUtils; | 
| import com.ruoyi.rongcloud.domain.RongCloudParam; | 
| import com.ruoyi.rongcloud.service.RongCloudService; | 
| import com.ruoyi.utils.forest.RongCloudClient; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.apache.commons.codec.digest.DigestUtils; | 
| import org.apache.commons.lang3.RandomStringUtils; | 
| import org.springframework.stereotype.Service; | 
|   | 
| import javax.annotation.Resource; | 
| import java.util.Date; | 
| import java.util.HashMap; | 
| import java.util.List; | 
| import java.util.Map; | 
|   | 
| /** | 
|  * @Description: 通融业务服务 | 
|  * @ClassName: RongCloudServiceImpl | 
|  * @Author: 刘苏义 | 
|  * @Date: 2023年07月15日16:49:12 | 
|  * @Version: 1.0 | 
|  **/ | 
| @Service | 
| @Slf4j(topic = "rongCloud") | 
| public class RongCloudServiceImpl implements RongCloudService { | 
|   | 
|     @Resource | 
|     RongCloudClient rongCloudClient; | 
|     @Resource | 
|     RedisCache redisCache; | 
|   | 
|     /** | 
|      * 获取融云token | 
|      * | 
|      * @param userId 用户id | 
|      * @param name   用户姓名 | 
|      */ | 
|     @Override | 
|     public String getToken(String userId, String name) { | 
|   | 
|         String token = ""; | 
|         try { | 
|             RongCloudParam param = new RongCloudParam(); | 
|             param.setUserId(userId); | 
|             param.setName(name); | 
|             Map<String,Object>  map = rongCloudClient.getToken(getRongCloudHead(), param); | 
|             token = (String) map.get("token"); | 
|             log.debug("用户" + userId + "获取到融云token:" + token); | 
|         } catch (Exception ex) { | 
|             log.error("获取token异常:" + ex.getMessage()); | 
|         } | 
|         return token; | 
|     } | 
|   | 
|     @Override | 
|     public Map<String,Object>  checkOnline(List<String> userIds) { | 
|         Map<String, Object> onlineMap = new HashMap<>(); | 
|         for (String userId : userIds) { | 
|             RongCloudParam param = new RongCloudParam(); | 
|             param.setUserId(userId); | 
|             Map<String,Object>  isOnline = rongCloudClient.checkOnline(getRongCloudHead(), param); | 
|             onlineMap.put(userId, isOnline.get("status")); | 
|         } | 
|         return onlineMap; | 
|     } | 
|   | 
|     @Override | 
|     public Boolean checkOnline(String userId) { | 
|         RongCloudParam param = new RongCloudParam(); | 
|         param.setUserId(userId); | 
|         Map<String,Object>  isOnline = rongCloudClient.checkOnline(getRongCloudHead(), param); | 
|         return isOnline.get("status").equals("1"); | 
|     } | 
|   | 
|     /** | 
|      * 获取融云签名信息 | 
|      */ | 
|     public Map<String, Object> getRongCloudHead() { | 
|         String appKey = redisCache.getCacheObject("sys_config:RongCloudAppKey"); | 
|         String appSecret = redisCache.getCacheObject("sys_config:RongCloudAppSecret"); | 
|         String nonce = RandomStringUtils.randomNumeric(18); | 
|         String timestamp = String.valueOf(new Date().getTime()); | 
|         String signature = DigestUtils.sha1Hex(appSecret + nonce + timestamp);//App Secret + Nonce + T | 
|         Map<String, Object> headerMap = new HashMap<>(); | 
|         headerMap.put("App-Key", appKey); | 
|         headerMap.put("Nonce", nonce); | 
|         headerMap.put("Timestamp", timestamp); | 
|         headerMap.put("Signature", signature); | 
|         return headerMap; | 
|     } | 
| } |