xiongzhu 2 лет назад
Родитель
Сommit
685487f038

+ 1 - 0
db_migrate/001.sql

@@ -0,0 +1 @@
+update user_balance set credits = fee_free_allowances;

+ 4 - 0
src/main/java/com/izouma/awesomeAdmin/domain/FinanceProduct.java

@@ -35,4 +35,8 @@ public class FinanceProduct extends BaseEntity {
     @Column(length = 20)
     private Status status;
 
+    @Column(precision = 10, scale = 4)
+    private BigDecimal profitRate;
+
+
 }

+ 3 - 0
src/main/java/com/izouma/awesomeAdmin/domain/SaleBatch.java

@@ -56,4 +56,7 @@ public class SaleBatch extends BaseEntity {
     private Duration delayDuration;
 
     private int dailyLimit;
+
+    @Column(precision = 10, scale = 4)
+    private BigDecimal creditFactor = BigDecimal.ONE;
 }

+ 5 - 2
src/main/java/com/izouma/awesomeAdmin/domain/UserBalance.java

@@ -27,7 +27,7 @@ public class UserBalance extends BaseEntityNoID {
     private BigDecimal lastBalance;
 
     @Column(precision = 19, scale = 2)
-    private BigDecimal feeFreeAllowances;
+    private BigDecimal credits;
 
     @Column(precision = 19, scale = 2)
     private BigDecimal rechargeAccumulation;
@@ -38,11 +38,14 @@ public class UserBalance extends BaseEntityNoID {
     @Column(precision = 19, scale = 2)
     private BigDecimal profitAccumulation;
 
+    @Column(precision = 19, scale = 2)
+    private BigDecimal transactionVolume;
+
     public UserBalance(Long userId) {
         this.userId = userId;
         this.balance = BigDecimal.ZERO;
         this.lastBalance = BigDecimal.ZERO;
-        this.feeFreeAllowances = BigDecimal.ZERO;
+        this.credits = BigDecimal.ZERO;
         this.rechargeAccumulation = BigDecimal.ZERO;
         this.withdrawAccumulation = BigDecimal.ZERO;
     }

+ 55 - 51
src/main/java/com/izouma/awesomeAdmin/service/CommissionService.java

@@ -54,13 +54,13 @@ public class CommissionService {
             total = total.add(commissionRecord.getAmount());
         }
         return CommissionOverview.builder()
-                .total(total)
-                .withdraw(withdraw)
-                .available(available)
-                .juniorCount(juniors.size())
-                .orderCount(commissionRecordRepo.countByUserId(userId))
-                .superior(Optional.ofNullable(superior).map(User::getNickname).orElse(null))
-                .build();
+                                 .total(total)
+                                 .withdraw(withdraw)
+                                 .available(available)
+                                 .juniorCount(juniors.size())
+                                 .orderCount(commissionRecordRepo.countByUserId(userId))
+                                 .superior(Optional.ofNullable(superior).map(User::getNickname).orElse(null))
+                                 .build();
     }
 
     public CommissionDetail detail(Long userId) {
@@ -84,24 +84,24 @@ public class CommissionService {
                         predicates.add(criteriaBuilder.equal(root.join("order").get("status"), OrderStatus.NOT_PAID));
                     } else if ("PAID".equals(status)) {
                         predicates.add(root.join("order").get("status")
-                                .in(OrderStatus.NOT_CONFIRMED,
-                                        OrderStatus.CONFIRMED,
-                                        OrderStatus.NOT_SHIPPED,
-                                        OrderStatus.SHIPPED,
-                                        OrderStatus.SELLING,
-                                        OrderStatus.SOLD_NOT_PAID,
-                                        OrderStatus.SOLD_NOT_CONFIRMED,
-                                        OrderStatus.SOLD,
-                                        OrderStatus.NOT_SHIPPED,
-                                        OrderStatus.SHIPPED,
-                                        OrderStatus.RECEIVED));
+                                           .in(OrderStatus.NOT_CONFIRMED,
+                                                   OrderStatus.CONFIRMED,
+                                                   OrderStatus.NOT_SHIPPED,
+                                                   OrderStatus.SHIPPED,
+                                                   OrderStatus.SELLING,
+                                                   OrderStatus.SOLD_NOT_PAID,
+                                                   OrderStatus.SOLD_NOT_CONFIRMED,
+                                                   OrderStatus.SOLD,
+                                                   OrderStatus.NOT_SHIPPED,
+                                                   OrderStatus.SHIPPED,
+                                                   OrderStatus.RECEIVED));
                     } else if ("FINISH".equals(status)) {
                         predicates.add(root.join("order").get("status")
-                                .in(OrderStatus.CONFIRMED, OrderStatus.SELLING, OrderStatus.SOLD,
-                                        OrderStatus.NOT_SHIPPED, OrderStatus.SHIPPED, OrderStatus.RECEIVED));
+                                           .in(OrderStatus.CONFIRMED, OrderStatus.SELLING, OrderStatus.SOLD,
+                                                   OrderStatus.NOT_SHIPPED, OrderStatus.SHIPPED, OrderStatus.RECEIVED));
                     }
                     return criteriaQuery.where(predicates.toArray(new Predicate[0]))
-                            .orderBy(criteriaBuilder.desc(root.get("createdAt"))).getRestriction();
+                                        .orderBy(criteriaBuilder.desc(root.get("createdAt"))).getRestriction();
                 }, pageable);
         List<CommissionOrder> commissionOrders = new ArrayList<>();
         for (CommissionRecord commissionRecord : page.getContent()) {
@@ -110,14 +110,15 @@ public class CommissionService {
                 Product product = productRepo.findById(order.getProductId()).orElse(null);
                 if (product != null) {
                     CommissionOrder commissionOrder = CommissionOrder.builder()
-                            .orderId(commissionRecord.getOrderId())
-                            .createdAt(order.getCreatedAt())
-                            .juniorId(commissionRecord.getJuniorId())
-                            .commission(commissionRecord.getAmount())
-                            .pic(product.getPic().isEmpty() ? null : product.getPic().get(0))
-                            .name(product.getName())
-                            .price(order.getTotalPrice())
-                            .build();
+                                                                     .orderId(commissionRecord.getOrderId())
+                                                                     .createdAt(order.getCreatedAt())
+                                                                     .juniorId(commissionRecord.getJuniorId())
+                                                                     .commission(commissionRecord.getAmount())
+                                                                     .pic(product.getPic().isEmpty()
+                                                                             ? null : product.getPic().get(0))
+                                                                     .name(product.getName())
+                                                                     .price(order.getTotalPrice())
+                                                                     .build();
                     commissionOrders.add(commissionOrder);
                 }
             }
@@ -126,22 +127,24 @@ public class CommissionService {
     }
 
     public void doCommission(Long userId, Order sellerOrder, BigDecimal commissionRate) {
-        User user = userRepo.findById(userId).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
+        User user = userRepo.findById(userId)
+                            .orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
         if (user.getSuperiorId() != null) {
             User superior = userRepo.findById(user.getSuperiorId()).orElse(null);
             if (superior != null) {
                 BigDecimal money = sellerOrder.getTotalPrice().multiply(commissionRate)
-                        .setScale(2, RoundingMode.HALF_UP);
-                userBalanceService.modify(superior.getId(), null, money, Constants.BalanceRemark.COMMISSION, null);
+                                              .setScale(2, RoundingMode.HALF_UP);
+                userBalanceService.modify(superior.getId(), null, money, Constants.BalanceRemark.COMMISSION,
+                        null, null, null);
                 commissionRecordRepo.save(CommissionRecord.builder()
-                        .userId(superior.getId())
-                        .juniorId(userId)
-                        .orderId(sellerOrder.getId())
-                        .amount(money)
-                        .build());
+                                                          .userId(superior.getId())
+                                                          .juniorId(userId)
+                                                          .orderId(sellerOrder.getId())
+                                                          .amount(money)
+                                                          .build());
 
                 JuniorContribution juniorContribution = juniorContributionRepo.findByUserIdAndJuniorId(superior.getId(), userId)
-                        .orElse(new JuniorContribution(superior.getId(), userId));
+                                                                              .orElse(new JuniorContribution(superior.getId(), userId));
                 juniorContribution.setOrderNum(juniorContribution.getOrderNum() + 1);
                 juniorContribution.setOrderSum(juniorContribution.getOrderSum().add(sellerOrder.getTotalPrice()));
                 juniorContribution.setCommissionNum(juniorContribution.getCommissionNum() + 1);
@@ -149,7 +152,7 @@ public class CommissionService {
                 juniorContributionRepo.save(juniorContribution);
 
                 CommissionStat commissionStat = commissionStatRepo.findByUserId(superior.getId())
-                        .orElse(new CommissionStat(superior.getId()));
+                                                                  .orElse(new CommissionStat(superior.getId()));
                 commissionStat.setCommissionNum(commissionStat.getCommissionNum() + 1);
                 commissionStat.setCommissionSum(commissionStat.getCommissionSum().add(money));
                 commissionStatRepo.save(commissionStat);
@@ -160,12 +163,12 @@ public class CommissionService {
 
     public void invite(Long superiorId, Long juniorId) {
         CommissionStat commissionStat = commissionStatRepo.findByUserId(superiorId)
-                .orElse(new CommissionStat(superiorId));
+                                                          .orElse(new CommissionStat(superiorId));
         commissionStat.setInviteNum((int) userRepo.countBySuperiorId(superiorId));
         commissionStatRepo.save(commissionStat);
 
         JuniorContribution juniorContribution = juniorContributionRepo.findByUserIdAndJuniorId(superiorId, juniorId)
-                .orElse(new JuniorContribution(superiorId, juniorId));
+                                                                      .orElse(new JuniorContribution(superiorId, juniorId));
         juniorContributionRepo.save(juniorContribution);
     }
 
@@ -185,10 +188,10 @@ public class CommissionService {
             List<User> users = userRepo.findAllById(userIds);
             page.getContent().forEach(commissionRecord -> {
                 users.stream().filter(user -> user.getId().equals(commissionRecord.getJuniorId()))
-                        .findFirst().ifPresent(user -> {
-                            JuniorDTO dto = new JuniorDTO(user);
-                            commissionRecord.setJunior(dto);
-                        });
+                     .findFirst().ifPresent(user -> {
+                         JuniorDTO dto = new JuniorDTO(user);
+                         commissionRecord.setJunior(dto);
+                     });
             });
         }
 
@@ -197,7 +200,7 @@ public class CommissionService {
             List<Order> orders = orderRepo.findAllById(orderIds);
             page.getContent().forEach(commissionRecord -> {
                 orders.stream().filter(order -> order.getId().equals(commissionRecord.getOrderId()))
-                        .findFirst().ifPresent(commissionRecord::setOrder);
+                      .findFirst().ifPresent(commissionRecord::setOrder);
             });
         }
         return page;
@@ -205,15 +208,16 @@ public class CommissionService {
 
     public Page<JuniorContribution> juniorContributions(Long userId, Pageable pageable) {
         Page<JuniorContribution> page = juniorContributionRepo.findByUserId(userId, pageable);
-        List<Long> userIds = page.getContent().stream().map(JuniorContribution::getJuniorId).collect(Collectors.toList());
+        List<Long> userIds = page.getContent().stream().map(JuniorContribution::getJuniorId)
+                                 .collect(Collectors.toList());
         if (!userIds.isEmpty()) {
             List<User> users = userRepo.findAllById(userIds);
             page.getContent().forEach(juniorContribution -> {
                 users.stream().filter(user -> user.getId().equals(juniorContribution.getJuniorId()))
-                        .findFirst().ifPresent(user -> {
-                            JuniorDTO dto = new JuniorDTO(user);
-                            juniorContribution.setJunior(dto);
-                        });
+                     .findFirst().ifPresent(user -> {
+                         JuniorDTO dto = new JuniorDTO(user);
+                         juniorContribution.setJunior(dto);
+                     });
             });
         }
         return page;

+ 2 - 1
src/main/java/com/izouma/awesomeAdmin/service/DelegationService.java

@@ -41,7 +41,8 @@ public class DelegationService {
     public Delegation payDelegationBalance(Long userId, Long orderId) {
         SecurityUtils.checkBanned();
         BigDecimal serviceCharge = checkPayDelegation(userId, orderId);
-        userBalanceService.modify(userId, null, serviceCharge.negate(), Constants.BalanceRemark.PAY, null);
+        userBalanceService.modify(userId, null, serviceCharge.negate(), Constants.BalanceRemark.PAY,
+                null, null, null);
         return createDelegation(userId, orderId);
     }
 

+ 22 - 16
src/main/java/com/izouma/awesomeAdmin/service/FinanceOrderService.java

@@ -44,7 +44,8 @@ public class FinanceOrderService {
 
     @Transactional
     public FinanceOrder create(Long userId, Long productId) {
-        FinanceProduct product = financeProductRepo.findById(productId).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
+        FinanceProduct product = financeProductRepo.findById(productId)
+                                                   .orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
         RAtomicLong atomicSale = redissonClient.getAtomicLong(Constants.Redis.FINANCE_PRODUCT_SALE + productId);
         RQueue<Long> queue = redissonClient.getQueue(Constants.Redis.UPDATE_STOCK_QUEUE);
         long sale = atomicSale.incrementAndGet();
@@ -70,15 +71,17 @@ public class FinanceOrderService {
                 throw new BusinessException(Translator.toLocale("balance.insufficient"));
             }
 
-            userBalanceService.modify(userId, userBalance, stakeAmount.negate(), Constants.BalanceRemark.STAKE, null);
+            userBalanceService.modify(userId, userBalance, stakeAmount.negate(), Constants.BalanceRemark.STAKE,
+                    null, null, null);
 
             FinanceOrder financeOrder = financeOrderRepo.save(FinanceOrder.builder()
-                    .userId(userId)
-                    .productId(productId)
-                    .stakeAmount(stakeAmount)
-                    .redeemTime(product.getStartTime().plusHours(23))
-                    .status(FinanceOrderStatus.PENDING)
-                    .build());
+                                                                          .userId(userId)
+                                                                          .productId(productId)
+                                                                          .stakeAmount(stakeAmount)
+                                                                          .redeemTime(product.getStartTime()
+                                                                                             .plusHours(23))
+                                                                          .status(FinanceOrderStatus.PENDING)
+                                                                          .build());
             queue.add(productId);
             return financeOrder;
         } catch (Exception e) {
@@ -94,15 +97,16 @@ public class FinanceOrderService {
             return;
         }
         List<FinanceOrder> list = financeOrderRepo.findByProductId(productId);
-        BigDecimal totalStakeAmount = list.stream().map(FinanceOrder::getStakeAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal totalStakeAmount = list.stream().map(FinanceOrder::getStakeAmount)
+                                          .reduce(BigDecimal.ZERO, BigDecimal::add);
         for (FinanceOrder financeOrder : list) {
             BigDecimal profit;
             if (totalStakeAmount.compareTo(BigDecimal.ZERO) == 0) {
                 profit = BigDecimal.ZERO;
             } else {
                 profit = financeOrder.getStakeAmount()
-                        .divide(totalStakeAmount, 4, RoundingMode.HALF_UP).multiply(product.getAmount())
-                        .setScale(2, RoundingMode.FLOOR);
+                                     .divide(totalStakeAmount, 4, RoundingMode.HALF_UP).multiply(product.getAmount())
+                                     .setScale(2, RoundingMode.FLOOR);
             }
             financeOrder.setProfit(profit);
             financeOrder.setStatus(FinanceOrderStatus.STAKING);
@@ -113,11 +117,13 @@ public class FinanceOrderService {
     @Scheduled(fixedRate = 30000)
     public void redeem() {
         financeOrderRepo.findByStatusAndRedeemTimeBefore(FinanceOrderStatus.STAKING, LocalDateTime.now())
-                .parallelStream().forEach(order -> {
-                    userBalanceService.modify(order.getUserId(), null, order.getStakeAmount().add(order.getProfit()), Constants.BalanceRemark.REDEEM, null);
-                    order.setStatus(FinanceOrderStatus.FINISH);
-                    financeOrderRepo.save(order);
-                });
+                        .parallelStream().forEach(order -> {
+                            userBalanceService.modify(order.getUserId(), null,
+                                    order.getStakeAmount().add(order.getProfit()), Constants.BalanceRemark.REDEEM,
+                                    null, null, null);
+                            order.setStatus(FinanceOrderStatus.FINISH);
+                            financeOrderRepo.save(order);
+                        });
     }
 
     public List<RankDTO> rank() {

+ 8 - 6
src/main/java/com/izouma/awesomeAdmin/service/OrderService.java

@@ -427,6 +427,8 @@ public class OrderService {
                                      .orElseThrow(new BusinessException(Translator.toLocale("order.buyer.not_found")));
         Product product = productRepo.findById(sellerOrder.getProductId())
                                      .orElseThrow(new BusinessException(Translator.toLocale("product.not_found")));
+        SaleBatch batch = saleBatchRepo.findById(buyerOrder.getBatchId())
+                                       .orElseThrow(new BusinessException(Translator.toLocale("batch.not_found")));
         if (buyerOrder.getStatus() != OrderStatus.NOT_PAID) {
             throw new BusinessException(Translator.toLocale("status.error"));
         }
@@ -436,9 +438,8 @@ public class OrderService {
         if (!userId.equals(buyerOrder.getUserId())) {
             throw new BusinessException(Translator.toLocale("permission.denied"));
         }
-        userBalanceService.modify(userId, null, buyerOrder.getTotalPrice().negate(), Constants.BalanceRemark.PAY,
-                buyerOrder.getTotalPrice().divide(new BigDecimal(3), 2, RoundingMode.HALF_UP));
-        userBalanceService.modify(sellerOrder.getUserId(), null, buyerOrder.getTotalPrice(), Constants.BalanceRemark.RECEIPT, null);
+        userBalanceService.payOrder(userId, buyerOrder.getTotalPrice(), batch.getCreditFactor());
+        userBalanceService.receiptOrder(sellerOrder.getUserId(), buyerOrder.getTotalPrice());
 
         sellerOrder.setStatus(OrderStatus.SOLD);
         sellerOrder.setSoldTime(LocalDateTime.now());
@@ -461,14 +462,15 @@ public class OrderService {
                                     .orElseThrow(new BusinessException(Translator.toLocale("order.seller.not_found")));
         Product product = productRepo.findById(buyerOrder.getProductId())
                                      .orElseThrow(new BusinessException(Translator.toLocale("product.not_found")));
+        SaleBatch batch = saleBatchRepo.findById(buyerOrder.getBatchId())
+                                       .orElseThrow(new BusinessException(Translator.toLocale("batch.not_found")));
         if (buyerOrder.getStatus() != OrderStatus.NOT_PAID) {
             throw new BusinessException(Translator.toLocale("status.error"));
         }
         if (!userId.equals(buyerOrder.getUserId())) {
             throw new BusinessException(Translator.toLocale("permission.denied"));
         }
-        userBalanceService.modify(userId, null, buyerOrder.getTotalPrice().negate(), Constants.BalanceRemark.PAY,
-                buyerOrder.getTotalPrice().divide(new BigDecimal(3), 2, RoundingMode.HALF_UP));
+        userBalanceService.payOrder(userId, buyerOrder.getTotalPrice(), batch.getCreditFactor());
 
         buyerOrder.setStatus(OrderStatus.CONFIRMED);
         buyerOrder.setConfirmTime(LocalDateTime.now());
@@ -753,7 +755,7 @@ public class OrderService {
             try {
                 Delegation delegation = delegationRepo.findBySellerOrderId(order.getId()).orElse(null);
                 if (delegation != null) {
-                    userBalanceService.modify(order.getUserId(), null, delegation.getFinalPrice(), Constants.BalanceRemark.RECEIPT, null);
+                    userBalanceService.receiptOrder(order.getUserId(), delegation.getFinalPrice());
                     order.setStatus(SOLD);
                     order.setSoldTime(LocalDateTime.now());
                     orderRepo.save(order);

+ 37 - 23
src/main/java/com/izouma/awesomeAdmin/service/UserBalanceService.java

@@ -32,12 +32,7 @@ public class UserBalanceService {
     }
 
     @Transactional
-    public void modify(Long userId, UserBalance userBalance, BigDecimal amount, String remark, BigDecimal feeFreeAllowances) {
-        modify(userId, userBalance, amount, remark, feeFreeAllowances, null);
-    }
-
-    @Transactional
-    public void modify(Long userId, UserBalance userBalance, BigDecimal amount, String remark, BigDecimal feeFreeAllowances, String extra) {
+    public void modify(Long userId, UserBalance userBalance, BigDecimal amount, String remark, BigDecimal credits, String extra, BigDecimal transactionVolume) {
         if (userBalance == null) {
             userBalance = userBalanceRepo.findByUserId(userId).orElse(new UserBalance(userId));
         }
@@ -47,28 +42,47 @@ public class UserBalanceService {
         }
         userBalance.setLastBalance(userBalance.getBalance());
         userBalance.setBalance(userBalance.getBalance().add(amount));
-        if (feeFreeAllowances != null) {
-            userBalance.setFeeFreeAllowances(Optional.ofNullable(userBalance.getFeeFreeAllowances())
-                    .orElse(BigDecimal.ZERO).add(feeFreeAllowances));
+        if (credits != null) {
+            userBalance.setCredits(Optional.ofNullable(userBalance.getCredits()).orElse(BigDecimal.ZERO).add(credits));
+        }
+        if (transactionVolume != null) {
+            userBalance.setTransactionVolume(Optional.ofNullable(userBalance.getTransactionVolume())
+                                                     .orElse(BigDecimal.ZERO).add(transactionVolume));
         }
         if (Constants.BalanceRemark.RECHARGE.equals(remark)) {
             userBalance.setRechargeAccumulation(Optional.ofNullable(userBalance.getRechargeAccumulation())
-                    .orElse(BigDecimal.ZERO).add(amount));
+                                                        .orElse(BigDecimal.ZERO).add(amount));
         } else if (Constants.BalanceRemark.WITHDRAW.equals(remark)) {
             userBalance.setWithdrawAccumulation(Optional.ofNullable(userBalance.getWithdrawAccumulation())
-                    .orElse(BigDecimal.ZERO).add(amount.negate()));
+                                                        .orElse(BigDecimal.ZERO).add(amount.negate()));
         }
-        userBalance.setProfitAccumulation(Optional.ofNullable(userBalance.getWithdrawAccumulation()).orElse(BigDecimal.ZERO)
-                .subtract(Optional.ofNullable(userBalance.getRechargeAccumulation()).orElse(BigDecimal.ZERO)));
+        userBalance.setProfitAccumulation(Optional.ofNullable(userBalance.getWithdrawAccumulation())
+                                                  .orElse(BigDecimal.ZERO)
+                                                  .subtract(Optional.ofNullable(userBalance.getRechargeAccumulation())
+                                                                    .orElse(BigDecimal.ZERO)));
         userBalanceRepo.save(userBalance);
         balanceRecordRepo.save(BalanceRecord.builder()
-                .userId(userId)
-                .amount(amount)
-                .remark(remark)
-                .balance(userBalance.getBalance())
-                .lastBalance(userBalance.getLastBalance())
-                .extra(extra)
-                .build());
+                                            .userId(userId)
+                                            .amount(amount)
+                                            .remark(remark)
+                                            .balance(userBalance.getBalance())
+                                            .lastBalance(userBalance.getLastBalance())
+                                            .extra(extra)
+                                            .build());
+    }
+
+    @Transactional
+    public void payOrder(Long userId, BigDecimal amount, BigDecimal factor) {
+        modify(userId, null, amount.negate(), Constants.BalanceRemark.PAY, amount.multiply(factor),
+                null, amount);
+    }
+
+    @Transactional
+    public void receiptOrder(Long userId, BigDecimal amount) {
+        if (amount.compareTo(BigDecimal.ZERO) < 0) {
+            amount = amount.negate();
+        }
+        modify(userId, null, amount, Constants.BalanceRemark.RECEIPT, null, null, null);
     }
 
     @Transactional
@@ -83,7 +97,7 @@ public class UserBalanceService {
 
     public Page<BalanceRecord> userRecords(Long userId, Pageable pageable, LocalDateTime start, LocalDateTime end) {
         PageRequest pageRequest = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize())
-                .withSort(Sort.by("createdAt").descending());
+                                             .withSort(Sort.by("createdAt").descending());
         if (start != null && end != null) {
             return balanceRecordRepo.findByUserIdAndCreatedAtBetween(userId, start, end, pageRequest);
         }
@@ -92,7 +106,7 @@ public class UserBalanceService {
 
     @Transactional
     public void recharge(Long userId, BigDecimal amount) {
-        modify(userId, null, amount, Constants.BalanceRemark.RECHARGE, null);
+        modify(userId, null, amount, Constants.BalanceRemark.RECHARGE, null, null, null);
     }
 
     @Transactional
@@ -100,7 +114,7 @@ public class UserBalanceService {
         if (balanceRecordRepo.findFirstByUserIdAndExtra(userId, "add_customer_service") != null) {
             throw new BusinessException(Translator.toLocale("customer.bonus.already_received"));
         }
-        modify(userId, null, amount, Constants.BalanceRemark.BONUS, null, "add_customer_service");
+        modify(userId, null, amount, Constants.BalanceRemark.BONUS, null, "add_customer_service", null);
     }
 
     public boolean checkBalance(Long userId, BigDecimal amount) {

+ 5 - 7
src/main/java/com/izouma/awesomeAdmin/service/WithdrawApplyService.java

@@ -7,7 +7,6 @@ import com.izouma.awesomeAdmin.dto.CommissionOrder;
 import com.izouma.awesomeAdmin.dto.PageQuery;
 import com.izouma.awesomeAdmin.dto.RankDTO;
 import com.izouma.awesomeAdmin.dto.WithdrawApplyDetail;
-import com.izouma.awesomeAdmin.enums.CommissionStatus;
 import com.izouma.awesomeAdmin.enums.WithdrawStatus;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.*;
@@ -25,7 +24,6 @@ import javax.transaction.Transactional;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -99,9 +97,9 @@ public class WithdrawApplyService {
         }
         BigDecimal feeRate = sysConfigService.getBigDecimal(Constants.Config.WITHDRAW_FEE_RATE);
         BigDecimal feeLowRate = sysConfigService.getBigDecimal(Constants.Config.WITHDRAW_FEE_LOW_RATE);
-        BigDecimal feeFreeAllowances = userBalance.getFeeFreeAllowances();
+        BigDecimal feeFreeAllowances = userBalance.getCredits();
         BigDecimal fee;
-        if (amount.compareTo(userBalance.getFeeFreeAllowances()) > 0) {
+        if (amount.compareTo(userBalance.getCredits()) > 0) {
             fee = amount.subtract(feeFreeAllowances).multiply(feeRate).add(feeFreeAllowances.multiply(feeLowRate))
                         .setScale(2, RoundingMode.HALF_UP);
         } else {
@@ -113,13 +111,13 @@ public class WithdrawApplyService {
                 throw new BusinessException(Translator.toLocale("balance.insufficient"));
             }
             userBalanceService.modify(userId, userBalance, amount.add(fee).negate(),
-                    Constants.BalanceRemark.WITHDRAW, feeFreeAllowances.negate());
+                    Constants.BalanceRemark.WITHDRAW, feeFreeAllowances.negate(), null, null);
         } else {
             if (userBalance.getBalance().subtract(amount).compareTo(BigDecimal.ZERO) < 0) {
                 throw new BusinessException(Translator.toLocale("balance.insufficient"));
             }
             userBalanceService.modify(userId, userBalance, amount.negate(),
-                    Constants.BalanceRemark.WITHDRAW, feeFreeAllowances.negate());
+                    Constants.BalanceRemark.WITHDRAW, feeFreeAllowances.negate(), null, null);
         }
 
         return withdrawApplyRepo.save(WithdrawApply.builder()
@@ -213,7 +211,7 @@ public class WithdrawApplyService {
             throw new BusinessException(Translator.toLocale("status.error"));
         }
         userBalanceService.modify(apply.getUserId(), null, apply.getAmount(),
-                Constants.BalanceRemark.RETURN, apply.getFeeFreeAllowances());
+                Constants.BalanceRemark.RETURN, apply.getFeeFreeAllowances(), null, null);
         apply.setStatus(WithdrawStatus.CANCELED);
         withdrawApplyRepo.save(apply);
     }

+ 1 - 1
src/main/java/com/izouma/awesomeAdmin/web/UserBalanceController.java

@@ -37,6 +37,6 @@ public class UserBalanceController extends BaseController {
     @PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/modify")
     public void get(@RequestParam Long id, @RequestParam BigDecimal amount, @RequestParam String remark) {
-        userBalanceService.modify(id, null, amount, remark, null);
+        userBalanceService.modify(id, null, amount, remark, null, null, null);
     }
 }

+ 4 - 7
src/main/java/com/izouma/awesomeAdmin/web/WithdrawApplyController.java

@@ -13,6 +13,7 @@ import com.izouma.awesomeAdmin.utils.SecurityUtils;
 import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.data.domain.Page;
@@ -26,16 +27,12 @@ import java.util.List;
 
 @RestController
 @RequestMapping("/withdrawApply")
+@AllArgsConstructor
 public class WithdrawApplyController extends BaseController {
-    /*generatedStart*/
-    @Autowired
-    private WithdrawApplyService withdrawApplyService;
 
-    @Autowired
-    private WithdrawApplyRepo withdrawApplyRepo;
-    /*generatedEnd*/
+    private WithdrawApplyService withdrawApplyService;
+    private WithdrawApplyRepo    withdrawApplyRepo;
 
-    /*generatedStart*/
     @PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
     public WithdrawApply save(@RequestBody WithdrawApply record) {