本文档指导第三方系统对接追溯系统,实现目标:
1、追溯系统的物品包关联到病人;
2、第三方系统获取物品包相关追溯信息;
3、追溯系统获取相关病人信息和手术信息;
第三方系统(如手麻系统)开发一个器械包登记页面,用户在该页面扫描器械包条码后第三方系统通过WebAPI获取物品包详细信息,当用户提交保存时,第三方系统保存器械包相关信息的同时,应把手术相关信息提交给追溯系统。
1、追溯系统提供WebAPI;
2、数据提交方式:Post;
3、数据格式:JSON;
4、数据传输格式:utf-8;
5、对接地址:现场配置,如:http://192.168.x.x:12345/api.ashx;
post和返回格式相同;
字段 | 必填 | 说明 |
dateTime | 是 | 接口发生时间,格式:yyyy-MM-dd HH:mm:ss 如果提交的时间与服务器时间相差超过5分钟,返回失败 |
rndCode | 是 | 一个随机字符串,推荐使用GUID |
data | 是 | 报文正文,一个JSON,各函数另附说明 |
dataLng | 是 | 报文字符串长度,中文按1个长度计算,如果与data的长度不一致,返回失败 |
sign | 是 | 签名,一个md5结果大写字符串,参见签名说明 |
sign=md5(dateTime.ToString("yyyy-MM-dd HH:mm:ss") "|" rndCode "|" sKey "|" dataLng)
1、md5的时候把字符串按GBK2312的方式编码后参与计算;
2、sKey:现场分配;
参考代码(c#):
/// <summary>
/// 返回sign
/// </summary>
/// <param name="dtime">流水时间</param>
/// <param name="dataLng">流水正文长度</param>
/// <param name="sKey">系统分配的sKey</param>
/// <returns></returns>
public static string GetMD5(DateTime dtime, int dataLng,string sKey)
{
//获取需要加密的字符串
string encypStr = dtime.ToString("yyyy-MM-dd HH:mm:ss") "|" Guid.NewGuid().ToString("N") "|" sKey "|" dataLng;
//返回加密后的内容
return System.BitConverter.ToString((new MD5CryptoServiceProvider()).ComputeHash(Encoding.GetEncoding("GB2312").GetBytes(encypStr))).ToUpper();
}
{... ... "OK":true, ... ... }
成功时报文正文里必有:OK:true
其它内容参见各函数说明;
示例:
{
"dateTime": "2021-01-01 00:00:00",
"rndCode": "df4a4949-dabb-4b15-9038-0409ebf047ae",
"dataLng": "???",
"sign": "xxxx",
"data": {
"OK": true
...... (有可能不存在其它参数)
}
}
{... ..."OK":false,"Message":"错误说明", ... ...}
失败时报文正文里必有:OK:false 及 Message;
Message里表示失败原因,如果有用户界面,该失败原因可直接向用户显示;
示例:
{
"dateTime": "2021-01-01 00:00:00",
"rndCode": "df4a4949-dabb-4b15-9038-0409ebf047ae",
"dataLng": "???",
"sign": "xxxx",
"data": {
"OK": false,
"Message": "???"
}
}
传入参数
字段 | 必填 | 说明 |
menukey | 是 | login.webonekey |
username | 是 | 现场分配 |
nodecode | 是 | 现场分配 |
返回内容
字段 | 必填 | 说明 |
token | 是 | 一个字符串,小于或等于50字节,24小时内有效,作为其它函数的参数使用 |
rsUser | 是 | 登陆的操作员相关信息,不使用可忽略,如姓名 |
kehuid | 否 | 登陆的医院相关信息,不使用可忽略,如医院名称 |
rsKeshi | 否 | 登陆的科室相关信息,不使用可忽略,如科室名称 |
... | 其它还有一些可选信息,可忽略 |
示例:
{
"dateTime": "2021-01-01 00:00:00",
"rndCode": "df4a4949-dabb-4b15-9038-0409ebf047ae",
"dataLng": "???",
"sign": "xxxx",
"data": {
"menukey": "login.webonekey",
"username": "???",
"nodecode": "???"
}
}
实例:
{"data":"{\"menukey\":\"login.webonekey\",\"username\":\"621764\",\"nodecode\":\"741A2E10-5FF2-4C66-AE2F-00124887765D\"}","dateTime":"2021-09-02 16:10:49","rndCode":"31f5d485-71b1-44c3-ab29-9f376bcd62be","dataLng":99,"sign":"B380C2D9AD401A21989D406057218419"}
里面没有换行符,因显示的原因产生了换行
传入参数
字段 | 必填 | 说明 |
menukey | 是 | liuchen.yxwpInfoMoreFromCode |
gxtoken | 是 | 登陆时获取的token |
codeText | 是 | 扫描或输入的条码号 |
返回内容
字段 | 必填 | 说明 |
wpName | 是 | 物品包名称 |
wpCode | 是 | 条码号 |
sysID | 是 | 物品包系统编号,一个GUID字符串,用于登记病人信息时提交 |
mjDatetime | 是 | 灭菌日期时间 |
sxDatetime | 是 | 失效日期时间 |
devDayID | 是 | 灭菌器批次 |
baozhuangUser | 是 | 包装人 |
keshiName | 是 | 物品包所属科室名称 |
hebaoUser | 是 | 核包人 |
miejunUser | 是 | 灭菌人 |
wpTypeName | 是 | 无菌包类型 |
qx | 是 | 器械列表,见下说明 |
qx内容
字段 | 必填 | 说明 |
sysID | 是 | 器械系统编号,一个GUID字符串,如不使用,忽略 |
name | 是 | 器械名称 |
number | 是 | 器械数量 |
unit | 是 | 器械单位 |
typeName | 是 | 器械类型 |
示例:
{
"dateTime": "2021-01-01 00:00:00",
"rndCode": "df4a4949-dabb-4b15-9038-0409ebf047ae",
"dataLng": "???",
"sign": "xxxx",
"data": {
"menukey": "liuchen.yxwpInfoMoreFromCode",
"gxtoken": "???",
"codeText": "???"
}
}
实例:
{"data":"{\"menukey\":\"liuchen.yxwpInfoMoreFromCode\",\"gxtoken\":\"0cde985b-f954-44e4-bc53-230e83bb1630\",\"codeText\":\"312305\"}","dateTime":"2021-09-02 16:16:41","rndCode":"1bc489b3-52f3-447e-b3cd-b15550cb60de","dataLng":111,"sign":"A54A42E3EACF2ABC14F6AB5550F1AA5F"}
里面没有换行符,因显示的原因产生了换行
传入参数
字段 | 必填 | 说明 |
menukey | 是 | liuchen.yxwpInfoMoreFromCodeSet |
gxtoken | 是 | 登陆时获取的token |
sysID | 是 | 通过条码号换取物品包信息时获取的sysID,一个GUID字符串 |
brName | 是 | 病人姓名 |
brCode | 是 | 病人ID,如住院号、就诊卡号等,选其一 |
brLianLin | 是 | 病人年龄 |
brZhenJianHao | 是 | 病人证件号 |
ssJian | 是 | 手术间名称,如1号手术间 |
ssShi | 是 | 手术室科室名称,如门诊手术室、住院部手术室等 |
ssName | 是 | 手术名称 |
ssShiJian | 是 | 手术日期时间,yyyy-MM-dd HH:mm:ss 格式 |
ssYiShen | 是 | 手术医生姓名 |
ssMaZhui | 是 | 麻醉医生姓名 |
ssHuShi | 是 | 护士姓名 |
ssHuiShiXiShou | 是 | 洗手护士 |
ssHuShiXunHui | 是 | 巡回护士 |
ssHuiShiQiXie | 是 | 器械护士 |
部分字段如果医院没有特别的要求,可以填写空,但必须要有这些字段。
返回内容
字段 | 必填 | 说明 |
无必要字段 |
示例
{
"dateTime": "2021-01-01 00:00:00",
"rndCode": "df4a4949-dabb-4b15-9038-0409ebf047ae",
"dataLng": "???",
"sign": "xxxx",
"data": {
"menukey": "liuchen.yxwpInfoMoreFromCodeSet",
"sysID": "???",
"brName": "???",
......
}
}
实例:
{"data":"{\"menukey\":\"liuchen.yxwpInfoMoreFromCodeSet\",\"gxtoken\":\"0cde985b-f954-44e4-bc53-230e83bb1630\",\"sysID\":\"c11d0c85-30ab-4fdd-9518-004dec90f714\",\"brName\":\"张三\",\"brCode\":\"001\",\"brLianLin\":100,\"brZhenJianHao\":\"00000000000000\",\"ssJian\":\"1号手术间\",\"ssShi\":\"手术室\",\"ssName\":\"xx手术\",\"ssShiJian\":\"2000-01-01 09:01:01\",\"ssYiShen\":\"李四\",\"ssMaZhui\":\"王五\",\"ssHuShi\":\"张七\",\"ssHuiShiXiShou\":\"xx\",\"ssHuShiXunHui\":\"xx\",\"ssHuiShiQiXie\":\"xx\"}","dateTime":"2021-09-02 16:17:55","rndCode":"4b0b48f0-6381-42b6-aaad-ef138d61a424","dataLng":411,"sign":"0E4A5A31575B726E8E755E2FEE6125AD"} |
里面没有换行符,因显示的原因产生了换行 |
传入参数
字段 | 必填 | 说明 |
menukey | 是 | liuchen.liuchenYXWPChangeSave |
gxtoken | 是 | 登陆时获取的token |
idList | 是 | 通过条码号换取物品包信息时获取的sysID,一个GUID字符串。可以一次性提交多个物品包,中间用英文逗号分隔 |
changeType | 是 | ccdjsy 常量 |
newValueType | 是 | 取消类型,可以是常量:取消登记使用 |
newValueMemo | 是 | 摘要,可以是常量:空字符串,但必须要有这个项目 |
返回内容
字段 | 必填 | 说明 |
无必要字段 |
示例
{
"dateTime": "2021-01-01 00:00:00",
"rndCode": "df4a4949-dabb-4b15-9038-0409ebf047ae",
"dataLng": "???",
"sign": "xxxx",
"data": {
"menukey": "liuchen.liuchenYXWPChangeSave",
"idList": "???",
"changeType": "???",
"newValueType": "???",
"newValueMemo": "",
......
}
}