### 旺店通·企业奇门数据集成到金蝶云星空:销售退货同步
在我们的技术案例中,旺店通·企业奇门的销售退货数据需要实时、高效地同步到金蝶云星空系统,以确保业务流程的精准和完整。本文将聚焦于“销售退货同步”这一方案,从如何调用API接口、处理限流问题,到解决数据格式差异等方面,为您详细解析这个过程中的关键节点和挑战。
首先,我们使用旺店通·企业奇门提供的API `wdt.stockin.order.query.refund` 进行数据抓取。在实际操作中,需要设置合理的定时任务来确保按时获取最新的数据,并保证不漏单。这不仅要求我们对接口有深入了解,还要在配置上具备高度灵活性。
接着,我们面临的大量数据写入到金蝶云星空的问题。这里,利用金蝶云星空的批量保存API `batchSave` 是至关重要的一步。但这并非易事,因为两套系统间的数据格式存在显著差异。因此,需要实现高效而可靠的数据映射,将来自旺店通·企业奇门的数据精确转换为符合金蝶云星空要求的格式。这一步骤涉及自定义字段映射和类型转换,确保每条记录都能被准确且无误地存储。
此外,由于查询接口和保存接口均有严格的分页及限流约束,这就要求我们对请求频率进行有效控制。同时,通过具体实例来展示应对这些限制的方法,也是不可或缺的重要环节。
例如,集成过程中,如果出现异常情况或者错误返回值,则必须具备健全的错误重试机制与日志记录功能,以便及时发现并修正问题。此外,对于双方系统之间状态不同步或者网络延迟导致的数据不一致,也需实施实时监控,并通过日志分析快速定位故障根源。
通过这样的方式,不仅能极大提升工作效率,同时也保障了业务运营上的安全性与稳定性。这些技术细节虽然看似琐碎,但却是成功实现两个系统之间高质量、低延迟数据同步集成所必需的方法论基础。那么,在具体实施过程中,我们将逐一解读上述方法和策略,实现一个从零开始,高度自动化且透明化的数据集成解决方案。
![数据集成平台API接口配置](https://pic.qeasy.cloud/D4.png~tplv-syqr462i7n-qeasy.image)
### 调用旺店通·企业奇门接口获取并加工数据
在数据集成的生命周期中,调用源系统接口是关键的第一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口 `wdt.stockin.order.query.refund` 获取销售退货数据,并对数据进行初步加工。
#### 接口配置与请求参数
首先,我们需要配置接口的元数据。根据提供的元数据配置,接口的基本信息如下:
- **API**: `wdt.stockin.order.query.refund`
- **请求方法**: `POST`
- **分页参数**: 每页50条记录
请求参数包括时间范围、状态、店铺编号和退换单号等。具体配置如下:
```json
{
"api": "wdt.stockin.order.query.refund",
"method": "POST",
"number": "order_no",
"id": "{src_order_no}",
"pagination": {
"pageSize": 50
},
"request": [
{"field": "start_time", "label": "开始时间", "type": "datetime", "value": "{{LAST_SYNC_TIME|datetime}}"},
{"field": "end_time", "label": "结束时间", "type": "datetime", "value": "{{CURRENT_TIME|datetime}}"},
{"field": "status", "label": "状态", "type": "string"},
{"field": "shop_no", "label": "店铺编号", "type": "string"},
{"field": "src_order_no", "label": "退换单号", "type": "string"}
],
...
}
```
#### 数据请求与清洗
在实际操作中,首先需要确定时间范围。通常我们会使用上次同步时间(`LAST_SYNC_TIME`)和当前时间(`CURRENT_TIME`)作为查询条件,以确保获取到最新的数据。
```json
{
...
{
"field":"start_time",
...
,"value":"{{LAST_SYNC_TIME|datetime}}"
},
{
...
,"value":"{{CURRENT_TIME|datetime}}"
}
}
```
此外,分页参数也非常重要,以确保能够处理大批量的数据:
```json
{
...
{
...
,"value":"{PAGINATION_PAGE_SIZE}"
},
{
...
,"value":"{PAGINATION_START_PAGE}"
}
}
```
#### 数据转换与写入
获取到原始数据后,需要对其进行清洗和转换。例如,将时间格式统一、过滤无效数据等。以下是一个简单的数据清洗示例:
```python
def clean_data(raw_data):
cleaned_data = []
for record in raw_data:
if record['status'] == 'valid':
cleaned_record = {
'order_no': record['order_no'],
'shop_no': record['shop_no'],
'refund_amount': float(record['refund_amount']),
'refund_time': parse_datetime(record['refund_time'])
}
cleaned_data.append(cleaned_record)
return cleaned_data
```
在这个过程中,我们将退款金额转换为浮点数,并解析退款时间为标准日期格式。
#### 实践案例
假设我们需要从旺店通获取过去一天内所有有效的销售退货订单,并将其写入目标数据库。以下是一个完整的流程示例:
1. **设置请求参数**:
```python
request_params = {
'start_time': last_sync_time,
'end_time': current_time,
'status': 'valid',
'page_size': pagination_page_size,
'page_no': pagination_start_page
}
```
2. **调用接口**:
```python
response = requests.post(api_url, data=request_params)
raw_data = response.json()
```
3. **清洗数据**:
```python
cleaned_data = clean_data(raw_data)
```
4. **写入数据库**:
```python
write_to_database(cleaned_data)
```
通过上述步骤,我们可以高效地从旺店通获取并处理销售退货数据,为后续的数据分析和业务决策提供可靠的数据支持。
以上就是利用轻易云数据集成平台调用旺店通·企业奇门接口 `wdt.stockin.order.query.refund` 获取并加工数据的详细技术方案。在实际应用中,根据具体业务需求,还可以进一步优化和扩展此流程。
![金蝶云星空API接口配置](https://pic.qeasy.cloud/S6.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行销售退货同步到金蝶云星空API接口的ETL转换
在数据集成过程中,第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细介绍如何使用轻易云数据集成平台完成这一过程。
#### 元数据配置解析
我们将使用以下元数据配置来实现销售退货同步:
```json
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 10,
"method": "batchArraySave"
},
"request": [
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSTHD01_SYS"},
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{refund_no}-TC"},
{"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{shop_no}","mapping":{"target":"6476ea3ba517ed6f062fcfda","direction":"positive"}},
{"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{modified}"},
{"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{shop_no}","mapping":{"target":"6476ea3ba517ed6f062fcfda","direction":"positive"}},
{"field":"FRetcustId","label":"退货客户","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{shop_no}"},
{"field":"FHeadNote","label":"备注","type":"string","describe":"多行文本","value":"{refund_remark}"},
{
"field": "FEntity",
"label": "明细信息",
"type": "array",
"children": [
{"field": "FMaterialId", "label": "物料编码", "type": "string", "describe": "基础资料", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{{details_list.spec_no}}", "parent": "FEntity"},
{"field": "FRealQty", "label": "实退数量", "type": "string", "describe": "数量", "value": "{{details_list.num}}", "parent": "FEntity"},
{"field": "FTaxPrice", "label": "含税单价", "type": "string", "describe": "单价", "value": "{{details_list.src_price}}", "parent": "FEntity"},
{"field": "FStockId", "label": "仓库", "type": "string", "describe": "基础资料", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value":
"{warehouse_no}",
},
{"field":
FNote,
label:
备注,
type:
string,
describe:
文本,
value:
{{details_list.remark}},
parent:
FEntity
},
{
field:
FOrderNo,
label:
订单单号,
type:
string,
describe:
文本,
value:
{{details_list.tid}},
parent:
FEntity
}
],
value:
details_list
},
{
field:
SubHeadEntity,
label:
财务信息,
type:
object,
children: [
{
field:
FSettleOrgId,
label:
结算组织,
type:
string,
describe:
组织,
parser:{
name:"ConvertObjectParser",
params:"FNumber"
},
value:"{shop_no}",
parent:"SubHeadEntity",
mapping:{
target:"6476ea3ba517ed6f062fcfda",
direction:"positive"
}
}
]
}
],
otherRequest:[
{ field: FormId, label:业务对象表单Id, type:string, describe:必须填写金蝶的表单ID如:PUR_PurchaseOrder, value:SAL_RETURNSTOCK},
{ field: Operation, label:执行的操作, type:string, value:Save},
{ field:IsAutoSubmitAndAudit,label:提交并审核,type:bool,value:true},
{ field:IsVerifyBaseDataField,label:验证基础资料,type:bool,describe:是否验证所有的基础资料有效性,布尔类,默认false(非必录),value:true},
{ field:SubSystemId,label:系统模块,type:string,describe:默认仓库模块,value:21},
{ label:服务端开启的线程数,field:BatchCount,type:string,value:5}
]
}
```
#### 数据字段解析与转换
1. **单据类型(FBillTypeID)**:
- 固定值:`XSTHD01_SYS`
- 使用`ConvertObjectParser`解析器,将其转为金蝶云星空可识别的格式。
2. **单据编号(FBillNo)**:
- 动态值:`{refund_no}-TC`
- 将源平台的退款编号加上后缀`-TC`,形成新的单据编号。
3. **销售组织(FSaleOrgId)**:
- 动态值:`{shop_no}`
- 使用`ConvertObjectParser`解析器,将其转为金蝶云星空可识别的格式,并映射到目标系统。
4. **日期(FDate)**:
- 动态值:`{modified}`
- 将源平台的数据修改时间作为日期字段。
5. **库存组织(FStockOrgId)**:
- 动态值:`{shop_no}`
- 与销售组织类似,使用相同的解析器和映射规则。
6. **退货客户(FRetcustId)**:
- 动态值:`{shop_no}`
- 使用相同解析器,将其转为金蝶云星空可识别的格式。
7. **备注(FHeadNote)**:
- 动态值:`{refund_remark}`
- 将源平台中的退款备注直接映射过来。
8. **明细信息(FEntity)**:
- 包含多个子字段,如物料编码、实退数量、含税单价、仓库、备注和订单单号。
- 每个子字段都根据具体需求进行动态映射和解析,如物料编码使用`{{details_list.spec_no}}`,实退数量使用`{{details_list.num}}`等。
9. **财务信息(SubHeadEntity)**:
- 包含结算组织字段。
- 与销售组织类似,使用相同的解析器和映射规则。
#### API请求配置
1. **业务对象表单ID(FormId)**:
- 固定值:`SAL_RETURNSTOCK`
2. **执行操作(Operation)**:
- 固定值:`Save`
3. **提交并审核(IsAutoSubmitAndAudit)**:
- 固定值:true
4. **验证基础资料有效性(IsVerifyBaseDataField)**:
- 固定值:true
5. **系统模块(SubSystemId)**:
- 固定值:21
6. **服务端开启的线程数(BatchCount)**:
- 固定值:5
#### 实现步骤
1. **提取数据**:
从源平台提取所需的数据,包括退款编号、店铺编号、修改时间等信息,以及明细列表中的各项商品信息。
2. **转换数据**:
根据元数据配置,对提取的数据进行转换。利用轻易云的数据处理功能,将各字段按照上述规则进行解析和映射,确保符合金蝶云星空API接口要求。
3. **加载数据**:
将转换后的数据通过API请求写入到金蝶云星空系统中。使用POST方法调用批量保存接口,实现批量写入操作,并根据需要设置自动提交和审核等参数。
通过以上步骤,我们可以高效地完成从源平台到金蝶云星空系统的数据ETL转换,实现销售退货信息的无缝同步。
![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/T20.png~tplv-syqr462i7n-qeasy.image)