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 }