sud小游戏-门票-结算事件

This commit is contained in:
2025-08-05 17:54:19 +08:00
committed by hokli
parent 676a0c3c59
commit 9b64ac8c6b
5 changed files with 56 additions and 10 deletions

View File

@@ -0,0 +1,18 @@
package com.accompany.business.dto.miniGame;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class MiniGamePaidLudoSettlementRecord {
private String mgId;
private Long roundId;
private Long roomUid;
private Long uid;
private BigDecimal ticket;
private Date gameEndTime;
}

View File

@@ -7,8 +7,8 @@ import org.springframework.context.ApplicationEvent;
* @date: 2024/5/22 17:06
* @description:
*/
public class MiniGameFinishEvent extends ApplicationEvent {
public MiniGameFinishEvent(Object source) {
public class MiniGamePaidLudoSettlementEvent extends ApplicationEvent {
public MiniGamePaidLudoSettlementEvent(Object source) {
super(source);
}
}

View File

@@ -2,13 +2,11 @@ package com.accompany.business.event.listener.miniGame;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.accompany.business.dto.miniGame.GameEndDto;
import com.accompany.business.dto.miniGame.GameModeDto;
import com.accompany.business.dto.miniGame.MiniGameForNavConfigDto;
import com.accompany.business.dto.miniGame.PlayerResultDto;
import com.accompany.business.dto.miniGame.*;
import com.accompany.business.enums.game.NavGameMatchStatusEnum;
import com.accompany.business.enums.game.NavGameRoundStatusEnum;
import com.accompany.business.event.MiniGameSettlementEvent;
import com.accompany.business.event.miniGame.MiniGamePaidLudoSettlementEvent;
import com.accompany.business.model.chat.ChatRoom;
import com.accompany.business.model.miniGame.MiniGameMatch;
import com.accompany.business.model.miniGame.MiniGameMatchRound;
@@ -24,6 +22,7 @@ import com.accompany.business.service.record.BillRecordService;
import com.accompany.common.constant.Constant;
import com.accompany.common.netease.ErBanNetEaseService;
import com.accompany.common.redis.RedisKey;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.common.utils.GsonUtil;
import com.accompany.core.enumeration.BillObjTypeEnum;
import com.accompany.core.model.Users;
@@ -33,10 +32,12 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.Duration;
import java.time.Instant;
import java.util.Date;
@@ -82,6 +83,9 @@ public class MiniGameForNavSettleListener implements ApplicationListener<MiniGam
@Autowired
private MiniGameForSudService miniGameForSudService;
@Autowired
private ApplicationContext applicationContext;
@Override
public void onApplicationEvent(MiniGameSettlementEvent event) {
Object source = event.getSource();
@@ -191,7 +195,16 @@ public class MiniGameForNavSettleListener implements ApplicationListener<MiniGam
}
for (PlayerResultDto result : results){
//todo pushEvent
Long uid = Long.valueOf(result.getUid());
MiniGamePaidLudoSettlementRecord record = new MiniGamePaidLudoSettlementRecord();
record.setMgId(mgId);
record.setRoundId(miniGameMatchRound.getId());
record.setRoomUid(roomId);
record.setUid(uid);
record.setTicket(BigDecimal.valueOf(gameModeDto.getTicket()));
record.setGameEndTime(DateTimeUtil.convertMsToDate((long) (gameEndDto.getBattle_end_at() * 1000)));
applicationContext.publishEvent(new MiniGamePaidLudoSettlementEvent(record));
}
}
}

View File

@@ -65,7 +65,8 @@ public class MiniGameLudoSettleListener implements ApplicationListener<MiniGameS
Long uid = Long.valueOf(result.getUid());
Users u = usersService.getNotNullUsersByUid(uid);
MiniGameLudoConfigDto partitionConfigDto = miniGameLudoService.getConfigByPartitionId(configDto, u.getPartitionId());
miniGameLudoTicketService.settlement(uid, u.getPartitionId(), configDto.getMgIdStr(), roomId, partitionConfigDto.getTicket());
miniGameLudoTicketService.settlement(uid, u.getPartitionId(), configDto.getMgIdStr(), roomId, partitionConfigDto.getTicket(),
gameEndDto.getGame_round_id(), gameEndDto.getBattle_end_at());
}
}
}

View File

@@ -1,13 +1,17 @@
package com.accompany.business.service.miniGame.impl;
import com.accompany.business.dto.miniGame.MiniGamePaidLudoSettlementRecord;
import com.accompany.business.event.miniGame.MiniGamePaidLudoSettlementEvent;
import com.accompany.business.service.purse.UserPurseService;
import com.accompany.business.service.record.BillRecordService;
import com.accompany.common.redis.RedisKey;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.BillObjTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RMap;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@@ -23,6 +27,8 @@ public class MiniGameLudoTicketService {
private UserPurseService userPurseService;
@Autowired
private BillRecordService billRecordService;
@Autowired
private ApplicationContext applicationContext;
public void pay(Long uid, Integer partitionId, String mgId, Long roomUid, BigDecimal ticket) {
String objId = String.join("_", mgId, partitionId.toString(), roomUid.toString());
@@ -83,7 +89,8 @@ public class MiniGameLudoTicketService {
}
@Async
public void settlement(Long uid, Integer partitionId, String mgId, Long roomUid, BigDecimal ticket) {
public void settlement(Long uid, Integer partitionId, String mgId, Long roomUid, BigDecimal ticket,
String gameRoundId, Integer battleEndAt) {
String objId = String.join("_", mgId, partitionId.toString(), roomUid.toString());
RMap<Long, Integer> ticketConsumeCacheMap = getTicketConsumeCacheMap(objId);
@@ -102,7 +109,14 @@ public class MiniGameLudoTicketService {
log.info("[miniGameLudoTicket] settlement success uid {} mgId {} partitionId {} roomUid {} beforeNum {} afterNum {}",
uid, mgId, partitionId, roomUid, beforeNum, afterNum);
//todo pushEvent
MiniGamePaidLudoSettlementRecord record = new MiniGamePaidLudoSettlementRecord();
record.setMgId(mgId);
record.setRoundId(Long.parseLong(gameRoundId));
record.setRoomUid(roomUid);
record.setUid(uid);
record.setTicket(ticket);
record.setGameEndTime(DateTimeUtil.convertMsToDate((long) (battleEndAt * 1000)));
applicationContext.publishEvent(new MiniGamePaidLudoSettlementEvent(record));
}
public RMap<Long, Integer> getTicketCountCacheMap(String objId) {