前端
(前端具体设计由前端完成,这里仅仅提及部分需要前端按要求完成的操作)
- 对于发布任务,任务命名格式的format属性,使用占位符实现,具体逻辑如下:
'#'代表任务名
'&'代表学生姓名
'*'代表学生学号
那么对于某次名为”Java实验报告“的任务,命名格式为"18软1#-*-&",姓名为M的学生,学号为1812001000,那么他的文件最终名为”18软1-Java实验报告-1812001000-M.docx“
-
对于删除任务,需要重新调用登录接口进行核实身份,如果通过,给予进入删除页面
-
对于需要的数据,直接调用相关的数据接口,并缓存在本地,避免给服务器造成太大压力,除非需要更新数据,否则应尽量避免请求用户信息和任务信息。
-
对于模板文件和示例文件,通过请求任务ID映射接口,可以获得这两个文件在服务器的保存路径,然后使用随机文件下载请求即可完成对于这两个文件的下载。在显示未提交和已提交页面时,可以把这两个文件的下载链接做成按钮的形式一并显示。
后端
1. 数据库设计
1.1. 用户权限数据库
1.1.1. sys_user:
列名 | 数据类型 | 要求 |
---|---|---|
id | bigint | auto_increment primary key // 自增主键 |
username | char(60) | not null // 用户名,比如邮箱,做验证用 |
password | varchar(255) | not null // 密码 |
nickname | varchar(60) | default '' // 昵称,暂时默认空 |
salt | varchar(25) | not null // 盐值 |
state | int | default 0 // 状态,默认0,可用 |
1.1.2. sys_role:
列名 | 数据类型 | 要求 |
---|---|---|
id | bigint | auto_increment primary key // 自增主键 |
name | char(60) | not null // 角色名 |
desc | varchar(60) | default '' // 描述 |
is_available | bool | default true // 是否可用 |
1.1.3. sys_permission:
列名 | 数据类型 | 要求 |
---|---|---|
id | bigint | auto_increment primary key // 自增主键 |
name | char(60) | not null // 许可名 |
desc | varchar(60) | default '' // 描述 |
resource_type | varchar(60) | default '' // 资源类型 |
url | varchar(60) | default '' // 资源地址 |
parent_id | bigint | default 0 // 父id |
parent_ids | varchar(255) | default '' // 父id组 |
is_available | bool | default true // 是否可用 |
1.1.4. sys_user_roles:
列名 | 数据类型 | 要求 |
---|---|---|
id | bigint | auto_increment primary key // 自增主键 |
sys_user_id | bigint | not null // 用户id |
sys_role_id | bigint | not null // 角色id |
1.1.5. sys_user_permissions:
列名 | 数据类型 | 要求 |
---|---|---|
id | bigint | auto_increment primary key // |
sys_user_id | bigint | not null // |
sys_permission_id | bigint | not null // |
1.1.6. sys_role_permissions:
列名 | 数据类型 | 要求 |
---|---|---|
id | bigint | auto_increment primary key // |
sys_role_id | bigint | not null // |
sys_permission_id | bigint | not null // |
1.2. 用户信息数据库
1.2.1. user_to_student
列名 | 数据类型 | 要求 |
---|---|---|
user_id | bigint | not null primary key // 主键,和user的id一一对应 |
student_number | bigint | not null // 学号 |
name | varchar(10) | not null // 姓名 |
school | varchar(128) | not null // 学校 |
major | varchar(64) | not null // 专业 |
institude | varchar(64) | not null // 学院 |
grade | int | default 1970 // 年级 |
classroom | int | default -1 // 班级 |
1.2.2. user_extension |
列名 | 数据类型 | 要求 |
---|---|---|
user_id | bigint | not null primary key // 主键,和user表的主键一一对应 |
icon | varchar(255) | default '' // 头像 |
bigint | default -1 // QQ账号 | |
varchar(60) | default '' // 微信号 | |
alipay | varchar(60) | default '' // 支付宝账号 |
phone_number | bigint | not null // 手机号 |
1.2.3. user_task: |
列名 | 数据类型 | 要求 |
---|---|---|
user_id | bigint | not null, primary key, // user表的id |
undo_tasks | varchar(5120) | // 未完成任务 |
done_tasks | varchar(5120) | // 已完成任务 |
launched_tasks | varchar(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_id | bigin | auto_increment primary key // 任务ID |
launcher_id | bigint | not null // user表的id |
task_begin_time | bigint | not null // 发布时间 |
task_end_time | bigint | not null // 截止时间 |
undo_ids | varchar(5120) | default '' // 未提交的用户 |
done_ids | varchar(5120) | default '' // 已提交的用户 |
task_name | varchar(128) | not null // 任务名 |
task_file_directory | varchar(255) | not null // 文件路径 |
task_file_template | varchar(255) | default '' // 模板文件在服务器里的路径 |
task_file_sample | varchar(255) | default '' // 示例文档在服务器里的保存位置 |
format | varchar(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. 给管理员留后门,可以更新用户信息,这个暂时不写。