利用轻易云平台进行ETL转换与金蝶云星辰V2数据同步

  • 轻易云集成顾问-谢楷斌
### 聚水潭·奇门数据集成到金蝶云星辰V2技术案例分享 在本文中,我们将详细探讨如何通过轻易云数据集成平台,将聚水潭·奇门的销售出库单数据无缝对接到金蝶云星辰V2系统。本项目旨在实现高效、准确的数据传输与同步,确保业务系统的稳定运行。具体实施方案被命名为:聚水潭-销售出库单-->金蝶-销售出库单。 首先,我们需要关注的是聚水潭·奇门API接口`jushuitan.saleout.list.query`的数据抓取问题。为了避免漏单并保证数据抓取的定时可靠性,设计了一个调度任务,每隔固定时间调用该接口,以获取最新的销售出库单数据。在此过程中,我们特别处理了分页和限流问题,通过控制请求频率和逐页读取来确保不会因大批量数据导致超时或丢失。 其次,在将获取到的数据写入到金蝶云星辰V2之前,需要注意两者之间的数据格式差异。这一步骤通过自定义映射和转换规则得以解决。从聚水潭·奇门获取的数据经过格式化处理后,即可利用金蝶云星辰V2提供的API `/jdy/v2/scm/sal_out_bound`进行批量写入。针对大量数据写入过程中的性能优化,也是本次集成重点之一。 此外,为了实现实时监控与日志记录,整个流程都配备了详尽的状态追踪机制,这不仅有助于排查异常情况,还能为后续改进提供可靠依据。在实际操作中,如果出现任何对接错误或异常,还配置有自动重试机制来提高集成系统的鲁棒性。 最后,通过轻易云平台直观透明的界面,使得每个操作环节一目了然,从而极大地提升项目执行效率和稳定性。本技术案例展示了一系列关键场景下的问题解决方法,如接口调用、分页限流、格式转换以及错误处理等多个方面,希望能够为类似需求提供实用参考。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/D15.png~tplv-syqr462i7n-qeasy.image) ### 调用聚水潭·奇门接口jushuitan.saleout.list.query获取并加工数据的技术实现 在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用聚水潭·奇门接口`jushuitan.saleout.list.query`,获取并加工销售出库单数据。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是`jushuitan.saleout.list.query`接口的元数据配置: ```json { "api": "jushuitan.saleout.list.query", "effect": "QUERY", "method": "POST", "number": "io_id", "id": "io_id", "name": "io_id", "idCheck": true, "request": [ { "field": "page_index", "label": "页数", "type": "string", "describe": "第几页,从第一页开始,默认1", "value": "1" }, { "field": "page_size", "label": "每页行数", "type": "string", "describe": "每页多少条,默认25,最大25", "value": "25" }, { "field": "start_time", "label": "修改开始时间", "type": "string", "describe": "修改起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空", "value": "{{LAST_SYNC_TIME|datetime}}" }, { "field": "end_time", { ... ``` #### 请求参数说明 - `page_index`: 页数,从第一页开始。 - `page_size`: 每页行数,默认25条。 - `start_time`: 修改开始时间,与结束时间必须同时存在。 - `end_time`: 修改结束时间,与开始时间必须同时存在。 - `status`: 单据状态,此处设置为"Confirmed"(已出库)。 - `date_type`: 时间类型,此处设置为2(出库时间)。 - `wms_co_id`: 分仓编号。 这些参数确保我们能够精确地获取所需的销售出库单数据。 #### 数据请求与清洗 在轻易云平台上,我们可以通过配置自动化任务来定期调用该接口,并对返回的数据进行清洗和处理。以下是一个典型的数据请求与清洗流程: 1. **定时任务配置**:使用Crontab表达式`2 */3 * * *`设置每三小时执行一次任务。 2. **请求参数动态填充**:使用模板变量如`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`动态填充请求参数中的时间字段。 3. **条件过滤**:在返回的数据中,仅保留满足条件`items.qty > 0`的记录。 #### 数据转换与写入 在获取并清洗数据后,需要将其转换为目标系统可接受的格式,并写入目标系统。以下是一个简单的数据转换示例: ```json { ... // 转换后的字段映射 { ... // 示例字段映射 { ... ``` 通过这种方式,我们可以确保数据在不同系统之间无缝对接。 #### 异常处理与补偿机制 为了确保数据集成过程的可靠性,我们还需要配置异常处理与补偿机制。例如,当某次任务失败时,可以通过以下补偿机制重新尝试: ```json { ... // 补偿机制配置 { ... ``` 这种机制确保即使在网络或系统故障情况下,也能保证数据的一致性和完整性。 综上所述,通过合理配置轻易云数据集成平台的元数据和自动化任务,我们可以高效地调用聚水潭·奇门接口获取销售出库单数据,并进行必要的数据清洗、转换和写入操作。这不仅提升了业务透明度和效率,也保证了数据的一致性和可靠性。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/S18.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星辰V2 API接口 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)处理,并最终写入目标平台。在本案例中,我们将详细探讨如何将聚水潭的销售出库单数据转换为金蝶云星辰V2 API接口所能接收的格式,并写入到目标平台。 #### 元数据配置解析 元数据配置是实现数据转换和写入的关键。以下是针对金蝶云星辰V2 API接口的元数据配置详细解析: ```json { "api": "/jdy/v2/scm/sal_out_bound", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "bill_source", "label": "单据来源,固定传入ISV", "type": "string", "describe": "单据来源,固定传入APP", "value": "ISV" }, { "field": "bill_date", "label": "出库日期,格式:2019-01-01", "type": "datetime", "describe": "出库日期,格式:2019-01-01", "value": "{io_date}" }, { ... } ] } ``` #### 数据字段映射与转换 1. **单据来源(bill_source)**: - 固定值为"ISV",表示该单据来自第三方系统。 2. **出库日期(bill_date)**: - 使用源数据中的`io_date`字段,需确保格式为`YYYY-MM-DD`。 3. **单据编号(bill_no)**: - 映射源数据中的`io_id`字段。 4. **客户信息(customer_number)**: - 映射源数据中的`shop_id`字段。 5. **整单折扣额(bill_dis_amount)**: - 使用条件判断,根据订单类型`order_type`决定折扣额。如果是“补发订单”或“换货订单”,则折扣额为0,否则使用源数据中的`free_amount`字段。 6. **自定义字段(custom_field)**: - 包含两个子字段:聚水潭线上单号和订单类型,分别映射源数据中的`so_id`和`order_type`字段。 7. **操作类型(operation_key)**: - 固定值为"audit",表示审核操作。 8. **备注(remark)**: - 映射源数据中的`remark`字段。 9. **商品分录(material_entity)**: - 是一个数组,每个元素代表一个商品条目。包含以下子字段: - 商品编号(material_number):映射源数据中的SKU ID。 - 仓库编号(stock_number):映射仓库ID。 - 数量(qty):映射商品数量。 - 单位(unit_id):固定值为"04"。 - 含税单价(tax_price):根据订单类型判断,如果是“换货订单”或“补发订单”,则价格为0,否则使用商品销售价格。 - 是否赠品(is_free):根据商品价格和订单类型判断是否为赠品。 - 金额(amount):计算金额。 10. **费用明细分录(cus_bear_fee_entry)**: - 是一个数组,每个元素代表一项费用明细。包含以下子字段: - 客户承担金额(income_amount):根据订单类型判断,如果是“换货订单”或“补发订单”,则金额为0,否则使用运费金额。 - 备注(income_comment):固定值为"客户承担运费"。 - 收入名称ID(income_name_id):固定值为"1"。 #### 数据请求与清洗 在进行ETL处理时,需要确保从聚水潭提取的数据符合上述元数据配置要求。通过轻易云的数据清洗功能,可以对原始数据进行必要的格式化和验证。例如: ```python def clean_data(source_data): # 清洗出库日期 source_data['io_date'] = format_date(source_data['io_date']) # 清洗整单折扣额 if source_data['order_type'] in ['补发订单', '换货订单']: source_data['free_amount'] = '0' # 清洗商品分录 for item in source_data['items']: if item['sale_price'] in ['0', '0.0'] or source_data['order_type'] in ['换货订单', '补发订单']: item['is_free'] = 'true' else: item['is_free'] = 'false' return source_data ``` #### 数据转换与写入 清洗后的数据需要按照元数据配置进行转换,并通过POST请求写入金蝶云星辰V2 API接口: ```python import requests def write_to_kingdee(data): url = "/jdy/v2/scm/sal_out_bound" headers = {"Content-Type": "application/json"} response = requests.post(url, json=data, headers=headers) if response.status_code == 200: print("Data written successfully") else: print("Failed to write data", response.text) # 示例调用 cleaned_data = clean_data(source_data) write_to_kingdee(cleaned_data) ``` 通过上述步骤,可以实现从聚水潭到金蝶云星辰V2的销售出库单数据无缝对接。关键在于准确理解和应用元数据配置,并确保每个步骤的数据处理都符合目标API接口的要求。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/T27.png~tplv-syqr462i7n-qeasy.image)