轻松实现数据集成:将吉客云数据写入金蝶云星空API

  • 轻易云集成顾问-卢剑航
### 吉客云与金蝶云星空的无缝对接:实现JY-BDS其他入库单 在系统集成项目中,数据的精准流转和实时监控至关重要。本案例将重点介绍如何利用轻易云数据集成平台,实现吉客云中的“其他入库单”数据(通过API `erp.storage.goodsdocin` 获取),批量写入到金蝶云星空(使用API `batchSave`) 的技术方案。 为了确保高效的数据处理,我们采用了以下几项关键技术: 1. **高吞吐量支持**:吉客云的海量“其他入库单”数据能够快速被整合,保证了业务处理的时效性。这一能力尤为重要,因为它直接影响到企业库存管理和财务核算的效率。 2. **集中监控与告警系统**:在整个集成过程中,通过集中式监控和告警功能,可以实时跟踪任务状态、性能瓶颈及异常情况。这不仅提高了问题发现速度,还大幅度减少了意外停机时间,提高整体可靠性。 3. **自定义转换逻辑**:针对吉客云与金蝶云星空之间可能存在的数据格式差异,我们设计并实现了一套灵活且可定制化的数据转换逻辑,以适应不同业务需求。此举有效避免了因格式不匹配引起的数据错误。 4. **批量操作与分页限流策略**:为了充分利用API资源,在获取吉客云接口数据时,引入分页限流机制。同时,确保在调用金蝶云星空`batchSave`接口时,能顺利执行批量写入操作,从而优化整体性能表现。 5. **完善的错误重试机制**:鉴于网络或服务端的不确定因素,我们还设计了一套完整的异常处理及错误重试机制,以便在遇到问题时可以自动进行修复尝试,这样有助于最大限度地保障数据传输过程中的稳定性和完整性。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/D27.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口获取并加工数据的技术案例 在数据集成过程中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用吉客云接口`erp.storage.goodsdocin`,获取并加工入库单数据。 #### 接口概述 吉客云提供的`erp.storage.goodsdocin`接口用于获取入库单信息。该接口采用POST请求方式,支持分页查询,并允许根据多种条件进行筛选。以下是元数据配置的详细信息: ```json { "api": "erp.storage.goodsdocin", "method": "POST", "number": "goodsdocNo", "id": "recId", "pagination": { "pageSize": 50 }, "idCheck": true, "request": [ {"field":"pageIndex","label":"分页页码","type":"string"}, {"field":"pageSize","label":"分页页数","type":"string","value":"50"}, {"field":"goodsDocNo","label":"入库单号","type":"string"}, {"field":"startDate","label":"创建时间的起始时间","type":"string","value":"{{DAYS_AGO_2|datetime}}"}, {"field":"endDate","label":"创建时间的结束时间","type":"string","value":"{{CURRENT_TIME|datetime}}"}, {"field":"inouttype","label":"入库类型","type":"string","describe":"入库类型(100-期初库存 101-采购入库 102-调拨入库 103-盘盈入库 104-其他入库 105-销售退货 106-完工入库 107-组装拆卸入库 108-翻新入库 109-报废入库 110-残次品入库111-成本调整 112-即采即入113-退料入库114-调拨退回115-维修返厂返还)","value":"104"}, {"field":"warehouseCode","label":"仓库编号","type":"string"}, {"field":"vendCode","label":"供应商编码","type":"string"}, {"field":"billNo","label":"上游单据号(关联单号)","type":"string"}, {"field":"userName","label":"创建人名称","type":"string"} ] } ``` #### 数据请求与清洗 在调用该接口时,需要构建请求体,并根据业务需求设置相应的参数。以下是一个典型的请求示例: ```json { "pageIndex": "1", "pageSize": "50", "startDate": "{{DAYS_AGO_2|datetime}}", "endDate": "{{CURRENT_TIME|datetime}}", "inouttype": "104" } ``` 在这个请求中,我们设置了分页参数`pageIndex`和`pageSize`,以及时间范围参数`startDate`和`endDate`。此外,我们指定了`inouttype`为"104",表示查询其他入库类型的数据。 #### 数据转换与写入 获取到原始数据后,需要对其进行清洗和转换,以便后续处理。例如,可以对日期格式进行标准化处理,对字段名称进行映射等。以下是一个简单的数据转换示例: ```python def transform_data(raw_data): transformed_data = [] for record in raw_data: transformed_record = { 'record_id': record['recId'], 'document_number': record['goodsdocNo'], 'created_at': standardize_date(record['createTime']), 'warehouse_code': record['warehouseCode'], 'vendor_code': record['vendCode'], 'creator_name': record['userName'] } transformed_data.append(transformed_record) return transformed_data ``` 在这个示例中,我们将原始记录中的字段进行了重命名,并对日期格式进行了标准化处理。 #### 实际应用案例 假设我们需要集成吉客云的其他入库单数据到我们的系统中,可以按照以下步骤操作: 1. **构建请求体**:根据业务需求设置查询条件。 2. **发送请求**:通过轻易云平台发送POST请求到吉客云接口。 3. **接收响应**:获取返回的数据并进行初步验证。 4. **数据清洗**:对接收到的数据进行清洗和转换。 5. **写入目标系统**:将处理后的数据写入目标系统。 以下是一个实际应用中的代码片段: ```python import requests def fetch_goodsdocin_data(page_index): url = 'https://api.jikecloud.com/erp.storage.goodsdocin' payload = { 'pageIndex': str(page_index), 'pageSize': '50', 'startDate': '{{DAYS_AGO_2|datetime}}', 'endDate': '{{CURRENT_TIME|datetime}}', 'inouttype': '104' } response = requests.post(url, json=payload) if response.status_code == 200: return response.json() else: raise Exception(f"Failed to fetch data: {response.status_code}") # 获取第一页的数据 raw_data = fetch_goodsdocin_data(1) # 数据清洗和转换 cleaned_data = transform_data(raw_data) # 将清洗后的数据写入目标系统(此处省略具体实现) write_to_target_system(cleaned_data) ``` 通过以上步骤,我们可以高效地从吉客云获取其他入库单数据,并将其集成到我们的系统中。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/S18.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口 在轻易云数据集成平台中,数据集成的第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。以下是详细的技术实现过程。 #### 配置元数据 根据提供的元数据配置,我们需要将源数据转换为金蝶云星空API接口所需的数据格式。该配置文件定义了各个字段的映射关系、类型和必要的转换规则。 ```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": "单据类型", ... } ], ... } ``` #### 数据转换与写入 1. **单据编号 (FBillNo)**: - 源字段:`goodsdocNo` - 转换:直接映射,无需额外处理。 2. **单据类型 (FBillTypeID)**: - 固定值:`QTRKD01_SYS` - 转换:使用 `ConvertObjectParser` 将其转换为目标系统识别的格式。 3. **库存组织 (FStockOrgId)**: - 源字段:`warehouseCode` - 转换:通过 `_findCollection` 方法从指定集合中查找匹配值,并使用 `ConvertObjectParser` 转换。 4. **库存方向 (FStockDirect)**: - 固定值:`GENERAL` - 转换:直接映射,无需额外处理。 5. **日期 (FDate)**: - 源字段:`inOutDate` - 转换:使用 `_function FROM_UNIXTIME` 将时间戳转换为标准日期格式。 6. **部门 (FDEPTID)**: - 源字段:`departCode` - 转换:使用 `ConvertObjectParser` 将其转换为目标系统识别的格式。 7. **货主 (FOwnerIdHead)**: - 源字段:`companyCode` - 转换:使用 `ConvertObjectParser` 将其转换为目标系统识别的格式。 8. **备注 (FNOTE)**: - 源字段:`comment` - 转换:直接映射,无需额外处理。 9. **吉客云单据编号 (F_JKBillNo)**: - 源字段:`goodsdocNo` - 转换:直接映射,无需额外处理。 10. **其他入库原因 (F_QKZI_Assistant)**: - 源字段:`inOutReason` - 转换:通过 `_findCollection` 方法从指定集合中查找匹配值,并使用 `ConvertObjectParser` 转换。 11. **明细信息 (FEntity)**: 明细信息包含多个子字段,每个子字段需要分别进行处理。 a. **物料编码 (FMATERIALID)**: - 源字段:`goodsDocDetailList.goodsNo` - 转换:使用 `ConvertObjectParser` 将其转换为目标系统识别的格式。 b. **收货仓库 (FSTOCKID)**: - 源字段:`warehouseCode` - 转换:使用 `ConvertObjectParser` 将其转换为目标系统识别的格式。 c. **实收数量 (FQty)**: - 源字段:`goodsDocDetailList.quantity` - 转换:直接映射,无需额外处理。 d. **备注 (FEntryNote)**: - 源字段:`goodsDocDetailList.rowRemark` - 转换:直接映射,无需额外处理。 #### API请求构建 根据上述配置和转换规则,构建最终的API请求: ```json { "FormId": "STK_MISCELLANEOUS", ... "Model": { ... { ... { ... { ... } } } } } ``` #### 提交与审核 最后,将构建好的请求通过POST方法提交至金蝶云星空API接口,并设置自动提交与审核参数: ```json { ... "IsAutoSubmitAndAudit": true } ``` 通过以上步骤,我们实现了将源平台的数据经过ETL转换后,成功写入到金蝶云星空API接口。 ![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/T14.png~tplv-syqr462i7n-qeasy.image)