| | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | |
| | | } |
| | | } |
| | | |
| | | public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { |
| | | Field commission = MallMemberWallet.class.getDeclaredField("commission"); |
| | | MallMemberWallet wallet = new MallMemberWallet(); |
| | | commission.setAccessible(true); |
| | | commission.set(wallet, BigDecimal.valueOf(12.34d)); |
| | | |
| | | System.out.println(1); |
| | | } |
| | | |
| | | @Override |
| | | public void reduceCommission(BigDecimal amount, Long memberId) { |
| | | int i = 0; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void add(BigDecimal amount, Long memberId, String field) { |
| | | int i = 0; |
| | | boolean flag = true; |
| | | |
| | | while (flag) { |
| | | i++; |
| | | MallMemberWallet wallet = this.baseMapper.selectWalletByMemberId(memberId); |
| | | wallet.setCommission(wallet.getCommission().add(amount)); |
| | | |
| | | MallMemberWallet update = new MallMemberWallet(); |
| | | update.setId(wallet.getId()); |
| | | update.setRevision(wallet.getRevision()); |
| | | |
| | | Field declaredField = null; |
| | | try { |
| | | declaredField = MallMemberWallet.class.getDeclaredField(field); |
| | | declaredField.setAccessible(true); |
| | | declaredField.set(update, amount); |
| | | } catch (NoSuchFieldException | IllegalAccessException e) { |
| | | e.printStackTrace(); |
| | | throw new FebsException("金额新增失败"); |
| | | } |
| | | |
| | | int result = this.baseMapper.updateAmountWithVersion(wallet); |
| | | if (result > 0) { |
| | | flag = false; |
| | | } else { |
| | | if (i > 2) { |
| | | throw new FebsException("金额新增失败"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void reduce(BigDecimal amount, Long memberId, String field) { |
| | | int i = 0; |
| | | boolean flag = true; |
| | | |
| | | while (flag) { |
| | | i++; |
| | | MallMemberWallet wallet = this.baseMapper.selectWalletByMemberId(memberId); |
| | | |
| | | MallMemberWallet update = new MallMemberWallet(); |
| | | update.setId(wallet.getId()); |
| | | update.setRevision(wallet.getRevision()); |
| | | |
| | | try { |
| | | Field declaredField = MallMemberWallet.class.getDeclaredField(field); |
| | | declaredField.setAccessible(true); |
| | | BigDecimal balance = (BigDecimal) declaredField.get(wallet); |
| | | |
| | | if (amount.compareTo(balance) > 0) { |
| | | throw new FebsException("余额不足"); |
| | | } |
| | | declaredField.set(update, wallet.getCommission().subtract(amount)); |
| | | |
| | | } catch (NoSuchFieldException | IllegalAccessException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | int result = this.baseMapper.updateAmountWithVersion(wallet); |
| | | if (result > 0) { |
| | | flag = false; |
| | | } else { |
| | | if (i > 2) { |
| | | throw new FebsException("余额修改失败"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |