使用轻易云平台实现ETL转换:从T+到聚水潭的数据写入方案

  • 轻易云集成顾问-彭萍
### 畅捷通T+数据集成到聚水潭的技术实现:T+进货单【蓝字】-->聚水潭其他入库单--ikk 在实际业务操作中,系统间的数据对接常常会遇到极大的挑战与复杂性。本文将结合一个具体的案例——如何将畅捷通T+系统中的进货单(蓝字)数据精确、高效地集成到聚水潭中的其他入库单。这一过程不仅涉及数据抓取、转换和写入,还需考虑接口调用、分页处理及错误重试等多方面的问题。 首先,在进行定时可靠的数据抓取方面,我们采用了畅捷通T+提供的API接口`/tplus/api/v2/PurchaseArrivalOpenApi/FindVoucherList`,该接口支持批量获取指定日期范围内的所有已审核进货单。为了确保没有漏单,同时应对大量数据带来的压力,通过分页和限流机制来逐步提取需要同步的数据。 ```json { "startDate": "2023-01-01", "endDate": "2023-02-01", "pageIndex": 1, "pageSize": 100 } ``` 如上示例请求参数所示,通过设定起止时间并按页请求,可以有效解决一次读取过多数据而导致的性能问题。同时,为防范网络波动或服务器异常引发的数据丢失情况,我们实现了详细的日志记录和错误重试机制,对每次调用状态进行实时监控,确保即使发生故障也能保障数据完整传输。 在成功读取畅捷通T+的数据后,需要将其映射并转换为符合聚水潭API `/open/jushuitan/otherinout/upload`格式的数据,再进行写入。在这个过程中,不同系统间字段格式差异较大,这就要求我们进行精准的数据匹配及必要的信息补充。例如,将"供应商名称"从通过映射表找到对应ID,并根据业务规则生成必需附加字段,从而满足目标系统需求。 此外,为进一步提高效率,当批量处理完成且所有校验无误后,一次性提交多个仓储记录至聚水潭。这种“批量模式”显著缩短了处理周期,并降低了重复调用带来的额外开销。然而,这也意味着任何一步出错都可能造成全部失败,因此我们设计了一套健全的事务管理和回滚策略,以便及时发现问题并快速恢复正常操作。 综上,通过轻易云平台灵活高效地配置元数据模型,以及严密把控各环节操作细节,我们得以高效、安全地完成这一跨平台集成任务。在接下来的部分,将针对上述提及各功能点展开更为详细 ![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/D5.png~tplv-syqr462i7n-qeasy.image) ### 调用畅捷通T+接口获取并加工数据的技术案例 在数据集成过程中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用畅捷通T+接口`/tplus/api/v2/PurchaseArrivalOpenApi/FindVoucherList`,并对获取的数据进行加工处理。 #### 接口配置与调用 首先,我们需要配置元数据,以便正确调用畅捷通T+的API接口。以下是针对`FindVoucherList`接口的元数据配置: ```json { "api": "/tplus/api/v2/PurchaseArrivalOpenApi/FindVoucherList", "effect": "QUERY", "method": "POST", "number": "Code", "id": "Code", "idCheck": true, "request": [ { "field": "selectFields", "label": "查询字段", "type": "string", "describe": "部门编码", "value": "VoucherCode" }, { "field": "pageIndex", "label": "pageIndex", "type": "string", "describe": "部门名称" }, { "field": "pageSize", "label": "pageSize", "type": "string", "describe": "指定返回字段", "value": "10" }, { ... } ], ... } ``` 该配置定义了API的基本信息和请求参数,其中包括查询字段、分页信息和过滤条件等。 #### 请求参数详解 1. **selectFields**: 指定需要查询的字段,这里设置为`VoucherCode`。 2. **pageIndex**: 当前页码,用于分页请求。 3. **pageSize**: 每页返回的数据条数,这里设置为10。 4. **paramDic_1**: 用于过滤业务类型,设置为`PurchaseArrival__BusinessType__Code`,值为`01,01`。 5. **paramDic_2**: 用于过滤单据状态,设置为`PurchaseArrival__VoucherState__Code`,值为`01,01`。 6. **paramDic_3**: 用于过滤单据日期,设置为当前同步时间和当前时间。 这些参数确保我们能够精确地从畅捷通T+系统中获取所需的进货单数据。 #### 数据请求与清洗 在发送请求后,我们会收到一个包含进货单列表的响应。此时,需要对响应数据进行清洗和初步加工,以便后续的数据转换与写入操作。以下是一个简单的数据清洗示例: ```python def clean_data(response): cleaned_data = [] for item in response['data']: cleaned_item = { 'voucher_code': item['VoucherCode'], 'business_type': item['BusinessType'], 'voucher_state': item['VoucherState'], 'voucher_date': item['VoucherDate'] } cleaned_data.append(cleaned_item) return cleaned_data ``` 该函数提取了响应中的关键字段,并将其转换为更易于处理的格式。 #### 数据转换与写入 在完成数据清洗后,我们需要将其转换为目标系统所需的格式,并写入目标系统。在本案例中,我们将清洗后的进货单数据转换为聚水潭其他入库单格式,并通过相应的API接口写入聚水潭系统。 ```python def transform_and_write(cleaned_data): transformed_data = [] for item in cleaned_data: transformed_item = { 'entry_code': item['voucher_code'], 'entry_type': item['business_type'], 'entry_status': item['voucher_state'], 'entry_date': item['voucher_date'] } transformed_data.append(transformed_item) # 调用聚水潭API写入数据 write_to_jushuitan(transformed_data) def write_to_jushuitan(data): api_url = '/jushuitan/api/v1/OtherEntry/Create' response = requests.post(api_url, json=data) if response.status_code == 200: print("Data written successfully") ``` 通过上述步骤,我们实现了从畅捷通T+到聚水潭系统的数据集成,包括数据请求、清洗、转换和写入全过程。 #### 总结 本文详细介绍了如何通过轻易云数据集成平台调用畅捷通T+接口获取进货单数据,并对其进行清洗和加工处理。通过合理配置元数据和编写相应的处理逻辑,可以高效地实现不同系统间的数据无缝对接。这一过程不仅提升了业务透明度和效率,也确保了数据的一致性和准确性。 ![打通钉钉数据接口](https://pic.qeasy.cloud/S4.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入聚水潭API接口的技术案例 在数据集成生命周期的第二步中,数据从源平台经过清洗和转换后,需要按照目标平台的要求进行格式化处理,并通过API接口写入目标系统。本文将重点探讨如何使用轻易云数据集成平台,将T+进货单的数据转换为聚水潭其他入库单格式,并通过API接口上传到聚水潭系统。 #### API接口配置 在本案例中,目标平台为聚水潭,其API接口配置如下: ```json { "api": "/open/jushuitan/otherinout/upload", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field": "is_confirm", "label": "是否确认单据", "type": "string", "value": "1"}, {"field": "excute_confirming", "label": "是否审核单据", "type": "string", "value": "true"}, {"field": "warehouse", "label": "仓库编号", "type": "int", "value": "_function case '{{Warehouse.Code}}' when '2' then '4' else '1' end"}, {"field": "type", "label": "出入库类型", "type": "string", "value": "'in'"}, {"field": "external_id", "label": "外部单号", "type": "string", "value":"{Code}"}, {"field":"remark","label":"备注","type":"string","value":"{Memo}"}, {"field":"items","label":"items","type":"array","value":"Details", children":[ {"field":"sku_id","label":"商品编码","type":"string", value:"{{Details.Inventory.Code}}"}, {"field":"qty","label":"入库数量","type":"string", value:"{{Details.Quantity}}"}, {"field":"sale_price","label":"单价","type":"bool", value:"{{Details.OrigTaxPrice}}"} ] } ] } ``` #### 数据字段映射与转换 为了将T+进货单的数据转换为聚水潭其他入库单格式,需要对字段进行映射和转换。以下是具体的字段映射关系及其转换逻辑: 1. **是否确认单据 (is_confirm)** - 类型:字符串 - 固定值:1 2. **是否审核单据 (excute_confirming)** - 类型:字符串 - 固定值:true 3. **仓库编号 (warehouse)** - 类型:整数 - 转换逻辑:根据源数据中的仓库代码(Warehouse.Code),如果值为2,则目标值为4,否则为1。 ```sql _function case '{{Warehouse.Code}}' when '2' then '4' else '1' end ``` 4. **出入库类型 (type)** - 类型:字符串 - 固定值:in 5. **外部单号 (external_id)** - 类型:字符串 - 源字段映射:{Code} 6. **备注 (remark)** - 类型:字符串 - 源字段映射:{Memo} 7. **商品明细项 (items)** - 类型:数组 - 商品编码 (sku_id) - 类型:字符串 - 源字段映射:{{Details.Inventory.Code}} - 入库数量 (qty) - 类型:字符串 - 源字段映射:{{Details.Quantity}} - 单价 (sale_price) - 类型:布尔型(实际应为数值型) - 源字段映射:{{Details.OrigTaxPrice}} #### 数据处理流程 1. **数据请求与清洗**: 在第一阶段,数据从T+系统中提取,并经过必要的清洗操作,如去除无效记录、标准化日期格式等。 2. **数据转换与写入**: 在第二阶段,使用轻易云数据集成平台提供的ETL工具,将清洗后的数据按照上述字段映射和转换逻辑进行处理,并生成符合聚水潭API接口要求的数据格式。 3. **API调用**: 最后,通过配置好的API接口,将处理后的数据发送到聚水潭系统,实现最终的数据写入。 #### 示例代码片段 以下是一个示例代码片段,用于展示如何通过轻易云平台进行上述ETL操作: ```python import requests # 配置API请求头和URL url = 'https://api.jushuitan.com/open/jushuitan/otherinout/upload' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' } # 构建请求体数据 payload = { 'is_confirm': '1', 'excute_confirming': 'true', 'warehouse': 4 if source_data['Warehouse']['Code'] == '2' else 1, 'type': 'in', 'external_id': source_data['Code'], 'remark': source_data['Memo'], 'items': [ { 'sku_id': item['Inventory']['Code'], 'qty': item['Quantity'], 'sale_price': item['OrigTaxPrice'] } for item in source_data['Details'] ] } # 发起POST请求 response = requests.post(url, headers=headers, json=payload) # 检查响应状态码及内容 if response.status_code == 200: print('Data uploaded successfully:', response.json()) else: print('Failed to upload data:', response.status_code, response.text) ``` 通过上述配置和代码实现,我们可以高效地将T+进货单的数据转化并上传到聚水潭系统,从而实现不同系统间的数据无缝对接。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/T1.png~tplv-syqr462i7n-qeasy.image)