构建高效的数据集成系统:从旺店通到金蝶云星空

  • 轻易云集成顾问-贺强
### 旺店通·旗舰奇门数据集成到金蝶云星空:销售退货单预入库关联 在系统对接和数据集成项目中,确保不同平台间的数据无缝同步是关键步骤之一。本文将介绍如何通过轻易云数据集成平台,将旺店通·旗舰奇门的销售退货单数据高效、准确地传输并写入到金蝶云星空中,实现预入库关联操作。本技术案例重点分享了API接口调用、处理分页与限流问题以及异常处理等方面。 #### API接口的配置与调用 - **获取旺店通·旗舰奇门销售退货单数据**:首先,通过调用wdt.wms.stockin.refund.querywithdetail获取需要同步的销售退货单详细信息。此API能够精准抓取最新生成或更新的订单信息,为后续的数据处理提供基础。 ```json { "api_name": "wdt.wms.stockin.refund.querywithdetail", "params": { // 必要参数如时间范围,分页参数等 } } ``` - **写入金蝶云星空**:利用batchSave API将从旺店通获取的数据批量写入到金蝶云星空。在执行这个过程时,需要特别注意数据格式的一致性。 ```json { "api_name": "batchSave", "payload": [ // 转换后的具体业务数据 ] } ``` #### 分页与限流管理 为了有效应对大规模数据库查询所产生的问题,防止因一次性抓取大量记录导致系统崩溃或者响应超时,我们将在实现方案中采用分页策略,并结合限流措施来优化性能。例如,在每次API请求时限定返回条目数,当达到一定数量后再继续下一次请求,从而平衡实时性与效率需求。 ```http GET /query? page=1&page_size=50&...other_params... ``` 如此循环直到所有待处理订单全部被成功抓取和存储。这不仅减少了系统负荷,还能确保不会遗漏任何一笔重要交易记录。 #### 数据格式转换及映射 由于各个系统之间往往存在字段名或者结构上的差异,必须进行相应的数据格式转换以适配目的端需求。为此,我们设计了一套灵活且可定制化的映射规则,可以根据实际业务情况动态调整字段对应关系,从而保证最终上传至金蝶云星空的数据完全符合其期望值。 ```javascript function mapData(source) { return rawData.map(item => ({ orderNumber: item.order_id, customerName: item.buyer_nick, refundAmount: item.total_fee, ...additionalMappings ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/D4.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·旗舰奇门接口wdt.wms.stockin.refund.querywithdetail获取并加工数据 在数据集成生命周期的第一步,我们需要调用源系统的API接口以获取原始数据,并对其进行初步加工处理。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·旗舰奇门接口`wdt.wms.stockin.refund.querywithdetail`,并对返回的数据进行格式化和清洗。 #### 接口调用配置 首先,我们需要配置API接口的元数据,以便正确调用并处理返回的数据。以下是该接口的元数据配置: ```json { "api": "wdt.wms.stockin.refund.querywithdetail", "method": "POST", "number": "order_no", "id": "order_no", "idCheck": true, "formatResponse": [ {"old": "check_time", "new": "short_date", "format": "date"}, {"old": "modified", "new": "short_modify_date", "format": "date"} ], "request": [ { "field": "pager", "label": "分页参数", "type": "object", "children": [ {"field": "page_size", "label": "分页大小", "type": "string", "value":"200", "parent":"pager"}, {"field":"page_no","label":"页号","type":"string","value":"1","parent":"pager"} ] }, { "field":"params", "label":"业务参数", "type":"object", "children":[ {"field":"start_time","label":"start_time","type":"string","value": "{{DAYS_AGO_1|date}} 00:00:00"}, {"field":"end_time","label":"end_time","type":"string","value": "{{DAYS_AGO_1|date}} 23:59:59"}, {"field":"time_type","label":"time_type","type":"string"} ] } ], "omissionRemedy":{"crontab":null,"takeOverRequest":[]}, "autoFillResponse":true, "condition_bk":[[{"field":"attach_type","logic":"isnull","value":""}]], "condition":[[{"field":"attach_type","logic":"notnull","value":""}]] } ``` #### 请求参数设置 在请求参数中,我们设置了分页参数和业务参数: - **分页参数**:用于控制每次请求的数据量和页码。 - `page_size`:每页返回的数据条数,设为200。 - `page_no`:当前请求的页码,初始值为1。 - **业务参数**:用于指定查询条件。 - `start_time` 和 `end_time`:定义了查询时间范围,这里使用了模板变量`{{DAYS_AGO_1|date}}`来动态生成前一天的日期。 - `time_type`:时间类型,根据具体需求设置。 #### 数据格式化与清洗 在获取到原始数据后,需要对其进行格式化和清洗。根据元数据配置中的`formatResponse`字段,我们将以下字段进行转换: - 将`check_time`转换为`short_date`,格式为日期。 - 将`modified`转换为`short_modify_date`,格式为日期。 这种转换有助于统一数据格式,便于后续处理和分析。 #### 条件过滤 为了确保数据的准确性和完整性,我们还设置了条件过滤: - **条件过滤**:仅当字段`attach_type`不为空时才处理该条记录。这可以通过元数据中的条件配置实现: ```json { "condition":[[{"field":"attach_type","logic":"notnull","value":""}]] } ``` #### 自动填充响应 为了简化操作,我们启用了自动填充响应功能(autoFillResponse),这意味着平台会自动根据请求结果填充相应的数据字段,无需手动干预。 通过上述步骤,我们成功调用了旺店通·旗舰奇门接口,并对返回的数据进行了初步加工。这一过程不仅确保了数据的一致性和准确性,还为后续的数据转换与写入奠定了坚实基础。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/S9.png~tplv-syqr462i7n-qeasy.image) ### 数据集成案例:将销售退货单数据转换并写入金蝶云星空 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是具体的技术实现细节。 #### 1. API接口配置 首先,我们需要配置金蝶云星空API接口的相关参数。根据元数据配置,我们使用`batchSave` API,并通过POST方法提交请求。以下是关键字段及其配置: - **FormId**: `SAL_RETURNSTOCK`,表示业务对象表单ID。 - **Operation**: `Save`,表示执行保存操作。 - **IsAutoSubmitAndAudit**: `true`,表示提交并审核。 - **IsVerifyBaseDataField**: `true`,表示验证基础资料有效性。 - **SubSystemId**: `21`,表示系统模块为仓库模块。 - **BatchCount**: `5`,表示服务端开启的线程数。 #### 2. 数据字段映射与转换 在数据转换过程中,需要将源平台的数据字段映射到金蝶云星空API所需的字段格式。以下是主要字段及其转换逻辑: - **FBillTypeID**(单据类型): - 固定值:`XSTHD01_SYS` - 使用解析器:`ConvertObjectParser` - 参数:`FNumber` - **FBillNo**(单据编号): - 直接从源数据获取,无需转换。 - **FSaleOrgId**(销售组织)和**FStockOrgId**(库存组织): - 固定值:`101` - 使用解析器:`ConvertObjectParser` - 参数:`FNumber` - **FDate**(日期): - 动态值,根据条件选择: ```sql CASE '{associated_time}' WHEN '0000-00-00 00:00:00' THEN '{short_time}' ELSE '{associated_time}' END ``` - **FRetcustId**(退货客户): - 使用MongoDB查询获取: ```json _mongoQuery 3c9b5a58-0a09-3ae7-b7ea-20fbf5f16fa3 findField=content.FNumber where={"content.FName":{"$eq":"{shop_name}"}} ``` - **FHeadNote**(备注)和**F_TBIK_WDTBZ**(旺店通备注): - 动态组合多个字段生成备注信息: ```sql CASE '{associated_time}' WHEN '0000-00-00 00:00:00' THEN '{shop_name}-{warehouse_no}-{short_time}' ELSE '{shop_name}-{warehouse_no}-{short_time}-{associated_time}' END ``` #### 3. 明细信息处理 明细信息包含多个子字段,每个子字段需要进行相应的转换: - **FMaterialId**(物料编码): - 使用解析器:`ConvertObjectParser` - 参数:`FNumber` - **FRealQty**(实退数量): - 动态值,根据数量判断: ```sql CASE WHEN '{num}'<1 THEN '0' WHEN '{num}'>=1 THEN '{num}' ELSE '{num}' END ``` - **FTaxPrice**(含税单价): - 动态计算: ```sql {refund_amount}/{stockin_num} ``` #### 4. 财务信息处理 财务信息包含结算组织等字段: - **FSettleOrgId**(结算组织): - 固定值:`101` - 使用解析器:`ConvertObjectParser` - 参数:`FNumber` #### 5. 时间相关字段处理 实际入库时间和预入库关联时间均需要根据条件动态生成: ```sql CASE '{associated_time}' WHEN '0000-00-00 00:00:00' THEN '' ELSE '{short_time}' END ``` #### 实际操作示例 以下是一个完整的请求示例,将上述配置应用于实际操作中: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "FBillTypeID", "value": "XSTHD01_SYS" }, { "field": "FBillNo", "value": "{bill_no}" }, { "field": "FSaleOrgId", "value": "101" }, { "field": "FStockOrgId", "value": "101" }, { "field": "FDate", "value": "{modified}" }, { ... } ], ... } ``` 通过以上步骤,我们成功地将源平台的数据经过ETL转换后写入了金蝶云星空,实现了不同系统间的数据无缝对接。这不仅提升了数据处理效率,也确保了数据的一致性和准确性。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)