package service import ( "encoding/json" "strings" "time" "affiliate_dash/internal/model" "affiliate_dash/internal/pkg/timeutil" ) func buildExistingDeliverySubmitResult(order *model.FulfillmentOrder) *DeliverySubmitResult { if order == nil { return nil } switch normalizeOrderStatus(order) { case model.OrderStatusDelivering, model.OrderStatusDelivered: default: return nil } var resultData map[string]interface{} if json.Valid([]byte(order.ResultData)) { _ = json.Unmarshal([]byte(order.ResultData), &resultData) } providerOrderNo := firstNonEmpty( order.ProviderOrderNo, stringFromMap(resultData, "provider_order_no"), ) message := "订单暂时正在发货中,请稍后查询" status := normalizeOrderStatus(order) if status == model.OrderStatusDelivered { message = "订单已交付" } return &DeliverySubmitResult{ OrderNo: order.OrderNo, Status: status, Message: message, ProviderOrderNo: providerOrderNo, UpstreamOrder: resultData, } } func upstreamDeliverySucceeded(order map[string]interface{}) bool { return strings.EqualFold(stringFromMap(order, "status"), "FINISHED") || strings.EqualFold(stringFromMap(order, "send_status"), "SUCCESS") } func deliverySubmissionInProgress(stage string) bool { return stage == deliveryStageClaimed || stage == deliveryStageQueueCreated } func deliverySubmissionStale(order *model.FulfillmentOrder, now time.Time) bool { if order == nil { return false } startedAtRaw := resultDataString(order.ResultData, "submit_started_at") if startedAtRaw != "" { if startedAt, err := time.Parse(timeutil.APITimeLayout, startedAtRaw); err == nil { return now.Sub(startedAt) >= deliverySubmissionStaleTimeout } } return !order.UpdatedAt.IsZero() && now.Sub(order.UpdatedAt) >= deliverySubmissionStaleTimeout } func optionalUint(value uint) *uint { if value == 0 { return nil } out := value return &out }