金蝶云星辰V2与轻易云平台的数据对接与转换技巧

  • 轻易云集成顾问-林峰
### 案例分享:金蝶云星辰V2数据集成到轻易云数据集成平台 在本案例中,我们将详细展示如何有效地实现金蝶云星辰V2的销售订单数据集成到轻易云数据集成平台。这一实践方案被命名为“查询金蝶销售订单-线下-ok”,旨在确保系统对接过程中的高效、可靠与精准。 我们主要关注以下几个技术关键点: #### 如何调用金蝶云星辰V2接口 /jdy/v2/scm/sal_order 为了从金蝶云星辰V2获取需要的销售订单数据,首先需要准确调用其API接口。通过配置适当的请求参数和认证信息,可以稳定地抓取到相应的数据。此外,还要处理分页问题,以便能够获取所有记录而不停留在默认页大小限制内。 #### 定时可靠的抓取机制 使用定时任务来触发接口访问,实现自动化的数据同步是本次方案的重要组成部分。通过设置合适的时间间隔,确保每个时间段内都能及时抓取最新的数据。同时,为了保障系统运行连续性,需要设计一个错误重试机制,以防止因网络抖动或其他原因导致的数据丢失。 #### 批量集成与快速写入 对于大规模的销售订单数据,单条逐步写入显然效率低下。因此,我们将采用批量处理方式,将大量记录一次性快速写入轻易云集成平台。这不仅提高了操作效率,也减小了数据库压力。在此期间,对处理速度和完整性的监控显得尤为重要。 #### 数据格式转换及映射对接 两个系统之间的数据格式一般存在差异,为了解决这个问题,本案例会示范如何利用轻易云的平台特性进行灵活配置,以实现字段映射和格式转换。例如,将API返回的JSON对象解析并匹配对应表结构字段,再统一转化为目标格式进行存储。 这些步骤奠定了整个项目质量与稳定性的基础;后续文章内容将进一步细化每一步骤中的具体实施方法,以及相关代码实例和注意事项,通过这种详尽的方法指导,让您能够顺利完成类似系统对接任务。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/D37.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星辰V2接口获取并加工数据 在数据集成的生命周期中,第一步是调用源系统接口获取数据。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星辰V2接口`/jdy/v2/scm/sal_order`来获取销售订单数据,并进行初步加工。 #### 接口概述 金蝶云星辰V2提供了丰富的API接口用于数据交互。我们使用的接口`/jdy/v2/scm/sal_order`主要用于查询销售订单信息。该接口支持GET请求,能够根据多种条件进行查询,返回符合条件的销售订单列表。 #### 元数据配置解析 元数据配置是实现接口调用和数据处理的关键。以下是针对该接口的元数据配置解析: ```json { "api": "/jdy/v2/scm/sal_order", "effect": "QUERY", "method": "GET", "number": "bill_no", "id": "id", "name": "{random}", "idCheck": true, "request": [ {"field": "search", "label": "模糊搜索", "type": "string", "describe": "模糊搜索"}, {"field": "create_start_time", "label": "创建时间(毫秒)", "type": "string", "describe": "创建时间-开始时间的时间戳(毫秒)"}, {"field": "create_end_time", "label": "创建结束时间(毫秒)", "type": "string", "describe": "创建时间-结束时间的时间戳(毫秒)"}, {"field": "modify_start_time", "label": "修改时间(毫秒)", "type": "string", "describe": "修改时间-开始时间的时间戳(毫秒)", "value":"{LAST_SYNC_TIME}000" }, {"field": "modify_end_time", "label":"修改时间(毫秒)", "type":"string", "describe":"修改时间-结束时间的时间戳(毫秒)", "value":"{CURRENT_TIME}000" }, {"field":"page","label":"当前页,默认1","type":"string","describe":"当前页,默认1","value":"1"}, {"field":"page_size","label":"每页显示条数默认10","type":"string","describe":"每页显示条数默认10","value":"100"}, {"field":"start_bill_date","label":"开始日期","type":"string","describe":"开始日期(格式:“yyyy-MM-dd”,为空表示不过滤),单据日期"}, {"field":"end_bill_date","label":"结束日期","type":"string","describe":"结束日期(格式:“yyyy-MM-dd”,为空表示不过滤),单据日期"}, {"field":"bill_status","label":"单据状态","type":"string","describe":"单据状态(所有:“”,已审核:“C”,未审核:“Z”)","value":"C"}, {"field":"bill_close_state","label":"单据关闭状态","type":"string","describe":"单据关闭状态(所有:“”,未关闭:“C”,已关闭:“S”,手动关闭: H)"}, {"field":"bill_source","label":"单据来源","type":"string","describe":"单据来源;[说明](# billsource)","value":"APP"}, {"field":"real_io_status","label":"出库状态","type":"string","describe":"出库状态(所有:“”,全部出库:“C”,部分出库:“Z”,未出库:“A”,待出库(=部分出库+未出库):“B”)"}, {"field":"io_status","label":"执行状态","type":"string","describe":"执行状态(所有:“”,全部执行:“C”,部分执行:“Z”,未执行:“A”,待执行(=部分执行+未执行):“B”)"}, {"field':'total_fields','label':'合计值','type':'string','describe':'合计值字段,多个字段用英文逗号隔开,支持的字段:total(默认:价税合计)、totalunsettleamount(未收金额)、totalinsamount(收款合计)、totalamount(本次应收账款)'}, {"field':'order_by','label':'排序说明','type':'string','describe':'排序说明[下面解析](# orderby排序说明)'}, {"field':'show_material_total','label':'是否统计商品种类和数量到单据','type':'bool','describe':'是否统计商品种类和数量到单据,默认false'} ], 'otherRequest':[ {"field':'detailAPI','label':'detailAPI','type':'string','value':'/jdy/v2/scm/sal_order_detail'} ], 'autoFillResponse':true, 'beatFlat':['material_entity'] } ``` #### 请求参数详解 1. **search**: 支持模糊搜索,可以输入任意字符串进行匹配。 2. **create_start_time** 和 **create_end_time**: 用于指定订单创建的起止时间,以毫秒为单位。 3. **modify_start_time** 和 **modify_end_time**: 用于指定订单修改的起止时间,以毫秒为单位。这里特别注意,这两个字段使用了动态变量 `{LAST_SYNC_TIME}` 和 `{CURRENT_TIME}` 来自动填充最近一次同步到当前时刻的数据。 4. **page** 和 **page_size**: 分页参数,分别表示当前页码和每页显示的数据条数。 5. **start_bill_date** 和 **end_bill_date**: 单据日期范围,用于过滤特定日期范围内的订单。 6. **bill_status**: 单据状态,这里默认设置为已审核状态“C”。 7. **bill_close_state**: 单据关闭状态,可选值包括未关闭“C”、已关闭“S”和手动关闭“H”。 8. **bill_source**: 单据来源,这里设置为“APP”。 9. **real_io_status** 和 **io_status**: 分别表示出库状态和执行状态,可以根据需求选择不同的过滤条件。 10. **total_fields**: 合计值字段,可以选择多个字段进行合计计算,如价税合计、未收金额等。 11. **order_by**: 排序说明,用于指定返回结果的排序方式。 12. **show_material_total**: 是否统计商品种类和数量到单据,默认为false。 #### 实际应用案例 假设我们需要查询最近一个月内所有已审核且来源为APP的销售订单,并且分页显示,每页100条记录。我们可以通过以下请求参数来实现: ```json { 'create_start_time': '1693564800000', // 假设这是一个月前的时间戳 'create_end_time': '1696156800000', // 当前时间戳 'bill_status': 'C', 'bill_source': 'APP', 'page': '1', 'page_size': '100' } ``` 通过上述配置,我们可以调用金蝶云星辰V2接口获取符合条件的数据,并在轻易云平台上进行后续的数据清洗、转换与写入操作。 #### 数据清洗与加工 在获取到原始数据后,我们通常需要对其进行清洗和加工。例如,可以对某些字段进行格式化处理、去除无效记录或计算新的派生字段。这一步骤可以通过轻易云平台提供的数据处理工具来实现。 总之,通过合理配置元数据和请求参数,我们能够高效地从金蝶云星辰V2系统中提取所需的数据,为后续的数据处理与分析奠定基础。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/S13.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现ETL转换与写入目标平台 在数据集成过程中,ETL(Extract, Transform, Load)是关键的一步。本文将详细探讨如何使用轻易云数据集成平台将已经集成的源平台数据进行ETL转换,并通过API接口将其写入目标平台。 #### 数据请求与清洗 首先,我们从金蝶系统中查询销售订单数据。假设我们已经完成了数据的请求和初步清洗,获得了一个结构化的数据集。此时的数据可能包含多个字段,如订单编号、客户名称、产品详情等。 #### 数据转换 接下来,我们需要对这些数据进行转换,以符合目标平台API接口所要求的格式。根据提供的元数据配置,我们需要将源数据中的字段映射到目标API所需的字段。 元数据配置如下: ```json { "api": "写入空操作", "effect": "EXECUTE", "method": "POST", "number": "number", "id": "id", "name": "编码", "idCheck": true } ``` 从元数据配置可以看出,目标API接口需要以下几个字段: - `number`: 对应源数据中的订单编号 - `id`: 对应源数据中的唯一标识符 - `name`: 对应源数据中的编码 此外,`idCheck`属性为`true`,意味着在写入之前需要检查ID是否已存在,以避免重复写入。 #### 数据映射示例 假设我们从金蝶系统获取到的销售订单数据如下: ```json [ { "order_number": "SO12345", "customer_name": "ABC Corp", "product_details": [ {"product_id": "P001", "quantity": 10}, {"product_id": "P002", "quantity": 5} ], "order_id": "OID12345" } ] ``` 根据元数据配置,我们需要将上述数据转换为目标API所需的格式: ```json [ { "number": "SO12345", "id": "OID12345", "name": "" } ] ``` 注意:此处`name`字段为空,因为原始数据中没有直接对应的编码信息。如果有,需要进行适当映射。 #### 数据写入 完成转换后,通过轻易云集成平台提供的API接口,将转换后的数据写入目标平台。具体步骤如下: 1. **构建HTTP请求**: - URL: 根据元数据配置中的`api`字段,构建请求URL。 - 方法: 使用POST方法。 - 请求体: 包含转换后的JSON数据。 2. **发送请求**: 使用轻易云提供的HTTP客户端或其他工具(如Postman)发送HTTP请求。 3. **处理响应**: 检查响应状态码和返回结果,确保写入成功。如果`idCheck`为真,需要在发送前先查询是否存在相同ID的数据,以避免重复写入。 示例代码(Python): ```python import requests import json url = 'https://api.qingyiyun.com/execute' headers = {'Content-Type': 'application/json'} data = [ { 'number': 'SO12345', 'id': 'OID12345', 'name': '' } ] response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print('Data written successfully') else: print('Failed to write data:', response.text) ``` 通过以上步骤,我们实现了从金蝶系统获取销售订单、进行ETL转换并通过API接口将其写入目标平台。这一过程充分利用了轻易云集成平台的数据处理能力和灵活性,实现了高效的数据集成和管理。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/T9.png~tplv-syqr462i7n-qeasy.image)