公会-土耳其-钱包-增加紫晶类型
This commit is contained in:
@@ -58,6 +58,7 @@ public enum RedisKey {
|
||||
lock_user_diamond, // 钻石分布式锁
|
||||
lock_user_crystal, // 水晶分布式锁
|
||||
lock_user_guild_usd, // 公会usd分布式锁
|
||||
lock_user_guild_crystal, // 公会usd分布式锁
|
||||
lock_gift_message, // 消费送礼物消息锁
|
||||
mq_gift_status, // 礼物消息的状态
|
||||
mq_prize_status, // 中奖消息的状态
|
||||
|
@@ -16,6 +16,7 @@ public enum CurrencyEnum {
|
||||
GOLD((byte)3, "钻石", 0.0001),
|
||||
GUILD_USD((byte)4, "公会薪资", 1),
|
||||
GAME_USD((byte)5, "游戏薪资", 1),
|
||||
GUILD_CRYSTAL((byte)6, "公会紫晶", 0.0000625),
|
||||
;
|
||||
|
||||
CurrencyEnum(byte value, String desc, double exchangeRate) {
|
||||
|
@@ -28,6 +28,8 @@ public class UserPurse {
|
||||
|
||||
private Double guildUsd;
|
||||
|
||||
private Double guildCrystal;
|
||||
|
||||
private Boolean firstCharge;
|
||||
|
||||
private Date updateTime;
|
||||
@@ -41,6 +43,8 @@ public class UserPurse {
|
||||
return diamonds;
|
||||
} else if (CurrencyEnum.GUILD_USD.equals(currency)) {
|
||||
return guildUsd;
|
||||
} else if (CurrencyEnum.GUILD_CRYSTAL.equals(currency)) {
|
||||
return guildCrystal;
|
||||
}
|
||||
throw new ServiceException(BusiStatus.PARAMETERILLEGAL);
|
||||
}
|
||||
|
@@ -28,6 +28,10 @@ public interface UserPurseMapper extends BaseMapper<UserPurse> {
|
||||
|
||||
int updateMinusGuildUsd(@Param("uid") Long uid, @Param("guildUsd") Double guildUsd);
|
||||
|
||||
int updateAddGuildCrystal(@Param("uid") Long uid, @Param("guildCrystal") Double guildCrystal);
|
||||
|
||||
int updateMinusGuildCrystal(@Param("uid") Long uid, @Param("guildCrystal") Double guildCrystal);
|
||||
|
||||
int excGoldToDiamond(@Param("uid") Long uid, @Param("excNum") Double excNum, @Param("diamondNum") Double diamondNum);
|
||||
|
||||
int exCrystalToGold(@Param("uid") Long uid, @Param("excNum") Double excNum, @Param("goldNum") Double goldNum);
|
||||
|
@@ -502,6 +502,85 @@ public class UserPurseService extends ServiceImpl<UserPurseMapper,UserPurse> {
|
||||
return after;
|
||||
}
|
||||
|
||||
public UserPurse subGuildCrystal(Long uid, Double guildCrystalNum, BillObjTypeEnum objTypeEnum) {
|
||||
return SpringContextHolder.getBean(UserPurseService.class).subGuildCrystal(uid, guildCrystalNum, objTypeEnum, BusiStatus.PURSE_MONEY_NOT_ENOUGH, null);
|
||||
}
|
||||
|
||||
public UserPurse subGuildCrystal(Long uid, Double guildCrystalNum, BillObjTypeEnum objTypeEnum, Consumer<UserPurse> billConsumer) {
|
||||
return SpringContextHolder.getBean(UserPurseService.class).subGuildCrystal(uid, guildCrystalNum, objTypeEnum, BusiStatus.PURSE_MONEY_NOT_ENOUGH, billConsumer);
|
||||
}
|
||||
|
||||
@Frozen
|
||||
@Transactional(rollbackFor = Exception.class, transactionManager = "mybatisplusTransactionManager")
|
||||
public UserPurse subGuildCrystal(Long uid, Double guildCrystalNum, BillObjTypeEnum objTypeEnum, BusiStatus busiStatus, Consumer<UserPurse> billConsumer) {
|
||||
if (guildCrystalNum <= 0d) {
|
||||
throw new ServiceException(BusiStatus.AMOUNT_PARAM_ERROR);
|
||||
}
|
||||
String desc = objTypeEnum.getDesc();
|
||||
UserPurse after = withLock(uid, RedisKey.lock_user_guild_crystal, userPurse -> {
|
||||
double restGold = DoubleUtil.sub(userPurse.getGuildCrystal(), guildCrystalNum);
|
||||
if (restGold < 0d){
|
||||
throw new ServiceException(busiStatus);
|
||||
}
|
||||
|
||||
//todo
|
||||
if (familyDiamondSettlementPurseService.inSettlement(uid)){
|
||||
throw new ServiceException(BusiStatus.CLAN_GOLD_SETTLEMENT);
|
||||
}
|
||||
|
||||
log.info("subGuildCrystalNum 操作前,buss:{},userPurse:{}", desc, gson.toJson(userPurse));
|
||||
int ret = baseMapper.updateMinusGuildCrystal(uid, guildCrystalNum);
|
||||
boolean result = SqlHelper.retBool(ret);
|
||||
if(!result) {
|
||||
throw new ServiceException(BusiStatus.SERVERBUSY);
|
||||
}
|
||||
userPurse.setGuildCrystal(DoubleUtil.sub(userPurse.getGuildCrystal(), guildCrystalNum));
|
||||
userPurse.setUpdateTime(new Date());
|
||||
log.info("subGuildCrystalNum 操作后,buss:{},userPurse:{}", desc, gson.toJson(userPurse));
|
||||
return userPurse;
|
||||
});
|
||||
|
||||
if (null != billConsumer) {
|
||||
billConsumer.accept(after);
|
||||
} else {
|
||||
billRecordService.insertGeneralBillRecord(uid, objTypeEnum, guildCrystalNum, after);
|
||||
}
|
||||
|
||||
return after;
|
||||
}
|
||||
|
||||
public UserPurse addGuildCrystal(Long uid, Double guildCrystal, BillObjTypeEnum objTypeEnum) {
|
||||
return SpringContextHolder.getBean(UserPurseService.class).addGuildCrystal(uid, guildCrystal, objTypeEnum, null);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class, transactionManager = "mybatisplusTransactionManager")
|
||||
public UserPurse addGuildCrystal(Long uid, Double guildCrystalNum, BillObjTypeEnum objTypeEnum, Consumer<UserPurse> billConsumer) {
|
||||
if (guildCrystalNum <= 0d) {
|
||||
throw new ServiceException(BusiStatus.AMOUNT_PARAM_ERROR);
|
||||
}
|
||||
String desc = objTypeEnum.getDesc();
|
||||
UserPurse after = withLock(uid, RedisKey.lock_user_guild_crystal, userPurse -> {
|
||||
log.info("addGuildCrystal 操作前,buss:{},userPurse:{}", desc, gson.toJson(userPurse));
|
||||
int ret = baseMapper.updateAddGuildCrystal(uid, guildCrystalNum);
|
||||
boolean result = SqlHelper.retBool(ret);
|
||||
if(!result) {
|
||||
throw new ServiceException(BusiStatus.SERVERBUSY);
|
||||
}
|
||||
userPurse.setGuildCrystal(DoubleUtil.add(guildCrystalNum, userPurse.getGuildCrystal()));
|
||||
userPurse.setUpdateTime(new Date());
|
||||
log.info("addGuildCrystal 操作后,buss:{},userPurse:{}", desc, gson.toJson(userPurse));
|
||||
return userPurse;
|
||||
});
|
||||
|
||||
if (null != billConsumer) {
|
||||
billConsumer.accept(after);
|
||||
} else {
|
||||
billRecordService.insertGeneralBillRecord(uid, objTypeEnum, guildCrystalNum, after);
|
||||
}
|
||||
|
||||
return after;
|
||||
}
|
||||
|
||||
private <R> R withLock(Long uid, RedisKey redisKey, Function<UserPurse, R> function){
|
||||
String lockKey = redisKey.getKey(String.valueOf(uid));
|
||||
RLock lock = redissonClient.getLock(lockKey);
|
||||
|
@@ -39,6 +39,15 @@
|
||||
where uid=#{uid} and guild_usd >= #{guildUsd}
|
||||
</update>
|
||||
|
||||
<update id="updateAddGuildCrystal">
|
||||
update user_purse set guild_crystal = guild_crystal + #{guildCrystal},update_time=now() where uid=#{uid}
|
||||
</update>
|
||||
|
||||
<update id="updateMinusGuildCrystal">
|
||||
update user_purse set guild_crystal = guild_crystal - #{guildCrystal},update_time=now()
|
||||
where uid=#{uid} and guild_crystal >= #{guildCrystal}
|
||||
</update>
|
||||
|
||||
<update id="excGoldToDiamond" parameterType="com.accompany.business.model.UserPurse">
|
||||
update user_purse set golds = golds - #{excNum},diamonds = diamonds + #{diamondNum}, update_time=now()
|
||||
where uid=#{uid} and golds >= #{excNum}
|
||||
|
Reference in New Issue
Block a user