基于javaweb+mysql的springboot基于遗传算法学校排课系统(java+springboot+maven+mybatis+vue+mysql)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Node.js≥10
开发工具
后端:eclipse/idea/myeclipse/sts等均可配置运行
前端:WebStorm/VSCode/HBuilderX等均可
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SpringBoot基于遗传算法学校排课系统(java+springboot+maven+mybatis+vue+mysql)
一、项目简述本系统功能包括: 排课管理,课程管理,讲师管理,班级管理,学生管理,教学资料,学习文档,在线测试,教材列表,教学设计,帮助中心等等功能。
二、项目运行 环境配置:
Jdk1.8 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。
项目技术:
Springboot + Maven + mybatis+ Vue 等等组成,B/S模式 + Maven管理等等。
private TeacherService teacherService;
@Autowired
private TokenService tokenService;
/**
* 管理员登录
* @param adminLoginRequest
* @return
*/
@PostMapping("/login")
public ServerResponse adminLogin(@RequestBody UserLoginRequest adminLoginRequest) {
Map<String, Object> map = new HashMap();
Admin admin = adminService.adminLogin(adminLoginRequest.getUsername(), adminLoginRequest.getPassword());
if (admin != null){
String token = tokenService.getToken(admin);
map.put("admin", admin);
map.put("token", token);
return ServerResponse.ofSuccess(map);
}
return ServerResponse.ofError("用户名或密码错误!");
}
/**
* 管理员更新个人资料
* @return
*/
@PostMapping("/modify")
public ServerResponse modifyAdmin(@RequestBody Admin admin) {
return adminService.updateById(admin) ? ServerResponse.ofSuccess("更新成功!") : ServerResponse.ofError("更新失败!");
}
/**
* 根据ID查询管理员信息
* @param id
* @return
*/
@GetMapping("/{id}")
public ServerResponse queryAdmin(@PathVariable("id") Integer id) {
return ServerResponse.ofSuccess(adminService.getById(id));
}
wrapper.eq("teachbuild_no", l.getTeachBuildNo());
wrapper.eq("grade_no", l.getGradeNo());
LocationInfo locationInfo = new LocationInfo();
if (lis.getOne(wrapper) != null) {
return ServerResponse.ofError("该教学区域已经设置过了!");
}
locationInfo.setTeachbuildNo(l.getTeachBuildNo());
locationInfo.setGradeNo(l.getGradeNo());
boolean b = lis.save(locationInfo);
if (b) {
return ServerResponse.ofSuccess("设置教学区域成功");
}
return ServerResponse.ofError("设置教学区域失败");
}
/**
* 查询所有的教学区域安排信息
* @return
*/
@GetMapping("/locations/{page}")
public ServerResponse queryLocationInfo(@PathVariable("page") Integer page, @RequestParam(defaultValue = "10") Integer limit) {
Map<String, Object> map = new HashMap<>();
List<LocationVO> list = lid.locations((page - 1) * limit, limit);
int total = lid.count();
map.put("records", list);
map.put("total", total);
return ServerResponse.ofSuccess(map);
}
/**
* 根据id删除教学区域信息
* @param id
* @return
*/
@DeleteMapping("/location/delete/{id}")
public ServerResponse delete(@PathVariable("id") Integer id) {
boolean b = lis.removeById(id);
if (b) {
return ServerResponse.ofSuccess("删除成功");
}
return ServerResponse.ofError("删除失败");
}
}
@Autowired
private ClassInfoService classInfoService;
@Autowired
private StudentService studentService;
@Autowired
private ClassInfoDao classInfoDao;
/**
* 分页查询所有班级
* @param page
* @param limit
* @return
*/
// @GetMapping("/queryclassinfobypage/{page}")
// public ServerResponse queryClassInfo(@PathVariable(value = "page") Integer page,
// @RequestParam(defaultValue = "10") Integer limit) {
// System.out.println("*******************************************");
// Page<ClassInfo> pages = new Page<>(page, limit);
// QueryWrapper<ClassInfo> wrapper = new QueryWrapper<ClassInfo>().orderByDesc("remark");
// IPage<ClassInfo> iPage = classInfoService.page(pages, wrapper);
// return ServerResponse.ofSuccess(iPage);
// }
/**
* 根据年级查询所有班级
* @param grade
* @return
*/
@GetMapping("/class-grade/{grade}")
public ServerResponse queryClass(@PathVariable("grade") String grade) {
QueryWrapper<ClassInfo> wrapper = new QueryWrapper<ClassInfo>().eq("remark", grade);
List<ClassInfo> classInfoList = classInfoService.list(wrapper);
return ServerResponse.ofSuccess(classInfoList);
}
/**
* 根据班级查询学生
* @param page
* @param classNo
* @param limit
* @return
*/
@GetMapping("/student-class/{page}/{classNo}")
public ServerResponse queryStudentByClass(@PathVariable("page") Integer page,
@PathVariable("classNo") String classNo,
// 获取 token 中的 user id
String userId;
try {
userId = JWT.decode(token).getAudience().get(0);
} catch (JWTDecodeException j) {
throw new RuntimeException("401");
}
// User user = userService.findUserById(userId);
// if (user == null) {
// throw new RuntimeException("用户不存在,请重新登录");
// }
// // 验证 token
// JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build();
// try {
// jwtVerifier.verify(token);
// } catch (JWTVerificationException e) {
// throw new RuntimeException("401");
// }
return true;
}
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
}
@Autowired
private AdminService adminService;
@Autowired
private StudentService studentService;
@Autowired
private TeacherService teacherService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 从 http 请求头中取出 token
String token = request.getHeader("token");
// 如果不是映射到方法直接通过
if(!(handler instanceof HandlerMethod)){
return true;
}
HandlerMethod handlerMethod = (HandlerMethod)handler;
Method method = handlerMethod.getMethod();
//检查是否有passtoken注释,有则跳过认证
if (method.isAnnotationPresent(PassToken.class)) {
PassToken passToken = method.getAnnotation(PassToken.class);
if (passToken.required()) {
return true;
}
}
//检查有没有需要用户权限的注解
if (method.isAnnotationPresent(UserLoginToken.class)) {
UserLoginToken userLoginToken = method.getAnnotation(UserLoginToken.class);
if (userLoginToken.required()) {
// 执行认证
if (token == null) {
throw new RuntimeException("无token,请重新登录");
}
// 获取 token 中的 user id
String userId;
try {
userId = JWT.decode(token).getAudience().get(0);
} catch (JWTDecodeException j) {
throw new RuntimeException("401");
}
// User user = userService.findUserById(userId);
// if (user == null) {
// throw new RuntimeException("用户不存在,请重新登录");
// }
// // 验证 token
// JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build();
// try {
// jwtVerifier.verify(token);
// } catch (JWTVerificationException e) {
/**
*/
@RestController
@RequestMapping("/onlinevideo")
public class OnlineVideoController {
@Autowired
private OnlineVideoService ovs;
/**
* 根据课程id获取课程包含的视频
* @param id
* @return
*/
@GetMapping("/get/{id}")
public ServerResponse getAllVideo(@PathVariable("id") Integer id) {
return ServerResponse.ofSuccess(ovs.list( new QueryWrapper<OnlineVideo>().eq("online_course_id", id)));
}
/**
* 上传视频并返回url和文件名到前端
* @return
*/
@PostMapping("/upload")
public ServerResponse upload(MultipartFile file) {
Map<String, Object> map = AliyunUtil.upload(file, null);
if (map != null) {
return ServerResponse.ofSuccess(map);
}
return ServerResponse.ofError("视频上传失败");
}
if (student == null) {
return ServerResponse.ofError("旧密码错误");
}
// 否则进入修改密码流程
student.setPassword(passwordVO.getNewPass());
boolean b = studentService.updateById(student);
if (b) {
return ServerResponse.ofSuccess("密码修改成功");
}
return ServerResponse.ofError("密码更新失败");
}
}
/**
/**
*/
@RestController
public class LocationInfoController {
@Autowired
private LocationInfoService lis;
@Autowired
private LocationInfoDao lid;
/**
* 新增教学区域
* @return
*/
@PostMapping("/setteacharea")
public ServerResponse setTeachArea(@RequestBody() LocationSetVO l) {
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("teachbuild_no", l.getTeachBuildNo());
wrapper.eq("grade_no", l.getGradeNo());
LocationInfo locationInfo = new LocationInfo();
if (lis.getOne(wrapper) != null) {
return ServerResponse.ofError("该教学区域已经设置过了!");
}
locationInfo.setTeachbuildNo(l.getTeachBuildNo());
locationInfo.setGradeNo(l.getGradeNo());
boolean b = lis.save(locationInfo);
if (b) {
return ServerResponse.ofSuccess("设置教学区域成功");
}
return ServerResponse.ofError("设置教学区域失败");
}
/**
* 查询所有的教学区域安排信息
* @return
*/
@GetMapping("/locations/{page}")
QueryWrapper<Doc> wrapper = new QueryWrapper<Doc>().orderByDesc("create_time").eq("to_class_no", toClassNo);
IPage<Doc> iPage = docService.page(pages, wrapper);
System.out.println(iPage);
return ServerResponse.ofSuccess(iPage);
}
/**
* 根据id删除文档
* @param id
* @return
*/
@DeleteMapping("/deletedoc")
public ServerResponse delete(@RequestParam Integer id) {
boolean b = docService.removeById(id);
if (b) {
return ServerResponse.ofSuccess("删除成功");
}
return ServerResponse.ofError("删除失败");
}
}
/**
*/
@RestController
@RequestMapping("/onlinevideo")
/**
*/
@RestController
@RequestMapping("/onlinevideo")
public class OnlineVideoController {
@Autowired
private OnlineVideoService ovs;
/**
* 根据课程id获取课程包含的视频
* @param id
* @return
*/
@GetMapping("/get/{id}")
public ServerResponse getAllVideo(@PathVariable("id") Integer id) {
return ServerResponse.ofSuccess(ovs.list( new QueryWrapper<OnlineVideo>().eq("online_course_id", id)));
}
/**
* 上传视频并返回url和文件名到前端
* @return
*/
@PostMapping("/upload")
public ServerResponse upload(MultipartFile file) {
Map<String, Object> map = AliyunUtil.upload(file, null);
if (map != null) {
return ServerResponse.ofSuccess(map);
}
return ServerResponse.ofError("视频上传失败");
}
boolean b = teachBuildInfoService.update(t, new QueryWrapper<TeachbuildInfo>().eq("id", id));
if (b) {
return ServerResponse.ofSuccess("更新成功");
}
return ServerResponse.ofError("更新失败");
}
}
/**
* @Descripe: 拦截器
*/
public class AuthenticationInterceptor implements HandlerInterceptor {
@Autowired
private AdminService adminService;
@Autowired
private StudentService studentService;
@Autowired
private TeacherService teacherService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 从 http 请求头中取出 token
String token = request.getHeader("token");
// 如果不是映射到方法直接通过
if(!(handler instanceof HandlerMethod)){
@Autowired
private ClassroomService classroomService;
@Autowired
private TeachbuildInfoService t;
@Autowired
private CoursePlanService coursePlanService;
// 根据教学楼编号查询空教室
@GetMapping("/empty/{teachbuildno}")
public ServerResponse getEmptyClassroom(@PathVariable("teachbuildno") String teachbuildNo) {
// 首先查询该教学楼下面的所有教室
QueryWrapper<Classroom> wrapper1 = new QueryWrapper();
wrapper1.eq("teachbuild_no", teachbuildNo);
// 指定教学楼下的所有教室
List<Classroom> allClassroom = classroomService.list(wrapper1);
List<CoursePlan> coursePlanList = coursePlanService.list();
// 得到已经使用了的教室编号
Set<String> usedClaassroom = new HashSet<>();
for (int i = 0; i < coursePlanList.size(); i++) {
// 截取占用的教室所属编号前两位,即教学楼编号
if (teachbuildNo.equals(coursePlanList.get(i).getClassroomNo().substring(0, 2))) {
usedClaassroom.add(coursePlanList.get(i).getClassroomNo());
}
}
QueryWrapper<Classroom> wrapper2 = new QueryWrapper();
wrapper2.in("classroom_no", usedClaassroom);
wrapper2.orderByAsc("classroom_no");
List<Classroom> used = classroomService.list(wrapper2);
// 取差
Set<Classroom> newList = getSub(allClassroom, used);
return ServerResponse.ofSuccess(newList);
}
/**
* 集合取差
* @param list1
* @param list2
* @return
*/
private Set<Classroom> getSub(List<Classroom> list1, List<Classroom> list2) {
Set<Classroom> newList = new HashSet<>();
/**
* 管理员根据ID删除学生
* @return
*/
@DeleteMapping("/delete/{id}")
public ServerResponse deleteTeacher(@PathVariable Integer id) {
boolean b = studentService.removeById(id);
if(b) {
return ServerResponse.ofSuccess("删除成功!");
}
return ServerResponse.ofError("删除失败!");
}
/**
* 学生修改密码
* @param passwordVO
* @return
*/
@PostMapping("/password")
public ServerResponse updatePass(@RequestBody PasswordVO passwordVO) {
QueryWrapper<Student> wrapper = new QueryWrapper();
wrapper.eq("id", passwordVO.getId());
wrapper.eq("password", passwordVO.getOldPass());
Student student = studentService.getOne(wrapper);
if (student == null) {
return ServerResponse.ofError("旧密码错误");
}
// 否则进入修改密码流程
student.setPassword(passwordVO.getNewPass());
boolean b = studentService.updateById(student);
if (b) {
return ServerResponse.ofSuccess("密码修改成功");
}
return ServerResponse.ofError("密码更新失败");
}
}
/**
* description: 教材信息
*/
@RestController
@RequestMapping("/courseinfo")
public class CourseInfoController {
@Autowired
private CourseInfoService cis;
/**
* 分页查询所有的教材信息
* @param page
* @param limit
* @return
*/
@GetMapping("/{page}")
public ServerResponse queryCourseInfo(@PathVariable("page") Integer page,
@RequestParam(defaultValue = "10") Integer limit) {
Page<CourseInfo> pages = new Page<>(page, limit);
QueryWrapper<CourseInfo> wrapper = new QueryWrapper<CourseInfo>().orderByAsc("course_no");
IPage<CourseInfo> ipage = cis.page(pages, wrapper);
return ServerResponse.ofSuccess(ipage);
}
* 添加教学楼
* @param t
* @return
*/
@PostMapping("/add")
public ServerResponse addTeachbuilding(@RequestBody TeachbuildAddRequest t) {
System.out.println(t);
TeachbuildInfo t1 = new TeachbuildInfo();
t1.setTeachBuildNo(t.getTeachBuildNo());
t1.setTeachBuildName(t.getTeachBuildName());
t1.setTeachBuildLocation(t.getTeachBuildLocation());
boolean b = teachBuildInfoService.save(t1);
if (b) {
return ServerResponse.ofSuccess("添加成功");
}
return ServerResponse.ofError("添加失败");
}
/**
* 根据id查询
* @param id
* @return
*/
@GetMapping("/select/{id}")
public ServerResponse queryTeachBuildingById(@PathVariable("id") Integer id) {
return ServerResponse.ofSuccess(teachBuildInfoService.getById(id));
}
/**
* 更新教学楼
* @param t
* @return
*/
@PostMapping("/modify/{id}")
public ServerResponse modifyTeacher(@PathVariable("id") Integer id, @RequestBody TeachbuildInfo t) {
boolean b = teachBuildInfoService.update(t, new QueryWrapper<TeachbuildInfo>().eq("id", id));
if (b) {
/**
*/
@RestController
@RequestMapping("/admin")
public class AdminController {
@Autowired
private AdminService adminService;
@Autowired
private TeacherService teacherService;
@Autowired
private TokenService tokenService;
/**
* 管理员登录
* @param adminLoginRequest
* @return
*/
@PostMapping("/login")
public ServerResponse adminLogin(@RequestBody UserLoginRequest adminLoginRequest) {
Map<String, Object> map = new HashMap();
Admin admin = adminService.adminLogin(adminLoginRequest.getUsername(), adminLoginRequest.getPassword());
if (admin != null){
String token = tokenService.getToken(admin);
map.put("admin", admin);
map.put("token", token);
return ServerResponse.ofSuccess(map);
}
return ServerResponse.ofError("用户名或密码错误!");
}
/**
* 管理员更新个人资料
return ServerResponse.ofSuccess("删除类别成功");
}
return ServerResponse.ofError("删除类别失败");
}
/**
* 查询所有的一级类别
* @return
*/
@GetMapping("/one")
public ServerResponse queryOne() {
QueryWrapper wrapper = new QueryWrapper();
// 查询父id为0的类别,即一级分类
wrapper.eq("parent_id", 0);
List<OnlineCategory> list = ocs.list(wrapper);
return ServerResponse.ofSuccess(list);
}
/**
* 查询每个类别下面的二级类别
* @param id 一级分类id
* @return
*/
@GetMapping("/two/{id}")
public ServerResponse queryTwo(@PathVariable("id") Integer id) {
QueryWrapper wrapper = new QueryWrapper();
// 该id下面的二级分类
wrapper.eq("parent_id", id);
List<OnlineCategory> list = ocs.list(wrapper);
return ServerResponse.ofSuccess(list);
}
/**
* 点击添加类别的时候请求这个接口给前端返回一个编号
* @return
*/
@GetMapping("/get-no")
public ServerResponse getNo() {
QueryWrapper<OnlineCategory> wrapper = new QueryWrapper<OnlineCategory>().select("category_no").orderByDesc();
List<OnlineCategory> list = ocs.list(wrapper);
String no = String.valueOf(Integer.parseInt(list.get(0).getCategoryNo()) + 1);
System.out.println("no = " + no);
// 返回自动生成的编号,从res.data.message中获取
return ServerResponse.ofSuccess(no);
return ServerResponse.ofSuccess(list);
}
/**
* 点击添加类别的时候请求这个接口给前端返回一个编号
* @return
*/
@GetMapping("/get-no")
public ServerResponse getNo() {
QueryWrapper<OnlineCategory> wrapper = new QueryWrapper<OnlineCategory>().select("category_no").orderByDesc();
List<OnlineCategory> list = ocs.list(wrapper);
String no = String.valueOf(Integer.parseInt(list.get(0).getCategoryNo()) + 1);
System.out.println("no = " + no);
// 返回自动生成的编号,从res.data.message中获取
return ServerResponse.ofSuccess(no);
}
}
/**
*/
@RestController
public class DocController {
@Autowired
private DocService docService;
/**