发货结果通知接口新增 game_channel、game_uid、role_name、pay_score 字段

This commit is contained in:
yml2213
2026-07-24 15:15:19 +08:00
parent f9dc80e563
commit 73047b74df
3 changed files with 55 additions and 16 deletions
+15 -6
View File
@@ -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",
+5
View File
@@ -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"` // 消耗积分
}
// 订单状态
+35 -10
View File
@@ -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
}