企业系统集成:实现旺店通与金蝶云星辰数据互联

  • 轻易云集成顾问-曹润
### 案例分析:旺店通·企业奇门数据集成至金蝶云星辰V2 在众多系统对接需求中,电商平台与ERP系统之间的数据集成尤为关键。本文将详细解析如何高效地将“旺店通·企业奇门”的调拨单数据无缝对接至“金蝶云星辰V2”,并重点分享实现过程中的技术要点及解决方案。 #### 案例背景 项目需要通过接口`wdt.stock.transfer.query`定时从旺店通·企业奇门抓取最新的调拨单数据,并快速而准确地写入到金蝶云星辰V2的API `/jdy/v2/scm/inv_tfout` 中。在此过程中,我们面临着分页限流处理、数据格式转换、实时监控以及异常重试等技术挑战。 #### 数据获取与处理机制 1. **调用旺店通·企业奇门API**: - 首先,通过接口 `wdt.stock.transfer.query` 实现定时可靠的数据抓取。 - 需要特别注意接口的分页和限流问题,以确保不会遗漏任何一条调拨单记录。同时,为应对大规模请求可能带来的性能问题,需进行合理的频率控制。 2. **数据格式转换**: - 旺店通返回的数据格式需与金蝶云预期的数据结构进行匹配。这涉及复杂的数据映射工作,包括字段名称、类型及层级关系的转换。 3. **批量写入至金蝶云星辰V2**: - 为优化效率,采用批量写入方式,将转化后的调拨单以较快速度插入到目标系统中。 - 在调用 `/jdy/v2/scm/inv_tfout` 时,通过封装请求,实现自动化处理和错误捕捉,提高整体稳定性。 4. **实时监控和日志记录**: - 利用可视化操作界面,对整个数据处理流程进行全程监控。如有异常情况发生(例如网络波动或第三方服务故障),触发相应警报机制予以识别和响应。 5. **异常处理与重试机制**: - 开发完善的错误追踪和重试策略,对于因意外导致未能成功导入的数据,制定有效且安全的补救措施。同时保持详尽的日志记录,以便后续排查定位问题源头。 通过上述步骤,高效集成了两大平台间的大量业务节点,为用户提供了稳定可靠的信息互联体验。在接下来的内容中,将进一步深入剖析每一个环节中的具体实施细节,以及遇到的问题及其解决方案。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/D14.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统旺店通·企业奇门接口wdt.stock.transfer.query获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stock.transfer.query`,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置元数据以便正确调用`wdt.stock.transfer.query`接口。以下是关键的元数据配置参数: - **API**: `wdt.stock.transfer.query` - **Method**: `POST` - **Pagination**: 支持分页,每页返回的数据条数范围为1到100。 - **ID Check**: `true`,表示需要检查返回数据中的唯一标识符。 #### 请求参数 请求参数是调用API时必须提供的内容,用于指定查询条件和过滤条件。以下是主要的请求参数及其描述: 1. **start_time** 和 **end_time**: - 类型:datetime - 描述:用于增量获取数据,格式为`yyyy-MM-dd HH:mm:ss`。 - 示例值:`{{LAST_SYNC_TIME|datetime}}` 和 `{{CURRENT_TIME|datetime}}` 2. **from_warehouse_no** 和 **to_warehouse_no**: - 类型:string - 描述:分别代表源仓库和目标仓库的唯一编码,用于区分不同仓库的数据。 3. **status**: - 类型:string - 描述:调拨单状态,不传该字段默认返回全部状态的单据。 - 示例值:`90`(调拨完成) 4. **transfer_no**: - 类型:string - 描述:单号,用于精确查询特定调拨单。 5. **page_size** 和 **page_no**: - 类型:string - 描述:分页参数,分别表示每页返回的数据条数和页号。 - 示例值:`{PAGINATION_PAGE_SIZE}` 和 `{PAGINATION_START_PAGE}` #### 数据请求与清洗 在配置好元数据后,我们可以通过轻易云平台发送POST请求来获取调拨单数据。以下是一个示例请求体: ```json { "start_time": "2023-01-01 00:00:00", "end_time": "2023-01-31 23:59:59", "from_warehouse_no": "WH001", "to_warehouse_no": "WH002", "status": "90", "page_size": 100, "page_no": 0 } ``` 响应结果将包含符合条件的调拨单信息。为了确保数据质量,需要对返回的数据进行清洗和验证。例如: 1. **字段验证**: 确保每个调拨单都有唯一标识符(如transfer_id)和必填字段(如transfer_no)。 2. **数据格式转换**: 将日期时间字段转换为统一格式,以便后续处理。 3. **异常处理**: 对于缺失或异常的数据进行标记或剔除,以保证整体数据的一致性和可靠性。 #### 数据转换与写入 在完成初步的数据清洗后,可以将处理后的数据转换为目标系统所需的格式,并写入目标数据库或系统。在此过程中,可以利用轻易云平台提供的多种工具和功能,如映射、转换规则等,实现高效的数据处理。 例如,将清洗后的调拨单信息写入金蝶系统时,可以根据金蝶系统的要求,对字段进行重新命名或格式调整,并通过API接口将数据推送到金蝶系统中。 通过以上步骤,我们可以实现从旺店通到金蝶系统的数据无缝对接,确保每个环节都透明可控,提高业务效率和准确性。 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/S24.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现旺店通到金蝶云星辰V2的调拨单ETL转换 在数据集成生命周期的第二阶段,我们将重点探讨如何将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星辰V2 API接口所能够接收的格式,并最终写入目标平台。本文将详细介绍如何配置和使用元数据,以实现这一过程。 #### 配置元数据 首先,我们需要了解金蝶云星辰V2 API接口的元数据配置。以下是我们需要配置的字段及其描述: ```json { "api": "/jdy/v2/scm/inv_tfout", "method": "POST", "idCheck": true, "request": [ {"field": "bill_date", "label": "出库日期,格式:2019-01-01", "type": "string", "describe": "出库日期,格式:2019-01-01", "value": "{{created|date}}"}, {"field": "dept_id", "label": "调入部门", "type": "string", "describe": "调入部门"}, {"field": "out_dept_id", "label": "调出部门", "type": "string", "describe": "调出部门"}, {"field": "remark", "label": "单据备注", "type": "string", "describe": "单据备注"}, {"field": "trans_fer_status", "label":"调拨状态,0:未出库(默认),1:未入库,2:部分入库,3:全部入库", "type":"string","describe":"调拨状态,0:未出库(默认),1:未入库,2:部分入库,3:全部入库","value":"3" }, {"field":"trans_type","label":"业务类型,1:同价调拨(默认),2:异价调拨","type":"string","describe":"业务类型,1:同价调拨(默认),2:异价调拨","value":"1"}, {"field":"material_entity","label":"商品分录","type":"array","describe":"商品分录","children":[ {"field":"material_id","label":"商品","type":"string","describe":"商品", "value":"_findCollection find id from 1fbda962-66f8-3cba-914f-26119e235199 where number={{details_list.spec_no}}", "parent":"material_entity" }, {"field":"in_stock_id","label":"调入仓库","type":"string","describe":"调入仓库", "value":"_findCollection find id from 5b656ff0-ec9e-3dd3-be0e-c505c356836d where name={to_warehouse_name}", "parent":"material_entity" }, {"field":"in_sp_id","label":"调入仓位,启用了仓位管理则必填","type":"string","describe":"调入仓位,启用了仓位管理则必填","parent":"material_entity"}, {"field":"out_stock_id","label":"调出仓库","type":"string","describe":"调出仓库", "value":"_findCollection find id from 5b656ff0-ec9e-3dd3-be0e-c505c356836d where name={from_warehouse_name}", "parent":"material_entity" }, {"field":"out_sp_id","label":"调出仓位,启用了仓位管理则必填","type":"string","describe":"调出仓位,启用了仓位管理则必填","parent": "material_entity" }, {"field": "aux_prop_id", "label": "辅助属性;辅助属性商品必填", "type": "string", "describe": "辅助属性;辅助属性商品必填", "parent": "material_entity" }, {"field": "batch_no", "label": "批次号,批次商品必填", "type": "string", "describe": "批次号,批次商品必填", "value": "{{details_list.batch_no}}", "parent": "material_entity" }, {"field": "pro_place", label: 产地, type: string, describe: 产地, parent: material_entity }, { field: pro_reg_no, label: 生产许可证号, type: string, describe: 生产许可证号, parent: material_entity }, { field: pro_license, label: 注册许可证号, type: string, describe: 注册许可证号, parent: material_entity }, { field: qty, label: 数量, type: string, describe: 数量, value: {{details_list.num}}, parent: material_entity } ], value:"details_list"} ] } ``` #### 数据清洗与转换 在进行ETL转换时,我们需要确保从旺店通获取的数据能够符合金蝶云星辰V2 API接口所要求的格式。这包括对字段的映射、数据类型的转换以及必要的数据清洗。 1. **字段映射**: - `bill_date` 映射为 `created` 字段并转换为日期格式。 - `dept_id` 和 `out_dept_id` 分别对应于源数据中的相应字段。 - `remark` 对应于源数据中的备注信息。 - `trans_fer_status` 固定为 `3` 表示全部入库。 - `trans_type` 固定为 `1` 表示同价调拨。 2. **数组处理**: - 对于 `material_entity` 字段,需要遍历源数据中的 `details_list` 列表,并对每个子项进行相应字段的映射和转换。 3. **查找与替换**: - 使用 `_findCollection` 方法从指定集合中查找对应的ID,例如通过 `spec_no` 查找 `material_id`。 #### 示例代码 以下是一个示例代码片段,用于实现上述ETL转换逻辑: ```python import requests import json # 假设我们已经从旺店通获取了源数据 source_data = { # 源数据结构... } # 构建请求体 request_body = { 'bill_date': source_data['created'].strftime('%Y-%m-%d'), 'dept_id': source_data['dept_in'], 'out_dept_id': source_data['dept_out'], 'remark': source_data['remark'], 'trans_fer_status': '3', 'trans_type': '1', 'material_entity': [] } for item in source_data['details_list']: material = { 'material_id': find_collection('1fbda962-66f8-3cba-914f-26119e235199', item['spec_no']), 'in_stock_id': find_collection('5b656ff0-ec9e-3dd3-be0e-c505c356836d', item['to_warehouse_name']), 'out_stock_id': find_collection('5b656ff0-ec9e-3dd3-be0e-c505c356836d', item['from_warehouse_name']), 'batch_no': item['batch_no'], 'qty': item['num'] } request_body['material_entity'].append(material) # 发起POST请求 response = requests.post( url='https://api.kingdee.com/jdy/v2/scm/inv_tfout', headers={'Content-Type': 'application/json'}, data=json.dumps(request_body) ) # 检查响应状态码和内容 if response.status_code == 200: print("Data successfully written to Kingdee Cloud.") else: print(f"Failed to write data. Status code: {response.status_code}, Response content: {response.content}") ``` #### 总结 通过上述步骤,我们成功地将旺店通的数据进行了清洗和转换,使其符合金蝶云星辰V2 API接口的要求,并最终完成了数据写入。该过程展示了如何利用轻易云数据集成平台提供的元数据配置,实现不同系统间的数据无缝对接。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)