拆分 service 与前端大文件,修复 CORS 配置与格式问题
- 后端 internal/service 按职责拆分: fulfillment.go(1397→527)拆出 wallet/timeout/data/order/query/dashboard/shipnotify delivery.go(1124→801)拆出 upstream/link/state/helpers merchant.go(855→251)拆出 member/product/api_client/catalog/helpers - 前端 MerchantCenter.tsx(1327→606)拆出 merchantCenterTabs/merchantCenterUtils - docker-compose backend 透传 CORS_ALLOWED_ORIGINS - CORS 白名单实现(config/router/README/.env.example 配套) - 修复 gofmt 与文件尾部多余空行
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user