From 0669528e58b0a08902a5e86f65c356b479530fbd Mon Sep 17 00:00:00 2001 From: Admin Date: Tue, 14 Jul 2026 12:18:41 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=88=9B=E5=BB=BA=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=97=B6=E8=AE=BE=E7=BD=AE30=E5=88=86=E9=92=9F=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E8=BF=87=E6=9C=9F=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/cmd/server/main.go | 65 -------------------------- backend/internal/api/handlers/order.go | 7 +++ 2 files changed, 7 insertions(+), 65 deletions(-) diff --git a/backend/cmd/server/main.go b/backend/cmd/server/main.go index fa22b51..e23b0bc 100644 --- a/backend/cmd/server/main.go +++ b/backend/cmd/server/main.go @@ -2,11 +2,9 @@ package main import ( "log" - "time" "sale/internal/api/routes" "sale/internal/config" - "sale/internal/models" "sale/internal/utils" "github.com/gin-gonic/gin" @@ -23,9 +21,6 @@ func main() { gin.SetMode(gin.ReleaseMode) } - // 启动订单过期检查定时任务 - go startOrderExpiryChecker() - r := gin.Default() routes.SetupRoutes(r) @@ -36,63 +31,3 @@ func main() { log.Fatalf("Failed to start server: %v", err) } } - -// startOrderExpiryChecker 启动定时检查过期订单 -func startOrderExpiryChecker() { - ticker := time.NewTicker(30 * time.Second) - defer ticker.Stop() - - // 立即执行一次 - checkExpiredOrders() - - for range ticker.C { - checkExpiredOrders() - } -} - -// checkExpiredOrders 检查并更新过期订单状态 -func checkExpiredOrders() { - now := time.Now() - - // 查找所有已过期但状态仍为待支付的订单 - var orders []models.Order - if err := utils.DB.Where("status = ? AND payment_expires_at IS NOT NULL AND payment_expires_at < ?", - models.OrderStatusPendingPayment, now).Find(&orders).Error; err != nil { - log.Printf("[OrderExpiry] Failed to query expired orders: %v", err) - return - } - - if len(orders) == 0 { - return - } - - log.Printf("[OrderExpiry] Found %d expired orders", len(orders)) - - for _, order := range orders { - tx := utils.DB.Begin() - - // 更新订单状态为已取消 - if err := tx.Model(&order).Update("status", models.OrderStatusCancelled).Error; err != nil { - tx.Rollback() - log.Printf("[OrderExpiry] Failed to cancel order %d: %v", order.ID, err) - continue - } - - // 恢复库存 - var orderItems []models.OrderItem - if err := tx.Where("order_id = ?", order.ID).Find(&orderItems).Error; err != nil { - tx.Rollback() - continue - } - - for _, item := range orderItems { - var inventory models.Inventory - if err := tx.Where("product_id = ?", item.ProductID).First(&inventory).Error; err == nil { - tx.Model(&inventory).UpdateColumn("quantity", inventory.Quantity+item.Quantity) - } - } - - tx.Commit() - log.Printf("[OrderExpiry] Order %d cancelled, stock restored", order.ID) - } -} diff --git a/backend/internal/api/handlers/order.go b/backend/internal/api/handlers/order.go index e57e945..714a9da 100644 --- a/backend/internal/api/handlers/order.go +++ b/backend/internal/api/handlers/order.go @@ -176,6 +176,12 @@ func checkOrdersExpired(orders []models.Order) { } } +// getPaymentExpiryTime 获取支付过期时间(当前时间 + 30分钟) +func getPaymentExpiryTime() *time.Time { + t := time.Now().Add(30 * time.Minute) + return &t +} + func (h *OrderHandler) List(c *gin.Context) { userID := c.GetUint("user_id") role, _ := c.Get("role") @@ -401,6 +407,7 @@ func (h *OrderHandler) Create(c *gin.Context) { Status: models.OrderStatusPendingPayment, ShippingAddressID: &req.ShippingAddressID, PaymentMethod: req.PaymentMethod, + PaymentExpiresAt: getPaymentExpiryTime(), } tx := utils.DB.Begin()