|
@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.microsvc.toolkit.middleware.im.ImPluginContext;
|
|
|
import com.microsvc.toolkit.middleware.im.ImPluginService;
|
|
|
import com.microsvc.toolkit.middleware.im.message.ImGroupMemberWrapper;
|
|
|
-import com.ym.mec.auth.api.client.SysUserFeignService;
|
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
|
import com.ym.mec.biz.dal.dao.ImGroupDao;
|
|
|
import com.ym.mec.biz.dal.dao.ImGroupMemberDao;
|
|
@@ -271,14 +270,16 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
|
|
|
/**
|
|
|
* 用户退出所有群
|
|
|
- *
|
|
|
+ * <p>
|
|
|
+ * 删除时判断是否群主,
|
|
|
+ * 如果是,则随机分配一个群主,
|
|
|
+ * 如果删除的是最后一个群成员,那么解散群
|
|
|
* @param userId 用户id
|
|
|
*/
|
|
|
@Override
|
|
|
- public void quit(Long userId) {
|
|
|
+ public void quitSchoolGroup(Long userId) {
|
|
|
|
|
|
// 退出群组
|
|
|
- // 查询用户默认头象
|
|
|
String serviceProvider = sysConfigService.findByParamName(SysConfigService.IM_SERVICE_PROVIDER).getParanValue();
|
|
|
|
|
|
ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
|
|
@@ -289,17 +290,47 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
return;
|
|
|
}
|
|
|
for (ImGroupMember imGroupMember : imGroupMembers) {
|
|
|
+ // 如果是群主,随机分配一个群主
|
|
|
+ if (imGroupMember.getIsAdmin()) {
|
|
|
+ try {
|
|
|
+ // 获取一个群成员
|
|
|
+ ImGroupMember imGroupMember1 = imGroupMemberDao.queryOneByGroupIdAndNotUser(imGroupMember.getImGroupId(), userId);
|
|
|
+ if (Objects.nonNull(imGroupMember1)) {
|
|
|
+ groupChangeOwner(imGroupMember1.getUserId(),imGroupMember.getImGroupId());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("更换群主失败{},{}", userId, imGroupMember.getImGroupId(), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
try {
|
|
|
imPluginService.groupQuit(imGroupMember.getImGroupId(), ImGroupMemberWrapper.ImGroupMember.builder().userId(userId).build());
|
|
|
} catch (Exception e) {
|
|
|
log.error("用户退出群失败{},{}", userId, imGroupMember.getImGroupId(), e);
|
|
|
}
|
|
|
}
|
|
|
+ List<String> imGroupIds = imGroupMembers.stream().map(ImGroupMember::getImGroupId).collect(Collectors.toList());
|
|
|
+ // 群组没人,删除群组
|
|
|
+ List<ImGroup> imGroups = imGroupDao.queryByUserId(userId.intValue(),null, ImGroup.GroupTypeEnum.SCHOOL.getCode());
|
|
|
+
|
|
|
+
|
|
|
imGroupMemberDao.deleteByUserId(userId);
|
|
|
// 更新群组人员数
|
|
|
- imGroupDao.addMemberNum(imGroupMembers.stream().map(ImGroupMember::getImGroupId).collect(Collectors.toList()),-1);
|
|
|
+ imGroupDao.addMemberNum(imGroupIds,-1);
|
|
|
|
|
|
- // TODO 群组没人,删除群组
|
|
|
+ if (CollectionUtils.isEmpty(imGroups)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ List<ImGroup> groups = imGroups.stream().filter(imGroup -> imGroup.getMemberNum().equals(1)).collect(Collectors.toList());
|
|
|
+ for (ImGroup group : groups) {
|
|
|
+ try {
|
|
|
+ imPluginService.groupDismiss(group.getId(), new ArrayList<>());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("解散群组失败{},{}", userId, group.getId(), e);
|
|
|
+ }
|
|
|
+ imGroupDao.delete(group.getId());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -327,8 +358,8 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
imGroup.setName("教学团队衔接群");
|
|
|
imGroup.setIntroduce(imGroup.getName());
|
|
|
imGroup.setMemberNum(1);
|
|
|
- imGroup.setType(ImGroup.GroupTypeEnum.SHOOL.getCode());
|
|
|
- imGroup.setGroupType(ImGroup.GroupTypeEnum.SHOOL);
|
|
|
+ imGroup.setType(ImGroup.GroupTypeEnum.SCHOOL.getCode());
|
|
|
+ imGroup.setGroupType(ImGroup.GroupTypeEnum.SCHOOL);
|
|
|
imGroup.setCreateTime(new Date());
|
|
|
imGroup.setUpdateTime(new Date());
|
|
|
imGroup.setTenantId(TenantContextHolder.getTenantId());
|
|
@@ -339,8 +370,10 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
if (!schoolStaffType.equals(ESchoolStaffType.ORCHESTRA_LEADER)) {
|
|
|
imPluginService.groupJoin(imGroup.getId(), imGroup.getName(), ImGroupMemberWrapper.ImGroupMember.builder().userId(userId.longValue()).build());
|
|
|
} else {
|
|
|
-
|
|
|
+ groupChangeOwner(userId, imGroup.getId());
|
|
|
}
|
|
|
+ imGroup.setMemberNum(imGroup.getMemberNum() + 1);
|
|
|
+ imGroupDao.update(imGroup);
|
|
|
}
|
|
|
ImGroupMember imGroupMember = new ImGroupMember();
|
|
|
imGroupMember.setImGroupId(imGroup.getId());
|
|
@@ -349,8 +382,25 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
imGroupMember.setRoleType(schoolStaffType.getDescribe());
|
|
|
imGroupMember.setTenantId(imGroup.getTenantId());
|
|
|
imGroupMemberDao.insert(imGroupMember);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 群主移交
|
|
|
+ * @param userId 用户id
|
|
|
+ * @param imGroupId 群组id
|
|
|
+ */
|
|
|
+ private void groupChangeOwner(Integer userId, String imGroupId) throws Exception {
|
|
|
+
|
|
|
+ String serviceProvider = sysConfigService.findByParamName(SysConfigService.IM_SERVICE_PROVIDER).getParanValue();
|
|
|
+
|
|
|
+ ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
|
|
|
|
|
|
+ ImGroupMember imGroupMember = imGroupMemberDao.getAdmin(imGroupId);
|
|
|
+ imPluginService.changeGroupOwner(imGroupId, userId.toString(),imGroupMember.getUserId().toString());
|
|
|
+ imGroupMember.setIsAdmin(false);
|
|
|
+ imGroupMemberDao.update(imGroupMember);
|
|
|
|
|
|
+ imGroupMemberDao.updateAdmin(imGroupId, userId);
|
|
|
}
|
|
|
|
|
|
/**
|