轻松实现旺店通退换数据的ETL转换与集成

  • 轻易云集成顾问-孙传友
### 旺店通·企业奇门数据集成到用友BIP:退换管理客户退款-v 在处理电商平台的退换货管理过程中,如何高效地将旺店通·企业奇门的数据无缝对接到用友BIP系统,是各大零售企业面临的一项复杂挑战。在本案例中,我们聚焦于“退换管理客户退款-v”的具体实施方案,通过详细技术步骤和最佳实践,解析整个数据集成过程。 #### 数据获取与分页处理 首先,为了确保从旺店通·企业奇门接口`wdt.refund.query`抓取的数据不漏单,我们采用定时任务机制,每隔特定时间间隔触发API调用。考虑到接口的分页限制和限流问题,根据返回结果中的分页信息进行循环拉取,直到所有待抓取的数据全部获取完毕。 ```python def fetch_refund_data(page_no=1): response = requests.post( 'https://api.wangdian.cn/openapi2/refund_query.php', data={ 'page_no': page_no, 'page_size': 100, # 每页最多100条 ... } ) json_response = response.json() if json_response['status'] == 0: return json_response['refunds'], json_response['total_results'] else: # 错误处理与重试机制 ``` 通过这样的预设策略,可以避免由于请求数量过多造成的限流影响,同时也确保每次都能完整地获取需要同步的数据。 #### 数据格式转换与映射 获得原始数据后,下一步是将其转换为符合用友BIP标准要求的格式。在这一步骤中,需要对字段进行详细的映射,并根据业务需求添加必要的信息。例如,将退款订单号、金额、用户信息等关键字段逐一对应,用Python字典实现简单易懂的键值映射: ```python def transform_data(refund_data): transformed_data = { "pay_bill_id": refund_data["refund_order_no"], "amount": float(refund_data["refund_amount"]), ... } return transformed_data ``` 这种方式不仅确保了数据结构的一致性,还便于后续错误追踪和调试。 #### 批量写入用友BIP系统 在完成上述步骤后,即可批量写入转换后的数据至用友BIP系统。通过调用官方提供的API `/yonbip/fi/paybill/save` 完成这一操作,并设计相应异常处理逻辑,以保证当某次批量提交失败时能够自动重试或记录日志以便人工干预: ```python def save_to_yonbip(transformed_datas): response = requests.post( 'https://api.y ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/D25.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.refund.query获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.refund.query`来获取并加工数据。 #### 接口概述 接口`wdt.refund.query`主要用于查询退换单的相关信息。该接口采用POST请求方式,支持分页查询,并且能够根据多种条件进行筛选。以下是该接口的元数据配置: ```json { "api": "wdt.refund.query", "method": "POST", "number": "refund_no", "id": "refund_no", "pagination": { "pageSize": 20 }, "idCheck": true, "condition": [ [ {"field": "process_status", "logic": "egt", "value": "80", "strictMode": true}, {"field": "type", "logic": "eq", "value": 4}, {"field": "refund_amount", "logic": "neqv2", "value": "0"} ], [ {"field": "process_status", "logic": "egt", "value": "80", "strictMode": true}, {"field": "type", "logic": "eq", "value": 5}, {"field": "refund_amount", "logic": "neqv2", "value": "0"} ] ], ... } ``` #### 请求参数配置 在调用该接口时,需要配置多个请求参数,以确保能够准确获取所需的数据。以下是主要的请求参数及其说明: - `process_status`: 表示退换单处理状态,如80表示待结算,90表示已完成。 - `time_type`: 时间类型,0表示最后更新时间,1表示结算时间。 - `start_time`: 开始时间,按最后修改(结算)时间增量获取数据。 - `end_time`: 结束时间,按最后修改时间(结算)增量获取数据。 - `page_size`: 每页返回的数据条数,默认值为40。 - `shop_no`: 店铺编号,用于指定查询哪个店铺的数据。 - `page_no`: 页号,不传值默认从0页开始。 这些参数可以通过模板变量动态生成,例如: ```json { ... {"field":"start_time","label":"开始时间","type":"string","describe":"按最后修改(结算)时间增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"end_time","label":"结束时间","type":"string","describe":"按最后修改时间(结算)增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss","value":"{{CURRENT_TIME|datetime}}"}, ... } ``` #### 条件过滤与分页处理 为了提高查询效率和准确性,我们可以设置条件过滤和分页处理。条件过滤主要通过字段逻辑运算来实现,例如: ```json [ {"field":"process_status","logic":"egt","value":"80","strictMode":true}, {"field":"type","logic":"eq","value":"4"}, {"field":"refund_amount","logic":"neqv2","value":"0"} ] ``` 分页处理则通过`page_size`和`page_no`字段来控制每次请求的数据量和页码。例如,每次请求20条数据,可以设置: ```json {"page_size":"20"} ``` #### 异常处理与补偿机制 在实际操作中,可能会遇到各种异常情况,如网络超时、接口响应错误等。为了保证数据完整性,可以设置定时任务进行异常补偿。例如,通过cron表达式每两小时执行一次补偿任务: ```json { ... omissionRemedy: { crontab: '2 */2 * * *', takeOverRequest: [ { field: 'start_time', value: '{{HOURE_AGO_3|datetime}}', type: 'string', label: '接管字段' }, { field: 'end_time', value: '{{CURRENT_TIME|datetime}}', type: 'string', label: '接管字段' } ] } } ``` 以上配置确保了在出现异常时,可以自动重新发起请求以补偿遗漏的数据。 #### 数据清洗与转换 获取到原始数据后,需要对其进行清洗和转换,以便后续处理。例如,可以根据业务需求对退换单状态进行映射,将不同状态码转换为更易读的文本描述。 ```json { ... transform: { process_status: { '80': '待结算', '90': '已完成' } } } ``` 通过上述步骤,我们可以高效地调用旺店通·企业奇门接口`wdt.refund.query`获取并加工所需的退换单数据,为后续的数据处理和分析打下坚实基础。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/S8.png~tplv-syqr462i7n-qeasy.image) ### 退换管理客户退款数据集成到用友BIPAPI接口的ETL转换 在数据集成生命周期的第二阶段,我们需要将源平台的数据进行ETL转换,确保其符合目标平台用友BIPAPI接口的格式要求。本文将详细探讨如何利用轻易云数据集成平台完成这一任务。 #### 配置元数据 首先,我们需要理解和配置元数据,以便将源平台的数据正确映射到用友BIPAPI接口所需的字段格式。以下是关键字段及其配置: 1. **单据编号 (code)**: - 类型: `string` - 描述: 新增时无需填写,修改时必填 - 值: `{refund_no}` 2. **汇率类型档案编码 (exchangeRateType_code)**: - 类型: `string` - 值: `01` 3. **单据日期 (vouchdate)**: - 类型: `string` - 格式: `yyyy-MM-dd HH:mm:ss` - 值: `{modified}` 4. **会计主体 (accentity)**: - 类型: `string` - 值: `_findCollection find mapping_sale_org from 4769a428-14c4-33b8-91fd-e8da3b39d5cb where shop_no={shop_no}` 5. **付款金额 (oriSum)** 和 **本币金额 (natSum)**: - 类型: `string` - 值: `_function round({refund_amount},2)` 6. **结算方式 (settlemode_code)**: - 类型: `string` - 值: `system_0001` 7. **业务员 (operator_name)**: - 类型: `string` - 值: `{creator_name}` 8. **客户id (customer)**: - 类型: `string` - 值: `_findCollection find mapping_customer from 4769a428-14c4-33b8-91fd-e8da3b39d5cb where shop_no={shop_no}` 9. **本币币种id (natCurrency)** 和 **币种 (currency_name)**: - 类型: `string` - 值分别为:`1480261131563434007` 和 `人民币` 10. **汇率类型名称 (exchangeRateType_name)** 和 **汇率 (exchRate)**: - 类型: `string` - 值分别为:`基准汇率` 和 `1` 11. **备注 (description)**: - 类型: `string` - 值: `{remark}` 12. **交易类型id、名称、编码**: - 类型:`string` - id值:`2742928410236975` - 名称值:`销售退款` - 编码值:`arap_payment_sale` 13. **销售组织编码 (org_code)**: - 类型:`string` - 值:`_findCollection find maping_sale_orgnumber from 4769a428-14c4-33b8-91fd-e8da3b39d5cb where shop_no={shop_no}` 14. **事项类型名称和编码**: - 名称值:`basebilltype_name` - 编码值:`arap_payment` 15. **收付款对象类型 (caobject)**: - 类型:`string` - 描述:1为客户 - 值:`1` 16. **单据类型 (billtype)**: - 类型:`string` - 描述:固定为9 - 值:`9` 17. **会计期间编码和id**: – 编码值:`2022-07` – id值:`2742928426767367` 18. **订单编号 (orderno)**: – 类型:`string` – 值: `{sales_tid}` 19. **时间戳 (pubts)**: – 类型:`string` – 格式为:`yyyy-MM-dd HH:mm:ss` – 值:`{{CURRENT_TIME|datetime}}` 20. **操作标识 (_status)**: – 类型:` string ` – 描述:`Insert`:新增、Update`:更新 – 值:`Insert` 21. **客户退款明细(PayBillb)** * 子字段包括款项类型编码(quickType_code),费用项目编码(expenseitem_code),金额(oriSum),本币金额(natSum),客户id(customer),客户名称(customer_name),销售组织编码(org_code),备注(description)和操作标识(_status)。 #### 数据转换与写入过程 在了解了上述元数据配置后,接下来是具体的ETL转换过程: 1. 从源平台获取原始数据,并根据元数据配置进行字段映射。例如,将源平台的退款编号映射到目标平台的单据编号。 2. 对于涉及计算或查找的字段,如付款金额、本币金额等,使用相应的函数进行处理。例如,使用 `_function round({refund_amount},2)` 来确保金额精度。 3. 针对复杂字段,如会计主体、客户ID等,需要通过 `_findCollection find mapping_sale_org from ... where shop_no={shop_no}` 等查询语句从映射表中获取相应的值。 4. 将处理后的数据按照目标平台API接口要求进行封装,并通过POST请求发送至 `/yonbip/fi/paybill/save` 接口。 5. 如果需要审核,可以调用 `/yonbip/fi/paybilllist/batchaudit` 接口完成批量审核。 通过上述步骤,我们可以确保源平台的数据经过ETL转换后,能够准确无误地写入到用友BIP系统中。这一过程不仅提高了数据处理效率,也保证了数据的一致性和准确性。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/T18.png~tplv-syqr462i7n-qeasy.image)