Browse Source

机构群限制调整

yuanliang 11 months ago
parent
commit
f837bc7634

+ 1 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/website/controller/WebCourseScheduleController.java

@@ -23,6 +23,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;

+ 5 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupMemberAuditServiceImpl.java

@@ -100,7 +100,7 @@ public class ImGroupMemberAuditServiceImpl extends ServiceImpl<ImGroupMemberAudi
         DistributedLock.of(redissonClient).runIfLockToFunction(lockName, (x)-> {
 
             // 统计群成员数量,大于等于群组最大人数时,不允许加入
-            if (!verifyGroupMemberJoinLimit(groupId)) {
+            if (!verifyGroupMemberJoinLimit(groupId, 1)) {
                 throw new BizException("群成员数量已达上限");
             }
 
@@ -156,7 +156,8 @@ public class ImGroupMemberAuditServiceImpl extends ServiceImpl<ImGroupMemberAudi
         DistributedLock.of(redissonClient).runIfLockToFunction(lockName, (x)-> {
 
             // 校验群成员加入限制
-            if (!verifyGroupMemberJoinLimit(groupId)) {
+            String[] split = auditIds.split(",");
+            if (AuditStatusEnum.OPEN.equals(auditStatus) && !verifyGroupMemberJoinLimit(groupId, split.length)) {
                 SysConfig config = sysConfigService.findByParamName(SysConfigConstant.GROUP_MEMBER_LIMIT);
                 throw new BizException("群成员人数上限为:" + config.getParamValue() + "人");
             }
@@ -186,13 +187,13 @@ public class ImGroupMemberAuditServiceImpl extends ServiceImpl<ImGroupMemberAudi
      * 校验群成员加入限制
      * @param groupId 群组ID
      */
-    private Boolean verifyGroupMemberJoinLimit(String groupId) {
+    private Boolean verifyGroupMemberJoinLimit(String groupId,int addNum) {
         // 统计群成员数量,大于等于群组最大人数时,不允许加入
         int memberCount = imGroupMemberService.countGroupMember(groupId);
         // 查询群成员人数限制
         SysConfig config = sysConfigService.findByParamName(SysConfigConstant.GROUP_MEMBER_LIMIT);
         if (Objects.nonNull(config) && Integer.parseInt(config.getParamValue()) > 0
-            && memberCount > Integer.parseInt(config.getParamValue())) {
+            && (memberCount + addNum) >= Integer.parseInt(config.getParamValue())) {
             return false;
         }
         return true;

+ 21 - 18
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java

@@ -427,13 +427,14 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
             SysConfig config = sysConfigService.findByParamName(SysConfigConstant.GROUP_MEMBER_LIMIT);
             if (Objects.nonNull(config) && Integer.parseInt(config.getParamValue()) > 0) {
                 int groupMemberLimit = Integer.parseInt(config.getParamValue());
-                if (CollectionUtils.size(studentIds) > groupMemberLimit) {
+                if ((CollectionUtils.size(studentIds) + 1) > groupMemberLimit) {
 
                     // 已加入群组用户标记
                     List<Long> userIds = Lists.newArrayList(studentIds);
-                    studentIds = Sets.newHashSet(userIds.subList(0, groupMemberLimit));
+                    studentIds = Sets.newHashSet(userIds.subList(0, groupMemberLimit - 1));
                     // 未加入群组用户标记
-                    noGroupJoinUserIds.addAll(userIds.subList(groupMemberLimit, userIds.size()));
+                    Set<Long> addStudentIds = studentIds;
+                    noGroupJoinUserIds.addAll(userIds.stream().filter(n->!addStudentIds.contains(n)).collect(Collectors.toList()));
                     // 重置用户入群加入标记
                     courseScheduleStudentPaymentDao.updateGroupJoinStatus(courseGroupId, courseGroupType, false,
                         noGroupJoinUserIds);
@@ -441,22 +442,24 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
             }
         }
 
-        // 添加学生
-        List<ImGroupMember> groupMembers = imGroupMemberService.initGroupMembers(groupId, studentIds, ImGroupMemberRoleType.STUDENT);
-        List<com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupMemberWrapper.ImGroupMember> groupMemberList = Lists.newArrayList();
-        for (ImGroupMember groupMember : groupMembers) {
-            groupMemberList.add(com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupMemberWrapper.ImGroupMember.builder()
-                    .groupId(groupMember.getGroupId())
-                    .userId(groupMember.getUserId())
-                    .clientType(groupMember.getRoleType().getCode())
-                    .avatar(groupMember.getAvatar())
-                    .nickname(groupMember.getNickname())
-                    .isAdmin(groupMember.getIsAdmin())
-                    .imUserId(getImUserId(groupMember.getUserId().toString(), groupMember.getRoleType().getCode()))
-                    .roleType(groupMember.getRoleType().getCode())
-                    .build());
+        if (!studentIds.isEmpty()) {
+            // 添加学生
+            List<ImGroupMember> groupMembers = imGroupMemberService.initGroupMembers(groupId, studentIds, ImGroupMemberRoleType.STUDENT);
+            List<com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupMemberWrapper.ImGroupMember> groupMemberList = Lists.newArrayList();
+            for (ImGroupMember groupMember : groupMembers) {
+                groupMemberList.add(com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupMemberWrapper.ImGroupMember.builder()
+                        .groupId(groupMember.getGroupId())
+                        .userId(groupMember.getUserId())
+                        .clientType(groupMember.getRoleType().getCode())
+                        .avatar(groupMember.getAvatar())
+                        .nickname(groupMember.getNickname())
+                        .isAdmin(groupMember.getIsAdmin())
+                        .imUserId(getImUserId(groupMember.getUserId().toString(), groupMember.getRoleType().getCode()))
+                        .roleType(groupMember.getRoleType().getCode())
+                        .build());
+            }
+            imGroupCoreService.saveImGroupMemberList(groupId, groupMemberList);
         }
-        imGroupCoreService.saveImGroupMemberList(groupId, groupMemberList);
         //处理本地群成员列表
         // 添加老师
 //        List<ImGroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(),