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 |
|
|
|
字典表 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|