高效实现双系统数据交互:从旺店通到金蝶云星辰V2

  • 轻易云集成顾问-姚缘
### 其他入库(其他)V2.0:旺店通·企业奇门数据集成到金蝶云星辰V2的技术分享 在实施系统对接和数据集成时,确保数据的准确性和高效传输是至关重要的。在这篇文章中,我们将重点探讨如何利用API接口将旺店通·企业奇门的数据高效、安全地集成到金蝶云星辰V2。具体案例命名为“其他入库(其他)V2.0”。 首先,通过调用旺店通·企业奇门的`wdt.stockin.order.query`接口,我们可以获取所需的数据。这一接口支持分页查询,因此需要处理相应的分页逻辑和限流问题,以避免请求过载。同时,为了确保不漏单,每次抓取都必须精确记录上一次同步的位置,并设置定时抓取机制以保证数据实时更新。 在获取旺店通的数据后,下一步就是快速、大量地写入到金蝶云星辰V2,这里我们使用的是其提供的`/jdy/v2/scm/inv_other_in` API进行写操作。为了匹配两端的数据格式,需要先进行必要的数据转换与映射。这包括字段对应关系、值域校正等细节工作,使之符合目标系统的要求。 此外,在实际操作中,对接过程中的异常处理与错误重试机制也是必须考虑的一部分。当调用API出现失败或返回错误信息时,应及时捕获并进行日志记录,并根据预设条件自动重试,以尽可能降低人工干预频率,提高系统稳定性。 通过这些配置,不仅能有效解决双系统之间的数据传递,还能实现业务流程全透明化管理,大幅提升整体运行效率。以下章节将详细介绍各个步骤及代码实现,请继续阅读了解更多技术细节。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/D7.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统旺店通·企业奇门接口wdt.stockin.order.query获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockin.order.query`来获取并加工数据。 #### 接口调用配置 首先,我们需要配置接口的元数据。以下是一个典型的元数据配置示例: ```json { "api": "wdt.stockin.order.query", "method": "POST", "number": "order_no", "id": "stockin_id", "pagination": { "pageSize": 50 }, "condition": [ [ { "field": "warehouse_no", "logic": "neq", "value": "WH2024052601" } ] ], "idCheck": true, "request": [ { "field": "start_time", "label": "开始时间", "type": "string", "describe": "按最后修改时间增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{LAST_SYNC_TIME|datetime}}" }, { "field": "end_time", "label": "结束时间", "type": "string", "describe": "按最后修改时间增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{CURRENT_TIME|datetime}}" }, { "field": "order_type", "label": "源单据类别", "type": "string", "describe":"源单据类别 1采购入库, 2调拨入库, 4盘盈入库, 5生产入库, 6其他入库, 7保修入库, 8纠错入库, 9初始化入库,10预入库,11JIT退货入库,12委外入库", "value":"6" }, { "field":"status", ... ``` #### 请求参数详解 1. **开始时间和结束时间**:通过`start_time`和`end_time`字段,我们可以实现按最后修改时间增量获取数据。这两个字段分别使用了动态变量`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`,确保每次调用都能获取最新的数据。 2. **源单据类别**:字段`order_type`用于指定源单据类别。在本案例中,我们设置为“6”,表示其他入库。 3. **状态过滤**:字段`status`用于过滤特定状态的入库单。在本案例中,我们设置为“60,80”,表示待结算和已完成的单据。 4. **仓库编号排除**:通过条件配置,我们排除了仓库编号为“WH2024052601”的记录。 #### 分页处理 为了处理大批量的数据,接口支持分页功能。我们在元数据中配置了分页参数: ```json { ... “otherRequest”: [ { “field”: “page_size”, “label”: “分页大小”, “type”: “string”, “describe”: “每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40”, “value”: “{PAGINATION_PAGE_SIZE}” }, { “field”: “page_no”, “label”: “页号”, “type”: “string”, “describe”: “不传值默认从0页开始”, “value”: “{PAGINATION_START_PAGE}” } ] } ``` 通过设置分页大小和页号,可以有效地控制每次请求返回的数据量,从而避免一次性拉取大量数据导致的性能问题。 #### 数据清洗与转换 在获取到原始数据后,需要进行清洗与转换,以满足目标系统的需求。常见的数据清洗操作包括: - **字段映射**:将源系统中的字段映射到目标系统中的对应字段。 - **格式转换**:例如,将日期格式从“yyyy-MM-dd HH:mm:ss”转换为目标系统所需的格式。 - **数据过滤**:根据业务规则过滤掉不需要的数据记录。 #### 实时监控与日志记录 为了确保数据集成过程的透明度和可追溯性,实时监控和日志记录是必不可少的。轻易云平台提供了详细的日志记录功能,可以实时监控每个接口调用的状态、请求参数及响应结果,从而快速定位并解决问题。 通过上述步骤,我们可以高效地调用旺店通·企业奇门接口`wdt.stockin.order.query`获取并加工所需的数据,为后续的数据处理和写入打下坚实基础。 ![打通企业微信数据接口](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image) ### 将源平台数据转换并写入金蝶云星辰V2API接口的技术案例 在数据集成过程中,ETL(Extract, Transform, Load)是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台将源平台的数据进行ETL转换,并通过金蝶云星辰V2API接口写入目标平台。 #### 元数据配置解析 首先,我们来看一下元数据配置: ```json { "api": "/jdy/v2/scm/inv_other_in", "effect": "EXECUTE", "method": "POST", "number": "id", "id": "id", "name": "id", "idCheck": true, "request": [ { "field": "bill_date", "label": "单据日期", "type": "string", "value": "{stockin_time}" }, { "field": "bill_no", "label": "单据编码", "type": "string", "value": "{order_no}" }, { "field": "trans_type_id", "label": "业务类型id", "type": "string", "value": "12" }, { "field": "operation_key", "label": "操作类型", "type": "string", "value": "audit" }, { ... } ] } ``` #### 数据请求与清洗 在数据请求阶段,我们需要从源系统中提取原始数据。假设我们已经完成了这一步,接下来我们需要对这些数据进行清洗和转换,以符合目标系统的要求。 #### 数据转换与写入 为了将清洗后的数据转换为金蝶云星辰V2API接口所能接收的格式,我们需要按照元数据配置中的要求进行字段映射和处理。 1. **单据日期(bill_date)**: - 从源数据中提取`stockin_time`字段,并将其映射到`bill_date`。 2. **单据编码(bill_no)**: - 从源数据中提取`order_no`字段,并将其映射到`bill_no`。 3. **业务类型ID(trans_type_id)**: - 固定值为"12",表示特定的业务类型。 4. **操作类型(operation_key)**: - 固定值为"audit",表示审核操作。 5. **商品分录(material_entity)**: - 商品分录是一个数组,每个分录包含多个字段,如商品ID、数量、单位和仓库等。 - 对于每个商品分录,需要执行以下操作: - **商品ID(material_id)**:通过MongoDB查询,根据`details_list.goods_no`找到对应的商品ID。 - **数量(qty)**:直接从`details_list.goods_count`获取。 - **单位(unit_id)**:通过MongoDB查询,根据`details_list.goods_no`找到对应的单位ID。 - **仓库(stock_id)**:通过集合查询,根据`details_list.warehouse_no`找到对应的仓库ID。 #### 示例代码 以下是一个示例代码片段,用于展示如何实现上述转换逻辑: ```python import requests import json # 假设我们已经从源系统获取了原始数据 source_data = { 'stockin_time': '2023-10-01', 'order_no': 'ORD123456', 'details_list': [ { 'goods_no': 'G001', 'goods_count': '100', 'warehouse_no': 'W001' } # 可以有更多的商品分录 ] } # 构建请求体 request_body = { 'bill_date': source_data['stockin_time'], 'bill_no': source_data['order_no'], 'trans_type_id': '12', 'operation_key': 'audit', 'material_entity': [] } # 模拟MongoDB查询和集合查询 def mongo_query(goods_no): # 模拟返回结果 return {'material_id': f'MID_{goods_no}', 'unit_id': f'UNIT_{goods_no}'} def collection_query(warehouse_no): # 模拟返回结果 return f'STOCK_{warehouse_no}' # 构建商品分录部分 for detail in source_data['details_list']: material_info = mongo_query(detail['goods_no']) material_entry = { 'material_id': material_info['material_id'], 'qty': detail['goods_count'], 'unit_id': material_info['unit_id'], 'stock_id': collection_query(detail['warehouse_no']) } request_body['material_entity'].append(material_entry) # 发起POST请求到金蝶云星辰V2API接口 api_url = '/jdy/v2/scm/inv_other_in' headers = {'Content-Type': 'application/json'} response = requests.post(api_url, headers=headers, data=json.dumps(request_body)) # 打印响应结果 print(response.status_code) print(response.json()) ``` 以上代码展示了如何根据元数据配置,将源平台的数据进行ETL转换,并最终通过POST请求写入到金蝶云星辰V2API接口。通过这种方式,可以确保不同系统间的数据无缝对接,实现高效的数据集成。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)