企业数据集成案例:金蝶与管易WMS接口开发

  • 轻易云集成顾问-杨嫦
### 金蝶云星空与管易云数据集成技术案例分享 在实际业务运作中,如何高效地将金蝶云星空系统中的调出单数据实时、准确地集成到管易云的其它出库单成为了许多企业关注的焦点。通过采用轻易云的数据集成平台,我们实现了一套高效可靠的数据对接方案:金蝶分步式调出单-->管易其它出库单(京东自营)。 本次案例中,我们聚焦于利用金蝶云星空提供的`executeBillQuery` API接口来获取调出单数据,并通过调用管易云的`gy.erp.stock.other.out.add` API接口将这些数据批量写入到目标系统。 为了确保整个过程稳定和高效运行,我们实施了一系列关键技术措施: 1. **定时可靠的数据抓取**:我们配置了定时任务,通过周期性调用 `executeBillQuery` 接口,持续抓取最新调出单记录。结合轻易云的平台特性,实现了短时间内大批量数据快速拉取,提高了整体处理效率。 2. **实时监控与日志记录**:为确保整个数据传输链路不出现漏单问题,我们启用了全面的监控和日志功能。不仅可以实时跟踪每个API请求和响应状态,还能在异常发生时立即告警并进行自动重试,有效提升了系统稳定性。 3. **分页与限流处理**:针对金蝶云星空接口返回的大量分页数据,我们设置合理的限流策略,通过按页逐步加载和处理,使得即便在高负载情况下也能保障系统平稳运行,不会遗漏任何一条关键业务数据。 4. **自定义映射及转换逻辑**:由于两个系统之间存在不同的数据格式要求,特别是字段名称和类型有所差异,因此我们使用平台提供的可视化设计工具,对从金蝶提取出的JSON结构进行了必要转化,以适应管易API所需格式,实现无缝对接。 5. **集中监控和告警机制**:为了进一步提高透明度并及时发现潜在问题,每一个重要环节都设置了详细的性能指标监控,可以随时查看当前队列积压情况、最近一次成功或失败调用的信息等。同时,一旦检测到任何异常,将立刻触发告警通知相关维护人员进行排查修复。 至此,该案例解决方案已经搭建完成。下面将详细解读各步骤具体实现细节,包括如何配置轻易平台任务、编写ETL脚本及应对常见错误场景的方法。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/D19.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在轻易云数据集成平台中,调用源系统的API接口是数据处理生命周期的第一步。本文将详细探讨如何通过调用金蝶云星空的`executeBillQuery`接口来获取并加工数据,以实现从金蝶分步式调出单到管易其它出库单(京东自营)的数据集成。 #### 接口配置与请求参数 首先,我们需要配置元数据以调用`executeBillQuery`接口。根据提供的元数据配置,以下是关键参数及其含义: - **api**: `executeBillQuery` - **method**: `POST` - **number**: `FBillNo` - **id**: `FSTKTRSOUTENTRY_FEntryID` - **idCheck**: `true` 请求参数包括实体主键、单据编号、备注等字段。这些字段在请求体中作为JSON对象发送给金蝶云星空接口。 ```json { "FID": "实体主键", "FBillNo": "单据编号", "FEntryNote": "备注", "FSTKTRSOUTENTRY_FEntryID": "FEntryID", "F_UQRW_BaseProperty1": "仓库外部码", "F_UQRW_BaseProperty": "物料外部码", "FQty": "调出数量", "FMaterialID": "物料编码", "F_UQRW_DCCKLX": "调出仓库类型" } ``` 此外,还有一些其他请求参数用于分页和过滤,例如: - **Limit**: 最大行数 - **StartRow**: 开始行索引 - **TopRowCount**: 返回总行数 - **FilterString**: 过滤条件 - **FieldKeys**: 查询字段key集合 - **FormId**: 表单ID(例如:`STK_TRANSFEROUT`) #### 数据请求与清洗 在调用API时,我们需要特别注意分页和过滤条件的设置,以确保获取的数据符合业务需求。例如,使用`FilterString`可以设置特定时间范围内的数据: ```json { "FilterString": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'" } ``` 这段代码表示仅查询审批日期大于上次同步时间的数据。分页参数则确保我们能够处理大量数据而不会遗漏: ```json { "Limit": "{PAGINATION_PAGE_SIZE}", "StartRow": "{PAGINATION_START_ROW}" } ``` #### 数据转换与写入 一旦成功获取到数据,我们需要对其进行清洗和转换,以便写入目标系统。在这个过程中,可以利用轻易云平台提供的自动填充响应功能(autoFillResponse),确保返回的数据格式化正确。 例如,将金蝶返回的数据映射到管易系统所需的字段格式: ```json { "FBillNo": "{{response.FBillNo}}", "FMaterialID": "{{response.FMaterialID}}", ... } ``` 这种映射方式确保了不同系统之间的数据无缝对接。 #### 实际案例分析 假设我们需要从金蝶分步式调出单中提取所有调出数量大于100的记录,并将其写入管易其它出库单。我们可以设置如下过滤条件: ```json { "FilterString": "FQty > '100'" } ``` 然后,通过API调用获取符合条件的数据,并进行必要的转换和清洗,最终写入目标系统。 #### 技术要点总结 1. **接口配置**:准确配置API接口及其请求参数。 2. **分页与过滤**:合理设置分页和过滤条件以优化数据请求。 3. **数据清洗与转换**:利用平台提供的工具进行数据清洗和格式转换。 4. **自动填充响应**:确保返回的数据格式化正确,便于后续处理。 通过上述步骤,我们可以高效地实现从金蝶分步式调出单到管易其它出库单(京东自营)的数据集成,为业务流程提供强有力的支持。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/S12.png~tplv-syqr462i7n-qeasy.image) ### 数据集成:从金蝶调出单到管易云其它出库单的ETL转换 在数据集成生命周期的第二步,我们将重点探讨如何将已经集成的源平台数据(如金蝶分步式调出单)进行ETL转换,转为目标平台(管易云API接口)所能够接收的格式,并最终写入目标平台。以下是详细的技术实现过程。 #### API接口配置 我们使用的是管易云提供的`gy.erp.stock.other.out.add` API接口,该接口用于新增其它出库单。其请求方法为POST,且需要进行ID校验。以下是元数据配置: ```json { "api": "gy.erp.stock.other.out.add", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "warehouse_code", "label": "仓库代码", "type": "string", "describe": "111", "value": "{F_UQRW_BaseProperty1}" }, { "field": "wms_bizcode", "label": "第三方系统单号", "type": "string", "describe": "判断排重的依据", "value": "{FBillNo}" }, { "field": "mail_no", "label": "物流编号", "type": "string", "value": "{FBillNo}" }, { "field": "note", "label": "备注", "type": "string", "describe": "111", "value": "{FEntryNote}" }, { "field": "details", "label": "入库明细", "type": "array", ... ``` #### 数据请求与清洗 在数据请求阶段,我们从金蝶系统中提取相关的数据字段,包括仓库代码、系统单号、物流编号、备注和入库明细等。这些字段在后续步骤中会被清洗和转换,以符合目标平台要求。 例如,金蝶系统中的仓库代码字段`F_UQRW_BaseProperty1`需要映射到管易云API中的`warehouse_code`字段。同样,金蝶系统中的第三方系统单号`FBillNo`需要映射到管易云API中的`wms_bizcode`字段。 #### 数据转换与写入 在数据转换阶段,我们需要将清洗后的数据按照管易云API接口的要求进行格式化。例如,将金蝶系统中的商品代码和数量分别映射到管易云API中的`item_code`和`qty`字段。 ##### 示例代码片段 ```python import requests import json # 定义请求URL和头部信息 url = 'https://api.guanyiyun.com/erp/stock/other/out/add' headers = {'Content-Type': 'application/json'} # 构建请求体 payload = { 'warehouse_code': source_data['F_UQRW_BaseProperty1'], 'wms_bizcode': source_data['FBillNo'], 'mail_no': source_data['FBillNo'], 'note': source_data['FEntryNote'], 'details': [ { 'item_code': item['F_UQRW_BaseProperty'], 'qty': item['FQty'] } for item in source_data['details'] ] } # 将请求体转换为JSON格式 data = json.dumps(payload) # 发起POST请求 response = requests.post(url, headers=headers, data=data) # 检查响应状态码 if response.status_code == 200: print('Data successfully written to Guanyi Cloud') else: print(f'Failed to write data: {response.text}') ``` #### 集成测试与验证 在完成数据转换与写入后,需要进行集成测试以确保数据正确写入目标平台。可以通过调用管易云API查询接口,验证新增的其它出库单是否存在,并检查各字段的数据是否准确无误。 ##### 示例验证代码片段 ```python # 定义查询URL和参数 query_url = 'https://api.guanyiyun.com/erp/stock/other/out/get' query_params = {'wms_bizcode': source_data['FBillNo']} # 发起GET请求 query_response = requests.get(query_url, headers=headers, params=query_params) # 检查响应状态码并解析响应内容 if query_response.status_code == 200: result = query_response.json() if result and result.get('success'): print('Data verification successful') # 可以进一步检查具体字段值是否匹配预期值 else: print(f'Failed to verify data: {query_response.text}') ``` 通过上述步骤,我们成功地将金蝶分步式调出单的数据经过ETL转换后写入了管易云,并进行了有效的验证。这一过程不仅提高了数据处理效率,还确保了不同系统间的数据一致性和准确性。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)