ETL转换:从用友BIP到旺店通的高效数据写入

  • 轻易云集成顾问-蔡威
### 用友BIP数据集成到旺店通·企业奇门案例分享: 物料逐个查询对接(九润源) 在本次技术案例中,我们聚焦于如何高效、稳定地实现用友BIP与旺店通·企业奇门之间的数据集成,对应具体的方案名称为“物料逐个查询对接”。此次集成任务主要通过调用用友BIP的API接口`/yonbip/digitalModel/product/list`获取数据,再利用旺店通·企业奇门提供的API接口 `wdt.goods.push` 实现批量数据写入。 首先,确保从用友BIP获取的数据准确无误是至关重要的一步。我们采用了定时抓取机制,通过设定合理的时间间隔,从而保证每一次调用都能及时捕捉新增和变更的数据。同时,为处理大规模的数据分页和限流问题,我们开发了一套自动化分页算法,使得每一页请求的数据可以在合理限制内被成功获取,并避免因频繁调用导致的速度瓶颈。 其次,在执行大量数据写入到旺店通·企业奇门时,我们采取了并行处理方式,以提升整体效率。这种方法不仅能够加快数据传输速度,还能有效分担系统压力,防止单点过载。此外,对于不同系统在表字段、数据类型上的差异性,我们设计了一个灵活且可扩展的数据映射层,确保从用友BIP传输来的原始信息能够精确转换为旺店通所需格式,实现无缝对接。 为了增强容错能力和可靠性,本方案引入了异常处理与错误重试机制。当某一步骤发生故障或意外错误时,该机制允许快速定位问题源头并进行自动化恢复操作,最大限度降低人工介入成本。在整个过程中,我们依赖实时监控功能,各环节状态及日志记录清晰透明,有助于快速响应潜在风险,提高业务连续性。 通过上述策略,此次物料逐个查询对接示例,不仅展示出两大平台的强兼容性,也充分体现出以用户需求为导向、灵活应变技术环境的重要意义。在后续内容中,将详细探讨具体配置步骤和代码实现细节,进一步剖析此方案实际应用中的各种挑战与解决方法。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/D16.png~tplv-syqr462i7n-qeasy.image) ### 用友BIP接口数据集成与加工技术案例 在数据集成的生命周期中,调用源系统接口获取并加工数据是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用用友BIP接口`/yonbip/digitalModel/product/list`,并对返回的数据进行加工处理。 #### 接口调用与请求配置 首先,我们需要配置API接口的请求参数。用友BIP提供了一个POST方法的接口,用于获取物料信息。以下是该接口的元数据配置: ```json { "api": "/yonbip/digitalModel/product/list", "method": "POST", "number": "code", "id": "id", "formatResponse": [ { "old": "unit", "new": "unit_new", "format": "string" } ], "condition": [ [ { "field": "Materialtype", "logic": "eqv2", "value": "1" } ] ], "request": [ { "field": "pageIndex", "label": "当前页索引  ", "type": "string", "describe": " 默认值:1", "value": "1" }, { "field": "pageSize", "label": "页大小   ", "type": "string", "describe": "默认值:10", "value": "50" }, { "field": "code", "label": "物料编码", "type": ":string" }, { "field": ":name", ":label:":"物料名称", ":type:":"string" }, { ":field:":"modelDescription", ":label:":"规格说明", ":type:":"string" }, { ":field:":"manageClass", ":label:":"物料分类ID", ":type:":"string" }, { ":field:":"productClass", ":label:":"商品分类ID", ":type:":"string" }, { :field:"productTemplate, :label:"物料模板ID, :type:"string }, :{ field:"model, label:"型号, type:"string }, :{ field:"simple, label:"扩展查询, type:"object, children:[ { field:"pubts, label:"时间戳, type:"string, describe:"查询大于所传时间戳的数据    示例:2021-10-22 21:59:40, value:"{{LAST_SYNC_TIME|datetime}}, parent:simple } ] } ] } ``` 在这个配置中,我们定义了请求参数和条件。例如,`pageIndex`和`pageSize`用于分页控制,默认值分别为1和50。其他字段如`code`、`name`等用于过滤查询条件。 #### 数据清洗与格式转换 获取到原始数据后,需要对其进行清洗和格式转换。根据元数据配置中的`formatResponse`字段,我们将返回结果中的`unit`字段重命名为`unit_new`,并将其格式化为字符串类型。 ```json "formatResponse":[{"old":"unit","new":"unit_new","format":"string"}] ``` 这一步确保了数据的一致性和可读性,使得后续的数据处理更加简洁明了。 #### 条件过滤 在请求过程中,我们还可以添加条件过滤。例如,以下条件表示只获取物料类型为1的数据: ```json "condition":[[{"field":"Materialtype","logic":"eqv2","value":"1"}]] ``` 这种条件过滤机制使得我们能够精准地获取所需的数据,避免不必要的数据传输和处理。 #### 请求示例 结合以上配置,一个完整的请求示例如下: ```json { "/yonbip/digitalModel/product/list":{ method: 'POST', headers:{ 'Content-Type': 'application/json' }, body:{ pageIndex:'1', pageSize:'50', code:'', name:'', modelDescription:'', manageClass:'', productClass:'', productTemplate:'', model:'', simple:{ pubts:'{{LAST_SYNC_TIME|datetime}}' } } } } ``` 这个请求将返回符合条件的物料信息,并且每页包含最多50条记录。 #### 数据处理与写入 在获取并清洗完数据后,可以将其转换为目标系统所需的格式,并写入目标数据库或系统。这一步通常涉及到复杂的业务逻辑和数据映射,需要根据具体需求进行定制化开发。 通过以上步骤,我们实现了从用友BIP系统获取物料信息并进行初步加工处理,为后续的数据集成奠定了基础。在整个过程中,轻易云数据集成平台提供了全透明可视化的操作界面,使得每个环节都清晰易懂,并实时监控数据流动和处理状态,大大提升了业务的透明度和效率。 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/S7.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台——旺店通·企业奇门API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中涉及的技术细节和具体操作。 #### 元数据配置解析 首先,我们需要理解元数据配置中的各个字段及其意义。以下是主要字段及其描述: - `api`: `wdt.goods.push` 表示调用的API接口。 - `method`: `POST` 表示请求方法。 - `idCheck`: `true` 表示需要对ID进行检查。 请求参数主要包括一个名为 `goods_list` 的数组节点,包含多个货品信息,每个货品信息又包含多个字段,如下所示: - **货品节点 (`goods_list`)** - `goods_no`: 货品编号 - `goods_type`: 货品类别 - `goods_name`: 货品名称 - `class_name`: 分类 - `brand_name`: 品牌 - `unit_name`: 基本单位 - `aux_unit_name`: 辅助单位名称 - `remark`: 备注 - **属性 (`props1`, `props2`, ...)**: 包括酒精度、规格、体积等。 - **单品节点 (`spec_list`)**: 包含SKU所有属性信息的数据节点。 #### 数据转换与映射 在ETL转换过程中,需要将源平台的数据映射到上述结构中。以下是一些关键字段的映射规则: 1. **货品编号 (`goods_no`)** ```json "value": "{code}" ``` 映射源数据中的`code`字段到目标字段`goods_no`。 2. **货品名称 (`goods_name`)** ```json "value": "{name}" ``` 映射源数据中的`name`字段到目标字段`goods_name`。 3. **分类 (`class_name`)** ```json "value": "{manageClass_Name}" ``` 映射源数据中的`manageClass_Name`字段到目标字段`class_name`。 4. **品牌 (`brand_name`)** ```json "value": "{brand_Name}" ``` 映射源数据中的`brand_Name`字段到目标字段`brand_name`。 5. **基本单位 (`unit_name`)** ```json "value": "{unit_Name}" ``` 映射源数据中的`unit_Name`字段到目标字段`unit_name`。 6. **单品节点 (`spec_list`)** - 商家编码 (`spec_no`) ```json "value": "{code}" ``` - 规格码 (`spec_code`) ```json "value": "{{productskus.0.model}}" ``` - 主条码 (`barcode`) ```json "value": "{{detail.barCode}}" ``` #### 特殊处理逻辑 在某些情况下,需要对特定字段进行特殊处理。例如,税率(`tax_rate`) 字段: ```json "value": "_function ( case '{{detail.outTaxrate_Name}}' when '' then 0 else '{{detail.outTaxrate_Name}}' end ) /100" ``` 这里使用了一个自定义函数 `_function()` 来处理税率值,将空值转换为0,否则按原值除以100。 #### 实际操作步骤 1. **提取源平台数据**:通过轻易云的数据请求功能,从源平台提取原始数据。 2. **清洗与预处理**:对提取的数据进行清洗和预处理,确保其符合后续转换要求。 3. **映射与转换**:根据上述元数据配置,将清洗后的数据映射并转换为目标格式。 4. **构建请求**:根据转换后的数据,构建符合旺店通·企业奇门API接口要求的请求报文。 5. **发送请求**:通过HTTP POST方法,将构建好的请求报文发送至旺店通·企业奇门API接口。 6. **监控与日志记录**:实时监控请求状态,并记录日志以便后续分析和问题排查。 #### 示例代码片段 以下是一个简化的Python代码示例,用于演示上述过程: ```python import requests # 构建请求报文 payload = { "api": "wdt.goods.push", "method": "POST", "goods_list": [ { "goods_no": source_data["code"], "goods_type": "1", "goods_name": source_data["name"], "class_name": source_data["manageClass_Name"], "brand_name": source_data["brand_Name"], "unit_name": source_data["unit_Name"], # ...其他字段... } ] } # 发送请求至旺店通·企业奇门API接口 response = requests.post("https://api.wangdian.cn/openapi2/goods_push.php", json=payload) # 检查响应状态并处理结果 if response.status_code == 200: print("Data pushed successfully!") else: print(f"Failed to push data: {response.text}") ``` 通过上述步骤和代码示例,我们可以实现从源平台到旺店通·企业奇门API接口的数据ETL转换和写入。这一过程不仅提高了系统间的数据一致性,还增强了业务流程的自动化和效率。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/T29.png~tplv-syqr462i7n-qeasy.image)