fix(delivery): 提货详情页自动回填 Rock 绑定的游戏角色名与区服
1. 解决提货页历史已交付订单缺失角色名的问题:在 buildDeliveryState 中新增自动回溯机制,若订单 ResultData 缺失角色名或区服,自动从关联的 rock_tokens 表提取 actual_role_name 与 actual_channel; 2. 自动修正并持久化:回填成功后自动修补至 fulfillment_orders.result_data,确保后续无需重复反查,提货页与凭据大图立即可见真实游戏昵称。
This commit is contained in:
@@ -895,6 +895,33 @@ func (s *DeliveryService) buildDeliveryState(openOrder *OpenOrderQuery, order *m
|
||||
}
|
||||
}
|
||||
|
||||
roleName := openOrder.RoleName
|
||||
if roleName == "" {
|
||||
roleName = resultDataString(order.ResultData, "role_name")
|
||||
}
|
||||
gameChannel := openOrder.GameChannel
|
||||
if gameChannel == "" {
|
||||
gameChannel = resultDataString(order.ResultData, "game_channel")
|
||||
}
|
||||
// 若角色名或区服为空,尝试从关联的 rock_tokens 表反查并自动回填
|
||||
if (roleName == "" || gameChannel == "") && s.fulfillment != nil && s.fulfillment.db != nil {
|
||||
var rockToken model.RockToken
|
||||
if err := s.fulfillment.db.Where("assigned_order_no = ?", order.OrderNo).First(&rockToken).Error; err == nil {
|
||||
patches := map[string]interface{}{}
|
||||
if roleName == "" && rockToken.ActualRoleName != "" {
|
||||
roleName = rockToken.ActualRoleName
|
||||
patches["role_name"] = roleName
|
||||
}
|
||||
if gameChannel == "" && rockToken.ActualChannel != "" {
|
||||
gameChannel = rockToken.ActualChannel
|
||||
patches["game_channel"] = gameChannel
|
||||
}
|
||||
if len(patches) > 0 {
|
||||
_ = s.persistOrderResultPatch(order, patches)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
info := &DeliveryOrderInfo{
|
||||
OrderNo: openOrder.OrderNo,
|
||||
Status: openOrder.Status,
|
||||
@@ -908,9 +935,9 @@ func (s *DeliveryService) buildDeliveryState(openOrder *OpenOrderQuery, order *m
|
||||
CreatedAt: openOrder.CreatedAt,
|
||||
ShippedAt: openOrder.ShippedAt,
|
||||
ShipFailReason: openOrder.ShipFailReason,
|
||||
GameChannel: openOrder.GameChannel,
|
||||
GameChannel: gameChannel,
|
||||
GameUID: openOrder.GameUID,
|
||||
RoleName: openOrder.RoleName,
|
||||
RoleName: roleName,
|
||||
PayScore: openOrder.PayScore,
|
||||
Data: requestDataMap(order.RequestData),
|
||||
Good: goodData,
|
||||
|
||||
Reference in New Issue
Block a user