1 Star 0 Fork 0

JIAN / 点餐管理系统-Web版

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

工具使用情况

工具 版本 说明
dom4j 2.1.4 解析 XML 文件
fastjson2 2.0.47 解析和生成 JSON 字符串
nimbus-jose-jwt 9.37.3 JSON Web Token

应用框架搭建

  • 能够读取properties配置文件,并通过对应配置去初始化自己的应用程序(配置需要有默认值)(将你应用程序可配置的参数在README中使用表格说明清楚)

    • 需要根据配置文件的参数初始化服务
  • 优雅关停自己的应用程序

    • 关闭服务时需要做到优雅关停
  • 使用你搭建的框架,在应用程序中内嵌一个web服务器,可使用tomcat,也可以自行使用netty构建

  • 实现参数自动校验(参考JSR-303衍生出来的相关注解,如@NotNull、@NotEmpty、@Range等,注解自己定义,不能使用javax和hibernate包下的注解)

  • 对系统不同的异常进行集中处理(通过代理,注解,反射去实现)

  • 实现接口权限鉴定(基于RBAC)

  • 学习AOP面向切面编程

  • 实现请求转发器(路由器)来增强你的web服务能力

  • 通过依赖注入(DI, Dependency Injection)进行控制反转(IoC, Inverse of Control),使用全局上下文进行全局对象的对象间依赖注入(使用注解),不要出现直接new service、和new dao层的代码

    参数和Spring中的配置一致,很多参数无效(

  • 实现orm,进行SQL构建和结果映射,达到方便开发的目的

    参数和Mybtis中的配置一致,很多参数无效(

  • 实现数据库连接池

AppConfig.properties配置参数
参数 说明
tomcat.baseDir 指定服务器部署的真实路径,可选,默认将由tomcat决定
tomcat.port 指定服务器监听的端口,可选,默认为8080
tomcat.host 指定服务器的主机名,可选,默认为localhost
tomcat.encoding 指定请求和响应的编码,可选,默认为UTF-8
tomcat.corsURL 指定允许跨域连接的地址,多个地址用 ; 分隔
tomcat.secret 指用于JWT加密和校验的密钥,至少为32个字符长
tomcat.contextPath 指定本应用的根路径,可选,默认为空即 /
tomcat.contextListener 指定上下文对象的监听器的全限定类名,可选
tomcat.param.xxx 指定上下文对象的初始化参数,xxx为参数名,指定的值为参数值,可选
参数 说明
tomcat.filter.package 指定服务器需要添加的过滤器包名
tomcat.servlet.package 指定服务器需要添加的servlet包名
orm框架可优化点
  • 通过包定位类并自动扫描
  • 自动获取插入后的主键
  • 没有别名系统指定类型时较复杂
  • 连接池的连接复用率不高(活动连接没有失效时长直接失效)
  • 单参数接口仍然需要显示指定参数名使用
  • 查询结果没有缓存机制
ioc框架可优化点
  • 通过包定位类自动扫描
  • 循环依赖会导致程序死循环

业务需求

  • 可以在后台开启一个秒杀活动,可以设置开始时间、结束时间、酒水数量等等

    • 新建一个秒杀活动后,用户可以看到对应的秒杀活动,但是无法进行抢购

    • 当到达指定时间时,开放抢购功能

    • 当酒水数量不足或者到达结束时间后,可以定时关闭用户对该秒杀活动页面的可见性或者后台手动控制使该页面失效(定时任务的设计思路写进README中)

      • 思路:设置一个专门用于开启关闭活动的线程池,创建定时任务在设定的时间到达之后再调用Dao层代码更改活动的状态,期间用户可以正常请求,可以由前台监测结束时间,过了结束时间仍然可以显示信息但不能操作,当监测到活动为结束状态时关闭界面
    • 后台可设置周期性地开展某款酒水的秒杀活动(同上,写进README中)

      • 思路:设置一个专门用于开启关闭活动的线程池,设置周期性任务,在每一次秒杀活动结束时自动计算下一次的时间,并新建秒杀活动对象存储进入数据库,同时加入正在执行的活动集合,在数据库中增加是否为周期活动的字段,并保存周期的长度

        为了能够取消周期任务,可以用一个Map存储所有的活动周期性任务,其键就是对应当前正在准备活动的id,其值就是周期任务对象,可由前台发送数据并取消

  • 当秒杀活动未开始时,后台可更新秒杀活动的相关数据

  • 当秒杀活动进行时,后台可暂停秒杀活动

    • 必要性/可行性:从用户角度,一般来说活动开始之后不会暂停;从技术来说,秒杀活动的时间一般都很短,出现同时有大量请求请求服务器进行秒杀,发送暂停的请求可能会被阻塞,不一定可以100%成功暂停,如果需要实现这种效果我认为对秒杀请求专门设置服务器进行响应,而对秒杀活动状态和数据更改等由另一个服务器实现,前端除了发送请求秒杀之外,同时开启定时任务获取活动状态
    • 思路:统一秒杀活动的状态为数据库的一个字段,包含四个状态:准备、进行、暂停、取消、删除对应数字0~4,实行软删除策略保留各个数据,在更新状态时在业务层校验是否允许修改到对应指定的状态即可
  • 客户成功抢购后,可抢购的酒水数量需要减少

  • 当用户抢购成功后,需要在预定时间内支付相应的金额,否则抢购失败,可抢购的酒水数量需要增加

  • 当秒杀活动未开始时,或者结束后,可删除秒杀活动,但是为了以后进行数据统计,你需要保留本次历史秒杀活动的数据(把你的设计思路写进README中)

    • 思路:统一秒杀活动的状态为数据库的一个字段,包含四个状态:准备、进行、暂停、取消、删除对应数字0~4,实行软删除策略保留各个数据,在更新状态时在业务层校验是否允许修改到对应指定的状态即可
  • 为了渲染酒水的火爆气氛,秒杀活动页面需要添加浏览人数(把你的设计思路写进README中)

    • 思路:将业务层实例设置为单例模式,其中使用一个Map储存每一个正在/准备进行的秒杀活动对象,通过其活动id作为键标识,秒杀活动对象中存储活动的实时信息,比如购买人数/浏览人数等等,当活动结束/商品抢购完毕时,从Map中移除该活动,并将本次的信息存入数据库中保存,考虑到并发的数据安全,这些实时信息可以使用 volatile锁 + 原子类 管理,并对执行相关的函数时的代码加锁

系统需求

  • 为了提高系统的安全性,用户请求接口时需要携带jwt token作为身份验证
  • 为了提高系统的可运维性,你按照合适的日志等级输出有用的日志信息到指定路径的文件中,以便上线后可以通过日志发现问题(日志文件需要提交)
缓存
微服务
削峰限流
接入层

空文件

简介

暂无描述 展开 收起
JavaScript 等 3 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/JIAN205/DishManageSys-Web.git
git@gitee.com:JIAN205/DishManageSys-Web.git
JIAN205
DishManageSys-Web
点餐管理系统-Web版
master

搜索帮助