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 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("操作失败"); } } } } }