package com.ruoyi.rongcloud.service.Impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.core.redis.RedisCache;
|
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.rongcloud.mapper.ArdRongGroupMapper;
|
import com.ruoyi.rongcloud.mapper.ArdRongGroupUserMapper;
|
import com.ruoyi.rongcloud.domain.*;
|
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.*;
|
|
/**
|
* @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;
|
@Resource
|
private ArdRongGroupMapper ardRongGroupMapper;
|
@Resource
|
private ArdRongGroupUserMapper ardRongGroupUserMapper;
|
|
|
/**
|
* 获取融云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");
|
}
|
|
@Override
|
public AjaxResult groupCreate(RongCloudGroupParam group) {
|
group.setGroupId(String.valueOf(UUID.randomUUID()));
|
Map<String, Object> groupMap = rongCloudClient.groupCreate(getRongCloudHead(),group);
|
Integer code = (Integer) groupMap.get("code");
|
if(code.equals(200)){
|
ArdRongGroup ardRongGroup = new ArdRongGroup();
|
ardRongGroup.setGroupId(group.getGroupId());
|
ardRongGroup.setGroupName(group.getGroupName());
|
ardRongGroup.setCreateName(SecurityUtils.getUserId());
|
ardRongGroup.setCreateTime(new Date());
|
ardRongGroupMapper.insert(ardRongGroup);
|
List<String> userList = group.getUserId();
|
for (int i = 0; i < userList.size(); i++) {
|
ArdRongGroupUser ardRongGroupUser = new ArdRongGroupUser();
|
ardRongGroupUser.setId(String.valueOf(UUID.randomUUID()));
|
ardRongGroupUser.setGroupId(group.getGroupId());
|
ardRongGroupUser.setUserId(userList.get(i));
|
ardRongGroupUserMapper.insert(ardRongGroupUser);
|
}
|
}
|
groupMap.put("userId",group.getUserId());
|
groupMap.put("groupId",group.getGroupId());
|
groupMap.put("group",group.getGroupName());
|
return AjaxResult.success(groupMap);
|
}
|
|
@Override
|
public AjaxResult groupDismiss(RongCloudGroupDisParam groupDis) {
|
Map<String, Object> groupMap = rongCloudClient.groupDismiss(getRongCloudHead(),groupDis);
|
Integer code = (Integer) groupMap.get("code");
|
if(code.equals(200)){
|
ardRongGroupMapper.deleteById(groupDis.getGroupId());
|
QueryWrapper<ArdRongGroupUser> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("group_id",groupDis.getGroupId());
|
ardRongGroupUserMapper.delete(queryWrapper);
|
}
|
groupMap.put("groupId",groupDis.getGroupId());
|
groupMap.put("userId",groupDis.getUserId());
|
return AjaxResult.success(groupMap);
|
}
|
|
/**
|
* 获取融云签名信息
|
*/
|
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;
|
}
|
}
|