From 114a0d93fe406f31450bbc1ac54a73ca49f4b746 Mon Sep 17 00:00:00 2001 From: wells <123456@qq.com> Date: Sun, 9 Aug 2026 09:25:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E7=BE=A4=EF=BC=8C=E6=8B=89?= =?UTF-8?q?=E5=81=87=E4=BA=BA=E5=85=A5=E7=BE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/tailbet/service/IFakeUserService.java | 5 ++++ .../service/impl/FakeUserServiceImpl.java | 14 +++++++++ .../service/impl/GroupServiceImpl.java | 29 +++++++++++++++---- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/tailbet/service/IFakeUserService.java b/src/main/java/com/tailbet/service/IFakeUserService.java index ea1089c..f184999 100644 --- a/src/main/java/com/tailbet/service/IFakeUserService.java +++ b/src/main/java/com/tailbet/service/IFakeUserService.java @@ -38,4 +38,9 @@ public interface IFakeUserService { * 获取假人列表 */ List getFakeUsers(); + + /** + * 从现有假人中随机挑选指定数量 + */ + List pickFakeUsers(int count); } diff --git a/src/main/java/com/tailbet/service/impl/FakeUserServiceImpl.java b/src/main/java/com/tailbet/service/impl/FakeUserServiceImpl.java index 47f0bd2..6fdf471 100644 --- a/src/main/java/com/tailbet/service/impl/FakeUserServiceImpl.java +++ b/src/main/java/com/tailbet/service/impl/FakeUserServiceImpl.java @@ -174,4 +174,18 @@ public class FakeUserServiceImpl implements IFakeUserService { .eq(User::getIsFake, 1) .eq(User::getStatus, 1)); } + + /** + * 从现有假人中随机挑选指定数量 + */ + @Override + public List pickFakeUsers(int count) { + List fakes = getFakeUsers(); + if (fakes.isEmpty()) { + return List.of(); + } + Collections.shuffle(fakes, RANDOM); + int size = Math.min(count, fakes.size()); + return new ArrayList<>(fakes.subList(0, size)); + } } diff --git a/src/main/java/com/tailbet/service/impl/GroupServiceImpl.java b/src/main/java/com/tailbet/service/impl/GroupServiceImpl.java index adc7258..076af4c 100644 --- a/src/main/java/com/tailbet/service/impl/GroupServiceImpl.java +++ b/src/main/java/com/tailbet/service/impl/GroupServiceImpl.java @@ -11,6 +11,7 @@ import com.tailbet.mapper.UserMapper; import com.tailbet.openim.OpenIMApiClient; import com.tailbet.service.IGroupService; import com.tailbet.service.IAuditService; +import com.tailbet.service.IFakeUserService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -38,6 +39,7 @@ public class GroupServiceImpl implements IGroupService { private final UserMapper userMapper; private final SysConfigMapper sysConfigMapper; private final IAuditService auditService; + private final IFakeUserService fakeUserService; private final OpenIMApiClient openIMApiClient; /** @@ -132,16 +134,31 @@ public class GroupServiceImpl implements IGroupService { groupMemberMapper.insert(buildMember(groupId, botUserId, ROLE_NORMAL, now)); } - // OpenIM 侧建群:群主为 owner,机器人作为初始成员 - List memberUserIDs = ownerIsBot - ? List.of() - : List.of(String.valueOf(botUserId)); + // 机器人入群 + if (!ownerIsBot) { + groupMemberMapper.insert(buildMember(groupId, botUserId, ROLE_NORMAL, now)); + } + + // 从现有假人中挑选10个进群 + List fakeUsers = fakeUserService.pickFakeUsers(10); + for (User fake : fakeUsers) { + groupMemberMapper.insert(buildMember(groupId, fake.getId(), ROLE_NORMAL, now)); + } + + // OpenIM 侧建群:群主、机器人和假人作为初始成员 + List memberUserIDs = new java.util.ArrayList<>(); + if (!ownerIsBot) { + memberUserIDs.add(String.valueOf(botUserId)); + } + fakeUsers.stream() + .map(fake -> String.valueOf(fake.getId())) + .forEach(memberUserIDs::add); openIMApiClient.createGroup(String.valueOf(groupId), name, String.valueOf(ownerUserId), memberUserIDs); // 审计日志 auditService.log(groupId, null, operatorId, "CREATE_GROUP", - String.format("{\"name\":\"%s\",\"ownerUserId\":%d,\"botUserId\":%d}", - name.replace("\\", "\\\\").replace("\"", "\\\""), ownerUserId, botUserId)); + String.format("{\"name\":\"%s\",\"ownerUserId\":%d,\"botUserId\":%d,\"fakeCount\":%d}", + name.replace("\\", "\\\\").replace("\"", "\\\""), ownerUserId, botUserId, fakeUsers.size())); log.info("创建群成功: groupId={}, name={}, ownerUserId={}, botUserId={}, operatorId={}", groupId, name, ownerUserId, botUserId, operatorId);