吉客云-调拨出库--->YS-其他出库单-OK: 系统对接集成案例
在企业信息化系统不断迭代升级的背景下,实现不同业务系统间的数据无缝集成已成为关键挑战。本文将通过一个具体技术案例——“吉客云数据集成到用友BIP”,探讨如何高效、可靠地完成跨平台的数据流转和处理。此次分享的方案名称为:吉客云-调拨出库--->YS-其他出库单-OK。
该方案涉及两个主要操作环节:首先,从吉客云提取“调拨出库”数据,其次,使用转换后的数据在用友BIP中新建一条“其他出库单”。我们利用吉客云API erp.storage.goodsdocout.v2抓取原始数据,并调用用友BIP API /yonbip/scm/othoutrecord/single/save进行目标系统的数据写入。在此过程中,我们详细讨论了一系列技术要点和最佳实践,以确保整个集成过程的稳定性与高效性。
- 高吞吐量的数据写入能力:支持大量数据快速而准确地被写入到用友BIP中,这一点尤为重要,因为它直接影响了业务处理时效性。
 - 实时监控与告警机制:通过集中监控和告警系统,对每个任务状态进行实时跟踪,及时发现并处理潜在问题,提高了整体运维效率。
 - 自定义数据转换逻辑:为了适应具体业务需求和两端(吉客云与用友BIP)的数据格式差异,自定义转换逻辑是不可或缺的一环。
 - 异常处理与错误重试机制:实现了对接过程中异常情况的动态检测及自动重试功能,大大提升了任务执行成功率。
 - 批量操作支持:不仅保障了较大的吞吐量,还能以批次方式整合多条记录,从而减少接口调用次数,提高性能。
 
本技术案例将在后续部分进一步深入剖析上述各特性的实际应用,尤其是如何借助轻易云平台实现全生命周期管理,使得复杂的跨系统对接变得更加直观、高效。

调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据
在数据集成生命周期的第一步中,调用源系统接口获取原始数据是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用吉客云的erp.storage.goodsdocout.v2接口,获取并加工出库单数据。
接口调用配置
首先,我们需要配置接口调用的元数据。根据提供的元数据配置,以下是关键字段及其含义:
- api: 
erp.storage.goodsdocout.v2 - method: 
POST - number: 
goodsdocNo - id: 
recId - pagination: 每页50条记录
 - idCheck: 
true 
请求参数部分:
[
  {"field":"pageIndex","label":"分页页码","type":"string"},
  {"field":"pageSize","label":"分页页数","type":"string","value":"50"},
  {"field":"goodsDocNo","label":"出库单号","type":"string"},
  {"field":"gmtModifiedStart","label":"修改时间的起始时间","type":"string","value":"_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')"},
  {"field":"gmtModifiedEnd","label":"修改时间的结束时间","type":"string","value":"_function from_unixtime(({CURRENT_TIME}),'%Y-%m-%d %H:%i:%s')"},
  {"field":"startDate","label":"创建时间的起始时间","type":"datetime"},
  {"field":"endDate","label":"创建时间的结束时间","type":"datetime"},
  {"field":"inouttype","label":"出库类型","type":"string","describe": "201-销售出库 202调拨出库 ...", "value": "202"},
  {"field": "warehouseCode", "label": "仓库编号", "type": "string"}
]
请求参数解析
- 分页参数:
pageIndex和pageSize用于控制分页,每次请求获取50条记录。 - 时间参数:
gmtModifiedStart和gmtModifiedEnd用于过滤修改时间在特定范围内的数据。这里使用了函数_function from_unixtime()将UNIX时间戳转换为标准日期格式。 - 出库类型:固定值为“202”,表示调拨出库。
 - 其他可选参数:如仓库编号、出库单号等,可以根据具体需求进行配置。
 
数据请求与清洗
在完成元数据配置后,通过轻易云平台发起API请求。以下是一个示例请求体:
{
  "pageIndex": "1",
  "pageSize": "50",
  "gmtModifiedStart": "_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')",
  "gmtModifiedEnd": "_function from_unixtime(({CURRENT_TIME}),'%Y-%m-%d %H:%i:%s')",
  "inouttype": "202"
}
返回的数据包含多个字段,其中我们需要特别关注以下几个关键字段:
recId: 唯一标识goodsdocNo: 出库单号billNo: 上游单据号inOutDate: 出入库日期warehouseCode: 仓库编号goodsDocDetailList: 出库单明细列表
数据清洗与转换
获取到原始数据后,需要对其进行清洗和转换,以便后续处理。主要包括以下步骤:
- 字段筛选与重命名:根据业务需求选择需要的字段,并对其进行重命名。例如,将
goodsdocNo重命名为outboundOrderNo。 - 数据格式转换:将日期格式统一转换为标准格式,确保一致性。
 - 异常值处理:检查并处理空值、重复值或异常值,确保数据质量。
 
示例代码(伪代码):
def clean_data(raw_data):
    cleaned_data = []
    for record in raw_data:
        cleaned_record = {
            'outboundOrderNo': record['goodsdocNo'],
            'orderDate': convert_date(record['inOutDate']),
            'warehouseCode': record['warehouseCode'],
            # 更多字段...
        }
        cleaned_data.append(cleaned_record)
    return cleaned_data
def convert_date(date_str):
    # 日期格式转换逻辑
    return formatted_date_str
数据写入目标系统
完成数据清洗后,将其写入目标系统。在轻易云平台中,可以通过配置相应的数据写入接口实现这一过程。通常包括以下步骤:
- 配置目标系统API接口信息。
 - 映射清洗后的字段到目标系统对应字段。
 - 执行写入操作,并监控写入状态。
 
以上就是通过轻易云平台调用吉客云接口获取并加工出库单数据的详细技术方案。在实际应用中,可以根据具体业务需求调整和优化上述流程,以实现更高效的数据集成。

轻易云数据集成平台:将吉客云调拨出库数据转换并写入用友BIP
在轻易云数据集成平台的生命周期中,数据转换与写入是关键步骤之一。本文将详细探讨如何将吉客云的调拨出库数据通过ETL转换,最终写入用友BIP API接口。
数据请求与清洗
首先,从吉客云获取调拨出库的数据。假设我们已经完成了数据请求与清洗阶段,得到了结构化的数据。接下来,我们需要将这些数据进行ETL转换,以符合用友BIP API接口的要求。
数据转换与写入
用友BIP API接口的元数据配置如下:
{
  "api": "/yonbip/scm/othoutrecord/single/save",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {"field":"code","label":"单据编号","type":"string","describe":"以系统编码规则配置为准,系统设置为手工编号时必输,系统设置为自动编号时非必输;更新操作时必填    示例:QTCK0000001","value":"{goodsdocNo}"},
    {"field":"org","label":"库存组织","type":"string","describe":"传入id或code    示例:wzyqzn","value":"{warehouseCode}"},
    {"field":"accountOrg","label":"会计主体","type":"string","describe":"传入id或code    示例:wzyqzn","value":"{warehouseCode}"},
    {"field":"vouchdate","label":"单据日期","type":"string","describe":"日期格式:yyyy-MM-dd    示例:2021-03-05","value":"{inOutDate}"},
    {"field":"bustype","label":"交易类型","type":"string","describe":"传入id或code    示例:A10001","value":"JKY001"},
    {"field":"warehouse","label":"仓库","type":"string","describe":"传入id或code    示例:ck01","value":"{warehouseCode}"},
    {"field":"department","label":"部门","type":"string","describe":"传入id或code    示例:dept01"},
    {"field":"operator","label":"业务员","type":"string","describe":"传入id或code    示例:operator_01"},
    {"field":"memo","label":"备注","type": "string", "describe": "示例:单子备注", "value": "{goodsdocNo}"},
    {"field": "_status", "label": "操作标识", "type": "string", "describe": "Insert:新增、Update:更新 示例:Insert", "value": "Insert"},
    {
      "field": "othOutRecords",
      "label": "其他出库单子表",
      "type": "array",
      "describe": "",
      "value": "goodsDocDetailList",
      "children":[
        {"field": "product", "label": "物料", "type": "string",  describe: "", value: "{goodsNo}"},
        {"field": "_status",  label: "", type: "", describe: "", value: ""}
      ]
     }
   ]
}
配置字段映射
在这个过程中,我们需要特别注意字段的映射和转换。例如:
code对应吉客云中的goodsdocNoorg和accountOrg对应warehouseCodevouchdate对应inOutDatebustype固定值为JKY001- 子表字段 
othOutRecords中的product对应goodsNo 
此外,还需要处理一些复杂的逻辑,如批次号和生产日期等。以下是具体实现步骤:
- 
主表字段映射:
- 将吉客云中的单据编号、库存组织、会计主体等字段映射到用友BIP API对应字段。
 - 确保日期格式符合API要求,例如将 
inOutDate转换为yyyy-MM-dd格式。 
 - 
子表字段映射:
- 将物料信息、数量等从吉客云的子表中提取,并映射到用友BIP API的子表字段。
 - 特别注意批次号和生产日期等条件性字段,需要根据具体业务逻辑进行处理。
 
 - 
特殊逻辑处理:
- 批次号(batchno)和生产日期(producedate)等字段可能需要额外查询和计算。例如,可以通过 
_findCollection函数来查找相关信息。 
 - 批次号(batchno)和生产日期(producedate)等字段可能需要额外查询和计算。例如,可以通过 
 - 
构建API请求:
- 根据上述映射关系构建最终的API请求体,并确保所有必填字段都已正确填写。
 - 调用 
/yonbip/scm/othoutrecord/single/save接口,将转换后的数据提交到用友BIP系统中。 
 
实际代码示例
以下是一个简化的代码示例,用于展示如何实现上述步骤:
import requests
import json
# 模拟从吉客云获取的数据
source_data = {
  'goodsdocNo': 'QTCK0000001',
  'warehouseCode': 'wzyqzn',
  'inOutDate': '2021-03-05',
  'goodsDocDetailList': [
    {'goodsNo': 'PD0817000001', 'quantity': 10}
  ]
}
# 构建API请求体
request_body = {
  'code': source_data['goodsdocNo'],
  'org': source_data['warehouseCode'],
  'accountOrg': source_data['warehouseCode'],
  'vouchdate': source_data['inOutDate'],
  'bustype': 'JKY001',
  'warehouse': source_data['warehouseCode'],
  '_status': 'Insert',
  'othOutRecords': [
    {
      'product': detail['goodsNo'],
      '_status': 'Insert'
      # 更多子表字段映射...
    } for detail in source_data['goodsDocDetailList']
  ]
}
# 调用API接口
response = requests.post(
  url='https://api.yonyoucloud.com/yonbip/scm/othoutrecord/single/save',
  headers={'Content-Type': 'application/json'},
  data=json.dumps(request_body)
)
# 检查响应状态
if response.status_code == 200:
  print('Data successfully written to YonYou BIP')
else:
  print('Failed to write data:', response.text)
通过以上步骤,我们可以实现从吉客云到用友BIP的数据无缝对接,确保每个环节的数据准确性和一致性。
