作者主页:源码空间站2022
简介:Java领域优质创作者、Java项目、学习资料、技术互助
文末获取源码
智慧物联网教室预约系统-后台系统
项目简介:
这是一个前后端分离的教室预约和查看系统项目,能够实现以教室为单位活动的预约和取消,能够以视图形式显示,附带图书馆和公告管理器功能。
主要采用`Vue.js`+`SpringBoot` 技术栈开发
使用技术点
* 前端:`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以上版本 。
3. 在IntelliJ IDEA中运行后端项目,为了保证项目成功运行,可以右键点击 pom.xml 选择 maven -> reimport ,并重启项目。
至此,服务端就启动成功了,同时,运行前端项目,访问 http://localhost:8080 ,即可进入登录页面,默认账号是 admin,密码是 123
4. 项目使用了虹软公司的人脸识别SDK与百度的人体分析SDk:
* 虹软的SDK请自行前往官网获取,获取后建议将SDK导入到``src/main/resources/lib-sdk``目录下,然后在``src/main/java/utils``目录下新建``SdkParameter.java``文件,填入appId和key以及引擎和算法等文件位置。
* 百度人体分析SDk已在``maven``中引用,但是``app_id``等请前往百度云AI开发者平台自行获取,该项目中表示位置为``SdkParameter.java``文件。
* 以上内容不必要,可以删除并注释对应接口与服务即可。
----
二次开发请注意:
* 进入前端项目根目录中,在命令行依次输入如下命令:
```text
# 安装依赖
npm install
# 在 localhost:8080 启动项目
npm run dev
```
* 由于在前端项目中已经配置了端口转发,将数据转发到SpringBoot上,因此项目启动之后,在浏览器中输入 `http://localhost:8080`
就可以访问我们的前端项目了,所有的请求通过端口转发将数据传到 SpringBoot 中(注意此时不要关闭 SpringBoot 项目)。
* 最后可以用 IDEA / WebStorm 等工具打开前端项目,继续开发,开发完成后,当项目要上线时,依然进入到 wj-vue 目录,然后执行如下命令:
```text
npm run build
```
* 该命令执行成功之后,前端项目目录下生成一个 `dist` 文件夹,可以将该文件夹中的两个文件` static `和 `index.html`
拷贝到前端项目中 `resources/static/ `目录下,然后直接运行前端项目,访问 `http://localhost:8443` ,
实际上是把前端打包后作为静态文件,但不推荐使用这种方式。
运行截图
相关代码
教室控制器
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";
}
}
}
如果也想学习本系统,下面领取。回复:011springboot