liujie
2026-04-28 14d3930f96ab6304c6f4d4cc474a4bd1f981e6f6
p0功能 小程序
1个文件已修改
41 ■■■■■ 已修改文件
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TExchangeCodePackageServiceImpl.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TExchangeCodePackageServiceImpl.java
@@ -42,6 +42,7 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -307,7 +308,9 @@
                        .eq(query.getChangeType() != null, "change_type", query.getChangeType())
                        .orderByDesc("create_time"));
        fillUseRecordBalances(page.getRecords(), query.getUserId());
        page.getRecords().forEach(this::fillUseRecordView);
        List<TExchangeCodeUseRecord> mergedRecords = mergeUseRecords(page.getRecords());
        mergedRecords.forEach(this::fillUseRecordView);
        page.setRecords(mergedRecords);
        return page;
    }
@@ -662,6 +665,42 @@
        return UUID.randomUUID().toString().replace("-", "").substring(0, 8).toUpperCase();
    }
    private List<TExchangeCodeUseRecord> mergeUseRecords(List<TExchangeCodeUseRecord> records) {
        if (records == null || records.isEmpty()) {
            return records;
        }
        Map<String, TExchangeCodeUseRecord> recordMap = new LinkedHashMap<>();
        for (TExchangeCodeUseRecord record : records) {
            String key = buildUseRecordMergeKey(record);
            TExchangeCodeUseRecord merged = recordMap.get(key);
            if (merged == null) {
                recordMap.put(key, record);
                continue;
            }
            merged.setUsedAmount(defaultMoney(merged.getUsedAmount()).add(defaultMoney(record.getUsedAmount())).setScale(2, RoundingMode.HALF_UP));
            merged.setGiftUsedAmount(defaultMoney(merged.getGiftUsedAmount()).add(defaultMoney(record.getGiftUsedAmount())).setScale(2, RoundingMode.HALF_UP));
            if (record.getId() != null && merged.getId() != null && record.getId() > merged.getId()) {
                merged.setId(record.getId());
                merged.setDetailId(record.getDetailId());
                merged.setCreateTime(record.getCreateTime());
                merged.setDateTime(record.getDateTime());
                merged.setCurrentBalance(record.getCurrentBalance());
            }
        }
        return new ArrayList<>(recordMap.values());
    }
    private String buildUseRecordMergeKey(TExchangeCodeUseRecord record) {
        Long orderId = record.getOrderId() == null ? 0L : record.getOrderId();
        Long detailId = record.getDetailId() == null ? 0L : record.getDetailId();
        Integer changeType = record.getChangeType() == null ? 0 : record.getChangeType();
        String refundNo = record.getRefundNo() == null ? "" : record.getRefundNo();
        if (orderId > 0) {
            return orderId + "_" + changeType + "_" + refundNo;
        }
        return detailId + "_" + changeType + "_" + refundNo;
    }
    private void fillUseRecordBalance(TExchangeCodeUseRecord record, Long userId) {
        if (record == null || userId == null || record.getId() == null) {
            return;