|
@@ -66,6 +66,7 @@ import com.yonge.cooleshow.common.constant.SysConfigConstant;
|
|
|
import com.yonge.cooleshow.common.entity.UploadReturnBean;
|
|
|
import com.yonge.toolset.base.exception.BizException;
|
|
|
import com.yonge.toolset.base.util.ThreadPool;
|
|
|
+import com.yonge.toolset.payment.util.DistributedLock;
|
|
|
import com.yonge.toolset.utils.date.DateUtil;
|
|
|
import io.rong.RongCloud;
|
|
|
import io.rong.methods.message.history.History;
|
|
@@ -367,27 +368,38 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
throw new BizException("添加的群成员不能为空");
|
|
|
|
|
|
}
|
|
|
- // 群成员数量限制校验
|
|
|
- int memberCount = imGroupMemberService.countGroupMember(groupId);
|
|
|
- // 查询群成员人数限制
|
|
|
- SysConfig config = sysConfigService.findByParamName(SysConfigConstant.GROUP_MEMBER_LIMIT);
|
|
|
- if (Objects.nonNull(config) && Integer.parseInt(config.getParamValue()) > 0
|
|
|
+ // 增加群成员校验锁,当群成员人数达到限制时,不允许再次加入
|
|
|
+ String lockName = "klx:group_member_add_lock:" + groupId;
|
|
|
+ DistributedLock.of(redissonClient).runIfLockToFunction(lockName, (x)-> {
|
|
|
+ // 群成员数量限制校验
|
|
|
+ int memberCount = imGroupMemberService.countGroupMember(groupId);
|
|
|
+ // 查询群成员人数限制
|
|
|
+ SysConfig config = sysConfigService.findByParamName(SysConfigConstant.GROUP_MEMBER_LIMIT);
|
|
|
+ if (Objects.nonNull(config) && Integer.parseInt(config.getParamValue()) > 0
|
|
|
&& (memberCount + studentIdList.size()) > Integer.parseInt(config.getParamValue())) {
|
|
|
- throw new BizException("群成员数量已达上限");
|
|
|
- }
|
|
|
+ throw new BizException("群成员人数上限为:" + config.getParamValue() + "人");
|
|
|
+ }
|
|
|
|
|
|
- List<ImGroupMember> groupMemberList = imGroupMemberService.initGroupMembers(groupId,
|
|
|
- studentIdList, ImGroupMemberRoleType.STUDENT);
|
|
|
- imGroupMemberService.join(groupMemberList, groupId);
|
|
|
+ try {
|
|
|
+ List<ImGroupMember> groupMemberList = imGroupMemberService.initGroupMembers(groupId,
|
|
|
+ studentIdList, ImGroupMemberRoleType.STUDENT);
|
|
|
+ imGroupMemberService.join(groupMemberList, groupId);
|
|
|
+
|
|
|
+ // 如果是机构群,学生自动添加老师好友
|
|
|
+ if (ImGroupType.ORG.equals(imGroup.getType())) {
|
|
|
+ List<ImGroupMember> teacherList = imGroupMemberService.lambdaQuery()
|
|
|
+ .eq(ImGroupMember::getGroupId, groupId)
|
|
|
+ .eq(ImGroupMember::getRoleType, ImGroupMemberRoleType.TEACHER)
|
|
|
+ .list();
|
|
|
+ teacherList.forEach(teacher -> imUserFriendService.saveUserFriend(teacher.getUserId(), studentIdList));
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("加入群组失败,{}", e.getMessage(), e);
|
|
|
+ throw new BizException(e.getMessage());
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }, null, 10L);
|
|
|
|
|
|
- // 如果是机构群,学生自动添加老师好友
|
|
|
- if (ImGroupType.ORG.equals(imGroup.getType())) {
|
|
|
- List<ImGroupMember> teacherList = imGroupMemberService.lambdaQuery()
|
|
|
- .eq(ImGroupMember::getGroupId, groupId)
|
|
|
- .eq(ImGroupMember::getRoleType, ImGroupMemberRoleType.TEACHER)
|
|
|
- .list();
|
|
|
- teacherList.forEach(teacher -> imUserFriendService.saveUserFriend(teacher.getUserId(), studentIdList));
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
|