|
|
@@ -541,43 +541,46 @@ public class PaymentServiceImpl implements PaymentService {
|
|
|
customRefundAmount = new BigDecimal(params.get("refundAmount").toString());
|
|
|
}
|
|
|
|
|
|
- // 如果指定了商品或自定义金额,走部分退款流程
|
|
|
- boolean hasProducts = products != null && !products.isEmpty();
|
|
|
- boolean hasCustomAmount = customRefundAmount != null;
|
|
|
- if (hasProducts || hasCustomAmount) {
|
|
|
- try {
|
|
|
- // 创建退款记录(PENDING),内部完成金额计算和校验
|
|
|
- com.haha.entity.Refund refundRecord = refundService.createRefundRecord(orderId, reason, products, customRefundAmount);
|
|
|
- BigDecimal refundAmount = refundRecord.getRefundAmount();
|
|
|
-
|
|
|
- // 执行第三方退款
|
|
|
- RefundResult result = refund(orderId, reason, refundAmount);
|
|
|
+ // 是否立即执行退款(管理员直接退款 vs 用户提交申请)
|
|
|
+ boolean immediate = params.containsKey("immediate") && Boolean.TRUE.equals(params.get("immediate"));
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 创建退款记录(PENDING)
|
|
|
+ com.haha.entity.Refund refundRecord = refundService.createRefundRecord(orderId, reason, products, customRefundAmount);
|
|
|
+ BigDecimal refundAmount = refundRecord.getRefundAmount();
|
|
|
|
|
|
+ if (immediate) {
|
|
|
+ // 管理员直接退款:立即执行第三方退款
|
|
|
+ RefundResult result = refund(orderId, reason, refundAmount);
|
|
|
if (result.isSuccess()) {
|
|
|
refundService.markRefunded(refundRecord.getId(), result.getRefundId());
|
|
|
- // 更新订单关联的退款记录ID
|
|
|
Order order = orderService.getById(orderId);
|
|
|
if (order != null) {
|
|
|
order.setCurrentRefundId(refundRecord.getId());
|
|
|
orderService.updateById(order);
|
|
|
}
|
|
|
- log.info("退款成功(含商品明细) - orderId: {}, refundId: {}, amount: {}, items: {}",
|
|
|
- orderId, refundRecord.getId(), refundAmount, products != null ? products.size() : 0);
|
|
|
+ log.info("管理员直接退款成功 - orderId: {}, refundId: {}, amount: {}",
|
|
|
+ orderId, refundRecord.getId(), refundAmount);
|
|
|
}
|
|
|
return result;
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("退款失败 - orderId: {}, error: {}", orderId, e.getMessage());
|
|
|
+ } else {
|
|
|
+ // 用户端提交:仅创建申请,等待管理员审核
|
|
|
+ log.info("退款申请已创建,等待审核 - orderId: {}, refundId: {}, amount: {}, items: {}",
|
|
|
+ orderId, refundRecord.getId(), refundRecord.getRefundAmount(),
|
|
|
+ products != null ? products.size() : 0);
|
|
|
return RefundResult.builder()
|
|
|
- .success(false)
|
|
|
- .errorCode("REFUND_ERROR")
|
|
|
- .errorMsg(e.getMessage())
|
|
|
+ .success(true)
|
|
|
+ .refundId(String.valueOf(refundRecord.getId()))
|
|
|
.build();
|
|
|
}
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("退款申请失败 - orderId: {}, error: {}", orderId, e.getMessage());
|
|
|
+ return RefundResult.builder()
|
|
|
+ .success(false)
|
|
|
+ .errorCode("REFUND_ERROR")
|
|
|
+ .errorMsg(e.getMessage())
|
|
|
+ .build();
|
|
|
}
|
|
|
-
|
|
|
- // 无商品选择、无自定义金额 → 全额退款(兼容旧行为)
|
|
|
- log.info("退款请求(全额) - 订单ID: {}, 原因: {}", orderId, reason);
|
|
|
- return refund(orderId, reason);
|
|
|
}
|
|
|
|
|
|
@Override
|