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 1e1a4b13..ff4884a1 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 @@ -4,8 +4,10 @@ import com.cdzy.common.model.EbikeUserFaultreportDto; import com.cdzy.common.model.EbikeUserFaultreportQueryDto; import com.cdzy.common.model.JsonResult; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -35,4 +37,28 @@ public interface OrdersFeignClient { */ @PostMapping("ebikeUserFaultreport/list") JsonResult getUserReportList(@RequestBody EbikeUserFaultreportQueryDto queryParam); + + /** + * 订单支付完成 + * @param queryParam 支付信息 + * @return @ {@code 200} 成功,{@code 500} 失败 + */ + @PostMapping("userOrders/payment") + JsonResult payment(@RequestBody EbikeUserFaultreportQueryDto queryParam); + + /** + * 订单发起退款 + * @param orderId 订单ID + * @return @ {@code 200} 成功,{@code 500} 失败 + */ + @GetMapping("userOrders/refund") + JsonResult refund(@RequestParam("orderId")Long orderId); + + /** + * 订单退款完成 + * @param orderId 订单ID + * @return @ {@code 200} 成功,{@code 500} 失败 + */ + @GetMapping("userOrders/doneRefund") + JsonResult doneRefund(@RequestParam("orderId")Long orderId); } diff --git a/ebike-feign/src/main/java/com/ebike/feign/model/res/ResFeignOrderPaymentDto.java b/ebike-feign/src/main/java/com/ebike/feign/model/res/ResFeignOrderPaymentDto.java new file mode 100644 index 00000000..d234bbf6 --- /dev/null +++ b/ebike-feign/src/main/java/com/ebike/feign/model/res/ResFeignOrderPaymentDto.java @@ -0,0 +1,28 @@ +package com.ebike.feign.model.res; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author attiya + * @since 2025-04-24 + */ +@Data +public class ResFeignOrderPaymentDto { + + /** + * 订单id + */ + private Long orderId; + + /** + * 支付方式:wechat/alipay/balance + */ + private String paymentMethod; + + /** + * 支付时间 + */ + private LocalDateTime paymentTime; +} 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 f02cfdb4..0c6670e1 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 @@ -4,6 +4,7 @@ import com.cdzy.common.model.JsonResult; import com.cdzy.common.model.PageParam; import com.cdzy.orders.model.dto.req.ReqBikeDto; import com.cdzy.orders.model.dto.req.ReqOrderDto; +import com.ebike.feign.model.res.ResFeignOrderPaymentDto; import com.cdzy.orders.model.dto.res.RspBikeDto; import com.cdzy.orders.model.entity.UserOrders; import com.cdzy.orders.service.UserOrdersService; @@ -106,6 +107,43 @@ public class EbikeUserOrdersController { return JsonResult.success(orderId); } + /** + * 订单支付。 + * + * @param paymentDto 支付信息 + * @ {@code 200} 添加成功,{@code 500} 添加失败 + */ + @PostMapping("payment") + public JsonResult payment(@RequestBody @Validated ResFeignOrderPaymentDto paymentDto) { + userOrdersService.payment(paymentDto); + return JsonResult.success(); + } + + /** + * 订单退款。 + * + * @param orderId 订单ID + * @ {@code 200} 添加成功,{@code 500} 添加失败 + */ + @GetMapping("refund") + public JsonResult refund(@RequestParam("orderId")Long orderId) { + userOrdersService.refund(orderId); + return JsonResult.success(); + } + + /** + * 订单退款完成。 + * + * @param orderId 订单ID + * @ {@code 200} 添加成功,{@code 500} 添加失败 + */ + @GetMapping("doneRefund") + public JsonResult doneRefund(@RequestParam("orderId")Long orderId) { + userOrdersService.doneRefund(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 bc76391c..e81c4cc6 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 @@ -21,6 +21,11 @@ public interface OrderStatus { */ int PENDING_PAYMENT = 2; + /** + * 已支付 + */ + int PAID = 3; + /** * 退款中 */ 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 4cc165a5..ad2c77c8 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 @@ -2,6 +2,7 @@ package com.cdzy.orders.service; import com.cdzy.orders.model.dto.req.ReqBikeDto; import com.cdzy.orders.model.dto.req.ReqOrderDto; +import com.ebike.feign.model.res.ResFeignOrderPaymentDto; import com.cdzy.orders.model.dto.res.RspBikeDto; import com.mybatisflex.core.service.IService; import com.cdzy.orders.model.entity.UserOrders; @@ -72,4 +73,22 @@ public interface UserOrdersService extends IService { * @return true/false */ boolean checkBikeInParking(String bikeCode); + + /** + * 订单支付 + * @param paymentDto 支付信息 + */ + void payment(ResFeignOrderPaymentDto paymentDto); + + /** + * 订单退款 + * @param orderId 订单ID + */ + void refund(Long orderId); + + /** + * 订单退款完成 + * @param orderId 订单ID + */ + void doneRefund(Long orderId); } 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 5857a383..e7088dea 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 @@ -12,6 +12,7 @@ import com.cdzy.orders.enums.OrderType; import com.cdzy.orders.mapper.UserOrdersMapper; import com.cdzy.orders.model.dto.req.ReqBikeDto; import com.cdzy.orders.model.dto.req.ReqOrderDto; +import com.ebike.feign.model.res.ResFeignOrderPaymentDto; import com.cdzy.orders.model.dto.res.RedisPoint; import com.cdzy.orders.model.dto.res.RspBikeDto; import com.cdzy.orders.model.entity.UserOrders; @@ -98,7 +99,7 @@ public class UserOrdersServiceImpl extends ServiceImpl stringCompletableFuture = ebikeCoreHandler.executeCommand(ecuInfo, CmdCode.LOCK, Long.valueOf(bikeInfoDto.getBikeId()), userId); @@ -253,7 +254,7 @@ public class UserOrdersServiceImpl extends ServiceImpl startupDuration){ + if (minutes > startupDuration) { BigDecimal minutesNew = BigDecimal.valueOf(minutes); BigDecimal startupDurationNew = BigDecimal.valueOf(startupDuration); //超出时长