如何使用轻易云平台进行数据ETL并对接金蝶云星空

  • 轻易云集成顾问-贺强
### 吉客云数据集成到金蝶云星空: 组装拆卸入库对接107v2其他入库 在系统集成项目中,确保不同平台之间的数据无缝对接是成功的关键之一。这次我们将分享一个实际运行的案例:如何通过轻易云数据集成平台,实现吉客云与金蝶云星空之间的高效数据联动,特别是针对组装拆卸入库场景。本文将重点探讨在这个过程中使用到的重要方法和技术细节。 为了实现这一目标,我们采用了以下核心方案: 1. **调用吉客云接口`erp.storage.goodsdocin.v2`**: - 确保能够可靠地抓取吉客云中的相关库存数据。尤其是在处理大批量数据时,通过分页机制和限流策略来保证API调用稳定性。 2. **定制化的数据映射及格式转换**: - 吉客云与金蝶云星空的数据结构存在差异,需要进行精准、高效地转换。在这方面,我们利用了自定义映射功能,以确保每条记录都能准确传递,不漏单、不重复。 3. **快速写入大量数据到金蝶云星空(batchSave API)**: - 使用批量保存接口,将整理后的数据高效写入金蝶系统。同时,为应对可能出现的网络波动或接口异常情况,设置了完善的错误重试机制。 4. **实时监控与日志记录**: - 提供透明可视化操作界面,多维度、全方位监控整个流程,从抓取、处理再到存储,每个环节的信息都记录在案。一旦出现问题,可以迅速定位并解决。 下面,让我们深入解析这个系统具体实施过程中的各项技术详情。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D5.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口获取并加工数据的技术案例 在数据集成生命周期的第一步,我们需要调用源系统吉客云的接口`erp.storage.goodsdocin.v2`来获取并加工数据。本文将详细探讨这一过程中的技术细节和实现方法。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。根据提供的metadata,我们可以看到该接口采用POST方法,主要参数包括分页信息、入库单号、更新时间范围等。以下是具体的请求参数配置: ```json { "api": "erp.storage.goodsdocin.v2", "method": "POST", "number": "goodsdocNo", "id": "recId", "pagination": { "pageSize": 10 }, "idCheck": true, "buildModel": true, "request": [ {"field": "pageIndex", "label": "分页页码", "type": "int"}, {"field": "pageSize", "label": "分页页数", "type": "int", "value": 100}, {"field": "goodsDocNo", "label": "入库单号", "type": "string"}, {"field": "gmtModifiedStart", "label": "主表更新时间起始", "type": "string", "value":"_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')"}, {"field": "gmtModifiedEnd", "label":"主表更新时间截至", "type":"string", "value":"_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d %H:%i:%s')"}, {"field":"startDate","label":"创建时间的起始时间","type":"string"}, {"field":"endDate","label":"创建时间的结束时间","type":"string"}, {"field":"inouttype","label":"入库类型","type":"string","describe":"入库类型(100-期初库存 101-采购入库 ... )","value":"107"}, {"field":"warehouseCode","label":"仓库编号","type":"string"}, {"field":"vendCode","label":"供应商编号(往来单位)","type":"string"}, {"field":"billNo","label":"上游单据号(关联单号)","type":"string"}, {"field":"userName","label":"创建人名称","type":"string"}, {"field":"sourceBillNo","label":"原始单号","type":"string"}, {"field":"outBillNo","label":"外部单号","type":"string"}, {"field":"selelctFields", "label":"需要返回的字段,用“,”号拼接,子类用子类名称.属性", ... } ], ... } ``` #### 请求参数详解 1. **分页参数**:`pageIndex`和`pageSize`用于控制分页请求,确保一次性获取的数据量不会过大。 2. **时间范围**:`gmtModifiedStart`和`gmtModifiedEnd`用于指定数据更新时间范围,这里使用了函数计算方式,将当前时间减去一天作为查询区间。 3. **入库类型**:通过设置`inouttype`为107,指定只获取组装拆卸入库的数据。 4. **其他可选参数**:如仓库编号、供应商编号、上游单据号等,可以根据实际需求进行配置。 #### 数据请求与清洗 在完成接口配置后,我们需要编写代码来发起请求并处理返回的数据。以下是一个示例代码片段: ```python import requests import json from datetime import datetime, timedelta # 配置请求头和URL url = 'https://api.jikecloud.com/erp.storage.goodsdocin.v2' headers = {'Content-Type': 'application/json'} # 构建请求体 payload = { 'pageIndex': 1, 'pageSize': 100, 'gmtModifiedStart': (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'), 'gmtModifiedEnd': datetime.now().strftime('%Y-%m-%d %H:%M:%S'), 'inouttype': '107', } # 发起POST请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据清洗与转换逻辑 cleaned_data = [] for record in data['data']: cleaned_record = { 'goodsDocNo': record['goodsDocNo'], 'warehouseCode': record['warehouseCode'], # 添加更多字段清洗逻辑... } cleaned_data.append(cleaned_record) else: print(f"Error: {response.status_code}") # 输出清洗后的数据 print(cleaned_data) ``` #### 数据转换与写入 在完成数据清洗后,我们可以将其转换为目标系统所需的格式,并写入到目标数据库或其他存储系统中。这里简要展示如何将清洗后的数据写入到一个MySQL数据库: ```python import pymysql # 数据库连接配置 db_config = { 'host': 'localhost', 'user': 'root', 'password': '', 'database': 'target_db' } # 建立数据库连接 connection = pymysql.connect(**db_config) cursor = connection.cursor() # 插入数据SQL语句模板 insert_sql = """ INSERT INTO goods_doc_in (goodsDocNo, warehouseCode, ...) VALUES (%s, %s, ...) """ # 批量插入数据 for record in cleaned_data: cursor.execute(insert_sql, ( record['goodsDocNo'], record['warehouseCode'], # 添加更多字段... )) # 提交事务并关闭连接 connection.commit() cursor.close() connection.close() ``` 通过上述步骤,我们实现了从吉客云获取组装拆卸入库数据,并进行清洗、转换和写入目标系统的完整流程。这一过程充分利用了轻易云平台的数据集成能力,实现了不同系统间的数据无缝对接。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/S10.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据ETL转换并写入金蝶云星空API接口 在数据集成过程中,将源平台的数据转换为目标平台能够接收的格式是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并最终写入金蝶云星空API接口。 #### 1. 配置元数据 元数据配置是整个ETL过程的基础,以下是一个详细的元数据配置示例: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{goodsdocNo}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTRKD01_SYS"}, {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{companyCode}"}, {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"GENERAL"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"_function DATE_FORMAT('{inOutDate}', '%Y-%m-%d')"}, {"field":"FDEPTID","label":"部门","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"BM000016"}, {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"多类别基础资料列表","value":"BD_OwnerOrg"}, {"field":"FOwnerIdHead","label":"货主","type":"string","describe":"","parser":{"name":"ConvertObjectParser","params":""},"value":""}, {"field":""}, ... ], "otherRequest":[ {"field":""}, ... ] } ``` #### 2. 数据请求与清洗 在此步骤中,我们从源系统中获取原始数据,并通过轻易云的数据清洗功能对其进行处理,以确保数据质量和一致性。例如,日期字段需要转换为目标系统所需的格式: ```json {"field": "FDate", "label": "日期", "type": "string", "describe": "日期", "value": "_function DATE_FORMAT('{inOutDate}', '%Y-%m-%d')"} ``` 这里使用了`DATE_FORMAT`函数将原始日期格式化为`YYYY-MM-DD`格式。 #### 3. 数据转换与写入 在完成数据清洗后,需要将其转换为金蝶云星空API接口所能接收的格式。以下是具体字段的映射和转换示例: - **单据编号 (FBillNo)**: 从源系统中获取并直接映射到目标字段。 - **单据类型 (FBillTypeID)**: 使用`ConvertObjectParser`进行对象解析,将值转换为金蝶系统识别的编码。 - **库存组织 (FStockOrgId)**: 同样使用`ConvertObjectParser`进行解析。 - **库存方向 (FStockDirect)**: 固定值设置为`GENERAL`。 - **日期 (FDate)**: 使用前述的日期格式化函数进行转换。 - **部门 (FDEPTID)**: 固定值设置为`BM000016`,并使用解析器进行对象转换。 此外,还需要处理明细信息(FEntity)部分,其中包含多个子字段,如物料编码、实收数量、成本价等。这些子字段同样需要根据具体需求进行解析和映射: ```json { "field": "FMATERIALID", "label": "物料编码", "type": "string", ... } ``` #### 4. API调用与提交 配置完成后,通过轻易云的数据集成平台发起HTTP POST请求,将处理后的数据提交到金蝶云星空API接口。以下是一个简化的请求示例: ```json { "FormId": "STK_MISCELLANEOUS", ... } ``` 通过上述配置和操作,可以实现将源平台的数据无缝转化并写入到金蝶云星空系统中,确保业务流程顺畅运行。 ![打通钉钉数据接口](https://pic.qeasy.cloud/T6.png~tplv-syqr462i7n-qeasy.image)