用户退款

This commit is contained in:
yanglei 2025-11-13 22:27:46 +08:00
parent 4f06b79e77
commit 87dc496944
6 changed files with 40 additions and 38 deletions

View File

@ -78,8 +78,8 @@ public class EbikeWxPaymentController {
*/
@PostMapping("/refundApply")
public JsonResult<?> refundApply(@RequestBody EbikeOrderRefundDto ebikeRefundDto) {
Long r = wxPayService.refundApply(ebikeRefundDto.getOrderId(), ebikeRefundDto.getReason());
return JsonResult.success(r);
Long refundId = wxPayService.refundApply(ebikeRefundDto.getOrderId(), ebikeRefundDto.getReason());
return JsonResult.success(refundId);
}
/**
@ -149,7 +149,7 @@ public class EbikeWxPaymentController {
}
/**
* 退款订单详情
* 退款订单详情 bu
*
* @param refundId 退款id
* @return 退款详情
@ -172,20 +172,20 @@ public class EbikeWxPaymentController {
return JsonResult.success(refundApplyOrderInfoVo);
}
/**
* 退款申请用户详情
*
* @param refundId 退款id
* @return 退款申请用户详情
*/
@GetMapping("/refundApplyUserDetail/{refundId}")
public JsonResult<?> refundApplyUserDetail(@PathVariable(name = "refundId") Long refundId) {
EbikeRefundUserDetailInfoVo refundUserDetailInfoVo = wxPayService.queryRefundUserInfoById(refundId);
return JsonResult.success(refundUserDetailInfoVo);
}
// /**
// * 退款申请用户详情
// *
// * @param refundId 退款id
// * @return 退款申请用户详情
// */
// @GetMapping("/refundApplyUserDetail/{refundId}")
// public JsonResult<?> refundApplyUserDetail(@PathVariable(name = "refundId") Long refundId) {
// EbikeRefundUserDetailInfoVo refundUserDetailInfoVo = wxPayService.queryRefundUserInfoById(refundId);
// return JsonResult.success(refundUserDetailInfoVo);
// }
/**
* 退款申请用户交易记录
* 退款申请用户交易记录 -bu
*
* @param userQueryDto 查询条件
*/

View File

@ -22,7 +22,7 @@ import java.time.LocalDateTime;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("ebike_Refund")
@Table("ebike_refund")
public class EbikeRefund implements Serializable {
@ -38,7 +38,7 @@ public class EbikeRefund implements Serializable {
/**
* 退款单号
*/
private String refundOrder;
private String refundOrderId;
/**
* 订单号

View File

@ -82,7 +82,7 @@ public class EbikeRefundServiceImpl extends ServiceImpl<EbikeRefundMapper, Ebike
*/
private EbikeRefund getByRefundOrderId(String refundOrderId) {
QueryWrapper query = QueryWrapper.create()
.where(EBIKE_REFUND.REFUND_ORDER.eq(refundOrderId))
.where(EBIKE_REFUND.REFUND_ORDER_ID.eq(refundOrderId))
.orderBy(EBIKE_REFUND.CREATE_TIME.desc());
return getOne(query);
}
@ -196,7 +196,7 @@ public class EbikeRefundServiceImpl extends ServiceImpl<EbikeRefundMapper, Ebike
.leftJoin(EBIKE_PAYMENT).on(EBIKE_PAYMENT.ORDER_ID.eq(EBIKE_REFUND.ORDER_ID))
.leftJoin(EBIKE_USER).on(EBIKE_USER.USER_ID.eq(EBIKE_PAYMENT.USER_ID))
.leftJoin(EBIKE_ORDER).on(EBIKE_ORDER.ORDER_ID.eq(EBIKE_REFUND.ORDER_ID))
.where(EBIKE_REFUND.PROCESS_STATUS.eq(String.valueOf(refundDto.getProcessStatus())));
.where(EBIKE_REFUND.PROCESS_STATUS.eq(refundDto.getProcessStatus()));
// 查询条件
buildQueryConditions(query, refundDto);
Page<EbikeProcessedRefundVo> page = refundDto.getPageParam().getPage();
@ -268,7 +268,7 @@ public class EbikeRefundServiceImpl extends ServiceImpl<EbikeRefundMapper, Ebike
.from(EBIKE_REFUND)
.select(EBIKE_PAYMENT.TOTAL.as("amount"),
EBIKE_PAYMENT.CREATE_TIME,
EBIKE_ORDER.ORDER_TYPE.as("transactionContent"))
(EBIKE_ORDER.ORDER_TYPE).as("transactionContent"))
.select("'支出' as transactionType")
.leftJoin(EBIKE_PAYMENT).on(EBIKE_REFUND.ORDER_ID.eq(EBIKE_PAYMENT.ORDER_ID))
.leftJoin(EBIKE_USER).on(EBIKE_PAYMENT.USER_ID.eq(EBIKE_USER.USER_ID))
@ -359,7 +359,7 @@ public class EbikeRefundServiceImpl extends ServiceImpl<EbikeRefundMapper, Ebike
QueryWrapper query = QueryWrapper.create()
.select(QueryMethods.count(EBIKE_FAULT_REPORT.ALL_COLUMNS))
.from(EBIKE_FAULT_REPORT)
.where(EBIKE_FAULT_REPORT.ORDER_CODE.eq(orderId));
.where(EBIKE_FAULT_REPORT.ORDER_CODE.eq(String.valueOf(orderId)));
return (long) getObj(query);
}

View File

@ -423,7 +423,8 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService {
String outRefundNo = StringUtils.generateSnowflakeId("refundId");
ebikeRefund = new EbikeRefund();
ebikeRefund.setCreateTime(LocalDateTime.now());
ebikeRefund.setRefundOrder(outRefundNo);
ebikeRefund.setRefundOrderId(outRefundNo);
ebikeRefund.setOperatorId(ebikePayment.getOperatorId());
ebikeRefund.setOrderId(orderId);
ebikeRefund.setCurrency(ebikePayment.getCurrency());
ebikeRefund.setTotal(ebikePayment.getCostPrice());
@ -477,16 +478,11 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService {
notifyVo.setMessage(String.format("{%s}退款已经成功,不能重复退款", refundDto.getRefundId()));
return notifyVo;
}
if (Status.PROCESSING.ordinal() == ebikeRefund.getRefundStatus()) {
log.error("退款refund失败{} 退款中,不能重复退款", refundDto.getRefundId());
notifyVo.setMessage(String.format("{%s}退款中,不能重复退款", refundDto.getRefundId()));
return notifyVo;
}
if (Status.CLOSED.ordinal() == ebikeRefund.getRefundStatus() ||
Status.ABNORMAL.ordinal() == ebikeRefund.getRefundStatus()) {
//重新发起
String newOrder = StringUtils.generateSnowflakeId("refundId");
ebikeRefund.setRefundOrder(newOrder);
ebikeRefund.setRefundOrderId(newOrder);
}
// 查询支付记录
Long orderId = ebikeRefund.getOrderId();
@ -499,13 +495,13 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService {
// 发起退款
CreateRequest request = new CreateRequest();
request.setTransactionId(transactionId);
request.setOutTradeNo(String.valueOf(orderId));
request.setOutRefundNo(ebikeRefund.getRefundOrder());
request.setOutTradeNo(ebikePayment.getTradeId());
request.setOutRefundNo(ebikeRefund.getRefundOrderId());
request.setReason(ebikeRefund.getReason());
request.setNotifyUrl(wxPayConfig.getRefundNotifyUrl());
AmountReq amountReq = new AmountReq();
amountReq.setRefund(amount.getRefund().longValue());
amountReq.setTotal(amount.getTotal().longValue());
amountReq.setRefund(yuanToCent(amount.getRefund()));
amountReq.setTotal(yuanToCent(amount.getTotal()));
amountReq.setCurrency(amount.getCurrency());
request.setAmount(amountReq);
try {
@ -555,7 +551,7 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService {
log.error("{}退款订单不存在", refundId);
return null;
}
return queryRefundByOutTradeNo(ebikeRefund.getRefundOrder());
return queryRefundByOutTradeNo(ebikeRefund.getRefundOrderId());
}
@Override
@ -591,7 +587,7 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService {
return result;
}
Refund refund = queryRefundByOutTradeNo(ebikeRefund.getRefundOrder());
Refund refund = queryRefundByOutTradeNo(ebikeRefund.getRefundOrderId());
if (refund != null && Status.SUCCESS.equals(refund.getStatus())) {
result.setSuccess(true);
@ -856,4 +852,13 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService {
}
return msg;
}
private Long yuanToCent(BigDecimal yuan) {
if (yuan == null) {
return null;
}
return yuan.multiply(BigDecimal.valueOf(100))
.setScale(0, RoundingMode.HALF_UP)
.longValue();
}
}

View File

@ -90,7 +90,7 @@ public class WxPayTask {
for (EbikeRefund ebikeRefund : ebikeRefundList) {
log.warn("超时未退款的退款单号 ===> {}", ebikeRefund.getRefundId());
// 调用微信退款查询接口查询退款状态
Refund refund = wxPayService.queryRefundByOutTradeNo(ebikeRefund.getRefundOrder());
Refund refund = wxPayService.queryRefundByOutTradeNo(ebikeRefund.getRefundOrderId());
if (refund != null) {
// 3. 更新退款单状态
ebikeRefundService.updateRefundStatus(refund);

View File

@ -1,9 +1,6 @@
package com.cdzy.user.service;
import com.cdzy.user.model.dto.EbikeUserRealInfoDto;
import com.cdzy.user.model.entity.EbikeUserRealInfo;
import com.cdzy.user.model.vo.EbikeUserVo;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
/**