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
定义了两个主要参数:limit
和 offset
。
limit
: 用于限制返回记录数,默认值为100。offset
: 用于指定查询起始位置,默认值为0。
这些参数在实际执行时会替换掉 SQL 查询中的占位符 :limit
和 :offset
。
数据加工
在这个阶段,我们不仅仅是简单地提取数据,还对其进行了初步加工。例如:
- 使用
CONCAT('RKBLP_',a.id)
为每条记录生成唯一的入库单号。 - 使用子查询计算工时,并将其转换为小时单位。
这些操作确保了我们从源系统获取的数据已经过初步清洗和处理,为后续的数据转换与写入阶段奠定了基础。
实际应用案例
假设我们需要从MySQL数据库中提取不合格品生产汇报单新增的数据,并限制返回记录数为50,偏移量为10。我们可以这样配置请求:
{
main_params: {
limit: 50,
offset:10
},
main_sql: "...(如上所示)"
}
通过这种方式,我们能够灵活地控制每次请求的数据量和起始位置,从而实现高效的数据集成。
总结来说,通过合理配置元数据,我们可以高效地调用MySQL接口获取并加工数据。这一步骤不仅是整个数据集成过程的重要组成部分,也是确保后续处理顺利进行的基础。
轻易云数据集成平台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接口的详细技术案例。通过合理配置元数据和请求参数,可以大大简化复杂的数据集成过程,提高系统间的数据交互效率。