刘俊驰 1 年間 前
コミット
a3551aea63

+ 85 - 84
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java

@@ -470,7 +470,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
             for (Integer organId : organIds) {
                 List<EmployeeLevelDto> levelDtoList = organIdMap.get(organId);
                 for (EmployeeLevelDto employeeLevelDto : levelDtoList) {
-                    if (Objects.equals(employeeLevelDto.getLevelUserId(), employeeLevelDto.getTransferUserId())) {
+                    if (employeeLevelDto.getLevelUserId() == employeeLevelDto.getTransferUserId()) {
                         throw new BizException("交接人校验失败,请重新填写");
                     }
                     userIds.add(employeeLevelDto.getTransferUserId());
@@ -482,8 +482,6 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
                             cooperationOrganDao.batchUpdateEduId(employeeLevelDto.getTransferUserId(), levelUserId, organId);
                             //教务老师所需加入的群组
                             educationGroupModels.addAll(classGroupDao.queryEducationGroups(employeeLevelDto.getTransferUserId(), levelUserId, organId));
-                            //获取当前用户所在的衔接群
-                            educationGroupModels.addAll(imGroupDao.queryUserGroupList(employeeLevelDto.getTransferUserId(),levelUserId,"乐团主管",organId));
                             break;
                         case "teamTeacher":
                             //运营主管所需加入的群组
@@ -497,13 +495,12 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
                 }
             }
         }
-        if (CollectionUtils.isNotEmpty(educationGroupModels)) {
-            CompletableFuture.runAsync(()->{
-                Date date = new Date();
-                Map<Integer, String> realNameMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(new ArrayList<>(userIds)));
-                //❤️用户加群
-                List<com.ym.mec.biz.dal.entity.ImGroupMember> imGroupMemberList = new ArrayList<>();
-                List<GroupModel> groupModelList = new ArrayList<>();
+        Date date = new Date();
+        if (educationGroupModels.size() > 0) {
+            Map<Integer, String> realNameMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(new ArrayList<>(userIds)));
+            //❤️用户加群
+            List<com.ym.mec.biz.dal.entity.ImGroupMember> imGroupMemberList = new ArrayList<>();
+            List<GroupModel> groupModelList = new ArrayList<>();
 
             List<ImGroupMemberWrapper.ImGroupMember> groupMembers = Lists.newArrayList();
             for (ImGroupModel imGroupModel : educationGroupModels) {
@@ -524,20 +521,20 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
                 GroupModel groupModel = new GroupModel(imGroupModel.getId(), new GroupMember[]{groupMember}, imGroupModel.getName());
                 groupModelList.add(groupModel);
 
-                    // 腾讯云IM用户加群
-                    groupMembers.add(ImGroupMemberWrapper.ImGroupMember.builder()
-                            .groupId(imGroupModel.getId())
-                            .roleType(imGroupModel.getUserRole())
-                            .isAdmin(false)
-                            .userId(Long.valueOf(userId))
-                            .imUserId(userId)
-                            .groupRoleType(imGroupMember.getGroupRoleType())
-                            .nickname(realNameMap.get(imGroupMember.getUserId()))
-                            .updateTime(DateTime.now().toDate())
-                            .createTime(DateTime.now().toDate())
-                            .build());
-                }
-                imGroupMemberService.batchInsert(imGroupMemberList);
+                // 腾讯云IM用户加群
+                groupMembers.add(ImGroupMemberWrapper.ImGroupMember.builder()
+                    .groupId(imGroupModel.getId())
+                    .roleType(imGroupModel.getUserRole())
+                    .isAdmin(false)
+                    .userId(Long.valueOf(userId))
+                    .imUserId(userId)
+                    .groupRoleType(imGroupMember.getGroupRoleType())
+                    .nickname(realNameMap.get(imGroupMember.getUserId()))
+                    .updateTime(DateTime.now().toDate())
+                    .createTime(DateTime.now().toDate())
+                    .build());
+            }
+            imGroupMemberService.batchInsert(imGroupMemberList);
 
             if (RongCloudImPlugin.PLUGIN_NAME.equals(imPluginContext.defaultService())) {
                 // 融云IM用户加群
@@ -573,99 +570,103 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
             }
         }
         //原有员工退群
-        CompletableFuture.runAsync(() ->{
-            List<ImGroupModel> groupModels = classGroupDao.queryTeacherQuitGroups(levelUserId);
-            //原有员工退预报名群
-            groupModels.addAll(classGroupDao.queryQuitApplyGroups(levelUserId));
-            //获取当前用户所在的衔接群
-            groupModels.addAll(imGroupDao.queryUserGroupList(levelUserId,levelUserId,"乐团主管",null));
-            if (CollectionUtils.isNotEmpty(groupModels)) {
-                List<com.ym.mec.biz.dal.entity.ImGroupMember> imGroupMemberList = new ArrayList<>();
-                // 融支IM用户退群
-                List<GroupModel> groupModelList = new ArrayList<>();
-                // 腾讯云IM用户退群
-                List<GroupMemberWrapper.ImGroupMember> imGroupMembers = Lists.newArrayList();
-                for (ImGroupModel imGroupModel : groupModels) {
-                    com.ym.mec.biz.dal.entity.ImGroupMember imGroupMember = new com.ym.mec.biz.dal.entity.ImGroupMember();
-                    imGroupMember.setImGroupId(imGroupModel.getId());
-                    imGroupMember.setUserId(Integer.parseInt(imGroupModel.getMemberList().get(0).getId()));
-                    imGroupMemberList.add(imGroupMember);
-
-                    GroupMember groupMember = new GroupMember(imGroupMember.getUserId().toString(), imGroupModel.getId());
-                    GroupModel groupModel = new GroupModel(imGroupModel.getId(), new GroupMember[]{groupMember}, imGroupModel.getName());
-                    groupModelList.add(groupModel);
-
-                    // 腾讯云
-                    imGroupMembers.add(GroupMemberWrapper.ImGroupMember.builder()
-                            .groupId(imGroupModel.getId())
-                            .userId(imGroupMember.getUserId().longValue())
-                            .imUserId(imGroupMember.getUserId().toString())
-                            .build());
-                }
-                imGroupMemberService.batchDeleteByGroupIdAndUserId(imGroupMemberList);
-                // 用户批量退出群组
-                if (RongCloudImPlugin.PLUGIN_NAME.equals(imPluginContext.defaultService())) {
-                    // 融云退群
-                    imFeignService.groupBatchQuit(groupModelList);
-                } else {
-                    // 腾讯云退群
-                    if (org.apache.commons.collections.CollectionUtils.isNotEmpty(imGroupMembers)) {
-
-                        Map<String, List<GroupMemberWrapper.ImGroupMember>> groupMembers = imGroupMembers.stream()
-                                .collect(Collectors.groupingBy(GroupMemberWrapper.ImGroupMember::getGroupId));
-
-                        for (Map.Entry<String, List<GroupMemberWrapper.ImGroupMember>> entry : groupMembers.entrySet()) {
-
-                            try {
-                                // 用户退群
-                                imGroupCoreService.groupQuit(entry.getValue(), entry.getKey());
-                            } catch (Exception e) {
-                                log.error("腾讯云IM用户退群失败,groupId:{}, members={}", entry.getKey(), JSON.toJSONString(entry.getValue()), e);
-                            }
+        List<ImGroupModel> groupModels = classGroupDao.queryTeacherQuitGroups(levelUserId);
+        //原有员工退预报名群
+        groupModels.addAll(classGroupDao.queryQuitApplyGroups(levelUserId));
+        if (groupModels.size() > 0) {
+            List<com.ym.mec.biz.dal.entity.ImGroupMember> imGroupMemberList = new ArrayList<>();
+            // 融支IM用户退群
+            List<GroupModel> groupModelList = new ArrayList<>();
+            // 腾讯云IM用户退群
+            List<GroupMemberWrapper.ImGroupMember> imGroupMembers = Lists.newArrayList();
+            for (ImGroupModel imGroupModel : groupModels) {
+                com.ym.mec.biz.dal.entity.ImGroupMember imGroupMember = new com.ym.mec.biz.dal.entity.ImGroupMember();
+                imGroupMember.setImGroupId(imGroupModel.getId());
+                imGroupMember.setUserId(Integer.parseInt(imGroupModel.getMemberList().get(0).getId()));
+                imGroupMemberList.add(imGroupMember);
+
+                GroupMember groupMember = new GroupMember(imGroupMember.getUserId().toString(), imGroupModel.getId());
+                GroupModel groupModel = new GroupModel(imGroupModel.getId(), new GroupMember[]{groupMember}, imGroupModel.getName());
+                groupModelList.add(groupModel);
+
+                // 腾讯云
+                imGroupMembers.add(GroupMemberWrapper.ImGroupMember.builder()
+                    .groupId(imGroupModel.getId())
+                    .userId(imGroupMember.getUserId().longValue())
+                    .imUserId(imGroupMember.getUserId().toString())
+                    .build());
+            }
+            imGroupMemberService.batchDeleteByGroupIdAndUserId(imGroupMemberList);
+            // 用户批量退出群组
+            if (RongCloudImPlugin.PLUGIN_NAME.equals(imPluginContext.defaultService())) {
+                // 融云退群
+                imFeignService.groupBatchQuit(groupModelList);
+            } else {
+                // 腾讯云退群
+                if (org.apache.commons.collections.CollectionUtils.isNotEmpty(imGroupMembers)) {
+
+                    Map<String, List<GroupMemberWrapper.ImGroupMember>> groupMembers = imGroupMembers.stream()
+                        .collect(Collectors.groupingBy(GroupMemberWrapper.ImGroupMember::getGroupId));
+
+                    for (Map.Entry<String, List<GroupMemberWrapper.ImGroupMember>> entry : groupMembers.entrySet()) {
+
+                        try {
+                            // 用户退群
+                            imGroupCoreService.groupQuit(entry.getValue(), entry.getKey());
+                        } catch (Exception e) {
+                            log.error("腾讯云IM用户退群失败,groupId:{}, members={}", entry.getKey(), JSON.toJSONString(entry.getValue()), e);
                         }
                     }
                 }
             }
-        });
+
+        }
         //更换教务老师等数据
         employeeDao.employeeLevel(employeeLevelDtos);
         //新增离职时间
         employeeDao.updateUserDemissionDate(levelUserId);
         //冻结用户
         employeeDao.updateUserLock(levelUserId, 1);
-        //用户退出登陆
-        sysUserFeignService.exitByPhone("SYSTEM", teacherDao.getUser(levelUserId).getPhone());
-        CompletableFuture.runAsync(() -> {
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CompletableFuture<Boolean> refreshUserFriend = CompletableFuture.supplyAsync(() -> {
             //获取用户担任教务老师、维修技师的所有乐团列表
             List<String> musicGroupIds = employeeDao.queryMusicGroupIdByUserId(levelUserId);
             //获取用户担任教务老师的所有网管课列表
             List<String> practiceGroupIds = employeeDao.queryPracticeGroupIdByUserId(levelUserId);
             //获取用户担任教务老师的所有VIP课列表
             List<String> vipGroupIds = employeeDao.queryVipGroupIdByUserId(levelUserId);
-            if (CollectionUtils.isNotEmpty(musicGroupIds)) {
+            boolean refreshFlag = false;
+            if (musicGroupIds.size() > 0) {
                 for (String musicGroupId : musicGroupIds) {
                     imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.MUSIC);
                 }
+                refreshFlag = true;
             }
-            if (CollectionUtils.isNotEmpty(practiceGroupIds)) {
+            if (practiceGroupIds.size() > 0) {
                 for (String musicGroupId : practiceGroupIds) {
                     imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.PRACTICE);
                 }
+                refreshFlag = true;
             }
-            if (CollectionUtils.isNotEmpty(vipGroupIds)) {
+            if (vipGroupIds.size() > 0) {
                 for (String musicGroupId : vipGroupIds) {
                     imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.VIP);
                 }
+                refreshFlag = true;
             }
-            if (CollectionUtils.isNotEmpty(musicGroupIds) || CollectionUtils.isNotEmpty(practiceGroupIds) || CollectionUtils.isNotEmpty(vipGroupIds)) {
+            return refreshFlag;
+        }, executor);
+        Boolean join = refreshUserFriend.join();
+        if (join) {
+            refreshUserFriend.thenRun(() -> {
                 //更新群成员数量
                 imGroupDao.updateMemberNum();
                 //删除重复的群成员
                 imGroupMemberService.delRepeat();
-            }
-        }, exportExecutorService);
+            });
+        }
+        executor.shutdown();
     }
-
     @Override
     public List<Integer> queryUserRole(Integer sysUserId) {
         return employeeDao.queryUserRole(sysUserId);