作者主页:Java毕设网
简介:Java领域优质创作者、Java项目、学习资料、技术互助
文末获取源码
一、项目介绍
这是一个前后端分离的教室预约和查看系统项目,能够实现以教室为单位活动的预约和取消,能够以视图形式显示,附带图书馆和公告管理器功能。
主要采用`Vue.js`+`SpringBoot` 技术栈开发
二、环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.是否Maven项目: 是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目
6.数据库:MySql 5.7版本;
三、技术栈
* 前端:`Vue`、`ElementUI`、`axios`、`Echart`、`jQurey`
* 后端:`SpringBoot`、`Spring Data + JPA`、`hibernate`、`MySQL`、`Shiro`、`Redis`
四、使用说明
1. 在mysql数据库中创建数据库`testmeeting`行项目,将自动注入数据。如需关闭此功能,请将 `application.properties `中的
`spring.datasource.initialization-mode=always` 代码注释。同样,可以通过使用项目`sql`目录下`testmeeting`直接导入数
据库数据结构与内容,可根据需要自行使用。`Redis 端口为 6379(默认端口),密码为空。`
2. 数据库配置在后端项目的 src\main\resources 目录下的application.properties 文件中,mysql 版本为 8.0以上版本 。
五、运行截图
六、相关代码
教室控制器
package com.shencangblue.design.icrs.controller;
import com.baidu.aip.bodyanalysis.AipBodyAnalysis;
import com.shencangblue.design.icrs.dao.ClassRoomDao;
import com.shencangblue.design.icrs.model.ClassRoom;
import com.shencangblue.design.icrs.result.Result;
import com.shencangblue.design.icrs.result.ResultFactory;
import com.shencangblue.design.icrs.service.ClassRoomService;
import com.shencangblue.design.icrs.utils.BDAipBodyAnalysis;
import com.shencangblue.design.icrs.utils.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
@RestController
@RequestMapping("/api")
public class ClassRoomController {
@Resource
private ClassRoomService classRoomService;
/**
* 保存新的或者修改教室
* @param classRoom 教室
* @return 保存的新房间
*/
@CrossOrigin
@RequestMapping("/rooms/save")
public ClassRoom save(@RequestBody ClassRoom classRoom){
classRoomService.save(classRoom);
return classRoom;
}
/**
* 删除教室
* @param classRoom 教室
* @return 删除的教室
*/
@CrossOrigin
@RequestMapping("/rooms/delete")
public ClassRoom delete(@RequestBody ClassRoom classRoom){
System.out.println(classRoom.getRoomId());
classRoomService.delete(classRoom.getRoomId());
return classRoom;
}
/**
* 获得所有的房间列表
* @return 封装获得所有房间
*/
@CrossOrigin
@RequestMapping("/rooms")
public Result getAll(){
return ResultFactory.buildSuccessResult(classRoomService.getAll());
}
/**
* 获取所有的房间数量
* @return 封装的房间数
*/
@CrossOrigin
@RequestMapping("/rooms/count")
public Result getAllCount(){
return ResultFactory.buildSuccessResult(classRoomService.CountByAllClassRoom());
}
/**
* 获取正在使用的房间数
* @return 封装的房间数
*/
@CrossOrigin
@RequestMapping("/rooms/used-count")
public Result getUsedCount(){
return ResultFactory.buildSuccessResult(classRoomService.CountByUsedClassRoom(1));
}
/**
* 不可用的房间数量
* @return 封装的房间数目
*/
@CrossOrigin
@RequestMapping("/rooms/unused-count")
public Result getUnusedCount(){
return ResultFactory.buildSuccessResult(classRoomService.CountByUsedClassRoom(-1));
}
/**
* 获取没有预约的房间
* @return 封装的房间
*/
@CrossOrigin
@RequestMapping("/rooms/usable-rooms")
public Result getUsableRooms(){
return ResultFactory.buildSuccessResult(classRoomService.findAllUsableRooms(0));
}
/**
* 修改指定的房间数据
* @return 修改结果
*/
@CrossOrigin
@RequestMapping("/rooms/update")
public String update(){
return classRoomService.update(3L,classRoomService.getById(3L))!=null?"sec":"fal";
}
/**
* 获取不同的分类的房间
* @param capacity 分类的依据:房间容纳人数
* @return 教室列表
*/
@CrossOrigin
@RequestMapping("/rooms/capacity/{capacity}/rooms")
public Iterable<ClassRoom> findAllByCapacity(@PathVariable("capacity") int capacity){
System.out.println(capacity);
if (0==capacity){
return classRoomService.getAll();
}else {
return classRoomService.findAllByCapacity(capacity);
}
}
/**
* 查询功能
* @param keywords 要查询的关键字
* @return 查询到的教室
*/
@CrossOrigin
@RequestMapping("/search")
public Iterable<ClassRoom> searchResult(@RequestParam("keywords") String keywords){
if ("".equals(keywords)){
return classRoomService.getAll();
}
else {
return classRoomService.search(keywords);
}
}
/**
* 通过教室名字获取教室Id
* @param roomName 教室名字
* @return 教室的Id
*/
@RequestMapping("/room/idName")
public Long getRoomIdByName(@RequestParam("roomName") String roomName){
System.out.println(classRoomService.getRoomByName(roomName).getRoomId());
return classRoomService.getRoomByName(roomName).getRoomId();
}
/**
* 检查教室是否用占用,进行状态检查并修改-重新封装模式
* @return 预约情况
*/
@RequestMapping("/checkRoomIsWillUse")
public Result checkRoomIsWillUse(){
return ResultFactory.buildSuccessResult(classRoomService.checkRoomIsWillUse());
}
/**
* 用于统计房间人数的方法-活体检测-非前端返回类型
* @param classRoom 房间Id
* @return 封装的人数
*/
@RequestMapping("/checkRoomNumber")
public Result checkRoomNumberOfParticipants(ClassRoom classRoom){
return null;
//return ResultFactory.buildSuccessResult(classRoomService.checkRoomNumberOfParticipants(classRoom.getRoomId()));
}
/**
* 用于统计房间人数的方法-活体检测-前端返回类型
* @param file 教室的图像
* @return 封装的人数
*/
@PostMapping("/classroomInfo/info")
public String coversUpload(MultipartFile file) {
AipBodyAnalysis client =BDAipBodyAnalysis.getClient();
String folder = "D:/workspace/img";
File imageFolder = new File(folder);
File f = new File(imageFolder, StringUtils.getRandomString(6) + file.getOriginalFilename()
.substring(file.getOriginalFilename().length() - 4));
if (!f.getParentFile().exists())
f.getParentFile().mkdirs();
try {
file.transferTo(f);
// String imgURL = "http://localhost:8443/api/file/" + f.getName();
// return imgURL;
return classRoomService.analysisPeople(client ,f);
} catch (IOException e) {
e.printStackTrace();
return "-1";
}
}
}
公告控制器
package com.shencangblue.design.icrs.controller;
import com.shencangblue.design.icrs.model.study.JotterArticle;
import com.shencangblue.design.icrs.result.Result;
import com.shencangblue.design.icrs.result.ResultFactory;
import com.shencangblue.design.icrs.service.JotterArticleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController
public class JotterController {
@Autowired
JotterArticleService jotterArticleService;
/**
* 保存公告或者文章
* @param article 公告和文件
* @return 封装的保存成功消息
*/
@PostMapping("api/admin/content/article")
public Result saveArticle(@RequestBody @Valid JotterArticle article) {
jotterArticleService.addOrUpdate(article);
return ResultFactory.buildSuccessResult("保存成功");
}
/**
* 分页功能
* @param size 数量
* @param page 页码数
* @return 封装页面数据
*/
@GetMapping("/api/article/{size}/{page}")
public Result listArticles(@PathVariable("size") int size, @PathVariable("page") int page) {
return ResultFactory.buildSuccessResult(jotterArticleService.list(page - 1, size));
}
/**
* 查看指定ID的文章
* @param id 文章、公告的iD
* @return 封装的文章或者公告
*/
@GetMapping("/api/article/{id}")
public Result getOneArticle(@PathVariable("id") int id) {
return ResultFactory.buildSuccessResult(jotterArticleService.findById(id));
}
/**
* 删除文章或者公告
* @param id 要删除的ID
* @return 封装好的删除结果
*/
@DeleteMapping("/api/admin/content/article/{id}")
public Result deleteArticle(@PathVariable("id") int id) {
jotterArticleService.delete(id);
return ResultFactory.buildSuccessResult("删除成功");
}
}