web
This commit is contained in:
@@ -11,19 +11,21 @@ import (
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// OrderHandler 璁㈠崟澶勭悊鍣?
|
||||
// OrderHandler 订单处理器
|
||||
type OrderHandler struct {
|
||||
orderService *service.OrderService
|
||||
orderService *service.OrderService
|
||||
wechatPayService *service.WeChatPayService
|
||||
}
|
||||
|
||||
// NewOrderHandler 鍒涘缓璁㈠崟澶勭悊鍣?
|
||||
func NewOrderHandler(orderService *service.OrderService) *OrderHandler {
|
||||
// NewOrderHandler 创建订单处理器
|
||||
func NewOrderHandler(orderService *service.OrderService, wechatPayService *service.WeChatPayService) *OrderHandler {
|
||||
return &OrderHandler{
|
||||
orderService: orderService,
|
||||
orderService: orderService,
|
||||
wechatPayService: wechatPayService,
|
||||
}
|
||||
}
|
||||
|
||||
// CreateOrder 鍒涘缓璁㈠崟
|
||||
// CreateOrder 创建订单
|
||||
func (h *OrderHandler) CreateOrder(c *gin.Context) {
|
||||
userID, exists := c.Get("user_id")
|
||||
if !exists {
|
||||
@@ -50,7 +52,7 @@ func (h *OrderHandler) CreateOrder(c *gin.Context) {
|
||||
response.Success(c, order)
|
||||
}
|
||||
|
||||
// GetUserOrders 鑾峰彇鐢ㄦ埛璁㈠崟鍒楄〃
|
||||
// GetUserOrders 获取用户订单列表
|
||||
func (h *OrderHandler) GetUserOrders(c *gin.Context) {
|
||||
userID, exists := c.Get("user_id")
|
||||
if !exists {
|
||||
@@ -422,7 +424,7 @@ func (h *OrderHandler) formatOrderDetail(order *model.Order) *OrderDetailRespons
|
||||
}
|
||||
}
|
||||
|
||||
// PayOrder 鏀粯璁㈠崟
|
||||
// PayOrder 支付订单
|
||||
func (h *OrderHandler) PayOrder(c *gin.Context) {
|
||||
userID, exists := c.Get("user_id")
|
||||
if !exists {
|
||||
@@ -431,13 +433,66 @@ func (h *OrderHandler) PayOrder(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 从URL路径参数获取订单号
|
||||
orderID := c.Param("id")
|
||||
if orderID == "" {
|
||||
orderNo := c.Param("id")
|
||||
if orderNo == "" {
|
||||
response.BadRequest(c, "订单号不能为空")
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.orderService.PayOrder(userID.(uint), orderID); err != nil {
|
||||
// 解析请求体获取支付方式
|
||||
var req struct {
|
||||
PaymentMethod string `json:"payment_method"`
|
||||
}
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
// 如果没有提供支付方式,默认使用微信支付
|
||||
req.PaymentMethod = "wechat"
|
||||
}
|
||||
|
||||
// 获取订单详情
|
||||
order, err := h.orderService.GetOrderByOrderNo(orderNo)
|
||||
if err != nil {
|
||||
response.ErrorWithMessage(c, response.ERROR, "订单不存在")
|
||||
return
|
||||
}
|
||||
|
||||
// 验证订单归属
|
||||
if order.UserID != userID.(uint) {
|
||||
response.ErrorWithMessage(c, response.ERROR, "无权限操作此订单")
|
||||
return
|
||||
}
|
||||
|
||||
// 验证订单状态
|
||||
if order.Status != 1 { // 1 = 待付款
|
||||
response.ErrorWithMessage(c, response.ERROR, "订单状态不允许支付")
|
||||
return
|
||||
}
|
||||
|
||||
// 如果是微信支付,返回支付二维码
|
||||
if req.PaymentMethod == "wechat" {
|
||||
// 调用微信Native扫码支付
|
||||
if h.wechatPayService != nil {
|
||||
paymentResp, err := h.wechatPayService.CreateNativeOrder(c.Request.Context(), order)
|
||||
if err != nil {
|
||||
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, paymentResp.Data)
|
||||
return
|
||||
} else {
|
||||
// 如果没有微信支付服务,返回模拟数据
|
||||
response.Success(c, gin.H{
|
||||
"qrcode_url": "https://api.example.com/qrcode/" + orderNo,
|
||||
"order_no": orderNo,
|
||||
"amount": order.TotalAmount,
|
||||
"sandbox": true,
|
||||
})
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 其他支付方式,直接标记为已支付
|
||||
if err := h.orderService.PayOrder(userID.(uint), orderNo); err != nil {
|
||||
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
@@ -445,7 +500,7 @@ func (h *OrderHandler) PayOrder(c *gin.Context) {
|
||||
response.Success(c, nil)
|
||||
}
|
||||
|
||||
// CancelOrder 鍙栨秷璁㈠崟
|
||||
// CancelOrder 取消订单
|
||||
func (h *OrderHandler) CancelOrder(c *gin.Context) {
|
||||
userID, exists := c.Get("user_id")
|
||||
if !exists {
|
||||
@@ -534,7 +589,7 @@ func (h *OrderHandler) RefundOrder(c *gin.Context) {
|
||||
response.Success(c, gin.H{"message": "退款申请已提交"})
|
||||
}
|
||||
|
||||
// ConfirmReceive 纭鏀惰揣纭鏀惰揣
|
||||
// ConfirmReceive 确认收货
|
||||
func (h *OrderHandler) ConfirmReceive(c *gin.Context) {
|
||||
userID, exists := c.Get("user_id")
|
||||
if !exists {
|
||||
@@ -558,7 +613,7 @@ func (h *OrderHandler) ConfirmReceive(c *gin.Context) {
|
||||
response.Success(c, nil)
|
||||
}
|
||||
|
||||
// GetOrderList 鑾峰彇璁㈠崟鍒楄〃锛堢鐞嗗憳锟?
|
||||
// GetOrderList 获取订单列表(支持条件查询)
|
||||
func (h *OrderHandler) GetOrderList(c *gin.Context) {
|
||||
page := utils.StringToInt(c.DefaultQuery("page", "1"))
|
||||
pageSize := utils.StringToInt(c.DefaultQuery("page_size", "20"))
|
||||
@@ -589,7 +644,7 @@ func (h *OrderHandler) GetOrderList(c *gin.Context) {
|
||||
response.Page(c, orders, pagination.Total, pagination.Page, pagination.PageSize)
|
||||
}
|
||||
|
||||
// ShipOrder 鍙戣揣锛堢鐞嗗憳锟?
|
||||
// ShipOrder 发货
|
||||
func (h *OrderHandler) ShipOrder(c *gin.Context) {
|
||||
var req struct {
|
||||
OrderNo string `json:"order_no" binding:"required"`
|
||||
@@ -609,7 +664,7 @@ func (h *OrderHandler) ShipOrder(c *gin.Context) {
|
||||
response.Success(c, nil)
|
||||
}
|
||||
|
||||
// GetOrderStatistics 鑾峰彇璁㈠崟缁熻
|
||||
// GetOrderStatistics 获取订单统计
|
||||
func (h *OrderHandler) GetOrderStatistics(c *gin.Context) {
|
||||
statistics, err := h.orderService.GetOrderStatistics()
|
||||
if err != nil {
|
||||
@@ -620,7 +675,7 @@ func (h *OrderHandler) GetOrderStatistics(c *gin.Context) {
|
||||
response.Success(c, statistics)
|
||||
}
|
||||
|
||||
// GetDailyOrderStatistics 鑾峰彇姣忔棩璁㈠崟缁熻
|
||||
// GetDailyOrderStatistics 获取每日订单统计
|
||||
func (h *OrderHandler) GetDailyOrderStatistics(c *gin.Context) {
|
||||
days := utils.StringToInt(c.DefaultQuery("days", "30"))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user