基于javaweb+mysql的springboot基于遗传算法学校排课系统(java+springboot+maven+mybatis+vue+mysql)

基于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;

    /**

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值