lingxingapi 1.1.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lingxingapi/__init__.py +7 -0
- lingxingapi/ads/__init__.py +0 -0
- lingxingapi/ads/api.py +5946 -0
- lingxingapi/ads/param.py +192 -0
- lingxingapi/ads/route.py +134 -0
- lingxingapi/ads/schema.py +2615 -0
- lingxingapi/api.py +557 -0
- lingxingapi/base/__init__.py +0 -0
- lingxingapi/base/api.py +568 -0
- lingxingapi/base/param.py +59 -0
- lingxingapi/base/route.py +11 -0
- lingxingapi/base/schema.py +198 -0
- lingxingapi/basic/__init__.py +0 -0
- lingxingapi/basic/api.py +466 -0
- lingxingapi/basic/param.py +72 -0
- lingxingapi/basic/route.py +20 -0
- lingxingapi/basic/schema.py +218 -0
- lingxingapi/errors.py +152 -0
- lingxingapi/fba/__init__.py +0 -0
- lingxingapi/fba/api.py +1691 -0
- lingxingapi/fba/param.py +250 -0
- lingxingapi/fba/route.py +30 -0
- lingxingapi/fba/schema.py +987 -0
- lingxingapi/fields.py +50 -0
- lingxingapi/finance/__init__.py +0 -0
- lingxingapi/finance/api.py +3091 -0
- lingxingapi/finance/param.py +616 -0
- lingxingapi/finance/route.py +44 -0
- lingxingapi/finance/schema.py +1243 -0
- lingxingapi/product/__init__.py +0 -0
- lingxingapi/product/api.py +2643 -0
- lingxingapi/product/param.py +934 -0
- lingxingapi/product/route.py +49 -0
- lingxingapi/product/schema.py +1004 -0
- lingxingapi/purchase/__init__.py +0 -0
- lingxingapi/purchase/api.py +496 -0
- lingxingapi/purchase/param.py +126 -0
- lingxingapi/purchase/route.py +11 -0
- lingxingapi/purchase/schema.py +215 -0
- lingxingapi/sales/__init__.py +0 -0
- lingxingapi/sales/api.py +3200 -0
- lingxingapi/sales/param.py +723 -0
- lingxingapi/sales/route.py +70 -0
- lingxingapi/sales/schema.py +1718 -0
- lingxingapi/source/__init__.py +0 -0
- lingxingapi/source/api.py +1799 -0
- lingxingapi/source/param.py +176 -0
- lingxingapi/source/route.py +38 -0
- lingxingapi/source/schema.py +1011 -0
- lingxingapi/tools/__init__.py +0 -0
- lingxingapi/tools/api.py +291 -0
- lingxingapi/tools/param.py +73 -0
- lingxingapi/tools/route.py +8 -0
- lingxingapi/tools/schema.py +169 -0
- lingxingapi/utils.py +456 -0
- lingxingapi/warehourse/__init__.py +0 -0
- lingxingapi/warehourse/api.py +1778 -0
- lingxingapi/warehourse/param.py +506 -0
- lingxingapi/warehourse/route.py +28 -0
- lingxingapi/warehourse/schema.py +926 -0
- lingxingapi-1.1.4.dist-info/METADATA +73 -0
- lingxingapi-1.1.4.dist-info/RECORD +65 -0
- lingxingapi-1.1.4.dist-info/WHEEL +5 -0
- lingxingapi-1.1.4.dist-info/licenses/LICENSE +22 -0
- lingxingapi-1.1.4.dist-info/top_level.txt +1 -0
|
File without changes
|
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-c
|
|
2
|
+
import datetime
|
|
3
|
+
from lingxingapi import errors
|
|
4
|
+
from lingxingapi.base.api import BaseAPI
|
|
5
|
+
from lingxingapi.base import param as base_param
|
|
6
|
+
from lingxingapi.purchase import param, route, schema
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# API ------------------------------------------------------------------------------------------------------------------
|
|
10
|
+
class PurchaseAPI(BaseAPI):
|
|
11
|
+
"""领星API `采购数据` 接口
|
|
12
|
+
|
|
13
|
+
## Notice
|
|
14
|
+
请勿直接实例化此类
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
async def Suppliers(
|
|
18
|
+
self,
|
|
19
|
+
*,
|
|
20
|
+
offset: int | None = None,
|
|
21
|
+
length: int | None = None,
|
|
22
|
+
) -> schema.Suppliers:
|
|
23
|
+
"""查询产品供应商
|
|
24
|
+
|
|
25
|
+
## Docs
|
|
26
|
+
- 采购: [查询供应商列表](https://apidoc.lingxing.com/#/docs/Purchase/Supplier)
|
|
27
|
+
|
|
28
|
+
:param offset `<'int'>`: 分页偏移量, 默认 `None` (使用: 0)
|
|
29
|
+
:param length `<'int'>`: 分页长度, 最大值5000, 默认 `None` (使用: 1000)
|
|
30
|
+
:returns `<'Suppliers'>`: 返回查询到的产品供应商列表
|
|
31
|
+
```python
|
|
32
|
+
{
|
|
33
|
+
# 状态码
|
|
34
|
+
"code": 0,
|
|
35
|
+
# 提示信息
|
|
36
|
+
"message": "success",
|
|
37
|
+
# 错误信息
|
|
38
|
+
"errors": [],
|
|
39
|
+
# 请求ID
|
|
40
|
+
"request_id": "44DAC5AE-7D76-9054-2431-0EF7E357CFE5",
|
|
41
|
+
# 响应时间
|
|
42
|
+
"response_time": "2025-08-13 19:23:04",
|
|
43
|
+
# 响应数据量
|
|
44
|
+
"response_count": 2,
|
|
45
|
+
# 总数据量
|
|
46
|
+
"total_count": 2,
|
|
47
|
+
# 响应数据
|
|
48
|
+
"data": [
|
|
49
|
+
{
|
|
50
|
+
# 供应商ID
|
|
51
|
+
"supplier_id": 1,
|
|
52
|
+
# 供应商名称
|
|
53
|
+
"supplier_name": "遵*******",
|
|
54
|
+
# 供应商编码
|
|
55
|
+
"supplier_code": "SU******",
|
|
56
|
+
# 供应商是否已删除 (0: 否, 1: 是)
|
|
57
|
+
"deleted": 0,
|
|
58
|
+
# 供应商等级 [原字段 'level_text']
|
|
59
|
+
"supplier_level": "★",
|
|
60
|
+
# 供应商员工人数等级 [原字段 'employees']
|
|
61
|
+
# (1: 少于50, 2: 50-150, 3: 150-500, 4: 500-1000, 5: 1000+)
|
|
62
|
+
"employees_level": 1,
|
|
63
|
+
# 供应商员工人数描述 [原字段 'employees_text']
|
|
64
|
+
"employees_desc": "少于50人",
|
|
65
|
+
# 供应商网址 [原字段 'url']
|
|
66
|
+
"website_url": "https://www.example.com",
|
|
67
|
+
# 供应商联系人姓名
|
|
68
|
+
"contact_person": "",
|
|
69
|
+
# 供应商联系电话 [原字段 'contact_number']
|
|
70
|
+
"phone": "",
|
|
71
|
+
# 供应商联系邮箱
|
|
72
|
+
"email": "",
|
|
73
|
+
# 供应商联系QQ
|
|
74
|
+
"qq": "",
|
|
75
|
+
# 供应商传真
|
|
76
|
+
"fax": "",
|
|
77
|
+
# 供应商地址 [原字段 'address_full']
|
|
78
|
+
"address": "",
|
|
79
|
+
# 供应商开户银行 [原字段 'open_bank'
|
|
80
|
+
"bank": "",
|
|
81
|
+
# 供应商银行账号户名 [原字段 'account_name']
|
|
82
|
+
"bank_account_name": "",
|
|
83
|
+
# 供应商银行账号卡好 [原字段 'bank_account_number']
|
|
84
|
+
"bank_account_number": "",
|
|
85
|
+
# 供应商备注 [原字段 'remark']
|
|
86
|
+
"note": "",
|
|
87
|
+
# 采购跟进人员ID列表 [原字段 'purchaser']
|
|
88
|
+
"purchase_staff_ids": [1*****],
|
|
89
|
+
# 采购合同名称 [原字段 'pc_name']
|
|
90
|
+
"purchase_contract": "",
|
|
91
|
+
# 采购支付方式 [原字段 'payment_method_text']
|
|
92
|
+
"payment_method": "",
|
|
93
|
+
# 采购结算方式 [原字段 'settlement_method_text']
|
|
94
|
+
"settlement_method": "月结",
|
|
95
|
+
# 采购结算描述
|
|
96
|
+
"settlement_desc": "",
|
|
97
|
+
|
|
98
|
+
},
|
|
99
|
+
...
|
|
100
|
+
],
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
"""
|
|
104
|
+
url = route.SUPPLIERS
|
|
105
|
+
# 解析并验证参数
|
|
106
|
+
args = {"offset": offset, "length": length}
|
|
107
|
+
try:
|
|
108
|
+
p = base_param.PageOffestAndLength.model_validate(args)
|
|
109
|
+
except Exception as err:
|
|
110
|
+
raise errors.InvalidParametersError(err, url, args) from err
|
|
111
|
+
|
|
112
|
+
# 发送请求
|
|
113
|
+
data = await self._request_with_sign("POST", url, body=p.model_dump_params())
|
|
114
|
+
return schema.Suppliers.model_validate(data)
|
|
115
|
+
|
|
116
|
+
async def EditSupplier(
|
|
117
|
+
self,
|
|
118
|
+
supplier_name: str,
|
|
119
|
+
supplier_id: int | None = None,
|
|
120
|
+
*,
|
|
121
|
+
supplier_code: str | None = None,
|
|
122
|
+
supplier_level: int | None = None,
|
|
123
|
+
employees_level: int | None = None,
|
|
124
|
+
website_url: str | None = None,
|
|
125
|
+
contact_person: str | None = None,
|
|
126
|
+
phone: str | None = None,
|
|
127
|
+
email: str | None = None,
|
|
128
|
+
qq: str | None = None,
|
|
129
|
+
fax: str | None = None,
|
|
130
|
+
address: str | None = None,
|
|
131
|
+
bank: str | None = None,
|
|
132
|
+
bank_account_name: str | None = None,
|
|
133
|
+
bank_account_number: str | None = None,
|
|
134
|
+
note: str | None = None,
|
|
135
|
+
purchase_staff_ids: int | list[int] | None = None,
|
|
136
|
+
payment_method: int | None = None,
|
|
137
|
+
settlement_method: int | None = None,
|
|
138
|
+
settlement_desc: str | None = None,
|
|
139
|
+
) -> schema.EditSupplierResult:
|
|
140
|
+
"""添加/修改供应商
|
|
141
|
+
|
|
142
|
+
## Docs
|
|
143
|
+
- 采购: [添加/修改供应商](https://apidoc.lingxing.com/#/docs/Purchase/SupplierEdit)
|
|
144
|
+
|
|
145
|
+
## Notice
|
|
146
|
+
- 默认参数 `None` 有些表示留空或不修改, 有些表示重置设置, 具体请参考参数说明
|
|
147
|
+
|
|
148
|
+
:param supplier_name `<'str'>`: 供应商名称,
|
|
149
|
+
若是已存在的供应商, 在传入`supplier_id`的情况下, 可以进行修改
|
|
150
|
+
:param supplier_id `<'int/None'>`: 供应商ID,
|
|
151
|
+
默认 `None`, 如果是新建供应商则不需要传入, 若是编辑供应商信息则必填
|
|
152
|
+
:param supplier_code `<'str/None'>`: 供应商编码,
|
|
153
|
+
默认 `None` (系统自动生成), 不支持后续修改
|
|
154
|
+
:param supplier_level `<'int/None'>`: 供应商等级, 支持 1-5 级,
|
|
155
|
+
默认 `None` 表示默认或重置为空
|
|
156
|
+
:param employees_level `<'int/None'>`: 供应商员工数, 支持 1-5 级,
|
|
157
|
+
默认 `None` 表示默认或重置为空
|
|
158
|
+
|
|
159
|
+
- `1`: 少于50人
|
|
160
|
+
- `2`: 50-150人
|
|
161
|
+
- `3`: 150-500人
|
|
162
|
+
- `4`: 500-1000人
|
|
163
|
+
- `5`: 1000+人
|
|
164
|
+
|
|
165
|
+
:param website_url `<'str/None'>`: 供应商网址,
|
|
166
|
+
默认 `None` 表示留空或不修改, 传入空字符串清除设置
|
|
167
|
+
:param contact_person `<'str/None'>`: 供应商联系人姓名,
|
|
168
|
+
默认 `None` 表示留空或不修改, 传入空字符串清除设置
|
|
169
|
+
:param phone `<'str/None'>`: 供应商联系电话,
|
|
170
|
+
默认 `None` 表示留空或不修改, 传入空字符串清除设置
|
|
171
|
+
:param email `<'str/None'>`: 供应商联系邮箱,
|
|
172
|
+
默认 `None` 表示留空或不修改, 传入空字符串清除设置
|
|
173
|
+
:param qq `<'str/None'>`: 供应商联系QQ,
|
|
174
|
+
默认 `None` 表示留空或不修改, 传入空字符串清除设置
|
|
175
|
+
:param fax `<'str/None'>`: 供应商传真,
|
|
176
|
+
默认 `None` 表示留空或不修改, 传入空字符串清除设置
|
|
177
|
+
:param address `<'str/None'>`: 供应商地址,
|
|
178
|
+
默认 `None` 表示留空或不修改, 传入空字符串清除设置
|
|
179
|
+
:param bank `<'str/None'>`: 供应商开户银行,
|
|
180
|
+
默认 `None` 表示留空或不修改, 不支持清除设置
|
|
181
|
+
:param bank_account_name `<'str/None'>`: 供应商银行账号户名,
|
|
182
|
+
默认 `None` 表示留空或不修改, 不支持清除设置
|
|
183
|
+
:param bank_account_number `<'str/None'>`: 供应商银行账号卡号,
|
|
184
|
+
默认 `None` 表示留空或不修改, 不支持清除设置
|
|
185
|
+
:param note `<'str/None'>`: 供应商备注,
|
|
186
|
+
默认 `None` 表示留空或不修改, 传入空字符串清除设置
|
|
187
|
+
:param purchase_staff_ids `<'int/list[int]/None'>`: 采购跟进人员ID,
|
|
188
|
+
默认 `None` 表示留空或不修改, 不支持清除设置
|
|
189
|
+
:param payment_method `<'int/None'>`: 采购支付方式,
|
|
190
|
+
默认 `None` 表示默认或重置为空
|
|
191
|
+
|
|
192
|
+
- `1`: 网银转账
|
|
193
|
+
- `2`: 网上支付
|
|
194
|
+
|
|
195
|
+
:param settlement_method `<'int/None'>`: 采购结算方式,
|
|
196
|
+
默认 `None` 表示默认或重置为 `8: 月结`
|
|
197
|
+
|
|
198
|
+
- `7`: 现结
|
|
199
|
+
- `8`: 月结
|
|
200
|
+
|
|
201
|
+
:param settlement_desc `<'str/None'>`: 采购结算描述,
|
|
202
|
+
默认 `None` 表示留空或不修改, 传入空字符串清除设置
|
|
203
|
+
:returns `<'EditSupplierResult'>`: 返回编辑供应商结果
|
|
204
|
+
```python
|
|
205
|
+
{
|
|
206
|
+
# 状态码
|
|
207
|
+
"code": 0,
|
|
208
|
+
# 提示信息
|
|
209
|
+
"message": "success",
|
|
210
|
+
# 错误信息
|
|
211
|
+
"errors": [],
|
|
212
|
+
# 请求ID
|
|
213
|
+
"request_id": "44DAC5AE-7D76-9054-2431-0EF7E357CFE5",
|
|
214
|
+
# 响应时间
|
|
215
|
+
"response_time": "2025-08-13 19:23:04",
|
|
216
|
+
# 响应结果
|
|
217
|
+
"data": {
|
|
218
|
+
# 供应商ID [原字段 'erp_supplier_id']
|
|
219
|
+
"supplier_id": 1*****,
|
|
220
|
+
},
|
|
221
|
+
}
|
|
222
|
+
"""
|
|
223
|
+
url = route.EDIT_SUPPLIER
|
|
224
|
+
# 解析并验证参数
|
|
225
|
+
args = {
|
|
226
|
+
"supplier_name": supplier_name,
|
|
227
|
+
"supplier_id": supplier_id,
|
|
228
|
+
"supplier_code": supplier_code,
|
|
229
|
+
"supplier_level": supplier_level,
|
|
230
|
+
"employees_level": employees_level,
|
|
231
|
+
"website_url": website_url,
|
|
232
|
+
"contact_person": contact_person,
|
|
233
|
+
"phone": phone,
|
|
234
|
+
"email": email,
|
|
235
|
+
"qq": qq,
|
|
236
|
+
"fax": fax,
|
|
237
|
+
"address": address,
|
|
238
|
+
"bank": bank,
|
|
239
|
+
"bank_account_name": bank_account_name,
|
|
240
|
+
"bank_account_number": bank_account_number,
|
|
241
|
+
"note": note,
|
|
242
|
+
"purchase_staff_ids": purchase_staff_ids,
|
|
243
|
+
"payment_method": payment_method,
|
|
244
|
+
"settlement_method": 8 if settlement_method is None else settlement_method,
|
|
245
|
+
"settlement_desc": settlement_desc,
|
|
246
|
+
}
|
|
247
|
+
try:
|
|
248
|
+
p = param.EditSupplier.model_validate(args)
|
|
249
|
+
except Exception as err:
|
|
250
|
+
raise errors.InvalidParametersError(err, url, args) from err
|
|
251
|
+
|
|
252
|
+
# 发送请求
|
|
253
|
+
data = await self._request_with_sign("POST", url, body=p.model_dump_params())
|
|
254
|
+
return schema.EditSupplierResult.model_validate(data)
|
|
255
|
+
|
|
256
|
+
async def Purchasers(
|
|
257
|
+
self,
|
|
258
|
+
*,
|
|
259
|
+
offset: int | None = None,
|
|
260
|
+
length: int | None = None,
|
|
261
|
+
) -> schema.Purchasers:
|
|
262
|
+
"""查询采购方主体
|
|
263
|
+
|
|
264
|
+
## Docs
|
|
265
|
+
- 采购: [查询采购方列表](https://apidoc.lingxing.com/#/docs/Purchase/Purchaser)
|
|
266
|
+
|
|
267
|
+
:param offset `<'int'>`: 分页偏移量, 默认 `None` (使用: 0)
|
|
268
|
+
:param length `<'int'>`: 分页长度, 最大值1000, 默认 `None` (使用: 500)
|
|
269
|
+
:returns `<'Purchasers'>`: 返回查询到的采购跟进人员列表
|
|
270
|
+
```python
|
|
271
|
+
{
|
|
272
|
+
# 状态码
|
|
273
|
+
"code": 0,
|
|
274
|
+
# 提示信息
|
|
275
|
+
"message": "success",
|
|
276
|
+
# 错误信息
|
|
277
|
+
"errors": [],
|
|
278
|
+
# 请求ID
|
|
279
|
+
"request_id": "44DAC5AE-7D76-9054-2431-0EF7E357CFE5",
|
|
280
|
+
# 响应时间
|
|
281
|
+
"response_time": "2025-08-13 19:23:04",
|
|
282
|
+
# 响应数据量
|
|
283
|
+
"response_count": 2,
|
|
284
|
+
# 总数据量
|
|
285
|
+
"total_count": 2,
|
|
286
|
+
# 响应数据
|
|
287
|
+
"data": [
|
|
288
|
+
{
|
|
289
|
+
# 采购方主体ID
|
|
290
|
+
"purchaser_id": 217,
|
|
291
|
+
# 采购方主体名称 [原字段 'name']
|
|
292
|
+
"purhcaser_name": "采购公司",
|
|
293
|
+
# 采购方主体联系人 [原字段 'contacter']
|
|
294
|
+
"contact_person": "白小白",
|
|
295
|
+
# 采购方主体联系电话 [原字段 'contact_phone']
|
|
296
|
+
"phone": "123456789",
|
|
297
|
+
# 采购方主体联系邮箱
|
|
298
|
+
"email": "123456789@qq.com",
|
|
299
|
+
# 采购方主体地址
|
|
300
|
+
"address": "中国",
|
|
301
|
+
},
|
|
302
|
+
...
|
|
303
|
+
],
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
"""
|
|
307
|
+
url = route.PURCHASERS
|
|
308
|
+
# 解析并验证参数
|
|
309
|
+
args = {"offset": offset, "length": length}
|
|
310
|
+
try:
|
|
311
|
+
p = base_param.PageOffestAndLength.model_validate(args)
|
|
312
|
+
except Exception as err:
|
|
313
|
+
raise errors.InvalidParametersError(err, url, args) from err
|
|
314
|
+
|
|
315
|
+
# 发送请求
|
|
316
|
+
data = await self._request_with_sign("POST", url, body=p.model_dump_params())
|
|
317
|
+
return schema.Purchasers.model_validate(data)
|
|
318
|
+
|
|
319
|
+
async def PurchasePlans(
|
|
320
|
+
self,
|
|
321
|
+
start_date: str | datetime.date | datetime.datetime,
|
|
322
|
+
end_date: str | datetime.date | datetime.datetime,
|
|
323
|
+
date_type: int,
|
|
324
|
+
*,
|
|
325
|
+
plan_ids: str | list[str] | None = None,
|
|
326
|
+
status: int | list[int] | None = None,
|
|
327
|
+
is_bundled: int | None = None,
|
|
328
|
+
is_process_plan_linked: int | None = None,
|
|
329
|
+
sids: int | list[int] | None = None,
|
|
330
|
+
offset: int | None = None,
|
|
331
|
+
length: int | None = None,
|
|
332
|
+
) -> schema.PurchasePlans:
|
|
333
|
+
"""查询采购计划
|
|
334
|
+
|
|
335
|
+
## Docs
|
|
336
|
+
- 采购: [查询采购计划列表](https://apidoc.lingxing.com/#/docs/Purchase/getPurchasePlans)
|
|
337
|
+
|
|
338
|
+
:param start_date `<'str/date/datetime'>`: 查询开始日期, 闭区间, 格式为 "YYYY-MM-DD"
|
|
339
|
+
:param end_date `<'str/date/datetime'>`: 查询结束日期, 闭区间, 格式为 "YYYY-MM-DD"
|
|
340
|
+
:param date_type `<'int'>`: 查询日期类型, 可选值:
|
|
341
|
+
|
|
342
|
+
- `1`: 创建时间
|
|
343
|
+
- `2`: 预计到货日期
|
|
344
|
+
- `3`: 更新时间
|
|
345
|
+
|
|
346
|
+
:param plan_ids `<'str/list[str]/None'>`: 采购计划单号列表, 默认 `None` (查询所有)
|
|
347
|
+
:param status `<'int/list[int]/None'>`: 采购计划状态列表, 默认 `None` (查询所有)
|
|
348
|
+
|
|
349
|
+
- `2`: 待采购
|
|
350
|
+
- `-2`: 已完成
|
|
351
|
+
- `121`: 待审批
|
|
352
|
+
- `122`: 已驳回
|
|
353
|
+
- `-3` 或 `124`: 已作废
|
|
354
|
+
|
|
355
|
+
:param is_bundled `<'int/None'>`: 是否为捆绑产品 (0: 否, 1: 是), 默认 `None` (查询所有)
|
|
356
|
+
:param is_process_plan_linked `<'int/None'>`: 是否关联加工计划 (0: 否, 1: 是), 默认 `None` (查询所有)
|
|
357
|
+
:param sids `<'int/list[int]/None'>`: 领星店铺ID列表, 默认 `None` (查询所有)
|
|
358
|
+
:param offset `<'int/None'>`: 分页偏移量, 默认 `None` (使用: 0)
|
|
359
|
+
:param length `<'int/None'>`: 分页长度, 最大值500, 默认 `None` (使用: 500)
|
|
360
|
+
:returns `<'PurchasePlans'>`: 返回查询到的采购计划列表
|
|
361
|
+
```python
|
|
362
|
+
{
|
|
363
|
+
# 状态码
|
|
364
|
+
"code": 0,
|
|
365
|
+
# 提示信息
|
|
366
|
+
"message": "success",
|
|
367
|
+
# 错误信息
|
|
368
|
+
"errors": [],
|
|
369
|
+
# 请求ID
|
|
370
|
+
"request_id": "44DAC5AE-7D76-9054-2431-0EF7E357CFE5",
|
|
371
|
+
# 响应时间
|
|
372
|
+
"response_time": "2025-08-13 19:23:04",
|
|
373
|
+
# 响应数据量
|
|
374
|
+
"response_count": 2,
|
|
375
|
+
# 总数据量
|
|
376
|
+
"total_count": 2,
|
|
377
|
+
# 响应数据
|
|
378
|
+
"data": [
|
|
379
|
+
{
|
|
380
|
+
# 采购计划ID [原字段 'group_id']
|
|
381
|
+
"plan_id": 4*****,
|
|
382
|
+
# 采购计划单号 [原字段 'plan_sn']
|
|
383
|
+
"plan_number": "PP*********",
|
|
384
|
+
# 采购计划批次号 [原字段 'ppg_sn']
|
|
385
|
+
"plan_batch_number": "PPG*********",
|
|
386
|
+
# 采购产品领星店铺ID
|
|
387
|
+
"sid": 0,
|
|
388
|
+
# 采购产品的店铺名称
|
|
389
|
+
"seller_name": "",
|
|
390
|
+
# 采购产品销售国家 [原字段 'marketplace']
|
|
391
|
+
"country": "",
|
|
392
|
+
# 亚马逊SKU列表 [原字段 'msku']
|
|
393
|
+
"mskus": [],
|
|
394
|
+
# 本地产品SKU [原字段 'sku']
|
|
395
|
+
"lsku": "SKU********",
|
|
396
|
+
# 亚马逊FNSKU
|
|
397
|
+
"fnsku": "",
|
|
398
|
+
# 多属性产品编码
|
|
399
|
+
"spu": "SPU********",
|
|
400
|
+
# 多属性产品名称
|
|
401
|
+
"spu_name": "P********",
|
|
402
|
+
# 领星产品ID
|
|
403
|
+
"product_id": 4*****,
|
|
404
|
+
# 本地产品名称
|
|
405
|
+
"product_name": "P********",
|
|
406
|
+
# 多属性产品属性列表 [原字段 'attribute']
|
|
407
|
+
"attributes": [
|
|
408
|
+
{
|
|
409
|
+
# 属性ID
|
|
410
|
+
"attr_id": 1***,
|
|
411
|
+
# 属性名称
|
|
412
|
+
"attr_name": "属性名",
|
|
413
|
+
# 属性值
|
|
414
|
+
"attr_value": "属性值",
|
|
415
|
+
}
|
|
416
|
+
],
|
|
417
|
+
# 是否是捆绑产品 [原字段 'is_combo']
|
|
418
|
+
"is_bundled": 0,
|
|
419
|
+
# 是否是辅料 [原字段 'is_aux']
|
|
420
|
+
"is_auxiliary_material": 0,
|
|
421
|
+
# 产品图片链接 [原字段 'pic_url']
|
|
422
|
+
"image_url": "",
|
|
423
|
+
# 采购产品备注 [原字段 'remark']
|
|
424
|
+
"product_note": "产品备注",
|
|
425
|
+
# 采购数量 [原字段 'quantity_plan']
|
|
426
|
+
"purchase_qty": 1,
|
|
427
|
+
# 采购箱子数量 [原字段 'cg_box_pcs']
|
|
428
|
+
"pruchase_box_qty": 1,
|
|
429
|
+
# 供应商ID
|
|
430
|
+
"supplier_id": 0,
|
|
431
|
+
# 供应商名称
|
|
432
|
+
"supplier_name": "",
|
|
433
|
+
# 仓库ID [原字段 'wid']
|
|
434
|
+
"warehouse_id": 1***,
|
|
435
|
+
# 仓库名称
|
|
436
|
+
"warehouse_name": "默认仓库",
|
|
437
|
+
# 采购方主体ID
|
|
438
|
+
"purchaser_id": 1**,
|
|
439
|
+
# 采购方主体名称
|
|
440
|
+
"purchaser_name": "采购测试公司",
|
|
441
|
+
# 期望到货日期 [原字段 'expect_arrive_time']
|
|
442
|
+
"expect_arrive_date": "2025-08-14",
|
|
443
|
+
# 采购计划备注 [原字段 'plan_remark']
|
|
444
|
+
"purchase_note": "",
|
|
445
|
+
# 采购文件 [原字段 'file']
|
|
446
|
+
"purchase_files": [],
|
|
447
|
+
# 是否已关联加工计划 [原字段 'is_related_process_plan']
|
|
448
|
+
"has_process_plan": 0,
|
|
449
|
+
# 采购计划状态 (2: 待采购, -2: 已完成, 121: 待审批, 122: 已驳回, -3或124: 已作废)
|
|
450
|
+
"status": 121,
|
|
451
|
+
# 采购计划状态描述 [原字段 'status_text']
|
|
452
|
+
"status_desc": "待审批",
|
|
453
|
+
# 创建人ID [原字段 'creator_uid']
|
|
454
|
+
"creator_id": 1*******,
|
|
455
|
+
# 创建人姓名 [原字段 'creator_real_name']
|
|
456
|
+
"creator_name": "超级管理员",
|
|
457
|
+
# 采购跟进人员ID [原字段 'cg_uid']
|
|
458
|
+
"purchase_staff_id": 1*******,
|
|
459
|
+
# 采购跟进人员姓名 [原字段 'cg_opt_username']
|
|
460
|
+
"purchase_staff_name": "超级管理员",
|
|
461
|
+
# 采购单负责人ID列表 [原字段 'perm_uid']
|
|
462
|
+
"responsible_staff_ids": [1*******],
|
|
463
|
+
# 审计人员ID列表 [原字段 'audit_uids']
|
|
464
|
+
"audit_staff_ids": [1*******],
|
|
465
|
+
# 采购计划创建时间 (北京时间)
|
|
466
|
+
"create_time": "2025-08-06 16:34:32",
|
|
467
|
+
# 采购计划更新时间 (北京时间)
|
|
468
|
+
"update_time": "2025-08-06 16:49:20",
|
|
469
|
+
},
|
|
470
|
+
...
|
|
471
|
+
],
|
|
472
|
+
}
|
|
473
|
+
```
|
|
474
|
+
"""
|
|
475
|
+
url = route.PURCHASE_PLANS
|
|
476
|
+
# 解析并验证参数
|
|
477
|
+
args = {
|
|
478
|
+
"start_date": start_date,
|
|
479
|
+
"end_date": end_date,
|
|
480
|
+
"date_type": date_type,
|
|
481
|
+
"plan_ids": plan_ids,
|
|
482
|
+
"status": status,
|
|
483
|
+
"is_bundled": is_bundled,
|
|
484
|
+
"is_process_plan_linked": is_process_plan_linked,
|
|
485
|
+
"sids": sids,
|
|
486
|
+
"offset": offset,
|
|
487
|
+
"length": length,
|
|
488
|
+
}
|
|
489
|
+
try:
|
|
490
|
+
p = param.PurchasePlans.model_validate(args)
|
|
491
|
+
except Exception as err:
|
|
492
|
+
raise errors.InvalidParametersError(err, url, args) from err
|
|
493
|
+
|
|
494
|
+
# 发送请求
|
|
495
|
+
data = await self._request_with_sign("POST", url, body=p.model_dump_params())
|
|
496
|
+
return schema.PurchasePlans.model_validate(data)
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
from typing import Optional
|
|
3
|
+
from pydantic import ValidationInfo, Field, field_validator
|
|
4
|
+
from lingxingapi import utils
|
|
5
|
+
from lingxingapi.base.param import Parameter, PageOffestAndLength
|
|
6
|
+
from lingxingapi.fields import NonEmptyStr, NonNegativeInt
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# 采购 --------------------------------------------------------------------------------------------------------------------------
|
|
10
|
+
# . Edit Supplier
|
|
11
|
+
class EditSupplier(Parameter):
|
|
12
|
+
"""编辑产品供应商参数"""
|
|
13
|
+
|
|
14
|
+
# 供应商名字
|
|
15
|
+
supplier_name: NonEmptyStr
|
|
16
|
+
# 供应商ID
|
|
17
|
+
supplier_id: Optional[NonNegativeInt] = Field(None, alias="sys_supplier_id")
|
|
18
|
+
# 供应商编码
|
|
19
|
+
supplier_code: Optional[str] = None
|
|
20
|
+
# 供应商等级
|
|
21
|
+
supplier_level: Optional[int] = Field(None, alias="level")
|
|
22
|
+
# 供应商员工数 (1: 少于50, 2: 50-150, 3: 150-500, 4: 500-1000, 5: 1000+)
|
|
23
|
+
employees_level: Optional[int] = Field(None, alias="employees")
|
|
24
|
+
# 供应商网址
|
|
25
|
+
website_url: Optional[str] = Field(None, alias="url")
|
|
26
|
+
# 供应商联系人
|
|
27
|
+
contact_person: Optional[str] = None
|
|
28
|
+
# 供应商联系电话
|
|
29
|
+
phone: Optional[str] = Field(None, alias="contact_number")
|
|
30
|
+
# 供应商联系邮箱
|
|
31
|
+
email: Optional[str] = None
|
|
32
|
+
# 供应商联系QQ
|
|
33
|
+
qq: Optional[str] = None
|
|
34
|
+
# 供应商传真
|
|
35
|
+
fax: Optional[str] = None
|
|
36
|
+
# 供应商地址
|
|
37
|
+
address: Optional[str] = None
|
|
38
|
+
# 供应商开户银行
|
|
39
|
+
bank: Optional[str] = Field(None, alias="open_bank")
|
|
40
|
+
# 供应商银行账号户名
|
|
41
|
+
bank_account_name: Optional[str] = Field(None, alias="account_name")
|
|
42
|
+
# 供应商银行账号卡号
|
|
43
|
+
bank_account_number: Optional[str] = Field(None, alias="bank_card_number")
|
|
44
|
+
# 供应商备注
|
|
45
|
+
note: Optional[str] = Field(None, alias="remark")
|
|
46
|
+
# 采购跟进人员ID
|
|
47
|
+
purchase_staff_ids: Optional[list] = Field(None, alias="purchaser")
|
|
48
|
+
# 采购支付方式 (1: 网银转账, 2: 网上支付)
|
|
49
|
+
payment_method: Optional[int] = None
|
|
50
|
+
# 采购结算方式 (7: 现结, 8: 月结)
|
|
51
|
+
settlement_method: Optional[int] = None
|
|
52
|
+
# 采购结算描述
|
|
53
|
+
settlement_desc: Optional[str] = Field(None, alias="settlement_description")
|
|
54
|
+
|
|
55
|
+
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
56
|
+
@field_validator("purchase_staff_ids", mode="before")
|
|
57
|
+
@classmethod
|
|
58
|
+
def _validate_purchase_staff_ids(cls, v) -> list[int] | None:
|
|
59
|
+
if v is None:
|
|
60
|
+
return None
|
|
61
|
+
return utils.validate_array_of_unsigned_int(
|
|
62
|
+
v, "采购跟进人员ID purchase_staff_ids"
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
# . Purchase Plan
|
|
67
|
+
class PurchasePlans(PageOffestAndLength):
|
|
68
|
+
"""查询采购计划参数"""
|
|
69
|
+
|
|
70
|
+
# fmt: off
|
|
71
|
+
# 查询开始日期, 闭区间, 格式为 "YYYY-MM-DD"
|
|
72
|
+
start_date: str
|
|
73
|
+
# 查询结束日期, 闭区间, 格式为 "YYYY-MM-DD"
|
|
74
|
+
end_date: str
|
|
75
|
+
# 查询日期类型 (creator_time: 创建时间, expect_arrive_time: 预计到货日期, update_time: 更新时间)
|
|
76
|
+
date_type: str = Field(alias="search_field_time")
|
|
77
|
+
# 采购计划单号列表
|
|
78
|
+
plan_ids: Optional[list] = Field(None, alias="plan_sns")
|
|
79
|
+
# 采购计划状态列表 (2: 待采购, -2: 已完成, 121: 待审批, 122: 已驳回, -3或124: 已作废)
|
|
80
|
+
status: Optional[list] = None
|
|
81
|
+
# 是否为捆绑产品 (0: 否, 1: 是)
|
|
82
|
+
is_bundled: Optional[NonNegativeInt] = Field(None, alias="is_combo")
|
|
83
|
+
# 是否关联加工计划 (0: 否, 1: 是)
|
|
84
|
+
is_process_plan_linked: Optional[NonNegativeInt] = Field(None, alias="is_related_process_plan")
|
|
85
|
+
# 领星店铺ID列表
|
|
86
|
+
sids: Optional[list] = None
|
|
87
|
+
# fmt: on
|
|
88
|
+
|
|
89
|
+
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
90
|
+
@field_validator("start_date", "end_date", mode="before")
|
|
91
|
+
@classmethod
|
|
92
|
+
def _validate_date(cls, v, info: ValidationInfo) -> str:
|
|
93
|
+
dt = utils.validate_datetime(v, True, "查询日期 %s" % info.field_name)
|
|
94
|
+
return "%04d-%02d-%02d" % (dt.year, dt.month, dt.day)
|
|
95
|
+
|
|
96
|
+
@field_validator("date_type", mode="before")
|
|
97
|
+
@classmethod
|
|
98
|
+
def _validate_date_type(cls, v) -> str:
|
|
99
|
+
if v == 1:
|
|
100
|
+
return "creator_time"
|
|
101
|
+
elif v == 2:
|
|
102
|
+
return "expect_arrive_time"
|
|
103
|
+
elif v == 3:
|
|
104
|
+
return "update_time"
|
|
105
|
+
return utils.validate_non_empty_str(v, "查询日期类型 date_type")
|
|
106
|
+
|
|
107
|
+
@field_validator("plan_ids", mode="before")
|
|
108
|
+
@classmethod
|
|
109
|
+
def _validate_plan_ids(cls, v) -> list[str] | None:
|
|
110
|
+
if v is None:
|
|
111
|
+
return None
|
|
112
|
+
return utils.validate_array_of_non_empty_str(v, "采购计划单号列表 plan_ids")
|
|
113
|
+
|
|
114
|
+
@field_validator("status", mode="before")
|
|
115
|
+
@classmethod
|
|
116
|
+
def _validate_status(cls, v) -> list[int] | None:
|
|
117
|
+
if v is None:
|
|
118
|
+
return None
|
|
119
|
+
return utils.validate_array_of_unsigned_int(v, "采购计划状态列表 status")
|
|
120
|
+
|
|
121
|
+
@field_validator("sids", mode="before")
|
|
122
|
+
@classmethod
|
|
123
|
+
def _validate_sids(cls, v) -> list[int] | None:
|
|
124
|
+
if v is None:
|
|
125
|
+
return None
|
|
126
|
+
return utils.validate_array_of_unsigned_int(v, "领星店铺ID列表 sids")
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
# 采购 --------------------------------------------------------------------------------------------------------------------------
|
|
4
|
+
# https://apidoc.lingxing.com/#/docs/Purchase/Supplier
|
|
5
|
+
SUPPLIERS: str = "/erp/sc/data/local_inventory/supplier"
|
|
6
|
+
# https://apidoc.lingxing.com/#/docs/Purchase/SupplierEdit
|
|
7
|
+
EDIT_SUPPLIER: str = "/erp/sc/routing/storage/supplier/edit"
|
|
8
|
+
# https://apidoc.lingxing.com/#/docs/Purchase/purchaserLists
|
|
9
|
+
PURCHASERS: str = "/erp/sc/routing/data/purchaser/lists"
|
|
10
|
+
# https://apidoc.lingxing.com/#/docs/Purchase/getPurchasePlans
|
|
11
|
+
PURCHASE_PLANS: str = "/erp/sc/routing/data/local_inventory/getPurchasePlans"
|