班级文档管理设计文档

318 阅读5分钟

前端

(前端具体设计由前端完成,这里仅仅提及部分需要前端按要求完成的操作)

  • 对于发布任务,任务命名格式的format属性,使用占位符实现,具体逻辑如下:

'#'代表任务名

'&'代表学生姓名

'*'代表学生学号

那么对于某次名为”Java实验报告“的任务,命名格式为"18软1#-*-&",姓名为M的学生,学号为1812001000,那么他的文件最终名为”18软1-Java实验报告-1812001000-M.docx“

  • 对于删除任务,需要重新调用登录接口进行核实身份,如果通过,给予进入删除页面

  • 对于需要的数据,直接调用相关的数据接口,并缓存在本地,避免给服务器造成太大压力,除非需要更新数据,否则应尽量避免请求用户信息和任务信息。

  • 对于模板文件和示例文件,通过请求任务ID映射接口,可以获得这两个文件在服务器的保存路径,然后使用随机文件下载请求即可完成对于这两个文件的下载。在显示未提交和已提交页面时,可以把这两个文件的下载链接做成按钮的形式一并显示。

后端

1. 数据库设计

1.1. 用户权限数据库

1.1.1. sys_user:

列名数据类型要求
idbigintauto_increment primary key // 自增主键
usernamechar(60)not null // 用户名,比如邮箱,做验证用
passwordvarchar(255)not null // 密码
nicknamevarchar(60)default '' // 昵称,暂时默认空
saltvarchar(25)not null // 盐值
stateintdefault 0 // 状态,默认0,可用

1.1.2. sys_role:

列名数据类型要求
idbigintauto_increment primary key // 自增主键
namechar(60)not null // 角色名
descvarchar(60)default '' // 描述
is_availablebooldefault true // 是否可用

1.1.3. sys_permission:

列名数据类型要求
idbigintauto_increment primary key // 自增主键
namechar(60)not null // 许可名
descvarchar(60)default '' // 描述
resource_typevarchar(60)default '' // 资源类型
urlvarchar(60)default '' // 资源地址
parent_idbigintdefault 0 // 父id
parent_idsvarchar(255)default '' // 父id组
is_availablebooldefault true // 是否可用

1.1.4. sys_user_roles:

列名数据类型要求
idbigintauto_increment primary key // 自增主键
sys_user_idbigintnot null // 用户id
sys_role_idbigintnot null // 角色id

1.1.5. sys_user_permissions:

列名数据类型要求
idbigintauto_increment primary key //
sys_user_idbigintnot null //
sys_permission_idbigintnot null //

1.1.6. sys_role_permissions:

列名数据类型要求
idbigintauto_increment primary key //
sys_role_idbigintnot null //
sys_permission_idbigintnot null //

1.2. 用户信息数据库

1.2.1. user_to_student

列名数据类型要求
user_idbigintnot null primary key // 主键,和user的id一一对应
student_numberbigintnot null // 学号
namevarchar(10)not null // 姓名
schoolvarchar(128)not null // 学校
majorvarchar(64)not null // 专业
institudevarchar(64)not null // 学院
gradeintdefault 1970 // 年级
classroomintdefault -1 // 班级
1.2.2. user_extension
列名数据类型要求
user_idbigintnot null primary key // 主键,和user表的主键一一对应
iconvarchar(255)default '' // 头像
qqbigintdefault -1 // QQ账号
wechatvarchar(60)default '' // 微信号
alipayvarchar(60)default '' // 支付宝账号
phone_numberbigintnot null // 手机号
1.2.3. user_task:
列名数据类型要求
user_idbigintnot null, primary key, // user表的id
undo_tasksvarchar(5120)// 未完成任务
done_tasksvarchar(5120)// 已完成任务
launched_tasksvarchar(5120)// 表示这个用户发布的任务有哪些

说明:

user_id是user的id,二者一一对应。

undo_tasks和done_tasks里面保存未提交和已提交的任务,形式为:<id1>;<id2>;<id3>;....其中id是task的id,类型为bigint,解析用split(";")进行分割。

lunched_tasks是一个数组<id1>;<id2>;<id3>;...组成,其中id为task_id。

1.3. 任务数据库

1.3.1 task

列名数据类型要求
task_idbiginauto_increment primary key // 任务ID
launcher_idbigintnot null // user表的id
task_begin_timebigintnot null // 发布时间
task_end_timebigintnot null // 截止时间
undo_idsvarchar(5120)default '' // 未提交的用户
done_idsvarchar(5120)default '' // 已提交的用户
task_namevarchar(128)not null // 任务名
task_file_directoryvarchar(255)not null // 文件路径
task_file_templatevarchar(255)default '' // 模板文件在服务器里的路径
task_file_samplevarchar(255)default '' // 示例文档在服务器里的保存位置
formatvarchar(32)not null // 命名格式

说明:

task_id是自增类型,对应user_task表的undo_task的id元素。

launcher_id是发布者的id。

lunch_time是发布时间,注意使用服务器时间时,使用UTC+8:00时间。

undo_ids是一个数组,保存了未完成的用户,done_ids同样。

task_name是任务名。

task_file_directory是服务器里的文件保存路径

task_file_template是模版文件的路径

format是命名格式

2. 基本功能设计

2.1. 登录/注册/更新信息

  • 2.2.1. 登录使用username+password的形式
  • 2.2.2. 注册需要用户邮箱(记得验证)和密码,以及学号信息
  • 2.2.3. 关于邮箱验证,对比验证码即可
  • 2.2.4. 关于更新个人信息,可以更新密码,QQ,手机号等信息

2.2. 查看/提交/覆盖任务

  • 2.2.1. 查看操作直接返回相关数据,后两个操作建立在已认证的基础上

2.3. 发布/更新/删除/查看任务提交情况

  • 2.3.1. 更新和删除操作都需要重新认证
  • 关于发布任务的具体流程,前端提交表单,里面包含了发布者,任务名,起始时间,结束时间,命名格式,作用范围,解析作用范围和时间,存储在数据库。

3. 实现细节

  • 3.1. 安全拦截。所有的操作全部基于安全加密,认证,授权,用户的相关操作权限等。
  • 3.2. 本次主要涉及四种角色:学生,班委,班长,教师。

学生:仅有查看未提交/已提交,提交,覆盖提交的权限。

班委:在学生的基础上可以发布/更新/删除任务;在这里更新一下,可以指定任务接受者,默认本班。

班长:在班委的基础上可以任命/撤职班委。

教师:在班委的基础上,可以对多个班级发布/更新/删除任务,但是没法精确到个人,只能指定哪些班接受任务

  • 3.3. 在发布任务时,除了指明任务命名格式,还可以附加示例文档,提交格式,截止时间。
  • 3.4. 返回的数据记得标准化。
  • 3.5. 给管理员留后门,可以更新用户信息,这个暂时不写。