幸运24-额外-螺旋降级
This commit is contained in:
@@ -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);
|
||||||
|
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user