高效数据对接:MySQL与金蝶云星空

  • 轻易云集成顾问-贺强

MySQL数据集成到金蝶云星空的实战案例:SYY生产用料清单新增-原材料深圳天一-好

在企业信息化进程中,实现不同系统之间的数据无缝对接是提升运营效率的关键步骤。本次技术案例将重点介绍如何通过轻易云数据集成平台,将MySQL中的生产用料清单数据高效、可靠地集成至金蝶云星空环境下。具体项目为“SYY生产用料清单新增-原材料深圳天一-好”。

API接口设计与实现

  1. MySQL获取数据的API设计

    • 对于从MySQL数据库提取生产用料清单,我们采用了标准的select语句,结合定时任务来确保数据抓取的及时性和完整性。通过合理设置分页和限流机制,以保证在大量并发请求情况下,不会对数据库性能造成压力。
  2. 金蝶云星空写入数据的API配置

    • 金蝶云星空提供了灵活强大的batchSave API接口,用于批量写入获取到的数据。在此过程中,我们需要特别注意映射源端(MySQL)与目标端(金蝶云星空)的字段差异,通过自定义转换逻辑进行适配。这不仅解决了格式差异问题,也确保了业务需求能够精准落实。

数据处理流程

为了保障整个数据集成过程中的稳定性和高效性,本方案引入了一系列控制措施:

  • 集中监控与告警系统:实时跟踪每次数据提取、转换及写入操作。一旦出现异常,系统将立即告警,并触发错误重试机制,最大程度上减少因短暂故障导致的数据漏失。

  • 自定义转换逻辑:针对不同业务场景,自行定制相应的数据处理规则,例如单位换算、多级分类等特殊需求,使得最终写入金蝶云星空的数据符合实际应用要求。

  1. 优化与扩展特性的应用 在本次实例中,为提高大批量数据快速处理能力,以及保障实时更新效果,我们利用以下几项关键特性:

    • 高吞吐量支持:使得每天数万条生产用料记录可快速同步到金蝶系统中,避免任何延迟带来的库存或采购决策误差。

    • 批量集成功能:科学分配任务负载,将大规模数据分块处理,有序推送至目标系统,有利于平衡服务器资源,提高整体运行效率。

这些精细化、严谨而又不失灵活性的设计理念,使得我们的方案能够稳健执行,并持续为企业创造价值。在后续章节中, 我们将详细剖 用友与WMS系统接口开发配置

调用MySQL接口select获取并加工数据

在轻易云数据集成平台的生命周期中,第一步是调用源系统MySQL接口select获取并加工数据。本文将详细探讨如何配置和使用该平台的元数据,以实现高效的数据请求与清洗。

配置元数据

元数据配置是实现数据集成的关键步骤。以下是一个具体的元数据配置示例:

{
  "api": "select",
  "effect": "QUERY",
  "method": "POST",
  "number": "生产订单号",
  "id": "{{生产订单号}}{{原材料编号}}",
  "idCheck": true,
  "request": [
    {
      "field": "main_params",
      "label": "main_params",
      "type": "object",
      "describe": "111",
      "value": "1",
      "children": [
        {
          "field": "limit",
          "label": "limit",
          "type": "string",
          "value": "100"
        },
        {
          "field": "offset",
          "label": "offset",
          "type": "string"
        }
      ]
    }
  ],
  "otherRequest": [
    {
      "field": "main_sql",
      "label": "main_sql",
      "type": "string",
      "describe": "111",
      "value": "
        select 
          case mm.delivery_org
            when 'T01.01' then CONCAT('HJ',CAST(i.id AS CHAR))
            when 'T04' then CONCAT('HJGD',CAST(i.id AS CHAR))
          end as 生产订单号,
          a.part_no as 成品编号,
          now() as 日期,
          a.req_num as 生产数量,
          a.mold_no as 计划跟踪号,
          m.part_no as 原材料编号,
          i.quantity as 分子,
          1 as 分母,
          i.id as sourceid,
          a.req_num*i.quantity as 领料数量,
          mm.delivery_org as 供应组织
        FROM mbs_nuclear_price_info i
        LEFT JOIN mbs_nuclear_price_task a ON i.nuclear_price_task_uuid = a.nuclear_price_task_uuid
        LEFT JOIN basic_material_info m on i.raw_material_info=m.material_info_no
        LEFT JOIN mbs_order_plan_bom l on a.mold_no=l.bom_no
        LEFT JOIN mbs_order_bom mm on mm.bom_uuid=l.bom_uuid
        WHERE
         a.is_cancel = '1' 
         and a.company_code = 'TYZN'
         and i.outsourced_type='1'
         AND i.create_time>(select config_value from sys_config where config_id=337)
         and is_success1 !='1' and i.is_success='1'
        limit :limit offset :offset"
    }
  ],
  “autoFillResponse”: true,
  “omissionRemedy”: {
    “crontab”: “1 1 1 1 1”,
    “takeOverRequest”: []
  }
}

数据请求与清洗

在上述配置中,api字段指定了要调用的MySQL接口为select,并通过POST方法发送请求。主要参数包括:

  • number: 用于标识生产订单号。
  • id: 用于生成唯一标识符,结合了生产订单号和原材料编号。
  • idCheck: 设置为true,确保ID唯一性检查。
请求参数

请求参数定义在request字段中,其中包含一个对象类型的main_params,其子字段包括:

  • limit: 限制返回记录数,默认值为100。
  • offset: 用于分页查询。
SQL查询语句

实际的数据查询由otherRequest中的main_sql字段定义,该字段包含了复杂的SQL查询语句,用于从多个表中提取所需的数据,并进行必要的转换和过滤。例如:

SELECT 
   CASE mm.delivery_org
     WHEN 'T01.01' THEN CONCAT('HJ', CAST(i.id AS CHAR))
     WHEN 'T04' THEN CONCAT('HJGD', CAST(i.id AS CHAR))
   END AS 生产订单号,
   a.part_no AS 成品编号,
   NOW() AS 日期,
   a.req_num AS 生产数量,
   a.mold_no AS 计划跟踪号,
   m.part_no AS 原材料编号,
   i.quantity AS 分子,
   1 AS 分母,
   i.id AS sourceid,
   a.req_num * i.quantity AS 领料数量,
   mm.delivery_org AS 供应组织
FROM mbs_nuclear_price_info i
LEFT JOIN mbs_nuclear_price_task a ON i.nuclear_price_task_uuid = a.nuclear_price_task_uuid
LEFT JOIN basic_material_info m ON i.raw_material_info = m.material_info_no
LEFT JOIN mbs_order_plan_bom l ON a.mold_no = l.bom_no
LEFT JOIN mbs_order_bom mm ON mm.bom_uuid = l.bom_uuid
WHERE 
   a.is_cancel = '1' 
   AND a.company_code = 'TYZN'
   AND i.outsourced_type = '1'
   AND i.create_time > (SELECT config_value FROM sys_config WHERE config_id = 337)
   AND is_success1 != '1' 
   AND i.is_success = '1'
LIMIT :limit OFFSET :offset;

自动填充响应与遗漏补救

配置中的autoFillResponse设置为true,表示系统会自动填充响应结果。此外,还定义了一个定时任务(crontab)用于处理遗漏的数据请求。

通过以上配置,我们可以高效地从MySQL数据库中获取并加工所需的数据,为后续的数据转换与写入阶段打下坚实基础。这种全异步、多系统支持的平台特性,使得不同系统间的数据无缝对接成为可能,大大提升了业务透明度和效率。 如何对接金蝶云星空API接口

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

在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并转为目标平台——金蝶云星空API接口所能够接收的格式,最终写入目标平台。以下将详细介绍如何通过轻易云数据集成平台实现这一过程。

元数据配置解析

根据提供的元数据配置,我们需要将生产用料清单新增的数据转换为金蝶云星空API接口所能接受的格式。元数据配置如下:

{
  "api": "batchSave",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "rowsKey": "array",
    "rows": 1,
    "method": "batchArraySave"
  },
  "request": [
    {
      "field": "FID",
      "label": "FID",
      "type": "string",
      "value": "_findCollection find FID from d9c54956-106b-36e1-8018-91a8855f6316 where FMoBillNo={{生产订单号}}"
    },
    {
      "field": "FEntity",
      "label": "子项明细",
      "type": "array",
      ...
    }
  ],
  ...
}

数据提取与转换

首先,需要从源系统中提取相关的数据。以生产订单号为关键字,通过 _findCollection 方法从指定集合中查找相关字段值。例如,提取 FID 字段:

{
  "field": "FID",
  "label": "FID",
  "type": "string",
  "value": "_findCollection find FID from d9c54956-106b-36e1-8018-91a8855f6316 where FMoBillNo={{生产订单号}}"
}

这里使用了 _findCollection 方法,根据 生产订单号 查找对应的 FID 值。

接下来是对子项明细 FEntity 的处理,其中包括多个字段,如 FMaterialID2, FMaterialType, FDosageType, 等等。这些字段需要根据源系统的数据进行相应的转换。例如:

{
  ...
  {
    "field": "FMaterialID2",
    "label": "子项物料编码",
    ...
    {"name":"ConvertObjectParser","params":"FNumber"},
    ...
    {"value":"{{原材料编号}}"}
  },
  ...
}

在这个例子中,使用了 ConvertObjectParser 转换器,将原材料编号转换为目标系统所需的格式。

数据写入

完成数据转换后,需要将这些数据写入到金蝶云星空系统。根据元数据配置中的 operation 部分,采用批量保存的方法:

{
  ...
  {
    "field":"Operation",
    ...
    {"value":"batchSave"}
  },
  ...
}

使用 HTTP POST 方法,将转换后的 JSON 数据发送到金蝶云星空 API 接口:

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

特殊字段处理

某些字段需要进行特殊处理,例如标准用量、需求数量、应发数量等,这些字段需要进行四舍五入处理:

{
  ...
  {
    ...
    {"field":"FStdQty","value":"_function ROUND(\"{{领料数量}}\" , 3 )"},
    {"field":"FNeedQty2","value":"_function ROUND(\"{{领料数量}}\" , 3 )"},
    {"field":"FMustQty","value":"_function ROUND(\"{{领料数量}}\" , 3 )"},
    ...
   }
}

通过 _function ROUND 函数,对领料数量进行小数点后三位的四舍五入操作。

提交与审核

最后,设置是否自动提交并审核,以及验证基础资料有效性等参数:

{
   ...
   {"field":"IsAutoSubmitAndAudit","value":"false"},
   {"field":"IsVerifyBaseDataField","value":"true"},
   ...
}

这些参数确保在写入过程中对数据进行严格校验,并决定是否自动提交和审核。

通过以上步骤,我们可以利用轻易云数据集成平台,实现从源系统到金蝶云星空系统的数据ETL转换和写入操作。这不仅提高了业务流程的自动化程度,还确保了数据的一致性和准确性。 用友与SCM系统接口开发配置

更多系统对接方案