ETL转换技术在数据集成中的应用:精诚ERP案例

  • 轻易云集成顾问-贺强

管易云·奇门数据集成到精诚ERP技术案例分享:管易发货单对接

在复杂的电商环境中,如何确保迅速且准确的数据同步是一个关键问题。本次案例侧重于将管易云·奇门平台上的发货单数据高效集成到精诚ERP系统的一体化解决方案——管易发货单对接。在这个过程中,我们充分利用了轻易云数据集成平台的强大功能,实现了从API调用、数据转换到异常处理的一系列步骤。

API接口调用与定时抓取

首先,我们通过gy.erp.trade.deliverys.get API接口,定时可靠地抓取管易云·奇门提供的发货单数据。这一过程需要考虑如何确保不漏单,因此我们设计了一套机制来跟踪每一批次的数据获取状态,并采用分页抓取以应对大量订单情况下可能出现的限流问题。

数据批量写入和格式转换

面对大量要写入的数据,我们使用API ExtApi_RecvExSheet 将这些信息高效地传递给精诚ERP。同时,为了实现无缝衔接,必须进行必要的数据格式转换。两者之间存在一些字段和类型不一致的问题,通过自定义映射规则,这些差异得到了有效解决,使得最终写入能够符合精诚ERP的要求。

实时监控与日志记录

整个过程中,不仅需要确保操作透明,还需实时监控每个环节并记录日志。这样可以在发生错误或异常情况时迅速反应,对症下药。例如,当遇到网络波动导致部分数据丢失或者重复提交时,这套体系会自动触发重试机制,从而提高整体流程的可靠性。

异常处理及错误重试机制

为了保证系统对接过程中的稳定性,还特别设计了一套完善的异常处理和错误重试机制。当某一步骤失败后,该系统会自动进行多次尝试,同时通过详细日志记录帮助开发人员快速定位并修复潜在问题,从而将影响降至最低。

此次整合实例展示了如何借助先进的平台工具,将分散且庞大的电商订单数据,高效地融入企业内部管理系统中,实现全链条的信息贯通与智能化运作,提高业务响应速度,并减少人为干预所带来的误差与延迟。 用友与CRM系统接口开发配置

调用管易云·奇门接口gy.erp.trade.deliverys.get获取并加工数据

在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用管易云·奇门接口gy.erp.trade.deliverys.get,并对获取的数据进行加工处理。

接口调用配置

首先,我们需要配置API接口的元数据,以便正确地请求和处理数据。以下是关键的元数据配置:

{
  "api": "gy.erp.trade.deliverys.get",
  "method": "POST",
  "number": "code",
  "id": "code",
  "pagination": {
    "pageSize": 50
  },
  "beatFlat": ["details"],
  "formatResponse": [
    {
      "old": "delivery_statusInfo.delivery_date",
      "new": "delivery_date_new",
      "format": "date"
    }
  ],
  "idCheck": true,
  "omissionRemedy": {
    "crontab": "2 13,14,18,20,23 * * *",
    "takeOverRequest": [
      {
        "field": "start_delivery_date",
        "label": "发货时间结束段",
        "type": "string",
        "value": "_function FROM_UNIXTIME({LAST_SYNC_TIME}-43200 ,'%Y-%m-%d %H:%i:%s' )"
      }
    ]
  },
  "request": [
    {
      "field": "start_create",
      "label": "创建时间开始段",
      "type": "datetime"
    },
    {
      "field": "end_create",
      "label": "创建时间结束段",
      "type": "datetime"
    },
    {
      "field": "start_delivery_date",
      ...

请求参数设置

在请求参数中,我们需要设置多个字段来确保获取到所需的数据。这些字段包括创建时间、发货时间、修改时间等。特别地,我们使用了动态变量{{LAST_SYNC_TIME|datetime}}{{CURRENT_TIME|datetime}}来自动填充时间范围。

{
  ...
  {
    ...
    {
      ...
      {
        ...
        {
          ...
          {
            ...
            {
              ...
              {
                ...
                {
                  ...
                  {
                    ...
                    {
                      ...
                      {
                        ...
                        {
                          ... 
                          {"field":"start_delivery_date","label":"发货时间开始段","type":"datetime","value":"{{LAST_SYNC_TIME|datetime}}"},
                          {"field":"end_delivery_date","label":"发货时间结束段","type":"datetime","value":"{{CURRENT_TIME|datetime}}"},
                          {"field":"start_modify_date","label":"修改时间开始段","type":"datetime"},
                          {"field":"end_modify_date","label":"修改时间结束段","type":"datetime"},
                          {"field":"del","label":"返回是否作废的单据","type":"int"},
                          {"field":"delivery","label":"发货状态","type":"int","value":"1"},
                          {"field":"code","label":"单据编号","type":"string"}
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

数据分页与处理

为了高效地处理大量数据,我们采用分页机制,每页大小设置为50条记录。同时,为了简化数据结构,我们将嵌套的details字段拍平(beatFlat)。

{
  ...
  {"pagination":{"pageSize":50}},
  {"beatFlat":["details"]}
}

数据格式转换

在获取到原始数据后,需要对部分字段进行格式转换。例如,将delivery_statusInfo.delivery_date字段转换为新的日期格式,并重命名为delivery_date_new

{
  ...
  {"formatResponse":[{"old":"delivery_statusInfo.delivery_date","new":"delivery_date_new","format":"date"}]}
}

数据缺失补救

为了确保数据完整性,我们配置了定时任务(crontab)来定期检查和补救可能遗漏的数据。在这里,我们设置了每天多次执行的计划任务,并通过计算上次同步时间来确定缺失的数据范围。

{
  ...
  {"omissionRemedy":{"crontab":"2 13,14,18,20,23 * * *",...}}
}

以上配置确保了我们能够高效、准确地从管易云·奇门接口获取发货单数据,并进行必要的加工处理。这一步骤是整个数据集成生命周期中的关键环节,为后续的数据转换与写入打下坚实基础。 系统集成平台API接口配置

使用轻易云数据集成平台进行ETL转换并写入精诚ERPAPI接口的技术案例

在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL(提取、转换、加载)转换,使其符合目标平台精诚ERPAPI接口所能够接收的格式,并最终写入目标平台。以下是具体的技术实现过程。

元数据配置解析

我们使用以下元数据配置来完成数据转换和写入操作:

{
  "api": "ExtApi_RecvExSheet",
  "method": "POST",
  "sdk": "\\Adapter\\Customer\\JCERP\\SDK\\JCERPSDK",
  "errorMsgKey": "ResultMsg",
  "idCheck": true,
  "groupCalculate": {
    "headerGroup": ["shop_code", "shop_name", "delivery_date_new"],
    "bodyGroup": ["details_item_code"],
    "bodyName": "details",
    "targetBodyName": "Items",
    "bodyMaxLine": 500,
    "calculate": {
      "details_qty": "$sum",
      "details_amount_after": "$sum"
    }
  },
  "request": [
    {"label":"SheetID","field":"SheetID","type":"string","value":"_function REPLACE('{shop_code}{delivery_date_new}0','-','')"},
    {"label":"SheetDate","field":"SheetDate","type":"string","value":"{delivery_date_new}"},
    {"label":"CustomerCode","field":"CustomerCode","type":"string","value":"{shop_code}"},
    {"label":"CustomerName","field":"CustomerName","type":"string","value":"{shop_name}"},
    {"label":"RedBlue","field":"RedBlue","type":"string","value":"false"},
    {"label":"Qua","field":"Qua","type":"string"},
    {"label":"Amo","field":"Amo","type":"string"},
    {"label":"Remark","field":"Remark","type":"string"},
    {
      "label": "Items",
      "field": "Items",
      "type": "array",
      "value": "details",
      "children": [
        {"parent": "Items", "label": "Qua", "field": "Qua", "type": "string", 
            "value": "{{details.details_qty}}"},
        {"parent": "Items", 
            "label": 
            "GoodsID", 
            "field":
                "GoodsID", 
            "type":
                "string", 
            "value":
                "{{details.details_item_code}}"
        },
        {"parent":
                "Items", 
            "label":
                "Price", 
            "field":
                "Price", 
            "type":
                "string", 
            "value":
                "_function round({{details.details_amount_after}}\/{{details.details_qty}},6)"
        },
        {"parent":
                "Items", 
            "label":
                "Amo", 
            "field":
                "Amo", 
            "type":
                "string", 
            "value":
                "{{details.details_amount_after}}"
        },
        {"parent":
                "Items", 
            "label":
                "Remark", 
            "field":
                "Remark", 
            "type":
                "string"
        }
      ]
    }
  ]
}

数据转换与写入流程

  1. 请求参数组装

    • SheetID:通过REPLACE函数将shop_codedelivery_date_new拼接,并去掉其中的-符号。
    • SheetDate:直接使用delivery_date_new字段。
    • CustomerCodeCustomerName:分别映射为shop_codeshop_name
    • RedBlue:固定值为false
    • QuaAmo:由具体业务逻辑决定,通常是从源数据中提取或计算得出。
  2. 子项数组处理(Items)

    • 每个子项包含五个字段:Qua, GoodsID, Price, Amo, Remark。
    • Qua:映射为每个详情项中的details_qty
    • GoodsID:映射为每个详情项中的details_item_code
    • Price:通过自定义函数计算,即用每个详情项的总金额除以数量,保留六位小数。
    • Amo:直接映射为每个详情项中的总金额,即details_amount_after
  3. 分组与聚合计算

    • 对于头部信息,根据字段 shop_code, shop_name, delivery_date_new 分组。
    • 对于子项信息,根据字段 details_item_code 分组,并对数量和金额进行求和操作。
  4. API调用与错误处理

    • 使用POST方法调用精诚ERP的API接口 ExtApi_RecvExSheet,通过SDK进行封装调用。
    • 错误信息通过 ResultMsg 字段返回,需在调用后进行检查和处理。

实践案例

假设我们有如下源数据:

{
  "shop_code": "S001",
  "shop_name": "Shop A",
  "delivery_date_new": "2023-10-01",
  ...
  // details array
  ...
}

经过ETL转换后的请求体将会是:

{
  ...
  // Header fields
  ...
  {
    ...
    // Items array
    ...
    [
      {
        ...
        // Individual item fields
        ...
      }
      ...
      // Other items
      ...
    ]
  }
}

通过上述过程,我们可以确保源平台的数据经过ETL转换后,能够准确无误地写入到精诚ERP系统中,从而实现系统间的数据无缝对接。 轻易云数据集成平台金蝶集成接口配置

更多系统对接方案