- API调用说明
- 心电监测
- 胎心监测
- 血压监测
API调用说明
概述:
天使医生开放平台API为开发商提供了一组设备监测数据上传、查询、生成报告等接口。
目前已经开放的接口有胎心、心电API。
服务器地址 :mobile.tsys91.com:8081/monitor
请求流程:
天使医生API采用REST风格,对外暴露HTTP服务,开发者只需要将入参按规则封装好,发起HTTP请求即可,请求流程如下图:
请求说明
一、开发者登录天使医生开放平台,在开发配置菜单栏可以看到系统分配给开发者的businessId和appId,请保留好不要轻易告诉他人。
二、以批量查询胎心监测数据接口为例,封装查询参数
- {
- "createTime" : 1489460834000 ,
- "pageSize" : 10 ,
- "openUserId" : "11723" ,
- "businessId" : 3280429859997696 ,
- "pageNum" : 1 ,
- }
三、对查询参数的参数名称进行排序a-z,并按照url参数的形式拼装参数名和参数值如果参数值为空或为null不参与参数的拼装。
businessId=3280429859997696&createTime=1489460834000&openUserId=11723&pageNum=1&pageSize=10
四、签名规则
sign = md5(businessId + 查询参数 +appId)
sign = md5(3280429859997696businessId=3280429859997696&createTime=1489460834000&openUserId=11723&pageNum=1&pageSize=10CA44C48DE23346928C6AD4E0634E8D90)
五、封装请求API的参数
- {
- "sign" : "C80253C518F921AC6F06B4B4E8615A8C" ,
- "createTime" : 1489460834000 ,
- "pageSize" : 10 ,
- "openUserId" : "11723" ,
- "businessId" : 3280429859997696 ,
- "pageNum" : 1
- }
六、发起http请求
请求头部类型必须加入
Content-type: application/json
不通过返回
- {
- "msg" : 0 ,
- "msgbox" : "未查询到开发商信息!" ,
- "data" : null
- }
通过
- {
- "msg" : 1 ,
- "msgbox" : "查询胎心数据成功!" ,
- "data" : {
- "dataList" : [ { } ]
- "pageNum" : 1 ,
- "pageSize" : 10 ,
- "total" : 1 ,
- "pages" : 1
- }
- }
附上MD5加密方法参考示例:
- public static String getMd5Value(String sSecret) {
- String result = null
- try {
- MessageDigest bmd5 = MessageDigest . getInstance ("MD5")
- bmd5.update(sSecret.getBytes());
- StringBuffer buf = new StringBuffer();
- try {
- result = byte2hex(bmd5.digest(buf.toString().getBytes("UTF-8")));
- } catch (Exception e) {
- e.printStackTrace();
- }
- return result;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
心电监测
心电上传通知:
用户在开放平台 管理中心 >开发配置 填写了数据通知地址,当用户监测上传数据完成后,开发平台会向这个地址发送http post请求发送通知消息
消息格式
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
messageType | String | 是 | 消息类型 心电:ECG |
messageBox | String | 是 | 消息说明 |
data | Object | 是 | 上传心电数据的ID 类型Integer |
根据ID查询心电数据:
请求参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
id | Integer | 是 | 监测数据ID |
businessId | Long | 是 | 开发者ID |
sign | String | 是 | 开发者签名 |
API接口地址
POST /openapi/ecg/getBusinessEcgRecordById
返回参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
msg | Integer | 是 | 结果码1:成功 0:失败 |
msgbox | String | 是 | 错误或成功信息 |
data | Object | 是 | 返回结果 错误返回:null |
data对象说明
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
id | Integer | 是 | 数据ID |
seriesNumber | String | 是 | 设备序列号,益体康设备网关号 |
stisnormal | String | 是 | ST段 |
isarrhythmia | String | 是 | 心律 |
waveform | String | 是 | 波形质量 |
avrHeartrate | Double | 是 | 心率值 |
heartrate | String | 是 | 心率 状态 |
avrStvolt | Double | 否 | ST段平均电压 |
testTime | String | 是 | 测量时间 |
wholewave | String | 是 | 整体波形 |
image | Integer | 否 | 波形图像URL |
addTime | Date | 是 | 添加时间 |
businessId | Long | 是 | 开发者ID |
批量查询心电数据:
请求参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
seriesNumber | String | 否 | 设备序列号 |
businessId | Long | 是 | 开发者ID |
createTime | Long | 是 | 数据上传时间 |
sign | String | 是 | 参数签名 |
pageNum | Integer | 是 | 第几页 |
pageSize | Integer | 是 | 每页数据条数 |
API接口地址
POST /openapi/ecg/getBusinessEcgRecord
返回参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
msg | Integer | 是 | 结果码1:成功 0:失败 |
msgbox | String | 是 | 错误或成功信息 |
data | Object | 是 | 返回结果 错误返回:null |
data对象说明
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
pageNum | Integer | 是 | 当前页 |
pageSize | Integer | 是 | 每页条数 |
total | Long | 是 | 总条数 |
pages | Integer | 是 | 总页面数目 |
dataList | List Object | 是 | 数据集合,没有数据空集合 |
List中的对象说明
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
id | Integer | 是 | 数据ID |
seriesNumber | String | 是 | 设备序列号,益体康设备网关号 |
stisnormal | String | 是 | ST段 |
isarrhythmia | String | 是 | 心律 |
waveform | String | 是 | 波形质量 |
avrHeartrate | Double | 是 | 心率值 |
heartrate | String | 是 | 心率 状态 |
avrStvolt | Double | 否 | ST段平均电压 |
testTime | String | 是 | 测量时间 |
wholewave | String | 是 | 整体波形 |
image | Integer | 否 | 波形图像URL |
addTime | Date | 是 | 添加时间 |
businessId | Long | 是 | 开发者ID |
胎心监测
胎心上传通知
用户在开放平台 管理中心 >开发配置 填写了数据通知地址,当用户监测上传数据完成后,开发平台会向这个地址发送http post请求发送通知消息
消息格式
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
messageType | String | 是 | 消息类型 胎心:FETALHEART |
messageBox | String | 是 | 消息说明 |
data | Object | 是 | 上传胎心数据的ID 类型Integer |
根据ID查询胎心监测数据
请求参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
id | Integer | 是 | 监测数据ID |
businessId | Long | 是 | 开发者ID |
sign | String | 是 | 开发者签名 |
API接口地址
POST openapi/fetalrate/getBusinessFetalrateRecordById
返回参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
msg | Integer | 是 | 结果码1:成功 0:失败 |
msgbox | String | 是 | 错误或成功信息 |
data | Object | 是 | 返回结果 错误返回:null |
data对象说明
id | Integer | 是 | 数据ID |
recordFiles | String | 是 | 胎心记录文件URL |
addTime | Date | 是 | 添加时间 |
rawFiles | String | 是 | 胎心音频文件URL |
title | String | 是 | 标题 |
type | Integer | 是 | 心率类型:0:成人,1婴儿 |
averageRate | Double | 是 | 平均心率 |
fetalMoveTimes | Integer | 否 | 胎动次数 |
testTime | Integer | 是 | 胎心测试时长 |
uterusRecord | String | 否 | 宫缩值URL |
fetalMoveValue | String | 否 | 胎动时间值[{"time":"00:50"}] |
deviceMac | String | 否 | 测试仪器的mac地址 |
seriesNumber | String | 否 | 设备序列号 seriesNumber和deviceMac其中有一个必须有值 |
businessId | Long | 是 | 开发商ID |
openUserId | String | 否 | 开发者自己用户的ID |
批量查询胎心监测数据
请求参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
seriesNumber | String | 否 | 设备序列号 |
deviceMac | String | 否 | 设备序mac地址 |
openUserId | String | 否 | 开发者自己用户的ID |
businessId | Long | 是 | 开发者ID |
createTime | Long | 是 | 上传胎心时间 |
sign | String | 是 | 开发者签名 |
pageNum | Integer | 是 | 第几页 |
pageSize | Integer | 是 | 每页数据条数 |
API接口地址
POST /openapi/fetalrate/getBusinessFetalrateRecord
返回参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
msg | Integer | 是 | 结果码1:成功 0:失败 |
msgbox | String | 是 | 错误或成功信息 |
data | Object | 是 | 返回结果 错误返回:null |
data对象说明
pageNum | Integer | 是 | 当前页 |
pageSize | Integer | 是 | 每页条数 |
total | Long | 是 | 总条数 |
pages | Integer | 是 | 总页面数目 |
dataList | List Object | 是 | 数据集合,没有数据空集合 |
List中的对象说明
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
id | Integer | 是 | 数据ID |
recordFiles | String | 是 | 胎心记录文件URL |
addTime | Date | 是 | 添加时间 |
rawFiles | String | 是 | 胎心音频文件URL |
title | String | 是 | 标题 |
type | Integer | 是 | 心率类型:0:成人,1婴儿 |
averageRate | Double | 是 | 平均心率 |
fetalMoveTimes | Integer | 否 | 胎动次数 |
testTime | Integer | 是 | 胎心测试时长 |
uterusRecord | String | 否 | 宫缩值URL |
fetalMoveValue | String | 否 | 胎动时间值[{"time":"00:50"}] |
deviceMac | String | 否 | 测试仪器的mac地址 |
seriesNumber | String | 否 | 设备序列号 seriesNumber和deviceMac其中有一个必须有值 |
businessId | Long | 是 | 开发商ID |
openUserId | String | 否 | 开发者自己用户的ID |
获取胎心监测报告
请求参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
sign | String | 是 | 签名 |
businessId | Long | 是 | 开发商ID |
id | Integer | 是 | 胎心监测数据ID |
mobile | String | 否 | 生成报告的手机号码ID |
preganyWeek | String | 否 | 生成报告的孕周 |
age | Integer | 否 | 生成报告的年龄 |
userName | String | 否 | 生成报告的用户名 |
items | String | 否 | 生成报告评分项,多个使用","隔开 评分项: 有反应、无反应、正弦曲线、不满意 |
source | Integer | 否 | 生成报告的评分 |
speed | Integer | 否 | 走纸速度(1厘米/分,2厘米/分,3厘米/分,20分钟一页,30分钟一页) 默认值:2 |
doctorName | String | 否 | 生成报告的医生 |
hospitalName | String | 否 | 生产报告的医院名称 默认值: 天使医院 |
remark | String | 否 | 生成报告的备注 |
start | Integer | 否 | 胎心数据偏移量起始位置(偏移量代表偏移了多少数据点) 默认值:0 |
end | Integer | 否 | 胎心数据偏移量结束位置 默认值:0 |
API接口地址
POST /openapi/fetalrate/getBusinessFetalraetReport
返回参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
msg | Integer | 是 | 结果码1:成功 0:失败 |
msgbox | String | 是 | 错误或成功信息 |
data | Object | 是 | 返回结果 错误返回:null 成功返回报告文件路径 |
返回JSON
胎心监测实时数据推送
当开发者填写了实时推送地址,开发者需要实现三个接口start、add、stop,add接口会向手机端每隔3秒发起http请求推送一次数据,每次推送的数据是3秒内的数据,不是所有的数据,开发者需要保存每次请求的数据
start接口,用于初始化或重置用户监测数据
推送数据格式
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
openUserId | String | 否 | 开发者自己用户的ID |
seriesNumber | String | 否 | 设备序列号 |
deviceMac | String | 否 | 设备序mac地址 seriesNumber和deviceMac其中有一个sdk肯定会传 |
operatorType | String | 是 | 操作类型 start |
dataType | String | 是 | 数据类型 胎心:heartRate |
add接口,用于推送监测数据
推送的数据格式
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
seriesNumber | String | 否 | 设备序列号 |
deviceMac | String | 否 | 设备序mac地址 seriesNumber和deviceMac其中有一个sdk肯定会传 |
openUserId | String | 否 | 开发者自己用户的ID |
operatorType | String | 是 | 操作类型 add |
dataType | String | 是 | 数据类型 胎心:heartRate |
data | Object | 是 | 监测数据 |
data对象
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
fetalMove | String | 否 | 胎动 格式:00:12 |
heartRate | Array | 是 | 胎心率 格式: [0,1,45,66] |
uterus | Array | 否 | 宫缩:[0,2,3] |
alarm | Integer | 是 | 警告值 1 是报警 0正常 |
stop接口,用于清空某个设备的监测数据
推送的数据格式
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
seriesNumber | String | 是 | 设备序列号 |
deviceMac | String | 是 | 设备mac地址 seriesNumber和deviceMac其中有一个sdk肯定会传 |
operatorType | String | 是 | 操作类型 stop |
java版实时数据推送demo使用说明
该demo包含查询心电、胎心数据、生成胎心报告API接口测试用例,接收通知demo、接收手机推送实时胎心数据demo(仅支持同时一个用户测试)。
1、下载该demo后需要开发者安装jdk1.7、tomcat7.0、chrome或firefox或IE8以上版本浏览器。
2、把demo解压后把jumper-record-demo文件夹放到tomcat的webapp文件夹,启动tomcat成功后访问 http://localhost:8080/jumper-record-demo/realtimefetalrate/demo.html可以看到胎心监测图。
3、修改获取胎心实时数据地址,手机端开始实时监测,监测过程中可以看到demo页面监测图实时变化。
4、如果开发者需要快速的根据自己的业务画胎心监测图需在页面引入下面几个文件
realtimefetalrate/css/nst-style.css 画图样式文件
realtimefetalrate/js/jquery-1.10.1.min.js
realtimefetalrate/js/swfobject.js
realtimefetalrate/js/nst-chart.js 画图js
画图js使用方法参考demo.html页面
注意事项如果ajax请求胎心数据出现跨域问题,在服务端向客户发送数据的头部加入
"Access-Control-Allow-Origin", "*"
Access-Control-Allow-Methods","GET"
"Access-Control-Allow-Headers","x-requested-with,content-type"
附上一张效果图
血压监测
血压接收接口
接口说明:
接口名称:receiveBloodPressure
用户在开放平台 管理中心 >开发配置 填写了 (数据接收地址),当用户监测上传数据完成后,开发平台会向这个地址发送http post请求来推送血压数据
参数名 | 参数类型 | 是否必填 | 参数说明 |
---|---|---|---|
id | long | true | 数据ID,可以用来去重。或者使用 设备号+addTime 去重 |
serialNumber | string | true | 设备号,每个血压计都有一个唯一设备号 |
userIndex | string | false | 用户号,有些血压设备能够支持2人共同使用,可以切换用户,每个用户有不同的 userIndex,建议使用 设备号+用户号 来作为 唯一标识 |
systolicPressure | int | true | 收缩压、高压。正常人为90-120 |
diastolicPressure | int | true | 舒张压、低压。正常人为 60-90 |
pulse | int | true | 脉搏。多少次/分钟 |
addTime | long | true | 血压测量时间戳 1572493873。精确到秒 |
返回结果:
json对象,示例如下
失败:
- {
- "msg" : 0, //0为失败,1为成功 ,
- "msgbox" : "接收失败" ,
- //如果接收失败,会定时重新请求(定时最多重复请求50次,手动重新请求不限次) ,
- }
成功:
- {
- "msg" : 1, //0为失败,1为成功 ,
- "msgbox" : "接收成功" ,
- }
示例代码:
- {
- http://192.168.0.2:8080/crm/swagger-ui.html#!/monitor45controller/receiveBloodPressureUsingPOST
- }
- {
- /**
- * @param id 数据ID
- * @param serialNumber设备序列号
- * @param userIndex
- * @param systolicPressure 收缩压
- * @param diastolicPressure
- * @param pulse
- * @param addTime 测量时间
- * @return
- * @throws Exception
- */
- @PostMapping("receiveBloodPressure")
- @ResponseBody
- @ApiOperation(value = "接收血压数据", httpMethod = "POST")
- public JSONObject receiveBloodPressure(@RequestParam long id,
- @RequestParam String serialNumber, @RequestParam String userIndex,
- @RequestParam int systolicPressure,
- @RequestParam int diastolicPressure, @RequestParam int pulse,
- @RequestParam long addTime) throws Exception {
- com.alibaba.fastjson.JSONObject result = new JSONObject();
- // 校验下数据
- if (StringUtils.isEmpty(serialNumber)) {
- result.put("msg", 0);
- result.put("msgbox", "没有设备序列号");
- return result;
- }
- if (systolicPressure == 0 || diastolicPressure == 0) {
- result.put("msg", 0);
- result.put("msgbox", "血压数据不正确");
- return result;
- }
- PressureEquipmentVo eqVo = new PressureEquipmentVo();
- eqVo.setEquipmentType(1);
- eqVo.setSnNumber(serialNumber);
- PressureEquipmentPo eqPo = pressureEquipmentService.getPoTopOne(eqVo);
- if (eqPo == null) {
- result.put("msg", 0);
- result.put("msgbox", "没有找到该设备");
- return result;
- }
- MonitorPressureVo prevo = new MonitorPressureVo();
- prevo.setAddTime(new Date());
- prevo.setMonitorTime(new Date(addTime*1000));
- prevo.setPressureHeight(systolicPressure);
- prevo.setPressureLow(diastolicPressure);
- prevo.setPulseRate(pulse);
- prevo.setState(1);
- prevo.setYuliu1("平台同步数据");
- // 各个业务系统内部保存到数据库
- monitorPressureService.addPressure(prevo);
- result.put("msg", 1);
- result.put("msgbox", "接收成功");
- return result;
- }