|  |  | 
 |  |  | 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("余额修改失败"); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | } |