使用轻易云实现金蝶云星空数据的ETL转换与写入

  • 轻易云集成顾问-杨嫦
### 旺店通·企业奇门数据集成到金蝶云星空:销售出库单对接案例分享 有效的系统集成对于业务流程自动化至关重要。在本次技术案例中,我们将详细探讨如何通过轻易云平台实现旺店通·企业奇门中的销售出库单(API接口:wdt.stockout.order.query.trade)与金蝶云星空的数据对接(API接口:batchSave)。我们不仅会展示整个数据处理过程,包括实时监控和日志记录,还会深入解析分页限流、数据格式差异处理及异常重试机制,以确保高效可靠的数据传输。 #### 数据获取与分页管理 在实际操作过程中,首先要解决的是从旺店通·企业奇门接口定时抓取销售出库单数据的问题。这涉及调用`wdt.stockout.order.query.trade` API,并结合分页策略来有效地管理和限制每次请求的数据量。为了避免超时或性能瓶颈,我们采用了一种智能调度机制,可以动态调整页面大小并控制请求频率,即使在高负载情况下,也能保证系统稳定运行。 #### 数据转换与格式适配 不同系统之间通常存在数据格式不一致的情况,这一点在旺店通·企业奇门和金蝶云星空之间尤为明显。在这个项目中,我们设计了一套灵活的映射规则,通过脚本进行定制化转换,以适应两个平台间的数据标准。例如,将数字类型转变为字符串类型,或者日期格式从YYYY-MM-DD HH:mm:ss调整为YYYY/MM/DD等。这些细致入微的转换配置大大提升了数据写入成功率,同时确保了信息准确无误。 #### 高效批量写入及错误重试机制 针对大量数据需要快速写入到金蝶云星空这一挑战,我们采用了其提供的`batchSave` API进行批量操作,避免逐条插入带来的性能问题。此外,为提高整体流程的鲁棒性,每个写入步骤都包含详细的事务控制逻辑。一旦出现异常,无论是网络故障还是目标服务器响应慢,都能触发自动重试机制,从而极大提高了任务完成率。 #### 实时监控与透明可视 借助轻易云平台强大的实时监控功能,我们可以全程跟踪每一笔销售出库单从获取、转换到最终写入的状态,不仅提升了运维效率,也有助于及时发现和解决潜在问题。同时,通过详尽日志记录,实现了对所有操作步骤的透明审计,有效地支持后续分析与优化工作。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/D22.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`来获取并加工销售出库单数据。 #### 接口概述 `wdt.stockout.order.query.trade`接口用于查询销售出库单信息。该接口采用POST请求方式,支持增量获取数据,并且可以根据多种条件进行筛选。以下是元数据配置的关键字段及其作用: - **start_time** 和 **end_time**:用于增量获取数据,分别表示开始时间和结束时间。 - **status**:用于筛选订单状态,如已取消、已审核、已发货等。 - **src_order_no** 和 **src_tid**:分别表示系统订单编号和原始单号,用于精确查询特定订单。 - **stockout_no**:出库单号。 - **shop_no** 和 **warehouse_no**:分别表示店铺编号和仓库编号,用于区分不同店铺和仓库的数据。 #### 请求参数配置 在实际操作中,我们需要配置请求参数以确保能够正确调用接口并获取所需数据。以下是具体的请求参数配置示例: ```json { "start_time": "{{LAST_SYNC_TIME|datetime}}", "end_time": "{{CURRENT_TIME|datetime}}", "status": "95,105,110", "page_size": "{PAGINATION_PAGE_SIZE}", "page_no": "{PAGINATION_START_PAGE}" } ``` - `start_time` 和 `end_time` 使用模板变量分别表示上次同步时间和当前时间,确保每次调用都是增量获取。 - `status` 设置为"95,105,110",表示只获取已发货、部分打款和已完成的订单。 - `page_size` 和 `page_no` 用于分页处理,确保每次请求的数据量可控。 #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗与转换,以便后续处理和写入目标系统。以下是常见的数据清洗与转换步骤: 1. **字段映射与重命名**: - 将原始字段映射到目标系统所需的字段。例如,将`order_no`映射为目标系统中的订单编号字段。 2. **数据格式转换**: - 将日期时间格式统一转换为目标系统要求的格式。例如,将"yyyy-MM-dd HH:mm:ss"格式转换为"yyyy/MM/dd HH:mm:ss"。 3. **异常数据处理**: - 对缺失值或异常值进行处理,例如填充默认值或丢弃异常记录。 #### 自动填充响应 轻易云平台提供了自动填充响应功能,可以根据预定义的规则自动解析并填充响应数据。这一功能极大简化了开发工作,提高了效率。在元数据配置中,我们可以看到`autoFillResponse: true`,这意味着平台会自动处理响应数据,无需手动解析。 #### 实际案例 假设我们需要从旺店通系统中获取2023年10月1日至2023年10月31日期间所有已发货、部分打款和已完成的销售出库单,并将其导入金蝶系统。具体步骤如下: 1. 配置请求参数: ```json { "start_time": "2023-10-01 00:00:00", "end_time": "2023-10-31 23:59:59", "status": "95,105,110", "page_size": "50", "page_no": "0" } ``` 2. 调用接口并获取原始数据: ```json POST /api/wdt.stockout.order.query.trade { ... } ``` 3. 对原始数据进行清洗与转换: - 映射字段:将`order_no`映射为金蝶系统中的订单编号。 - 转换日期格式:将日期时间格式从"yyyy-MM-dd HH:mm:ss"转换为"yyyy/MM/dd HH:mm:ss"。 4. 将清洗后的数据写入金蝶系统。 通过以上步骤,我们实现了从旺店通到金蝶系统的数据无缝对接,并确保了每个环节的数据准确性和一致性。这一过程展示了轻易云平台在异构系统集成中的强大能力,为企业提供了高效可靠的数据解决方案。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/S22.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现金蝶云星空API接口的ETL转换与写入 在数据集成的生命周期中,将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并转为目标平台金蝶云星空API接口所能够接收的格式,是一个至关重要的步骤。本文将详细探讨如何利用轻易云数据集成平台完成这一过程。 #### 元数据配置解析 在进行ETL转换时,首先需要理解和配置元数据。以下是针对金蝶云星空API接口的元数据配置解析: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "idCheck": true, "request": [ {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSCKD01_SYS"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{order_no}"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{consign_time}"}, {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FCustomerID","label":"客户","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"3.001"}, {"field":"FSaleDeptID","label":"销售部门","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FCorrespondOrgId","label":"对应组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FSalesManID","label":"销售员","type":"","describe":"","parser":{"name":"","params":""},"value":""}, {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""}, ... ], ... } ``` #### 配置解析与字段映射 1. **基本字段配置**: - `FBillTypeID`:单据类型,固定值为`XSCKD01_SYS`。 - `FBillNo`:单据编号,对应源平台的订单号 `{order_no}`。 - `FDate`:日期,对应源平台的发货时间 `{consign_time}`。 2. **组织与客户信息**: - `FSaleOrgId`、`FCorrespondOrgId`、`FStockOrgId` 等字段均需使用 `ConvertObjectParser` 将值转换为金蝶系统识别的编码格式。 - `FCustomerID`:客户信息,固定值为 `3.001`。 3. **明细信息**: 明细信息通过数组形式传递,每个字段需要详细映射。例如: - `FMaterialID`:物料编码,对应源平台的规格编号 `{detail_list.spec_no}`。 - `FRealQty`:实发数量,对应源平台的商品数量 `{details_list.goods_count}`。 - `FTaxPrice`:含税单价,通过函数计算得出 `{details_list.paid}/{details_list.goods_count}`。 4. **特殊字段处理**: 某些字段如 `FLot`(批号)需要根据条件进行处理。例如: ```json { "field": "FLot", "label": "批号", "type": "string", "value": "_function case '_findCollection find FIsBatchManage from ... where FNumber={{details_list.goods_no}} _endFind' WHEN 'true' THEN '0' ELSE '' END", "parser": { "name": "ConvertObjectParser", "params": "FNumber" } } ``` #### 数据转换与写入 在完成元数据配置后,需要将源平台的数据按照上述配置进行转换,并通过API接口写入到金蝶云星空系统中。具体步骤如下: 1. **提取数据**:从源平台提取原始数据,确保所有必要字段均已获取。 2. **数据清洗**:对提取的数据进行清洗和预处理,确保符合目标系统要求。 3. **数据转换**:根据元数据配置,将清洗后的数据进行格式转换,特别是涉及到复杂逻辑和条件判断时,需要确保转换准确无误。 4. **API请求构建**:根据配置构建HTTP POST请求,包含所有必要的字段和参数。 5. **发送请求并处理响应**:将构建好的请求发送至金蝶云星空API接口,并处理返回结果,确保操作成功。 #### 示例代码 以下是一个简化示例,用于展示如何通过Python脚本实现上述过程: ```python import requests import json # 构建请求头 headers = { 'Content-Type': 'application/json' } # 构建请求体 payload = { # 基本信息 'FBillTypeID': {'FNumber': 'XSCKD01_SYS'}, 'FBillNo': order_no, 'FDate': consign_time, # 组织与客户信息 'FSaleOrgId': {'FNumber': '100'}, 'FCustomerID': {'FNumber': '3.001'}, # 明细信息 'FEntity': [ { 'FMaterialID': {'FNumber': detail['spec_no']}, 'FRealQty': detail['goods_count'], 'FTaxPrice': detail['paid'] / detail['goods_count'], # 更多明细字段... } for detail in details_list ], # 其他配置信息... } # 将请求体转为JSON格式 data = json.dumps(payload) # 发送POST请求 response = requests.post('https://api.kingdee.com/batchSave', headers=headers, data=data) # 打印响应结果 print(response.json()) ``` 通过上述步骤和示例代码,可以高效地将源平台的数据转换并写入到金蝶云星空系统中,实现跨系统的数据集成。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T29.png~tplv-syqr462i7n-qeasy.image)