ETL转换实战:从马帮系统到金蝶云星空的数据写入

  • 轻易云集成顾问-潘裕
### 马帮数据集成案例解析:从马帮到金蝶云星空的高效对接 在当今数字化转型的浪潮中,企业对于系统之间无缝连接和数据实时处理需求日益增加。本文将详细分享一个成功实施的系统对接集成案例——备货订单从马帮平台到金蝶云星空的数据流动和处理方案。本次集成方案旨在确保高效、安全地完成大量订单信息的数据交互,实现了备货订单从马帮获取并写入到金蝶云星空(测试通过)。 #### 定时可靠抓取与接口调用 首先,在本例中,我们需要定期从马帮平台获取最新的备货订单数据。这一过程通过调用API `hwc-shippbatch-get-shipment-list` 实现,该接口能够分页返回当前时间段内所有未处理完毕的备货订单。这一步骤尤为关键,因为它直接影响整套流程能否稳定运行。我们采用定时计划任务系统,确保每隔固定时间自动触发该API,并将返回结果实时存储至临时数据库。 ##### 处理分页与限流问题 由于单次请求可能无法涵盖所有待获取的数据,因此必须设计良好的分页机制来分批次拉取。此外,为避免因频繁访问导致接口限流,需要合理配置请求间隔及重试策略,从而保证数据不漏单且尽量减少对源系统带来的压力。 #### 数据格式转换与映射 不同系统使用的数据格式和结构通常存在较大差异。在此次场景中,从马帮提取出的JSON格式数据需进行清洗、转换,以符合金蝶云星空要求的数据模型。在此过程中,我们特别关注了两者在字段命名、类型等方面的不一致之处,通过编写自定义脚本或内置功能模块完成必要的映射工作。例如,将日期格式统一标准化,把多种状态值归类为唯一标识符。 #### 批量快速写入目标平台 为了提升数据传输效率,本解决方案采用批量操作模式向金蝶云星空推送整理后的备货订单记录。对应API `batchSave` 支持一次性写入多条记录,这不仅节省了网络开销,也有效缩短整体执行时间。此外,还设置了一系列事务控制措施,当部分记录因异常原因未能成功导入,可依据日志提示进行人工校正后重新提交,提高总体准确率和容错能力。 --- 以上即是此次技术文章开头部分内容。接下来章节将逐步深入剖析具体实现细节及代码示例,包括如何设置错误重试机制、实时监控与日志管理等高级应用技巧,如有兴趣,请继续阅读下文详细说明。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/D34.png~tplv-syqr462i7n-qeasy.image) ### 调用马帮接口hwc-shippbatch-get-shipment-list获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用马帮接口`hwc-shippbatch-get-shipment-list`,并对获取的数据进行初步加工。 #### 接口配置与请求参数 首先,我们需要配置调用马帮接口的元数据。根据提供的元数据配置,接口为`hwc-shippbatch-get-shipment-list`,请求方法为POST,主要用于查询(effect: QUERY)。以下是请求参数的详细说明: - `timeLastModifiedStart`: 更新开始时间,用于指定出入库的开始时间。其值为上次同步时间({{LAST_SYNC_TIME|datetime}})。 - `timeLastModifiedEnd`: 更新结束时间,用于指定出入库的结束时间。其值为当前时间({{CURRENT_TIME|datetime}}),且时间跨度不大于7天。 - `status`: 状态,默认为2(已发货)。 - `page`: 页数,默认为1。 - `pageSize`: 每页多少条记录,默认为20。 这些参数将被封装成一个POST请求发送到马帮系统,以获取相应的数据。 #### 数据过滤与条件设置 在实际应用中,我们通常需要对获取的数据进行过滤和筛选,以确保数据的准确性和有效性。元数据配置中定义了两个条件集合: 1. **condition_bk**: 备用条件集合 2. **condition**: 主条件集合 每个条件集合包含两个具体条件: - `ShipmentStatus`字段值需在`SHIPPED,IN_TRANSIT`范围内。 - `itemList.deliveryQuantity`字段值需大于0。 这些条件确保我们只获取已发货或运输中的订单,并且每个订单至少包含一个已交付的项目。 #### 异常处理与补救机制 为了提高数据集成过程的可靠性,我们还需要考虑异常处理和补救机制。元数据配置中定义了一个补救机制(omissionRemedy),包括以下内容: - **定时任务**: 使用crontab表达式`20 */6 * * *`设置定时任务,每6小时执行一次。 - **接管请求**: 在异常情况下,通过接管请求字段`expressTimeStart`来指定修改时间开始段,其值通过函数计算得到:从当前时间减去6小时。 这种设计确保即使在出现异常时,也能通过定时任务和接管请求来弥补遗漏的数据。 #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换,以便后续写入目标系统。在轻易云平台上,可以使用可视化工具对数据进行处理,包括但不限于以下操作: - **字段映射**: 将源系统中的字段映射到目标系统中的相应字段。例如,将马帮系统中的`shipmentId`映射到目标系统中的订单编号。 - **数据格式转换**: 将日期、字符串等不同格式的数据转换为目标系统所需的格式。 - **去重与合并**: 对重复记录进行去重,并根据业务需求合并相关记录。 #### 实际案例分析 假设我们需要将马帮系统中的备货订单导入到金蝶系统中。首先,通过调用接口获取备货订单列表,然后根据上述步骤对数据进行清洗和转换,最后将处理后的数据写入金蝶系统。这一过程可以通过轻易云平台上的工作流自动化完成,大大提高了效率和准确性。 总之,通过合理配置元数据、设置过滤条件、实施异常处理机制,并利用可视化工具进行数据清洗和转换,可以高效地实现不同系统间的数据集成。这不仅提升了业务透明度,还显著提高了整体运营效率。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/S17.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,转为目标平台所能够接收的格式,并最终写入目标平台。本文将详细探讨如何使用轻易云数据集成平台,将备货订单从马帮系统转换为金蝶云星空API接口所需的格式,并成功写入目标系统。 #### 元数据配置解析 在进行ETL转换之前,我们需要了解元数据配置。以下是我们将使用的元数据配置: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field": "FBillNo", "label": "单据编号", "type": "string", "value": "{shipmentId}-FH"}, {"field": "FStockOrgId", "label": "调入库存组织", "type": "string", "value": "100", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}}, {"field": "FDate", "label": "日期", "type": "string", "value": "{timeLastModified}"}, {"field": "FBillTypeID", "label": "单据类型", "type": "string", "value": "ZJDB01_SYS", "parser": {"name":"ConvertObjectParser","params":"FNUMBER"}}, {"field":"FOwnerTypeIdHead","label":"调入货主类型","type":"string","value":"BD_OwnerOrg"}, {"field":"FTransferBizType","label":"调拨类型","type":"string","value":"InnerOrgTransfer"}, {"field":"FStockOutOrgId","label":"调出库存组织","type":"string","value":"100", ... } ], ... } ``` #### 数据请求与清洗 在数据请求与清洗阶段,我们从源系统(马帮)获取备货订单的数据。这些数据通常包括订单编号、库存组织、日期、单据类型等信息。在获取到这些原始数据后,我们需要对其进行清洗和标准化,以确保其符合目标系统(金蝶云星空)的要求。 例如,订单编号`{shipmentId}-FH`中的`{shipmentId}`需要从源系统中提取并拼接成最终的订单编号格式。 #### 数据转换与写入 在完成数据清洗后,下一步是将这些数据转换为金蝶云星空API接口所能接收的格式,并通过API接口将其写入目标系统。以下是具体步骤: 1. **字段映射与转换**: - `FBillNo`:单据编号,直接映射为源系统中的`{shipmentId}-FH`。 - `FStockOrgId`:调入库存组织,需要通过`ConvertObjectParser`解析为对应的金蝶编码。 - `FDate`:日期,直接映射为源系统中的修改时间`{timeLastModified}`。 - `FBillTypeID`:单据类型,通过`ConvertObjectParser`解析为金蝶编码。 2. **子表明细处理**: 子表明细信息如物料编码、单位、调出仓库等,需要根据每个子项进行逐一映射和解析。例如: ```json { ... { field: 'FBillEntry', label: '明细信息', type: 'array', value: 'itemList', children: [ { field: 'FMaterialId', label: '物料编码', type: 'string', value: '{{localInfo.stockSku}}', parser: { name: 'ConvertObjectParser', params: 'FNumber' } }, ... ] } ... } ``` 3. **调用API接口**: 在所有字段都完成映射和转换后,通过POST方法调用金蝶云星空的`batchSave` API接口,将整理好的JSON对象发送至目标系统。 ```json { api: 'batchSave', effect: 'EXECUTE', method: 'POST', idCheck: true, request: [...], otherRequest: [ { field: 'FormId', label: 'FormId', type: 'string', value: 'STK_TransferDirect' }, { field: 'Operation', label: 'Operation', type: 'string', value: 'Save' }, { field: 'IsAutoSubmitAndAudit', label: 'IsAutoSubmitAndAudit', type: 'bool', value: true }, { field:'IsVerifyBaseDataField','label':'IsVerifyBaseDataField','type':'bool','describe':'是否验证所有的基础资料有效性,布尔类,默认false(非必录)','value':'false'} ], operation:{rowsKey:'array',rows:'1',method:'batchArraySave'} } ``` 通过上述步骤,我们可以实现从马帮系统到金蝶云星空的数据无缝对接,确保数据准确、高效地传输到目标平台。这不仅提升了业务透明度和效率,也大大简化了跨系统的数据集成工作。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/T28.png~tplv-syqr462i7n-qeasy.image)