# CareApp-Server **Repository Path**: lxiaomin/CareApp-Server ## Basic Information - **Project Name**: CareApp-Server - **Description**: 护理类应用App 服务端开发 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2017-10-08 - **Last Updated**: 2025-04-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #CareApp ## 1 项目简介 针对监护人与被监护人的安卓APP 。 - 服务端:提供数据接口,存储与处理数据,且作为监护人与被监护人之间的“桥梁”作用,转发各种请求。 - 客户端:通过数据解析,提供给监护人与被监护人各种服务,包括用户的注册登陆、定位服务、一键呼救、吃药提醒、亲情对讲等一系列功能。 ## 2 项目截图 ![](doc/1.png) ![](doc/2.png) ![](doc/3.png) ![](doc/4.png) ![](doc/5.png) ## CareApp API 说明文档 ### 0 更新日志 - 添加紧急呼救接口 - 添加自定义的消息群发接口 - 监护人与被监护人返回的数据格式 - 闹钟服务接口 - 上传位置信息,不转发 - 按条件查询位置,最近100个点 - 转发自定义消息 - Teamviewer 固定密码:Lijia123 - 统一返回格式 - 统一用户参数与返回字段(不保证还有漏网之鱼) - 位置服务返回100条历史记录,详情请看location/history - 已测试短信接仍然能用 - 测试了常用接口,正常使用 ### 1.配置部分 >>>>>>> c2ed802ccefbaf9e815c26023a7546e42828c797 ### 2. 错误代码 - success-code=200 - success=成功 - fail-code=500 - fail=失败 - unknown-code=999 - unknown=未知错误 - notfind-code=404 - notfind=资源未找到 - type-convert-code=1001 - type-convert=输入参数类型错误 - exist=资源已存在 - exist-code=1002 - isblank=参数为空 - isblank-code=1003 - timeout=连接超时 - timeout-code=1004 - invalid=无效 - invalid-code=1005 ### 3. 用户接口 #### 3.1 用户登陆 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :-------------: | :--: | :--: | :----: | :----------------------: | -------- | | /api/user/login | POST | JSON | 用户名、密码 | Success、WrongPSW、NotFind | 验证用户名与密码 | ```Java /*示例*/ URL:/api/user/login 方法:POST 格式:JSON 参数:{"username":"包成贤","password":"123456","device_id":"3727584973475375398457893"} 返回: { "code": "200", "msg": "成功" } //其他返回都失败的,除了成功的,其他的用else好了 ``` #### 3.2 查询用户 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :------------: | :--: | :--: | :----------: | :----------: | -------- | | /api/user/{id} | GET | 数字 | {id}替换成用户的id | 用户所有信息、资源未找到 | 查询用户所有信息 | ```json /*示例1*/ URL:/api/user/1 方法:GET 格式: 参数: 返回: { "code": "200", "msg": "成功", "data": { "image": "070811e7-4efb-413f-8e83-5fe43daf7089", "u_id": 1, "device_id": "3727584973475375398457893", "telphone": "13978329670", "type": "1", "register_time": 1509075021356, "username": "包成贤" } } /*示例2*/ URL:/api/user/10086 方法:GET 格式: 参数: 返回:{ "code": "404", "msg": "资源未找到" } ``` #### 3.3 新增用户 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :----------------: | :--: | :--: | :----------------------: | :--------------------: | :--: | | /api/user/register | POST | JSON | 用户名,密码,电话号码、验证码、设备号、人物类型 | 必要资料不能为空、验证码不正确、成功、已存在 | 新增用户 | ```json /** * 用户注册方法,用于注册业务中。 * * @ userName 用户名 * @ password 密码 * @ tel 电话号码 * @ code 验证码,可以是短信验证码,也可以是邮件验证码。 * @ type 用户类型,1 就是监护人,2 就是被监护人 * @ device_id 极光推送绑定的设备号 * @return ErrorCode 响应码 */ URL:/api/user/register 方法:POST 格式:JSON 参数: { "telphone":"110", "password":"123456", "username":"ergou", "verify_code":"111111", "type":"2", "device_id":"xixiix" } 返回: { "code": "200", "msg": "成功" } /*错误示例1*/ URL:/api/user/register 方法:POST 格式:JSON 错误:缺少参数 参数: { "device_id":"xixiix" } 返回: { "code": "1003", "msg": "参数为空" } /*错误示例2*/ URL:/api/user/register 方法:POST 格式:JSON 错误:重复注册 参数: { "telphone":"110", "password":"123456", "username":"ergou", "verify_code":"111111", "type":"2", "device_id":"xixiix" } 返回: { "code": "1002", "msg": "资源已存在" } ``` ##### 3.3.1 设备ID:device_id的获取说明 使用推送需要借助用户的设备唯一ID,请阅读以下文档,在【安卓客户端】进行设备id的获取 > RegistrationID 定义 > > 集成了 JPush SDK 的应用程序在第一次成功注册到 JPush 服务器时,JPush 服务器会给客户端返回一个唯一的该设备的标识 - RegistrationID。JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。 > > 应用程序可以把此 RegistrationID 保存以自己的应用服务器上,然后就可以根据 RegistrationID 来向设备推送消息或者通知。 > > API - getRegistrationID > 调用此 API 来取得应用程序对应的 RegistrationID。 只有当应用程序成功注册到 JPush 的服务器时才返回对应的值,否则返回空字符串。 > > 支持的版本 > 开始支持的版本:1.6.0 > > 接口定义 > > ```java > //SDK 初次注册成功后,开发者通过在自定义的 Receiver 里监听 Action - cn.jpush.android.intent.REGISTRATION 来获取对应的 RegistrationID。注册成功后,也可以通过此函数获取 > public static String getRegistrationID(Context context) > > //这个函数返回的字符串就是device_id,也就是注册的时候必须传入的一个参数 > ``` > > 参考链接: > > [极光推送获取registrationID]: http://blog.csdn.net/xiyangyang8110/article/details/52937873 > [官方文档此处说明]: https://docs.jiguang.cn/jpush/client/Android/android_api/#registrationid-api > > ##### 3.3.2 短信验证码获取 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :--------------------: | :--: | :--: | :--: | :--: | :------------: | | /api/user/verification | POST | JSON | 手机号码 | 见例子 | 10分钟有效,超过十分钟无效 | ```json /** * 获取短信验证码的接口 * @param json * @return */ URL:/api/user/verification 方法:POST 格式:JSON 参数: { "telphone":"13557330070" } 返回: { "code": "200", "msg": "成功" } ``` #### 3.4 按特定信息查询用户 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :--------------: | :--: | :--: | :---------------------------: | :----------------------------: | ------------------------------ | | /api/user/search | POST | JSON | 电话号码、【或】、用户id、【或】、用户名username | 用户信息的json数组、资源不存在的响应码、未知错误的响应码 | 注意,这里返回的是json数组,因为不一定只有一个匹配的用户 | ```Java /** * 搜索用户方法,通过切面检查权限,查询用户信息。用于添加监护人,查询监护人或被监护人信息等业务. * * @ telphone 用户手机号码 * @ u_id 用户id号码 * @ username 用户名 * @ device_id 设备id * @return json格式的用户信息 */ URL:/api/user/search 方法:POST 格式:JSON 参数:{"username":"ergou"} 或 {"username":"ergou","telphone":"110"} 或 {"telphone":"110"} 参数:上述任意的四个属性可以搭配,查询符合条件的用户。 返回:!!!这里返回的是json数组,请注意解析的方式,应该先判断是否是json数组!!! { "code": "200", "msg": "成功", "data": [ { "image": "", "u_id": 98, "device_id": "", "telphone": "13557330070", "type": "1", "register_time": 1514255907363, "username": "LXM" } ] } /*错误示例1*/ URL:/api/user/search 方法:POST 格式:JSON 参数:{"usern12ame":"ergou"} 错误:参数没写对。 返回: { "code": "1005", "msg": "无效" } /*错误示例2*/ URL:/api/user/search 方法:POST 格式:JSON 参数:{"username":"ergouzi"} 错误:用户不存在。 返回: { "code": "404", "msg": "资源未找到" } ``` #### 3.5 查询所有用户 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :-----------: | :--: | :--: | :--: | :----: | -------- | | /api/user/all | GET | | | 所有用户信息 | 返回json数组 | ```Java /*示例*/ URL:/api/user/all 方法:GET 格式:JSON 参数: 返回:这里返回的是json数组,请注意解析的方式,应该先判断是否是json数组 { "code": "200", "msg": "成功", "data": [ { "image": "070811e7-4efb-413f-8e83-5fe43daf7089", "u_id": 1, "device_id": "3727584973475375398457893", "telphone": "13978329670", "type": "1", "register_time": 1509075021356, "username": "包成贤" }, { "image": "9b8e72d7-8f01-4fe9-98d2-8f43cfbceef9", "u_id": 2, "device_id": "1a0018970aa306581e3", "telphone": "13978329670", "type": "1", "register_time": 1509075021356, "username": "方玉成" }, { "image": "ee6e347c-3cc3-4ac5-8b70-d50cc3e00852", "u_id": 3, "device_id": "140fe1da9eae9d6cb13", "telphone": "13978329670", "type": "1", "register_time": 1509075021356, "username": "周轲濠" } ] } ``` ### 4. 监护接口 #### 4.1 建立监护关系 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :-----------------: | :--: | :--: | :-------------: | :-----: | ---- | | /api/contacts/build | POST | JSON | 监护人id、被监护人id、授权 | 成功、未知错误 | | ```Java /*示例*/ /** * 建立监护与被监护关系. * * gid 监护人的ID * bgid 被监护人的ID * grant 授权 * @return ErrorCode 返回码 */ URL:/api/contacts/build 方法:POST 格式:JSON 参数: { "gid":"1", "bgid":"96", "grant":"1" } 返回: { "code": "200", "msg": "成功" } /*错误示例1*/ URL:/api/contacts/build 方法:POST 格式:JSON 参数:{ "gid":"12222", "bgid":"96", "grant":"1" } 错误:用户不存在。 返回: { "code": "404", "msg": "资源未找到" } ``` #### 4.2 解除监护关系 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :---------------------: | :--: | :--: | :----------: | :------------------: | ---- | | /api/contacts/unbinding | POST | JSON | 监护人id、被监护人id | 成功、未知错误、关系不存在、参数类型有误 | | ```Java /** * 解除监护人与被监护人的绑定关系. * * @ gid 监护人id * @ bgid 被监护人id * @ return 返回码 */ URL:/api/contacts/unbinding 方法:DELETE 【注意,这里的方法叫DELETE】 格式:JSON 参数: { "gid":"1", "bgid":"96", } 返回: { "code": "200", "msg": "成功" } /*错误示例1*/ URL:/api/contacts/unbinding 方法:DELETE 格式:JSON 参数:{ "gid":"12222", "bgid":"96", } 错误:用户不存在。 返回: { "code": "404", "msg": "资源未找到" } /*错误示例2*/ URL:/api/contacts/unbinding 方法:POST 格式:JSON 参数:{ "gid":"1", "bgid":"95", } 错误:没有建立监护关系。 返回: { "code": "404", "msg": "资源未找到" } ``` #### 4.3 查询被监护人所属的监护人 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :-------------: | :--: | :--: | :----: | :-----------: | ------------ | | /api/contacts/g | POST | JSON | 被监护人id | 成功、未知错误、资源未找到 | 查询被监护人所属的监护人 | ```Java /** * 查询被监护人所属的监护人,这是一个一对多的关系. * * @ beid 被监护人的ID * @return 一个json数组的字符串,包含的信息是监护人的ID和昵称 */ URL:/api/contacts/g 方法:POST 格式:JSON 参数: { "bgid":"96" } 返回: { "code": "200", "msg": "成功", "data": [ { "image": "070811e7-4efb-413f-8e83-5fe43daf7089", "u_id": 1, "device_id": "3727584973475375398457893", "telphone": "13978329670", "type": "1", "register_time": 1509075021356, "username": "包成贤" }, { "image": "070811e7-4efb-413f-8e83-5fe43daf7089", "u_id": 1, "device_id": "3727584973475375398457893", "telphone": "13978329670", "type": "1", "register_time": 1509075021356, "username": "包成贤" }, { "image": "070811e7-4efb-413f-8e83-5fe43daf7089", "u_id": 1, "device_id": "3727584973475375398457893", "telphone": "13978329670", "type": "1", "register_time": 1509075021356, "username": "包成贤" } ] } /*错误示例1*/ URL:/api/contacts/g 方法:POST 格式:JSON 参数: { "bgid":"10086" } 错误:用户不存在。 返回: { "code": "404", "msg": "资源未找到" } ``` #### 4.4 查询监护人所监护的被监护人 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :--------------: | :--: | :--: | :---: | :-----------: | ------------- | | /api/contacts/ug | POST | JSON | 监护人id | 成功、未知错误、资源未找到 | 查询监护人所监护的被监护人 | ```Java /** * 查询监护人所属的被监护人,这是一个一对多的关系. * * @ gid 被监护人的ID * @return 一个json数组的字符串,包含的信息是监护人的ID和昵称 */ URL:/api/contacts/ug 方法:POST 格式:JSON 参数: { "gid":"1" } 返回: { "code": "200", "msg": "成功", "data": [ { "image": "070811e7-4efb-413f-8e83-5fe43daf7089", "u_id": 1, "device_id": "3727584973475375398457893", "telphone": "13978329670", "type": "1", "register_time": 1509075021356, "username": "包成贤" } ] } /*错误示例1*/ URL:/api/contacts/ug 方法:POST 格式:JSON 参数: { "gid":"10086" } 错误:用户不存在。 返回: { "code": "404", "msg": "资源未找到" } ``` #### 4.5 转让监护关系 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :----------------------: | :--: | :--: | :----------------------: | :-----------: | ------ | | /api/contacts/assignment | POST | JSON | 监护人id、被监护人id、要转让给的监护人的id | 成功、未知错误、资源未找到 | 转让监护关系 | ```Java /** * 转让监护人与被监护人的绑定关系. * * @ gid 监护人id * @ beid 被监护人id * @ otherid 第三个监护人的id * @ return 返回码 */ URL:/api/contacts/assignment 方法:POST 格式:JSON 参数: { "gid":"1", "bgid":"96", "otherid":"2" } 返回: { "code": "200", "msg": "成功" } /*错误示例1*/ URL:/api/contacts/assignment 方法:POST 格式:JSON 参数: { "gid":"112312313123", "bgid":"12312396", "otherid":"2" } 错误:用户不存在。 返回: { "code": "404", "msg": "资源未找到" } ``` ### 5. 服务接口 #### 5.1 位置服务 ##### 5.1.1 监护人获取被监护人的位置 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :-----------------------: | :--: | :--: | :----------: | :-----------: | ---- | | /api/services/location/ug | POST | JSON | 一个完整指令的JSON串 | 成功、未知错误、资源未找到 | | ```Java //指令类设计: public class Introduction { private long iNum;//指令编号 private String description;//描述 private String sendUid;//发送方的uid private String receiveUid;//接收方的uid private Object content;//这里面放任意要传送的内容,可以放一个xml格式的字符串,也可以放一个序列化的类。这个需要客户端自行设计和解析,因为服务器做一个中转,这部分数据还是要到客户端处理 } /** * POST 方法. * 监护人获取被监护人的位置的方法,监护人发送一条指令给服务器,服务器发送给极光推送的服务器, * 客户端上线后自己从服务器中读取这条Message,经过解析后执行Message附带的查询位置指令(客户端自行设计如何解析)。 * 日志需要记录本次指令。 * * @param introduction 传入一条指令 * @return 返回码 */ URL:/api/services/location/ug 方法:POST 格式:JSON 参数:【以下参数缺一不可】,注意:此处MessageType=2,说明这是一条请求位置的指令。 { "iNum":"100000000", "description":"我需要获知被监护人位置的一条指令", "sendUid":"1", "receiveUid":"96", "content":{ "MessageType":"2", "Router":"1" } } 返回: { "code": "200", "msg": "成功" } /*其他错误一律返回UNKNOWN*/ ``` **注意**:此处MessageType=2,说明这是一条请求位置的指令,当服务器收到这个请求时,做以下步骤: - Step 1:解析指令,获取要转发给哪个被监护人的设备号 - Step 2:把Content部分【**原封不动**】转发给被监护人 **注意**:被监护人收到这个推送后,需要执行以下逻辑: - Step 1:解析这个Json字符串,获取MessageType的值 - Step 2:查表,当MessageType=2时,应该执行获取当前位置的函数,并获取返回值Location、JWD(经纬度)、title。在这里的经纬度格式:先纬度,后经度 - Step 3:调用**5.1.2 被监护人发送自己的位置 **的api,发送给Router对应的用户id,也就是这个Router的值填充到【/api/services/location/g】这个接口的receiveUid中。 ##### 5.1.2 被监护人发送自己的位置 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :----------------------: | :--: | :--: | :----------: | :-----: | ---- | | /api/services/location/g | POST | JSON | 一个完整指令的JSON串 | 成功、未知错误 | | ```Java /** * POST 方法,发送监护人位置. * 被监护人上线之后,通过百度SDK寻找自己的位置。获取位置后,调用此API,提供一个坐标的json, * 发送到服务器上,服务器转发到极光推送服务器,监护人上线的时候,从此处监听到消息队列中有未处理的消息,下载这条信息, * 去解析这条带指令的位置信息。从而得知被监护人的位置。 * 位置需要写入数据库位置表中。 * 日志需要记录本次指令。 * @param introduction 指令 * @return 返回码 */ URL:/api/services/location/g 方法:POST 格式:JSON 参数:以下所有参数均【必须】,注意:此处MessageType=3,说明这是一条发送位置给监护人的指令。 { "iNum":"100000001", "description":"我要告诉监护人,我的位置在哪", "sendUid":"96", "receiveUid":"1", "content":{ "MessageType":"3", "Location":"广西壮族自治区桂林市七星区桂林电子科技大学xxxx", "JWD":"40.057406655722,116.2964407172", "title":"桂林电子科技大学", "time":"你的时间戳" } } 返回: { "code": "200", "msg": "成功" } /*其他错误一律返回UNKNOWN*/ ``` ##### 5.1.3 查询被监护人历史位置 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :-------------------------------------: | :--: | :--: | :----: | :-----------: | ---- | | /api/services/location/history?uid=用户id | GET | | 被监护人id | 成功、未知错误、资源未找到 | | ```Java /** * GET 方法,查询数据库中,被监护人的历史位置. * * @return 历史数据的JSON */ URL:/api/services/location/history?u_id=1 方法:GET 格式:用连接传参 参数:在uid后面带参数 返回:json 数组 { "code": "200", "msg": "成功", "data": [ { "u_id": 1, "id": 1, "position": "{x:111,y:2222}", "time": 123131234, "username": "包成贤" } ] } /*其他错误一律返回UNKNOWN*/ ``` ##### 5.1.4 保存位置信息不转发 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :---------------------------: | :--: | :--: | :--: | :-----: | ---- | | /api/services/location/custom | POST | | 见例子 | 成功、未知错误 | | ```java /** * 保存自定义的信息,不做转发 * * @param json * @return */ URL:/api/services/location/custom 方法:POST 格式:json 参数:用户id,位置信息,时间戳 参数示例: { "u_id":3, "pos":"存放位置的字符串,至于放什么你可以自己决定", "time":123456 } 返回:json 数组 { "code": "200", "msg": "成功" } /*其他错误包括参数异常,未知异常*/ { "code": "999", "msg": "未知异常" } ``` ##### 5.1.5 按时间点获取位置信息 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :--------------------------------------: | :--: | :--: | :--: | :-----: | ---- | | /api/services/location/historyByTime?u_id=用户id&time=查询的时间戳 | GET | | 见例子 | 成功、未知错误 | | ```java URL:/api/services/location/historyByTime?u_id=用户id&time=查询的时间戳 方法:GET 格式:用连接传参 参数:上面的用户id替换要查询的用户id,time替换要查询的时间戳 返回:json 数组,最多返回100条数据。 返回示例: { "code": "200", "msg": "成功", "data": [ { "u_id": "3", "time": "1518939684144", "position": "{\"MessageType\":\"3\",\"Location\":\"中国广西壮族自治区南宁市上林县\",\"JWD\":\"108.665019,23.257322\",\"title\":\"在六联村附近\",\"time\":\"1518939686028\",\"Callback\":\"1518936157623_563\"}", "username": "周轲濠", "device_id": "140fe1da9eae9d6cb13" }, { "u_id": "3", "time": "1518929395488", "position": "{\"MessageType\":\"3\",\"Location\":\"中国广西壮族自治区南宁市上林县\",\"JWD\":\"108.665015,23.257256\",\"title\":\"在六联村附近\",\"time\":\"1518929397382\",\"Callback\":\"1518929394857_231\"}", "username": "周轲濠", "device_id": "140fe1da9eae9d6cb13" } ] /*其他错误包括参数异常,未知异常*/ { "code": "999", "msg": "未知异常" } ``` ####5.2 紧急语音转发 ##### 5.2.1 被监护人发紧急语音给监护人 #### 5.3 吃药提醒 ##### 5.3.1 监护人提醒老人吃药 监护人在设置好后,调用下述的接口,会发送一条【推送】和定时短信到老人的客户端。 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :-----------------------------: | :--: | :--: | :--: | :-----: | ---- | | /api/services/transmission/drug | POST | | 见例子 | 成功、未知错误 | | ```Java /** * POST 方法,给老人发送一条通知和Message, * 通知会自己显示在通知栏,Message需要解析,设定闹钟什么 * 的,都可以通过Message的类型来判断 * * @return 执行结果 */ URL:/api/services/transmission/drug 方法:POST 格式:JSON 参数:以下所有参数均【必须】,且均为字符串类型,缺一则返回未知错误 iNum:消息的编号,可以用时间戳做唯一编号 description:消息的描述 sendUid:发送方id,也就是监护人的id receiveUid:接收方id,也就是老人的id content:首先要放消息类型,说明是吃药的消息,然后放一些用药之类的,json模式 //参数示例 { "iNum":"100000001", "description":"您的家人提醒您该吃药了", "sendUid":"96", "receiveUid":"1", "content":{ "MessageType":"1", "RemainTime":"1513755960", "drug":{ "阿莫西林":"1片", "保济丸":"1瓶", "敌敌畏":"0毫升" } } } 返回:JSON { "code": "200", "msg": "成功" } /*其他错误一律返回UNKNOWN*/ ``` ##### 5.3.2 APP客户端如何获取Message 在此处,我使用极光推送发送了一个跌倒推送到老人端APP。老人端APP需要处理的流程是: + 用字符串保存content部分 + 分析Message的类型,说明是吃药类型的Message + 取出RemainTime和drug字段的内容 + 以RemainTime为时间,以drug字段为内容,设置闹钟提醒 >参考代码:http://www.jb51.net/article/62125.htm #### 5.4 老人跌倒提醒 老人跌倒会有两部分的提醒,第一个是短信提醒,第二个是监护人的客户端的提醒,对该老人的监护人是全广播,这部分不需要客户端处理了。 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :-------------------------------: | :--: | :--: | :----: | :-----: | ---- | | /api/services/transmission/tumble | POST | | 被监护人id | 成功、未知错误 | | ```java //示例 URL:/api/services/transmission/tumble 方法:POST 格式:JSON 参数:以下所有参数均【必须】,且均为字符串类型,缺一则返回未知错误 { "bgid":"96" } 返回:响应码 { "code": "200", "msg": "成功" } //其他错误都是未知错误。 ``` ####5.5 家政服务 #####5.5.1 获取所有家政服务信息 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :------------------------------: | :--: | :--: | :--: | :----: | ---- | | /api/service/hourse_keeping/list | GET | | 无 | json数组 | | ```Java /** * GET 方法,获取所有的家政服务信息 * @return json数组 */ URL:/api/service/hourse_keeping/list 方法:GET 返回示例: { "code": "200", "msg": "成功", "data": "[{\"id\":1,\"servantName\":\"王二狗\",\"servantImg\":\"www.baidu.com\",\"phone\":\"13399669966\",\"servicePrice\":\"100元/次\",\"serviceName\":\"上门扫地\",\"serviceWay\":\"上门服务\",\"serviceRange\":\"桂林电子科技大学花江校区22栋\",\"serviceTitle\":\"专业扫地上门服务\",\"serviceContent\":\"本人专人承接屋顶阳台清理工作,已有22年工作历史\",\"createTime\":222222222},{\"id\":3,\"servantName\":\"王三狗\",\"servantImg\":\"www.baidu.com\",\"phone\":\"110元/次\",\"servicePrice\":\"110元/次\",\"serviceName\":\"上门擦玻璃\",\"serviceWay\":\"上门服务\",\"serviceRange\":\"桂林电子科技大学花江校区22栋\",\"serviceTitle\":\"专业擦玻璃上门服务\",\"serviceContent\":\"本人专人承接屋顶阳台清理工作,已有22年工作历史\",\"createTime\":1514038468014},{\"id\":4,\"servantName\":\"王四狗\",\"servantImg\":\"www.baidu.com\",\"phone\":\"110元/次\",\"servicePrice\":\"110元/次\",\"serviceName\":\"上门擦玻璃\",\"serviceWay\":\"上门服务\",\"serviceRange\":\"桂林电子科技大学花江校区22栋\",\"serviceTitle\":\"专业擦玻璃上门服务\",\"serviceContent\":\"本人专人承接屋顶阳台清理工作,已有22年工作历史\",\"createTime\":1514093726670},{\"id\":5,\"servantName\":\"家政人员名称\",\"servantImg\":\"www.baidu.com\",\"phone\":\"服务价格\",\"servicePrice\":\"服务价格\",\"serviceName\":\"服务名称\",\"serviceWay\":\"服务方式\",\"serviceRange\":\"服务范围\",\"serviceTitle\":\"服务简介\",\"serviceContent\":\"服务描述\",\"createTime\":1514189245667}]" } ``` ##### 5.5.2 按id获取家政服务信息 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :------------------------------: | :--: | :--: | :--: | :--: | ---- | | /api/service/hourse_keeping/{id} | GET | | 无 | Son | | ```java /** * GET 方法,按照id获取家政信息 * @param id 家政服务的编号id * @return */ URL:/api/service/hourse_keeping/{id} {id}应该替换成1、2、3、4、5、6、7这样的,如/api/services/hourse_keeping/1 方法:GET 返回示例: { "code": "200", "msg": "成功", "data": "{\"id\":1,\"servantName\":\"王二狗\",\"servantImg\":\"www.baidu.com\",\"phone\":\"13399669966\",\"servicePrice\":\"100元/次\",\"serviceName\":\"上门扫地\",\"serviceWay\":\"上门服务\",\"serviceRange\":\"桂林电子科技大学花江校区22栋\",\"serviceTitle\":\"专业扫地上门服务\",\"serviceContent\":\"本人专人承接屋顶阳台清理工作,已有22年工作历史\",\"createTime\":222222222}" } ``` ##### 5.5.3 根据关键字查询家政服务 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :------------------------------: | :--: | :--: | :---: | :--------: | ---- | | /api/service/hourse_keeping/list | POST | | 查询关键字 | 家政信息json数组 | | ```java //示例 //说明:虽然这里都是一样的url地址,但是因为请求方式不一样,所以触发的方法就不一样 URL:/api/service/hourse_keeping/list 方法:POST 格式:JSON 参数:以下所有参数均【必须】 { "keyword":"二狗" } 返回:包含该关键字的所有家政服务的信息的JSON数组 { "code": "200", "msg": "成功", "data": "[]" } //其他错误都是未知错误。 ``` ##### 5.5.4 发布一条家政信息(这个现在不需客户端做) | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :-----------------------------: | :--: | :--: | :-------: | :-----: | ---- | | /api/service/hourse_keeping/add | POST | JSON | 家政信息等,见示例 | 成功、未知错误 | | ```java URL:/api/service/hourse_keeping/add 方法:POST 格式:JSON 参数:以下所有参数均【必须】,且均为字符串类型 { "servant_name": "王三狗", "servant_img": "www.baidu.com", "phone": "19999999999", "service_price": "110元/次", "service_name": "上门擦玻璃", "service_way": "上门服务", "service_range": "桂林电子科技大学花江校区22栋", "service_title": "专业擦玻璃上门服务", "service_content": "本人专人承接屋顶阳台清理工作,已有22年工作历史" } 返回:响应🐎 { "code": "200", "msg": "成功" } ``` ##### 5.5.5 删除一条家政信息(这个也不需要客户端现在做) | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :------------------------------: | :----: | :--: | :--: | :--: | ---- | | /api/service/hourse_keeping/{id} | DELETE | | 用户id | | | ```java /** * GET 方法,按照id获取家政信息 * @param id 家政服务的编号id * @return */ URL:/api/service/hourse_keeping/{id} 说明:{id}应该替换成1、2、3、4、5、6、7这样的,如/api/services/hourse_keeping/1 方法:DELETE 【请注意,这里叫delete方法!】 返回示例: { "code": "200", "msg": "成功" } ``` #### 5.6 推送服务 ##### 5.6.1 推送一条任意消息体至指定的设备ID | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :-------------------------------: | :--: | :--: | :--: | :-----: | ---- | | /api/services/transmission/custom | POST | | 见例子 | 成功、未知错误 | | ```java /** * 转发任意的消息体到指定到手机 * * @param json * @return */ URL:/api/services/transmission/custom 方法:POST 格式:JSON 参数:以下所有参数均【必须】 参数示例: { "from":"3", "to":"1", "message":"消息体放的东西,随便放,字符串" } 返回示例: { "code": "200", "msg": "成功" } ``` ##### 5.6.2 推送一条任意消息体到指定的设备ID(群发) | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :---------------------------------: | :--: | :--: | :--: | :-----: | ---- | | /api/services/transmission/allusers | POST | | 见例子 | 成功、未知错误 | | ```java /** * 转发任意的消息体到指定到手机 * * @param json * @return */ URL:/api/services/transmission/allusers 方法:POST 格式:JSON 参数:以下所有参数均【必须】,to是一个json数组 参数示例: { "from":"3", "to":[ "user":"user的id", "user":"user的id" ], "message":"消息体放的东西,随便放,字符串" } 返回示例: { "code": "200", "msg": "成功" } ``` ##### ####5.7 闹钟服务 ##### 5.7.1 增加/更新一个闹钟信息 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :---------------------: | :--: | :--: | :--: | :--: | ---- | | /api/services/alarm/add | POST | | | | | ```java URL:/api/services/alarm/add 方法:POST 格式:JSON 参数:以下所有参数均【必须】,这里注意,是被监护人id,不是用户id。 参数示例: { "ugid":"12", "infomation":"{json串}" } 返回示例: { "code": "200", "msg": "成功" } ``` ##### 5.7.2 删除一个闹钟信息 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :------------------------: | :----: | :--: | :----: | :--: | ---- | | /api/services/alarm/{ugid} | DELETE | | 被监护人id | | | ```java URL:/api/services/alarm/{ugid} 方法:DELETE 示例:http://localhost:8080/api/services/alarm/12 返回示例: { "code": "200", "msg": "成功" } ``` ##### 5.7.3 查询闹钟信息 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :------------------------: | :--: | :--: | :----: | :--: | ---- | | /api/services/alarm/{ugid} | GET | | 被监护人id | | | ```java URL:/api/services/alarm/{ugid} 方法:GET 示例:http://localhost:8080/api/services/alarm/12 返回示例: { "code": "200", "msg": "成功" } ``` #### 5.8 紧急呼救提醒 | URL地址 | 方法 | 参数格式 | 参数 | 返回 | 备注 | | :----------------------------------: | :--: | :--: | :---: | :--: | ---- | | /api/services/transmission/emergency | POST | | 用户的id | | | ```java URL: /api/services/transmission/emergency 方法:GET 示例:http://localhost:8080/api/services/transmission/emergency 参数示例: { "from":"用户的id", "message":"json字符串信息" } 返回示例: { "code": "200", "msg": "成功" } ``` #### ### 6 JPush SDK集成到APP中 #### 6.1 环境说明 - Android SDK 版本:目前SDK只支持Android 2.3或以上版本的手机系统。 - 参考文档:https://docs.jiguang.cn/jpush/client/Android/android_guide/ #### 6.2 jcenter 自动集成步骤 *说明*: 使用jcenter自动集成的开发者,不需要在项目中添加jar和so,jcenter会自动完成依赖;在AndroidManifest.xml中不需要添加任何JPush SDK 相关的配置,jcenter会自动导入。 - 如果开发者需要修改组件属性,可以在本地的 AndroidManifest 中定义同名的组件并配置想要的属性,然后用 xmlns:tools 来控制本地组件覆盖 jcenter 上的组件。示例: ```xml …… …… …… ``` - 确认android studio的 Project 根目录的主 gradle 中配置了jcenter支持。(新建project默认配置就支持) ```Java buildscript { repositories { jcenter() } ...... } allprojets { repositories { jcenter() } } ``` - 在 module 的 gradle 中添加依赖和AndroidManifest的替换变量。 ```Java android { ...... defaultConfig { applicationId "com.xxx.xxx" //JPush上注册的包名. ...... ndk { //选择要添加的对应cpu类型的.so库。 abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a' // 还可以添加 'x86', 'x86_64', 'mips', 'mips64' } manifestPlaceholders = [ JPUSH_PKGNAME : applicationId, JPUSH_APPKEY : "你的appkey", //JPush上注册的包名对应的appkey. JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可. ] ...... } ...... } dependencies { ...... compile 'cn.jiguang.sdk:jpush:3.0.9' // 此处以JPush 3.0.9 版本为例。 compile 'cn.jiguang.sdk:jcore:1.1.7' // 此处以JCore 1.1.7 版本为例。 ...... } ``` **注** : 如果在添加以上 abiFilter 配置之后android Studio出现以下提示: ``` NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin ``` 则在 Project 根目录的gradle.properties文件中添加: ``` android.useDeprecatedNdk=true ``` **说明**:若没有res/drawable-xxxx/jpush_notification_icon这个资源默认使用应用图标作为通知icon,在5.0以上系统将应用图标作为statusbar icon可能显示不正常,用户可定义没有阴影和渐变色的icon替换这个文件,文件名不要变。 #### 6.3 手动集成JPush SDK步骤 请下载SDK:https://docs.jiguang.cn/jpush/resources/ 请阅读并集成:https://docs.jiguang.cn/jpush/client/Android/android_guide/#_5 ###7 百度定位 SDK集成 #### 7.1 环境说明 - 官方文档链接:http://lbsyun.baidu.com/index.php?title=android-locsdk - SDK 下载链接:http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download - 集成和开发步骤:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/create-project/android-studio ### 8 字段规范(补充) > 规定:全部以下划线的方式分割两个单词,不出现任何‘-’减号 | 用户ID | u_id | | :----------: | :-----------: | | 用户名 | username | | 用户密码 | password | | 用户电话 | telphone | | 用户头像base64编码 | image | | 用户类型 | type | | 注册时间 | register_time | | 设备ID | device_id | | 验证码 | verify_code | | 用户备注 | remark | | | | | 监护人id | gid | | 被监护人id | bgid | | 第三方id | otherid | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |