MySQL数据集成到金蝶云星空的系统对接实战案例——GJM-广东天一组织间结算价目表-每月新建
数据集成对于现代企业而言是一个至关重要的技术环节。在本次案例中,我们将重点分享如何通过轻易云数据集成平台,将MySQL中的数据高效且可靠地写入到金蝶云星空,具体应用场景为“GJM-广东天一组织间结算价目表-每月新建”。
在方案设计与实施过程中,我们利用了MySQL获取数据的API(select)和金蝶云星空写入数据的API(batchSave),确保大量的数据能够定时、批量地从MySQL接口抓取并快速写入到金蝶云星空。同时,通过可视化的数据流设计工具,使得整个流程直观清晰,大大提升了管理和监控效率。
为了保障集成过程中的信息准确性和实时性,我们特别采用了以下几个关键技术要点:
- 高吞吐量的数据写入能力:通过优化任务调度与队列机制,使得大量业务数据能够以极高的速度被提取并保存,显著提高了整体处理效率。
- 集中监控与告警系统:实时跟踪每个步骤中的任务状态及性能表现,一旦出现异常情况,立即触发告警机制,以便及时排查和解决问题。
- 自定义的数据转换逻辑:针对特定业务需求,对不同步格式进行转换处理,确保源端MySQL数据库中的结构能够无缝映射到目标端金蝶云星空中。
- 分页与限流控制:面对海量查询请求,通过合理设置分页策略及限流算法,有效避免接口超时或服务器过载等情况发生。
在实际操作时,我们格外注意如何调用MySQL接口(select)来获取所需的数据,以及如何使用批量存储API(batchSave)将这些数据稳妥传输至金蝶云星空。此外,为应对可能出现的对接异常,我们实现了一套完善的错误重试机制。
使用轻易云数据集成平台调用MySQL接口获取并加工数据
在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细介绍如何通过轻易云数据集成平台调用MySQL接口select
来实现这一过程,并进行必要的数据加工。
元数据配置解析
在进行具体操作之前,我们需要理解元数据配置中的各个字段及其作用。以下是元数据配置的关键部分:
{
"api": "select",
"effect": "QUERY",
"method": "POST",
"request": [
{
"field": "main_params",
"label": "主参数",
"type": "object",
"describe": "对应其它请求字段内SQL语句的主参数,必须一一对应。",
"value": "1",
"children": [
{
"field": "limit",
"label": "限制结果集返回的行数",
"type": "int",
"describe": "必要的参数!LIMIT 子句用于限制查询结果返回的行数。",
"value": 2000
},
{
"field": "offset",
"label": "偏移量",
"type": "int",
"describe": "OFFSET 子句用于指定查询结果的起始位置或偏移量。",
"value": "{PAGINATION_START_ROW}"
}
]
}
],
...
}
配置主SQL语句
主SQL语句是整个数据获取过程的核心。我们需要确保SQL语句中的动态字段与请求参数一一对应。以下是提供的主SQL语句示例:
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') AS 价目表,
b.part_no AS 物料编号,
(
SELECT price
FROM oms_order_bom ob
WHERE ob.part_no = b.part_no
ORDER BY ob.create_time DESC
LIMIT 1
) AS 含税价格
FROM wms_instock_confirm_task_detail c
LEFT JOIN wms_instock_confirm_main_task_detail a ON c.connect_uuid = a.uuid
LEFT JOIN wms_instock_purchase_task_detail b ON b.uuid = a.connect_uuid
WHERE a.company_code = 'TYZN'
AND b.supplier_uuid = '804842'
AND c.create_time >= (DATE_SUB(CURDATE(), INTERVAL DAY(CURDATE()) - 1 DAY) - INTERVAL 1 MONTH)
AND c.create_time <= DATE_SUB(LAST_DAY(CURDATE()), INTERVAL DAY(LAST_DAY(CURDATE())) - 1 DAY)
GROUP BY b.part_no
LIMIT :limit OFFSET :offset
参数绑定与优化
为了提高查询语句的可读性和维护性,我们采用参数绑定的方法,将请求参数的值与占位符进行对应绑定。这种方式不仅能保证查询的准确性,还能提升安全性。
例如,在执行查询时,我们将:limit
和:offset
替换为具体值:
LIMIT ? OFFSET ?
然后在执行查询前,通过代码将具体值绑定到占位符上。
调用API接口
使用轻易云平台提供的API接口,我们可以通过POST方法发送请求,获取所需的数据。以下是一个示例请求:
{
"main_params": {
"limit": 2000,
"offset": 0
},
...
}
该请求会触发MySQL数据库执行上述优化后的SQL查询,并返回结果集。
数据清洗与加工
在获取到原始数据后,可能需要对其进行清洗和加工。例如,可以根据业务需求过滤掉不必要的数据,或者对某些字段进行格式转换。
假设我们需要将含税价格转换为不含税价格,可以在数据清洗阶段添加如下逻辑:
def calculate_net_price(gross_price):
tax_rate = 0.13 # 假设增值税率为13%
net_price = gross_price / (1 + tax_rate)
return net_price
# 对每条记录进行处理
for record in result_set:
record['不含税价格'] = calculate_net_price(record['含税价格'])
通过这种方式,我们可以确保最终的数据符合业务需求,并且质量得到保证。
实时监控与反馈
轻易云平台提供了实时监控功能,可以随时查看数据流动和处理状态。这有助于及时发现并解决问题,提高整体效率。
总结以上步骤,通过合理配置元数据、优化SQL语句、调用API接口以及进行必要的数据清洗和加工,我们可以高效地从MySQL源系统获取并处理所需的数据。这不仅提升了业务透明度,也为后续的数据分析和决策提供了坚实基础。
使用轻易云数据集成平台将数据转换并写入金蝶云星空API接口
在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并转为目标平台——金蝶云星空API接口所能够接收的格式,最终写入目标平台。以下是具体的技术实现过程。
数据请求与清洗
首先,我们从源平台获取原始数据,并对其进行必要的清洗和预处理。假设我们已经完成了这一阶段,接下来我们将重点放在如何利用轻易云数据集成平台配置元数据,将清洗后的数据转换为金蝶云星空API可接受的格式,并通过API接口写入目标系统。
元数据配置解析
根据提供的元数据配置,我们需要将数据转换为适配金蝶云星空API接口batchSave
方法的格式。以下是关键字段及其配置解析:
- FAuditStatus: 整单审核状态,固定值为
"A"
。 - FCreateOrgId: 核算组织,通过
ConvertObjectParser
解析,值为"T04"
。 - FName: 标题,通过函数拼接生成,例如:"广东天一调拨深圳天一2023-09组织间价目表"。
- FUseOrgId: 使用组织,通过
ConvertObjectParser
解析,值为"T04"
。 - FPRICETYPE: 价目表对象,固定值为
"Material"
。 - FCURRENCYID: 币别,通过
ConvertObjectParser
解析,值为"PRE001"
。 - FIsIncludedTax: 含税,固定值为
"true"
。
明细信息部分(数组类型):
- FMATERIALID: 物料编码,通过
ConvertObjectParser
解析,例如:物料编号。 - FTRADETYPE: 交易类型,固定值为
"Material"
。 - FPRICEUNITID: 定价单位,通过查找集合获取,例如:从某个集合中查找物料编号对应的定价单位。
- FRowAuditStatus: 行审核状态,固定值为
"A"
。 - FTaxPrice: 含税单价,例如:含税价格。
- FTaxRate: 税率,固定值为
"13"
。
其他请求参数:
- FormId: 业务对象表单Id,例如:
IOS_PriceList
- Operation: 执行的操作,例如:
batchSave
- IsAutoSubmitAndAudit: 提交并审核,布尔值,例如:
true
- IsVerifyBaseDataField: 验证基础资料有效性,布尔值,例如:
false
数据转换与写入
- 将源数据按照上述元数据配置进行字段映射和转换。以下是一个示例代码片段,用于将源数据转换为目标格式:
{
"FormId": "IOS_PriceList",
"Operation": "batchSave",
"IsAutoSubmitAndAudit": true,
"IsVerifyBaseDataField": false,
"Model": {
"FAuditStatus": "A",
"FCreateOrgId": { "FNumber": "T04" },
"FName": "广东天一调拨深圳天一2023-09组织间价目表",
"FUseOrgId": { "FNumber": "T04" },
"FPRICETYPE": "Material",
"FCURRENCYID": { "FNumber": "PRE001" },
"FIsIncludedTax": true,
"FEntity": [
{
"FMATERIALID": { "FNumber": "{{items.物料编号}}" },
"FTRADETYPE": "Material",
"FPRICEUNITID": {
"_findCollection find FBaseUnitId_FNumber from c7812b37-c4fa-3e9d-9d52-974e0c2b53df where FNumber={{items.物料编号}}"
},
"FRowAuditStatus": "A",
"FTaxPrice": "{{items.含税价格}}",
"FTaxRate": 13
}
]
}
}
- 配置HTTP请求参数,并调用金蝶云星空API接口。以下是一个示例HTTP请求:
POST /k3cloud/api/batchSave HTTP/1.1
Host: your-k3cloud-host.com
Content-Type: application/json
Authorization: Bearer your-access-token
{
// 上述转换后的JSON内容
}
- 检查响应结果,以确保数据成功写入。如果有错误,需要根据返回的信息进行相应调整和重试。
通过上述步骤,我们可以高效地将源平台的数据进行ETL转换,并通过金蝶云星空API接口实现无缝对接和写入。这不仅提升了业务流程的自动化程度,也确保了数据的一致性和准确性。