|
@@ -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;
|
|
@@ -16,6 +15,7 @@ import com.ym.mec.biz.dal.dto.NameDto;
|
|
|
import com.ym.mec.biz.dal.entity.ImGroup;
|
|
|
import com.ym.mec.biz.dal.entity.ImGroupMember;
|
|
|
import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
|
|
|
+import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
|
|
|
import com.ym.mec.biz.service.ImGroupMemberService;
|
|
|
import com.ym.mec.biz.service.ImGroupService;
|
|
|
import com.ym.mec.biz.service.SysConfigService;
|
|
@@ -271,14 +271,17 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
|
|
|
/**
|
|
|
* 用户退出所有群
|
|
|
- *
|
|
|
+ * <p>
|
|
|
+ * 删除时判断是否群主,
|
|
|
+ * 如果是,则随机分配一个群主,
|
|
|
+ * 如果删除的是最后一个群成员,那么解散群
|
|
|
* @param userId 用户id
|
|
|
*/
|
|
|
@Override
|
|
|
- public void quit(Long userId) {
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void quitSchoolGroup(Long userId) {
|
|
|
|
|
|
// 退出群组
|
|
|
- // 查询用户默认头象
|
|
|
String serviceProvider = sysConfigService.findByParamName(SysConfigService.IM_SERVICE_PROVIDER).getParanValue();
|
|
|
|
|
|
ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
|
|
@@ -289,17 +292,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);
|
|
|
+
|
|
|
+ if (CollectionUtils.isEmpty(imGroups)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
- // TODO 群组没人,删除群组
|
|
|
+ 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());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -311,7 +344,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void addSchoolStaffGroup(Long schoolId, Integer userId, ESchoolStaffType schoolStaffType) throws Exception {
|
|
|
+ public void addSchoolStaffGroup(Long schoolId, Integer userId,String name,String avatar, ESchoolStaffType schoolStaffType) throws Exception {
|
|
|
|
|
|
// 查询群是否存在
|
|
|
ImGroup imGroup = imGroupDao.queryBySchoolId(schoolId);
|
|
@@ -320,6 +353,9 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
|
|
|
ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
|
|
|
|
|
|
+
|
|
|
+ // 注册主播用户信息到三方平台
|
|
|
+ imPluginService.register(userId.toString(), name, avatar);
|
|
|
if (Objects.isNull(imGroup)) {
|
|
|
imGroup = new ImGroup();
|
|
|
imGroup.setSchoolId(schoolId);
|
|
@@ -327,8 +363,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 +375,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 +387,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);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -360,6 +415,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
* @param user 用户信息
|
|
|
*/
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public void addImGroup(List<String> musicGroupIds, SysUser user) {
|
|
|
if (CollectionUtils.isEmpty(musicGroupIds)) {
|
|
|
return;
|
|
@@ -388,4 +444,20 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询群组
|
|
|
+ *
|
|
|
+ * @param query 查询条件
|
|
|
+ * @return 群组列表
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<ImGroup> queryByUserId(ImGroupWrapper.ImQuery query) {
|
|
|
+ if (query.getGroupType() != null && StringUtils.isNotBlank(query.getMusicGroupId())) {
|
|
|
+ if (query.getGroupType().equals(ImGroup.GroupTypeEnum.SCHOOL)) {
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return imGroupDao.getByUserId(query);
|
|
|
+ }
|
|
|
}
|