通过轻易云平台进行金蝶云星空的ETL数据转换和写入

  • 轻易云集成顾问-吕修远
### 聚水潭数据集成到金蝶云星空:无信息件线上销售退货对接其他入库ok 在复杂的电商环境中,如何确保多平台间数据的一致性和及时性显得尤为重要。在本案例中,我们将分享一个实际运行的方案——“无信息件线上销售退货对接其他入库ok”,重点聚焦于从聚水潭的数据获取并高效地写入到金蝶云星空系统。通过这个案例,我们希望展示如何解决跨系统数据集成中的常见问题,包括API接口调用、分页处理、限流控制以及异常重试机制等。 首先,在进行数据集成之前,需要可靠且定时地抓取聚水潭的相关接口数据。我们使用了`refund.single.query` API来获取每个退货请求的信息,为了防止漏单情况的发生,设置了一系列动态参数和标记位以确保所有订单都能被准确捕获。一旦收集到这些原始数据信息后,如何迅速有效地大量写入至金蝶云星空成为下一个挑战,这里我们采用了batch处理方式,通过`batchSave` API实现批量提交操作,从而提升性能。 为了适应聚水潭与金蝶云星空之间的数据格式差异,我们实施了一层自定义的数据映射逻辑,并结合实时监控及日志记录功能,有效捕捉整个传输过程中可能出现的问题。此外,对于分页与限流问题,我们设计了一套灵活的机制,通过迭代检索与请求速率调整,实现稳定、高效的数据同步。同时,如果在对接过程中遇到了意外错误或异常,中断后的自动重试策略也保证了任务执行过程中的健壮性。 这套方案不仅满足了业务需求,也显著提高了工作效率和系统稳定性,为类似项目提供了宝贵经验。以下内容将详细阐述每个步骤及其技术实现细节…… ![如何对接用友BIP接口](https://pic.qeasy.cloud/D11.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用聚水潭接口refund.single.query并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细探讨如何使用轻易云数据集成平台调用聚水潭接口`refund.single.query`,并对获取的数据进行加工处理。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是具体的元数据配置: ```json { "api": "refund.single.query", "method": "POST", "number": "as_id", "id": "as_id", "beatFlat": ["items"], "pagination": {"pageSize": 50}, "formatResponse": [ {"old": "items.receive_date", "new": "items.receive_date2", "format": "date"} ], "condition": [ [{"field": "good_status", "logic": "eq", "value": "SELLER_RECEIVED"}, {"field": "o_id", "logic": "eq", "value": -1}, {"field": "items.r_qty", "logic": "neq", "value": 0}] ], "idCheck": true, "request": [ {"field": "shop_id", "label": "店铺编号", "type":"string", "describe":"店铺编号"}, {"field":"is_offline_shop", "label":"shop_id为0且is_offline_shop为true查询线下店铺单据", "type":"string", "describe":"shop_id为0且is_offline_shop为true查询线下店铺单据"}, {"field":"modified_begin", "label":"修改起始时间", "type":"string", "describe":"修改起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空", "value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"modified_end", ... ``` #### 请求参数说明 - `shop_id`: 店铺编号,用于指定查询的店铺。 - `is_offline_shop`: 当`shop_id`为0且该字段为true时,查询线下店铺单据。 - `modified_begin`和`modified_end`: 修改起始和结束时间,必须同时存在,时间间隔不能超过七天。 - `so_ids`: 指定线上订单号,与时间段不能同时为空。 - `shop_buyer_ids`: 指定买家账号,最多50个。 - `page_index`: 第几页,从第一页开始,默认1。 - `page_size`: 每页多少条记录,默认30,最大50。 #### 数据请求与清洗 在发出请求之前,需要确保所有必填字段都已正确填充。例如: ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/S16.png~tplv-syqr462i7n-qeasy.image) ### 利用轻易云数据集成平台实现金蝶云星空API接口的数据转换与写入 在数据集成的过程中,ETL(Extract, Transform, Load)是关键的一步。本文将详细探讨如何利用轻易云数据集成平台,将已经集成的源平台数据进行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":"{bfn_num}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSTHRKD"}, {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"GENERAL"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{batchs_receive_date2}"}, {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"多类别基础资料列表","value":"BD_OwnerOrg"}, {"field":"FOwnerIdHead","label":"货主","type":"string","describe":"多类别基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FNOTE","label":"备注","type":"string","describe":"多行文本","value": "{remark}"}, { "field": "FEntity", "label": "明细信息", "type": "array", "children": [ {"field": "FMATERIALID", "label": "物料编码", "type": "string", "describe": "基础资料", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{items_sku_id}", "parent": "FEntity" }, {"field": "FSTOCKID", "label": "收货仓库", "type": "string", "describe": "基础资料", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{wms_co_id}", "parent": "FEntity" }, {"field": "FLOT", "label": "批号", "type": "string", "describe": "批次", "value": "{items_batch_no}", "parent": "FEntity", "parser":{"name": ConvertObjectParser, params: FNumber } }, // More fields... ] } ], // Other configurations... } ``` #### 数据转换与写入步骤 1. **字段映射与转换**: - 在元数据配置中,每个字段都有明确的映射关系。例如,`FBillNo`对应源数据中的`{bfn_num}`,`FBillTypeID`固定为`XSTHRKD`。 - 使用`ConvertObjectParser`进行必要的字段转换,例如将库存组织、货主等字段值转换为金蝶系统可识别的格式。 2. **数组处理**: - `FEntity`字段是一个数组,包含多个子项,如物料编码、收货仓库、批号等。这些子项需要逐一映射和转换。 - 配置中使用了`rowsKey: array`和`method: batchArraySave`来处理数组形式的数据。 3. **API请求构建**: - 根据元数据配置,构建符合金蝶云星空API要求的JSON请求体。 - 使用POST方法发送请求,并确保启用ID检查(idCheck: true)。 4. **特殊字段处理**: - 某些字段如日期、备注等需要从源数据中提取并格式化。例如,日期字段需要确保符合目标系统的日期格式要求。 5. **执行操作**: - 配置中指定了操作类型为“Save”,并且设置了是否自动提交和审核(IsAutoSubmitAndAudit: false)。 - 在实际操作中,可以根据业务需求调整这些参数。 #### 实际案例 假设我们有一条退货记录,需要将其写入金蝶云星空系统。源数据如下: ```json { bfn_num: 'TH20230901', batchs_receive_date2: '2023-09-01', remark: '客户退货', items: [ { items_sku_id: 'SKU12345', wms_co_id: 'WH001', items_batch_no: 'BATCH001', items_product_date: '2023-08-01', items_expiration_date: '2024-08-01', items_r_qty: '10' } ], l_id: 'EXP123456789' } ``` 根据上述元数据配置和源数据,我们可以生成如下JSON请求体: ```json { FormId: 'STK_MISCELLANEOUS', IsVerifyBaseDataField: false, Operation: 'Save', IsAutoSubmitAndAudit: false, Model:{ FBillNo:'TH20230901', FBillTypeID:{ FNumber:'XSTHRKD' }, FStockOrgId:{ FNumber:'100' }, FStockDirect:'GENERAL', FDate:'2023-09-01', FOwnerTypeIdHead:'BD_OwnerOrg', FOwnerIdHead:{ FNumber:'100' }, FNOTE:'客户退货', FEntity:[ { FMATERIALID:{ FNumber:'SKU12345' }, FSTOCKID:{ FNumber:'WH001' }, FLOT:{ FNumber:'BATCH001' }, FPRODUCEDATE:'2023-08-01', FEXPIRYDATE:'2024-08-01', FQty:'10', F_XC_TEXT2:'EXP123456789' } ] } } ``` 通过轻易云数据集成平台,将上述请求体发送到金蝶云星空API接口,实现无缝的数据对接和写入。 #### 总结 本文详细探讨了如何利用轻易云数据集成平台,将源平台的数据进行ETL转换,并转为金蝶云星空API接口所能接收的格式,最终成功写入目标平台。通过合理配置元数据,可以高效地实现不同系统间的数据无缝对接,提高业务透明度和效率。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/T18.png~tplv-syqr462i7n-qeasy.image)