liujie
2026-05-08 461b3df61dfd1cc887dc24c58395dd9436605588
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TExchangeCodePackageServiceImpl.java
@@ -759,11 +759,7 @@
        if (record == null || userId == null || record.getId() == null) {
            return;
        }
        List<TExchangeCodeUseRecord> records = useRecordMapper.selectList(new QueryWrapper<TExchangeCodeUseRecord>()
                .eq("user_id", userId)
                .le("id", record.getId())
                .orderByAsc("id"));
        record.setCurrentBalance(calculateCurrentBalance(records));
        record.setCurrentBalance(calculateCurrentBalanceAfterRecord(userId, record.getId()));
    }
    private void fillUseRecordBalances(List<TExchangeCodeUseRecord> records, Long userId) {
@@ -772,36 +768,42 @@
        }
        List<TExchangeCodeUseRecord> allRecords = useRecordMapper.selectList(new QueryWrapper<TExchangeCodeUseRecord>()
                .eq("user_id", userId)
                .orderByAsc("id"));
                .orderByDesc("id"));
        Map<Long, BigDecimal> balanceMap = new HashMap<>();
        BigDecimal balance = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
        BigDecimal balance = getCurrentExchangeCodeBalance(userId);
        for (TExchangeCodeUseRecord item : allRecords) {
            balance = applyUseRecordChange(balance, item);
            balanceMap.put(item.getId(), balance);
            balance = rollbackUseRecordChange(balance, item);
        }
        for (TExchangeCodeUseRecord item : records) {
            item.setCurrentBalance(balanceMap.getOrDefault(item.getId(), BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP)));
        }
    }
    private BigDecimal calculateCurrentBalance(List<TExchangeCodeUseRecord> records) {
        BigDecimal balance = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
        if (records == null) {
            return balance;
        }
    private BigDecimal calculateCurrentBalanceAfterRecord(Long userId, Long recordId) {
        BigDecimal balance = getCurrentExchangeCodeBalance(userId);
        List<TExchangeCodeUseRecord> records = useRecordMapper.selectList(new QueryWrapper<TExchangeCodeUseRecord>()
                .eq("user_id", userId)
                .gt("id", recordId)
                .orderByDesc("id"));
        for (TExchangeCodeUseRecord item : records) {
            balance = applyUseRecordChange(balance, item);
            balance = rollbackUseRecordChange(balance, item);
        }
        return balance;
    }
    private BigDecimal applyUseRecordChange(BigDecimal balance, TExchangeCodeUseRecord record) {
    private BigDecimal rollbackUseRecordChange(BigDecimal balance, TExchangeCodeUseRecord record) {
        BigDecimal amount = defaultMoney(record == null ? null : record.getUsedAmount());
        Integer changeType = record == null ? null : record.getChangeType();
        if (USE_RECORD_TYPE_CONSUME.equals(changeType)) {
            return balance.subtract(amount).setScale(2, RoundingMode.HALF_UP);
            return balance.add(amount).setScale(2, RoundingMode.HALF_UP);
        }
        return balance.add(amount).setScale(2, RoundingMode.HALF_UP);
        return balance.subtract(amount).setScale(2, RoundingMode.HALF_UP);
    }
    private BigDecimal getCurrentExchangeCodeBalance(Long userId) {
        Map<Long, BigDecimal> balanceMap = getUserExchangeCodeBalanceMap(Collections.singletonList(userId));
        return defaultMoney(balanceMap.get(userId));
    }
    private void fillUseRecordView(TExchangeCodeUseRecord record) {