基于轻易云平台实现MySQL与金蝶云星空数据对接

  • 轻易云集成顾问-姚缘

MySQL 数据集成到金蝶云星空——SC 采购入库案例分享

在现代企业跨系统数据集成的复杂场景中,如何确保数据准确、实时、高效地流动,是每个技术团队必须面对的关键问题。本文将直击MySQL与金蝶云星空之间的数据对接,以"SC采购入库-深圳天一-OK"方案为例,深入探讨其实现过程中的技术要点。

系统环境概述

该案例涉及两个主要系统:MySQL数据库和金蝶云星空。其中,MySQL用于存储和处理核心业务数据,而金蝶云星空负责财务及供应链管理。直接的集成需求是将MySQL中的采购入库数据无缝导入到金蝶云星空,实现业务流程自动化。

技术挑战与解决方案

  1. 高吞吐量写入能力: 为了保证大量生产数据迅速且稳定地导入至MySQL,然后从中抽取并写入到金蝶云星空,我们采用分批次处理机制,通过select API定期抓取MySQL接口数据,并利用batchSave API批量写入目标系统。这不仅提升了整体处理效率,还降低了大规模单次操作可能带来的压力风险。

  2. 集中监控和告警: 集成过程中,我们引入了集中监控与告警功能。通过实时追踪任务状态及性能指标,确保任何异常情况能够及时被发现并妥善处理。例如,当出现网络延迟或API响应错误时,系统会自动触发告警,并执行预配置的重试策略,以保障任务最终成功完成。

  3. 自定义转换逻辑: 考虑到两者之间的数据格式差异,我们设计了一套灵活的数据转换规则,将源数据规范化为符合目标要求的结构。同时支持针对特定字段进行映射及逻辑运算,使得最终生成的报表准确反映各项业务内容。

  4. 异常检测与错误重试机制: 我们设置了详细的错误捕捉机制,对所有API调用进行严格校验。一旦检测到信息缺失或类型不符等常见问题,会立即记录日志并进入重试环节,有效地规避因偶发性故障导致的数据丢失等风险。

以上几个方面构建出一个高度可靠、快速响应且维护便捷的跨平台数据集成解决方案,为企业提供强有力的信息支撑。接下来我们详解具体实施步骤及代码示例,以帮助更多同业者应对类似挑战。 泛微OA与ERP系统接口开发配置

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

在轻易云数据集成平台中,调用源系统MySQL接口select获取并加工数据是数据集成生命周期的第一步。本文将深入探讨如何通过配置元数据来实现这一过程。

元数据配置解析

元数据配置是实现数据请求与清洗的关键。以下是一个典型的元数据配置示例:

{
  "api": "select",
  "effect": "QUERY",
  "method": "POST",
  "id": "采购入库单号",
  "request": [
    {
      "field": "main_params",
      "label": "主参数",
      "type": "object",
      "describe": "对应其它请求字段内SQL语句的主参数,必须一一对应。",
      "value": "select \nc.business_no as 采购单号,\na.part_no as 成品编号,\nc.ser_code as 条码,\na.confirm_numb as 数量,\ne.pur_price as 含税单价,\nc.mode_no as 计划跟踪号,\nCONCAT(f.confrim_no,'_',CAST(a.id AS CHAR)) as 领料单号,\ndate(a.update_time) as 日期,\nCONCAT(a.part_no,concat('_',c.current_process_code)) as 物料编号,\na.uuid as sourceid\nfrom wms_instock_confirm_task_detail a\nleft join wms_instock_purchase_task_detail c on  c.out_type='2' AND MATTERIAL_TYPE='3'\nleft join wms_instock_confirm_main_task_detail b on b.connect_uuid=c.uuid\nleft join mbs_pur_record_detail e on c.connect_id=e.id\nleft join wms_instock_confirm_task f on f.uuid=a.confirm_detail_task_uuid\nwhere a.connect_uuid=b.uuid\nand a.company_code='TYZN'\nand a.create_time>'2023-09-01'\nand f.confrim_no='RKQR20230905026'\n limit :limit offset :offset",
      "children": [
        {
          "field": "limit",
          "label": "行数",
          "type": "int",
          "value": "{PAGINATION_PAGE_SIZE}"
        },
        {
          "field": "offset",
          "label": "偏移量",
          "type": "int",
          "value": "{PAGINATION_START_ROW}"
        }
      ]
    }
  ],
  ...
}

数据请求与清洗

在上述配置中,我们定义了一个select类型的API接口,用于从MySQL数据库中查询采购入库相关的数据。具体步骤如下:

  1. 定义主参数

    • main_params字段包含了SQL查询语句及其动态参数(如:limit:offset)。
    • 动态参数通过占位符表示,并在执行查询时进行绑定。
  2. 绑定动态参数

    • limitoffset分别表示分页查询中的行数和偏移量。
    • 在实际请求时,这些参数会被替换为具体的值,以实现分页查询。

SQL语句优化

为了提高查询效率和可维护性,我们可以对SQL语句进行优化。例如,将动态字段:limit替换为占位符,并在执行查询前进行参数绑定:

select 
    c.business_no as 采购单号,
    g.supplier_short_code as 供应商代码,
    g.tax_points*100 as 税率,
    e.is_give_away as 赠品,
    case 
        when c.MATTERIAL_TYPE='1' then e.part_no
        else a.part_no
    end as 成品编号,
    case 
        when c.MATTERIAL_TYPE='1' then e.pic_no
        else h.pic_no
    end as 图号,
    c.ser_code as 条码,
    case
        when (c.out_type='2' AND c.MATTERIAL_TYPE='3') then a.confirm_numb
        when (c.out_type='1' AND c.MATTERIAL_TYPE='4') then a.confirm_numb
        when (c.out_type='1' AND c.MATTERIAL_TYPE='1') then a.instock_weight
        else a.confirm_numb
    end  as 数量,
    e.pur_price as 含税单价,
    i.real_name as 采购员,
    case 
        when left(a.part_no,2)='01' then ''
        else c.mode_no
    end as 计划跟踪号,
    CONCAT(f.confrim_no,'_',CAST(a.id AS CHAR)) as 采购入库单号,
    date(a.create_time) as 日期,
    case
        when (c.out_type='2' AND c.MATTERIAL_TYPE='3') then CONCAT(a.part_no,concat('_',c.current_process_code))
        when (c.out_type='1' AND c.MATTERIAL_TYPE='3') then CONCAT(a.part_no,concat('_',c.current_process_code))
        when (c.out_type='1' AND c.MATTERIAL_TYPE='4') then CONCAT(a.part_no,concat('_WW'))
        when (c.out_type='1' AND c.MATTERIAL_TYPE='1') then a.part_no
        else a.part_no
    end  as 物料编号,
    ...
from 
    wms_instock_confirm_task_detail a
left join 
    wms_instock_confirm_main_task_detail j on a.connect_uuid=j.uuid
...
where 
    a.connect_uuid=b.uuid
and 
    a.company_code='TYZN'
and 
    g.is_inner='1'
and 
    k.is_second_pur='1'
and 
    a.create_time>(select config_value from sys_config where config_id=341)
and 
    a.is_success4<>'1'
limit ? offset ?

通过这种方式,我们能够确保SQL语句的可读性和安全性,同时提高查询性能。

实践应用

在实际应用中,通过上述元数据配置,我们可以轻松实现从MySQL数据库中获取并加工数据。这一步骤不仅确保了数据请求的准确性,还为后续的数据转换与写入打下了坚实基础。

总之,通过合理配置元数据并优化SQL语句,可以有效提升数据集成过程中的效率和可靠性,为业务系统提供高质量的数据支持。 用友与外部系统接口集成开发

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

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

配置元数据

我们首先需要配置元数据,以确保数据能够正确地映射到金蝶云星空API接口所需的格式。以下是一个完整的元数据配置示例:

{
  "api": "batchSave",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {
      "field": "FBillTypeID",
      "label": "单据类型",
      "type": "string",
      "describe": "单据类型",
      "parser": {"name":"ConvertObjectParser","params":"FNumber"},
      "value":"RKD01_SYS"
    },
    {
      "field": "FBusinessType",
      "label": "业务类型",
      "type": "string",
      "describe": "下拉列表",
      "value":"CG"
    },
    {
      ...
    }
  ],
  ...
}

数据转换与映射

在配置元数据时,我们需要特别注意字段的映射和转换规则。例如:

  • FBillTypeID 字段代表单据类型,使用 ConvertObjectParser 将其值转换为金蝶云星空所需的格式。
  • FStockOrgIdFPurchaseOrgId 字段根据供应组织进行条件判断和转换。
{
  ...
  {
    "field":"FStockOrgId",
    "label":"收料组织",
    ...
    "value":"_function case '{{供应组织}}' when 'T01.01' then 'T01.06' when 'T04' then 'T04' else '' end"
  },
  {
    ...
  }
}

明细信息处理

对于明细信息,我们使用数组形式来处理多条记录。每条记录包含多个字段,如物料编码、实收数量、单价等。这些字段同样需要进行适当的转换和映射。

{
  ...
  {
    "field":"FInStockEntry",
    ...
    "children":[
      {
        ...
        {
          "field":"FMaterialId",
          ...
          "value":"{{物料编号}}"
        },
        {
          ...
        }
      }
    ]
  }
}

财务信息处理

财务信息部分包含结算组织、付款组织等字段,这些字段也需要进行相应的转换和映射。例如:

{
  ...
  {
    ...
    {
      "field":"FSettleOrgId",
      ...
      "value":"_function case '{{供应组织}}' when 'T01.01' then 'T01' when 'T04' then 'T04' else '' end"
    },
    {
      ...
    }
  }
}

提交与审核

在所有字段都正确映射和转换后,我们需要将这些数据通过API接口提交到金蝶云星空,并选择是否自动提交并审核。

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

通过上述步骤,我们可以确保源平台的数据经过ETL转换后,能够无缝对接到金蝶云星空API接口,实现高效的数据集成与写入。 系统集成平台API接口配置

更多系统对接方案