fmx789 / kpt

课设服务器code

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

➿ kpt

大三下课设 - 智能门禁系统后端

🚀 API

API 根域名:http://112.124.21.59:8000

数据库后台:http://112.124.21.59:9999

API 返回数据均为以下格式

{
    "s": 0,
    "m": "0",
    "d": null
}
  • s - 状态码
    • 0 - 响应成功
    • 其他 - 错误码
  • m - 状态消息
  • d - 相应数据

💩 登录

发送邮件验证码

  • 接口解释

用来获取传给 /token 接口的邮件验证码

  • 请求示例
方法 URI 说明 需要 token
GET /code?uid=2017213033 发送验证码给该学号绑定的邮箱地址

获取 token

  • 接口解释

⚠️ 请求下面需要 token 的接口时,需要将该获取的 token 作为请求头的 Access-Token 字段的值,否则接口会直接拦下该请求并返回状态 403 Forbidden

  • 请求示例
方法 URI 说明 需要 token
GET /token?uid=2017213033&code=631071 获取登陆 token
  • 请求参数说明
    • code - 邮箱验证码

💩 用户

获取学生信息

  • 请求示例
方法 URI 说明 需要 token
GET /auth/user?uid=2017213033 获取学号为2017213033的学生信息
GET /auth/user?name=范铭贤&status=1 获取范铭贤的学生信息
GET /auth/user?status=2 获取所有管理员的信息
GET /auth/user?class_id=08051703 获取08051703班的所有学生信息
GET 以此类推 以此类推
  • 返回数据
{
    "uid": "2017213033", // 学号
    "cid": "device_id_1", // RFID 卡号
    "class_id": "08051703", // 班级号
    "name": "范铭贤", // 姓名
    "email": "793414991@qq.com", // 邮箱地址
    "status": 1, // 状态
    "ctime": 1591289287, // 创建时间
    "mtime": 1591289287  // 更新时间
},
  • 返回字段说明
    • status
      • 0 - 被 ban 用户
      • 1 - 一般用户
      • 2 - 管理员

添加一条学生信息

  • 请求示例
方法 URL 说明 需要 token
POST /auth/user 请求JSON数据如下
  • 请求数据示例
{
    "uid": "2017213033", // 学号
    "cid": "device_id_1",  // RFID 卡号
    "class_id": "08051703",  // 班级号
    "name": "范铭贤", // 姓名
    "email": "793414991@qq.com"  // 邮箱地址
}

⚠️ status 字段会默认设为 1

更新学生信息

  • 请求示例
方法 URL 说明 需要 token
PUT /auth/user 请求JSON数据如下
  • 请求数据示例
{
    "uid": "2017213033", // 学号,必须字段!
    "email": "1653813801@qq.com"  // 要更新的邮箱地址
}

这样就会把学号为 2017213033 的学生的邮箱改为 1653813801@qq.com

⚠️ 若尝试使用该接口更改 status 字段,则更改无效。

删除一条学生信息

  • 请求示例
方法 URL 说明 需要 token
DELETE /auth/user?uid=2017213033 软删除学号为2017213033学生的信息

⚠️ 该删除接口不会真正删除数据,只会将该学生的 status 字段更改为 0

💩 打卡

添加一条打卡记录

  • 请求示例
方法 URL 说明 需要 token
POST /pr/punch 请求JSON数据如下
  • 请求数据示例
{
    "uid": "2017213033",
    "name": "范铭贤",
    "phone": "173478987xx",
    "location": "重庆市南岸区重庆邮电大学",
    "is_temperature_ok": true,
    "did_meet_hubei": false,
    "has_symptom": false,
    "is_family_diagnosed": false,
    "did_meet_diagnoses": false,
    "is_family_suspected": false
}

按学号获取打卡记录

  • 请求示例
方法 URL 说明 需要 token
GET /pr/punch?uid=2017213033 获取学号为2017213033的打卡记录
GET /pr/punch?uid=2017213033&name=范铭贤 获取学号为2017213033且名字为范铭贤的打卡记录
GET /pr/punch?is_temperature_ok=false 获取体温不正常的打卡记录
GET 以此类推 以此类推
  • 返回数据示例
{
    "s": 0,
    "m": "0",
    "d": [
        {
            "id": 1,  // ID,该字段不重要
            "uid": "2017213033",  // 学号
            "name": "范铭贤",  // 姓名
            "phone": "173478987xx",  // 手机号码
            "location": "重庆市南岸区重庆邮电大学",  // 当前所在地
            "is_temperature_ok": true,  // 体温是否正常
            "did_meet_hubei": false,  // 是否接触湖北人员
            "has_symptom": false,  // 有无症状
            "is_family_diagnosed": false,  // 本人或家人是否确诊
            "did_meet_diagnoses": false, // 是否接触确诊人员
            "is_family_suspected": false,  // 本人或家人是否为疑似病例
            "ctime": 1591190705  // 打卡时间戳
        }
    ]
}

获取时间段内打卡记录

  • 请求示例
方法 URL 说明 需要 token
GET /pr/punch/between?from=2020-05-30&to=2020-06-04 获取2020/5/30到2020/6/3的所有打卡记录
  • 返回数据的结构与上一个 API 相同

删除一条打卡记录

  • 请求示例
方法 URL 说明 需要 token
DELETE /pr/punch?id=1 永久删除id为1的打卡记录

💩 门禁

添加一条门禁记录

  • 请求示例
方法 URL 说明 需要 token
POST /ac/rfid 请求JSON数据如下 暂不
  • 请求数据示例
{
	"uid": "2017213033", // 学号
  "cid": "32_bits_device_id", // RFID 卡号
	"type": 1
}
  • 请求参数说明
    • type - 门禁类型
      • 1 - 刷进
      • 2 - 刷出

按学号获取门禁记录

  • 请求方法和地址
方法 URL 说明 需要 token
GET /ac/rfid?uid=2017213033 获取学号为2017213033学生的门禁记录 暂不
  • 返回数据示例
{
    "s": 0,
    "m": "0",
    "d": [
        {
            "uid": "2017213033",
            "cid": "32_bits_device_id",
	       		"type": 1,
            "ctime": 1591190705
        }
    ]
}

获取时间段内门禁记录

  • 请求示例
方法 URL 说明 需要 token
GET /ac/rfid/between?from=2020-05-30&to=2020-06-04 获取2020/5/30到2020/6/3的所有门禁记录 暂不
  • 返回数据的结构与上一个 API 相同

删除一条门禁记录

  • 请求示例
方法 URL 说明 需要 token
DELETE /ac/rfid?id=1 永久删除id为1的门禁记录 暂不

💩 体温

添加一条体温记录

  • 接口解释

人脸识别获取的学号和测得的体温一起作为该接口的请求参数。

  • 请求示例
方法 URL 说明 需要 token
POST /ac/temp 请求JSON数据如下 暂不
  • 请求数据示例
{
	"uid": "2017213033", // 学号
  "temp": 36.2, // 体温
}

按学号获取体温记录

  • 请求示例
方法 URL 说明 需要 token
GET /ac/temp?uid=2017213033 获取学号为2017213033学生的体温记录 暂不
  • 返回数据示例
{
    "s": 0,
    "m": "0",
    "d": [
        {
            "uid": "2017213033",
            "temp": 36.2,
            "ctime": 1591190705  // 测温时间戳
        }
    ]
}

获取时间段内体温记录

  • 请求示例
方法 URL 说明 需要 token
GET /ac/temp/between?from=2020-05-30&to=2020-06-04 获取2020/5/30到2020/6/3的所有体温记录 暂不
  • 返回数据的结构与上一个 API 相同

删除一条体温记录

  • 请求示例
方法 URL 说明 需要 token
DELETE /ac/temp?id=1 永久删除id为1的体温记录 暂不

💩 应用

⚠️ ⚠️ 使用硬件访问该项目的接口需要先注册应用,获取 AppIDAppKey,然后使用该 AppIDAppKey 去获取应用Token 。在请求头里添加 Access-Token: 应用Token 字段才能成功请求接口。

⚠️ ⚠️ 应用Token和上面的用户Token一样,有默认一周的生存时间,成功获取到Token一周后,Token会失效,所以需要开发者在项目里定期重新获取Token。

注册应用

  • 请求示例
方法 URL 说明 需要 token
POST /auth/app 请求JSON数据如下 app token
  • 请求数据示例
{
  "uid": "2017213033"
}

表示用学号 2017213033 注册一个应用

  • 返回数据示例
{
	"s": 0,
	"m": "0",
	"d": {
			"appid": "2U7FSx8momoW7WiKVSZ58k",
			"appkey": "2hamZaaTLvRAKcbgAU34Y8",
			"uid": "2017213033",
		"ctime": 0
	}
}
  • 返回参数说明
    • appid - 应用的 App ID
    • appkey - 应用的 App Key
    • uid - 应用注册者的 ID

查询已注册的应用

  • 请求示例
方法 URL 说明 需要 token
GET /auth/app?uid=2017213033 查询学号2017213033注册的应用

💩 应用 Token

⚠️ 应用 token 用来访问下面的门禁体温接口。

获取应用 token

  • 请求示例
方法 URL 说明 需要 token
GET /apptoken?uid=2017213033&appid=xxx&appkey=xxx 应用AppID为xxx的应用获取 token

💩 门禁

添加一条门禁记录

  • 请求示例
方法 URL 说明 需要 token
POST /ac/rfid 请求JSON数据如下
  • 请求数据示例
{
	"uid": "2017213033", // 学号
  "cid": "32_bits_device_id", // RFID 卡号
	"type": 1
}
  • 请求参数说明
    • type - 门禁类型
      • 1 - 刷进
      • 2 - 刷出

按学号获取门禁记录

  • 请求方法和地址
方法 URL 说明 需要 token
GET /ac/rfid?uid=2017213033 获取学号为2017213033学生的门禁记录
  • 返回数据示例
{
    "s": 0,
    "m": "0",
    "d": [
        {
            "uid": "2017213033",
            "cid": "32_bits_device_id",
	       		"type": 1,
            "ctime": 1591190705
        }
    ]
}

获取时间段内门禁记录

  • 请求示例
方法 URL 说明 需要 token
GET /ac/rfid/between?from=2020-05-30&to=2020-06-04 获取2020/5/30到2020/6/3的所有门禁记录
  • 返回数据的结构与上一个 API 相同

删除一条门禁记录

  • 请求示例
方法 URL 说明 需要 token
DELETE /ac/rfid?id=1 永久删除id为1的门禁记录

💩 体温

添加一条体温记录

  • 接口解释

人脸识别获取的学号和测得的体温一起作为该接口的请求参数。

  • 请求示例
方法 URL 说明 需要 token
POST /ac/temp 请求JSON数据如下
  • 请求数据示例
{
	"uid": "2017213033", // 学号
  "temp": 36.2, // 体温
}

按学号获取体温记录

  • 请求示例
方法 URL 说明 需要 token
GET /ac/temp?uid=2017213033 获取学号为2017213033学生的体温记录
  • 返回数据示例
{
    "s": 0,
    "m": "0",
    "d": [
        {
            "uid": "2017213033",
            "temp": 36.2,
            "ctime": 1591190705  // 测温时间戳
        }
    ]
}

获取时间段内体温记录

  • 请求示例
方法 URL 说明 需要 token
GET /ac/temp/between?from=2020-05-30&to=2020-06-04 获取2020/5/30到2020/6/3的所有体温记录
  • 返回数据的结构与上一个 API 相同

获取当天的体温记录

  • 请求示例
方法 URL 说明 需要 token
GET /ac/temp/today 获取当天所有体温记录
GET /ac/temp/today?uid=2017213033 获取学号为2107213033学生当天的体温记录
  • 返回数据的结构与上一个 API 相同

删除一条体温记录

  • 请求示例
方法 URL 说明 需要 token
DELETE /ac/temp?id=1 永久删除id为1的体温记录

💩 统计数据

获取当天体温统计数据

  • 请求示例
方法 URL 说明 需要 token
GET /stat/temp 获取当天体温检测统计数据
  • 返回数据示例
{
    "s": 0,
    "m": "0",
    "d": {
        "total": 3,
        "normal": {
            "total": 2,
            "temps": [
                {
                    "uid": "2017213033",
                    "temp": 36.5
                },
                {
                    "uid": "2017213034",
                    "temp": 36.2
                }
            ]
        },
        "abnormal": {
            "total": 1,
            "temps": [
                {
                    "uid": "2017213040",
                    "temp": 33.7
                }
            ]
        }
    }
}
  • 返回参数说明
    • abnormal - 异常体温数据
    • normal - 正常体温数据
    • total - 总个数

获取当天未测体温的用户

  • 接口解释

如需要在每天固定时间给未测体温的人发送提醒邮件,则需要开发者自行编写定时任务请求此接口即🉑。

  • 请求示例
方法 URL 说明 需要 token
GET /stat/notemp 获取当天未测体温的用户
GET /stat/notemp?warn=true 获取当天未测体温的用户并给他们发提醒邮件

获取当天已刷门禁用户的最后记录

  • 请求示例
方法 URL 说明 需要 token
GET /stat/rfid/last 获取当天已刷门禁用户的最后记录
  • 返回数据示例
{
    "s": 0,
    "m": "0",
    "d": {
        "total": 2,
        "out": {
            "2017213033": {
                "id": 15,
                "uid": "2017213033",
                "rfid": "test_device_id_33",
                "type": 1,
                "ctime": 1593136471
            }
        },
        "in": {
            "2017213056": {
                "id": 14,
                "uid": "2017213033",
                "rfid": "test_device_id_33",
                "type": 2,
                "ctime": 1593136456
            }
        }
    }
}
  • 返回参数说明
    • in - 最后刷入记录
    • out - 最后刷进记录

获取当天还未归寝的用户

  • 接口解释

如需要在每天固定时间给当天还未归寝的人发送提醒邮件,则需要开发者自行编写定时任务请求此接口即🉑。

  • 请求示例
方法 URL 说明 需要 token
GET /stat/rfid/nochkin 获取当天未最后未刷入门禁的用户
GET /stat/rfid/nochkin?warn=true 获取当天未最后未刷入门禁的用户并向他们发送提醒归寝邮件
  • 返回数据示例
{
    "s": 0,
    "m": "0",
    "d": [
        {
            "user": {
                "id": 3,
                "uid": "2017213033",
                "cid": "device_id_1",
                "class_id": "08051703",
                "name": "范铭贤",
                "email": "793414991@qq.com",
                "status": 2,
                "ctime": 1591876165,
                "mtime": 1591876192
            },
            "last_checkout": 1593139097
        }
    ]
}
  • 返回数据参数说明
    • last_checkout - 当天最后一次门禁刷出时间

🌚 Attention

About

课设服务器code

License:MIT License


Languages

Language:Go 90.2%Language:TSQL 7.9%Language:HTML 1.3%Language:Dockerfile 0.7%