从聚水潭获取销售退货单到金蝶写入的完整操作指南

  • 轻易云集成顾问-曾平安
### 聚水潭·奇门数据集成到金蝶云星空——销售退货单对接案例 在实施聚水潭与金蝶云星空的系统集成过程中,我们重点解决了聚水潭·奇门的数据获取和处理以及将这些数据快速、准确地写入金蝶云星空。本文以“聚水潭-销售退货单-->金蝶-销售退货单”为具体案例,详细解析从实现接口调用到数据格式转换,再到异常处理的一系列技术细节。 为了确保从聚水潭·奇门(Jushuitan)接口jushuitan.refund.list.query抓取销售退货单数据的可靠性,并高效写入到金蝶云星空(Kingdee Yonyou)的batchSave接口中,我们设计了一整套集成方案。其中,主要挑战包括: 1. **如何调用与处理分页和限流问题**:启用自动分页机制,从而确保大批量数据完整获取,同时遵循API速率限制避免触发限流策略。 2. **定时可靠的数据抓取机制**:采用定时任务调度器,实现稳定周期性的数据拉取,并监控抓取过程中的状态变化,记录日志以备审查。 3. **两平台之间的数据格式差异转换**: 设计灵活的映射规则,将不同字段名及结构的数据进行匹配和转换,以适应目标系统的要求。 4. **大量数据快速写入**: 利用批量操作功能,通过优化数据库连接配置,加快提交速度,提高整体效率。 5. **异常处理与错误重试机制**:捕捉并记日志所有交互中的异常情况,对于临时故障自动重试,并通过告警系统通知运维人员干预。 场景演示中,通过实时监控工具直观展示每个环节的运行状态,使得整个流程透明可追溯。由此,不仅保障了业务连续性的同时,还显著提升了操作效率。这一实战经验,为更多类似需求提供了实践验证的方法路径。 后续章节将具体深入以上各个方面展开论述,包括详细代码示例和配置说明。 ![打通企业微信数据接口](https://pic.qeasy.cloud/D16.png~tplv-syqr462i7n-qeasy.image) ### 调用聚水潭·奇门接口获取并加工数据的技术实现 在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用聚水潭·奇门接口`jushuitan.refund.list.query`,获取并加工销售退货单数据。 #### 接口配置与请求参数 首先,我们需要配置接口的元数据。根据提供的元数据配置,我们可以看到该接口使用POST方法进行请求,并且有多个请求参数需要设置: ```json { "api": "jushuitan.refund.list.query", "effect": "QUERY", "method": "POST", "number": "{as_id}-{items_sku_id}", "id": "{as_id}-{items_sku_id}", "name": "as_id", "idCheck": true, "request": [ {"field": "page_index", "label": "第几页", "type": "int", "describe": "从第一页开始,默认1", "value": "1"}, {"field": "page_size", "label": "每页多少条", "type": "int", "describe": "默认30,最大50", "value": "50"}, {"field": "start_time", "label": "修改起始时间", "type": "datetime", "describe": "起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空", "value":"{{LAST_SYNC_TIME|datetime}}"}, {"field": "end_time", "label":"修改结束时间","type":"datetime", "describe":"结束时间,和起始时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空", "value":"{{CURRENT_TIME|datetime}}"}, {"field":"date_type","label":"时间类型","type":"int","describe":"修改时间:0 ; 创建时间:1; 确认时间: 2;非必填,默认0","value":"2"}, {"field":"status","label":"售后单状态","type":"string","describe":"(WaitConfirm:待确认,Confirmed:已确认,Cancelled:作废,Merged:被合并)","value":"Confirmed"}, {"field":"good_status","label":"货物状态","type":"string","describe":"(BUYER_NOT_RECEIVED:买家未收到货,BUYER_RECEIVED:买家已收到货,BUYER_RETURNED_GOODS:买家已退货,SELLER_RECEIVED:卖家已收到退货)","value":"SELLER_RECEIVED"} ], ... } ``` #### 请求参数详解 - `page_index` 和 `page_size`:用于分页控制,分别表示当前页码和每页记录数。 - `start_time` 和 `end_time`:用于限定查询的时间范围,这两个参数必须同时存在且间隔不超过七天。 - `date_type`:指定查询的时间类型,这里我们选择了“确认时间”。 - `status` 和 `good_status`:分别表示售后单状态和货物状态,我们选择了“已确认”和“卖家已收到退货”。 这些参数确保我们能够精确地获取到所需的数据。 #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换,以便后续处理。根据元数据配置中的条件部分,我们需要确保以下字段不为空且满足特定条件: ```json "condition":[ [{"field":"so_id","logic":"notnull"}], [{"field":"o_id","logic":"notnull"}], [{"field":"items.r_qty","logic":"notnull"}], [{"field":"items.r_qty","logic":"neqv2","value":"0"}] ] ``` 这些条件确保了我们只处理有效的销售退货单记录。 #### 数据模型构建 元数据配置中还提到了构建模型的需求: ```json "buildModel": true, "beatFlat":["items"] ``` 这意味着我们需要将嵌套的`items`字段平铺展开,以便于后续的数据处理和分析。 #### 异常处理与补偿机制 为了确保数据集成过程的可靠性,我们还需要设置异常处理和补偿机制。例如,通过定时任务来接管某些字段: ```json "omissionRemedy":{ ... ,"takeOverRequest":[{"field":"start_time", "value":"_function FROM_UNIXTIME( unix_timestamp() -86400 , '%Y-%m-%d %H:%i:%s' )", "type":"string", "label":"接管字段" ... }] } ``` 这个设置确保在发生异常时,可以自动调整查询的起始时间,从而避免数据丢失。 #### 实际应用案例 假设我们要从聚水潭系统中获取最近一天内所有已确认且卖家已收到退货的销售退货单,并将其导入到金蝶系统中。具体步骤如下: 1. **配置请求参数**:根据上述元数据配置,设置好所有必要的请求参数。 2. **发送请求**:通过轻易云平台发送POST请求到聚水潭·奇门接口。 3. **接收并解析响应**:解析返回的数据,根据条件进行过滤和清洗。 4. **构建目标模型**:将平铺展开后的数据转换为金蝶系统所需的数据格式。 5. **写入目标系统**:通过轻易云平台将处理后的数据写入金蝶系统。 通过上述步骤,我们可以高效地完成从聚水潭到金蝶的销售退货单数据集成。这不仅提高了业务透明度,还大大提升了工作效率。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现金蝶云星空销售退货单的ETL转换 在数据集成生命周期的第二阶段,我们需要将源平台的数据进行ETL转换,并将其写入目标平台。在本案例中,源平台为聚水潭的销售退货单,目标平台为金蝶云星空。我们将详细探讨如何使用轻易云数据集成平台配置元数据,实现这一过程。 #### 配置元数据 首先,我们需要配置元数据,以便将源平台的数据转换为金蝶云星空API接口能够接收的格式。以下是关键的元数据配置: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "XSTHD01_SYS" }, { "field": "FBillNo", "label": "单据编号", "type": "string", ... } ], ... } ``` #### 数据字段解析与映射 在配置元数据时,最重要的是对字段进行解析和映射。以下是几个关键字段的解析与映射示例: 1. **单据类型 (FBillTypeID)**: - 使用 `ConvertObjectParser` 将值转换为金蝶云星空所需的格式。 - 固定值 `"XSTHD01_SYS"` 表示销售退货单。 2. **单据编号 (FBillNo)**: - 直接从源平台获取 `{as_id}` 并赋值给 `FBillNo`。 3. **销售组织 (FSaleOrgId)** 和 **库存组织 (FStockOrgId)**: - 使用 `ConvertObjectParser` 将品牌 `{brand}` 转换为对应的组织编码。 - 映射关系通过 `mapping` 字段指定。 4. **退货客户 (FRetcustId)**: - 使用 `_function CASE` 根据 `{shop_name}` 的值决定客户ID。 - 如果是线下店铺,则返回 `0`,否则返回 `{shop_id}`。 5. **币别 (FSettleCurrId)**: - 同样使用 `ConvertObjectParser` 将店铺ID `{shop_id}` 转换为币别编码。 6. **日期 (FDate)**: - 直接从源平台获取并赋值给 `FDate`。 7. **明细信息 (FEntity)**: - 明细信息包含多个子字段,例如物料编码、实退数量、是否赠品等。 - 每个子字段都需要进行相应的解析和映射,例如物料编码使用 `ConvertObjectParser` 转换 `{items_sku_id}`,实退数量直接取值 `{items_r_qty}`。 #### 特殊处理逻辑 在一些字段中,我们需要进行特殊处理。例如: - **是否赠品 (FIsFree)**: - 使用 `_function CASE WHEN '{items_price}'>0 THEN 'false' ELSE 'true' END` 判断价格是否大于0,如果是则不是赠品,否则是赠品。 - **仓库 (FStockId)**: - 使用 `_findCollection` 从集合中查找对应仓库编号,根据条件 `FJSTID={wms_co_id} brand={brand} type={wh_id}` 获取仓库编号。 #### 请求参数配置 除了字段解析与映射外,还需要配置一些请求参数: - **FormId**:业务对象表单ID,固定值 `"SAL_RETURNSTOCK"` 表示销售退货单。 - **Operation**:执行操作,固定值 `"Save"`。 - **IsAutoSubmitAndAudit**:是否自动提交并审核,固定值 `true`。 - **IsVerifyBaseDataField**:是否验证基础资料有效性,固定值 `true`。 - **SubSystemId**:系统模块,固定值 `"21"` 表示仓库模块。 - **BatchCount**:服务端开启的线程数,固定值 `"5"`。 #### 实现批量保存 最后,通过调用 API 接口实现批量保存操作。根据配置好的元数据,将请求发送到金蝶云星空API接口,实现数据写入: ```json { ... "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, ... } ``` 通过上述配置和操作,我们可以成功地将聚水潭的销售退货单数据转换并写入到金蝶云星空系统中。这一过程不仅提高了数据处理效率,也确保了数据的一致性和准确性。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/T25.png~tplv-syqr462i7n-qeasy.image)