供应商对账系统-鸿巢付款单(供应链费用退款)钉钉数据集成到MySQL案例分享
在现代企业的数据处理过程中,如何高效、精准地将业务数据进行整合,并实时监控和管理这些数据的流动,是一个重要的技术挑战。本文将分享一个实际应用案例,详细探讨如何通过轻易云数据集成平台,将钉钉的供应商对账系统—鸿巢付款单(供应链费用退款)中的数据无缝、高效地集成到MySQL数据库中。
此集成方案重点使用了以下几个技术特性:
- 定时可靠抓取:通过调用钉钉API
v1.0/yida/processes/instances
实现定时可靠的数据抓取。 - 高吞吐量写入:利用 MySQL API
executeReturn
支持大量数据快速写入,确保业务处理的及时性和一致性。 - 异常处理与重试机制:实现错误检测与重试机制,以保证整个流程不中断运行。
- 分页与限流问题解决:特别注意了接口调用过程中的分页及限流问题,通过优化设计,实现稳定且连续的数据获取。
接下来,我们将深入讲解该方案具体实施过程中所采用的方法、遇到的问题以及相应的解决策略。这既包括从基础架构层面的考虑,也涵盖一些关键技术细节,如自定义转换逻辑、实时监控等。
调用钉钉接口获取并加工数据的技术实现
在数据集成生命周期的第一步中,调用源系统接口是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用钉钉接口v1.0/yida/processes/instances
获取并加工数据,以实现供应商对账系统中的鸿巢付款单(供应链费用退款)集成。
接口调用配置
首先,我们需要配置元数据以正确调用钉钉接口。以下是元数据配置的关键字段及其作用:
api
: 接口路径,v1.0/yida/processes/instances
method
: 请求方法,POST
pagination
: 分页配置,pageSize
设置为100idCheck
: 是否进行ID检查,设置为true
请求参数部分:
[
{"field":"pageSize","label":"分页大小","type":"string","describe":"分页大小","value":"50"},
{"field":"pageNumber","label":"分页页码","type":"string","describe":"分页页码","value":"1"},
{"field":"appType","label":"应用ID","type":"string","describe":"应用ID","value":"APP_WTSCMZ1WOOHGIM5N28BQ"},
{"field":"systemToken","label":"应用秘钥","type":"string","describe":"应用秘钥","value":"IS866HB1DXJ8ODN3EXSVD750RBTK2X72R8MELL4"},
{"field":"userId","label":"用户的userid","type":"string","describe":"用户的userid","value":"16000443318138909"},
{"field":"language","label":"语言","type":"string","describe":"语言,取值:zh_CN:中文(默认值)en_US:英文"},
{"field":"formUuid","label":"表单ID","type":"string","describe":"表单ID","value":"FORM-UX866Q61RUV939TLEWG9H4HX25523ZRQNXLGLW"},
{"field": "searchFieldJson", "label": "条件", "type": "object", "children": [
{"field": "selectField_lgm25d98", "label": "费用分类", "type": "array", "value": "供应链费用退款"},
{"parent": "searchFieldJson", "label": "流水号", "field": "serialNumberField_lgm25d8r", "type": "string"},
{"parent": "searchFieldJson", "label": "申请人", "field": "textField_lgm25d8t", "type": "string"}
]},
{"field": "createFromTimeGMT", "label": "创建时间起始值",
"type": "string",
"describe": "创建时间起始值",
"value": "_function DATE_FORMAT(DATE_ADD(NOW(),INTERVAL - 25 DAY),'%Y-%m-%d 00:00:00')"
},
{"field": "createToTimeGMT",
"label": "创建时间终止值",
"type": "string",
"describe": "创建时间终止值",
"value": "{{CURRENT_TIME|datetime}}"
},
{"field": "modifiedFromTimeGMT",
"label": "修改时间起始值",
"type": "string",
"describe": "",
"value":"",
},
{"field":
"modifiedToTimeGMT",
"label":
"修改时间终止值",
"type":
"string",
"describe":
"",
"value":"",
},
{
数据请求与清洗
在请求数据时,我们需要确保请求参数的准确性和完整性。通过POST方法发送请求,并使用上述配置中的参数来获取所需的数据。以下是一个示例请求体:
{
"pageSize": 50,
"pageNumber": 1,
...
}
接收到的数据可能包含多个字段,我们需要对这些数据进行清洗和筛选。例如,只保留与“供应链费用退款”相关的数据,并过滤掉无关信息。
数据转换与写入
在清洗完数据后,需要将其转换为目标系统所需的格式。这个过程可能涉及字段映射、数据类型转换等操作。例如,将钉钉返回的JSON格式数据转换为供应商对账系统所需的XML或CSV格式。
最后,将处理后的数据写入目标系统。这一步通常通过API调用或数据库操作来完成。
实例状态监控
为了确保整个过程的顺利进行,我们可以利用轻易云平台提供的实时监控功能,跟踪每个实例的状态。如果出现错误,可以及时进行调试和修复。
通过以上步骤,我们成功实现了从钉钉接口获取并加工数据,以满足供应商对账系统需求。在实际操作中,根据具体业务需求调整参数和处理逻辑,可以进一步优化集成效果。
使用轻易云数据集成平台进行ETL转换并写入MySQLAPI接口
在数据集成生命周期的第二步中,关键任务是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并将其转为目标平台 MySQLAPI 接口所能够接收的格式,最终写入目标平台。以下将详细探讨如何利用轻易云数据集成平台完成这一过程。
数据请求与清洗
首先,我们需要从源系统中提取数据,并进行必要的清洗和预处理。假设我们已经完成了这一步,接下来我们重点关注如何将这些清洗后的数据进行转换和写入 MySQL。
数据转换与写入
在轻易云数据集成平台中,我们可以通过配置元数据来定义数据转换和写入的规则。以下是一个典型的元数据配置示例:
{
"api": "executeReturn",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "main_params",
"label": "主参数",
"type": "object",
"children": [
{"field": "serial_number", "label": "流水号", "type": "string", "value": "{serialNumberField_lgm25d8r}", "parent": "main_params"},
{"field": "applicant", "label": "申请人", "type": "string", "value": "{textField_lgm25d8p}", "parent": "main_params"},
{"field": "applicant_dept", "label": "申请部门", "type": "string", "value": "{selectField_lgm25d8q}", "parent": "main_params"},
{"field": "budget_dept", "label":"预算部门","type":"string","value":"{selectField_lgm25d99}","parent":"main_params"},
{"field":"budget_month","label":"预算月份","type":"string","value":"{textField_lgm25d9a}","parent":"main_params"},
{"parent":"main_params","label":"费用类型","field":"cost_type","type":"string","value":"{selectField_lgm25d98}"},
{"field":"remark","label":"备注","type":"string","value":"{textareaField_lgn3hejg}"},
{"field":"supplier_name","label":"供应商名称","type":"string","value":"{selectField_lgm25d9g}"},
{"field":"supplier_code","label":"供应商编码","type":"string","value":"{textField_lgm25d9i}"},
{"field":"account_name","label":"供应商账户","type":"string","value":"{selectField_lgn3hekc}"},
{"field":"bank","label":"开户行","type":"string","value":"{selectField_lgn3heke}"},
{"field":"account","label":"供应商账号","type":"string","value":"{selectField_lgn3hekf}"},
{"field":"payable_amount","label":"应付金额","type":"float","value":"{numberField_lgn3hel6}"},
{"field':'commission','label':'手续费合计','type':'float','value':'{numberField_lgn3hel7}'},
{"field':'pay_amount','label':'实付金额','type':'float','value':'{numberField_lgn3hel9}'},
{"field':'payorg','label':'付款组织','type':'string','value':'{textField_lgn3hekn}'},
{"field':'pay_date','label':'支付时间','type':'datetime','value':'_function FROM_UNIXTIME( ( {dateField_lgn3hela} \/ 1000 ) ,'%Y-%m-%d' )'},
{"field':'real_pay_date','label':'实际支付时间','type':'datetime','value':'_function FROM_UNIXTIME( ( {dateField_lgn3helb} \/ 1000 ) ,'%Y-%m-%d' )'},
{"field': 'bill_no', 'label': '台账编号', 'type': 'string', 'value': 'test1'},
{"field': 'create_time', 'label': '创建时间', 'type': 'datetime', 'value': '_function DATE_FORMAT('{gmtCreate}','%Y-%m-%d 00:00:00')'},
{"field': 'settle_org', 'label': '结算组织', 'type': 'string', 'value': '{{tableField_lgm25d9j.textField_lgm25d9w}}'}
]
},
{
...
}
],
...
}
上述配置定义了主参数main_params
,其中包含多个字段如流水号、申请人、申请部门等。这些字段会被映射到相应的数据源字段,并在后续步骤中被用来生成 SQL 插入语句。
SQL 插入语句生成
为了将转换后的数据写入 MySQL,我们需要生成相应的 SQL 插入语句。以下是主表和扩展表的插入语句示例:
INSERT INTO `lhhy_srm`.`supplier_payment_bill`
(`serial_number`, `applicant`, `applicant_dept`, `cost_type`, `budget_dept`, `budget_month`, `remark`, `supplier_name`, `supplier_code`, `account_name`, `bank`, `account`, `payable_amount`, `commission`, `pay_amount`, `payorg`, `pay_date`, `real_pay_date`, `bill_no`, `create_time`, `settle_org`)
VALUES
(<{serial_number: }>, <{applicant: }>, <{applicant_dept: }>, <{cost_type: }>, <{budget_dept: }>, <{budget_month: }>, <{remark: }>, <{supplier_name: }>, <{supplier_code: }>, <{account_name: }>, <{bank: }>, <{account: }>, <{payable_amount: }>, <{commission: }>, <{pay_amount: }>, <{payorg: }>, <{pay_date: }>, <{real_pay_date: }>, <{bill_no: }>, <{create_time: }>, <{settle_org: }>);
INSERT INTO `lhhy_srm`.`supplier_payment_bill_cost_detail`
(`order_id`, `serial_number`, `bill_no`, `cost_class`, `cost_item`, `cost_undertake_dept`,`cost_undertake_org`,`amount`,`commission`,`purpose`,`cost_undertake_dept_code`,`cost_undertake_org_code`,`purpose_code`,`create_time`)
VALUES
(<{lastInsertId: }>,<{serial_number: }>,<{bill_no: }>,<{cost_class: }>,<{cost_item: }>,<{cost_undertake_dept :} >,<{cost_undertake_org :}> ,<{amount :}> ,<{commission :}> ,<{purpose :}> ,<{cost_undertake_dept_code :}> ,<{ cost_undertake_org_code :}> ,< { purpose_code :}> ,< { create_time :}>);
这些 SQL 插入语句会在 ETL 流程中被执行,将转换后的数据写入 MySQL 数据库。
执行 API 请求
最后,通过调用 API 接口,将生成的 SQL 插入语句发送到目标 MySQL 数据库。以下是 API 请求示例:
{
api:"executeReturn",
method:"POST",
idCheck:true,
request:[
{
field:"main_sql",
label:"主语句",
type:"string",
value:"INSERT INTO..."
},
{
field:"extend_sql_1",
label:"1:1扩展语句",
type:"string",
value:"INSERT INTO..."
}
],
}
通过这种方式,可以确保所有的数据都按照预期格式被写入目标数据库。
综上所述,通过轻易云数据集成平台,我们可以高效地完成从源系统到目标 MySQL 平台的数据 ETL 转换和写入过程。这个过程不仅保证了数据的一致性和完整性,还提高了整体业务流程的透明度和效率。