基于 Gin 的会议室预约 API 设计 (二)

会议室预约功能模块大概可以分为三大部分
预约模块
黑名单模块
日志模块

预约模块
  1. 请求占用时间表,验证请求时间是否被占用,没有则进行第2步,有则返回失败
  2. 创建预约,并将请求写入操作日志
  3. 向占用时间表插入数据

  • 假设用户选中 2018-08-30 08:00~09:00 的时间在一号会议室开会
  • 在创建订单的时候我会先从占用时间表 used_time 查找 一号会议室 2018-08-30 里有没有 08:0008:30
  • 如果有返回时间已被占用,创建失败
  • 没有就创建预约,并纪录日志
  • 然后再占用时间表里插入 一号会议室 2018-08-3008:0008:30 时间段
  • 最后返回 201 给前端

黑名单模块
  1. 统计用户的违约次数,若一个自然季度内违约超过3次,则纳入黑名单,一个月内禁止预约
  2. 什么为违约,会议室预定审批通过后,需要在会议开始前30分钟再次登录预约平台确认方可生效,如会议开始后15分钟仍未做确认,系统自动取消预定申请。被系统自动取消则为违约
  3. 怎么统计一个季度内订单违约的次数呢,这里我使用Mysq 时间函数 QUARTER
SELECT id,user,erp,COUNT('status') AS count
FROM  `meeting_books` 
WHERE QUARTER(DAY) = QUARTER(NOW()) 
AND YEAR(DAY) = YEAR(NOW())  
AND  status=5 ANd  GROUP BY user  HAVING COUNT('user')>3

这里我是非实时计算,每隔4小时统计一次
如果要实时统计由于使用不了索引效率非常底,因为这里使用了内置函数还使用了 GROUP BY HAVING COUNT

  • 优化的话可以使用redis string类型INCR 作为原子计数器,例如以 blacklist:用户名:用户id 为键
    违约一次就增一,以三个月为过期时间 ,但要记得控制如果值大于3 了,要控制程序把键的值清零

  • 这里还需要考虑的问题是我封禁了用户一个月是根据他在黑名单,但例如我 1月15号 封禁了用户 2月15号 就解除了封禁
  • 那我需要把之前违约的纪录给清除掉,不然只要该用户当季度在违约就会立刻加入黑名单
  • 所以我们需要统计预约违约的时候知道这个预约是否之前被纳入过黑名单
  • 没有我们就统计,有的话就忽略
  • 我的做法是在订单表加一个字段is_blacklist,统计的时候只统计is_blacklist = 0 的,即不在黑名单的
  • 但要记得在统计用户违约纪录大于3的时候,把用户违约的预定的 is_blacklist 置为 1

日志模块
  • 因为预约会议室的行为是一种资源操作的行为
  • 对于这种行为我们是要纪录日志的
  • 纪录日志确实非常简单,就是在每一步操作后,向 日志表 纪录谁谁谁,什么什么时候,干了什么什么即可
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
gin-admin-api是一个基于Gin框架开发的后台管理系统的API接口。Gin框架是一个轻量级的、高性能的Go语言框架,具有路由和中间件的功能,适合用于构建Web应用程序。 gin-admin-api提供了一套完善的API接口,用于实现后台管理系统的各种功能,例如用户管理、角色管理、权限管理、菜单管理、日志管理等。通过这些接口,可以方便地进行用户的注册、登录和认证,管理用户的角色和权限,管理系统的菜单和日志信息。 gin-admin-api的优点之一是高性能。由于采用了Gin框架,它具有快速的路由匹配和中间件处理的能力,能够处理大量的请求,并在高并发的情况下保持稳定性和可靠性。 另一个优点是易于扩展和定制。gin-admin-api使用了模块化的设计,各个功能模块之间松耦合,可以根据实际需求进行灵活的扩展和定制。例如,可以根据业务需求添加新的功能模块,或者修改和优化已有的模块。 此外,gin-admin-api还提供了友好的文档和示例代码,方便开发者理解和使用。它的源代码也是开源的,可以在GitHub上找到,这样可以方便地进行次开发和定制,满足特定的业务需求。 总之,gin-admin-api是一个功能丰富、高性能、易扩展的后台管理系统API接口,大大简化了后台管理系统的开发工作,帮助开发者快速构建稳定、可靠的后台管理系统。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值