ETL转换与数据写入的实现方法

  • 轻易云集成顾问-贺强
### 分销销售退货单集成方案-P:旺店通·旗舰奇门数据集成到金蝶云星空 在企业信息系统中,不同应用系统之间的数据对接与同步是一项复杂且关键的任务。本文将详细分享通过轻易云数据集成平台,实现旺店通·旗舰奇门分销销售退货单自动化导入金蝶云星空的技术案例。 为了确保从旺店通·旗舰奇门获取准确无误的数据,我们使用了接口 `wdt.wms.stockin.refund.querywithdetail`,该接口能够提供详尽的退货单数据信息。在具体实施过程中,主要关注以下几点: 1. **定时可靠的数据抓取**:为保证数据不漏单,我们配置了定时任务周期性调用 `wdt.wms.stockin.refund.querywithdetail` 接口,并实现了高频次和稳定的数据抓取机制。 2. **处理分页和限流问题**:针对旺店通·旗舰奇门接口返回的大量记录进行分页处理,同时遵循限流规则避免超出API调用限制,从而确保每次数据请求都是有效且完整的。 3. **实时监控与日志记录**:全流程监控每一次API请求并详细记录日志,以便于后续查看和排查潜在的问题,提高运维管理效率。 对于大量获取到的数据,在传输至目标系统——金蝶云星空之前,还需进行格式转换及映射。这一环节主要涵盖如下要点: 1. **批量写入优化**:由于我们需要将大量退货单信息快速、高效地写入到金蝶云星空,因此采用 `batchSave` API 进行批量操作,大幅提升写入速度及系统性能。 2. **自定义数据映射对接**:根据业务需求,对不同字段间的数据类型、格式要求进行了灵活调整,使其完美匹配金蝶云星空标准。同时,通过平台提供的可视化界面,直观地展示各个字段间的对应关系,有利于更精确、更快捷地设置映射规则。 最后,为进一步保障整个过程顺利完成,对异常情况进行了充分考虑,包括但不限于网络故障、接口响应错误等。构建了一套完善的错误重试机制,并对所有未成功提交的数据及时重新尝试提交,最大程度上降低因为短暂故障导致严重后果的不确定性。此外,通过实时状态反馈能够迅速定位并解决问题,减少停机时间。 以上即为本次分销销售退货单集成方案-P项目启动部分内容。在接下来的文章中,将会更深入展示具体实现细节与代码示例。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/D15.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·旗舰奇门接口获取并加工数据的技术实现 在数据集成生命周期的第一步中,调用源系统接口获取数据是至关重要的一环。本文将详细探讨如何使用轻易云数据集成平台调用旺店通·旗舰奇门接口`wdt.wms.stockin.refund.querywithdetail`,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置接口的元数据。根据提供的元数据配置,我们可以看到该接口采用POST方法,主要参数包括分页参数和业务参数。 ```json { "api": "wdt.wms.stockin.refund.querywithdetail", "method": "POST", "number": "order_no", "id": "order_no", "idCheck": true, "request": [ { "field": "pager", "label": "分页参数", "type": "object", "children": [ { "field": "page_size", "label": "分页大小", "type": "string", "value": "50", "parent": "pager" }, { "field": "page_no", "label": "页号", "type": "string", "value": "1", "parent": "pager" } ] }, { "field": "params", ... } ], ... } ``` #### 分页参数设置 分页参数是接口调用中必不可少的一部分,用于控制每次请求的数据量和当前请求的页码。我们设置`page_size`为50,表示每次请求返回50条记录;`page_no`初始值为1,表示从第一页开始请求。 ```json { ... { field: 'pager', label: '分页参数', type: 'object', children: [ { field: 'page_size', label: '分页大小', type: 'string', value: '50', parent: 'pager' }, { field: 'page_no', label: '页号', type: 'string', value: '1', parent: 'pager' } ] }, ... } ``` #### 业务参数设置 业务参数用于定义具体的数据查询条件,包括时间范围、入库单状态、仓库编码等。以下是关键业务参数的配置: - `start_time` 和 `end_time`: 分别表示查询的开始时间和结束时间,使用动态变量`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`。 - `status`: 入库单状态,这里设置为80,表示已完成状态。 - `time_type`: 时间条件类型,不传默认为0,即按修改时间查询。 - `warehouse_no`, `shop_nos`, `stockin_no`: 分别对应仓库编码、店铺编号和入库单号,可以根据实际需求进行配置。 ```json { ... { field: 'params', label: '业务参数', type: 'object', children: [ { field: 'start_time', label: '开始时间', type: 'string', value: '{{LAST_SYNC_TIME|datetime}}', parent: 'params' }, { field: 'end_time', label: '结束时间', type: 'string', value: '{{CURRENT_TIME|datetime}}', parent: 'params' }, { field: 'status', label: '入库单状态', type: 'string', describe:'英文逗号拼接的状态值...', value:'80', parent:'params' }, { field:'time_type', label:'时间条件类型', type:'string', describe:'查询的时间条件类型...', parent:'params' }, { field:'warehouse_no', label:'仓库编码', type:'string', parent:'params' }, { field:'shop_nos', label:'店铺编号', type:'string', describe:'多个店铺编号使用英文逗号分隔...', parent:'params' }, { field:'stockin_no', label:'入库单号', type:'string' } ] } } ``` #### 数据请求与清洗 在完成接口调用配置后,我们可以通过轻易云平台发起数据请求,并对返回的数据进行清洗。清洗过程包括去除无效字段、标准化字段格式等操作,以确保数据质量。 例如,对于返回的数据结构,我们可能只需要特定字段,如订单号、商品信息等,可以通过以下方式进行处理: ```python def clean_data(raw_data): cleaned_data = [] for record in raw_data: cleaned_record = { 'order_no': record.get('order_no'), 'item_details': record.get('item_details'), # 添加其他需要的字段 } cleaned_data.append(cleaned_record) return cleaned_data ``` #### 数据转换与写入 在完成数据清洗后,下一步是将数据转换为目标系统所需的格式,并写入目标数据库或系统。这一步通常涉及到字段映射、数据类型转换等操作。 ```python def transform_and_write(cleaned_data, target_system): transformed_data = [] for record in cleaned_data: transformed_record = { # 根据目标系统要求进行字段映射和转换 ... } transformed_data.append(transformed_record) # 将转换后的数据写入目标系统 target_system.write(transformed_data) ``` 通过上述步骤,我们实现了从源系统旺店通·旗舰奇门接口获取并加工数据,为后续的数据集成工作打下坚实基础。在实际应用中,可以根据具体需求进一步优化和扩展这些操作。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/S29.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:实现分销销售退货单的自动化处理 在数据集成过程中,ETL(Extract, Transform, Load)是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台,将源平台的数据进行ETL转换,以适配金蝶云星空API接口的格式,并最终写入目标平台。 #### API接口配置 首先,我们需要了解金蝶云星空API的基本配置。本次集成方案中,使用了`batchSave` API,通过POST方法提交数据。以下是主要的API配置参数: - **api**: `batchSave` - **method**: `POST` - **idCheck**: `true` - **operation**: - `rowsKey`: `array` - `rows`: 20 - `method`: `batchArraySave` 这些参数确保我们能够批量提交数据,并对每一行数据进行验证和处理。 #### 请求字段解析 为了将源平台的数据转换为金蝶云星空所需的格式,我们需要对请求字段进行详细解析和映射。以下是部分关键字段的配置及其解析方式: 1. **FBillTypeID(单据类型)** - 类型:`string` - 描述:单据类型 - 解析器:`ConvertObjectParser` - 参数:`FNumber` - 值:`DSXSTHD07` 2. **FBillNo(单据编号)** - 类型:`string` - 描述:单据编号 - 值:`{order_no}` 3. **FSaleOrgId(销售组织)** - 类型:`string` - 描述:组织 - 值: `_findCollection find FUseOrgID from 08313512-4ecd-37b1-9945-be9366662e85 where FWDTDCName={fenxiao_nick}` - 解析器:`ConvertObjectParser` - 参数:`FNumber` 4. **FDate(日期)** - 类型:`string` - 描述:日期 - 值: `{modified}` 5. **FRetcustId(退货客户)** - 类型:`string` - 描述:基础资料 - 值: `_findCollection find FCustID from 08313512-4ecd-37b1-9945-be9366662e85 where FWDTDCName={fenxiao_nick}` - 解析器:`ConvertObjectParser` - 参数:`FNumber` 通过上述字段配置,我们可以将源平台的数据准确地映射到目标平台所需的格式。 #### 明细信息处理 对于包含复杂结构的明细信息,我们需要特别注意其子字段的处理。例如,明细信息包含多个子字段,如物料编码、实退数量、单价等: ```json { "field": "FEntity", "label": "明细信息", "type": "array", "children": [ { "field": "FMaterialId", "label": "物料编码", "type": "string", "describe": "基础资料", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{{details_list.goods_no}}", "parent": "FEntity" }, { "field": "FRealQty", "label": "实退数量", "type": "string", "describe": "数量", "value": "{{details_list.num}}", "parent": "FEntity" }, { ... } ], ... } ``` 在这个配置中,每个子字段都需要指定其类型、描述和对应的值,并通过父字段关联起来。这种结构化处理确保了每个明细项都能被正确解析和传递。 #### 提交与审核 在所有字段完成映射后,我们还需要配置一些额外参数以控制数据提交和审核流程: ```json { ... { "field":"IsAutoSubmitAndAudit", "label":"提交并审核", "type":"bool", "value":"true" }, { ... } } ``` 设置`IsAutoSubmitAndAudit`为`true`,意味着在数据提交后会自动进行审核,简化了操作流程,提高了效率。 #### 实际应用案例 假设我们有一个分销销售退货单,其源数据如下: ```json { ... { order_no: 'TH20231001', fenxiao_nick: 'distributorA', modified: '2023-10-01', details_list: [ {goods_no: 'P001', num: '10', refund_order_detail_list: [{price: '100'}]}, ... ], ... } } ``` 通过上述配置,我们可以将这些源数据转换为金蝶云星空API所需的格式,并通过POST方法批量提交,实现自动化处理。 综上所述,通过合理配置元数据和API接口参数,可以高效地实现不同系统间的数据集成与转换,为企业业务流程提供强有力的支持。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)