fix 假人托领取剩余份额(循环领取直到红包领完)
This commit is contained in:
@@ -5,12 +5,14 @@ import com.tailbet.model.entity.RedPacket;
|
||||
import com.tailbet.model.entity.User;
|
||||
import com.tailbet.mapper.GameRoundMapper;
|
||||
import com.tailbet.mapper.RedPacketMapper;
|
||||
import com.tailbet.mapper.RedPacketRecvMapper;
|
||||
import com.tailbet.mapper.UserMapper;
|
||||
import com.tailbet.mapper.DigitWhiteMapper;
|
||||
import com.tailbet.mapper.DrawRecordMapper;
|
||||
import com.tailbet.mapper.SysConfigMapper;
|
||||
import com.tailbet.model.entity.DigitWhite;
|
||||
import com.tailbet.model.entity.DrawRecord;
|
||||
import com.tailbet.model.entity.RedPacketRecv;
|
||||
import com.tailbet.model.entity.SysConfig;
|
||||
import com.tailbet.service.IGameService;
|
||||
import com.tailbet.service.IRedPacketService;
|
||||
@@ -38,6 +40,7 @@ public class GameJob {
|
||||
|
||||
private final GameRoundMapper gameRoundMapper;
|
||||
private final RedPacketMapper redPacketMapper;
|
||||
private final RedPacketRecvMapper redPacketRecvMapper;
|
||||
private final DrawRecordMapper drawRecordMapper;
|
||||
private final SysConfigMapper sysConfigMapper;
|
||||
private final UserMapper userMapper;
|
||||
@@ -122,7 +125,7 @@ public class GameJob {
|
||||
}
|
||||
|
||||
/**
|
||||
* 假人托领取剩余份额
|
||||
* 假人托领取剩余份额(循环领取直到红包领完)
|
||||
*/
|
||||
private void fakeUserReceiveRemaining(RedPacket rp) {
|
||||
List<User> fakes = fakeUserService.getFakeUsers();
|
||||
@@ -130,21 +133,42 @@ public class GameJob {
|
||||
return;
|
||||
}
|
||||
|
||||
// 随机选一个假人
|
||||
User fake = fakes.get((int) (Math.random() * fakes.size()));
|
||||
// 循环领取直到红包领完
|
||||
while (true) {
|
||||
RedPacket rpCheck = redPacketMapper.selectById(rp.getId());
|
||||
if (rpCheck == null || rpCheck.getStatus() != 0) {
|
||||
// 红包已领完或不存在
|
||||
break;
|
||||
}
|
||||
|
||||
// 检查是否已经领取过
|
||||
var existing = redPacketMapper.selectList(new LambdaQueryWrapper<RedPacket>()
|
||||
.eq(RedPacket::getUserId, fake.getId()));
|
||||
if (!existing.isEmpty()) {
|
||||
return;
|
||||
// 查找还未领取的假人
|
||||
User fakeToUse = null;
|
||||
for (User fake : fakes) {
|
||||
// 检查该假人是否已领取过本红包
|
||||
var received = redPacketRecvMapper.selectList(
|
||||
new LambdaQueryWrapper<RedPacketRecv>()
|
||||
.eq(RedPacketRecv::getRpId, rp.getId())
|
||||
.eq(RedPacketRecv::getUserId, fake.getId()));
|
||||
if (received.isEmpty()) {
|
||||
fakeToUse = fake;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (fakeToUse == null) {
|
||||
// 所有假人都已领取过,无法继续
|
||||
log.warn("所有假人都已领取过本红包,无法继续: rpId={}", rp.getId());
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
redPacketService.receiveRp(rp.getId(), fake.getId());
|
||||
log.info("假人{}领取红包{}剩余份额", fake.getId(), rp.getId());
|
||||
redPacketService.receiveRp(rp.getId(), fakeToUse.getId());
|
||||
log.info("假人{}领取红包{}剩余份额", fakeToUse.getId(), rp.getId());
|
||||
} catch (Exception e) {
|
||||
// 忽略领取失败
|
||||
log.error("假人领取红包失败: rpId={}, fakeId={}, error={}", rp.getId(), fakeToUse.getId(), e.getMessage());
|
||||
// 可能是红包已领完,退出循环
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -369,7 +393,7 @@ public class GameJob {
|
||||
* 通知白名单用户(尾数试算完成)
|
||||
*/
|
||||
private void notifyWhiteUsers(Long roundId) {
|
||||
List<DigitWhite> whites = digitWhiteMapper.selectList(new LambdaQueryWrapper<DigitWhite>());
|
||||
List<DigitWhite> whites = digitWhiteMapper.selectList(new LambdaQueryWrapper<>());
|
||||
GameRound round = gameRoundMapper.selectById(roundId);
|
||||
if (round == null) return;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user