fix(delivery): 提货详情页自动回填 Rock 绑定的游戏角色名与区服

1. 解决提货页历史已交付订单缺失角色名的问题:在 buildDeliveryState 中新增自动回溯机制,若订单 ResultData 缺失角色名或区服,自动从关联的 rock_tokens 表提取 actual_role_name 与 actual_channel;
2. 自动修正并持久化:回填成功后自动修补至 fulfillment_orders.result_data,确保后续无需重复反查,提货页与凭据大图立即可见真实游戏昵称。
This commit is contained in:
yml2213
2026-10-05 19:03:50 +08:00
parent 372a13e86d
commit 5c3fd92738
+29 -2
View File
@@ -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,