金蝶云星空数据集成到MySQL:MOM-CGSLTZD-采购收料通知单-测试环境案例
在本篇技术案例中,我们将深入探讨如何通过轻易云数据集成平台实现金蝶云星空与MySQL的高效数据对接,操作过程涉及API接口调用、数据转换、并发处理等关键环节。该方案命名为“MOM-CGSLTZD-采购收料通知单-测试环境”。
为了确保这一流程顺利运行,我们重点运用了以下几项核心能力:
-
高吞吐量的数据写入能力: 金蝶云星空通过
executeBillQuery
API接口提供了一批待处理的采购收料通知单,而我们需要把这些大量的数据快速、安全地导入到MySQL数据库中。这一过程中,支持大规模并发写入是成功的关键。 -
实时监控和告警系统: 在整个集成过程中,集中监控和告警系统起到了不可或缺的作用。它能够实时跟踪每个数据集成任务的状态和性能,有效预防潜在问题,并及时响应异常情况。
-
自定义数据转换逻辑: 由于金蝶云星空及MySQL之间存在 数据结构差异,自定义的数据转换逻辑便成为必需,为了保证各类字段格式的一致性,该工具简化了复杂的数据映射工作,对业务需求进行了充分适应。
-
分页和限流机制管理: 当调用金蝶云星空API时,不可避免地要面对分页及限流的问题,通过设计合理的分页机制以及有效控制请求频率,我们可以确保即能获取所需全部数据,又不会引起服务器超负荷压力。
-
异常处理与错误重试机制: 稳定可靠的数据对接,需要良好的异常处理功能,即使在出现网络波动或者请求失败时,也能通过自动化重试机制保障最终结果的一致性与完整性。
上述特性的应用,使得整个项目从设计到实施都有条不紊,在资源利用优化方面也体现出其强大的优势。接下来,我们将详细剖析具体部署步骤与代码实现,以便开发者们更好地掌握实际操作方法。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细探讨如何使用轻易云数据集成平台调用金蝶云星空接口executeBillQuery
来获取采购收料通知单的数据,并进行初步加工。
接口配置与调用
我们需要通过POST方法调用金蝶云星空的executeBillQuery
接口,以下是具体的元数据配置:
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"number": "FBillNo",
"id": "FDetailEntity_FEntryID",
"name": "FBillNo",
"idCheck": true,
"request": [
{"field":"FBillNo","label":"单据编号","type":"String","describe":"单据编号","value":"FBillNo"},
{"field":"FDocumentStatus","label":"单据状态","type":"String","describe":"单据状态","value":"FDocumentStatus"},
{"field":"FMaterialId","label":"物料编码","type":"String","describe":"物料编码","value":"FMaterialId.fnumber"},
{"field":"FStockOrgId_FNumber","label":"收料组织","type":"String","describe":"收料组织","value":"FStockOrgId.FNumber"},
{"field":"FMaterialName","label":"物料名称","type":"String","describe":"物料名称","value":"FMaterialName"},
{"field":"FDate","label":"收料日期","type":"String","describe":"收料日期","value":"FDate"},
{"field":"FMateriaModel","label":"规格型号","type":"String","describe":"规格型号","value":"FMateriaModel"},
{"field":...}
],
"otherRequest": [
{"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
{"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": 5000},
{"field":...}
],
...
}
请求参数解析
- 基本字段:如单据编号(FBillNo)、单据状态(FDocumentStatus)、物料编码(FMaterialId.fnumber)等,这些字段是从金蝶系统中提取的关键数据。
- 分页参数:包括最大行数(Limit)、开始行索引(StartRow)等,用于控制查询结果的分页。
- 过滤条件:通过FilterString字段设置,如
FSupplierId.FNumber = 'VEN00010' and FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'
,可以根据业务需求进行动态过滤。
数据请求与清洗
在请求到原始数据后,需要对数据进行清洗和初步加工。以下是一些常见的数据清洗步骤:
- 字段映射:将原始数据字段映射到目标系统所需的字段。例如,将金蝶中的
FBillNo
映射为目标系统中的OrderNumber
。 - 数据格式转换:将日期、数值等字段转换为目标系统所需的格式。例如,将日期格式从YYYY-MM-DD转换为MM/DD/YYYY。
- 缺失值处理:处理缺失或不完整的数据,根据业务规则填充默认值或进行标记。
示例代码
以下是一个示例代码片段,用于调用接口并处理返回的数据:
import requests
import json
# 设置请求URL和头信息
url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}
# 构建请求体
payload = {
'FormId': 'PUR_ReceiveBill',
'FieldKeys': 'FBillNo,FDocumentStatus,FMaterialId.fnumber,FStockOrgId.FNumber,...',
'FilterString': 'FDocumentStatus="C" AND FApproveDate>="2023-01-01"',
'OrderString': 'FDate ASC',
'Limit': 100,
'StartRow': 0
}
# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(payload))
# 检查响应状态码
if response.status_code == 200:
data = response.json()
# 数据清洗和初步加工
cleaned_data = []
for item in data:
cleaned_item = {
'OrderNumber': item['FBillNo'],
'Status': item['FDocumentStatus'],
...
}
cleaned_data.append(cleaned_item)
# 输出清洗后的数据
print(json.dumps(cleaned_data, indent=4))
else:
print(f"Error: {response.status_code}")
总结
通过上述步骤,我们成功地调用了金蝶云星空的executeBillQuery
接口,获取了采购收料通知单的数据,并进行了初步的清洗和加工。这一步骤为后续的数据转换与写入奠定了基础。
使用轻易云数据集成平台进行ETL转换并写入MySQL API接口的技术案例
在数据集成过程中,将源平台的数据转换为目标平台MySQL API接口可接收的格式是关键步骤之一。本文将详细探讨如何利用轻易云数据集成平台完成这一任务,并提供具体的元数据配置示例。
数据请求与清洗
首先,从源平台获取原始数据,并对其进行必要的清洗和预处理。这一步骤确保数据质量和一致性,为后续的转换和写入打下基础。
数据转换与写入
在轻易云数据集成平台中,数据转换与写入通过配置元数据来实现。以下是一个详细的元数据配置示例,用于将采购收料通知单的数据写入目标MySQL数据库。
元数据配置解析
{
"api": "execute",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "main_params",
"label": "main_params",
"type": "object",
"describe": "111",
"value": "1",
"children": [
{"field":"V_ID","label":"采购收料通知单内码","type":"string","value":"{FID}"},
{"field":"V_BILL_TYPE","label":"单据类型","type":"string","value":"{FBillTypeID}"},
{"field":"V_BILL_NO","label":"单据编号","type":"string","value":"{FBillNo}"},
{"field":"V_DATE","label":"收料日期","type":"string","value":"{FDate}"},
{"field":"V_SUPPLIER","label":"供应商","type":"string","value":"{FSupplierId}"},
{"field":"V_SUPPLY","label":"供货方","type":"string","value":"{FSupplyId}"},
{"field":"V_SETTLE","label":"结算方","type":"string","value":"{FSettleId}"},
{"field":"V_CHARGE","label":"收款方","type":"string","value":"{FChargeId}"},
{"field":"V_SEND_BILL_NO","label":"送货单号","type":"string","value":"{FSendBillNo}"},
{"field":"V_LAD_BILL_NO","label":"提货单号","type":"string","value":"{FLadBillNo}"},
{"field":"V_CARRIER","label":"承运商","type":"string","value":"{FCarrierId}"},
{"field":"V_STOCK_ORG","label":"收料组织","type":"","value":{"FStockOrgId_FNumber"}},
{"field":"","label":"","type":"","value":{"FReceiveDeptId"}},
...
]
},
{
...
}
],
...
}
SQL语句配置
为了将清洗后的数据写入MySQL数据库,需要配置相应的SQL语句。以下是用于插入和更新采购收料通知单主表及其分录表的SQL示例:
主表插入/更新SQL
INSERT INTO `ty_mes`.`mt_pur_receive` (
`ID`, `BILL_TYPE`, `BILL_NO`, `DATE`, `SUPPLIER`,
`SUPPLY`, `SETTLE`, `CHARGE`, `SEND_BILL_NO`,
`LAD_BILL_NO`, `CARRIER`, `STOCK_ORG`,
...
) VALUES (
:V_ID, :V_BILL_TYPE, :V_BILL_NO, :V_DATE, :V_SUPPLIER,
:V_SUPPLY, :V_SETTLE, :V_CHARGE, :V_SEND_BILL_NO,
:V_LAD_BILL_NO, :V_CARRIER, :V_STOCK_ORG,
...
) ON DUPLICATE KEY UPDATE
`BILL_TYPE` = VALUES(`BILL_TYPE`),
`BILL_NO` = VALUES(`BILL_NO`),
...
分录表插入/更新SQL
INSERT INTO `ty_mes`.`mt_pur_receive_entry` (
`ENTRY_ID`, `ID`, `SEQ`, `MATERIAL_CODE`,
`UNIT`, `ACTLAND_QTY`, ...
) VALUES (
:V_ENTRY_ID, :V_ID, :V_SEQ, :V_MATERIAL_CODE,
:V_UNIT, :V_ACTLAND_QTY,
...
) ON DUPLICATE KEY UPDATE
`ID` = VALUES(`ID`),
...
实施步骤
- 配置API接口:根据业务需求,定义API接口参数及其对应关系。
- 编写SQL语句:根据目标数据库结构,编写相应的插入和更新SQL语句。
- 测试与验证:通过测试环境验证配置是否正确,确保数据能够准确无误地写入目标数据库。
- 部署上线:在测试通过后,将配置部署到生产环境,开始正式的数据集成操作。
通过上述步骤,我们可以高效地将源平台的数据转换为目标平台MySQL API接口可接收的格式,并成功写入数据库。这不仅提高了数据处理效率,还保证了数据的一致性和准确性。