使用轻易云平台实现金蝶客户数据的实时同步

  • 轻易云集成顾问-张妍琪
### 案例分享:金蝶云星空数据集成到MySQL 在本案例中,我们详细探讨了如何将金蝶云星空系统中的客户数据,通过轻易云数据集成平台,批量同步至MySQL数据库的过程。目标是实现0查询金蝶客户信息并精准同步到商城的中间表,以便下游业务系统调用。整个方案强调高效、安全、实时的特点。 为确保数据处理的时效性和准确性,我们利用了金蝶云星空提供的数据获取API `executeBillQuery` 和 MySQL写入数据API `execute`,通过自动化脚本和调度机制,实现定时可靠地抓取与存储操作。此外,为应对大量数据快速写入需求和防止漏单情况发生,本次集成特别关注以下技术要点: 1. **高吞吐量支持**: 采用分批次处理模式,每次从金蝶云星空接口拉取一定数量的数据,并立即同步至MySQL。这不仅提升了整体效率,也减少了一次性大流量请求带来的风险。 2. **分页与限流策略**: 针对接口调用限制问题,通过分页方式控制每次提取的数据规模,同时设置合理的调用频率,避免触发限流机制。这种处理方式有效保障了任务持续稳定地进行。 3. **自定义转换逻辑**: 鉴于两套系统存在的数据结构差异,对提取得到的信息进行格式转换与清洗,使其符合MySQL数据库表结构要求。在这一过程中,自定义规则确保所有字段都得到正确映射和存储。 4. **实时监控与异常处理**: 为提高安全性,全程引入集中化监控及告警系统,跟踪各项指标。一旦发现异常,如网络波动导致请求失败或插入操作出错,将即时启动错误重试机制以补救,同时记录日志以供后续分析。 5. **数据质量保证**: 对每一次成功写入前后的结果进行校验,并配置多层过滤器检测潜在的问题,从而最大程度上保证最终落地的数据准确无误。 接下来我们会进一步展示具体实现步骤及代码示例,以帮助开发者更好理解这个方案并应用于实际项目中。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/D7.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取客户信息,并对数据进行初步加工。 #### 接口配置与请求参数 首先,我们需要配置元数据以调用金蝶云星空的`executeBillQuery`接口。以下是关键的元数据配置: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FNumber", "id": "FCUSTID", "name": "FNumber", "idCheck": true, "request": [ {"field":"FCUSTID","label":"FCUSTID","type":"string","describe":"FCUSTID","value":"FCUSTID"}, {"field":"FNumber","label":"编码","type":"string","describe":"编码","value":"FNumber"}, {"field":"FName","label":"名称","type":"string","describe":"名称","value":"FName"}, {"field":"FCreateOrgId_FNumber","label":"创建组织","type":"string","describe":"创建组织","value":"FCreateOrgId.FNumber"}, {"field":"FUseOrgId_FNumber","label":"使用组织","type":"string","describe":"使用组织","value":"FUseOrgId.FNumber"}, {"field":"FDescription","label":"描述","type":"string","describe":"描述","value":"FDescription"}, {"field":"FIsTrade","label":"是否交易客户","type":"string","describe":"是否交易客户","value":"FIsTrade"}, {"field":"FINVOICETITLE","label":"发票抬头","type":"string","value":"FINVOICETITLE"}, {"field":"FINVOICEBANKNAME","label":"开户银行","type":"string","value":"FINVOICEBANKNAME"}, {"field":"FINVOICEBANKACCOUNT","label":"银行账号","type":"string","value":"FINVOICEBANKACCOUNT"}, {"field": "FINVOICETEL", "label": "开票联系电话", "type": "string", "value": "FINVOICETEL"}, {"field": "FINVOICEADDRESS", "label": "开票通讯地址", "type": "string", "value": "FINVOICEADDRESS"} ], ... } ``` #### 请求参数详解 - `api`: 接口名称,这里是`executeBillQuery`。 - `effect`: 操作类型,设置为`QUERY`表示查询操作。 - `method`: HTTP请求方法,这里使用`POST`。 - `number`, `id`, `name`: 用于标识记录的字段。 - `idCheck`: 是否检查ID字段,设置为`true`。 请求参数部分定义了我们需要从金蝶系统中获取的字段,包括客户ID、编码、名称、创建组织、使用组织等。这些字段将被映射到相应的数据表中。 #### 其他请求参数 除了基本的请求字段,还需要配置一些其他参数以控制查询行为: ```json { ... "otherRequest":[ {"field": "Limit", "label": "最大行数", "type": "string", ...}, {"field": "StartRow", "label": "开始行索引", ...}, {"field": "TopRowCount", ...}, {"field": "FilterString", ...}, {"field": "FieldKeys", ...}, {"field": "FormId", ...} ], ... } ``` 这些参数包括分页控制(如最大行数和开始行索引)、过滤条件(如修改日期大于上次同步时间)以及需要查询的字段集合和业务对象表单ID等。 #### 实际调用与数据处理 在实际调用过程中,我们通过HTTP POST请求将上述参数发送到金蝶云星空系统。以下是一个示例请求体: ```json { ... { FCUSTID: '1001', FNumber: 'C0001', FName: '客户A', FCreateOrgId_FNumber: 'ORG001', FUseOrgId_FNumber: 'ORG002', FDescription: '重要客户', FIsTrade: 'true', FINVOICETITLE: '客户A公司', FINVOICEBANKNAME: '中国银行', FINVOICEBANKACCOUNT: '1234567890', FINVOICETEL: '010-12345678', FINVOICEADDRESS: '北京市朝阳区' } } ``` 收到响应后,我们可以对数据进行初步加工,如格式转换、字段映射等,以便后续的数据转换与写入阶段处理。 #### 数据清洗与转换 在获取到原始数据后,可能需要进行一些清洗和转换操作。例如,将日期格式统一,去除无效字符等。这一步骤确保了数据的一致性和完整性,为后续的数据写入打下基础。 通过上述步骤,我们成功地调用了金蝶云星空的接口并获取了所需的数据。接下来,可以根据业务需求进一步处理这些数据,实现不同系统间的数据无缝对接。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入MySQLAPI接口的技术案例 在使用轻易云数据集成平台进行数据集成时,生命周期的第二步是将已经集成的源平台数据进行ETL转换,转为目标平台 MySQLAPI接口所能够接收的格式,并最终写入目标平台。本文将深入探讨如何利用元数据配置完成这一过程。 #### 元数据配置解析 元数据配置是实现ETL转换和写入的关键。以下是一个具体的元数据配置示例: ```json { "api": "execute", "effect": "EXECUTE", "method": "SQL", "number": "id", "id": "id", "name": "id", "idCheck": true, "request": [ { "field": "main_params", "label": "主参数", "type": "object", "describe": "对应主语句内的动态参数", "children": [ { "field": "customer_code", "label": "客户编码", "type": "string", "describe": "店铺名称", "value": "{FNumber}" }, { "field": "customer_name", "label": "姓名", "type": "string", "describe": "部门", "value": "{FName}" }, { "field": "create_time", "label": "创建时间", "type": "datetime", "value": "_function now()" } ] } ], ... } ``` #### 数据请求与清洗 在这个阶段,我们从源系统(如金蝶)中获取客户信息,并将其同步到商城中间表。首先,我们需要定义要提取的数据字段,这些字段包括客户编码(`FNumber`)、客户姓名(`FName`)和创建时间。 ```json { ... { ... { field: 'customer_code', label: '客户编码', type: 'string', describe: '店铺名称', value: '{FNumber}' }, { field: 'customer_name', label: '姓名', type: 'string', describe: '部门', value: '{FName}' }, { field: 'create_time', label: '创建时间', type: 'datetime', value: '_function now()' } ... } } ``` 这些字段将被映射到目标平台所需的格式。在这个过程中,`_function now()` 用于生成当前时间戳,确保每条记录都有准确的创建时间。 #### 数据转换与写入 在完成数据请求与清洗后,下一步是将清洗后的数据转换为目标平台 MySQLAPI 接口能够接收的格式,并写入数据库。这里我们使用 SQL 插入语句来完成这一任务: ```json { ... { field: 'main_sql', label: '主语句', type: 'string', describe: 'SQL首次执行的语句,将会返回:lastInsertId', value: `INSERT INTO middle_client_file_erp (customer_code, customer_name, create_time) VALUES (:customer_code,:customer_name,:create_time) ON DUPLICATE KEY UPDATE customer_name = VALUES(customer_name), create_time = VALUES(create_time)` } } ``` 这段 SQL 插入语句实现了以下功能: 1. **插入新记录**:如果客户编码不存在,则插入一条新记录。 2. **更新现有记录**:如果客户编码已存在,则更新客户姓名和创建时间。 这种方式确保了数据库中的记录始终是最新的,同时避免了重复插入相同的数据。 #### API接口调用 最后,通过调用 API 接口 `execute` 来执行上述 SQL 操作: ```json { api: 'execute', effect: 'EXECUTE', method: 'SQL' } ``` 此配置指定了 API 的执行方法为 SQL,并通过 `effect` 字段定义了操作类型为执行(EXECUTE)。这样可以确保 SQL 插入语句被正确地执行,从而将清洗后的数据写入目标 MySQL 数据库。 #### 总结 通过上述步骤,我们成功地实现了从源系统到目标平台的数据 ETL 转换和写入。这一过程充分利用了轻易云数据集成平台提供的元数据配置功能,使得整个操作过程透明且高效。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T6.png~tplv-syqr462i7n-qeasy.image)