From 5c3fd927382f98e96e90463a94a41b33c85fbd16 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Mon, 5 Oct 2026 19:03:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(delivery):=20=E6=8F=90=E8=B4=A7=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5=E8=87=AA=E5=8A=A8=E5=9B=9E=E5=A1=AB=20Rock?= =?UTF-8?q?=20=E7=BB=91=E5=AE=9A=E7=9A=84=E6=B8=B8=E6=88=8F=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E5=90=8D=E4=B8=8E=E5=8C=BA=E6=9C=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 解决提货页历史已交付订单缺失角色名的问题:在 buildDeliveryState 中新增自动回溯机制,若订单 ResultData 缺失角色名或区服,自动从关联的 rock_tokens 表提取 actual_role_name 与 actual_channel; 2. 自动修正并持久化:回填成功后自动修补至 fulfillment_orders.result_data,确保后续无需重复反查,提货页与凭据大图立即可见真实游戏昵称。 --- backend/internal/service/delivery.go | 31 ++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) 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,