对照生产抓包修复发货链路:BFF 地址、上游单号取值与直判交付

- DELIVERY_BFF_BASE_URL 默认改为 https://www.jxya.top/bff(生产实际路径,非 bff-stg)
- provider_order_no 取值优先级调整为 order_no/_id/id/order_sn:抓包确认 order_sn 为平台单号回显,上游真实单号是 _id
- 上游创建订单响应 status=FINISHED 或 send_status=SUCCESS 时订单直接置为 delivered,无需等待 ship-notify
- 同步更新单测(mock 上游返回 _id/order_sn/FINISHED/SUCCESS)
This commit is contained in:
yml2213
2026-08-03 13:06:43 +08:00
parent 8dc2a4077a
commit 6eb05b322c
5 changed files with 27 additions and 13 deletions
+15 -4
View File
@@ -22,7 +22,7 @@ import (
"gorm.io/gorm/clause"
)
const defaultDeliveryBFFBaseURL = "https://www.jxya.top/bff-stg"
const defaultDeliveryBFFBaseURL = "https://www.jxya.top/bff"
// 发货提交阶段,持久化在 result_data.provider_order_stage 中,供排障与补偿扫描区分处理。
const (
@@ -339,9 +339,9 @@ func (s *DeliveryService) submit(orderNo, gameAccount, bindUUID string, apiClien
}
providerOrderNo := firstNonEmpty(
stringFromMap(upstreamOrder, "order_no"),
stringFromMap(upstreamOrder, "order_sn"),
stringFromMap(upstreamOrder, "_id"),
stringFromMap(upstreamOrder, "id"),
stringFromMap(upstreamOrder, "order_sn"),
queueOrderID,
)
resultData := mergeResultData(claimed.ResultData, map[string]interface{}{
@@ -353,11 +353,17 @@ func (s *DeliveryService) submit(orderNo, gameAccount, bindUUID string, apiClien
"game_channel": gameChannelText(boundAccount),
"upstream_order": upstreamOrder,
})
nextStatus := model.OrderStatusDelivering
message := "已提交上游发货,等待发货结果回传"
if upstreamDeliverySucceeded(upstreamOrder) {
nextStatus = model.OrderStatusDelivered
message = "上游已返回发货成功"
}
updated, err := s.fulfillment.UpdateFulfillment(FulfillmentUpdateInput{
MerchantID: order.MerchantID,
APIClientID: apiClientID,
OrderNo: order.OrderNo,
Status: model.OrderStatusDelivering,
Status: nextStatus,
ProviderOrderNo: providerOrderNo,
ResultData: resultData,
})
@@ -367,7 +373,7 @@ func (s *DeliveryService) submit(orderNo, gameAccount, bindUUID string, apiClien
return &DeliverySubmitResult{
OrderNo: updated.OrderNo,
Status: normalizeOrderStatus(updated),
Message: "已提交上游发货,等待发货结果回传",
Message: message,
ProviderOrderNo: providerOrderNo,
GameAccount: boundAccount,
UpstreamOrder: upstreamOrder,
@@ -574,6 +580,11 @@ func buildExistingDeliverySubmitResult(order *model.FulfillmentOrder) *DeliveryS
}
}
func upstreamDeliverySucceeded(order map[string]interface{}) bool {
return strings.EqualFold(stringFromMap(order, "status"), "FINISHED") ||
strings.EqualFold(stringFromMap(order, "send_status"), "SUCCESS")
}
func optionalUint(value uint) *uint {
if value == 0 {
return nil