发货结果通知接口新增 game_channel、game_uid、role_name、pay_score 字段
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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"` // 消耗积分
|
||||
}
|
||||
|
||||
// 订单状态
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user