|
|
|
@ -581,6 +581,45 @@ public class CashRefundServiceImpl implements RefundService { |
|
|
|
userGoldRecord.getRemark(), (double) userGoldRecord.getPermanentGold() / 100, auditName, "退款金币充值"); |
|
|
|
} |
|
|
|
|
|
|
|
// 🔥【新增】处理现金购买软件产品的退款 - 将原始购买明细状态改为已退款,并更新订单号 |
|
|
|
if (cashRecordDone.getGoodsName() != null && cashRecordDone.getStatus() == 40 && |
|
|
|
!cashRecordDone.getGoodsName().equals(languageTranslationUtil.translate("金币充值", lang)) && |
|
|
|
!cashRecordDone.getGoodsName().contains(languageTranslationUtil.translate("金币充值", lang))) { |
|
|
|
|
|
|
|
String orderCode = cashRecordDone.getOrderCode(); |
|
|
|
String orderCodeA = "XJ" + orderCode.substring(4); |
|
|
|
String refundOrderCode = "TK" + orderCodeA; // 退款订单号 |
|
|
|
|
|
|
|
// 查询原始购买流水(type=3 软件购买,status=0 正常) |
|
|
|
List<UserWalletRecord> originalRecords = walletService.selectUserWalletRecord(cashRecordDone.getJwcode(), orderCodeA); |
|
|
|
if (!CollectionUtils.isEmpty(originalRecords)) { |
|
|
|
// 过滤软件购买记录 |
|
|
|
List<UserWalletRecord> purchaseRecords = originalRecords.stream() |
|
|
|
.filter(r -> r.getType() == 3 && r.getStatus() == 0) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
if (!purchaseRecords.isEmpty()) { |
|
|
|
// 🔥 将所有原始购买明细的状态改为1(已退款),并更新订单号为退款订单号 |
|
|
|
for (UserWalletRecord purchaseRecord : purchaseRecords) { |
|
|
|
// 更新订单号为退款订单号 |
|
|
|
purchaseRecord.setOrderCode(refundOrderCode); |
|
|
|
// 更新状态为已退款(status=1) |
|
|
|
walletService.updateUserWalletRecord(purchaseRecord.getId()); |
|
|
|
|
|
|
|
log.info("现金购买软件产品退款 - 原始购买明细已更新 | id={}, jwcode={}, walletId={}, 原订单号={}, 新订单号={}, amount={}, currency={}", |
|
|
|
purchaseRecord.getId(), cashRecordDone.getJwcode(), purchaseRecord.getWalletId(), |
|
|
|
orderCodeA, refundOrderCode, purchaseRecord.getAmount(), purchaseRecord.getTransactionCurrency()); |
|
|
|
} |
|
|
|
} else { |
|
|
|
log.warn("未找到有效的原始购买流水记录 | jwcode={}, orderCode={}", |
|
|
|
cashRecordDone.getJwcode(), orderCode); |
|
|
|
} |
|
|
|
} else { |
|
|
|
log.warn("未查询到原始购买流水 | jwcode={}, orderCode={}", |
|
|
|
cashRecordDone.getJwcode(), orderCode); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
cashRefundMapper.updateAudit(cashRecordDone); |
|
|
|
int result = cashRefundMapper.review(cashRecordDone); |
|
|
|
CashRecordDTO cashRecordDTO = cashRefundMapper.selectById(cashRecordDone.getId()); |
|
|
|
|