1.1 我的选课
背景介绍:
在项目的选课功能中碰到一个难题,是高校内的选课业务,有个难题的就是会出现高并发的现象,比如多个学生通过移动端或者pc端进行选课操作,多对一,进行数据库操作时难免出现脏读或幻读的现象;还有就是选课涉及的事务的隔离级别,不同线程对共享资源的访问需要隔离或者锁,需要保证资源的非共享性。每一门课的容量都如抢购一般,需要进行秒杀操作,保证每一门课都不能多“售出”。经过讨论初步决定使用redis进行线程的单操作,通过MQ才避免操作数据库时出现的并发现象。
1.1.1 原型图
1.1.2 功能描述
这个界面分为两个小界面,一个是公选课程,一个专选课程。若要选课,只需要点击选课,即可完成选课的操作,而且,被选的课程会置顶。而且剩余容量是跟着选课的动作依次减少的,所以实时刷新。若要退选课程,则只需要点击退选即可完成退选操作。
1.1.3 业务规则
随着学生的所选课程,要根据一定的业务规则显示该学生可选的课程(例如,加入这次的选课可以选取3门,都是来自外学院的,且该学生已经选取了周二晚上的课程,那么接下来显示的可选课程就应该是排除了周二晚上跟它冲突的课程,而且一旦学生已经选取了三门课程,那么接下来就不能再进行选课操作了。)
2.1设计接口
queryCoursePage : 按条件模糊查询;限制学院;
addCourse: 是否可选?课程冲突;时间冲突;数量冲突;
deleteCourse:删除对应选课信息;
刷新问题:不刷新?定时刷新?
3.1 实现思路
4.1 表关系
专业选修、
|
根据培养计划的course_type_id加载 |
公选 |
专选 |
|
||||
|
|
课程名称 |
上课时间 |
上课节次 |
授课老师 |
剩余容量 |
学分 |
课程性质 |
|
t_training_programs |
Course_id |
|
|
|
|
|
|
|
t_courseinfo |
Course_name |
|
|
|
|
Classpoint |
Coursenature_id |
|
t_teachclass |
|
|
Teacher_id |
|
|
||
|
t_curriculum_schedule |
|
Week_di |
cellTime_id |
|
|
|
|
|
T_user |
|
|
|
user_real_name |
|
|
|
|
字典表 |
|
|
|
|
|
|
|
公共选修(3B6FE3BAB12E3BA8AFE36D)
|
根据课程池的course_type_id加载 |
公选 |
专选 |
|
||||
|
|
课程名称 |
上课时间 |
上课节次 |
授课老师 |
剩余容量 |
学分 |
课程性质 |
|
T_course |
course_name(id) |
|
|
|
|
class_point |
course_nature_id |
|
t_teachclass |
|
Teachclass_id |
|
Teacher_id |
capacity |
|
|
|
t_curriculum_schedule |
|
Week_di |
cellTime_id |
|
|
|
|
|
T_user |
|
|
|
user_real_name |
|
|
|
|
字典表 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|