liujie
2026-04-28 7e7cfa9482ab5e541729304b141aa0e1b35c71b6
p0功能 小程序
2个文件已修改
101 ■■■■■ 已修改文件
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TExchangeCodePackageServiceImpl.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -1155,7 +1155,7 @@
                    }
                    this.updateById(chargingOrder);
                    chargingOrderRefund.setRefundAmount(thirdRefundAmount);
                    if (1 == rechargePaymentType) {
                    if (thirdRefundAmount.compareTo(BigDecimal.ZERO) > 0 && 1 == rechargePaymentType) {
                        WxPaymentRefundModel model = new WxPaymentRefundModel();
                        model.setOut_trade_no(chargingOrder.getCode());
                        model.setOut_refund_no(chargingOrderRefund.getRefundCode());
@@ -1292,7 +1292,7 @@
                model.setNotify_url("/payment/wx/refund/notify");
                WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
                amount.setRefund(money.multiply(new BigDecimal(100)).intValue());
                amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
                amount.setTotal((isBalancePayMode(chargingOrder.getPayMethod()) ? money(chargingOrder.getThirdPayAmount()) : rechargeAmount).multiply(new BigDecimal(100)).intValue());
                amount.setCurrency("CNY");
                model.setAmount(amount);
                R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
@@ -1361,24 +1361,32 @@
            boolean tryLock = lock.tryLock(10, 10, TimeUnit.SECONDS);
            if(tryLock){
                TChargingOrderRefund one = chargingOrderRefundService.getOne(new LambdaQueryWrapper<TChargingOrderRefund>().eq(TChargingOrderRefund::getRefundCode, out_refund_no));
                if(null != one && one.getRefundStatus() == 1){
                    one.setRefundSerialNumber(refund_id);
                    one.setRefundStatus(2);
                    one.setRefundTime(LocalDateTime.now());
                    chargingOrderRefundService.updateById(one);
                    TChargingOrder order = this.getById(one.getChargingOrderId());
                    if (money(order.getBalanceRefundAmount()).compareTo(BigDecimal.ZERO) > 0) {
                        changeUserBalance(order.getAppUserId(), money(order.getBalanceRefundAmount()));
                    }
                    TChargingOrder chargingOrder = new TChargingOrder();
                    chargingOrder.setId(one.getChargingOrderId());
                    chargingOrder.setAppUserId(order.getAppUserId());
                    chargingOrder.setRefundStatus(2);
                    chargingOrder.setRefundSerialNumber(refund_id);
                    chargingOrder.setRefundTime(LocalDateTime.now());
                    this.updateById(chargingOrder);
                if (null == one || one.getRefundStatus() == null || one.getRefundStatus() != 1) {
                    return AjaxResult.success();
                }
                if (!"SUCCESS".equals(tradeState)) {
                    return AjaxResult.success();
                }
                TChargingOrder order = this.getById(one.getChargingOrderId());
                if (order == null || (order.getRefundStatus() != null && order.getRefundStatus() == 2)) {
                    return AjaxResult.success();
                }
                one.setRefundSerialNumber(refund_id);
                one.setRefundStatus(2);
                one.setRefundTime(LocalDateTime.now());
                chargingOrderRefundService.updateById(one);
                if (money(order.getBalanceRefundAmount()).compareTo(BigDecimal.ZERO) > 0) {
                    changeUserBalance(order.getAppUserId(), money(order.getBalanceRefundAmount()));
                }
                TChargingOrder chargingOrder = new TChargingOrder();
                chargingOrder.setId(one.getChargingOrderId());
                chargingOrder.setAppUserId(order.getAppUserId());
                chargingOrder.setRefundStatus(2);
                chargingOrder.setRefundSerialNumber(refund_id);
                chargingOrder.setRefundTime(LocalDateTime.now());
                this.updateById(chargingOrder);
            }
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TExchangeCodePackageServiceImpl.java
@@ -306,6 +306,7 @@
                        .eq("user_id", query.getUserId())
                        .eq(query.getChangeType() != null, "change_type", query.getChangeType())
                        .orderByDesc("create_time"));
        fillUseRecordBalances(page.getRecords(), query.getUserId());
        page.getRecords().forEach(this::fillUseRecordView);
        return page;
    }
@@ -316,6 +317,7 @@
                .eq("id", id)
                .eq("user_id", userId)
                .last("limit 1"));
        fillUseRecordBalance(record, userId);
        fillUseRecordView(record);
        return record;
    }
@@ -595,6 +597,55 @@
        return UUID.randomUUID().toString().replace("-", "").substring(0, 8).toUpperCase();
    }
    private void fillUseRecordBalance(TExchangeCodeUseRecord record, Long userId) {
        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));
    }
    private void fillUseRecordBalances(List<TExchangeCodeUseRecord> records, Long userId) {
        if (records == null || records.isEmpty() || userId == null) {
            return;
        }
        List<TExchangeCodeUseRecord> allRecords = useRecordMapper.selectList(new QueryWrapper<TExchangeCodeUseRecord>()
                .eq("user_id", userId)
                .orderByAsc("id"));
        Map<Long, BigDecimal> balanceMap = new HashMap<>();
        BigDecimal balance = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
        for (TExchangeCodeUseRecord item : allRecords) {
            balance = applyUseRecordChange(balance, item);
            balanceMap.put(item.getId(), balance);
        }
        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;
        }
        for (TExchangeCodeUseRecord item : records) {
            balance = applyUseRecordChange(balance, item);
        }
        return balance;
    }
    private BigDecimal applyUseRecordChange(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);
    }
    private void fillUseRecordView(TExchangeCodeUseRecord record) {
        if (record == null) {
            return;
@@ -602,7 +653,9 @@
        record.setUid(String.valueOf(record.getId()));
        record.setDateTime(record.getCreateTime());
        record.setChangeAmount(defaultMoney(record.getUsedAmount()));
        record.setCurrentBalance(defaultMoney(record.getUsedAmount()));
        if (record.getCurrentBalance() == null) {
            record.setCurrentBalance(defaultMoney(record.getUsedAmount()));
        }
        if (record.getChangeType() == null) {
            record.setChangeType(record.getOrderId() == null || record.getOrderId() == 0
                    ? USE_RECORD_TYPE_EXCHANGE : USE_RECORD_TYPE_CONSUME);