### 旺店通·旗舰奇门调拨出库单数据集成到金蝶云星空的技术实现
在本次案例中,我们将详细探讨如何通过轻易云数据集成平台,将旺店通·旗舰奇门中的调拨出库单数据(API接口:wdt.wms.stockout.transfer.querywithdetail)高效、安全地集成到金蝶云星空(API接口:batchSave)。这个过程涉及多个重要技术环节,包括分页和限流处理、数据格式差异转换、高效的数据批量写入以及异常处理等。
首先,需要解决的是如何可靠地抓取旺店通·旗舰奇门接口的数据。我们采用定时任务机制,确保每隔一段时间准确且全面地获取最新的调拨出库单信息。在这过程中,通过实时监控与日志记录,可以随时掌握数据抓取情况,一旦出现问题能够及时调整。
其次,面对大量的业务数据,为了快速写入至金蝶云星空,我们设计了批量化的数据提交策略。这不仅提升传输效率,还能有效减少系统压力。同时,在对接过程中,要特别注意两端系统的数据格式差异。为此,我们构建了一套灵活的映射关系,并在存储前进行必要的数据转换,以保证无缝对接。
另外,由于API调用可能会受限速影响,分页请求是必不可少的一步。本方案就此设计了较为完善的分段拉取逻辑,有效防止因超载导致请求失败。同时,为确保整个过程的稳定性,对所有API调用均加入错误重试机制,最大程度降低因网络波动或其他不可抗力导致的数据丢失风险。
最后,对于已经成功推送到金蝶云星空的数据,同样需要进行状态跟踪及审计。一套完善且透明化的数据操作日志,可帮助我们回溯并审查每个环节,大幅提高整体流程安全性和合规性。在实战中,这些措施不仅显著提高了系统联动效率,也大大增强了可靠性的保障。
![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/D8.png~tplv-syqr462i7n-qeasy.image)
### 调用旺店通·旗舰奇门接口获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·旗舰奇门接口`wdt.wms.stockout.transfer.querywithdetail`,并对获取的数据进行初步加工。
#### 接口概述
接口`wdt.wms.stockout.transfer.querywithdetail`主要用于查询调拨出库单的详细信息。该接口采用POST请求方式,支持多种查询参数和分页功能,以确保数据查询的灵活性和高效性。
#### 元数据配置
以下是该接口的元数据配置:
```json
{
"api": "wdt.wms.stockout.transfer.querywithdetail",
"method": "POST",
"number": "order_no",
"id": "stockout_id",
"idCheck": true,
"request": [
{
"field": "params",
"label": "查询参数",
"type": "object",
"describe": "查询参数",
"children": [
{
"field": "start_time",
"label": "开始时间",
"type": "string",
"describe": "起始时间,若无出库单号或调拨单号,则为必填。",
"value": "{{LAST_SYNC_TIME|datetime}}",
"parent": "params"
},
{
"field": "end_time",
"label": "结束时间",
"type": "string",
"describe": "结束时间,上同开始时间",
"value": "{{CURRENT_TIME|datetime}}",
"parent": "params"
},
{
...
}
]
},
...
],
...
}
```
#### 请求参数解析
1. **params**: 查询参数对象,包含多个子字段:
- **start_time**: 起始时间,格式为字符串。通常使用上次同步时间(`{{LAST_SYNC_TIME|datetime}}`)作为起点。
- **end_time**: 结束时间,格式为字符串。通常使用当前时间(`{{CURRENT_TIME|datetime}}`)作为终点。
- **warehouse_no**: 仓库编号,用于指定查询的仓库。
- **src_order_no**: 调拨单号,可选参数。
- **stockout_no**: 出库单号,可选参数。
- **position**: 是否按照货位分组,默认值为"0"(否)。
- **status**: 出库单状态,默认值为"110"(已完成)。
2. **pager**: 分页对象,包含两个子字段:
- **page_size**: 每页记录数,默认值为50。
- **page_no**: 页码,从0开始计数。
#### 数据请求与清洗
在调用接口后,我们会得到一个包含调拨出库单详细信息的响应数据。接下来需要对这些数据进行清洗和初步加工,以便后续的数据转换与写入操作。
1. **校验数据完整性**
确保每条记录都包含必要的字段,如`order_no`和`stockout_id`。如果某些记录缺失关键字段,可以选择丢弃或记录日志以便后续处理。
2. **转换时间格式**
将响应中的日期时间字段转换为统一的格式,例如ISO8601标准。这有助于后续的数据处理和分析。
3. **过滤无效数据**
根据业务需求过滤掉不符合条件的数据。例如,只保留状态为“已完成”的出库单记录。
4. **分页处理**
如果响应数据量较大,需要根据分页信息进行多次请求,并合并所有页的数据。
#### 示例代码
以下是一个示例代码片段,用于调用接口并处理响应数据:
```python
import requests
import json
from datetime import datetime
# 配置请求参数
params = {
'start_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'end_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'warehouse_no': 'WH001',
'status': '110'
}
pager = {
'page_size': 50,
'page_no': 0
}
# 发起POST请求
response = requests.post(
url='https://api.example.com/wdt.wms.stockout.transfer.querywithdetail',
headers={'Content-Type': 'application/json'},
data=json.dumps({'params': params, 'pager': pager})
)
# 处理响应数据
if response.status_code == 200:
data = response.json()
for record in data['records']:
# 校验并清洗数据
if 'order_no' in record and 'stockout_id' in record:
# 转换时间格式
record['start_time'] = datetime.strptime(record['start_time'], '%Y-%m-%d %H:%M:%S').isoformat()
record['end_time'] = datetime.strptime(record['end_time'], '%Y-%m-%d %H:%M:%S').isoformat()
# TODO: 更多清洗逻辑
else:
print(f"Error: {response.status_code}")
```
通过上述步骤,我们可以高效地从旺店通·旗舰奇门系统中获取所需的调拨出库单详细信息,并对其进行初步加工,为后续的数据转换与写入做好准备。这一过程不仅提高了数据集成的效率,也确保了数据质量和一致性。
![用友BIP接口开发配置](https://pic.qeasy.cloud/S9.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台将数据转换并写入金蝶云星空API
在数据集成生命周期的第二阶段,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨如何通过轻易云数据集成平台实现这一过程。
#### 元数据配置解析
元数据配置是整个ETL过程的核心。以下是针对调拨出库单的数据写入金蝶云星空API的元数据配置:
```json
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 20,
"method": "batchArraySave"
},
"request": [
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{order_no}"},
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"DBCKD"},
{"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
{"field":"FPickOrgId","label":"领用组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
{"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"1"},
{"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{{consign_time|datetime}}"},
{"field":"FCustId","label":"客户","type": "string", "describe": "基础资料", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}},
{"field": "FDeptId", "label": "领料部门", "type": "string", "describe": "基础资料", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "BM000032"},
{"field": "FPickerId", "label": "领料人", "type": "string", "describe": "基础资料",
...
```
#### 数据转换与写入流程
1. **字段映射与解析**:
- **FBillNo(单据编号)**:直接映射为源数据中的`order_no`。
- **FBillTypeID(单据类型)**:使用`ConvertObjectParser`解析器,将固定值`DBCKD`转换为目标系统可识别的格式。
- **FStockOrgId(库存组织)**和**FPickOrgId(领用组织)**:同样使用`ConvertObjectParser`解析器,将固定值`100`转换。
- **FDate(日期)**:通过模板引擎将源数据中的时间字段`consign_time`格式化为目标系统所需的日期格式。
2. **明细信息处理**:
- **FEntity(明细信息)**:这是一个数组结构,包含多个子字段,如物料编码、实发数量、发货仓库等。
- **FMaterialId(物料编码)**:使用模板引擎从源数据中提取`detail_list.spec_no`并进行转换。
- **FQty(实发数量)**:直接映射为源数据中的`detail_list.goods_count`。
- **FAmount(总成本)**和**FPrice(成本价)**:根据业务需求计算或直接映射。
3. **特殊字段处理**:
- **FOwnerTypeIdHead(货主类型)**和**FOwnerIdHead(货主)**:这些字段需要使用解析器进行多类别基础资料转换。
- **备注字段处理**:例如,`FNote`和明细中的备注字段,需要从源数据中提取相应内容并进行多行文本处理。
4. **请求参数构建与发送**:
根据上述配置,构建最终的请求参数,并通过HTTP POST方法调用金蝶云星空API接口:
```json
{
...
{
field: 'FormId',
label: '业务对象表单Id',
type: 'string',
describe: '必须填写金蝶的表单ID如:PUR_PurchaseOrder',
value: 'STK_MisDelivery'
},
{
field: 'IsAutoSubmitAndAudit',
label: '提交并审核',
type: 'bool',
value: true
},
{
field: 'IsVerifyBaseDataField',
label: '验证基础资料',
type: 'bool',
describe: '是否验证所有的基础资料有效性,布尔类,默认false(非必录)',
value: true
},
{
field: 'Operation',
label: '执行的操作',
type: 'string',
value: 'Save'
}
}
```
#### 数据校验与错误处理
在实际操作中,还需要对每个字段进行严格的数据校验,以确保所有必填项都已正确填写,并且所有基础资料都能被目标系统识别。如果出现错误,应及时捕获并记录日志,以便后续排查和修正。
通过上述步骤,我们可以高效地将已经集成的源平台数据进行ETL转换,并成功写入到金蝶云星空API接口,从而实现不同系统间的数据无缝对接。
![如何对接用友BIP接口](https://pic.qeasy.cloud/T26.png~tplv-syqr462i7n-qeasy.image)