package cc.mrbird.febs.user.service.Impl;
|
|
import cc.mrbird.febs.common.exception.FebsException;
|
import cc.mrbird.febs.common.utils.ValidateEntityUtils;
|
import cc.mrbird.febs.user.entity.ChatWallet;
|
import cc.mrbird.febs.user.mapper.ChatWalletMapper;
|
import cc.mrbird.febs.user.service.IChatWalletService;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
|
import java.math.BigDecimal;
|
|
@Slf4j
|
@Service
|
@RequiredArgsConstructor
|
public class ChatWalletServiceImpl extends ServiceImpl<ChatWalletMapper, ChatWallet> implements IChatWalletService {
|
|
@Override
|
public void addBalance(BigDecimal amount, Long memberId) {
|
if (BigDecimal.ZERO.compareTo(amount) > 0) {
|
throw new FebsException("增加余额异常");
|
}
|
int i = 0;
|
boolean flag = true;
|
|
while (flag) {
|
i++;
|
ChatWallet wallet = ValidateEntityUtils.ensureColumnReturnEntity(memberId, ChatWallet::getMemberId, this.baseMapper::selectOne, "钱包不存在");
|
wallet.setBalance(wallet.getBalance().add(amount));
|
int result = this.baseMapper.updateBalanceWithVersion(wallet);
|
if (result > 0) {
|
flag = false;
|
} else {
|
if (i > 2) {
|
throw new FebsException("操作失败");
|
}
|
}
|
}
|
}
|
|
@Override
|
public void reduceBalance(BigDecimal amount, Long memberId) {
|
int i = 0;
|
boolean flag = true;
|
|
while (flag) {
|
i++;
|
ChatWallet wallet = ValidateEntityUtils.ensureColumnReturnEntity(memberId, ChatWallet::getMemberId, this.baseMapper::selectOne, "钱包不存在");
|
if (amount.compareTo(wallet.getBalance()) > 0) {
|
throw new FebsException("余额不足");
|
}
|
|
wallet.setBalance(wallet.getBalance().subtract(amount));
|
|
int result = this.baseMapper.updateBalanceWithVersion(wallet);
|
if (result > 0) {
|
flag = false;
|
} else {
|
if (i > 2) {
|
throw new FebsException("操作失败");
|
}
|
}
|
}
|
}
|
|
|
}
|