幸运24-额外-螺旋降级

This commit is contained in:
2025-10-15 21:11:37 +08:00
parent 780e1688f4
commit fe91bdb278
2 changed files with 6 additions and 61 deletions

View File

@@ -114,7 +114,9 @@ public class Lucky24GiftSendService {
return draw(config, partitionConfig, senderUid, partitionId, gift, everyGiftNum, everyoneGoldNum, receiverList, room, sendGiftTime); return draw(config, partitionConfig, senderUid, partitionId, gift, everyGiftNum, everyoneGoldNum, receiverList, room, sendGiftTime);
} }
Lucky24Record extraRecord = extraService.randomExtraRecord(config, extraPoolConfig, senderUid, partitionId, extraLuckerUid, gift, everyGiftNum, everyoneGoldNum, room, sendGiftTime); int extraDrawMultiple = extraService.drawMultiple(extraPoolConfig, senderUid, partitionId);
Lucky24Result extraResult = new Lucky24Result(Lucky24PoolTypeEnum.EXTRA_POOL.getType(), null, everyoneGoldNum, extraDrawMultiple, false);
Lucky24Record extraRecord = updateMeta(config, partitionConfig, senderUid, partitionId, gift, everyGiftNum, extraLuckerUid, everyoneGoldNum, room, sendGiftTime, null, extraResult);
List<Long> receiverUidList = new ArrayList<>(receiverList); List<Long> receiverUidList = new ArrayList<>(receiverList);
receiverUidList.remove(extraLuckerUid); receiverUidList.remove(extraLuckerUid);

View File

@@ -1,17 +1,13 @@
package com.accompany.business.service.lucky; package com.accompany.business.service.lucky;
import com.accompany.business.constant.Lucky24PoolTypeEnum;
import com.accompany.business.dto.lucky.Lucky24GiftConfig; import com.accompany.business.dto.lucky.Lucky24GiftConfig;
import com.accompany.business.model.Gift;
import com.accompany.common.utils.DateTimeUtil; import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.PartitionEnum; import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.model.Room;
import com.accompany.sharding.model.Lucky24Record;
import com.accompany.sharding.vo.Lucky24StockResultVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RMap; import org.redisson.api.RMap;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
@@ -28,12 +24,6 @@ public class Lucky24ExtraService {
private Lucky24ExtraStockService stockService; private Lucky24ExtraStockService stockService;
@Autowired @Autowired
private Lucky24UserMetaService userMetaService; private Lucky24UserMetaService userMetaService;
@Autowired
private Lucky24RobotMsgService robotMsgService;
@Autowired
private Lucky24SettlementService settlementService;
@Autowired
private Lucky24RecordService recordService;
public BigDecimal addStock(Integer partitionId, BigDecimal addScore) { public BigDecimal addStock(Integer partitionId, BigDecimal addScore) {
return stockService.addStock(partitionId, addScore); return stockService.addStock(partitionId, addScore);
} }
@@ -115,35 +105,6 @@ public class Lucky24ExtraService {
return luckyer; return luckyer;
} }
public Lucky24Record randomExtraRecord(Lucky24GiftConfig config, Lucky24GiftConfig.Lucky24ExtraPoolConfig extraPoolConfig, long senderUid, Integer partitionId, Long receiverUid,
Gift gift, int giftNum, long everyoneGoldNum, Room room, Date sendGiftTime) {
int drawMultiple = drawMultiple(extraPoolConfig, senderUid, partitionId);
long afterMultiple = drawMultiple;
// 平台库存
BigDecimal preWinGoldNum = BigDecimal.valueOf(afterMultiple * everyoneGoldNum);
Lucky24StockResultVo stockResultVo = judgeStock(partitionId, preWinGoldNum, senderUid, receiverUid, gift, giftNum, everyoneGoldNum, room, sendGiftTime);
if (!stockResultVo.isSuccess()) {
afterMultiple = 0L;
}
long winGoldNum = afterMultiple * everyoneGoldNum;
if (winGoldNum > 0L) {
settlementService.sendReward(config, senderUid, room, gift, winGoldNum, afterMultiple);
}
userMetaService.updateExtraUserMeta(senderUid, partitionId, everyoneGoldNum, winGoldNum);
log.info("[lucky24] extra uid {} partitionId {} receiverUid {} drawMultiple {} preWinGoldNum {} afterMultiple {} winGoldNum {}",
senderUid, partitionId, receiverUid, drawMultiple, preWinGoldNum, afterMultiple, winGoldNum);
return recordService.buildRecord(senderUid, partitionId, gift, giftNum, null != room ? room.getUid() : null,
receiverUid, Lucky24PoolTypeEnum.EXTRA_POOL.getType(), null,
Boolean.FALSE, drawMultiple, afterMultiple, !stockResultVo.isSuccess() ? stockResultVo : null, sendGiftTime);
}
public int drawMultiple(Lucky24GiftConfig.Lucky24ExtraPoolConfig extraPoolConfig, long senderUid, Integer partitionId) { public int drawMultiple(Lucky24GiftConfig.Lucky24ExtraPoolConfig extraPoolConfig, long senderUid, Integer partitionId) {
Map<String, Number> userMetaMapSnapshot = userMetaService.getUserMeta(senderUid).readAllMap(); Map<String, Number> userMetaMapSnapshot = userMetaService.getUserMeta(senderUid).readAllMap();
@@ -170,7 +131,7 @@ public class Lucky24ExtraService {
return 0; return 0;
} }
TreeMap<Long, TreeMap<BigDecimal, Integer>> inputJudgeMap = inputJudgeEntry.getValue(); TreeMap<Long, TreeMap<BigDecimal, Integer>> inputJudgeMap = inputJudgeEntry.getValue();
if (null == inputJudgeMap){ if (CollectionUtils.isEmpty(inputJudgeMap)){
return 0; return 0;
} }
@@ -190,7 +151,7 @@ public class Lucky24ExtraService {
return 0; return 0;
} }
TreeMap<BigDecimal, Integer> threeDayAgoInputMap = threeDayAgoInputEntry.getValue(); TreeMap<BigDecimal, Integer> threeDayAgoInputMap = threeDayAgoInputEntry.getValue();
if (null == threeDayAgoInputMap){ if (CollectionUtils.isEmpty(threeDayAgoInputMap)){
return 0; return 0;
} }
@@ -217,22 +178,4 @@ public class Lucky24ExtraService {
return drawMultiple; return drawMultiple;
} }
private Lucky24StockResultVo judgeStock(Integer partitionId, BigDecimal winGoldNum, Long senderUid, Long receiverUid,
Gift gift, int giftNum, long everyoneGoldNum,
Room room, Date sendGiftTime){
BigDecimal afterStock = stockService.subStock(partitionId, winGoldNum);
BigDecimal beforeStock = afterStock.add(winGoldNum);
boolean enough = afterStock.compareTo(BigDecimal.ZERO) >= 0;
if (!enough){
log.info("[lucky24] extraStock sender {} receiver {} 产出大于库存 winGoldNum {} afterStock {}",
senderUid, receiverUid, winGoldNum, afterStock);
afterStock = stockService.addStock(partitionId, winGoldNum);
robotMsgService.pushExtraStockNotEnough(partitionId, afterStock, senderUid, receiverUid, gift, giftNum, everyoneGoldNum, winGoldNum, room, sendGiftTime);
}
Lucky24StockResultVo resultVo = new Lucky24StockResultVo();
resultVo.setSuccess(enough);
resultVo.setExtraStock(beforeStock);
resultVo.setPreWinGoldNum(winGoldNum);
return resultVo;
}
} }