跨平台数据处理:从旺店通到金蝶云

  • 轻易云集成顾问-黄宏棵
### 旺店通·企业奇门数据集成到金蝶云星空的技术案例分享 在构建现代化企业信息系统时,不同平台间的数据集成显得尤为重要。本文将展示一个具体的系统对接集成案例,介绍如何通过轻易云数据集成平台高效完成旺店通·企业奇门的数据无缝对接到金蝶云星空。本次实例中的方案被命名为“物料旺店通→金蝶”,重点解决了从数据抓取、处理到最终写入各个环节的痛点。 #### 集成背景与目标 我们的主要任务是定时可靠地抓取旺店通·企业奇门接口(wdt.goods.query)的物料数据信息,并大批量、高速稳定地写入至金蝶云星空的数据存储中(batchSave)。在这一过程中,确保数据不漏单及实时监控整个流程状态是重中之重。 #### 技术挑战与解决方案概述 1. **快速和大量数据写入:** 面临大规模物料信息需要迅速导入的问题,通过优化轻易云平台的数据处理速度和并发性能,实现了快速且高效的大批量数据写入。 2. **分页和限流管理:** 旺店通接口返回的数据有分页限制,为此我们设计了一套有效的分页机制,加上针对API调用频率进行智能限流控制,以确保数据获取持续稳定,不受阻碍。 3. **格式差异适配:** 旺店通与金蝶之间存在不同的数据格式要求,我们运用了动态映射策略,将源端复杂多变的JSON结构转换为目标端统一规范的格式。这一过程结合了脚本转化及字段映射功能,使所有关键字段能够精准匹配,从而避免任何因格式问题导致的信息丢失或错误。 4. **异常处理机制:** 实现自动异常捕获与分类处置。在遇到意外情况如网络故障或接口超时时,系统能即时记录详细日志并触发重试机制,保证业务连续性,并及时通知相关人员加以人工干预。 5. **实时监控与日志记录:** 通过内置监控模块,我们实现了全程可视化操作和实时跟踪每一次请求、响应及整体运行状况,极大提升了透明度。同时,日志记录详实准确,为后续问题溯源提供依据。 下面将具体阐述各个步骤,包括接口调用方式、代码示例、参数解析等细节内容。敬请期待! --- 以上是文章开头部分,如需继续编写完整方案,请告知,谢谢! ![如何开发用友BIP接口](https://pic.qeasy.cloud/D15.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.goods.query获取并加工数据 在数据集成生命周期的第一步,我们需要从源系统获取数据,并进行初步的清洗和加工。本文将详细探讨如何通过调用旺店通·企业奇门接口`wdt.goods.query`来实现这一目标。 #### 接口概述 `wdt.goods.query`接口用于查询旺店通系统中的货品信息。该接口支持按货品编号、删除状态、最后修改时间等条件进行查询,并返回符合条件的货品数据。我们将使用POST方法来调用此接口,并根据业务需求对返回的数据进行处理。 #### 元数据配置解析 以下是元数据配置的详细解析: ```json { "api": "wdt.goods.query", "effect": "QUERY", "method": "POST", "number": "goods_no", "id": "goods_id", "name": "goods_no", "idCheck": true, "request": [ {"field": "spec_no", "label": "货品编号", "type": "string", "describe": "货品编号"}, {"field": "deleted", "label": "已删除货品", "type": "string", "describe": "默认为0, 0:只返回未删除货品 1:返回未删除和已删除货品"}, {"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:"111", value:"{{CURRENT_TIME|datetime}}"} ], otherRequest: [ {"field":"page_size","label":"分页大小","type":"string","describe":"每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40,使用举例单击这里","value":"{PAGINATION_PAGE_SIZE}"}, {"field":"page_no","label":"页号","type":"string","describe":"不传值默认从0页开始","value":"{PAGINATION_START_PAGE}"} ], autoFillResponse: true } ``` #### 请求参数详解 - **spec_no**(货品编号):用于指定特定的货品编号进行查询。 - **deleted**(已删除货品):默认为0,仅返回未删除的货品;设置为1时,返回所有包括已删除的货品。 - **start_time**(开始时间):按最后修改时间增量查询数据,格式为`yyyy-MM-dd HH:mm:ss`。 - **end_time**(结束时间):查询截止时间,格式同上。 - **page_size**(分页大小):每页返回的数据条数,默认值为40。 - **page_no**(页号):分页查询的页码,从0开始。 #### 调用示例 以下是一个调用该接口的示例代码: ```python import requests import datetime # 设置请求URL和头部信息 url = 'https://api.wangdian.cn/openapi2/wdt_goods_query.php' headers = {'Content-Type': 'application/json'} # 获取当前时间和上次同步时间 current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') last_sync_time = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S') # 构建请求体 payload = { 'spec_no': '', 'deleted': '0', 'start_time': last_sync_time, 'end_time': current_time, 'page_size': '40', 'page_no': '0' } # 发起POST请求 response = requests.post(url, headers=headers, json=payload) # 检查响应状态码并处理响应数据 if response.status_code == 200: data = response.json() # 在此处添加对data的处理逻辑,例如清洗和转换 else: print(f"Error: {response.status_code}") ``` #### 数据清洗与加工 在获取到原始数据后,我们需要对其进行清洗和加工,以便后续的数据转换与写入步骤。以下是一些常见的数据清洗操作: 1. **去除无效或重复记录**:检查并移除无效或重复的记录。 2. **字段映射与转换**:将源系统中的字段映射到目标系统所需的字段,并进行必要的数据类型转换。 3. **异常值处理**:识别并处理异常值,如缺失值或超出合理范围的数据。 例如,对于获取到的货品数据,我们可以根据业务规则过滤掉已删除的货品,并将其转换为目标系统所需的格式: ```python cleaned_data = [] for item in data['goods_list']: if item['deleted'] == '0': cleaned_item = { 'goods_id': item['goods_id'], 'goods_no': item['goods_no'], # 添加其他必要字段映射 } cleaned_data.append(cleaned_item) ``` 通过上述步骤,我们完成了从源系统获取数据并进行初步清洗和加工,为后续的数据转换与写入奠定了基础。在实际应用中,可以根据具体业务需求进一步细化和优化这些操作。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image) ### 利用轻易云数据集成平台实现物料数据ETL转换并写入金蝶云星空 在数据集成生命周期的第二步中,我们将聚焦于如何将已经集成的源平台数据进行ETL转换,并最终写入目标平台金蝶云星空API接口。本文将通过具体的元数据配置案例,详细讲解这一过程。 #### 数据请求与清洗 首先,我们需要从源平台(如物料旺店通)获取原始数据。假设我们已经完成了这一阶段,接下来我们将重点放在数据转换与写入阶段。 #### 数据转换与写入 为了将源平台的数据转换为金蝶云星空API接口所能接收的格式,我们需要配置元数据。以下是一个典型的元数据配置示例: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field":"FName","label":"名称","type":"string","describe":"111","value":"{goods_name}"}, {"field":"FNumber","label":"编码","type":"string","describe":"111","value":"{{spec_list.spec_no}}"}, {"field":"FDescription","label":"描述","type":"string","describe":"111"}, {"field":"FCreateOrgId","label":"创建组织","type":"string","describe":"111","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FUseOrgId","label":"使用组织","type":"string","describe":"111","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FSpecification","label":"规格型号","type":"string","value":"{{spec_list.spec_name}}"}, {"field":"SubHeadEntity","label":"基本","type":"object","describe":"111", "children":[ {"field":"FErpClsID","label":"物料属性","type":"string","describe":"111","value":"1"}, {"field":"FBaseUnitId","label":"基本单位","type":"string","describe":"111", "parser":{"name":"ConvertObjectParser","params":"FNumber"},"value": "tai" }, {"field": "FCategoryID", "label": "存货类别", "type": "string", "describe": "CHLB01_SYS", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "CHLB05_SYS" } ] }, {"field": "FMaterialGroup", "label": "分组", "type": "string", "parser": { "name": "ConvertObjectParser", "params": "FNumber" } } ], ... } ``` #### 配置解析 1. **API Endpoint**:`batchSave` 是金蝶云星空用于批量保存物料信息的API接口。 2. **HTTP Method**:使用 `POST` 方法提交数据。 3. **ID Check**:`idCheck: true` 表示在写入前会检查是否存在重复ID。 4. **Request Fields**: - `FName`: 对应物料名称,值来自 `{goods_name}`。 - `FNumber`: 对应物料编码,值来自 `{{spec_list.spec_no}}`。 - `FDescription`: 描述字段,可以为空或填充描述信息。 - `FCreateOrgId` 和 `FUseOrgId`: 创建和使用组织,通过 `ConvertObjectParser` 转换为目标格式,固定值为 `100`。 - `FSpecification`: 对应规格型号,值来自 `{{spec_list.spec_name}}`。 - `SubHeadEntity`: 包含多个子字段,如物料属性、基本单位和存货类别等,这些字段也通过相应的解析器进行转换。 5. **Other Request Fields**: - `FormId`: 固定值为 `"BD_MATERIAL"`,表示表单ID。 - `Operation`: 操作类型,固定值为 `"Save"`。 - `IsAutoSubmitAndAudit`: 自动提交和审核标志,布尔值为 `true`。 - `IsVerifyBaseDataField`: 验证基础资料有效性,布尔值为 `false`。 #### 数据写入 在配置完成后,通过轻易云的数据集成平台,将上述配置应用于ETL流程。在执行过程中,系统会自动根据配置规则,将源平台的数据转换为符合金蝶云星空API要求的格式,并通过HTTP POST请求批量提交到目标系统。 通过这种方式,我们能够高效地实现跨平台的数据集成,并确保数据在不同系统间无缝对接。这不仅提高了业务流程的自动化程度,也大大减少了人工干预和潜在错误。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)