本田Honda EDI项目案例:非EDI标准的数据格式转换与传输

近期知行帮助东风本田Honda的供应商E公司成功实施EDI项目,与以往采用X12、EDIFACT等EDI标准的项目不同,Honda向其供应商提供API接口,以JSON的格式传输库存信息以及生产计划。

EDI需求概览

Honda提供公开的WSRM系统供应商API接口,主要包含三种接口:

1.库存信息

供应商库存接口,每日库存结余不再变化时发送,建议发送时间(如20:00-23:59)。

方向:供应商发送给Honda

接口文档所含信息包括:测试环境地址、请求信息(字段信息以及描述、字段类型、请求格式)以及响应信息(响应结果以及响应格式)。这里需要注意,result 返回结果如果是1,则表示成功;如果是0,则表示失败,会返回错误信息。示例如下:

{"result": "1","message": ""
}
2.生产计划

供应商生产计划接口,当日及未来生产计划变化时发送,默认覆盖上一次,发送时间(00:00-23:59)。

方向:供应商发送给Honda。

接口文档所含信息包括:测试环境地址、请求信息(字段信息以及描述、字段类型、请求格式)以及响应信息(响应结果以及响应格式)。这里需要注意,result 返回结果如果是1,则表示成功;如果是0,则表示失败,会返回错误信息。示例如下:

{"result": "1","message": ""
}
3.生产计划数据查询

供应商库存生产计划接口数据查询,查询已发送的数据是否被接收。方向:Honda发送给供应商,这个功能不是必须要做的,供应商可以根据实际情况选择是否收这个接口数据。

扩展阅读:Honda API 介绍文档

实施方案

针对以上需求,知行的项目经理与E公司的业务以及IT人员沟通后,最终决定采用数据库+API方案。

E公司根据Honda提供的接口字段文档,从本地的业务系统中提出对应字段并存放至一张专用于存放Honda库存信息/生产计划的数据库表中。知行之桥EDI系统将会从指定的数据库表中获取数据进行下一步的格式转换,并自动调用Honda的提供的两个接口,将数据推送给Honda。

基于知行之桥EDI系统对接 Honda EDI

实现与Honda 的EDI对接需要在知行之桥EDI系统中搭建如下所示的工作流:

Honda_EDI_case1.png

为了满足Honda需求,需要使用到11个端口(即上图中的方框,一个方框代表一个端口,各自封装了包括连接数据库、文件格式转换以及接口调用等不同的功能),其中2个Branch端口为免费端口,其余9个端口为付费端口。

本项目主要传输两种类型的数据:库存信息以及生产计划,在EDI系统中需要将这两种单据分开处理,并调用不同的接口将数据提供给Honda。

端口及功能

SQL Server端口:负责从指定数据库表中获取数据到EDI系统,选择的操作为 Select。
Batch Merge端口:负责合并数据。从E公司业务系统抓取的数据中,可能会涉及到多个零件,这时一张表中可能会包含多条数据,需要通过Batch Merge端口进行合并,呈现在接口中,便是1条信息,其中包含了多个零件的数据。
XML Map端口:负责实现源文件和目标文件的格式转换。这里主要实现从E公司抓取的数据(通过SQL Server端口已转换为XML格式)到Honda需要的数据(先转换为XML格式)之间的映射处理。
JSON端口:实现XML与JSON之间的格式转换,无需代码。
REST端口:作为REST API中的客户端,对服务器发起操作请求。
Script端口:检查数据是否推送成功,这个端口可以写一些自定义的脚本语言。

Honda_EDI_case2.png

在Script端口的设置选项卡下,将 操作 设置为 Legacy。在 脚本 处添加如下代码:

<rsb:set attr="jsonIn.uri" value="[Filepath]"/>
<rsb:set attr="jsonIn.jsonpath" value="/json"/><rsb:call op="jsonDOMSearch" in="jsonIn"><rsb:set attr="message.code" value="[jsonpath('result')]"/><rsb:set attr="message.desc" value="[jsonpath('message')]"/></rsb:call>
<rsb:notequals attr="message.code" value="1"><rsb:throw code="noMatached" desc="[message.code]:[message.desc]"/>
</rsb:notequals>

根据用户需要,还可以在Script端口后再添加一个EmailSend端口,用于将推送成功的信息通过邮件发送给指定收件人。

测试流程
API接口连接测试

根据接口文档构造json格式的接口数据,推送至接口,根据返回的参数判断是否成功,result是1表示成功,是0表示失败,失败原因可参考返回的错误信息
常见错误:加密参数不对、时间戳超时(1分钟内有效)

数据库连接测试

根据客户提供的数据库信息配置数据库连接,获取数据,此项目使用select查询功能

业务测试

让客户在数据库表中写入测试数据,通过API接口推送

结果验证:

1.result是1表示成功,是0表示失败
2.通过查询接口查询已推送的数据

项目回顾
1.Honda接口调用的加密要求

Honda要求在sign也就是签名中需要使用用户名+时间戳+经MD5多次加密的密码。

知行之桥EDI系统支持MD5加密,需要在XMLMap端口中,编写如下脚本来实现:

<arc:set attr="supply.timestamp" value="[_|now(yyyyMMddHHmmss)]" />
<arc:set attr="supply.string" value="user_name=namecode&timestamp=[supply.timestamp]&password=0123456789" />
<arc:set attr="supply.sign" value="[supply.string | md5hash(false)|tolower()]" />

需要注意,这里的时间戳有时间要求,每个单据都有自己的时间戳,即XMLMap端口接收数据的时间,从生成时间戳到推送数据,需要限时1分钟。在测试流程中,由于借助Postman工具进行测试,并没有直接调用接口,会存在一定的时间延迟。项目上线后,切换至生产接口,每条数据推送的时间基本可以控制在30S内,每次推送30-40个物料。

2.测试阶段的辅助验证

上文我们有提到,库存信息和生产计划的两个接口都能够通过返回结果来判断是否推送成功,如果是1,则表示成功;如果是0,则表示失败,会返回错误信息。

但Honda提供了三个API接口,还有一个接口主要用于供应商库存生产计划接口数据查询,查询已发送的数据是否被接收。在测试阶段,我们可以通过这个接口,可以进行双重验证。

以上便是Honda EDI项目的全部内容了,如果您希望了解更多Honda的对接信息,或者有关EDI对接的相关信息,欢迎交流。

阅读原文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3281068.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

如何通过前端表格控件实现自动化报表?

背景 最近伙伴客户的项目经理遇见一个问题&#xff0c;他们在给甲方做自动化报表工具&#xff0c;项目已经基本做好了&#xff0c;但拿给最终甲方&#xff0c;业务人员不太买账&#xff0c;项目经理为此也是天天抓狂&#xff0c;没有想到合适的应对方案。 现阶段主要面临的问…

深入理解 go context

打个广告&#xff1a;欢迎关注我的微信公众号&#xff0c;在这里您将获取更全面、更新颖的文章&#xff01; 原文链接&#xff1a;深入理解 go context 欢迎点赞关注 context 介绍 context 是 Go 语言中用于处理并发操作的一个重要概念。context也被称作上下文&#xff0c;主要…

Mirror学习笔记(二) 传输协议

文章目录 一、KCP传输协议二、Telepathy 传输协议三、WebSockets传输协议四、多路复用传输&#xff1a;五、延迟模拟传输&#xff1a;六、Ignorance协议七、LiteNetLib协议八、FizzSteamworks协议九、FizzyFacepunch协议十、加密协议十一、Edgegap协议 一、KCP传输协议 KCP是M…

热力图大揭秘!Matplotlib教你如何画出让数据‘火辣辣‘的激情图!

1. 引言 嘿&#xff0c;小伙伴们&#xff01;今天咱们来点不一样的&#xff0c;走进Matplotlib的神奇世界&#xff0c;一起绘制那让人热血沸腾的热力图&#xff01;别误会&#xff0c;这可不是什么天气预报图&#xff0c;而是让数据“火辣辣”展现自我的秘密武器。想象一下&am…

Adobe XD安装破解

文章目录 下载链接安装教程打开软件 下载链接 通过百度网盘分享的文件&#xff1a;Adobe XD 57.rar 链接&#xff1a;https://pan.baidu.com/s/14v_8EeKSyAtZoXT2nofCtQ 提取码&#xff1a;6qxx 安装教程 以管理员身份运行 安装完成后点击关闭 稍微等待一会&#xff0c;不…

linux编写shell脚本字段部署redis6.x版本,docker使用shell脚本一键自动部署redis

1.先创建部署脚本 touch redis.sh2.粘贴部署脚本内容到redis.sh echo "在线安装redis开始...." docker pull redis:6.2.1 sudo mkdir -p /home/admin/redis/{data,conf} sudo touch /home/admin/redis/conf/redis.conf echo " #注释掉这部分&#xff0c;这是限…

Yolov5-v7.0使用CBAM注意力机制记录

Yolov5-v7.0使用CBAM注意力机制记录 一、CBAM实现代码 在model/common.py文件中加入如下代码&#xff1a; #############CBAM注意力机制############## class ChannelAttention(nn.Module):def __init__(self, in_planes, ratio16):super(ChannelAttention, self).__init__(…

力扣高频SQL 50题(基础版)第三十三题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第三十三题610.判断三角形题目说明实现过程准备数据实现方式结果截图 力扣高频SQL 50题&#xff08;基础版&#xff09;第三十三题 610.判断三角形 题目说明 表: Triangle ----------------- | Column Name | Typ…

pytorch学习笔记2 创建tensor

1 从numpy导入 anp.array([2,3.3]) torch.from_numpy(a)bnp.ones([2,3]) torch.from_numpy(b)2从list导入 torch.tensor([2.,3.2]) torch.FloatTensor([2.,3.2]) torch.tensor([[2.,3.2],[1.,22.3]]) 3 未初始化的随机数据 Torch.empty()Torch.FloatTensor&#xff08;d1,d…

【MySQL】索引 【下】{聚簇索引VS非聚簇索引/创建主键索引/全文索引的创建/索引创建原则}

文章目录 1.聚簇索引 VS 非聚簇索引经典问题 2.索引操作创建主键索引唯一索引的创建普通索引的创建全文索引的创建查询索引删除索引索引创建原则 1.聚簇索引 VS 非聚簇索引 之前介绍的将所有的数据都放在叶子节点的这种存储引擎对应的就是 InnoDB 默认存储表数据的存储结构。 …

MySQL从jsonarray获取某个字段的所有数据

表结构。表里的order_goods_info_vo_list是jsonarray字段 CREATE TABLE pdd_charge_back_bantuo (id int(11) NOT NULL AUTO_INCREMENT,shopname varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 店铺名,charge_back_sn varchar(64) COLLATE utf8mb4_bin DEFAULT NULL …

2000-2023年上市公司财务困境数据Oscore模型(含原始数据+计算结果)

2000-2023年上市公司财务困境数据Oscore模型&#xff08;含原始数据计算结果&#xff09; 1、2000-2023年 2、指标&#xff1a;证券代码、证券简称、统计截止日期、是否发生ST或*ST或PT、是否发生暂停上市、行业代码、行业名称、上市日期、总资产&#xff08;元&#xff09;、…

Docker Desktop安装(通俗易懂)

1、官网 https://www.docker.com/products/docker-desktop/ 2、阿里云镜像 docker-toolbox-windows-docker-for-windows安装包下载_开源镜像站-阿里云 1. 双击安装文件勾选选项 意思就是&#xff1a; Use WSL 2 instead of Hyper-V (recommended) : 启用虚拟化&#xff0c;…

IDEA对线上项目远程debug

1、在启动脚本上添加以下配置内容 -agentlib:jdwptransportdt_socket,servery,suspendn,address*:5005 nohup java -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 -jar test.jar > misc.out & 2、在IDEA中进行配置 &#xff08;1&#xff09;选择远程…

红外激光模组如何升级为现代科技的璀璨明珠

在日新月异的科技领域中&#xff0c;红外激光模组以其独特的应用价值和卓越的性能&#xff0c;成为了众多行业的宠儿。从通信、测距、监控到医疗&#xff0c;红外激光模组以其广泛的应用场景&#xff0c;不断推动着现代科技的进步与发展。接下来我们就跟着鑫优威一起来了解一下…

详解Qt 之QByteArray

文章目录 详解Qt之QByteArray前言QByteArray概念作用为什么需要 QByteArrayQByteArray 的主要函数和成员函数列表 示例代码示例 1&#xff1a;字节数组的基本操作示例 2&#xff1a;数据编码和解码示例 3&#xff1a;字节数组的字符串操作 更多用法... 总结 详解Qt之QByteArray…

vue3+fetch请求+接收到流式的markdown数据+一边gpt打字机式输出内容,一边解析markdown语法+highlight.js实现代码高亮

这个问题终于解决了&#xff01;好开心。 先看最终效果&#xff1a; video_20240724_141543_edit 项目背景&#xff1a;vue3 场景&#xff1a;像gpt一样可以对话&#xff0c;当用户发送问题之后&#xff0c;ai回复&#xff0c;ai是一部分一部分回复&#xff0c;像打印机式输出…

微服务-服务拆分-服务远程调用

查询订单demo 通过Bean的方式将RestTemplate注册为Spring的一个对象&#xff0c;即注入Spring容器&#xff08;要写在配置类中&#xff0c;启动类本身就是配置类&#xff09;。然后在任何地方都可以注入该对象使用。 Eureka注册中心 Eureka服务搭建 Eureka客户端注册 配置服务…

Java与模式及其应用场景知识点分享(电子版)

前言 Java 编程语言自1995年问世以来&#xff0c;其成功好像任何编程语言都无法媲美。生逢其时(互联网的兴起)固然是一方面的原因&#xff0c;而Java吸收总结了前人的经验教训&#xff0c;反映了最新技术(the state ofthe art)&#xff0c;对其受到欢迎和采用&#xff0c;恐怕…

如何在基于滤波框架的绝对定位系统中融合相对观测

文章目录 1 LIO、VIO propagation来代替IMU propagation2 TRO paper: Stochastic Cloning Kalman filter【有待填坑】 以无人驾驶定位系统为例&#xff0c;融合gnss&#xff0c;imu&#xff0c;轮速&#xff0c;camera LaneMatch(frame to map)&#xff0c;lidar scan match(fr…