金蝶云星空数据集成到MySQL:GX-广东天一销售订单案例分享
在本文中,我们将探讨如何通过轻易云数据集成平台,实现金蝶云星空中的服务类销售订单表体(GX-广东天一销售订单)的高效、可靠拉取,并无缝写入MySQL数据库。该操作方案名称为“GX-广东天一销售订单-服务类-表体-拉取”,主要目标是确保业务系统的稳定性和数据的一致性。
数据抓取与处理
首先,通过调用执行金蝶云星空接口executeBillQuery
来获取所需的销售订单数据。此API支持分页查询,能有效应对大量数据请求。在实施过程中,需要特别注意分页参数的设置,以防止遗漏或重复记录。同时,遵循接口限流要求以避免影响整体系统性能。
{
"method": "executeBillQuery",
"params": {
"startDate": "2023-01-01",
"endDate": "2023-12-31",
// 其他必要参数
}
}
接收到的数据需要经过清洗和转换,以适应MySQL数据库的数据结构。这一步可以利用平台提供的自定义转换逻辑功能,根据特定业务需求调整字段格式。例如,将日期字段从字符串格式转化为标准时间戳存储。此外,还可以检测并过滤异常值,保证数据质量。
数据写入与监控
下一步,即批量写入过程,通过调用MySQL API execute
进行批量插入操作,这样不仅提升了处理效率,也降低了单次事务提交带来的风险。以下是一个示例代码片段:
INSERT INTO sales_order (order_id, customer_name, order_date, total_amount)
VALUES (?, ?, ?, ?);
为了确保每条记录都准确存储,同时避免因网络或系统异常导致的数据丢失或者重复,需要设计完备的错误重试机制及日志记录策略。一旦出现失败情况,可以自动触发重新尝试机制,并由集中监控告警系统及时通知运维人员采取相应措施。这极大地减少了维护成本,提高运行稳定性。
综上所述,通过集成金蝶云星空与MySQL,我们能够实现业务流程中的实时、精准的数据同步,不但优化资源配置,更提升企业整体运营效率。在接下来的部分,我们将深入细节讨论具体实施步骤及遇到的问题解决方案。
调用源系统金蝶云星空接口executeBillQuery获取并加工数据
在数据集成生命周期的第一步中,调用源系统接口以获取原始数据是至关重要的一环。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口来获取销售订单数据,并对其进行初步加工。
接口配置与调用
首先,我们需要配置并调用金蝶云星空的executeBillQuery
接口。以下是元数据配置中的关键字段及其作用:
- api:
executeBillQuery
- method:
POST
- FormId:
SAL_SaleOrder
- FieldKeys: 需要查询的字段集合
- FilterString: 过滤条件,用于筛选特定的数据
- Limit: 最大行数,用于分页查询
- StartRow: 开始行索引,用于分页查询
在实际操作中,我们会构建一个HTTP POST请求,包含上述参数,以获取所需的销售订单数据。
请求参数构建
根据元数据配置,我们需要构建如下请求参数:
{
"FormId": "SAL_SaleOrder",
"FieldKeys": "FID,FBillNo,FDocumentStatus,FSaleOrgId.FNumber,FDate,FCustId.FNumber,FSaleDeptId.Fnumber,FBillTypeID.Fnumber,FBusinessType,FNote,FSalerId.fname,FSaleOrderEntry_fseq,FMaterialId.fnumber,FUnitID.fnumber,FQty,FTaxPrice,FDeliveryDate,FMtoNo,FLot.fnumber,FSaleOrderEntry_FEntryID,FMaterialName,FMaterialModel,F_Modeldrawingno,FMaterialId.FpicNo,F_Thecustomermaterialno",
"FilterString": "left(FBillNo,2)<>'YW' and FSaleOrgId.fnumber='T04' and FDocumentStatus='C' and FBillTypeID.Fnumber='XSDD13_SYS' and FApproveDate>='{{LAST_SYNC_TIME|datetime}}'",
"Limit": "{PAGINATION_PAGE_SIZE}",
"StartRow": "{PAGINATION_START_ROW}"
}
这些参数确保我们能够精确地获取到符合条件的销售订单数据。
数据清洗与转换
在获取到原始数据后,下一步是对数据进行清洗和转换。以下是一些常见的数据清洗和转换操作:
- 字段映射与重命名:将原始字段映射到目标系统所需的字段名称。例如,将
FSaleOrgId.FNumber
映射为销售组织编号
。 - 数据类型转换:确保所有字段的数据类型符合目标系统的要求。例如,将日期字符串转换为标准日期格式。
- 缺失值处理:处理缺失值或异常值,以确保数据完整性和一致性。
示例代码
以下是一个示例代码片段,展示了如何使用Python调用金蝶云星空的executeBillQuery
接口,并对返回的数据进行初步处理:
import requests
import json
# 构建请求参数
payload = {
"FormId": "SAL_SaleOrder",
"FieldKeys": "FID,FBillNo,FDocumentStatus,FSaleOrgId.FNumber,FDate,...",
"FilterString": "left(FBillNo,2)<>'YW' and FSaleOrgId.fnumber='T04' ...",
"Limit": 100,
"StartRow": 0
}
# 设置请求头
headers = {
'Content-Type': 'application/json'
}
# 发送POST请求
response = requests.post('https://api.kingdee.com/executeBillQuery', headers=headers, data=json.dumps(payload))
# 检查响应状态码
if response.status_code == 200:
data = response.json()
# 数据清洗与转换
cleaned_data = []
for record in data:
cleaned_record = {
'单据编号': record['FBillNo'],
'单据状态': record['FDocumentStatus'],
'销售组织编号': record['FSaleOrgId.FNumber'],
# 更多字段映射...
}
cleaned_data.append(cleaned_record)
# 输出清洗后的数据
print(json.dumps(cleaned_data, indent=4))
else:
print(f"请求失败,状态码:{response.status_code}")
通过上述步骤,我们成功地从金蝶云星空获取了销售订单数据,并进行了初步的数据清洗和转换,为后续的数据处理和写入奠定了基础。
使用轻易云数据集成平台进行ETL转换并写入MySQL API接口
在数据集成的生命周期中,ETL(提取、转换、加载)过程是至关重要的一环。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并最终写入目标平台MySQL API接口。
元数据配置解析
在本案例中,我们将使用以下元数据配置来完成ETL过程:
{
"api": "execute",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "main_params",
"label": "main_params",
"type": "object",
"describe": "111",
"value": "1",
...
},
{
"field": "extend_params_1",
...
}
],
...
}
该配置文件定义了两个主要部分:main_params
和extend_params_1
,分别对应于不同的数据表结构。每个字段都详细描述了其类型、标签和默认值。
数据请求与清洗
首先,我们从源平台拉取销售订单表体数据。这个过程涉及到对原始数据的清洗和预处理,以确保其符合目标平台的要求。
例如,对于字段order_uuid
,我们使用如下配置:
{
"field": "order_uuid",
"label": "uuid",
"type": "string",
"value": "{FID}{FBillNo}"
}
这意味着我们将源数据中的FID
和FBillNo
字段拼接在一起,生成一个新的UUID作为订单唯一标识。
数据转换
接下来是关键的转换阶段。我们需要将清洗后的数据按照目标平台MySQL API接口的格式进行转换。以下是几个关键字段的转换规则:
-
bom_uuid
: 使用MD5算法生成唯一标识。{ "field": "bom_uuid", "label": "bom_uuid", "type": "string", "value": "_function MD5(UUID())" }
-
pic_no
: 根据条件选择图号。{ "field": "pic_no", ... "value": "_function CASE '{FBillTypeID_Fnumber}' WHEN 'XSDD13_SYS' THEN CONCAT('{F_Modeldrawingno}','_','{FSaleOrderEntry_FEntryID}') ELSE '{FMaterialId_FpicNo}' END" }
-
FMtoNo
: 如果计划跟踪号为空,则使用单据编号。{ ... { "field":"FMtoNo","label":"计划跟踪号","type":"string","value":"_function CASE '{FMtoNo}' WHEN '' THEN '{FBillNo}' ELSE '{FMtoNo}' END" } }
这些规则确保了数据在转换过程中能够自动适应不同的业务逻辑需求。
数据写入
最后一步是将转换后的数据写入目标平台MySQL数据库。这一步通过API接口实现,具体SQL语句如下:
主表插入语句:
INSERT INTO oms_order_bom (bom_uuid,bom_no,order_uuid,order_no,company_code,part_no,pic_no,pic_version,order_num,delivery_date,completed_num,change_status,bom_status,price,is_distribute,is_accounting_price,is_quote_price,eng_bom_id,serial,grade_name,spec,kingdee_FID,kingdee_FEntryID,kingdee_SO_Type,material_source,if_material,customer_part_no,kingdee_FWL)
VALUES (:bom_uuid,:FMtoNo,:order_uuid,:FBillNo,:company_code,:FMaterialId_FNumber,:pic_no,:pic_version,:order_num,:delivery_date,:completed_num,:change_status,:bom_status,:price,:is_distribute,:is_accounting_price,:is_quote_price,:eng_bom_id,:serial,:grade_name,:spec,:kingdee_FID,:kingdee_FEntryID,:kingdee_SO_Type,:material_source,:if_material,:customer_part_no,:kingdee_FWL)
扩展表插入语句:
INSERT INTO basic_material_info (company_code,material_info_no,material_type,part_no,grade_name,pic_no,pic_version,unit_no,big_classify_id,if_use,is_check,is_call_bpm,textures_type,coefficient,material_attribute,material_dist,is_virtual,status,is_save,is_commit,is_audit,is_distribute,error_num,yn_lock,yn_delete,F_ProductLine)
VALUES (:company_code,:material_info_no,:material_type,:part_no,:grade_name,:pic_no,:pic_version,:unit_no,:big_classify_id,:if_use,:is_check,:is_call_bpm,:textures_type,:coefficient,:material_attribute,:material_dist,is_virtual,status,is_save,is_commit,is_audit,is_distribute,error_num,y_lock,y_delete,F_ProductLine)
这些SQL语句通过参数绑定方式,将前面步骤中处理好的字段值插入到相应的数据库表中。
总结
通过上述步骤,我们完成了从源平台拉取销售订单表体数据、清洗与预处理、ETL转换以及最终写入目标平台MySQL数据库的全过程。每一步都严格按照元数据配置进行,确保了数据的一致性和完整性。