实现销售退仓数据无缝对接:从聚水潭到金蝶云星空

  • 轻易云集成顾问-林峰
### 聚水潭--销售退仓到金蝶云星空--非奇门本地仓对接案例分享 在实际业务场景中,如何高效、准确地实现聚水潭销售退仓数据向金蝶云星空的批量集成,是诸多企业面临的重要挑战。本文将重点探讨一个具体的系统对接集成案例:利用轻易云数据集成平台,将聚水潭系统中的销售退仓数据流转至金蝶云星空中的销售出库模块,并取消收到货物的处理。 #### 系统背景与需求分析 为了确保整个流程的数据真实性和及时性,我们需要解决以下技术难题: 1. **定时可靠抓取聚水潭接口数据**:通过调用`/open/aftersale/received/query`接口,定时拉取最新的销售退仓记录。 2. **处理分页与限流问题**:鉴于大量订单带来的分页及API限流要求,需要制定高效的数据抓取策略。 3. **自定义数据转换逻辑**:由于两个系统间字段和结构差异较大,我们必须制定严格且灵活的数据转换规则,以满足特定业务需求。 4. **快速大量写入到金蝶云星空**:利用`batchSave` API,实现批量、高吞吐量的数据写入能力,使得大量退仓记录能够迅速、安全地导入到目标系统。 为应对这些复杂且多样的问题,本方案依托轻易云强大的可视化操作界面、实时监控及告警功能,实现了从源头到终端的全生命周期管理。 #### 技术方案概述 首先,通过配置API资产管理统一视图,对连接聚水潭和金蝶云星空所需的一系列API进行集中管理。在此基础上,运用可视化的数据流设计工具,下列步骤逐一展开: - **接口调用与监控**: - 使用专门定制化脚本循环调用聚水潭 `/open/aftersale/received/query` 接口,每次返回固定数量的结果,并妥善处理分页返回机制以及可能出现的请求限制(Rate Limiting)。 - **异常检测与重试机制**: - 集成过程中设立详细异常检测,对每一步骤进行日志记录。同时,还添加智能错误重试机制,以保证所有失败任务得到充分补救,无漏单现象发生。 - **自定义映射规则执行**: - 对获取到的数据施以自定义格式转换,例如时间戳格式或字段名匹配等,以便符合金蝶云星空 `batchSave` API 的输入规范。 最终,有了这些关键环节保障,极大提升了整个数据集成过程中的可靠性和效率。接下来章节,将更 ![打通钉钉数据接口](https://pic.qeasy.cloud/D29.png~tplv-syqr462i7n-qeasy.image) ### 调用聚水潭接口/open/aftersale/received/query获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是关键的第一步。本文将深入探讨如何通过聚水潭接口`/open/aftersale/received/query`获取销售退仓数据,并进行初步加工。 #### 接口配置与请求参数 首先,我们需要配置元数据,以确保请求参数的正确性和完整性。以下是元数据配置的详细内容: ```json { "api": "/open/aftersale/received/query", "effect": "QUERY", "method": "POST", "number": "io_id", "id": "io_id", "idCheck": true, "request": [ { "field": "page_index", "label": "页码", "type": "string", "describe": "第几页,从第一页开始,默认1", "value": "1" }, { "field": "page_size", "label": "页数", "type": "string", "describe": "每页多少条,默认30,最大50", "value": "50" }, { "field": "modified_begin", "label": "修改起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空", "type": "string", "value": "{{LAST_SYNC_TIME|datetime}}" }, { "field": "modified_end", "label": "修改结束时间,和起始时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空", "type": "string", "value": "{{CURRENT_TIME|datetime}}" }, { "field": "date_type", "label": “日期类型”, “type”: “string”, “describe”: “店铺编号”, “value”: “1” } ], “autoFillResponse”: true, “condition”: [ [ { “field”: “wms_co_id”, “logic”: “eqv2”, “value”: “10816570” }, { “field”: “items.qty”, “logic”: “lt”, “value”: “0” } ] ] } ``` #### 请求参数解析 - `page_index` 和 `page_size`:分页参数,用于控制每次请求的数据量。默认情况下,每次请求第一页的数据,每页最多返回50条记录。 - `modified_begin` 和 `modified_end`:用于指定查询的时间范围。两个参数必须同时存在且时间间隔不能超过七天。这些参数通过模板变量动态填充,如`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`。 - `date_type`:指定日期类型,这里固定为“1”。 #### 数据过滤条件 在获取数据后,需要根据特定条件进行过滤: - `wms_co_id`: 固定值为“10816570”,表示特定仓库ID。 - `items.qty`: 数量小于0,即退货数量。 #### 数据请求与处理流程 1. **发送请求**:根据上述配置,通过POST方法向聚水潭接口发送请求。 2. **接收响应**:平台自动填充响应数据(autoFillResponse: true)。 3. **数据过滤**:根据条件过滤出符合要求的数据记录。 以下是一个示例代码片段,用于发送请求并处理响应: ```python import requests import datetime # 定义请求URL和头信息 url = 'https://api.jushuitan.com/open/aftersale/received/query' headers = {'Content-Type': 'application/json'} # 获取当前时间和上次同步时间 current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') last_sync_time = (datetime.datetime.now() - datetime.timedelta(days=7)).strftime('%Y-%m-%d %H:%M:%S') # 定义请求体 payload = { 'page_index': '1', 'page_size': '50', 'modified_begin': last_sync_time, 'modified_end': current_time, 'date_type': '1' } # 发送POST请求 response = requests.post(url, headers=headers, json=payload) # 检查响应状态码 if response.status_code == 200: data = response.json() # 根据条件过滤数据 filtered_data = [item for item in data['items'] if item['wms_co_id'] == '10816570' and item['qty'] < 0] # 后续处理逻辑... else: print(f"Error: {response.status_code}") ``` 通过上述步骤,我们成功调用了聚水潭接口获取销售退仓数据,并进行了初步的数据过滤和加工,为后续的数据转换与写入奠定了基础。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/S18.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台生命周期第二步:ETL转换与数据写入金蝶云星空API接口 在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是至关重要的一步。本文将详细探讨如何利用轻易云数据集成平台,将聚水潭的销售退仓数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 数据转换与写入配置 在轻易云数据集成平台上,我们可以通过配置元数据来实现对数据的转换和写入。以下是一个详细的元数据配置示例,用于将聚水潭的销售退仓数据转换并写入金蝶云星空。 ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSCKD09"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"TH{io_id}"}, {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find F_POKM_saleorgId from fb5be33d-e591-3ad4-91d7-c1ded9b2da17 where FNumber={shop_id}"}, {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find F_POKM_StockOrgId from fb5be33d-e591-3ad4-91d7-c1ded9b2da17 where FNumber={shop_id}"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{modified}"}, {"field":"FCustomerID","label":"客户","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{shop_id}"}, {"field":"FSettleCurrID","label":"币别","type":"string","value":"PRE001","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FNote","label":"备注","type":"","describe":"","value":""}, { "field": "FEntity", "label": "明细信息", "type": "array", "describe": "", "value": "", "children":[ {"field":""} ] }, { // Other fields omitted for brevity } ], // Other configurations omitted for brevity } ``` #### 关键字段解析 1. **单据类型(FBillTypeID)**: - 配置为固定值 `XSCKD09`,表示销售出库单。 - 使用 `ConvertObjectParser` 将其转化为金蝶系统所需格式。 2. **单据编号(FBillNo)**: - 动态生成,使用 `{io_id}` 作为标识符。 3. **销售组织(FSaleOrgId)** 和 **库存组织(FStockOrgId)**: - 通过 `_findCollection` 方法,从指定集合中查找并转换 `shop_id` 对应的组织编码。 4. **日期(FDate)**: - 直接使用 `{modified}` 字段值,表示修改日期。 5. **客户(FCustomerID)**: - 同样通过 `ConvertObjectParser` 转换 `shop_id` 为客户编码。 6. **币别(FSettleCurrID)**: - 固定值 `PRE001`,使用 `ConvertObjectParser` 转换为金蝶系统所需格式。 7. **备注(FNote)**: - 动态生成,包括退货取消原因及售后单号等信息。 8. **明细信息(FEntity)**: - 包含多个子字段,如物料编码、实退数量、是否赠品、含税单价等。 - 每个子字段均有相应的解析和转换逻辑,例如物料编码使用 `ConvertObjectParser` 转换 SKU 编码。 #### 操作配置 除了请求字段外,还需要配置一些操作参数: - **FormId**:业务对象表单 ID,如 `SAL_OUTSTOCK` 表示销售出库。 - **Operation**:执行操作类型,如 `Save` 表示保存。 - **IsAutoSubmitAndAudit**:布尔值,表示是否自动提交并审核。 - **IsVerifyBaseDataField**:布尔值,表示是否验证基础资料有效性。 - **BatchCount**:服务端开启的线程数,用于提高处理效率。 - **InterationFlags**:允许负库存标志。 #### 数据写入过程 在完成上述配置后,通过轻易云平台进行 ETL 转换,将处理后的数据发送至金蝶云星空 API 接口。具体步骤如下: 1. 根据元数据配置,从源系统提取数据。 2. 使用配置中的解析器和转换器,对提取的数据进行清洗和转换。 3. 将转换后的数据按照目标 API 接口要求进行封装。 4. 调用目标 API 接口,将封装好的数据发送至金蝶云星空系统。 5. 实时监控数据流动和处理状态,确保每个环节顺利完成。 通过这种方式,可以实现不同系统间的数据无缝对接,提高业务透明度和效率。 ![打通企业微信数据接口](https://pic.qeasy.cloud/T12.png~tplv-syqr462i7n-qeasy.image)