从钉钉到MySQL:轻易云平台数据处理实战指南

  • 轻易云集成顾问-黄宏棵

钉钉数据集成到MySQL解决方案:dd-新借款单(费用申请单)-->mysql(鸿巢)

在当前的数据驱动业务环境中,实现不同系统间高效、可靠的数据对接是每个企业所面临的重要挑战。本文将聚焦于一个具体的系统对接案例——如何通过轻易云数据集成平台,将钉钉的新借款单(费用申请单)数据无缝集成到MySQL数据库中。

我们在整个数据集成流程中,充分利用了轻易云提供的丰富功能,如可视化操作界面、高吞吐量的数据写入能力以及强大的监控和告警系统,确保了各环节透明清晰,并实现了高效的数据处理。

案例概述

该技术案例主要包括以下几个关键步骤:

  1. 获取钉钉接口数据:通过调用API v1.0/yida/processes/instances 定时抓取新产生的借款单信息。
  2. 处理分页和限流问题:由于可能存在大量待抓取的数据,我们需要有效管理API请求的分页与限流机制,以确保任务稳定运行。
  3. 数据格式转换:针对从钉钉获取到的JSON格式数据进行必要的清洗和转换,使其符合MySQL表结构需求。
  4. 批量写入MySQL:利用轻易云高吞吐量能力,将转换后的数据批量插入至MySQL数据库,通过调用execute API执行写入操作。
  5. 监控与异常处理:建立集中式监控体系,实时跟踪任务状态,对于任何出现的问题进行及时告警并触发自动重试机制,以保证不漏单且可靠运行。

技术切入点

首先,我们设定好定时任务来调度API调用。这部分涉及规划合适的时间间隔以均衡接口负载,同时必须考虑页面分片及速率限制,从而避免违反API使用规定。接着,要非常仔细地设计JSON解析及映射逻辑,确保所有关键字段都能准确无误地对应到相应数据库列,这一步直接影响后续存储质量。

另一个重点是在执行时怎样最大限度提高性能。在批量提交过程中,为减少网络传输开销与优化I/O性能,可以预先构建多条INSERT语句一次性提交大块记录,并终始控制事务管理过程中的异常情况,一旦检测错误,即启动回滚策略或重试机制以维护一致性。此外,不断更新与优化基础设施配置,对于提升整体效率不可忽视,例如调整连接池参数等细节都有助于改善响应速度及资源利用率。

综合这些内容,通过严谨的方法论,加上富 如何开发用友BIP接口

调用钉钉接口v1.0/yida/processes/instances获取并加工数据

在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用钉钉接口v1.0/yida/processes/instances,获取并加工数据,以实现高效的数据集成。

API接口配置

首先,我们需要配置API接口的元数据。以下是具体的配置细节:

{
  "api": "v1.0/yida/processes/instances",
  "method": "POST",
  "number": "title",
  "id": "processInstanceId",
  "idCheck": true,
  "formatResponse": [
    {"old": "dateField_lgfwstn8", "new": "datetime_new", "format": "date"},
    {"old": "serialNumberField_lgek80ou", "new": "order_no_new", "format": "string"}
  ],
  "request": [
    {"field": "pageNumber", "label": "分页页码", "type": "string", "describe": "分页页码", "value": "{PAGINATION_START_PAGE}"},
    {"field": "pageSize", "label": "分页大小", "type": "string", "describe": "分页大小", "value": "{PAGINATION_PAGE_SIZE}"},
    {"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-3C866TC1BRT9L2XMCY5N4DXDM51B2HLXGEEGLF"},
    {"field":"searchFieldJson","label":"条件","type":"object","children":[{"field":"selectField_lgkgut6u","label":"类型","type":"string","value":"收款退款"},{"parent":"searchFieldJson","label":"部门过滤","field":"selectField_lgkgut6b","type":"string"}]},
    {"field":"originatorId","label":"根据流程发起人工号查询","type":"string","describe":"根据流程发起人工号查询"},
    {"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":
"修改时间起始值"
},
{"field":
"modifiedToTimeGMT",
"label":
"修改时间终止值",
"type":
"string",
"describe":
"修改时间终止值"
},
{"field":
"taskId",
"label":
"任务ID",
"type":
"string",
"describe":
"任务ID"
},
{"field":
"instanceStatus",
"label":
"实例状态",
"type":
"string",
"description:
实例状态,
"value:
COMPLETED
},
{"field:
approvedResult,
'label':
流程审批结果,
'type':
'tring',
'description':
流程审批结果,
'value':
agree
}
],
condition:
[
[
{
'ield':
'dateField_lgfwstn8',
'logic':
'notnull'
}
]
],
beatFlat:
[
'tableField_lgek80p9'
]
}

请求参数详解

在请求参数部分,我们定义了多个字段以确保API调用的准确性和有效性:

  • pageNumberpageSize 用于分页控制。
  • appTypesystemToken 用于验证应用身份。
  • userId 用于指定用户身份。
  • language 用于指定返回数据的语言。
  • formUuid 指定要查询的表单ID。
  • searchFieldJson 包含了具体的查询条件,如类型和部门过滤。
  • 时间相关字段如 createFromTimeGMTcreateToTimeGMT 用于限定查询的数据范围。
  • 状态相关字段如 instanceStatusapprovedResult 用于筛选特定状态的数据。

数据格式化与转换

为了确保从API获取的数据能够直接用于后续处理,我们需要对响应数据进行格式化和转换:

{
  formatResponse: [
    {old: 'dateField_lgfwstn8', new: 'datetime_new', format: 'date'},
    {old: 'serialNumberField_lgek80ou', new: 'order_no_new', format: 'string'}
  ]
}

在这里,我们将原始字段 dateField_lgfwstn8 转换为新的字段名 datetime_new,并将其格式化为日期类型。同样地,将 serialNumberField_lgek80ou 转换为字符串类型的新字段名 order_no_new

条件与校验

为了确保数据质量,我们还设置了条件和校验规则:

{
  condition: [
    [{ field: 'dateField_lgfwstn8', logic: 'notnull' }]
  ],
  idCheck: true
}

这些条件确保只有符合特定逻辑的数据才会被处理,并且启用了ID校验以避免重复数据。

实际操作案例

假设我们需要从钉钉系统中获取新借款单(费用申请单)的数据,并将其写入到MySQL数据库中。以下是具体步骤:

  1. 配置API请求:根据上述元数据配置,构建API请求。
  2. 发送请求:使用轻易云平台发送POST请求到钉钉接口。
  3. 接收响应:接收并解析响应数据,根据格式化规则进行转换。
  4. 数据清洗:根据条件过滤无效或不完整的数据。
  5. 写入数据库:将清洗后的数据写入到目标MySQL数据库中。

通过上述步骤,我们可以高效地实现从钉钉系统到MySQL数据库的数据集成。这不仅简化了操作流程,还提高了数据处理的准确性和效率。 用友BIP接口开发配置

使用轻易云数据集成平台进行ETL转换并写入MySQL API接口

在数据集成生命周期的第二步中,我们需要将已经从源平台获取的数据进行ETL(提取、转换、加载)处理,并最终写入目标平台MySQL。本文将详细探讨如何利用轻易云数据集成平台的元数据配置,实现这一过程。

数据请求与清洗

在数据请求与清洗阶段,我们已经从源平台成功获取了所需的数据。这些数据通常是原始且未经过处理的,需要进行进一步的转换,以符合目标平台MySQL API接口的要求。

数据转换与写入

接下来,我们重点关注如何将这些原始数据进行ETL转换,并通过API接口写入到目标MySQL数据库中。以下是具体步骤和技术细节。

1. 配置元数据

首先,我们需要配置元数据,以便正确映射源数据字段到目标数据库字段。以下是一个示例元数据配置:

{
    "api": "execute",
    "effect": "EXECUTE",
    "method": "POST",
    "idCheck": true,
    "request": [
        {
            "field": "main_params",
            "label": "main_params",
            "type": "object",
            "describe": "111",
            "children": [
                {"field": "extend_processInstanceId", "label": "明细id", "type": "string", "value": "{bfn_id}"},
                {"field": "order_no_new", "label": "单号", "type": "string", "value": "{order_no_new}(FYSQ)"},
                {"field": "datetime_new", "label": "时间", "type": "date", "value": "{datetime_new}"},
                {"field": "qty_count", "label": "数量", "type": "string", "value":"1"},
                {"field":"sales_count","label":"金额","type":"string","value":"{{tableField_lgek80p9_numberField_lgfwstkv}}"},
                {"field":"status","label":"状态","type":"string"},
                {"field":"Document_Type","label":"单据类型","type":"string","value":"费用申请"}
            ]
        }
    ],
    ...
}
2. 数据映射

在上述配置中,main_params对象包含了多个子字段,每个子字段对应目标数据库中的一个字段。例如:

  • extend_processInstanceId 对应 bfn_id
  • order_no_new 对应 order_no_new
  • datetime_new 对应 datetime_new
  • qty_count 固定值为 1
  • sales_count 对应表单中的金额字段
  • statusDocument_Type 直接映射为固定值或动态值
3. SQL语句配置

为了将转换后的数据写入MySQL数据库,我们需要配置相应的SQL语句。在元数据中,这部分配置如下:

{
    ...
    ,"otherRequest":[
        {
            "field":"main_sql",
            "label":"main_sql",
            "type":"string",
            ...
            ,"value":"INSERT INTO  `hc_dd_fysq`( `extend_processInstanceId`,`order_no_new`,`datetime_new`,`qty_count`,`sales_count`,`status` ,`Document_Type`) VALUES (:extend_processInstanceId,:order_no_new,:datetime_new,:qty_count,:sales_count,:status,:Document_Type)"
        }
    ]
}

此SQL语句将把映射后的字段值插入到名为hc_dd_fysq的表中。

4. 执行API请求

最后,通过POST方法执行API请求,将处理后的数据发送到目标MySQL数据库。由于我们已经在元数据中配置了所有必要的信息,轻易云平台会自动完成这一过程。

{
    ...
    ,"method":"POST"
}

总结技术要点

通过上述步骤,我们实现了以下关键技术点:

  1. 元数据配置:定义了源字段和目标字段之间的映射关系。
  2. 数据映射:根据业务需求对源数据进行转换。
  3. SQL语句配置:编写插入语句,将处理后的数据写入目标数据库。
  4. API请求执行:通过POST方法执行API请求,完成最终的数据写入。

这种全异步、支持多种异构系统集成的方法,使得不同系统间的数据无缝对接成为可能,大大提升了业务效率和透明度。 金蝶与外部系统打通接口

更多系统对接方案