|
@@ -6,22 +6,18 @@ 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.entity.SysUser;
|
|
|
-import com.ym.mec.biz.dal.dao.ImGroupDao;
|
|
|
-import com.ym.mec.biz.dal.dao.ImGroupMemberDao;
|
|
|
-import com.ym.mec.biz.dal.dao.ImGroupNoticeDao;
|
|
|
-import com.ym.mec.biz.dal.dao.ImUserFriendDao;
|
|
|
+import com.ym.mec.biz.dal.dao.*;
|
|
|
import com.ym.mec.biz.dal.dto.ImGroupDto;
|
|
|
import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
|
|
|
import com.ym.mec.biz.dal.dto.NameDto;
|
|
|
-import com.ym.mec.biz.dal.entity.CooperationOrgan;
|
|
|
-import com.ym.mec.biz.dal.entity.ImGroup;
|
|
|
-import com.ym.mec.biz.dal.entity.ImGroupMember;
|
|
|
+import com.ym.mec.biz.dal.entity.*;
|
|
|
import com.ym.mec.biz.dal.enums.EFriendRoleType;
|
|
|
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
|
|
|
import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
|
|
|
+import com.ym.mec.biz.dal.mapper.SchoolStaffMapper;
|
|
|
import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
|
|
|
import com.ym.mec.biz.service.*;
|
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
|
-import com.ym.mec.common.entity.ImGroupModel;
|
|
|
import com.ym.mec.common.entity.ImUserModel;
|
|
|
import com.ym.mec.common.exception.BizException;
|
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
@@ -73,6 +69,15 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
@Autowired
|
|
|
private CooperationOrganService cooperationOrganService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private MusicGroupDao musicGroupDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SchoolStaffMapper schoolStaffMapper;
|
|
|
+
|
|
|
@Override
|
|
|
public BaseDAO<String, ImGroup> getDAO() {
|
|
|
return imGroupDao;
|
|
@@ -183,7 +188,13 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
|
|
|
@Override
|
|
|
public List<ImGroupMemberDto> queryMemberById(String imGroupId) {
|
|
|
- List<ImGroupMemberDto> imGroupMemberDtos = imGroupDao.queryMemberById(imGroupId);
|
|
|
+ return queryMemberById(imGroupId,null);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<ImGroupMemberDto> queryMemberById(String imGroupId,String search) {
|
|
|
+ List<ImGroupMemberDto> imGroupMemberDtos = imGroupDao.queryMemberById(imGroupId,search);
|
|
|
|
|
|
for (ImGroupMemberDto imGroupMemberDto : imGroupMemberDtos) {
|
|
|
imGroupMemberDto.setType(EFriendRoleType.getByName(imGroupMemberDto.getRoleType()).name());
|
|
@@ -290,7 +301,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void quitSchoolGroup(Long userId) {
|
|
|
+ public void quitAllGroup(Long userId) {
|
|
|
|
|
|
// 退出群组
|
|
|
String serviceProvider = sysConfigService.findByParamName(SysConfigService.IM_SERVICE_PROVIDER).getParanValue();
|
|
@@ -316,7 +327,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
}
|
|
|
}
|
|
|
try {
|
|
|
- imPluginService.groupQuit(imGroupMember.getImGroupId(), ImGroupMemberWrapper.ImGroupMember.builder().userId(userId).build());
|
|
|
+ imPluginService.groupQuit(imGroupMember.getImGroupId(), ImGroupMemberWrapper.ImGroupMember.builder().userId(userId).imUserIdFormat(false).build());
|
|
|
} catch (Exception e) {
|
|
|
log.error("用户退出群失败{},{}", userId, imGroupMember.getImGroupId(), e);
|
|
|
}
|
|
@@ -338,7 +349,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
List<ImGroup> groups = imGroups.stream().filter(imGroup -> imGroup.getMemberNum().equals(1)).collect(Collectors.toList());
|
|
|
for (ImGroup group : groups) {
|
|
|
try {
|
|
|
- ImGroupMemberWrapper.ImGroupMember build = ImGroupMemberWrapper.ImGroupMember.builder().userId(userId).build();
|
|
|
+ ImGroupMemberWrapper.ImGroupMember build = ImGroupMemberWrapper.ImGroupMember.builder().userId(userId).imUserIdFormat(false).build();
|
|
|
imPluginService.groupDismiss(group.getId(), Lists.newArrayList(build));
|
|
|
} catch (Exception e) {
|
|
|
log.error("解散群组失败{},{}", userId, group.getId(), e);
|
|
@@ -387,6 +398,8 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
imGroup.setTenantId(TenantContextHolder.getTenantId());
|
|
|
imGroupDao.insert(imGroup);
|
|
|
imPluginService.groupCreate(imGroup.getId(), imGroup.getName(), userId.toString());
|
|
|
+
|
|
|
+ initSchoolGroup(imGroup.getSchoolId());
|
|
|
}
|
|
|
imPluginService.groupJoin(imGroup.getId(), imGroup.getName(), ImGroupMemberWrapper.ImGroupMember.builder()
|
|
|
.userId(userId.longValue()).imUserIdFormat(false).build());
|
|
@@ -399,10 +412,136 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
imGroupMember.setUserId(userId);
|
|
|
imGroupMember.setIsAdmin(schoolStaffType.equals(ESchoolStaffType.ORCHESTRA_LEADER));
|
|
|
imGroupMember.setRoleType(schoolStaffType.getDescribe());
|
|
|
+ imGroupMember.setType(EFriendRoleType.getByName(schoolStaffType.getDescribe()).name());
|
|
|
imGroupMember.setTenantId(imGroup.getTenantId());
|
|
|
imGroupMemberDao.insert(imGroupMember);
|
|
|
|
|
|
+ updateImGroupUserNumber(imGroup.getId());
|
|
|
+ }
|
|
|
+
|
|
|
+ private void initSchoolGroup(Long schoolId) {
|
|
|
+
|
|
|
+
|
|
|
+ // 查询乐团主管
|
|
|
+ List<MusicGroup> musicGroupList = musicGroupDao.findByCooperationId(schoolId.intValue());
|
|
|
+ if (CollectionUtils.isEmpty(musicGroupList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ musicGroupList = musicGroupList.stream()
|
|
|
+ .filter(o -> o.getStatus().equals(MusicGroupStatusEnum.PROGRESS))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (CollectionUtils.isEmpty(musicGroupList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 乐团主管
|
|
|
+ List<Integer> groupLeaderIds = musicGroupList.stream().map(MusicGroup::getTeamTeacherId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 乐团ID集合
|
|
|
+ List<String> musicGroupIds = musicGroupList.stream().map(MusicGroup::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 班级列表主教/助教老师
|
|
|
+ List<ClassGroupTeacherMapper> teacherMapperList = classGroupTeacherMapperDao.findAllByMusicGroupIds(musicGroupIds);
|
|
|
+
|
|
|
+ List<Integer> teacherIds = new ArrayList<>();
|
|
|
+ if (CollectionUtils.isNotEmpty(teacherMapperList)) {
|
|
|
+ teacherIds.addAll(teacherMapperList.stream().map( o -> o.getUserId()).collect(Collectors.toSet()));
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ImGroupMemberWrapper.ImGroupMember> imGroupMembers = new ArrayList<>();
|
|
|
+ for (Integer groupLeaderId : groupLeaderIds) {
|
|
|
+ imGroupMembers.add(ImGroupMemberWrapper.ImGroupMember.builder()
|
|
|
+ .userId(groupLeaderId.longValue()).roleType(EFriendRoleType.ORCHESTRA_MANAGER.getMsg()).imUserIdFormat(false).build());
|
|
|
+ }
|
|
|
+
|
|
|
+ for (Integer teacherId : teacherIds) {
|
|
|
+ imGroupMembers.add(ImGroupMemberWrapper.ImGroupMember.builder()
|
|
|
+ .userId(teacherId.longValue()).roleType(EFriendRoleType.ORCHESTRA_TEACHER.getMsg()).imUserIdFormat(false).build());
|
|
|
+ }
|
|
|
+
|
|
|
+ addSchoolGroup(schoolId, imGroupMembers);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 加入学校群聊
|
|
|
+ *
|
|
|
+ * @param schoolId
|
|
|
+ * @param imGroupMembers
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void addSchoolGroup(Long schoolId, List<ImGroupMemberWrapper.ImGroupMember> imGroupMembers) {
|
|
|
+ // 添加乐团领队,班级老师
|
|
|
+ List<ImGroupMember> imGroupMemberList =new ArrayList<>();
|
|
|
+
|
|
|
+
|
|
|
+ // 查询群是否存在
|
|
|
+ ImGroup imGroup = imGroupDao.queryBySchoolId(schoolId);
|
|
|
+ if (imGroup == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (CollectionUtils.isEmpty(imGroupMembers)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (ImGroupMemberWrapper.ImGroupMember groupMember : imGroupMembers) {
|
|
|
+ ImGroupMember imGroupMember = new ImGroupMember();
|
|
|
+ imGroupMember.setImGroupId(imGroup.getId());
|
|
|
+ imGroupMember.setUserId(groupMember.getUserId().intValue());
|
|
|
+ imGroupMember.setIsAdmin(false);
|
|
|
+ imGroupMember.setRoleType(groupMember.getRoleType());
|
|
|
+ imGroupMember.setType(EFriendRoleType.getByName(groupMember.getRoleType()).name());
|
|
|
+ imGroupMember.setTenantId(imGroup.getTenantId());
|
|
|
+ imGroupMemberList.add(imGroupMember);
|
|
|
+ groupMember.setImUserIdFormat(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ String serviceProvider = sysConfigService.findByParamName(SysConfigService.IM_SERVICE_PROVIDER).getParanValue();
|
|
|
+
|
|
|
+ ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
|
|
|
+
|
|
|
+ try {
|
|
|
+ imPluginService.groupJoin(imGroup.getId(), imGroup.getName(), imGroupMembers);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("添加群成员失败{}", imGroup.getId(), e);
|
|
|
+ }
|
|
|
+ imGroupMemberDao.batchInsert(imGroupMemberList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void quitSchoolGroup(Long schoolId, List<ImGroupMemberWrapper.ImGroupMember> imGroupMembers) {
|
|
|
+ // 添加乐团领队,班级老师
|
|
|
+
|
|
|
+
|
|
|
+ // 查询群是否存在
|
|
|
+ ImGroup imGroup = imGroupDao.queryBySchoolId(schoolId);
|
|
|
+ if (imGroup == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (CollectionUtils.isEmpty(imGroupMembers)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ String serviceProvider = sysConfigService.findByParamName(SysConfigService.IM_SERVICE_PROVIDER).getParanValue();
|
|
|
+
|
|
|
+ List<Integer> userIds = new ArrayList<>();
|
|
|
+ ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
|
|
|
+ for (ImGroupMemberWrapper.ImGroupMember imGroupMember : imGroupMembers) {
|
|
|
+ imGroupMember.setImUserIdFormat(false);
|
|
|
+ userIds.add(imGroupMember.getUserId().intValue());
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ imPluginService.groupQuit(imGroup.getId(),imGroupMembers);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("退出群成员失败{}", imGroup.getId(), e);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
+ imGroupMemberDao.delByImGroupAndUserId(imGroup.getId(),userIds);
|
|
|
updateImGroupUserNumber(imGroup.getId());
|
|
|
}
|
|
|
|
|
@@ -448,7 +587,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void addImGroup(List<String> imGroupIds, SysUser user, String roleType) {
|
|
|
+ public void addImGroup(List<String> imGroupIds, Long userId, String roleType) {
|
|
|
if (CollectionUtils.isEmpty(imGroupIds)) {
|
|
|
return;
|
|
|
}
|
|
@@ -470,14 +609,15 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
}
|
|
|
try {
|
|
|
imPluginService.groupJoin(imGroup.getId(), imGroup.getName(), ImGroupMemberWrapper.ImGroupMember.builder()
|
|
|
- .userId(user.getId().longValue())
|
|
|
+ .userId(userId)
|
|
|
.imUserIdFormat(false).build());
|
|
|
|
|
|
ImGroupMember imGroupMember = new ImGroupMember();
|
|
|
imGroupMember.setImGroupId(imGroup.getId());
|
|
|
- imGroupMember.setUserId(user.getId());
|
|
|
+ imGroupMember.setUserId(userId.intValue());
|
|
|
imGroupMember.setIsAdmin(false);
|
|
|
imGroupMember.setRoleType(roleType);
|
|
|
+ imGroupMember.setType(EFriendRoleType.getByName(roleType).name());
|
|
|
imGroupMember.setTenantId(imGroup.getTenantId());
|
|
|
imGroupMemberDao.insert(imGroupMember);
|
|
|
|
|
@@ -512,6 +652,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
* @param userId 用户ID
|
|
|
*/
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public void quitGroup(List<String> imGroupIds, Integer userId) {
|
|
|
if (CollectionUtils.isEmpty(imGroupIds)) {
|
|
|
return;
|
|
@@ -526,16 +667,55 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
List<com.ym.mec.biz.dal.entity.ImGroupMember> imGroupMemberList = new ArrayList<>();
|
|
|
for (ImGroup imGroup : groupList) {
|
|
|
try {
|
|
|
- imPluginService.groupQuit(imGroup.getId(), ImGroupMemberWrapper.ImGroupMember.builder().userId(userId.longValue()).build());
|
|
|
+ imPluginService.groupQuit(imGroup.getId(), ImGroupMemberWrapper.ImGroupMember.builder().userId(userId.longValue()).imUserIdFormat(false).build());
|
|
|
} catch (Exception e) {
|
|
|
log.error("退出群聊失败",e);
|
|
|
}
|
|
|
- com.ym.mec.biz.dal.entity.ImGroupMember imGroupMember = new com.ym.mec.biz.dal.entity.ImGroupMember();
|
|
|
+ ImGroupMember imGroupMember = new ImGroupMember();
|
|
|
imGroupMember.setImGroupId(imGroup.getId());
|
|
|
imGroupMember.setUserId(userId);
|
|
|
imGroupMemberList.add(imGroupMember);
|
|
|
}
|
|
|
|
|
|
imGroupMemberService.batchDeleteByGroupIdAndUserId(imGroupMemberList);
|
|
|
+ for (String imGroupId : imGroupIds) {
|
|
|
+ updateImGroupUserNumber(imGroupId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 学校人员加入群组
|
|
|
+ *
|
|
|
+ * @param cooperationOrganId 合作机构id
|
|
|
+ * @param imGroupId 群组id
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void schoolJoinGroup(Integer cooperationOrganId, String imGroupId) {
|
|
|
+
|
|
|
+ CooperationOrgan cooperationOrgan = cooperationOrganService.get(cooperationOrganId);
|
|
|
+ if (cooperationOrgan == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<SchoolStaff> schoolStaffs = schoolStaffMapper.getByCoopIdAndType(cooperationOrganId, ESchoolStaffType.ORCHESTRA_LEADER);
|
|
|
+ if (CollectionUtils.isEmpty(schoolStaffs)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 查询群是否存在
|
|
|
+ ImGroup imGroup = imGroupDao.queryBySchoolId(cooperationOrganId.longValue());
|
|
|
+ if (imGroup == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ SchoolStaff schoolStaff = schoolStaffs.get(0);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ addImGroup(Lists.newArrayList(imGroup.getId()),schoolStaff.getUserId(),ESchoolStaffType.ORCHESTRA_LEADER.getDescribe());
|
|
|
+
|
|
|
}
|
|
|
}
|