|
@@ -1,13 +1,14 @@
|
|
|
package com.yonge.cooleshow.biz.dal.service.impl;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
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.message.GroupMemberWrapper;
|
|
|
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;
|
|
|
-import com.yonge.cooleshow.biz.dal.config.RongCloudConfig;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentPaymentDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.ImGroupDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.ImGroupMemberAuditDao;
|
|
@@ -22,10 +23,6 @@ import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
|
|
|
import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
|
|
|
import com.yonge.cooleshow.biz.dal.service.*;
|
|
|
import com.yonge.cooleshow.biz.dal.entity.StudentStar;
|
|
|
-import com.yonge.cooleshow.biz.dal.entity.Teacher;
|
|
|
-import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
|
|
|
-import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
|
|
|
-import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
|
|
|
import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
|
|
|
import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
|
|
|
import com.yonge.cooleshow.biz.dal.service.ImGroupService;
|
|
@@ -36,7 +33,6 @@ 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;
|
|
@@ -106,6 +102,9 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
@Autowired
|
|
|
private ImConfigProperties imConfig;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private SysConfigService sysConfigService;
|
|
|
+
|
|
|
@Override
|
|
|
public ImGroupDao getDao() {
|
|
|
return this.baseMapper;
|
|
@@ -121,7 +120,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
* @return IM聊天Token
|
|
|
*/
|
|
|
@Override
|
|
|
- public ImGroupWrapper.ImUserInfo register(String userId, String username, String avatar) throws Exception {
|
|
|
+ public ImGroupWrapper.ImUserInfo register(String userId,ClientEnum clientType, String username, String avatar) throws Exception {
|
|
|
|
|
|
ImGroupWrapper.ImUserInfo userInfo = ImGroupWrapper.ImUserInfo.builder()
|
|
|
.imUserId("").imToken("").build();
|
|
@@ -129,7 +128,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
try {
|
|
|
|
|
|
// 聊天Token
|
|
|
- String imUserId = getImUserId(userId);
|
|
|
+ String imUserId = getImUserId(userId,clientType.getCode());
|
|
|
|
|
|
// 生成签名
|
|
|
userInfo.imUserId(imUserId)
|
|
@@ -149,10 +148,10 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
* @return String
|
|
|
*/
|
|
|
@Override
|
|
|
- public String getImUserId(String userId) {
|
|
|
+ public String getImUserId(String userId,String clientType) {
|
|
|
String imUserId = userId;
|
|
|
if (StringUtils.isNotBlank(imConfig.getAppPrefix()) && !userId.startsWith(imConfig.getAppPrefix())) {
|
|
|
- imUserId = MessageFormat.format("{0}:{1}", imConfig.getAppPrefix(), userId);
|
|
|
+ imUserId = MessageFormat.format("{0}:{1}:{2}", imConfig.getAppPrefix(), userId,clientType);
|
|
|
}
|
|
|
return imUserId;
|
|
|
}
|
|
@@ -185,7 +184,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
imGroup.setId(imGroupId);
|
|
|
this.baseMapper.insert(imGroup);
|
|
|
//处理本地群成员列表
|
|
|
- List<GroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(), true, ImGroupMemberRoleType.TEACHER);
|
|
|
+ List<ImGroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(), true, ImGroupMemberRoleType.TEACHER);
|
|
|
//创建融云群
|
|
|
this.rtcCreate(imGroup.getCreateBy(),imGroupId,imGroup.getName());
|
|
|
//加入融云群
|
|
@@ -225,7 +224,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
imUserFriendService.saveUserFriend(teacherId, studentIds);
|
|
|
//处理本地群成员列表
|
|
|
// 添加老师
|
|
|
- List<GroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(), true, ImGroupMemberRoleType.TEACHER);
|
|
|
+ List<ImGroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(), true, ImGroupMemberRoleType.TEACHER);
|
|
|
// 添加学生
|
|
|
groupMembers.addAll(imGroupMemberService.initGroupMembers(imGroupId, studentIds, ImGroupMemberRoleType.STUDENT));
|
|
|
//创建融云群
|
|
@@ -235,21 +234,101 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
return imGroupId;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
//创建融云群
|
|
|
private void rtcCreate(Long userId,String imGroupId,String imGroupName) throws Exception {
|
|
|
- //创建融云群
|
|
|
- GroupMember[] groupMembers = new GroupMember[]{new GroupMember(userId.toString(),imGroupId,null)};
|
|
|
- GroupModel groupModel = new GroupModel(imGroupId,0);
|
|
|
- groupModel.setMembers(groupMembers);
|
|
|
- groupModel.setName(imGroupName);
|
|
|
- Result result = RongCloudConfig.rongCloud.group.create(groupModel);
|
|
|
- if(!result.code.equals(200)){
|
|
|
- log.error("创建群聊失败:{}",result.errorMessage);
|
|
|
- throw new BizException("创建群聊失败,请联系管理员");
|
|
|
+ rtcCreate(userId,imGroupId,imGroupName,ClientEnum.TEACHER);
|
|
|
+ }
|
|
|
+
|
|
|
+ //创建融云群
|
|
|
+ private void rtcCreate(Long userId,String imGroupId,String imGroupName,ClientEnum clientType) throws Exception {
|
|
|
+ //创建群
|
|
|
+ SysUser user = sysUserService.findUserById(userId);
|
|
|
+
|
|
|
+ // 群组默认头象
|
|
|
+// String groupDefaultAvatar = sysConfigService.findConfigValue(SysConfigConstant.GROUP_DEFAULT_AVATAR);
|
|
|
+ List<GroupMemberWrapper.ImGroupMember> groupMembers = Lists.newArrayList();
|
|
|
+ //记录群成员
|
|
|
+ GroupMemberWrapper.ImGroupMember groupMember = GroupMemberWrapper.ImGroupMember
|
|
|
+ .builder()
|
|
|
+ .id(IdWorker.getId())
|
|
|
+ .groupId(imGroupId)
|
|
|
+ .userId(userId)
|
|
|
+ .clientType(clientType.getCode())
|
|
|
+ .avatar(null)
|
|
|
+ .nickname(user.getUsername())
|
|
|
+ .isAdmin(true)
|
|
|
+ .imUserId(getImUserId(userId.toString(),clientType.getCode()))
|
|
|
+ .roleType(clientType.getCode())
|
|
|
+ .build();
|
|
|
+
|
|
|
+
|
|
|
+ // 自动激活学生IM帐号
|
|
|
+ registerUser(groupMembers);
|
|
|
+
|
|
|
+ // 创建IM群组
|
|
|
+ imPluginContext.getPluginService().groupCreate(imGroupId, imGroupName,
|
|
|
+ getImUserId(userId.toString(),clientType.getCode()));
|
|
|
+
|
|
|
+ // 添加群成员到当前群组
|
|
|
+ imPluginContext.getPluginService().groupJoin(imGroupId, imGroupName,
|
|
|
+ groupMembers);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量导入用户
|
|
|
+ * @param groupMembers List<ImGroupMemberWrapper.ImGroupMember>
|
|
|
+ */
|
|
|
+ private void registerUser(List<GroupMemberWrapper.ImGroupMember> groupMembers) {
|
|
|
+ for (GroupMemberWrapper.ImGroupMember member : groupMembers) {
|
|
|
+ // 激活用户帐号为空
|
|
|
+ if (StringUtils.isBlank(member.getNickname())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ String imUserId = member.getImUserId();
|
|
|
+ if (StringUtils.isBlank(imUserId)) {
|
|
|
+ imUserId = getImUserId(String.valueOf(member.getUserId()),
|
|
|
+ member.getClientType());
|
|
|
+ }
|
|
|
+
|
|
|
+ imPluginContext.getPluginService().register(getImUserId(imUserId,member.getClientType()), member.getNickname(), member.getAvatar());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("registerUser member imToken");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public List<GroupMemberWrapper.ImGroupMember> getImGroupMembers(List<ImGroupMember> groupMemberList) {
|
|
|
+ return groupMemberList.stream().map(item -> {
|
|
|
+ return GroupMemberWrapper.ImGroupMember.builder()
|
|
|
+ .id(item.getId())
|
|
|
+ .groupId(item.getGroupId())
|
|
|
+ .userId(item.getUserId())
|
|
|
+ .clientType(item.getRoleType().getCode())
|
|
|
+ .avatar(item.getAvatar())
|
|
|
+ .nickname(item.getNickname())
|
|
|
+ .isAdmin(item.getIsAdmin())
|
|
|
+ .imUserId(item.getImUserId())
|
|
|
+ .roleType(item.getRoleType().getCode())
|
|
|
+ .build();
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 自动注册用户
|
|
|
+ * @param groupMembers List<ImGroupMemberWrapper.ImGroupMember>
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void asyncRegisterUser(List<GroupMemberWrapper.ImGroupMember> groupMembers) {
|
|
|
+ com.microsvc.toolkit.common.tools.ThreadPool.getExecutor().submit(() -> registerUser(groupMembers));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void dismiss(String groupId) throws Exception {
|
|
|
Long createBy = Optional.ofNullable(this.baseMapper.selectById(groupId)).
|
|
@@ -261,20 +340,21 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
//删除入群申请
|
|
|
imGroupMemberAuditDao.delByGroupId(groupId);
|
|
|
//获取所有群成员
|
|
|
- List<GroupMember> groupMembers = imGroupMemberService.getDao().queryGroupMember(groupId);
|
|
|
+ List<ImGroupMember> groupMembers = imGroupMemberService.getDao().queryGroupMember(groupId);
|
|
|
//销毁成功,删除群
|
|
|
this.baseMapper.deleteById(groupId);
|
|
|
//删除群成员
|
|
|
imGroupMemberService.delByGroupId(groupId);
|
|
|
//解散融云群
|
|
|
- GroupModel groupModel = new GroupModel(groupId,0);
|
|
|
- GroupMember[] groupMembersArr = groupMembers.toArray(new GroupMember[groupMembers.size()]);
|
|
|
- groupModel.setMembers(groupMembersArr);
|
|
|
- Result result = RongCloudConfig.rongCloud.group.dismiss(groupModel);
|
|
|
- if(!result.code.equals(200)){
|
|
|
- log.error("解散群聊失败:{}",result.errorMessage);
|
|
|
- throw new BizException("解散群聊失败,请联系管理员");
|
|
|
- }
|
|
|
+
|
|
|
+ // 获取群成员
|
|
|
+ List<GroupMemberWrapper.ImGroupMember> imGroupMembers = groupMembers.stream()
|
|
|
+ .map(x -> GroupMemberWrapper.ImGroupMember.builder().userId(x.getUserId())
|
|
|
+ .groupId(x.getGroupId()).clientType(x.getRoleType().getCode()).build())
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 解散群
|
|
|
+ imPluginContext.getPluginService().groupDismiss(groupId, imGroupMembers);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -321,14 +401,13 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
//修改群成员数
|
|
|
baseMapper.updateMemberNum(groupId);
|
|
|
|
|
|
- GroupModel groupModel = new GroupModel(groupId,0);
|
|
|
- GroupMember[] groupMembers = new GroupMember[]{new GroupMember(imUserId,groupId,null)};
|
|
|
- groupModel.setMembers(groupMembers);
|
|
|
- Result result = RongCloudConfig.rongCloud.group.quit(groupModel);
|
|
|
- if(!result.code.equals(200)){
|
|
|
- log.error("退出群聊失败:{}",result.errorMessage);
|
|
|
- throw new BizException("退出群聊失败,请联系管理员");
|
|
|
- }
|
|
|
+
|
|
|
+ // 群主退出
|
|
|
+ List<ImGroupMember> groupMembers = Lists.newArrayList();
|
|
|
+ groupMembers.add(groupMember);
|
|
|
+
|
|
|
+
|
|
|
+ imPluginContext.getPluginService().groupQuit(groupId, getImGroupMembers(groupMembers));
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -377,7 +456,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
String imGroupId = UUID.randomUUID() + imGroup.getType().getCode();
|
|
|
imGroup.setId(imGroupId);
|
|
|
this.baseMapper.insert(imGroup);
|
|
|
- List<GroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(), true, ImGroupMemberRoleType.TEACHER);
|
|
|
+ List<ImGroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(), true, ImGroupMemberRoleType.TEACHER);
|
|
|
if (!CollectionUtils.isEmpty(studentIdList)) {
|
|
|
groupMembers.addAll(imGroupMemberService.initGroupMembers(imGroupId, studentIdList, ImGroupMemberRoleType.STUDENT));
|
|
|
}
|
|
@@ -429,7 +508,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
}
|
|
|
|
|
|
// 自动加入该群组
|
|
|
- imGroupMemberService.join(Lists.newArrayList(new GroupMember(imIdentity, groupId, null)), groupId);
|
|
|
+ imGroupMemberService.join(Lists.newArrayList(groupMember), groupId);
|
|
|
|
|
|
Integer numbers = imGroupMemberService.lambdaQuery()
|
|
|
.eq(ImGroupMember::getGroupId, groupId)
|
|
@@ -438,11 +517,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
.count();
|
|
|
// 拥有老师身份,且非群主时,需要主动退出群聊
|
|
|
if (count > 0 && numbers <= 0) {
|
|
|
-
|
|
|
- GroupModel groupModel = new GroupModel(groupId,0);
|
|
|
- GroupMember[] groupMembers = new GroupMember[]{new GroupMember(String.valueOf(userId), groupId,null)};
|
|
|
- groupModel.setMembers(groupMembers);
|
|
|
- RongCloudConfig.rongCloud.group.quit(groupModel);
|
|
|
+ quit(groupId, userId, ClientEnum.TEACHER);
|
|
|
}
|
|
|
|
|
|
// 缓存重新入群标识, 默认有效期为120天
|