ETL数据处理与系统稳定性保障在数据集成中的应用

  • 轻易云集成顾问-林峰
### 采购入库同步-厦门康圆:汤臣倍健营销云数据集成到金蝶云星辰V2的技术实现 在企业信息系统对接过程中,确保不同平台间的数据顺畅流动和准确对接是尤为关键的一环。本文将展示如何通过轻易云数据集成平台,实现汤臣倍健营销云与金蝶云星辰V2之间的高效数据同步。本次案例聚焦于“采购入库同步-厦门康圆”项目,探讨了相关API接口调用、分页限流处理以及异常重试机制等关键技术点。 为了从汤臣倍健营销云获取必要的采购入库订单数据,我们主要使用其提供的API接口`/erp/api/order/query/purInWarehsOrder`。该接口支持按条件查询并返回分页后的订单记录。在保证不漏单、不重复抓取的前提下,通过定时任务可靠地进行数据拉取。同时,为了应对可能出现的大量请求压力,我们采用限流策略来避免服务器负载过高导致的数据丢失或超时问题。 当成功获取到汤臣倍健营销云中的订单数据后,这些原始记录需要经过格式转换及映射,以符合金蝶云星辰V2 API `/jdy/v2/scm/pur_inbound` 的要求。这个转换过程特别重要,因为两大系统的数据结构存在显著差异,需要仔细处理字段对应关系、单位换算及时间格式等细节。此外,对于批量写入操作,有助于提升整体传输效率,并减少网络请求次数,但同时也面临着事务管理和错误恢复等挑战。 在实际实施中,不可避免地会遇到一些异常情况,比如网络波动或第三方服务暂时不可用。因此,我们设计了一套完善的错误监控与重试机制,包括自动识别失败原因、分类处理不同类型异常,以及在特定策略下执行多次重试。这种方案不仅提高了系统稳定性,还确保了业务连续性和一致性。 总之,通过合理运用上述技术手段,“采购入库同步-厦门康圆” 项目完美实现了两个系统间无缝衔接,极大提升了业务运作效率。下面我们将详细介绍该方案中的具体实现步骤和代码示例,以供参考使用。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统汤臣倍健营销云接口获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用汤臣倍健营销云的`/erp/api/order/query/purInWarehsOrder`接口来获取采购入库数据,并进行初步的数据加工。 #### 接口调用配置 首先,我们需要配置API调用的元数据。根据提供的元数据配置,以下是具体的请求参数和配置细节: ```json { "api": "/erp/api/order/query/purInWarehsOrder", "effect": "QUERY", "method": "POST", "number": "number", "id": "id", "idCheck": true, "request": [ {"field":"tenantId","label":"经销商id","type":"string","describe":"经销商id(必填,营销云id)如:08e2fd9d074f4ef7b5e6416b74d006d6","value":"xxx"}, {"field":"yxyNumber","label":"营销云销售订单号","type":"string","describe":"如:lzwhy0121012002,传此参数时,其他时间状态等条件无效"}, {"field":"number","label":"系统订单号","type":"string","describe":"如:CGDD00000003744,传此参数时,其他时间状态等条件无效"}, {"field":"status","label":"订单状态","type":"string","describe":"0:未审核1:已审核(已出库)","value":"1"}, {"field":"beginTime","label":"开始时间","type":"string","describe":"timeType为空或者0,基于创建时间查询,timeType为1,基于更新时间查询,格式:0000-00-00或0000-00-0000:00:00,如果不传单号此字段必填","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"endTime","label":"结束时间","type":"string","describe":"timeType为空或者0,基于创建时间查询,timeType为1,基于更新时间查询,格式:0000-00-00或0000-00-0000:00:00,如果不传单号此字段必填","value":"{{CURRENT_TIME|datetime}}"}, {"field":"pageNo","label":"页码","type":"string","describe":"默认1","value":"1"}, {"field":"pageSize","label":"每页条数","type":"string","describe":"默认30","value":"30"}, {"field":"timeType","label":"时间段标志","type":"string","describe":"查询时间段标识,0:创建时间(默认),1:最后更新时间","value":""} ], "autoFillResponse": true, "condition_bk": [ [{"field": "itemList.materialNumber", "logic": "notlike", "value": "F.A"}] ] } ``` #### 请求参数解析 1. **tenantId**: 经销商ID,是必填项,用于标识具体的经销商。 2. **yxyNumber**: 营销云销售订单号,当传递此参数时,其它时间状态等条件无效。 3. **number**: 系统订单号,当传递此参数时,其它时间状态等条件无效。 4. **status**: 订单状态,可选值为`0`(未审核)和`1`(已审核)。 5. **beginTime**和**endTime**: 时间范围,用于限定查询的起止时间。格式为`YYYY-MM-DD`或`YYYY-MM-DD HH:mm:ss`。 6. **pageNo**和**pageSize**: 分页参数,用于控制返回结果的分页。 7. **timeType**: 时间段标志,用于指定查询基于创建时间还是最后更新时间。 #### 数据请求与清洗 在实际操作中,我们会根据业务需求动态设置这些请求参数。例如,通过设置`beginTime`和`endTime`来限定查询范围,以便获取特定时间段内的采购入库数据。 ```json { "tenantId": "08e2fd9d074f4ef7b5e6416b74d006d6", "status": "1", "beginTime": "{{LAST_SYNC_TIME|datetime}}", "endTime": "{{CURRENT_TIME|datetime}}", "pageNo": "1", "pageSize": "30", "timeType": "" } ``` 在发送请求后,我们会接收到一组原始数据。这些数据可能包含多个字段,有些字段可能需要进行清洗和转换。例如,我们可以使用条件过滤器来排除掉物料编号包含"F.A"的记录: ```json "condition_bk": [ [{"field": "itemList.materialNumber", "logic": "notlike", "value": "F.A"}] ] ``` #### 数据转换与写入 经过清洗后的数据,需要进一步转换以适应目标系统的数据结构。轻易云平台支持多种转换操作,如字段映射、类型转换、格式化等。最终,将处理好的数据写入目标系统,实现完整的数据同步流程。 通过上述步骤,我们实现了从汤臣倍健营销云获取采购入库数据,并对其进行初步加工,为后续的数据处理奠定了基础。在实际应用中,可以根据具体业务需求进一步优化和调整这些配置,以达到最佳效果。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/S9.png~tplv-syqr462i7n-qeasy.image) ### 采购入库同步-厦门康圆到金蝶云星辰V2的ETL转换 在数据集成生命周期的第二步中,我们将已经集成的源平台数据进行ETL(提取、转换、加载)转换,使其符合目标平台金蝶云星辰V2 API接口的要求,并最终写入目标平台。本文将详细介绍如何利用轻易云数据集成平台配置元数据,实现这一过程。 #### 元数据配置解析 在进行ETL转换之前,我们需要了解元数据配置中的各个字段及其含义。以下是针对金蝶云星辰V2 API接口`/jdy/v2/scm/pur_inbound`的元数据配置: ```json { "api": "/jdy/v2/scm/pur_inbound", "effect": "EXECUTE", "method": "POST", "number": "1", "id": "1", "name": "1", "idCheck": true, "request": [ { "field": "bill_date", "label": "单据日期", "type": "string", "describe": "单据日期", "value": "{{auditTime|date}}" }, { "field": "bill_no", "label": "单据编码", "type": "string", "describe": "单据编码" }, { ... } ] } ``` #### 数据提取与清洗 首先,从源平台提取原始数据,并进行必要的清洗操作。例如,确保日期格式正确,字符串字段没有非法字符等。这一步骤可以通过轻易云的数据处理工具实现。 #### 数据转换 接下来,将清洗后的数据按照目标平台API接口的要求进行转换。我们需要特别注意以下几个关键字段: - `bill_date`: 单据日期,需要将源平台的审核时间(`auditTime`)格式化为目标平台所需的日期格式。 - `bill_no`: 单据编码,直接从源数据中提取。 - `transtype`: 业务类型,固定值为"2"。 - `supplier_id`: 供应商编码,固定值为"1269830411140231168"。 - `remark`: 备注,需要拼接源平台的备注信息和营销云编号。 对于商品分录(`material_entity`),我们需要处理每一项商品记录: - `material_number`: 商品编码,直接从源数据中提取。 - `stock_id`: 仓库编码,固定值为"1269848096431430656"。 - `is_free`: 是否赠品,固定值为`false`。 - `qty`: 数量,从源数据中的操作数量(`opernumber`)提取并转换为字符串。 - `unit_id`: 单位,通过查询映射关系获取单位ID。 - `batch_no`, `kf_date`, `kf_period`, `valid_date`, `kf_type`, `tax_price`, `cess`, `all_amount`: 分别对应批次号、生产日期、保质期天数、有效日期、保质期类型、含税单价、税率和价税合计,这些字段需要从源数据中提取并进行相应的格式转换。 #### 数据加载 最后,将转换后的数据通过HTTP POST请求写入金蝶云星辰V2。以下是一个示例请求体: ```json { "bill_date": "2023-10-01", "bill_no": "PO12345678", ... "material_entity": [ { ... } ] } ``` 在实际操作中,我们可以利用轻易云提供的可视化界面配置这些字段,并实时监控数据流动和处理状态,确保每个环节都清晰易懂。 通过以上步骤,我们成功地将采购入库同步的数据从源平台转换为金蝶云星辰V2 API接口所能接收的格式,并完成了写入操作。这一过程不仅提高了业务透明度和效率,还确保了不同系统间的数据无缝对接。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)