基于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 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。

项目技术:

Springboot + Maven + mybatis+ Vue 等等组成,B/S模式 + Maven管理等等。


/**
 * @Descripe: 文件上传,读取文件
 */
@RestController
public class UploadController {

    private Logger log = LoggerFactory.getLogger(UploadController.class);

    @Autowired
    private UploadService uploadService;

    /**
     * 上传课程计划Excel文件
     * @return
     */
    @PostMapping("/upload")
    public ServerResponse uploadClassTaskFile(MultipartFile file) {
        log.info("文件上传被调用。。。");
        return uploadService.upload(file);
    }

    /**
     * 下载系统提供的Excel导入模板
     * @return
     */
    @GetMapping(value = "/download", consumes = MediaType.ALL_VALUE)
    public void downloadTemplate(final HttpServletResponse response) {
        // 获取文件
        File file = new File("D:/arrange/excel/课程任务导入模板.xls");
        if (!file.exists()) {
            // 没有该模板文件就调用创建模板文件方法
            log.info("创建模板文件");
            createTemplate();
        }
        // 获取文件名字
        String fileName = file.getName();
        response.reset();
        // 设置ContentType,响应内容为二进制数据流,编码为utf-8,此处设定的编码是文件内容的编码
        response.setContentType("application/octet-stream;charset=utf-8");
        // 以(Content-Disposition: attachment; filename="filename.jpg")格式设定默认文件名,设定utf编码,此处的编码是文件名的编码,使能正确显示中文文件名
        try {
            response.setHeader("Content-Disposition", "attachment;fileName="+ fileName +";filename*=utf-8''"+ URLEncoder.encode(fileName,"utf-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
    }

}

/**
 */
@RestController
@RequestMapping("/teacher")
public class TeacherController {

    @Autowired
    private TeacherService teacherService;
    @Autowired
    private TokenService tokenService;

    /**
/**
 * @Descripe: 获取系统相关的数据
 */
@RestController
public class SystemController {

    @Autowired
    private TeacherService teacherService;
    @Autowired
    private StudentService studentService;
    @Autowired
    private CourseInfoService courseInfoService;
    @Autowired
    private ClassInfoService classInfoService;
    @Autowired
    private ClassTaskService classTaskService;
    @Autowired
    private TeachbuildInfoService teachbuildInfoService;
    @Autowired
    private DocService docService;
    @Autowired
    private ExerciseService exerciseService;
    @Autowired
    private ClassroomService classroomService;
    @Autowired
    private StudentDao studentDao;
    @Autowired
    private  OnlineCourseService onlineCourseService;
    @Autowired
    private TeacherDao teacherDao;

    @GetMapping("/systemdata")
    public ServerResponse systemData() {
        Map<String, Object> map = new HashMap<>();

        // 讲师人数
        int teachers = teacherService.count();
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.orderByDesc("update_time");
        Page<OnlineCourse> pages = new Page<>(page, limit);
        IPage<OnlineCourse> iPage = ocs.page(pages, wrapper);
        if (page != null) {
            return ServerResponse.ofSuccess(iPage);
        }
        return ServerResponse.ofError("查询不到数据");
    }

    /**
     * 添加网课
     * @param on
     * @return
     */
    @PostMapping("/add")
    public ServerResponse addCourse(@RequestBody OnlineCourseAddVO on) {
        OnlineCourse onlineCourse = new OnlineCourse();
        // 获取网课编号
        String no = getCourseNo();
        if(!StringUtils.isEmpty(no)) {
            onlineCourse.setOnlineNo(no);
        }
        onlineCourse.setOnlineName(on.getOnlineName());
        onlineCourse.setDescription(on.getDescription());
        onlineCourse.setCover(on.getCover());
        onlineCourse.setOnlineCategoryId(on.getOnlineCategoryId());
        onlineCourse.setOnlineCategoryName(on.getOnlineCategoryName());
        onlineCourse.setFromUserId(on.getFromUserId());
        onlineCourse.setFromUserType(on.getFromUserType());
        onlineCourse.setFromUserName(on.getFromUserName());
        boolean b = ocs.save(onlineCourse);
        if (b) {
            return ServerResponse.ofSuccess("添加网课成功");
        }
        return ServerResponse.ofError("添加网课失败");
    }

    /**
     * 根据id删除网课
     * @param id
     * @return
     */
    @DeleteMapping("/delete/{id}")
    public ServerResponse delete(@PathVariable("id") Integer id) {
        boolean b = ocs.removeById(id);
        if (b) {
            return ServerResponse.ofSuccess("删除网课成功");
        }
     *
     * @param c
     * @return
     */
    @PostMapping("/addclasstask")
    public ServerResponse addClassTask(@RequestBody() ClassTaskDTO c) {
        System.out.println(c);
        ClassTask classTask = new ClassTask();
        classTask.setSemester(c.getSemester());
        classTask.setGradeNo(c.getGradeNo());
        classTask.setClassNo(c.getClassNo());
        classTask.setCourseNo(c.getCourseNo());
        classTask.setCourseName(c.getCourseName());
        classTask.setTeacherNo(c.getTeacherNo());
        classTask.setRealname(c.getRealname());
        classTask.setCourseAttr(c.getCourseAttr());
        classTask.setStudentNum(c.getStudentNum());
        classTask.setWeeksNumber(c.getWeeksNumber());
        classTask.setWeeksSum(c.getWeeksSum());
        classTask.setIsFix(c.getIsFix());
        classTask.setClassTime(c.getClassTime());

        boolean b = classTaskService.save(classTask);

        if (b) {
            return ServerResponse.ofSuccess("添加课程任务成功");
        }
        return ServerResponse.ofError("添加课程任务失败");
    }

    /**
     * 删除开课任务
     * @param id
     * @return
     */
    @DeleteMapping("/deleteclasstask/{id}")
    public ServerResponse deleteClassTask(@PathVariable("id") Integer id) {

        boolean b = classTaskService.removeById(id);
        if (b) {
            return ServerResponse.ofSuccess("删除成功");
        }
        return ServerResponse.ofError("删除失败");
    }
    @Autowired
    private ClassTaskService classTaskService;
    @Autowired
    private TeachbuildInfoService teachbuildInfoService;
    @Autowired
    private DocService docService;
    @Autowired
    private ExerciseService exerciseService;
    @Autowired
    private ClassroomService classroomService;
    @Autowired
    private StudentDao studentDao;
    @Autowired
    private  OnlineCourseService onlineCourseService;
    @Autowired
    private TeacherDao teacherDao;

    @GetMapping("/systemdata")
    public ServerResponse systemData() {
        Map<String, Object> map = new HashMap<>();

        // 讲师人数
        int teachers = teacherService.count();
        // 学生人数
        int students = studentService.count();
        // 教材数量
        int courses = courseInfoService.count();
        // 班级数量
        int classes = classInfoService.count();
        // 教学楼数量
        int teachbuilds = teachbuildInfoService.count();
        // 教室数量
        int classrooms = classroomService.count();
        // 当前课程任务数量
        int classtasks = classTaskService.count();
        // 学习文档数
        int docs = docService.count();
        // 题库数量
        int exercises = exerciseService.count();
        // 网课数量
        int onlineCourse = onlineCourseService.count();

        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE,-1);
        Date d = cal.getTime();
        SimpleDateFormat sp = new SimpleDateFormat("yyyy-MM-dd");

/**
 */
@RestController
@RequestMapping("/category")
public class OnlineCategoryController {

    @Autowired
    private OnlineCategoryService ocs;

    /**
     * 添加类别
     * @param categoryNo
     * @param categoryName
     * @return
     */
    @PostMapping("/add")
    public ServerResponse addCategory(@RequestParam(name = "categoryNo") String categoryNo,
                                      @RequestParam(name = "categoryName") String categoryName,
                                      @RequestParam(name = "parentId") Integer parentId) {
        OnlineCategory onlineCategory = new OnlineCategory();
        onlineCategory.setCategoryNo(categoryNo);
        onlineCategory.setCategoryName(categoryName);
        onlineCategory.setParentId(parentId);
        boolean b = ocs.save(onlineCategory);
        if (b) {
            return ServerResponse.ofSuccess("添加成功");
        }
        return ServerResponse.ofError("添加失败");
    }

    /**
            System.out.println("666666");
            // 如果查不到该学号,则学号可用,跳出循环
            if (student == null) {
                return ServerResponse.ofSuccess(str3);
            }
        } while(true);
    }

    /**
     * 获取所有学生,带分页
     * @param page
     * @param limit
     * @return
     */
    @GetMapping("/students/{page}")
    public ServerResponse queryStudent(@PathVariable("page") Integer page,
                                       @RequestParam(defaultValue = "10") Integer limit) {
        Page<Student> pages = new Page<>(page, limit);
        QueryWrapper<Student> wrapper = new QueryWrapper<Student>().orderByDesc("student_no");
        IPage<Student> iPage = studentService.page(pages, wrapper);

        return ServerResponse.ofSuccess(iPage);

    }

    /**
     * 根据姓名关键字搜学生
     * @return
     */
    @GetMapping("/search/{keyword}")
    public ServerResponse searchTeacher(@PathVariable("keyword") String keyword, @RequestParam(defaultValue = "1") Integer page,
                                        @RequestParam(defaultValue = "10") Integer limit) {
        QueryWrapper<Student> wrapper = new QueryWrapper<>();
        wrapper.orderByDesc("update_time");
        wrapper.like(!StringUtils.isEmpty(keyword), "realname", keyword);
        Page<Student> pages = new Page<>(page, limit);
        IPage<Student> iPage = studentService.page(pages, wrapper);
        if (page != null) {
            return ServerResponse.ofSuccess(iPage);
        }
        return ServerResponse.ofError("查询不到数据!");
    }
     *
     * @return
     */
    @GetMapping("/semester")
    public ServerResponse queryAllSemester() {
        QueryWrapper wrapper = new QueryWrapper<>();
        wrapper.select("semester");
        wrapper.groupBy("semester");
        List<ClassTask> list = classTaskService.list(wrapper);
        Set set = new HashSet();

        for (ClassTask c : list) {
            set.add(c.getSemester());
        }

        return ServerResponse.ofSuccess(set);
    }

    /**
     * 排课算法接口,传入学期开始去查对应学期的开课任务,进行排课,排完课程后添加到course_plan表
     *
     * @param semester
     * @return
     */
    @PostMapping("/arrange/{semester}")
    public ServerResponse arrange(@PathVariable("semester") String semester) {
        return classTaskService.classScheduling(semester);
    }
}


/**
 * @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)){
            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");
     */
    @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("视频上传失败");
    }

    /**
     * 上传新视频
     * @param
     * @return
     */
    @PostMapping("/add")
    public ServerResponse addVideo(MultipartFile file, @RequestBody UserInfoVO u) {
        Map<String, Object> map = new HashMap();
//        map = AliyunUtil.upload(file, null);
        OnlineVideo onlineVideo = new OnlineVideo();
        // 所属课程的id
        onlineVideo.setOnlineCourseId(u.getCourseId());
        onlineVideo.setVideoName(u.getVideoName());
        onlineVideo.setVideoUrl(u.getVideoUrl());
        onlineVideo.setCover(u.getCover());

//        onlineVideo.setVideoUrl(map.get("url").toString());
//        onlineVideo.setVideoName(map.get("name").toString());
        onlineVideo.setVideoNo(u.getVideoNo()); // 视频编号
        onlineVideo.setFromUserType(u.getUserType());
        onlineVideo.setFromUserId(u.getId());
        onlineVideo.setFromUserName(u.getRealname());

        boolean b = ovs.save(onlineVideo);
        if (b) {
            return ServerResponse.ofSuccess("添加视频成功");
        }
        return ServerResponse.ofError("添加视频失败");
    }

    /**
     * 根据id删除视频
     * @param id
     * @return
     */
    @DeleteMapping("/delete/{id}")
    public ServerResponse deleteVideo(@PathVariable("id") Integer id) {

        boolean b = ovs.removeById(id);

        if (b) {

/**
 * @Descripe: 文件上传,读取文件
 */
@RestController
public class UploadController {

    private Logger log = LoggerFactory.getLogger(UploadController.class);

    @Autowired
    private UploadService uploadService;

    /**
     * 上传课程计划Excel文件
     * @return
     */
    @PostMapping("/upload")
    public ServerResponse uploadClassTaskFile(MultipartFile file) {
        log.info("文件上传被调用。。。");
        return uploadService.upload(file);
    }

    /**
     * 下载系统提供的Excel导入模板
     * @return
     */
    @GetMapping(value = "/download", consumes = MediaType.ALL_VALUE)
    public void downloadTemplate(final HttpServletResponse response) {
        // 获取文件
        File file = new File("D:/arrange/excel/课程任务导入模板.xls");
        if (!file.exists()) {
            // 没有该模板文件就调用创建模板文件方法
            log.info("创建模板文件");
            createTemplate();
        }
        // 获取文件名字
        String fileName = file.getName();

/**
 */
@RestController
@RequestMapping("/teacher")
public class TeacherController {

    @Autowired
    private TeacherService teacherService;
    @Autowired
    private TokenService tokenService;

    /**
     * 上传讲师证件
     * @param id
     * @param file
     * @return
     */
    @PostMapping("/upload/{id}")
    public ServerResponse uploadLicense(@PathVariable("id") Integer id, MultipartFile file) {
        Map<String, Object> map = AliyunUtil.upload(file, "license");
        String license = (String) map.get("url");
        Teacher t = teacherService.getById(id);
        t.setLicense(license);
        boolean b = teacherService.updateById(t);
        if (b) {
            return ServerResponse.ofSuccess("上传证件成功");
        }
        return ServerResponse.ofError("上传证件失败");
    }

    /**
     * 讲师登录
     * @return
     */
    @PostMapping("/upload/{id}")
    public ServerResponse uploadLicense(@PathVariable("id") Integer id, MultipartFile file) {
        Map<String, Object> map = AliyunUtil.upload(file, "license");
        String license = (String) map.get("url");
        Teacher t = teacherService.getById(id);
        t.setLicense(license);
        boolean b = teacherService.updateById(t);
        if (b) {
            return ServerResponse.ofSuccess("上传证件成功");
        }
        return ServerResponse.ofError("上传证件失败");
    }

    /**
     * 讲师登录
     * @param userLoginRequest
     * @return
     */
    @PostMapping("/login")
    public ServerResponse teacherLogin(@RequestBody UserLoginRequest userLoginRequest) {
        Map<String, Object> map = new HashMap<>();
        QueryWrapper<Teacher> wrapper = new QueryWrapper<>();
        wrapper.eq("teacher_no", userLoginRequest.getUsername());
        // 先查询是否有该账号
        Teacher teacher2 = teacherService.getOne(wrapper);
        if (teacher2 == null) {
            return ServerResponse.ofError("账号不存在");
        } else if (teacher2.getStatus() != 0) {
            return ServerResponse.ofError("账号状态异常,请联系管理员");
        }
        // 登录,使用编号登录
        Teacher teacher = teacherService.teacherLogin(userLoginRequest.getUsername(), userLoginRequest.getPassword());

        if (teacher != null) {
            // 允许登录
            String token = tokenService.getToken(teacher);
            map.put("teacher", teacher);
            map.put("token", token);
            return ServerResponse.ofSuccess(map);
        }
        // 否则一律视为密码错误
        return ServerResponse.ofError("密码错误");
    }

    /**
     * 根据id查询讲师,用于更新操作
     * @param id
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {

    }

}

/**
 */
@RestController
@RequestMapping("/admin")
public class AdminController {

    @Autowired
    private AdminService adminService;
    @Autowired
     */
    @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("删除失败");
    }
}

/**
 */
@RestController
                                             @RequestParam(defaultValue = "10") Integer limit) {
        Page<TeachbuildInfo> pages = new Page<>(page, limit);
        QueryWrapper<TeachbuildInfo> wrapper = new QueryWrapper<TeachbuildInfo>().orderByDesc("update_time");
        IPage<TeachbuildInfo> ipage = teachBuildInfoService.page(pages, wrapper);
        if (ipage != null) {
            return ServerResponse.ofSuccess(ipage);
        }
        return ServerResponse.ofError("查询失败");
    }

    /**
     * 查询所有教学楼
     * @return
     */
    @GetMapping("/list")
    public ServerResponse queryallTeachbuilding() {

        List<TeachbuildInfo> list = teachBuildInfoService.list();
        return ServerResponse.ofSuccess(list);
    }

    /**
     * 根据id删除教学楼
     * @param id
     * @return
     */
    @DeleteMapping("/delete/{id}")
    public ServerResponse deleteTeachbuilding(@PathVariable("id") Integer id) {

        boolean b = teachBuildInfoService.removeById(id);
        if (b) {
            return ServerResponse.ofSuccess("删除成功");
        }
        return ServerResponse.ofError("删除失败");
    }

    /**
     * 添加教学楼
     * @param t
     * @return

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值