diff --git a/ebike-feign/src/main/java/com/ebike/feign/clients/OrdersFeignClient.java b/ebike-feign/src/main/java/com/ebike/feign/clients/OrdersFeignClient.java index 58354018..26571287 100644 --- a/ebike-feign/src/main/java/com/ebike/feign/clients/OrdersFeignClient.java +++ b/ebike-feign/src/main/java/com/ebike/feign/clients/OrdersFeignClient.java @@ -63,6 +63,14 @@ public interface OrdersFeignClient { @GetMapping("userOrders/refund") JsonResult refund(@RequestParam("orderId")Long orderId); + /** + * 订单发起退款申请 + * @param orderId 订单ID + * @return @ {@code 200} 成功,{@code 500} 失败 + */ + @GetMapping("userOrders/refundApply") + JsonResult refundApply(@RequestParam("orderId")Long orderId); + /** * 订单退款完成 * @param orderId 订单ID @@ -70,4 +78,20 @@ public interface OrdersFeignClient { */ @GetMapping("userOrders/doneRefund") JsonResult doneRefund(@RequestParam("orderId")Long orderId); + + /** + * 订单退款驳回 + * @param orderId 订单ID + * @return @ {@code 200} 成功,{@code 500} 失败 + */ + @GetMapping("userOrders/rejectRefund") + JsonResult rejectRefund(@RequestParam("orderId")Long orderId); + + /** + * 订单退款失败 + * @param orderId 订单ID + * @return @ {@code 200} 成功,{@code 500} 失败 + */ + @GetMapping("userOrders/failRefund") + JsonResult failRefund(@RequestParam("orderId")Long orderId); } diff --git a/ebike-orders/src/main/java/com/cdzy/orders/controller/EbikeUserOrdersController.java b/ebike-orders/src/main/java/com/cdzy/orders/controller/EbikeUserOrdersController.java index e1172294..1953f060 100644 --- a/ebike-orders/src/main/java/com/cdzy/orders/controller/EbikeUserOrdersController.java +++ b/ebike-orders/src/main/java/com/cdzy/orders/controller/EbikeUserOrdersController.java @@ -150,6 +150,18 @@ public class EbikeUserOrdersController { return JsonResult.success(); } + /** + * 订单退款申请。 + * + * @param orderId 订单ID + * @ {@code 200} 添加成功,{@code 500} 添加失败 + */ + @GetMapping("refundApply") + public JsonResult refundApply(@RequestParam("orderId")Long orderId) { + userOrdersService.refundApply(orderId); + return JsonResult.success(); + } + /** * 订单退款。 * @@ -174,6 +186,30 @@ public class EbikeUserOrdersController { return JsonResult.success(); } + /** + * 订单退款驳回。 + * + * @param orderId 订单ID + * @ {@code 200} 添加成功,{@code 500} 添加失败 + */ + @GetMapping("rejectRefund") + public JsonResult rejectRefund(@RequestParam("orderId")Long orderId) { + userOrdersService.rejectRefund(orderId); + return JsonResult.success(); + } + + /** + * 订单退款失败。 + * + * @param orderId 订单ID + * @ {@code 200} 添加成功,{@code 500} 添加失败 + */ + @GetMapping("failRefund") + public JsonResult failRefund(@RequestParam("orderId")Long orderId) { + userOrdersService.failRefund(orderId); + return JsonResult.success(); + } + /** * 检查车辆是否在运营区内。 diff --git a/ebike-orders/src/main/java/com/cdzy/orders/enums/OrderStatus.java b/ebike-orders/src/main/java/com/cdzy/orders/enums/OrderStatus.java index e81c4cc6..edf2981c 100644 --- a/ebike-orders/src/main/java/com/cdzy/orders/enums/OrderStatus.java +++ b/ebike-orders/src/main/java/com/cdzy/orders/enums/OrderStatus.java @@ -35,4 +35,16 @@ public interface OrderStatus { * 已退款 */ int REFUNDED = 5; + /** + * 退款申请中 + */ + int REFUND_APPLYING = 6; + /** + * 退款申请驳回 + */ + int REFUND_REJECTED = 7; + /** + * 退款失败 + */ + int REFUND_FAILED = 8; } diff --git a/ebike-orders/src/main/java/com/cdzy/orders/service/UserOrdersService.java b/ebike-orders/src/main/java/com/cdzy/orders/service/UserOrdersService.java index 83f92cc7..baad3c63 100644 --- a/ebike-orders/src/main/java/com/cdzy/orders/service/UserOrdersService.java +++ b/ebike-orders/src/main/java/com/cdzy/orders/service/UserOrdersService.java @@ -87,6 +87,12 @@ public interface UserOrdersService extends IService { */ void payment(ResFeignOrderPaymentDto paymentDto); + /** + * 订单发起退款 + * @param orderId 订单ID + */ + void refundApply(Long orderId); + /** * 订单退款 * @param orderId 订单ID @@ -99,6 +105,18 @@ public interface UserOrdersService extends IService { */ void doneRefund(Long orderId); + /** + * 订单退款驳回 + * @param orderId 订单ID + */ + void rejectRefund(Long orderId); + + /** + * 订单退款失败 + * @param orderId 订单ID + */ + void failRefund(Long orderId); + /** * 获取订单详情 * @param orderId 订单id diff --git a/ebike-orders/src/main/java/com/cdzy/orders/service/impl/UserOrdersServiceImpl.java b/ebike-orders/src/main/java/com/cdzy/orders/service/impl/UserOrdersServiceImpl.java index 01cb4ce5..0e68d1cc 100644 --- a/ebike-orders/src/main/java/com/cdzy/orders/service/impl/UserOrdersServiceImpl.java +++ b/ebike-orders/src/main/java/com/cdzy/orders/service/impl/UserOrdersServiceImpl.java @@ -302,6 +302,16 @@ public class UserOrdersServiceImpl extends ServiceImpl refundApply(@RequestBody EbikeRefundDto refundDto) { String r = wxPayService.refundApply(refundDto.getOrderId(), refundDto.getReason()); - return r == null?JsonResult.failed("退款失败"):JsonResult.success(r); + return r == null?JsonResult.failed("退款申请失败"):JsonResult.success((Object) r); } /** @@ -85,12 +85,7 @@ public class EbikeWxPaymentController { @PostMapping("/refund") public JsonResult refund(@RequestBody ReqRefundDto refundDto) { HandleNotifyResult r = wxPayService.refund(refundDto); - if (r.isSuccess()) - return JsonResult.success(); - JSONObject error = JSONObject.parseObject(r.getMessage()); - if (error==null) - return JsonResult.failed(r.getMessage()); - return JsonResult.failed("退款失败", error); + return r.isSuccess()?JsonResult.success(true):JsonResult.failed(r.getMessage()); } /** diff --git a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ReqRefundDto.java b/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ReqRefundDto.java index e3450162..5619b426 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ReqRefundDto.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ReqRefundDto.java @@ -17,7 +17,7 @@ import java.util.List; public class ReqRefundDto { /** - * 退款单号 + * 主键id */ private String refundId; diff --git a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ReqRefundProcessDto.java b/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ReqRefundProcessDto.java index b02dd25b..a8683fed 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ReqRefundProcessDto.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ReqRefundProcessDto.java @@ -17,7 +17,7 @@ import java.util.List; public class ReqRefundProcessDto { /** - * 退款单号 + * 主键id */ private String refundId; diff --git a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResApplyRefundDto.java b/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResApplyRefundDto.java index 32830342..e09e1166 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResApplyRefundDto.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResApplyRefundDto.java @@ -76,4 +76,19 @@ public class ResApplyRefundDto { */ private String applicant; + /** + * 骑行设备编号 + */ + private String ebikeCode;; + + /** + * 骑行开始时间 + */ + private LocalDateTime startTime; + + /** + * 骑行开始时间 + */ + private LocalDateTime endTime; + } diff --git a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResCloseRefundDto.java b/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResCloseRefundDto.java index 91e5808b..83211bb6 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResCloseRefundDto.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResCloseRefundDto.java @@ -86,4 +86,19 @@ public class ResCloseRefundDto { */ private String applicant; + /** + * 骑行设备编号 + */ + private String ebikeCode;; + + /** + * 骑行开始时间 + */ + private LocalDateTime startTime; + + /** + * 骑行开始时间 + */ + private LocalDateTime endTime; + } diff --git a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResHandleRefundDto.java b/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResHandleRefundDto.java index 6b0aedc6..1d83acdc 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResHandleRefundDto.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResHandleRefundDto.java @@ -81,4 +81,19 @@ public class ResHandleRefundDto { */ private String applicant; + /** + * 骑行设备编号 + */ + private String ebikeCode;; + + /** + * 骑行开始时间 + */ + private LocalDateTime startTime; + + /** + * 骑行开始时间 + */ + private LocalDateTime endTime; + } diff --git a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResProcessedRefundDto.java b/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResProcessedRefundDto.java index f76d9195..5b9e190e 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResProcessedRefundDto.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/model/dto/ResProcessedRefundDto.java @@ -106,4 +106,19 @@ public class ResProcessedRefundDto { */ private String applicant; + /** + * 骑行设备编号 + */ + private String ebikeCode;; + + /** + * 骑行开始时间 + */ + private LocalDateTime startTime; + + /** + * 骑行开始时间 + */ + private LocalDateTime endTime; + } diff --git a/ebike-payment/src/main/java/com/cdzy/payment/model/entity/EbikeRefund.java b/ebike-payment/src/main/java/com/cdzy/payment/model/entity/EbikeRefund.java index ebdc9036..e6d96ffe 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/model/entity/EbikeRefund.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/model/entity/EbikeRefund.java @@ -34,6 +34,11 @@ public class EbikeRefund implements Serializable { @Id private String refundId; + /** + * 退款单号 + */ + private String refundOrder; + /** * 骑行订单号 */ @@ -116,4 +121,14 @@ public class EbikeRefund implements Serializable { */ private LocalDateTime processTime ; + /** + * 审核人 + */ + private String reviewOperator ; + + /** + * 退款人 + */ + private String refundOperator ; + } diff --git a/ebike-payment/src/main/java/com/cdzy/payment/model/entity/EbikeUserOrders.java b/ebike-payment/src/main/java/com/cdzy/payment/model/entity/EbikeUserOrders.java new file mode 100644 index 00000000..3fb655b9 --- /dev/null +++ b/ebike-payment/src/main/java/com/cdzy/payment/model/entity/EbikeUserOrders.java @@ -0,0 +1,136 @@ +package com.cdzy.payment.model.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 用户订单表 实体类。 + * + * @author attiya + * @since 2025-03-28 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("ebike_user_orders") +public class EbikeUserOrders implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 分布式ID(雪花算法或业务前缀+序列) + */ + @Id + private Long orderId; + + /** + * 用户ID,关联用户表 + */ + private String userId; + + private String bikeId; + + /** + * 订单类型:1-单次骑行 2-骑行卡购买 3-会员卡续费 + */ + private Integer orderType; + + /** + * 状态:0-进行中 1-已取消 2-待支付 3-已支付 4-退款中 5-已退款 + */ + @Column(onInsertValue = "0") + private Integer status; + + /** + * 订单总金额(单位:元) + */ + private BigDecimal totalAmount; + + /** + * 实付金额(扣除卡券优惠后) + */ + private BigDecimal actualAmount; + + /** + * 骑行开始时间(仅骑行订单有效) + */ + private LocalDateTime startTime; + + /** + * 骑行结束时间(仅骑行订单有效) + */ + private LocalDateTime endTime; + + /** + * 支付成功时间 + */ + private LocalDateTime paymentTime; + + /** + * 支付方式:wechat/alipay/balance + */ + private String paymentMethod; + + /** + * 使用卡券ID集合(JSON数组) + */ + private String couponIds; + + /** + * 优惠明细(结构化存储,便于对账) + */ + private String discountDetails; + + /** + * 骑行设备编号(仅骑行订单有效) + */ + private String bikeCode; + + /** + * 地理位置GeoHash编码(用于区域优惠分析) + */ + private String geoHash; + + /** + * 创建时间 + */ + @Column(onInsertValue = "now()") + private LocalDateTime createdAt; + + /** + * 更新时间 + */ + @Column(onUpdateValue = "now()") + private LocalDateTime updatedAt; + + /** + * 骑行起始点 + */ + private String ridePoint; + + /** + * 骑行结束点 + */ + private String returnPoint; + + /** + * 0-未临时锁车 -1临时锁车 + */ + private Integer tempLock; + + @Column(isLogicDelete = true,onInsertValue = "0") + private Integer isDelete; + +} diff --git a/ebike-payment/src/main/java/com/cdzy/payment/service/impl/EbikeRefundServiceImpl.java b/ebike-payment/src/main/java/com/cdzy/payment/service/impl/EbikeRefundServiceImpl.java index 25a78956..b4dbc195 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/service/impl/EbikeRefundServiceImpl.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/service/impl/EbikeRefundServiceImpl.java @@ -20,6 +20,7 @@ import java.util.List; import static com.cdzy.payment.model.entity.table.EbikePaymentTableDef.EBIKE_PAYMENT; import static com.cdzy.payment.model.entity.table.EbikeRefundTableDef.EBIKE_REFUND; +import static com.cdzy.payment.model.entity.table.EbikeUserOrdersTableDef.EBIKE_USER_ORDERS; import static com.cdzy.payment.model.entity.table.EbikeUserTableDef.EBIKE_USER; import static com.cdzy.payment.model.enums.RefundProcessState.*; import static com.mybatisflex.core.constant.FuncName.*; @@ -41,7 +42,7 @@ public class EbikeRefundServiceImpl extends ServiceImpl ordersFeignClient.refund(orderId); + case SUCCESS -> ordersFeignClient.doneRefund(orderId); + case ABNORMAL -> ordersFeignClient.failRefund(orderId); } return updateById(ebikeRefund); } @@ -91,10 +95,12 @@ public class EbikeRefundServiceImpl extends ServiceImpl