| | |
| | | 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; |
| | |
| | | .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; |
| | | } |
| | | |
| | |
| | | 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; |