从聚水潭到畅捷通:ETL数据转换技术详解

  • 轻易云集成顾问-钟家寿
### 聚水潭·奇门数据集成到畅捷通T+的技术实现 在许多商业场景中,订单管理与出库操作涉及多个系统之间的数据同步和集成,这是一个复杂而又关键的环节。本文以“取消发货-聚水潭-销售出库单--->畅捷通-销货单-档口【G-F-档口】”方案为例,详细讲解如何利用轻易云数据集成平台,实现聚水潭·奇门与畅捷通T+系统的高效对接。 首先,通过调用聚水潭·奇门提供的API接口 `jushuitan.saleout.list.query`,我们可以定时可靠地抓取最新的销售出库单信息。在此过程中,需要注意分页处理和限流问题,以确保数据抓取过程稳定且完整。按照API文档说明,我们配置了相应参数,并采用批量请求方式增进效率。 抓取到所需的数据后,接下来面临的是将这些数据快速、准确地写入到畅捷通T+系统。为了满足这一需求,我们使用了畅捷通T+提供的 `/tplus/api/v2/saleDelivery/Create` 接口。考虑到两者之间可能存在的数据格式差异,对传输的数据进行了必要的转换和映射。此外,还通过设置错误重试机制以及异常处理逻辑,以提升系统整体运行稳定性。 最后,为了监控整个流程,从数据获取、处理再到写入,全程均进行了实时监控并记录日志。这不仅有助于及时发现和解决问题,也能为后续优化提供丰富的信息依据。 下一部分内容将具体探讨上述各个技术环节中的实际配置及操作步骤,以及遇到的问题如何被逐步解决,从而最终实现两个系统之间高效无缝的数据对接。 ![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/D28.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": "100"}, {"field": "start_time", "label": "修改开始时间", "type": "string", "describe": "修改起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空", "value":"{{LAST_SYNC_TIME|datetime}}"}, {"field": "end_time", "label":"修改结束时间","type":"string","describe":"修改结束时间,和起始时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空","value":"{{CURRENT_TIME|datetime}}"}, {"field":"status","label":"单据状态","type":"string","describe":"单据状态: WaitConfirm=待出库; Confirmed=已出库; Cancelled=作废","value":"Cancelled"}, {"field":"date_type","label":"时间类型","type":"int","describe":"时间类型 默认0 0=修改时间 ; 1=制单日期; 2=出库时间","value":"2"}, {"field":"shop_id","label":"shop_id","type":"string","value":"10315064"} ], ... } ``` #### 数据请求与清洗 在调用该接口时,需要注意以下几个关键参数: - `page_index` 和 `page_size`:用于分页控制,每次请求最多返回25条记录。 - `start_time` 和 `end_time`:用于指定查询的时间范围,这两个参数必须同时存在且间隔不超过七天。 - `status`:指定要查询的单据状态,此处我们设置为“Cancelled”,即查询作废的销售出库单。 - `date_type`:指定时间类型,此处设置为“2”,表示按出库时间进行过滤。 轻易云平台支持自动填充响应数据,并提供了异常处理机制。例如,当某些字段缺失或格式错误时,可以通过配置自动补全或替代值来确保数据完整性。 #### 数据转换与写入 获取到原始数据后,需要对其进行清洗和转换,以便写入目标系统。在这个过程中,可以利用轻易云平台提供的数据转换工具,将聚水潭的数据格式转换为畅捷通所需的格式。 例如,对于字段映射,可以配置如下: ```json { ... "_function FROM_UNIXTIME( unix_timestamp() -86400 , '%Y-%m-%d %H:%i:%s' )" } ``` 这种配置可以确保在数据传输过程中,不会因为格式不匹配而导致错误。 #### 实时监控与调度 为了确保数据集成过程的稳定性和实时性,可以配置定时任务(crontab)来定期调用接口并处理数据。例如,每三小时执行一次: ```json { ... "\"crontab\":\"2 *\\/3 * * *\"" } ``` 这种调度策略可以确保数据及时更新,同时避免因频繁调用而导致的性能问题。 #### 条件过滤 在实际应用中,我们可能需要根据特定条件过滤数据。例如,只处理备注中包含“撤销已发货”的记录: ```json { ... "\"condition\":[[{\"field\":\"remark\",\"logic\":\"like\",\"value\":\"撤销已发货\"}]]" } ``` 这种条件过滤可以极大地提高数据处理效率,避免无关数据干扰业务流程。 通过以上步骤,我们成功实现了从聚水潭·奇门系统获取销售出库单数据,并将其加工后写入畅捷通系统。这不仅简化了跨系统的数据集成过程,还提升了业务透明度和效率。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/S16.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:将聚水潭销售出库单转化为畅捷通销货单 在数据集成的生命周期中,数据请求与清洗完成后,接下来就是数据转换与写入阶段。本文将详细探讨如何使用轻易云数据集成平台,将聚水潭的销售出库单数据通过ETL转换,最终写入畅捷通T+的销货单接口。 #### API接口配置 根据元数据配置,我们需要将聚水潭的销售出库单数据转换为畅捷通T+能够接收的格式,并通过API接口进行写入。以下是API接口的详细配置: ```json { "api": "/tplus/api/v2/saleDelivery/Create", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field":"Code","label":"单据编码","type":"string"}, {"field":"VoucherDate","label":"单据日期","type":"string","describe":"单据日期;默认系统日期","value":"{io_date}"}, {"field":"ExternalCode","label":"外部系统单据编码","type":"string","describe":"外部系统单据编码,编码必须唯一,且此字段不为空","value":"{io_id}"}, {"field":"BusinessType","label":"业务类型","type":"string","describe":"业务类型,BusiTypeDTO对象;","value":"16","parser":{"name":"ConvertObjectParser","params":"Code"}}, {"field":"Customer","label":"客户","type":"string","describe":"111","value":"{drp_co_id_from}","parser":{"name":"ConvertObjectParser","params":"Code"}}, {"field":"Memo","label":"备注","type":"string","describe":"111","value":"{so_id}"}, {"field":"InvoiceType","label":"票据类型","type":"string","value":"01","parser":{"name":"ConvertObjectParser","params":"Code"}}, {"field":"Warehouse","label":"仓库","type":"string","value":"{wms_co_id}","parser":{"name":"ConvertObjectParser","params":"Code"},"mapping":{"target": "66d687ab2f3fde34df428d6d", "direction": "positive"}}, {"field": "IsAutoGenerateSaleOut", "label": "是否自动销售出库单", "type": "string", "value": "false"}, {"field": "DynamicPropertyKeys", "label": "DynamicPropertyKeys", "type": "string", "value": "priuserdefnvc5,priuserdefnvc3,priuserdefnvc1,pubuserdefnvc2,pubuserdefnvc4", "parser":{"name": "StringToArray", "params": ","}}, {"field": "DynamicPropertyValues", "label": "DynamicPropertyValues", "type": "string", "value": "{remark}<{labels}<{l_id}<{o_id}<{io_id}", "parser":{"name": "StringToArray", "params": "<"}}, {"field": "Currency", "label": "币别", "type": "string", "value": "{new_currency}", "parser":{"name": "ConvertObjectParser", "params": "Code"}}, { "field": "SaleDeliveryDetails", "label": "销货单明细", "type": "array", "describe": "111", "value": "items", 'children': [ { 'field': 'Inventory', 'label': '存货', 'type': 'string', 'describe': '_mongoQuery 034a8df4-18b0-3b85-b944-c9fbd5507677 findField=content.sku_id where={"content.name":{"$eq":"'{{list.items_sku_id}}'"}}', 'value': '{{items.sku_id}}', 'parser': {'name': 'ConvertObjectParser', 'params': 'Code'} }, { 'field': 'Unit', 'label': '存货计量单位', 'type': 'string', 'value': '_findCollection find BaseUnitCode from 4f38eaec-04c3-35c0-bb81-3a9c31cb7640 where Code={{items.sku_id}}', 'parser': {'name': 'ConvertObjectParser', 'params': 'Code'} }, {'field':'Quantity','label':'数量','type':'string','value':'_function \'{{items.qty}}\'*(-1)'}, {'field':'OrigTaxAmount','label':'含税金额','type':'string','value':'_function \'{{items.qyy_amountafter}}\'*(-1)'}, {'field':'DetailMemo','label':'备注','type':'string'} ] } ], “otherRequest”: [ {“field”: “dataKey”, “label”: “dataKey”, “type”: “string”, “describe”: “111”, “value”: “dto”} ], “enforcedAssociation”: true } ``` #### 数据字段解析与转换 1. **基础字段映射**: - `VoucherDate`:使用 `{io_date}` 替换为系统日期。 - `ExternalCode`:使用 `{io_id}` 确保外部系统单据编码唯一。 - `BusinessType`、`Customer`、`InvoiceType`、`Warehouse` 等字段均通过 `ConvertObjectParser` 转换为目标平台所需格式。 2. **动态属性处理**: - `DynamicPropertyKeys` 和 `DynamicPropertyValues` 使用 `StringToArray` 将字符串转化为数组,以适应目标平台的数据结构。 3. **销货单明细处理**: - `Inventory` 字段通过 `_mongoQuery` 查询并匹配 SKU ID。 - `Unit` 字段通过 `_findCollection` 查找对应的计量单位。 - 数量和含税金额字段使用 `_function` 表达式进行数值转换(例如乘以 -1)。 #### 数据写入操作 在完成上述字段解析与转换后,通过 POST 请求将数据发送至 `/tplus/api/v2/saleDelivery/Create` 接口,实现数据写入操作。确保每个字段都符合目标平台的要求,并且所有必填项都已正确填充。 #### 小结 本文详细介绍了如何利用轻易云数据集成平台,将聚水潭销售出库单的数据经过ETL转换后,成功写入畅捷通T+销货单接口。通过精确的字段映射和解析,以及动态属性和明细项的处理,实现了不同系统间的数据无缝对接。 ![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/T4.png~tplv-syqr462i7n-qeasy.image)