From 73047b74df043c70a05f552674f0afe5bd348d4d Mon Sep 17 00:00:00 2001 From: yml2213 Date: Fri, 24 Jul 2026 15:15:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E8=B4=A7=E7=BB=93=E6=9E=9C=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E6=8E=A5=E5=8F=A3=E6=96=B0=E5=A2=9E=20game=5Fchannel?= =?UTF-8?q?=E3=80=81game=5Fuid=E3=80=81role=5Fname=E3=80=81pay=5Fscore=20?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/handler/open.go | 21 ++++++++++----- backend/internal/model/models.go | 5 ++++ backend/internal/service/order.go | 45 ++++++++++++++++++++++++------- 3 files changed, 55 insertions(+), 16 deletions(-) diff --git a/backend/internal/handler/open.go b/backend/internal/handler/open.go index bb38d7a..e754042 100644 --- a/backend/internal/handler/open.go +++ b/backend/internal/handler/open.go @@ -44,19 +44,24 @@ func (h *OpenHandler) QueryOrder(c *gin.Context) { if data.Product != nil { sku, name, game = data.Product.SKU, data.Product.Name, data.Product.Game } - openlog.Info(c, "query_order ok order_no=%s status=%s can_ship=%v reason=%q sku=%s name=%s game=%s buyer=%s amount=%.2f provider_no=%s shipped_at=%v fail_reason=%q", + openlog.Info(c, "query_order ok order_no=%s status=%s can_ship=%v reason=%q sku=%s name=%s game=%s buyer=%s amount=%.2f provider_no=%s shipped_at=%v fail_reason=%q game_channel=%s game_uid=%s role_name=%s pay_score=%d", data.OrderNo, data.Status, data.CanShip, data.CannotShipReason, sku, name, game, data.BuyerName, data.Amount, data.ProviderOrderNo, data.ShippedAt, data.ShipFailReason, + data.GameChannel, data.GameUID, data.RoleName, data.PayScore, ) response.OK(c, data) } type shipNotifyReq struct { - OrderNo string `json:"order_no" binding:"required"` - ShipStatus string `json:"ship_status" binding:"required"` // success/failed/processing - ProviderOrderNo string `json:"provider_order_no"` - ShippedAt string `json:"shipped_at"` // RFC3339 可选 - FailReason string `json:"fail_reason"` + OrderNo string `json:"order_no" binding:"required"` + ShipStatus string `json:"ship_status" binding:"required"` // success/failed/processing + ProviderOrderNo string `json:"provider_order_no"` + ShippedAt string `json:"shipped_at"` // RFC3339 可选 + FailReason string `json:"fail_reason"` + GameChannel *string `json:"game_channel"` // 账号区服(安卓/IOS-微信/QQ) + GameUID *string `json:"game_uid"` // 游戏角色UUID + RoleName *string `json:"role_name"` // 角色名 + PayScore *int `json:"pay_score"` // 消耗积分 } // ShipNotify POST /api/open/v1/orders/ship-notify @@ -92,6 +97,10 @@ func (h *OpenHandler) ShipNotify(c *gin.Context) { ShippedAt: shippedAt, FailReason: req.FailReason, RawPayload: string(raw), + GameChannel: req.GameChannel, + GameUID: req.GameUID, + RoleName: req.RoleName, + PayScore: req.PayScore, }) if err != nil { openlog.Warn(c, "ship_notify fail order_no=%s ship_status=%s err=%s", diff --git a/backend/internal/model/models.go b/backend/internal/model/models.go index 47fb0a9..d0ace07 100644 --- a/backend/internal/model/models.go +++ b/backend/internal/model/models.go @@ -70,6 +70,11 @@ type Order struct { ProviderOrderNo string `gorm:"size:64;index" json:"provider_order_no"` // 上游单号 ShippedAt *time.Time `json:"shipped_at"` // 发货成功时间 ShipFailReason string `gorm:"size:512" json:"ship_fail_reason"` // 最近一次失败原因 + + GameChannel string `gorm:"size:64" json:"game_channel"` // 账号区服(安卓/IOS-微信/QQ) + GameUID string `gorm:"size:128" json:"game_uid"` // 游戏角色UUID + RoleName string `gorm:"size:64" json:"role_name"` // 角色名 + PayScore int `gorm:"default:0" json:"pay_score"` // 消耗积分 } // 订单状态 diff --git a/backend/internal/service/order.go b/backend/internal/service/order.go index c8c3ab7..58c7a7f 100644 --- a/backend/internal/service/order.go +++ b/backend/internal/service/order.go @@ -147,17 +147,21 @@ func (s *OrderService) UpdateStatus(id uint, status string) error { // OpenOrderQuery 开放接口订单查询结果 type OpenOrderQuery struct { - OrderNo string `json:"order_no"` - Status string `json:"status"` - CanShip bool `json:"can_ship"` - CannotShipReason string `json:"cannot_ship_reason,omitempty"` + OrderNo string `json:"order_no"` + Status string `json:"status"` + CanShip bool `json:"can_ship"` + CannotShipReason string `json:"cannot_ship_reason,omitempty"` Product *OpenOrderProduct `json:"product,omitempty"` - BuyerName string `json:"buyer_name"` - Amount float64 `json:"amount"` - ProviderOrderNo string `json:"provider_order_no,omitempty"` - CreatedAt time.Time `json:"created_at"` - ShippedAt *time.Time `json:"shipped_at"` - ShipFailReason string `json:"ship_fail_reason,omitempty"` + BuyerName string `json:"buyer_name"` + Amount float64 `json:"amount"` + ProviderOrderNo string `json:"provider_order_no,omitempty"` + CreatedAt time.Time `json:"created_at"` + ShippedAt *time.Time `json:"shipped_at"` + ShipFailReason string `json:"ship_fail_reason,omitempty"` + GameChannel string `json:"game_channel,omitempty"` + GameUID string `json:"game_uid,omitempty"` + RoleName string `json:"role_name,omitempty"` + PayScore int `json:"pay_score,omitempty"` } type OpenOrderProduct struct { @@ -174,6 +178,10 @@ type ShipNotifyInput struct { ShippedAt *time.Time FailReason string RawPayload string + GameChannel *string + GameUID *string + RoleName *string + PayScore *int } type ShipNotifyResult struct { @@ -215,6 +223,10 @@ func (s *OrderService) QueryOpenOrder(orderNo string) (*OpenOrderQuery, error) { CreatedAt: order.CreatedAt, ShippedAt: order.ShippedAt, ShipFailReason: order.ShipFailReason, + GameChannel: order.GameChannel, + GameUID: order.GameUID, + RoleName: order.RoleName, + PayScore: order.PayScore, } if order.Skin != nil { out.Product = &OpenOrderProduct{ @@ -337,6 +349,19 @@ func (s *OrderService) HandleShipNotify(in ShipNotifyInput) (*ShipNotifyResult, msg = "订单已标记为发货中" } + if in.GameChannel != nil { + updates["game_channel"] = *in.GameChannel + } + if in.GameUID != nil { + updates["game_uid"] = *in.GameUID + } + if in.RoleName != nil { + updates["role_name"] = *in.RoleName + } + if in.PayScore != nil { + updates["pay_score"] = *in.PayScore + } + if err := s.db.Model(&model.Order{}).Where("id = ?", order.ID).Updates(updates).Error; err != nil { return nil, err }