轻易云平台数据ETL转换与金蝶云星辰V2API写入技术指南

  • 轻易云集成顾问-吴伟
### 汤臣倍健营销云数据集成到金蝶云星辰V2的技术实现 在汤臣倍健营销云与金蝶云星辰V2的数据对接项目中,我们遇到了多个技术挑战,包括如何确保数据不漏单、大量数据快速写入、处理接口分页和限流问题等。本案例主要展示基于API接口进行系统集成的具体方法,重点介绍了新版订单-出库单-(Life-Space)广州闽健方案中的关键技术细节。 首先,在获取汤臣倍健营销云的数据时,我们使用了其提供的API: `/api/openapi/v1/erp/order/honour/agreement/header`。为了应对高频次调用造成的分页和限流问题,我们设计了一套定时可靠抓取机制。这一机制通过设置合理的时间间隔和请求频率,确保能够稳定地获取所需数据,同时避免触发限制。 针对从汤臣倍健营销云到金蝶云星辰V2的大量数据传输需求,我们应用了支持高吞吐量的数据写入能力。在将批量订单及出库单信息快速导入至金蝶云星辰V2之前,需要先进行必要的数据转换。我们利用轻易云平台提供自定义数据转换逻辑功能,根据业务需求灵活调整字段映射关系,使得不同格式的数据能够无缝衔接。此外,通过可视化的数据流设计工具,对整个集成流程进行了直观管理,大幅提升复杂度处理效率。 对于写入操作,目标是将经过转换后的数据信息准确无误地提交给金蝶云星辰V2 API: `/jdy/v2/scm/sal_out_bound`。为此,不仅要仔细处理每个HTTP请求的响应状态,还需要建立完善的异常处理与错误重试机制,以保证当网络或其他不可控因素导致某次请求失败时,系统可以及时尝试重新发送,从而保障整体操作的一致性和成功率。 同时,为全面掌握两套系统之间的信息交互状况并进行潜在问题预警,集中监控与告警系统发挥了重要作用。该系统实时跟踪各项数据集成任务状态与性能指标,有效捕捉异常情况并迅速发出告警通知,使我们能够及时干预并解决故障,实现持续平稳运行。而且,通过支持实时监控与日志记录功能,每一次API调用过程都被详细记录下来,这为后续排查及优化工作提供了宝贵基础数据支持。 总之,本案例展示了一整套以高度自动化、稳定高效为特点的数据集成解决方案,在完成汤臣倍健营销云到金蝶云星辰V2过渡过程中克服了多重技术难点,并成功 ![如何开发钉钉API接口](https://pic.qeasy.cloud/D27.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统汤臣倍健营销云接口获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用汤臣倍健营销云的接口`/api/openapi/v1/erp/order/honour/agreement/header`,并对获取的数据进行初步加工。 #### 接口调用与元数据配置 首先,我们需要理解接口的基本信息和请求参数。根据提供的元数据配置,以下是该接口的详细信息: - **API路径**: `/api/openapi/v1/erp/order/honour/agreement/header` - **请求方法**: `POST` - **功能**: 查询订单头信息 请求参数包括但不限于以下字段: - `orgId` (组织ID): 固定值 `cbeb5eac9ce241d9a91f36defb8b508f` - `page` (页码): 固定值 `1` - `orderStatus` (订单状态): 多个状态值,用逗号分隔 - `nature` (单据类型): 固定值 `1` - `lastStartDt` (最后修改时间开始): 动态值 `{{LAST_SYNC_TIME|datetime}}` - `lastEndDt` (最后修改时间结束): 动态值 `{{CURRENT_TIME|datetime}}` 这些参数确保了我们能够准确地查询到所需的订单数据。 #### 请求参数配置 在轻易云数据集成平台上,我们需要按照元数据配置来设置请求参数。以下是具体步骤: 1. **创建请求模板**: ```json { "orgId": "cbeb5eac9ce241d9a91f36defb8b508f", "page": "1", "orderStatus": "WAIT_DELIVERY,PART_DELIVERY,ALL_DELIVERY,WAIT_OUT_STORAGE,PART_OUT_STORAGE,ALL_OUT_STORAGE,PART_CONFIRM,CONFIRM,AUDIT_SUCCESS,FINISH", "nature": "1", "lastStartDt": "{{LAST_SYNC_TIME|datetime}}", "lastEndDt": "{{CURRENT_TIME|datetime}}" } ``` 2. **动态参数处理**: - `lastStartDt`: 使用上次同步时间,确保增量更新。 - `lastEndDt`: 使用当前时间,确保获取最新数据。 #### 数据获取与初步清洗 调用接口后,我们将获得一批原始订单数据。接下来,需要对这些数据进行初步清洗和转换,以便后续处理和存储。 1. **验证响应格式**: 确保响应的数据结构符合预期,例如: ```json { "code": 200, "message": "Success", "data": [ { "id": "12345", "orderNo": "ORD001", ... }, ... ] } ``` 2. **过滤无效数据**: 检查每条记录是否包含必要字段,如订单ID、订单号等。如果缺失关键字段,则丢弃该记录。 3. **字段映射与转换**: 将源系统中的字段映射到目标系统所需的字段。例如: - 源系统的`orderNo`映射为目标系统的`order_number` - 源系统的`createDt`转换为标准日期格式 4. **处理嵌套结构**: 如果响应中包含嵌套结构(如订单项),需要展开并分别处理。例如,将每个订单项提取出来,并添加关联的订单ID。 #### 示例代码 以下是一个示例代码片段,用于调用接口并处理响应数据: ```python import requests import json from datetime import datetime # 配置请求参数 payload = { "orgId": "cbeb5eac9ce241d9a91f36defb8b508f", "page": 1, "orderStatus": "WAIT_DELIVERY,PART_DELIVERY,ALL_DELIVERY,WAIT_OUT_STORAGE,PART_OUT_STORAGE,ALL_OUT_STORAGE,PART_CONFIRM,CONFIRM,AUDIT_SUCCESS,FINISH", "nature": 1, "lastStartDt": datetime.now().strftime('%Y-%m-%dT%H:%M:%S'), "lastEndDt": datetime.now().strftime('%Y-%m-%dT%H:%M:%S') } # 调用API response = requests.post("https://example.com/api/openapi/v1/erp/order/honour/agreement/header", json=payload) data = response.json() # 初步清洗和转换 if data['code'] == 200: orders = data['data'] cleaned_orders = [] for order in orders: if 'id' in order and 'orderNo' in order: cleaned_order = { 'order_id': order['id'], 'order_number': order['orderNo'], 'created_at': order['createDt'] # 其他字段映射... } cleaned_orders.append(cleaned_order) # 输出清洗后的数据 print(json.dumps(cleaned_orders, indent=4)) ``` 通过上述步骤和代码示例,我们可以高效地从汤臣倍健营销云获取并初步加工订单数据,为后续的数据转换与写入奠定基础。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/S28.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星辰V2API接口 在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台金蝶云星辰V2API接口所能够接收的格式,并最终写入目标平台。本文将详细介绍如何利用轻易云数据集成平台配置元数据,实现这一过程。 #### 配置元数据 首先,我们需要理解和配置元数据,以便将源数据转换为目标API所需的格式。以下是我们要用到的元数据配置: ```json { "api": "/jdy/v2/scm/sal_out_bound", "effect": "EXECUTE", "method": "POST", "number": "id", "id": "id", "name": "id", "idCheck": true, "request": [ {"field":"bill_source","label":"单据来源,固定传入ISV","type":"string","describe":"单据来源,固定传入APP","value":"ISV"}, {"field":"bill_date","label":"出库日期,格式:2019-01-01","type":"datetime","describe":"出库日期,格式:2019-01-01","value":"{{approveDt|date}}"}, {"field":"customer_id","label":"客户id","type":"string","describe":"客户信息","value":"_findCollection find id from da56aa19-b7b1-3e23-9962-ae3977d4fe83 where number={clientAppNo}"}, {"field":"remark","label":"单据备注","type":"string","value":"{remark}"}, {"field":"contact_linkman","label":"联系信息-联系人","type":"string","value":"{contacts}"}, {"field":"contact_phone","label":"联系信息-联系方式","type":"string","value":"{phone}"}, {"field":"contact_address","label":"联系信息-详细地址","type":"string","value":"{shippingAddress}"}, {"field":"dept_id","label":"部门","type":"string","value":"100000"}, { "field": "custom_field", "label": "自定义字段", "type": "object", "children": [ {"field": "custom_field__1__2uvf7udrj2ih", "label": "营销云单号", "type": "string", "value": "{no}"}, {"field": "custom_field__1__2xf936gyblr4", "label": "下单人", "type": "string", "value": "{salesmanName}"} ] }, { "field": "material_entity", "label": "商品分录", "type": "array", "describe": "商品分录", "value": "{{details}}", ... } ] } ``` #### 数据提取与清洗 在ETL过程的第一步,我们需要从源系统中提取数据并进行清洗。假设我们的源系统提供了一个JSON格式的数据,包含订单信息和商品明细。通过轻易云的数据请求功能,我们可以获取这些原始数据。 例如: ```json { "_id": 12345, "_source_platform_data":{ ... }, "_details":[ { "_extNo" : 1001, "_quantity" : 10, "_price" : 20.5, ... } ] } ``` #### 数据转换 接下来,我们将提取到的数据根据目标API的需求进行转换。使用元数据配置中的映射规则,将源数据字段映射到目标API字段。 例如: ```json { ... { field: 'bill_date', value: '{{approveDt|date}}' }, { field: 'customer_id', value: '_findCollection find id from da56aa19-b7b1-3e23-9962-ae3977d4fe83 where number={clientAppNo}' }, ... } ``` 在这里,我们使用了模板引擎来动态生成目标字段值。例如,`{{approveDt|date}}`表示将`approveDt`字段格式化为日期字符串。 #### 写入目标平台 最后一步是将转换后的数据写入金蝶云星辰V2API接口。我们使用HTTP POST方法,将转换后的JSON对象发送到指定的API端点。 例如: ```json { api: '/jdy/v2/scm/sal_out_bound', method: 'POST', data: { bill_source: 'ISV', bill_date: '2023-10-01', customer_id: '123456', remark: 'Test Remark', contact_linkman: 'John Doe', contact_phone: '1234567890', contact_address: '123 Test St.', dept_id: '100000', custom_field: { custom_field__1__2uvf7udrj2ih: 'Order12345', custom_field__1__2xf936gyblr4: 'Salesman A' }, material_entity: [ { material_number: 1001, stock_id: '1535518734226043904', qty: 10, unit_id: '_findCollection find base_unit_id from 853c1661-2fc6-3120-b8d1-c4bda3aa1b94 where number=1001', tax_price: 20.5, is_free: false, batch_no: 'Batch001', kf_date: '2023-09-01', valid_date: '2023-12-31', kf_period: 90, kf_type: 3 } ] } } ``` 通过这种方式,我们完成了从源系统到金蝶云星辰V2API接口的数据ETL转换和写入过程。这一过程不仅确保了数据的一致性和完整性,还大大提升了业务流程的自动化程度。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)