diff --git a/backend/internal/service/delivery.go b/backend/internal/service/delivery.go index c7e34e3..b4933c2 100644 --- a/backend/internal/service/delivery.go +++ b/backend/internal/service/delivery.go @@ -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,