2021年 8月 25日
Aug 25

项目启动

1.进行项目开题——开题PPT
2.与小组成员一起学习使用Gitee团队开发
3.组长分配任务——我主要负责后端
首先学习使用IDEA和SpringBoot框架
实现通过接口接收数据

2021年 8月 26日
Aug 26

实现前后端接口

使用Spring Boot框架连接数据库
本项目使用PostgreSQL数据库
在本地已实现通过API接口获取数据
过程中遇到的问题:
项目/接口只能通过本地IP访问而外网无法访问
解决方案:
通过添加防火墙对于某一端口的规则解决了此问题

2021年 8月 27日
Aug 27

测试前后端数据交互

1.前端可以通过我提供的接口获取数据
2.后端暂时无法收到前端发送的数据
3.前端通过接口对后端数据库进行增删改暂未成功
仅能实现查询的功能——博客资料
过程中遇到的问题:
前端接收数据时遇到了跨域问题

2021年 8月 28日
Aug 28

后端成功接收前端数据

1.使用注解从前端接收数据 根据博客资料大概理解了
@PathVariable("...")和@RequestParam("...")传参的区别
2.实现了前端通过API端口对后端数据库进行增删改查的操作
3.与前端开发同学一起写开发文档——主要规定了项目接口格式
过程中遇到的问题:
启动项目后,在局域网中的用户都可以访问此项目,同理API接口也能被访问
怎么设置项目和接口不能被外界访问?

2021年 8月 29日
Aug 29

登录/注册页面测试成功

1.登陆界面由前端同学开发
2.用户名和密码均为字符串
3.已进行注册,登录的功能的测试
4.开始在团队仓库进行合作开发

2021年 8月 30日
Aug 30

制作用户个人主页

1.主页前端代码由前端同学完成
2.项目主页样式与功能模仿智慧树 访客可以浏览主页上的资源
而教师和学生可以登录到个人主页查看自己的信息和加入的课程
3.学习联合主键的使用来映射多个属性做主键的表——参考资料
4.新建表来存放用户一年每天的活跃度以及用户的个人信息
已实现用接口获取以上数据的功能,并未实现通过接口修改的功能

2021年 8月 31日
Aug 31

后端实现文件上传/下载

1.通过接口传输文件——参考资料
2.学习session和拦截器的使用——参考资料
用来记录和管理用户的登陆状态,进而开启/关闭用户的上传/下载等功能
过程中遇到的问题:
1.项目可正常启动,但是通过接口获取数据时返回空值
已解决:实体类中需要构建Getter and Setter,有对应函数后会正常返回数据
2.文件上传/下载功能暂未测试,不清楚如何通过接口传输文件的原理和机制

2021年 9月 1日
Sept 01

维护接口文档&画E/R图

1.维护开发接口文档
2.画出我负责部分的E/R图
3.已实现文件上传功能——参考资料
并可以根据用户账号,身份和文件类型存放在相应的路径中

2021年 9月 2日
Sept 02

项目引入session模块

1.实现了下载文件资源的端口
与文件上传接口向结合进而实现教学资源的上传于下载
2.已编写传输session变量的接口——参考资料
使用session记录用户登陆状态,保存在浏览器中
与前端相结合可实现页面刷新保持用户登录状态的功能

2021年 9月 3日
Sept 03

修改&测试session接口

1.与前端同学沟通后,修改设置/获取session的接口的格式和参数
通过学习可知,sessionId与一次会话一一对应,也可理解为每个浏览器创建会话后对应一个sessionId
将sessionId和用户名通过接口传到后端,后端通过id找到相应的会话,即可根据用户名判断某一用户的登陆状态
session(一个会话)会在无响应一段时间后自动销毁,一般默认时间为30分钟(可修改)
每次重启项目/服务器session会全部销毁,这时请求登录会重新生成相应的session
2.由于本项目后端由两个人开发,局域网中电脑所在的IP地址不同
所以每次将代码上传到仓库时应不上传个人的配置文件,保存在本地即可
通过修改.gitignore文件来避免开发过程中的冲突
3.修改个人主页所用到的接口,传输session判断登陆状态
4.完全实现使用session判断/保持用户登录状态的功能

2021年 9月 4日
Sept 04

学习使用OpenOffice

学习Open Office的使用 引入相关依赖
参考博客: https://www.cnblogs.com/god-monk/p/11321728.html
参考博客: https://www.cnblogs.com/xl4ng/p/13053544.html
参考博客: https://www.cnblogs.com/honey01/p/8867619.html
已成功将word,ppt转换为pdf文件 可以在线预览
不过还有细节需要完善,例如报错:Could not store document

2021年 9月 5日
Sept 05

在线预览&资源列表

Afternoon
1.完善在线预览功能,可实现word,ppt,excel等文件的转换
2.在数据库中建表,为完成课程章节的资源列表做准备
其中有章节,标签,文件等信息——参考资料
每个课程包含多个章节;每个章节包含多个标签;
每个章节下有多个文件;每个文件包含多个标签;
章节下文件标签的集合就是章节的标签
3.维护了接口文档

Evening
1.增加将txt文件转换为pdf的选项
2.md文件转换后会出现乱码的情况,可能是编码方式不同的原因
暂时无法解决

2021年 9月 6日
Sept 06

完善个人主页&资源列表&课程创建接口

1.增加更新/修改个人信息的接口
2.为前端提供图片外链——参考资料
3.增加个人信息中获取/上传/更新头像的接口
4.完善用户上传教学资源的接口

2021年 9月 7日
Sept 07

与前端对接口——个人主页

1.个人主页接口——上传/获取/更新个人信息&头像
2.解决了静态资源不会刷新的问题——参考资料
3.更改session过期时间为30min

2021年 9月 8日
Sept 08

与前端对接口——课程页面&文件列表

1.创建课程接口——上传/获取/更新课程信息
2.自定义void函数对数据库进行删除操作——参考资料
3.文件列表接口——上传/下载文件
4.修改上传文件大小限制——参考资料
理解了max-file-size和max-request-size的区别——参考资料

2021年 9月 9日
Sept 09

与前端对接口——文件列表

文件列表接口——上传/下载/在线预览课程资源
Bug: 点击下载后会下载一个不存在的f.txt文件

2021年 9月 10日
Sept 10

动态日志-建表&接口

1.新建vclog表存放日志内容
2.新建接口-新建日志&获取全部日志

2021年 9月 11日
Sept 11

动态日志&文件删除

1.修改/完善vclog表存放日志内容
2.新建接口-根据课程id获取所有日志/最新的100条日志
3.新建文件删除接口 只有老师有权限删除文件

2021年 9月 12日
Sept 12

文件删除&订阅课程

1.完善文件删除接口 如果之前有通过OpenOffice插件转换的pdf文件
删除时同时将pdf删除 避免出现文件重复/空间浪费的情况
2.完善文件上传接口 通过文件id确定唯一文件 统一用户不可上传相同类型的相同文件
3.使用@Schedule注解设置每天凌晨5点清空所有session——参考资料
其中也用到了Cron表达式来设置时间——参考资料
4.增加课程订阅功能 编写相关接口——订阅课程&获取某课程所有订阅者
5.新增接口——通过老师/同学用户名获取创建/订阅的所有课程
修改Bug:
1.当老师修改昵称后,老师创建的课程仍显示之前的昵称(已解决)

2021年 9月 13日
Sept 13

用户活跃度(Git日历)&课程安排(课表)

1.用于显示个人主页的活跃值 每次显示去年的同一天到今天的活跃值
组成用户的年活跃表 与Github和Gitee个人主页的Git提交日历相似
2.给课程安排建表 用来存放本学期/本学年的进度与安排

2021年 9月 14日
Sept 14

课程安排(课表)

编写课表接口————接收/获取/删除

2021年 9月 15日
Sept 15

成功实现课程安排(课表)

1.课表可在课程主页下拉查看
2.老师可以先选择起始日期和结束日期来生成空课表
3.老师可以编辑课表每一项的内容

2021年 9月 21日
Sept 21

学习并实现给文件加水印

水印统一为: 天津大学智能与计算学部
参考资料——https://www.jianshu.com/p/e139982c20e8
参考资料——https://blog.csdn.net/sjmz30071360/article/details/84754791

2021年 9月 22日
Sept 22

课程添加绘制思维导图功能

老师可以给每个课程绘制一个思维导图
提交后将数据存在后端
获取后前端渲染来实现

2021年 9月 23日
Sept 23

查找并解决Bug&优化代码

Bug:
1.txt文件无法在线预览
2.删除文件时没有将在线预览生成的pdf文件删除
3.文件输出流未关闭
4.ppt文件类型设置错误
5.md文件无法在线预览(未解决)
优化:
1.尝试将项目中绝对路径改为相对路径(未成功)
通过获取项目根目录地址,加上文件存储的路径得到文件的绝对路径
变相的实现了项目的可移植性
项目总结

2021年 9月 24日
Sept 24

结项汇报&改Bug

Bug:
1.对于新创建的老师用户,如果没有设置个人信息,则无法创建课程(已解决)
在新建账户后,自动生成只包含账号、昵称和身份的个人信息,昵称默认为用户名,其余为空
项目汇报——结项PPT

2021年 10月 31日
Oct 31

提交结课报告

个人结课报告

项目介绍

项目背景

本次实践我们选择的项目为《计算机系统基础》虚拟教研室在线平台。以小组形式进行组织,组内共4人,2人负责前端同时另外两人负责后端。我是后端开发成员之一。之前一直没有接触过后端及其相关知识的学习,所以这次实践对我个人来说算是一次挑战同时也是一次不错的合作开发经历

主要目标

作为后端负责人之一,首先要实现通过接口发送/接收/存储数据,与数据库进行交互。在这次虚拟教研室的项目中,需要实现有关信息交流、资源共享以及信息筛选等功能。我们的共同目标是使用应用程序设计语言完成较为复杂并且有一定使用价值的软件设计,在合作开发中提升自身的技术沟通能力和项目管理能力。制定相关项目计划并严格执行,不耽误团队进度。同时锻炼自己的创新思维和自学能力

我已经把这次项目个人的详细工作日志整理到了个人博客上,其中包括每天的具体安排、遇到的问题、解决方法以及参考资料等信息

主要工作内容

我所负责的工作内容如下

  • 资源共享:提供教学资源上传、下载并支持云平台在线预览的功能
  • 信息筛选:支持根据章节、知识点类型、文件类型等多元形式筛选教学资源
  • 用户信息:提供用户注册/登录的功能,每个用户拥有自己的个人主页,显示个人信息,贡献日历以及所订阅的课程
  • 登陆状态:通过引入session模块实现维持用户登陆状态的功能
  • 动态日志:在教师所创建的课程中,实现动态日志模块记录教师与学生的活动
  • 课程安排:老师可创建课程的课表(课程安排),与上海交通大学课表类似
  • 文件水印:在线预览课程资源时,为提高版权意识,增加天津大学智能与计算学部水印

以上大致是我的主要工作内容,本次实践中上述功能已全部实现,不过编码风格及数据库存储方面还有很大的提升空间

技术路线

  1. 首先我自学了Spring Boot框架用来搭建后端服务

在大二下半学期系统学习了Java面向对象编程语言😄。使用Spring Boot框架的主要原因是它是基于Java平台上的一种开源应用框架,提供了具有控制反转特性的容器。此外,其简化了新Spring应用的初始搭建以及开发过程。该架构使用了特定的较为简单的方式进行配置,从而使开发人员不再需要定义样板化的配置。可以基于其Gradle插件创建独立的Spring应用程序,并且内嵌Tomcat容器,便于部署。Spring Boot框架继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程,通过集成大量的框架使得依赖包的版本冲突以及引用的不稳定性等问题得到了很好的解决

  1. 使用PostgreSQL管理与维护数据库

同时在大二下半学期系统学习了PostgreSQL,了解到PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统,其支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。更重要的是,因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL😁

  1. 使用Open Office插件实现文件资源的在线预览功能

在项目需求中老师明确提到了项目需要实现文件资源的在线预览功能,推荐我们使用Open Office插件。在网上了解到OpenOffice.org是一套跨平台的办公室软件套件,能在多操作系统上运行,并且与各个主要的办公室软件套件兼容。此外,OpenOffice.org是自由软件,任何人都可以免费下载、使用及推广它😉。在本次实践中,使用Open Office插件实现了多种文件的转换以及在线预览,包括word文档、PPT、txt文本、PDF、图片、markdown等文件类型,除markdown外都可成功转换并预览,markdown出现乱码情况,我猜可能是不同文件的编码不同所导致的,暂时没有解决

  1. 使用iText组件实现给文件资源加水印的功能

与老师开小组例会时,老师强调需要提高版权意识,给在线预览的文件资源加上水印。于是我使用了iText组件来实现。iText组件是一种生成PDF报表的Java组件,通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件,是一个著名的开源项目。iText的安装和使用也非常方便,下载iText.jar文件后,只需要在系统的环境变量——CLASSPATH中加入其路径,在程序中就可以使用iText类库了。在实现时首先引入依赖,再根据其代码逻辑与方法对PDF文件加水印即可

系统总体架构

本人所承担部分与总体架构的关系

技术选型

需求分析

系统设计

系统实现

总结与展望