fix: 增强顺运宝同步完整性保护 (#58)
This commit is contained in:
+11
-6
@@ -504,30 +504,35 @@ type StockRow struct {
|
||||
}
|
||||
|
||||
// ListPage 按日期范围翻一页货运单列表:POST /am/stock/list。
|
||||
func (c *Client) ListPage(ctx context.Context, dateFrom, dateTo string, start, pageIndex, pageSize int) ([]StockRow, error) {
|
||||
// 返回响应内的 total,供上层核对分页期间总数有没有漂移。
|
||||
func (c *Client) ListPage(ctx context.Context, dateFrom, dateTo string, start, pageIndex, pageSize int) ([]StockRow, int, error) {
|
||||
data, err := c.do(ctx, http.MethodPost, "/am/stock/list", nil,
|
||||
listPayload(dateFrom, dateTo, start, pageIndex, pageSize))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
var wrap struct {
|
||||
List []map[string]any `json:"list"`
|
||||
List []map[string]any `json:"list"`
|
||||
Total *int `json:"total"`
|
||||
}
|
||||
if err := json.Unmarshal(data, &wrap); err != nil {
|
||||
return nil, fmt.Errorf("货运单列表响应格式错误: %w", err)
|
||||
return nil, 0, fmt.Errorf("货运单列表响应格式错误: %w", err)
|
||||
}
|
||||
if wrap.Total == nil || *wrap.Total < 0 {
|
||||
return nil, 0, fmt.Errorf("货运单列表响应缺少合法的 total")
|
||||
}
|
||||
|
||||
rows := make([]StockRow, 0, len(wrap.List))
|
||||
for _, raw := range wrap.List {
|
||||
id, ok := toInt64(raw["id"])
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("货运单列表里有一行缺少合法的 id: %v", raw)
|
||||
return nil, 0, fmt.Errorf("货运单列表里有一行缺少合法的 id: %v", raw)
|
||||
}
|
||||
code, _ := raw["code"].(string)
|
||||
rows = append(rows, StockRow{ID: id, Code: code, Raw: raw})
|
||||
}
|
||||
return rows, nil
|
||||
return rows, *wrap.Total, nil
|
||||
}
|
||||
|
||||
// ---------- 货运单明细 ----------
|
||||
|
||||
Reference in New Issue
Block a user