diff --git a/src/main/java/com/tailbet/job/GameJob.java b/src/main/java/com/tailbet/job/GameJob.java index d0fa0c1..8eabe19 100644 --- a/src/main/java/com/tailbet/job/GameJob.java +++ b/src/main/java/com/tailbet/job/GameJob.java @@ -229,8 +229,29 @@ public class GameJob { * 假人托领取剩余份额(循环领取直到红包领完) */ private void fakeUserReceiveRemaining(RedPacket rp) { - List fakes = fakeUserService.getFakeUsers(); + if (rp.getGroupId() == null) { + log.warn("红包未关联群组,托跳过领取: rpId={}", rp.getId()); + return; + } + + // 仅允许群内假人领取,避免跨群领取红包 + List groupMemberIds = groupMemberMapper.selectList( + new LambdaQueryWrapper() + .eq(GroupMember::getGroupId, rp.getGroupId()) + .select(GroupMember::getUserId)) + .stream() + .map(GroupMember::getUserId) + .collect(Collectors.toList()); + if (groupMemberIds.isEmpty()) { + log.warn("红包所属群组无成员,托跳过领取: rpId={}, groupId={}", rp.getId(), rp.getGroupId()); + return; + } + + List fakes = fakeUserService.getFakeUsers().stream() + .filter(fake -> groupMemberIds.contains(fake.getId())) + .toList(); if (fakes.isEmpty()) { + log.info("红包所属群组无可用假人,托跳过领取: rpId={}, groupId={}", rp.getId(), rp.getGroupId()); return; }