Helius
2022-04-28 5d85e1f21e2bf8fd1db778d986ca359d9d604670
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java
@@ -9,6 +9,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.math.BigDecimal;
/**
@@ -88,6 +89,15 @@
        }
    }
    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;
@@ -112,4 +122,77 @@
            }
        }
    }
    @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("余额修改失败");
                }
            }
        }
    }
}