数据库介绍
user表:这是一个管理员的表,用于存储可对后台进行操作的人员信息表,其中重要的字段包括包括主键ID,与权限等级,密码
room表:作为存储房间信息的表,重要的字段包括房间的主键ID,唯一的房号,类型ID,具体信息,价格,入住时间,退房时间,房间数,空闲房间数
room_cat房间的分类表:其表中具体信息包括ID与父级ID,分类的名字,房间状态,清洁状态,这里父级的意思代表着大分类,普通房下的普通房1、普通房2等,与room表联查就可以得到所有房间的分类汇总,一目了然所有房间的状态与清洁状态,这里的数据要与数据库实时更新,因此要从数据库中不停的查询,后面会把他放进redis里减少对数据库的访问,提高效率
用户表consumer:这个表主要是对用户信息的一个登记,用户名,密码,姓名,性别,身份证号,电话,邮箱,年龄,表中信息要实现唯一性,实现了,当用户没有提交订单付款,但是信息已经填,借助redis缓存机制保存,当用户在5分钟内再进入填写信息时,会先从redis中获取填写好的信息实现回显,超过五分钟就要求数据库再拿一遍,因此会加大数据库的负载,做的优化
用户的订单表consumerOrder:房间类型,用户姓名,联系电话,单价,下单时间,订单个数,总金额
rights菜单列表:主要是左边栏的分类菜单,字段包括 id 菜单名,父级id,菜单等级,创建时间,修改时间
具体业务
1.如何实现查询操作?我是基于MybatisPlus进行的数据库查询操作,遇到多表就将sql写在xml文件中。
2.如何实现订单房间的分配?当我们从前端接收到用户的订单根据订单中的房间类型去查询是否存在空房,有空房返回订单创建成功200,订单入库,房间表中对应类型的空闲房间-1,若无空房返回201,并且用户可以选择,到店分配房间还是线上直接分配,线上直接分配,根据用户订单中的房间类型ID查询对应的Room表中的房间,查询状态为true ,清洁状态为true的进行分配,这里涉及到多线程排队问题,使用LRU算法,LinkedHashMap,用户的ID作为排队的数据,当执行到对应ID时,进行遍历,遍历到对应的用户执行分配房间,成功返回创建订单成功200,当没有空闲房间时返回201创建订单失败
3.如何实现在固定时间内的数据快速回显?这里使用到的就是Docker+redis技术与Jedis,用户的ID作为Key,填入的信息都封装到一个consumerMsg对象中,作为value存入到redis中,设置Key的有效时长(单位为S),当用户二次进行下单的时候,判断流程是,先从redis中查询是否有数据,没有再就去数据库查询
4.如何实现前端页面与后端的动态绑定?使用VUE+Axios+Redis+Mysql
首先会从room表中拿取到设定好的房间分类,价格,以及剩余房间数, 存到Redis里,当有操作模块对库中的数据进行修改的方法时候,通过AOP切面方法,执行后置通知,通知中让Rdeis获取数据库最新的信息