-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathsemi.online.order.logistics.service.provider.go
84 lines (76 loc) · 3.55 KB
/
semi.online.order.logistics.service.provider.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package temu
import (
"context"
validation "github.com/go-ozzo/ozzo-validation/v4"
"github.com/hiscaler/temu-go/entity"
"github.com/hiscaler/temu-go/normal"
"gopkg.in/guregu/null.v4"
)
// 物流服务提供商服务
type semiOnlineOrderLogisticsServiceProviderService service
type SemiOnlineOrderLogisticsServiceProviderQueryParams struct {
WarehouseId string `json:"warehouseId"` // 仓库 id
OrderSnList []string `json:"orderSnList"` // O 单(orderSn 非 parentOrderSn)列表(至少包含一个 O 单号)
Weight string `json:"weight"` // 重量(默认 2 位小数,美国lb,其他国家kg)
WeightUnit string `json:"weightUnit"` // 重量单位
Length string `json:"length,omitempty"` // 包裹长度(默认 2 位小数)
Width string `json:"width"` // 包裹宽度(默认 2 位小数)
Height string `json:"height"` // 包裹高度(默认 2 位小数)
DimensionUnit string `json:"dimensionUnit"` // 尺寸单位(美国 in,其他国家 cm)
SignatureOnDelivery null.Bool `json:"signatureOnDelivery,omitempty"` // 是否需要签名签收服务
}
func (m SemiOnlineOrderLogisticsServiceProviderQueryParams) validate() error {
return validation.ValidateStruct(&m,
validation.Field(&m.WarehouseId, validation.Required.Error("仓库不能为空")),
validation.Field(&m.OrderSnList, validation.Required.Error("订单号列表不能为空")),
validation.Field(&m.Weight, validation.Required.Error("重量不能为空")),
validation.Field(&m.WeightUnit,
validation.Required.Error("重量单位不能为空"),
validation.In("lb", "kg").Error("无效的重量单位,有效值为美国 lb,其他国家 kg"),
),
validation.Field(&m.Width, validation.Required.Error("包裹宽度不能为空")),
validation.Field(&m.Height, validation.Required.Error("包裹高度不能为空")),
validation.Field(&m.DimensionUnit,
validation.Required.Error("尺寸单位不能为空"),
validation.In("in", "cm").Error("无效的尺寸单位,有效值为美国 in,其他国家 cm"),
),
)
}
// Query 查询可用物流服务接口(bg.logistics.shippingservices.get)
// https://seller.kuajingmaihuo.com/sop/view/144659541206936016#d0sexY
func (s semiOnlineOrderLogisticsServiceProviderService) Query(ctx context.Context, params SemiOnlineOrderLogisticsServiceProviderQueryParams) ([]entity.SemiOnlineOrderLogisticsChannel, error) {
if err := params.validate(); err != nil {
return nil, invalidInput(err)
}
var result = struct {
normal.Response
Result struct {
OnlineChannelDtoList []entity.SemiOnlineOrderLogisticsChannel `json:"onlineChannelDtoList"` // 可使用的渠道列表
} `json:"result"`
}{}
resp, err := s.httpClient.R().
SetContext(ctx).
SetResult(&result).
Post("bg.logistics.shippingservices.get")
if err = recheckError(resp, result.Response, err); err != nil {
return nil, err
}
items := result.Result.OnlineChannelDtoList
for i, item := range items {
v, e := item.ParseEstimatedAmount()
if e != nil {
item.AmountError = null.StringFrom(e.Error())
} else {
item.Amount = null.FloatFrom(v)
}
d1, d2, e := item.DeliveryDays()
if e != nil {
item.DeliveryDaysError = null.StringFrom(e.Error())
} else {
item.DeliveryMinDays = null.IntFrom(int64(d1))
item.DeliveryMaxDays = null.IntFrom(int64(d2))
}
items[i] = item
}
return items, nil
}