使用轻易云实现数据转换与金蝶云API接口写入

  • 轻易云集成顾问-陈洁琳

GH不合格品生产汇报单新增-好:MySQL数据集成到金蝶云星空技术案例

在企业管理系统的复杂环境中,实现不同数据库和平台之间的数据无缝对接,是提升业务透明度和运营效率的关键。本文将剖析一个具体技术案例,描述如何通过轻易云数据集成平台,将MySQL中的不合格品生产汇报相关数据,可靠且高效地批量同步到金蝶云星空,以实现双方系统间信息的一致性和实时更新。

系统架构概述

此次集成任务命名为“GH不合格品生产汇报单新增-好”,主要利用MySQL获取汇报数据(select),并通过金蝶云星空提供的batchSave API接口完成目标系统的数据写入。整个方案设计遵循高吞吐、高可靠性的原则,并借助平台所提供的可视化设计工具,为我们直观展现了从源头抓取数据到目标写入过程中的每一步操作。

数据获取与转换

首先,通过配置自定义查询逻辑,我们从MySQL数据库中精准抽取包含必要字段的不合格品记录:

SELECT id, report_date, product_code, defect_count FROM defects_report WHERE status = 'unqualified';

为了确保所有待处理记录都能被成功捕获,我们设置定时抓取机制,定周期地执行上述查询语句,将结果推送至转化模块进行后续处理。同时,通过监控和告警系统,对整个抓取流程进行状态跟踪,一旦出现异常如分页或限流问题,可以及时发出预警并触发重试机制。

数据映射与格式调整

由于MySQL及金蝶云星空之间存在一定的数据格式差异,在传输前必须先行处理。这个过程中,我们利用标准化规则,对字段名称及数据类型进行适配,使得符合目标API要求,例如将product_code 转换为 skuCode等。在实际操作中,还可以直接使用可视化界面拖拽组件快速完成这些映射工作:

[
  {
    "id": "<source_id>",
    "reportDate": "<source_report_date>",
    "skuCode": "<source_product_code>",
    "defectQuantity": "<source_defect_count>"
  }
]

高效批量写入

经过规范后的JSON对象,即可调用金蝶云星空提供的batchSave接口实现插入操作:

POST /cloud/api/v1/batchSave HTTP/1.1
Content-Type: application/json
Host: api.kingdee.com

{
  "dataList": [
    { 
      "id" : 12345,
      ...
     },
    { 
      ...

![打通企业微信数据接口](https://pic.qeasy.cloud/D28.png~tplv-syqr462i7n-qeasy.image)
### 调用MySQL接口select获取并加工数据

在轻易云数据集成平台的生命周期中,调用源系统MySQL接口获取数据是关键的第一步。本文将详细探讨如何通过配置元数据来实现从MySQL数据库中调用数据,并进行初步加工。

#### 元数据配置解析

我们使用的元数据配置如下:

```json
{
  "api": "select",
  "effect": "QUERY",
  "method": "SQL",
  "number": "入库单号",
  "id": "入库单号",
  "name": "name",
  "request": [
    {
      "field": "main_params",
      "label": "主参数",
      "type": "object",
      "describe": "对应主查询语句内的动态参数对象",
      "children": [
        {
          "field": "limit",
          "label": "返回的记录数",
          "type": "int",
          "describe": "你可以使用 LIMIT 属性来设定返回的记录数。",
          "value": 100
        },
        {
          "field": "offset",
          "label": "数据偏移量",
          "type": int,
          "describe": “你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。”
        }
      ]
    }
  ],
  “otherRequest”: [
    {
      “field”: “main_sql”,
      “label”: “主查询语句”,
      “type”: “string”,
      “describe”: “使用 :created_at 格式与主参数字段进行对应”,
      “value”: “select a.dispatch_prefix as 生产订单号,\n d.bom_uuid,\n CONCAT('RKBLP_',a.id) as 入库单号,\n date(a.update_time) as 日期,\n a.part_no as 成品编号,\n d.bom_no as 计划跟踪号,\n a.instock_numb as 入库数量,\n a.id as sourceid,\n f1.id,\n ((select ifnull(sum(f.man_hour),0) from eng_craft_card_item f where f.card_id=f1.id and f.process_id !=1267)+(select ifnull(sum(f.man_hour),0) from eng_craft_card_item f where f.card_id=f1.id and f.process_id =1267)/(select dispatched_num from mes_dispatch_record_process where company_code='gdty' and dispatch=a.dispatch_prefix limit 1))*a.instock_numb/3600 as 工时\nfrom wms_instock_confirm_main_task_detail a\nleft join oms_order_bom d on d.bom_uuid=(select bom_uuid from mes_dispatch_record_process where company_code='gdty' and dispatch=a.dispatch_prefix LIMIT 1 )\nleft join wms_instock_confirm_task e on a.confirm_task_uuid=e.confirm_task_uuid\nleft join eng_craft_card f1 on f1.oms_order_bom_uuid=d.bom_uuid\nwhere a.company_code='gdTY' and a.confirm_status='20’ and a.matterial_type=4 and d.material_source='2' and d.kingdee_fwl='0'\nand a.is_defect='1' and a.is_success !='1' limit :limit offset :offset”
    }
  ],
  “autoFillResponse”: true,
  “omissionRemedy”: {
    “crontab”: “1 1 1 1 1”,
    “takeOverRequest”: []
  }
}

主查询语句解析

主查询语句 main_sql 是整个数据请求的核心部分。它定义了从MySQL数据库中提取哪些字段以及如何进行初步加工。以下是该查询语句的分解:

select 
    a.dispatch_prefix as 生产订单号,
    d.bom_uuid,
    CONCAT('RKBLP_',a.id) as 入库单号,
    date(a.update_time) as 日期,
    a.part_no as 成品编号,
    d.bom_no as 计划跟踪号,
    a.instock_numb as 入库数量,
    a.id as sourceid,
    f1.id,
    ((select ifnull(sum(f.man_hour),0) from eng_craft_card_item f where f.card_id=f1.id and f.process_id !=1267)
     +(select ifnull(sum(f.man_hour),0) from eng_craft_card_item f where f.card_id=f1.id and f.process_id =1267)
     /(select dispatched_num from mes_dispatch_record_process where company_code='gdty' and dispatch=a.dispatch_prefix limit 1))
     *a.instock_numb/3600 as 工时
from 
    wms_instock_confirm_main_task_detail a
left join 
    oms_order_bom d on d.bom_uuid=(select bom_uuid from mes_dispatch_record_process where company_code='gdty' and dispatch=a.dispatch_prefix LIMIT 1 )
left join 
    wms_instock_confirm_task e on a.confirm_task_uuid=e.confirm_task_uuid
left join 
    eng_craft_card f1 on f1.oms_order_bom_uuid=d.bom_uuid
where 
    a.company_code='gdTY'
and 
    a.confirm_status='20'
and 
    a.matterial_type=4
and 
    d.material_source='2'
and 
    d.kingdee_fwl='0'
and 
    a.is_defect='1'
and 
    a.is_success !='1'
limit :limit offset :offset

参数化查询

为了提高查询的灵活性和安全性,我们使用了参数化查询。元数据中的 main_params 定义了两个主要参数:limitoffset

  • limit: 用于限制返回记录数,默认值为100。
  • offset: 用于指定查询起始位置,默认值为0。

这些参数在实际执行时会替换掉 SQL 查询中的占位符 :limit:offset

数据加工

在这个阶段,我们不仅仅是简单地提取数据,还对其进行了初步加工。例如:

  • 使用 CONCAT('RKBLP_',a.id) 为每条记录生成唯一的入库单号。
  • 使用子查询计算工时,并将其转换为小时单位。

这些操作确保了我们从源系统获取的数据已经过初步清洗和处理,为后续的数据转换与写入阶段奠定了基础。

实际应用案例

假设我们需要从MySQL数据库中提取不合格品生产汇报单新增的数据,并限制返回记录数为50,偏移量为10。我们可以这样配置请求:

{
  main_params: {
     limit: 50, 
     offset:10
   },
   main_sql: "...(如上所示)"
}

通过这种方式,我们能够灵活地控制每次请求的数据量和起始位置,从而实现高效的数据集成。

总结来说,通过合理配置元数据,我们可以高效地调用MySQL接口获取并加工数据。这一步骤不仅是整个数据集成过程的重要组成部分,也是确保后续处理顺利进行的基础。 金蝶与CRM系统接口开发配置

轻易云数据集成平台ETL转换与写入金蝶云星空API接口技术案例

在数据集成的生命周期中,ETL(提取、转换、加载)是关键的一步。本文将详细探讨如何通过轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并转为金蝶云星空API接口所能够接收的格式,最终写入目标平台。

数据转换配置

元数据配置是实现数据转换的核心。以下是本案例中使用的元数据配置:

{
    "api": "batchSave",
    "effect": "EXECUTE",
    "method": "POST",
    "number": "FBillNo",
    "id": "FID",
    "name": "FBillNo",
    "idCheck": true,
    "operation": {
        "method": "merge",
        "field": "入库单号",
        "bodyName": "items",
        "bodySum": ["工时", "入库数量"],
        "header": ["生产订单号", "日期", "入库单号"],
        "body": ["成品编号", "入库数量", "工时"]
    },
    ...
}

请求字段映射

在请求字段映射部分,我们需要将源平台的数据字段映射到金蝶云星空API接口所需的字段。例如:

  • FBillNo 对应 {{入库单号}}
  • FDate 对应 {{日期}}
  • FPrdOrgId 固定值 T04
  • FWorkshipIdH 通过查询获取 _findCollection find FWorkShopID_FName from ... where FBillNo={{生产订单号}}

这些映射关系确保了数据在传输过程中能够正确地转换和传递。

明细字段配置

明细字段是复杂数据结构中的重要部分,需要特别注意其子字段的配置。例如:

{
    ...
    "FEntity": {
        ...
        "children": [
            {
                ...
                {"field":"FMaterialId","label":"物料编码","type":"string","describe":"物料编码","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{items.成品编号}}"},
                {"field":"FFinishQty","label":"完成数量","type":"string","describe":"完成数量","value":"{{items.入库数量}}"},
                {"field":"FSrcBillNo","label":"源单编号","type":"string","describe":"源单编号","value":"{{items.生产订单号}}"},
                ...
            }
        ]
    }
}

这些子字段确保了每个明细项都能被正确地解析和处理。

其他请求参数

除了主要的数据字段外,还需要一些额外的请求参数来控制API行为,例如:

{
    ...
    {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID","value":"PRD_MORPT"},
    {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","describe":"提交并审核","value":"true"},
    {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"验证基础资料","value":"true"},
    {"field":"Operation","label":"执行的操作","type":"string","describe":"执行的操作","value":"Save"}
}

这些参数确保了数据在传输过程中能够自动提交和审核,提高了工作效率。

数据写入目标平台

最后一步是将转换后的数据通过POST请求写入金蝶云星空API接口。根据元数据配置,构建请求体并发送请求:

{
  ...
  // 构建完整的请求体
  // 发送POST请求至金蝶云星空API接口
}

通过这种方式,我们可以实现从源平台到目标平台的数据无缝对接,确保数据准确、高效地传输和处理。

以上就是利用轻易云数据集成平台进行ETL转换,并将数据写入金蝶云星空API接口的详细技术案例。通过合理配置元数据和请求参数,可以大大简化复杂的数据集成过程,提高系统间的数据交互效率。 钉钉与CRM系统接口开发配置

更多系统对接方案