ETL转换技术在数据集成中的应用:精诚ERP案例

  • 轻易云集成顾问-贺强
### 管易云·奇门数据集成到精诚ERP技术案例分享:管易发货单对接 在复杂的电商环境中,如何确保迅速且准确的数据同步是一个关键问题。本次案例侧重于将管易云·奇门平台上的发货单数据高效集成到精诚ERP系统的一体化解决方案——管易发货单对接。在这个过程中,我们充分利用了轻易云数据集成平台的强大功能,实现了从API调用、数据转换到异常处理的一系列步骤。 #### API接口调用与定时抓取 首先,我们通过`gy.erp.trade.deliverys.get` API接口,定时可靠地抓取管易云·奇门提供的发货单数据。这一过程需要考虑如何确保不漏单,因此我们设计了一套机制来跟踪每一批次的数据获取状态,并采用分页抓取以应对大量订单情况下可能出现的限流问题。 #### 数据批量写入和格式转换 面对大量要写入的数据,我们使用API `ExtApi_RecvExSheet` 将这些信息高效地传递给精诚ERP。同时,为了实现无缝衔接,必须进行必要的数据格式转换。两者之间存在一些字段和类型不一致的问题,通过自定义映射规则,这些差异得到了有效解决,使得最终写入能够符合精诚ERP的要求。 #### 实时监控与日志记录 整个过程中,不仅需要确保操作透明,还需实时监控每个环节并记录日志。这样可以在发生错误或异常情况时迅速反应,对症下药。例如,当遇到网络波动导致部分数据丢失或者重复提交时,这套体系会自动触发重试机制,从而提高整体流程的可靠性。 #### 异常处理及错误重试机制 为了保证系统对接过程中的稳定性,还特别设计了一套完善的异常处理和错误重试机制。当某一步骤失败后,该系统会自动进行多次尝试,同时通过详细日志记录帮助开发人员快速定位并修复潜在问题,从而将影响降至最低。 此次整合实例展示了如何借助先进的平台工具,将分散且庞大的电商订单数据,高效地融入企业内部管理系统中,实现全链条的信息贯通与智能化运作,提高业务响应速度,并减少人为干预所带来的误差与延迟。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/D24.png~tplv-syqr462i7n-qeasy.image) ### 调用管易云·奇门接口gy.erp.trade.deliverys.get获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用管易云·奇门接口`gy.erp.trade.deliverys.get`,并对获取的数据进行加工处理。 #### 接口调用配置 首先,我们需要配置API接口的元数据,以便正确地请求和处理数据。以下是关键的元数据配置: ```json { "api": "gy.erp.trade.deliverys.get", "method": "POST", "number": "code", "id": "code", "pagination": { "pageSize": 50 }, "beatFlat": ["details"], "formatResponse": [ { "old": "delivery_statusInfo.delivery_date", "new": "delivery_date_new", "format": "date" } ], "idCheck": true, "omissionRemedy": { "crontab": "2 13,14,18,20,23 * * *", "takeOverRequest": [ { "field": "start_delivery_date", "label": "发货时间结束段", "type": "string", "value": "_function FROM_UNIXTIME({LAST_SYNC_TIME}-43200 ,'%Y-%m-%d %H:%i:%s' )" } ] }, "request": [ { "field": "start_create", "label": "创建时间开始段", "type": "datetime" }, { "field": "end_create", "label": "创建时间结束段", "type": "datetime" }, { "field": "start_delivery_date", ... ``` #### 请求参数设置 在请求参数中,我们需要设置多个字段来确保获取到所需的数据。这些字段包括创建时间、发货时间、修改时间等。特别地,我们使用了动态变量`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`来自动填充时间范围。 ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... {"field":"start_delivery_date","label":"发货时间开始段","type":"datetime","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"end_delivery_date","label":"发货时间结束段","type":"datetime","value":"{{CURRENT_TIME|datetime}}"}, {"field":"start_modify_date","label":"修改时间开始段","type":"datetime"}, {"field":"end_modify_date","label":"修改时间结束段","type":"datetime"}, {"field":"del","label":"返回是否作废的单据","type":"int"}, {"field":"delivery","label":"发货状态","type":"int","value":"1"}, {"field":"code","label":"单据编号","type":"string"} ] } } } } } } } } } } } } ``` #### 数据分页与处理 为了高效地处理大量数据,我们采用分页机制,每页大小设置为50条记录。同时,为了简化数据结构,我们将嵌套的`details`字段拍平(beatFlat)。 ```json { ... {"pagination":{"pageSize":50}}, {"beatFlat":["details"]} } ``` #### 数据格式转换 在获取到原始数据后,需要对部分字段进行格式转换。例如,将`delivery_statusInfo.delivery_date`字段转换为新的日期格式,并重命名为`delivery_date_new`。 ```json { ... {"formatResponse":[{"old":"delivery_statusInfo.delivery_date","new":"delivery_date_new","format":"date"}]} } ``` #### 数据缺失补救 为了确保数据完整性,我们配置了定时任务(crontab)来定期检查和补救可能遗漏的数据。在这里,我们设置了每天多次执行的计划任务,并通过计算上次同步时间来确定缺失的数据范围。 ```json { ... {"omissionRemedy":{"crontab":"2 13,14,18,20,23 * * *",...}} } ``` 以上配置确保了我们能够高效、准确地从管易云·奇门接口获取发货单数据,并进行必要的加工处理。这一步骤是整个数据集成生命周期中的关键环节,为后续的数据转换与写入打下坚实基础。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/S1.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入精诚ERPAPI接口的技术案例 在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL(提取、转换、加载)转换,使其符合目标平台精诚ERPAPI接口所能够接收的格式,并最终写入目标平台。以下是具体的技术实现过程。 #### 元数据配置解析 我们使用以下元数据配置来完成数据转换和写入操作: ```json { "api": "ExtApi_RecvExSheet", "method": "POST", "sdk": "\\Adapter\\Customer\\JCERP\\SDK\\JCERPSDK", "errorMsgKey": "ResultMsg", "idCheck": true, "groupCalculate": { "headerGroup": ["shop_code", "shop_name", "delivery_date_new"], "bodyGroup": ["details_item_code"], "bodyName": "details", "targetBodyName": "Items", "bodyMaxLine": 500, "calculate": { "details_qty": "$sum", "details_amount_after": "$sum" } }, "request": [ {"label":"SheetID","field":"SheetID","type":"string","value":"_function REPLACE('{shop_code}{delivery_date_new}0','-','')"}, {"label":"SheetDate","field":"SheetDate","type":"string","value":"{delivery_date_new}"}, {"label":"CustomerCode","field":"CustomerCode","type":"string","value":"{shop_code}"}, {"label":"CustomerName","field":"CustomerName","type":"string","value":"{shop_name}"}, {"label":"RedBlue","field":"RedBlue","type":"string","value":"false"}, {"label":"Qua","field":"Qua","type":"string"}, {"label":"Amo","field":"Amo","type":"string"}, {"label":"Remark","field":"Remark","type":"string"}, { "label": "Items", "field": "Items", "type": "array", "value": "details", "children": [ {"parent": "Items", "label": "Qua", "field": "Qua", "type": "string", "value": "{{details.details_qty}}"}, {"parent": "Items", "label": "GoodsID", "field": "GoodsID", "type": "string", "value": "{{details.details_item_code}}" }, {"parent": "Items", "label": "Price", "field": "Price", "type": "string", "value": "_function round({{details.details_amount_after}}\/{{details.details_qty}},6)" }, {"parent": "Items", "label": "Amo", "field": "Amo", "type": "string", "value": "{{details.details_amount_after}}" }, {"parent": "Items", "label": "Remark", "field": "Remark", "type": "string" } ] } ] } ``` #### 数据转换与写入流程 1. **请求参数组装**: - **SheetID**:通过`REPLACE`函数将`shop_code`和`delivery_date_new`拼接,并去掉其中的`-`符号。 - **SheetDate**:直接使用`delivery_date_new`字段。 - **CustomerCode**和**CustomerName**:分别映射为`shop_code`和`shop_name`。 - **RedBlue**:固定值为`false`。 - **Qua**和**Amo**:由具体业务逻辑决定,通常是从源数据中提取或计算得出。 2. **子项数组处理(Items)**: - 每个子项包含五个字段:Qua, GoodsID, Price, Amo, Remark。 - **Qua**:映射为每个详情项中的`details_qty`。 - **GoodsID**:映射为每个详情项中的`details_item_code`。 - **Price**:通过自定义函数计算,即用每个详情项的总金额除以数量,保留六位小数。 - **Amo**:直接映射为每个详情项中的总金额,即`details_amount_after`。 3. **分组与聚合计算**: - 对于头部信息,根据字段 `shop_code`, `shop_name`, `delivery_date_new` 分组。 - 对于子项信息,根据字段 `details_item_code` 分组,并对数量和金额进行求和操作。 4. **API调用与错误处理**: - 使用POST方法调用精诚ERP的API接口 `ExtApi_RecvExSheet`,通过SDK进行封装调用。 - 错误信息通过 `ResultMsg` 字段返回,需在调用后进行检查和处理。 #### 实践案例 假设我们有如下源数据: ```json { "shop_code": "S001", "shop_name": "Shop A", "delivery_date_new": "2023-10-01", ... // details array ... } ``` 经过ETL转换后的请求体将会是: ```json { ... // Header fields ... { ... // Items array ... [ { ... // Individual item fields ... } ... // Other items ... ] } } ``` 通过上述过程,我们可以确保源平台的数据经过ETL转换后,能够准确无误地写入到精诚ERP系统中,从而实现系统间的数据无缝对接。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/T18.png~tplv-syqr462i7n-qeasy.image)