送礼-钱包-扣钻-放开嵌套事务
This commit is contained in:
@@ -196,7 +196,8 @@ public class GiftSendService extends BaseService {
|
||||
return giftSendConsumeGoldService.exchangeGoldToSend(sendUid, goldNum);
|
||||
} else {
|
||||
//账单等mq
|
||||
return userPurseService.subDiamond(sendUid, goldNum.doubleValue(), objTypeEnum, UserPurse::getDiamonds);
|
||||
//因为外层有事务
|
||||
return userPurseService.subDiamondWithoutTx(sendUid, goldNum.doubleValue(), objTypeEnum, BusiStatus.PURSEMONEYNOTENOUGH, UserPurse::getDiamonds);
|
||||
}
|
||||
|
||||
} else if (giftSource == Constant.GiftSource.BACKPACK) {
|
||||
|
@@ -147,6 +147,39 @@ public class UserPurseService extends ServiceImpl<UserPurseMapper,UserPurse> {
|
||||
return SpringContextHolder.getBean(UserPurseService.class).subDiamond(uid, diamondNum, objTypeEnum, BusiStatus.PURSEMONEYNOTENOUGH, billConsumer);
|
||||
}
|
||||
|
||||
//@Frozen
|
||||
//@Transactional(rollbackFor = Exception.class, transactionManager = "mybatisplusTransactionManager")
|
||||
public UserPurse subDiamondWithoutTx(Long uid, Double diamondNum, BillObjTypeEnum objTypeEnum, BusiStatus busiStatus, Consumer<UserPurse> billConsumer) {
|
||||
if (diamondNum <= 0d) {
|
||||
throw new ServiceException(BusiStatus.AMOUNT_PARAM_ERROR);
|
||||
}
|
||||
|
||||
String desc = objTypeEnum.getDesc();
|
||||
UserPurse after = withLock(uid, RedisKey.lock_user_diamond, userPurse-> {
|
||||
double restDiamond = DoubleUtil.sub(userPurse.getDiamonds(), diamondNum);
|
||||
if (restDiamond < 0d){
|
||||
throw new ServiceException(busiStatus);
|
||||
}
|
||||
log.info("subDiamond 操作前,buss:{},userPurse:{}", desc, gson.toJson(userPurse));
|
||||
int ret = baseMapper.updateMinusDiamonds(uid,diamondNum);
|
||||
boolean result = SqlHelper.retBool(ret);
|
||||
if(!result) {
|
||||
throw new ServiceException(BusiStatus.SERVERBUSY);
|
||||
}
|
||||
userPurse.setDiamonds(DoubleUtil.sub(userPurse.getDiamonds(), diamondNum));
|
||||
log.info("subDiamond 操作后,buss:{},userPurse:{}", desc, gson.toJson(userPurse));
|
||||
return userPurse;
|
||||
});
|
||||
|
||||
if (null != billConsumer) {
|
||||
billConsumer.accept(after);
|
||||
} else {
|
||||
billRecordService.insertGeneralBillRecord(uid, objTypeEnum, diamondNum, after);
|
||||
}
|
||||
|
||||
return after;
|
||||
}
|
||||
|
||||
@Frozen
|
||||
@Transactional(rollbackFor = Exception.class, transactionManager = "mybatisplusTransactionManager")
|
||||
public UserPurse subDiamond(Long uid, Double diamondNum, BillObjTypeEnum objTypeEnum, BusiStatus busiStatus, Consumer<UserPurse> billConsumer) {
|
||||
|
Reference in New Issue
Block a user