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.domain.entity.SysUser;
|
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.param.*;
|
import com.ruoyi.rongcloud.service.RongCloudService;
|
import com.ruoyi.system.mapper.SysUserMapper;
|
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.lang.reflect.Field;
|
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;
|
@Resource
|
private SysUserMapper sysUserMapper;
|
|
|
/**
|
* 获取融云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);
|
}
|
|
@Override
|
public AjaxResult groupJoin(RongCloudGroupParam groupParam) {
|
Map<String, Object> groupMap = rongCloudClient.groupJoin(getRongCloudHead(), groupParam);
|
Integer code = (Integer) groupMap.get("code");
|
if (code.equals(200)) {
|
if (groupParam.getGroupName() != null) {
|
ArdRongGroup ardRongGroup = ardRongGroupMapper.selectById(groupParam.getGroupId());
|
ardRongGroup.setGroupName(groupParam.getGroupName());
|
ardRongGroupMapper.updateById(ardRongGroup);
|
}
|
List<String> userList = groupParam.getUserId();
|
for (int i = 0; i < userList.size(); i++) {
|
ArdRongGroupUser ardRongGroupUser = new ArdRongGroupUser();
|
ardRongGroupUser.setId(String.valueOf(UUID.randomUUID()));
|
ardRongGroupUser.setGroupId(groupParam.getGroupId());
|
ardRongGroupUser.setUserId(userList.get(i));
|
ardRongGroupUserMapper.insert(ardRongGroupUser);
|
}
|
}
|
groupMap.put("groupId", groupParam.getGroupId());
|
if (groupParam.getGroupName() != null) {
|
groupMap.put("groupName", groupParam.getGroupId());
|
} else {
|
ArdRongGroup ardRongGroup = ardRongGroupMapper.selectById(groupParam.getGroupId());
|
groupMap.put("groupName", ardRongGroup.getGroupName());
|
}
|
groupMap.put("userId", groupParam.getUserId());
|
return AjaxResult.success(groupMap);
|
}
|
|
@Override
|
public AjaxResult groupQuit(RongCloudGroupParam groupParam) {
|
Map<String, Object> groupMap = rongCloudClient.groupQuit(getRongCloudHead(), groupParam);
|
Integer code = (Integer) groupMap.get("code");
|
if (code.equals(200)) {
|
ArdRongGroup ardRongGroup = ardRongGroupMapper.selectById(groupParam.getGroupId());
|
ardRongGroup.setGroupName(groupParam.getGroupName());
|
ardRongGroupMapper.updateById(ardRongGroup);
|
}
|
groupMap.put("groupId", groupParam.getGroupId());
|
groupMap.put("groupName", groupParam.getGroupName());
|
return AjaxResult.success(groupMap);
|
}
|
|
@Override
|
public AjaxResult groupUserQuery(RongCloudGroupParam groupId) {
|
Map<String, Object> groupMap = rongCloudClient.groupUserQuery(getRongCloudHead(), groupId);
|
Integer code = (Integer) groupMap.get("code");
|
List<SysUser> sysUsers = new ArrayList<>();
|
if (code.equals(200)) {
|
List<Map<String, String>> list = (List<Map<String, String>>) groupMap.get("users");
|
for (int i = 0; i < list.size(); i++) {
|
String id = list.get(i).get("id");
|
SysUser sysUser = sysUserMapper.selectUserById(id);
|
sysUsers.add(sysUser);
|
}
|
}
|
return AjaxResult.success(sysUsers);
|
}
|
|
@Override
|
public AjaxResult groupRefresh(RongCloudGroupParam groupParam) {
|
Map<String, Object> groupMap = rongCloudClient.groupRefresh(getRongCloudHead(), groupParam);
|
Integer code = (Integer) groupMap.get("code");
|
if (code.equals(200)) {
|
String groupId = groupParam.getGroupId();
|
String groupName = groupParam.getGroupName();
|
QueryWrapper<ArdRongGroup> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("group_id",groupId);
|
ArdRongGroup ardRongGroup = ardRongGroupMapper.selectOne(queryWrapper);
|
ardRongGroup.setGroupName(groupName);
|
ardRongGroupMapper.updateById(ardRongGroup);
|
}
|
groupMap.put("groupId", groupParam.getGroupId());
|
groupMap.put("groupName", groupParam.getGroupName());
|
return AjaxResult.success(groupMap);
|
}
|
|
@Override
|
public AjaxResult userGroupQuery(RongCloudGroupUserParam userParam) {
|
return AjaxResult.success(rongCloudClient.userGroupQuery(getRongCloudHead(), userParam));
|
}
|
|
@Override
|
public AjaxResult groupSync(RongCloudGroupSyncParam syncParam) {
|
RongCloudGroupSyncEndParam endParam = new RongCloudGroupSyncEndParam();
|
endParam.setUserId(syncParam.getUserId());
|
List<RongCloudGroupSyncTwoParam> twoParams = syncParam.getList();
|
for (int i = 0; i < twoParams.size(); i++) {
|
RongCloudGroupSyncTwoParam syncTwoParam = twoParams.get(i);
|
String groupId = syncTwoParam.getGroupId();
|
String groupName = syncTwoParam.getGroupName();
|
try {
|
Class clazz = endParam.getClass();
|
// 动态添加属性
|
Field ageField = clazz.getDeclaredField("group[" + groupId + "]");
|
ageField.setAccessible(true); // 设置私有属性可访问
|
ageField.set(endParam, groupName);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
Map<String, Object> groupMap = rongCloudClient.groupSync(getRongCloudHead(), endParam);
|
return AjaxResult.success(groupMap);
|
}
|
|
@Override
|
public AjaxResult groupInfo(String groupId) {
|
Map<String,Object> map = new HashMap<>();
|
QueryWrapper<ArdRongGroup> ardRongGroupQueryWrapper = new QueryWrapper<>();
|
ardRongGroupQueryWrapper.eq("group_id",groupId);
|
ArdRongGroup ardRongGroup = ardRongGroupMapper.selectOne(ardRongGroupQueryWrapper);
|
map.put("group",ardRongGroup);
|
QueryWrapper<ArdRongGroupUser> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("group_id",groupId);
|
List<ArdRongGroupUser> list = ardRongGroupUserMapper.selectList(queryWrapper);
|
List<SysUser> sysUsers = new ArrayList<>();
|
for (int i = 0; i < list.size(); i++) {
|
String userId = list.get(i).getUserId();
|
SysUser sysUser = sysUserMapper.selectUserById(userId);
|
sysUsers.add(sysUser);
|
}
|
map.put("user",sysUsers);
|
return AjaxResult.success(map);
|
}
|
|
@Override
|
public AjaxResult groupUserAll(String groupId) {
|
ArdRongGroup ardRongGroup = ardRongGroupMapper.selectById(groupId);
|
QueryWrapper<ArdRongGroupUser> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("group_id",ardRongGroup.getGroupId());
|
List<ArdRongGroupUser> list = ardRongGroupUserMapper.selectList(queryWrapper);
|
List<String> userList = new ArrayList<>();
|
for (int i = 0; i < list.size(); i++) {
|
userList.add(list.get(i).getUserId());
|
}
|
QueryWrapper<SysUser> queryWrapper1 = new QueryWrapper<>();
|
if(userList.size()>0){
|
queryWrapper1.notIn("user_id",userList).eq("del_flag","0");
|
}else {
|
queryWrapper1.eq("del_flag","0");
|
}
|
List<SysUser> sysUsers = sysUserMapper.selectList(queryWrapper1);
|
return AjaxResult.success(sysUsers);
|
}
|
|
/**
|
* 获取融云签名信息
|
*/
|
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(System.currentTimeMillis());
|
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;
|
}
|
}
|