利用轻易云进行ETL转换:金蝶云星辰V2采购入库数据同步案例

  • 轻易云集成顾问-潘裕
### 汤臣倍健营销云数据集成到金蝶云星辰V2案例分享:采购入库同步-广州闽康 在企业数字化进程中,系统之间的数据互通是实现业务高效运作的关键。本文将重点探讨如何通过轻易云平台,实现汤臣倍健营销云与金蝶云星辰V2系统的数据对接,以"采购入库同步-广州闽康"为例具体介绍技术方案。 #### 案例背景及挑战 当前,汤臣倍健使用其独立开发的营销云平台管理销售和供应链环节,而其财务管理则由金蝶云星辰V2负责。在实际运营过程中,需要将采购入库数据从营销云及时、准确地传输至金蝶系统进行后续处理。此次项目面临以下几个主要技术挑战: 1. **API数据获取与写入**: - 从汤臣倍健营销云获取相关接口数据`/erp/api/order/query/purInWarehsOrder`。 - 将获取的数据快速且批量地写入到金蝶云星辰V2相应接口`/jdy/v2/scm/pur_inbound`。 2. **数据转换和映射**: - 由于两个系统的数据结构不同,需要进行自定义的数据转换逻辑来适应特定需求,确保无缝衔接。 3. **性能与可靠性保障**: - 在高频次调用下,要确保系统性能,同时及时发现并处理异常情况,保证数据不漏单、不重单。 4. **分页及限流处理**: - 由于汤臣倍健API存在分页及限流限制,需要设计合适的机制来抓取全量数据而不影响服务稳定性。 #### 实施步骤概述 为了克服上述挑战,我们采用了轻易云提供的集中监控和告警功能,以及高吞吐量数据写入能力,使得大量采购入库信息能够迅速、安全地完成跨系统集成。此外,通过可视化工具,我们制定了一系列操作流程,包括但不限于实时监控、日志记录、异常检测与重试机制等,大大提升了集成过程中的透明度与效率。 在接下来的部分中,将详细剖析每个实施细节,包括具体API调用方法、自定义转换逻辑设计以及各种问题(如分页限流)的解决方案。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统汤臣倍健营销云接口获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是关键的第一步。本文将详细探讨如何通过调用汤臣倍健营销云的`/erp/api/order/query/purInWarehsOrder`接口来获取采购入库数据,并进行初步的数据加工。 #### 接口调用配置 为了实现采购入库数据的同步,我们需要配置API请求参数。以下是元数据配置中的关键字段及其含义: - `tenantId`: 经销商ID,必填项,用于标识具体的经销商。 - `yxyNumber`: 营销云销售订单号,传此参数时其他时间状态等条件无效。 - `number`: 系统订单号,传此参数时其他时间状态等条件无效。 - `status`: 订单状态,0表示未审核,1表示已审核(已出库)。 - `beginTime`和`endTime`: 时间范围,用于基于创建时间或更新时间查询订单。 - `pageNo`和`pageSize`: 分页参数,默认值分别为1和30。 - `timeType`: 时间段标志,0表示创建时间(默认),1表示最后更新时间。 请求示例: ```json { "tenantId": "08e2fd9d074f4ef7b5e6416b74d006d6", "status": "1", "beginTime": "{{LAST_SYNC_TIME|datetime}}", "endTime": "{{CURRENT_TIME|datetime}}", "pageNo": "1", "pageSize": "30", "timeType": "1" } ``` #### 数据请求与清洗 在发送POST请求后,我们将接收到包含采购入库订单的JSON响应。为了确保数据质量,需要对返回的数据进行清洗和过滤。例如,根据元数据配置中的条件,我们需要排除物料编号中包含“F.A”的记录。 过滤条件: ```json "condition":[[{"field":"itemList.materialNumber","logic":"notlike","value":"F.A"}]] ``` 这意味着我们需要遍历返回的数据列表,并移除所有物料编号中包含“F.A”的记录。以下是一个简单的Python代码示例,用于实现这一过滤逻辑: ```python import requests import json # API请求参数 payload = { "tenantId": "08e2fd9d074f4ef7b5e6416b74d006d6", "status": "1", "beginTime": "{{LAST_SYNC_TIME|datetime}}", "endTime": "{{CURRENT_TIME|datetime}}", "pageNo": "1", "pageSize": "30", "timeType": "1" } # 发起POST请求 response = requests.post("https://api.example.com/erp/api/order/query/purInWarehsOrder", json=payload) data = response.json() # 数据清洗:移除物料编号中包含“F.A”的记录 filtered_data = [order for order in data['orders'] if not any("F.A" in item['materialNumber'] for item in order['itemList'])] print(json.dumps(filtered_data, indent=4)) ``` #### 数据转换与写入 经过清洗后的数据,需要进一步转换为目标系统所需的格式,并写入到目标数据库或系统中。这一步通常涉及字段映射、数据类型转换等操作。 例如,将清洗后的订单数据转换为目标系统所需的格式: ```python transformed_data = [] for order in filtered_data: transformed_order = { 'order_id': order['id'], 'order_number': order['number'], 'order_status': order['status'], 'items': [{'material_number': item['materialNumber'], 'quantity': item['quantity']} for item in order['itemList']] } transformed_data.append(transformed_order) # 将转换后的数据写入目标系统(示例) write_to_target_system(transformed_data) ``` 通过以上步骤,我们完成了从调用汤臣倍健营销云接口获取采购入库数据,到对数据进行清洗、转换并写入目标系统的全过程。这一过程不仅确保了数据的一致性和准确性,还提高了业务流程的自动化程度。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/S20.png~tplv-syqr462i7n-qeasy.image) ### 采购入库同步至金蝶云星辰V2API接口的ETL转换技术案例 在数据集成生命周期的第二步,将已经集成的源平台数据进行ETL转换,并写入目标平台金蝶云星辰V2API接口是一个关键环节。本文将详细探讨如何利用轻易云数据集成平台进行这一过程的配置与实现。 #### API接口配置 首先,我们需要了解目标平台金蝶云星辰V2API接口的基本配置。根据元数据配置,我们需要向`/jdy/v2/scm/pur_inbound`接口发送POST请求。以下是主要字段及其配置: - `bill_date`:单据日期,类型为字符串,通过模板表达式`{{auditTime|date}}`获取。 - `bill_no`:单据编码,类型为字符串。 - `transtype`:业务类型,固定值为"2"。 - `supplier_id`:供应商编码,固定值为"1534675909330613248"。 - `remark`:备注,通过模板表达式组合其他字段值,例如`{remark}-来自营销云-{yxyNumber}`。 - `custom_field`:自定义字段,包含子字段`custom_field__1__2uvgtgp4lsdr`,其值为营销云单号。 - `material_entity`:商品分录,为数组类型,包含多个子字段,如商品编码、仓库编码、数量等。 #### 数据清洗与转换 为了确保数据能够被目标平台正确接收和处理,需要对源数据进行清洗和转换。以下是几个关键步骤: 1. **日期格式化**: - 使用模板表达式将源数据中的日期格式化为目标格式。例如,单据日期通过表达式`{{auditTime|date}}`获取。 2. **固定值设置**: - 某些字段需要设置固定值,如业务类型(`transtype`)设为"2",供应商编码(`supplier_id`)设为"1534675909330613248"。 3. **模板表达式应用**: - 利用模板表达式动态生成某些字段的值。例如,备注(`remark`)字段通过组合其他字段生成特定格式的字符串。 4. **嵌套对象处理**: - 对于自定义字段和商品分录等嵌套对象,需要逐层解析和赋值。例如,自定义字段中的营销云单号通过表达式获取并赋值给子字段。 5. **数组处理**: - 商品分录(`material_entity`)是一个数组,需要遍历每个商品条目并分别处理其子字段。特别注意数量(`qty`)和含税单价(`tax_price`)等计算型字段。 #### 示例代码 以下是一个简化的示例代码片段,用于展示如何在轻易云数据集成平台上配置和执行上述ETL转换过程: ```json { "api": "/jdy/v2/scm/pur_inbound", "effect": "EXECUTE", "method": "POST", "number": "1", "id": "1", "name": "1", "idCheck": true, "request": [ {"field":"bill_date","label":"单据日期","type":"string","describe":"单据日期","value":"{{auditTime|date}}"}, {"field":"bill_no","label":"单据编码","type":"string","describe":"单据编码"}, {"field":"transtype","label":"业务类型","type":"string","describe":"数量","value":"2"}, {"field":"supplier_id","label":"供应商编码","type":"string","describe":"供应商编码","value":"1534675909330613248"}, {"field":"remark","label":"备注","type":"string","describe":"商品编码","value":"{remark}-来自营销云-{yxyNumber}"}, { "field": "custom_field", "label": "自定义字段", "type": "object", "children": [ {"field": "custom_field__1__2uvgtgp4lsdr", "label": "营销云单号", "type": "string", "value": "{number}"} ] }, { "field": "material_entity", "label": "商品分录", "type": "array", "describe": "含税单价", "value": "itemList", ... } ] } ``` #### 复杂场景处理 在实际应用中,还可能遇到更复杂的数据清洗与转换需求。例如,需要根据不同条件动态调整某些字段的值或进行更复杂的数据计算。这时,可以借助轻易云平台提供的函数和脚本功能,实现更灵活的数据处理逻辑。 例如,对于含税单价(`tax_price`)的计算,可以使用如下函数: ```json { ... {"field": "tax_price", "label": "含税单价", "type": "string", "describe": ... , ... , ... , ... , ... , ... , ... , ... , ``` 通过上述步骤和配置,我们可以高效地将源平台的数据转换为金蝶云星辰V2API接口所需的格式,并成功写入目标平台。这不仅提高了数据处理效率,也确保了数据的一致性和准确性。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/T9.png~tplv-syqr462i7n-qeasy.image)