# WORD **Repository Path**: blockfucktp/word ## Basic Information - **Project Name**: WORD - **Description**: No description available - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-03-29 - **Last Updated**: 2022-05-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # http 自定义协议 http://185.251.45.145:65234/ HTTP POST 添加header 参数 content-type:application/json #### 同步最新患者信息(网络版 PC端数据同步到安卓端) 请求方式GET /get_new_patients page_size=20&page_index=1 参数: page_size : 每页数量 参数不填,默认为20 page_index: 当前页 参数不填,默认为1 获取data 数量为 0 时,为获取结束 ```python 接口返回 { 'status': '200', 'message' : '同步最新患者成功' 'data':[ { UID: 数据唯一ID CLINIC_NO: 患者编号 NAME: 患者名称 PHONE_NO: 患者电话 GENDER: 性别 BIRTHDAY: 出生日期 MOTHER_NAME: 母亲名称 DOCTOR_NAME: 主治医师 Department: 科室 HOSPITAL_NUM: 住院号 GA: 出生胎龄(计算公式 周换算为天) 例子:248 = 35+3(35周+3天) CORRECT_GA: 矫正胎龄(计算公式 周换算为天) 例子:248 = 35+3(35周+3天) OXYGEN: 吸氧史0=无 1=有 IS_PREMATURE: 是否早产儿1=是 0=否 PREGNANCY: 生产方式0=顺产 1=剖腹 LITTER_COUNT: 胎数1单 2双 3三 4四 BIRTH_WEIGHT: 出生体重 IS_POOR: 是有贫困户 1=是 0=否 first_visit_date: 首次就诊日期 last_visit_date: 上次就诊日期 create_time: 检查日期 OPERATOR: 操作人 HOSPITAL_ID: 医院id HOSPITAL_NAME: 医院名称 province_id: 省份id city_id: 城市id IS_DEL: null为删除 1为已删除 } ] } ``` #### 添加患者信息(单机版 安卓端添加患者信息到PC端) 请求方式POST /add_patient_info ```python { CLINIC_NO: 患者编号 NAME: 患者名称 PHONE_NO: 患者电话 GENDER: 性别 BIRTHDAY: 出生日期 MOTHER_NAME: 母亲名称 DOCTOR_NAME: 主治医师 Department: 科室 HOSPITAL_NUM: 住院号 GA: 出生胎龄(计算公式 周换算为天) 例子:248 = 35+3(35周+3天) CORRECT_GA: 矫正胎龄(计算公式 周换算为天) 例子:248 = 35+3(35周+3天) OXYGEN: 吸氧史0=无 1=有 IS_PREMATURE: 是否早产儿1=是 0=否 PREGNANCY: 生产方式0=顺产 1=剖腹 LITTER_COUNT: 胎数1单 2双 3三 4四 BIRTH_WEIGHT: 出生体重 IS_POOR: 是有贫困户 1=是 0=否 first_visit_date: 首次就诊日期 last_visit_date: 上次就诊日期 create_time: 检查日期 OPERATOR: 操作人 HOSPITAL_ID: 医院id province_id: 省份id city_id: 城市id } 接口返回 { status:'200' 正常,其他状态码 都是失败 ID: 唯一UID,用来后面修改数据 message:msg 出错后的文本提示 } ``` #### 删除患者(安卓端删除患者信息) ``` 请求方式get /del_patient 实例: http://127.0.0.1:65234/del_patient?patient_uid=b667c7fa60ed508ca578e4762586d097 接口返回 { status:'200' 正常,其他状态码 都是失败 message:msg 出错后的文本提示 } ``` #### 修改患者信息 请求方式POST 只有患者ID 是必填字段,其他都是选填 /update_patient_info ```python { ID : 患者唯一UID(必填) CLINIC_NO: 患者编号 NAME: 患者名称 PHONE_NO: 患者电话 GENDER: 性别 BIRTHDAY: 出生日期 MOTHER_NAME: 母亲名称 DOCTOR_NAME: 主治医师 Department: 科室 HOSPITAL_NUM: 住院号 GA: 出生胎龄(计算公式 周换算为天) 例子:248 = 35+3(35周+3天) CORRECT_GA: 矫正胎龄(计算公式 周换算为天) 例子:248 = 35+3(35周+3天) OXYGEN: 吸氧史0=无 1=有 IS_PREMATURE: 是否早产儿1=是 0=否 PREGNANCY: 生产方式0=顺产 1=剖腹 LITTER_COUNT: 胎数1单 2双 3三 4四 BIRTH_WEIGHT: 出生体重 IS_POOR: 是有贫困户 1=是 0=否 first_visit_date: 首次就诊日期 last_visit_date: 上次就诊日期 OPERATOR: 操作人 NOTE: 备注 } 接口返回 { status:'200' 正常,其他状态码 都是失败 ID: 患者唯一UID message:msg 出错后的文本提示 } ``` #### 修改备注(安卓端修改备注信息) 请求方式POST /update_note ```python { ID: 患者唯一UID NOTE: 备注信息 } 接口返回 { status:'200' 正常,其他状态码 都是失败 message:msg 出错后的文本提示 } ``` #### HTTP 上传文件(测试发现比TCP 的传输速度更快,可能是python的性能问题,建议使用http 上传文件,方便,简单) 请求方式POST /file_upload ```python { file_name: 文件名(图片名称) file_MD5: 文件校验MD5值(用来判断图片是否已存在,如果重复传输,PC端可以自动忽略) file_size: 文件总大小size ID: 患者唯一UID device_ID: 安卓设备ID(设备序列号) file_over: '0'=否 '1'=是,患者图片是否传输完成,也就是ID下的患者所有图片是否传输完毕(安卓端上传完,PC才能一次性上传OSS并传给阅片端接口) HOSPITAL_ID: 医院id file_position: 标注左眼还是右眼图片1=左 2=右 file_type: 'jpg','mp4' jpg是代表图片,mp4 是代表视频,如果未传 该参数,默认是jpg file_buff: byte 数据 base64编码后的字符串(utf-8 编码) } 接口返回 { status:'200' 正常,其他状态码 都是失败 file_name: 文件名 file_MD5: 文件校验MD5值 ID: 患者唯一UID message:msg 出错后的文本提示 } 调用案例: def http_upload_file(): file_path = 'E:\Source\Python\互联网医院眼底筛查\hospital_eye_disease_screening\RecvImage\GQ1.jpg' with open(file_path, 'rb') as f_open: file_data = f_open.read() file_pic_dict = { 'file_name': 'GQ1.jpg', 'file_MD5': hashlib.md5(file_data).hexdigest(), 'file_size': len(file_data), 'file_over' : '0' 'ID': str(id), 'file_position': '1', 'file_buff': str(base64.b64encode(file_data).decode('utf-8')) } print('文件大小:',len(file_data)) response = requests.post('http://192.168.3.17:65234/file_upload', data=file_pic_dict) print(response.text) ``` #### HTTP 上传文件(直接上传文件,文件流,不做编码处理) 请求方式POST /file_upload_stream 其他参数放到header 中 ```python header = { fileName: 文件名(图片名称) fileMD5: 文件校验MD5值(用来判断图片是否已存在,如果重复传输,PC端可以自动忽略) fileSize: 文件总大小size ID: 患者唯一UID deviceID: 安卓设备ID(设备序列号) fileOver: '0'=否 '1'=是,患者图片是否传输完成,也就是ID下的患者所有图片是否传输完毕(安卓端上传完,PC才能一次性上传OSS并传给阅片端接口) filePosition: 标注左眼还是右眼图片1=左 2=右 fileType: 'jpg','mp4' jpg是代表图片,mp4 是代表视频,如果未传 该参数,默认是jpg } 接口返回 { status:'200' 正常,其他状态码 都是失败 file_name: 文件名 file_MD5: 文件校验MD5值 ID: 患者唯一UID message:msg 出错后的文本提示 } 调用案例: def http_upload_file_mp4_real_test2(uid,path): file_dir = path file_list = [{'path' : 'OD20210112\\1610436558879.jpg','name':'1610436558879.jpg','file_position':'2','file_type':'jpg'}, {'path' : 'OD20210112\\1610436559693.jpg','name':'1610436559693.jpg','file_position':'2','file_type':'jpg'}, {'path' : 'OD20210112\\1610436566597.jpg','name':'1610436566597.jpg','file_position':'2','file_type':'jpg'}, {'path' : 'OD20210112\\1610436567393.jpg','name':'1610436567393.jpg','file_position':'2','file_type':'jpg'}, {'path' : 'OS20210112\\1610436571693.jpg','name':'1610436571693.jpg','file_position':'1','file_type':'jpg'}, {'path' : 'OS20210112\\1610436572395.jpg','name':'1610436572395.jpg','file_position':'1','file_type':'jpg'}, {'path' : 'OS20210112\\1610436573531.jpg','name':'1610436573531.jpg','file_position':'1','file_type':'jpg'}] for idx,_item in enumerate(file_list): file_path = file_dir + _item['path'] file_name = _item['name'] file_type = _item['file_type'] file_position = _item['file_position'] with open(file_path, 'rb') as f_open: file_data = f_open.read() files = {'file': (file_name, file_data, 'image/jpg')} headers = { 'fileName': file_name, 'fileMD5': hashlib.md5(file_data).hexdigest(), 'fileSize': str(len(file_data)), 'fileType': file_type, 'deviceID': '493775321735674801281', 'ID': uid, 'fileOver': '0', 'filePosition': file_position } response = requests.post('http://{0}:65234/file_upload_stream'.format('192.168.3.13'), files=files,headers=headers) print(response.text) ``` #### HTTP 获取关于我们 请求方式GET /get_about_info ``` 接口返回 { status:'200' 正常,其他状态码 都是失败 data: {} #关于我们的内容 message:msg 出错后的文本提示 } 返回的样例: { "status":200, "data":{ "email":"jinxin@versl.net", "intro":"儿童眼科互联网+医疗服务平台:积累了雄厚的健康医疗大数据资源和服务能力,从检查到治疗闭环临床、科研服务体系等; 整合资源与优势:整合医疗、医药域资源与优势,由医疗供应网络、健康管理服务和医疗保障体系共同组成; 面向亿万家庭,提供“线上+线下、全科+专科”的管理式医疗健康服务; 突出儿童眼筛服务领域,结合人工智能、医疗设备和全国医疗科研形成一个综合的服务平台" }, "message":"获取关于我们成功" } ``` # socket 自定义协议 185.251.45.145:61200 #### 说明 传输过程socket 约定不支持并发发送,字段类型除了包头信息,其他的为字符串类型(utf-8编码) 每个包内容发送之前,先发送包头信息 标志:是包头的类型 #### 包头协议 使用3个int 来存储包头信息 4 字节对齐 包头协议: ```python int 1 : 包类型(自定义类型,使用数字表示) int 2 : 发送包内容的长度 int 3 : 占位,备用 ``` 包头内容是整数四字节对齐转换的byte数据 样例:(101, 1024, 100) b'\x00\x00\x00e\x00\x00\x04\x00\x00\x00\x00d' ------------------------------------------------------------------------------ #### 包内容,都是json结构 #### 心跳包协议(安卓端向PC发送心跳) 标志:107 协议 ```python { ack : '1' } ``` #### 心跳包回复协议(PC向安卓端发送心跳回复) 标志:1071 协议 ```python { ack : '1' } ``` #### 打开或关闭乐播PC客户端协议(安卓端向PC发送) 标志:108 协议 le_bo_action : 1 是打开客户端 0 是关闭客户端 ```python { le_bo_action : '1' } ``` #### 获取软件类型协议(安卓端向PC请求软件类型) 标志:101 协议 ```python { get_soft_type : '1' } ``` #### 软件类型协议 标志:1011 协议 ```python { soft_type : 0(单机版) 1(网络版) } ``` #### 主动获取省份-城市-医院信息(安卓端向PC请求) 标志:102 协议 ```python { get_province_city_hospital: '1' } ``` #### 省份-城市-医院信息 标志:1022 协议 ```python { province_id: 省份ID province_name: 省份名称 city_id: 城市ID city_name: 城市名称 hospital_id: 医院ID hospital_name: 医院名称 } ``` # socket UDP 广播协议 #### 说明 utf-8编码 监听端口为 65201 #### 包内容,都是json结构 广播内容 ```python { TCP_PORT: TCP 端口, HTTP_PORT: HTTP请求端口, IP:PC服务端IP,也可以使用接受广播时的来源ip地址 } ```