目录

一、在线预览

二、项目设计实现

1.登录

2.欢迎页

3.课程管理

4.班级管理

 5.签到管理

6.签到记录详情

7.请假管理

 8.学生管理

 9.教师管理

10.辅导员管理

11.请假controller层实现

 12.课程service层实现

三、数据库设计实现

四、项目结构图

1.后端使用idea开发:

 2.前端使用webstorm开发,当然其他开发工具都有可以(vscode/Hbuilder等):

3.项目本地文档访问:

4.项目端口号、数据库访问等配置 

5.静态资源访问、文件上传配置 

五、总结

 


一、在线预览

项目在线访问预览地址:点击访问

项目包含管理后台前端、以及后端实现,即是两个前端项目加后端实现,数据库采用mysql,使用redis缓存,spring oauth2、security、token登录等。管理后台前端采用vue+element实现。后端使用Springboot+Spring Security+OAuth2+redis+mybatis-plus+mysql。

二、项目设计实现

1.登录

分为三种角色登录:辅导员、教师、学生

辅导员权限最大,拥有系统全部权限,其次是教师,拥有授课班级和学生相关的全部权限和其他数据的预览功能,最后是学生,只拥有个人数据的操作权限和其他数据的预览功能。


 

2.欢迎页

3.课程管理

辅导员和教师拥有操作权限,学生只有预览权限。

 

4.班级管理

辅导员拥有全部权限,教师只拥有所授课班级权限,学生只拥有预览权限。

 

 5.签到管理

辅导员拥有全部权限,教师只能添加所授课程排班的签到和只能对自己的签到进行管理,学生只能对本班的签到进行查看。

 

 

6.签到记录详情

 辅导员拥有全部权限,教师只能对自己所属排班进行管理,学生只能对自己的记录进行签到和查看全部签到记录。

7.请假管理

请假只能由学生进行添加,辅导员拥有除了新增权限外的所有权限,教师只能对所授课班级学生的请假记录进行管理,学生只能对自己的请假记录进行管理和查看。

学生申请请假,对应教师或辅导员可进行审核。

 

 8.学生管理

辅导员拥有全部权限,教师只能对自己所授课班级进行学生管理,学生只能对自己的记录进行管理。

 9.教师管理

辅导员拥有全部权限,教师只能对自己的记录进行管理,学生只能查看本班级对应的授课老师记录。

 

10.辅导员管理

辅导员拥有全部权限,辅导员类似于超级管理员,教师和学生都只拥有查看权限。

 

11.请假controller层实现

package com.product.controller;

import com.product.entity.LeaveManagement;
import com.product.entity.base.Result;
import com.product.entity.base.ResultPage;
import com.product.entity.req.LeaveManagementPageReq;
import com.product.entity.vo.LeaveManagementVO;
import com.product.service.LeaveManagementService;
import com.product.util.JwtUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * @author hjf
 * @date 2023-10-23 10:27
 * @describe 请假
 */
@Api(tags = "请假")
@Slf4j
@RestController
@RequestMapping("/leaveManagement")
public class LeaveManagementController {

    @Resource
    private LeaveManagementService leaveManagementService;

    @ApiOperation(value = "添加或更新")
    @PostMapping("/add")
    public Result<?> add(@RequestBody LeaveManagement leaveManagement) {
        return leaveManagementService.add(JwtUtil.getUserId(),leaveManagement);
    }

    @ApiOperation("分页")
    @PostMapping("/getPage")
    public ResultPage<LeaveManagementVO> getPage(@RequestBody LeaveManagementPageReq pageQuery) {
        return leaveManagementService.getPage(pageQuery);
    }

    @PostMapping("/del")
    @ApiOperation(value = "删除", notes = "删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "ids", value = "所操作的记录ID,英文逗号分割", required = true, dataType = "String", paramType = "query")
    })
    public Result<?> del(
            @RequestParam(value = "ids") String ids
    ) {
        return leaveManagementService.del(JwtUtil.getUserId(), ids);
    }

    @PostMapping("/updateStatus")
    @ApiOperation(value = "更新状态", notes = "更新状态")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "status", value = "状态", required = true, dataType = "Integer", paramType = "query"),
            @ApiImplicitParam(name = "ids", value = "所操作的记录ID,英文逗号分割", required = true, dataType = "String", paramType = "query")
    })
    public Result<?> updateStatus(
            @RequestParam(value = "status") Integer status,
            @RequestParam(value = "ids") String ids
    ) {
        return leaveManagementService.updateStatus(JwtUtil.getUserId(), status, ids);
    }


    @PostMapping("/getDetailById")
    @ApiOperation(value = "详情", notes = "详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "主键", required = true, dataType = "Long", paramType = "query")
    })
    public Result<LeaveManagement> getDetailById(
            @RequestParam(value = "id") Long id
    ) {
        return leaveManagementService.getDetailById(id);
    }
}

 12.课程service层实现

package com.product.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.product.entity.Course;
import com.product.entity.base.PageQuery;
import com.product.entity.base.Result;
import com.product.entity.base.ResultPage;
import com.product.enumerate.YesOrNo;
import com.product.mapper.CourseMapper;
import com.product.service.CourseService;
import com.product.util.JwtUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * @author hjf
 * @date 2023-10-23 9:23
 * @describe 课程
 */
@Slf4j
@Service
public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> implements CourseService {

    /**
     * 添加或更新
     *
     * @param course 课程
     */
    @Override
    public Result<?> add(Long userId,Course course) {
        course.setCourseName(course.getCourseName().trim());
        LocalDateTime now = LocalDateTime.now();
        course.setUpdateSystemTime(now);
        course.setUpdateSystemAdminId(userId);
        if(course.getId() == null) {//添加
            course.setCreateSystemTime(now);
            course.setCreateSystemAdminId(JwtUtil.getUserId());
            save(course);
        }else{//更新
            updateById(course);
        }
        return Result.OKMsg("保存成功");
    }

    @Override
    public Result<List<Course>> listAll(){
        List<Course> courses = list(Wrappers.<Course>lambdaQuery()
                .eq(Course::getStatus,YesOrNo.NO.getValue())
                .orderByDesc(Course::getCreateSystemTime)
        );
        return Result.OK(courses);
    }

    /**
     * 分页
     */
    @Override
    public ResultPage<Course> getPage(PageQuery pageQuery) {
        LambdaQueryWrapper<Course> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotBlank(pageQuery.getKeyWord()),Course::getCourseName,pageQuery.getKeyWord());
        queryWrapper.orderByDesc(Course::getCreateSystemTime);
        Page<Course> page = page(pageQuery.build(), queryWrapper);
        return ResultPage.OK(page.getTotal(), page.getCurrent(), page.getSize(), page.getRecords());
    }

    /**
     * 删除
     *
     * @param userId 用户ID
     * @param ids 所操作记录
     */
    @Override
    public Result<?> del(Long userId, String ids) {
        String[] idsArr = ids.split(",");
        List<Long> idsList = new ArrayList<>();
        for(String str : idsArr){
            idsList.add(Long.parseLong(str));
        }
        boolean change = remove(Wrappers.<Course>lambdaQuery().in(Course::getId,idsList));
        if(change){
            return Result.OKMsg("删除成功");
        }else{
            return Result.failMsg("删除失败,请重试");
        }
    }

    /**
     * 更新状态
     *
     * @param userId 用户ID
     * @param ids  所操作记录
     * @return
     */
    @Override
    public Result<?> updateStatus(Long userId,Integer status, String ids) {
        String[] idsArr = ids.split(",");
        List<Long> idsList = new ArrayList<>();
        for(String str : idsArr){
            idsList.add(Long.parseLong(str));
        }
        lambdaUpdate().in(Course::getId,idsList).set(Course::getStatus,YesOrNo.valueOf(status).getValue()).set(Course::getUpdateSystemAdminId,userId).set(Course::getUpdateSystemTime,LocalDateTime.now()).update();
        String msg = "启用成功";
        if(Objects.equals(status,YesOrNo.YES.getValue())){
            msg = "禁用成功";
        }
        return Result.OKMsg(msg);
    }

    /**
     * 详情
     *
     * @param id 主键
     */
    @Override
    public Result<Course> getDetailById(Long id){
        Course course = getById(id);
        return Result.OK(course);
    }
}

三、数据库设计实现

-- 系统管理员
CREATE TABLE `admin` (
  `id` bigint NOT NULL COMMENT '主键',
  `username` varchar(60) NOT NULL COMMENT '用户名',
  `password` varchar(100) NOT NULL COMMENT '登录密码',
  `real_name` varchar(32) DEFAULT NULL COMMENT '姓名',
  `class_id` bigint DEFAULT NULL COMMENT '所属班级(学生)',
  `admin_no` varchar(255) DEFAULT NULL COMMENT '编号',
  `gender` tinyint(1) DEFAULT 0 COMMENT '用户性别 0保密 1男 2女',
  `avatar` varchar(300) DEFAULT NULL COMMENT '头像',
  `phone` varchar(20) DEFAULT NULL COMMENT '手机',
  `email` varchar(60) DEFAULT NULL COMMENT '邮箱',
  `remark` varchar(200) DEFAULT NULL COMMENT '备注',
  `admin_type` tinyint(1) DEFAULT '0' COMMENT '管理员类型: 0辅导员 1教师 2学生',
  `status` tinyint(1) DEFAULT 0 COMMENT '是否禁用 0否  1是',
  `deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否  1是',
  `create_system_time` datetime DEFAULT NULL COMMENT '创建时间',
  `create_system_admin_id` bigint DEFAULT NULL COMMENT '创建人ID',
  `update_system_time` datetime DEFAULT NULL COMMENT '更新时间',
  `update_system_admin_id` bigint DEFAULT NULL COMMENT '修改人ID',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `admin_key_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统管理员';

-- 班级管理
CREATE TABLE `classes` (
  `id` bigint NOT NULL COMMENT '主键',
  `class_no` varchar(255) DEFAULT NULL COMMENT '班级编号',
  `class_name` varchar(255) NOT NULL COMMENT '班级名称',
  `sort` int NOT NULL DEFAULT 0 COMMENT '排序,越小越靠前',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `status` tinyint(1) DEFAULT 0 COMMENT '是否禁用 0否  1是',
  `deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否  1是',
  `create_system_time` datetime DEFAULT NULL COMMENT '创建时间',
  `create_system_admin_id` bigint DEFAULT NULL COMMENT '创建人ID',
  `update_system_time` datetime DEFAULT NULL COMMENT '更新时间',
  `update_system_admin_id` bigint DEFAULT NULL COMMENT '修改人ID',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='班级管理';

-- 课程管理
CREATE TABLE `course` (
  `id` bigint NOT NULL COMMENT '主键',
  `course_no` varchar(255) DEFAULT NULL COMMENT '课程编号',
  `course_name` varchar(255) NOT NULL COMMENT '课程名称',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `status` tinyint(1) DEFAULT 0 COMMENT '是否禁用 0否  1是',
  `deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否  1是',
  `create_system_time` datetime DEFAULT NULL COMMENT '创建时间',
  `create_system_admin_id` bigint DEFAULT NULL COMMENT '创建人ID',
  `update_system_time` datetime DEFAULT NULL COMMENT '更新时间',
  `update_system_admin_id` bigint DEFAULT NULL COMMENT '修改人ID',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程管理';

-- 教程编排管理
CREATE TABLE `teacher_scheduling` (
  `id` bigint NOT NULL COMMENT '主键',
  `admin_id` bigint NOT NULL COMMENT '教师',
  `class_id` bigint NOT NULL COMMENT '所属班级',
  `course_id` bigint NOT NULL COMMENT '所授课程',
  `week` tinyint(1) DEFAULT 0 COMMENT '星期 1星期一  2星期二 3星期三 4星期四 5星期五 6星期六 7星期日',
  `start_time` time DEFAULT NULL COMMENT '上课开始时间',
  `end_time` time DEFAULT NULL COMMENT '下课开始时间',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `status` tinyint(1) DEFAULT 0 COMMENT '是否禁用 0否  1是',
  `deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否  1是',
  `create_system_time` datetime DEFAULT NULL COMMENT '创建时间',
  `create_system_admin_id` bigint DEFAULT NULL COMMENT '创建人ID',
  `update_system_time` datetime DEFAULT NULL COMMENT '更新时间',
  `update_system_admin_id` bigint DEFAULT NULL COMMENT '修改人ID',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程管理';

-- 请假管理
CREATE TABLE `leave_management` (
  `id` bigint NOT NULL COMMENT '主键',
  `class_id` bigint NOT NULL COMMENT '所属班级',
  `admin_id` bigint NOT NULL COMMENT '学生',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `start_time` datetime NOT NULL COMMENT '请假开始时间',
  `end_time` datetime NOT NULL COMMENT '请假结束时间',
  `status` tinyint(1) DEFAULT 0 COMMENT '审核状态 0待审核  1审核通过 2审核不通过',
  `deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否  1是',
  `create_system_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_system_time` datetime DEFAULT NULL COMMENT '更新时间',
  `create_system_admin_id` bigint DEFAULT NULL COMMENT '创建人ID',
  `update_system_admin_id` bigint DEFAULT NULL COMMENT '修改人ID',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='请假管理';

-- 签到管理
CREATE TABLE `sign` (
  `id` bigint NOT NULL COMMENT '主键',
  `scheduling_id` bigint NOT NULL COMMENT '所属考勤排班',
  `admin_id` bigint NOT NULL COMMENT '老师',
  `class_id` bigint NOT NULL COMMENT '所属班级',
  `course_id` bigint NOT NULL COMMENT '课程',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `start_time` datetime NOT NULL COMMENT '签到开始时间',
  `end_time` datetime NOT NULL COMMENT '签到结束时间',
  `status` tinyint(1) DEFAULT 0 COMMENT '签到状态 0待开始  1进行中 2已结束',
  `deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否  1是',
  `create_system_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_system_time` datetime DEFAULT NULL COMMENT '更新时间',
  `create_system_admin_id` bigint DEFAULT NULL COMMENT '创建人ID',
  `update_system_admin_id` bigint DEFAULT NULL COMMENT '修改人ID',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='签到管理';

-- 签到记录
CREATE TABLE `sign_record` (
  `id` bigint NOT NULL COMMENT '主键',
  `sign_id` bigint NOT NULL COMMENT '所属签到',
  `admin_id` bigint NOT NULL COMMENT '学生',
  `class_id` bigint NOT NULL COMMENT '所属班级',
  `course_id` bigint NOT NULL COMMENT '课程',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `status` tinyint(1) DEFAULT 0 COMMENT '签到状态 0待签到  1已签到',
  `deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否  1是',
  `create_system_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_system_time` datetime DEFAULT NULL COMMENT '更新时间',
  `create_system_admin_id` bigint DEFAULT NULL COMMENT '创建人ID',
  `update_system_admin_id` bigint DEFAULT NULL COMMENT '修改人ID',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='签到记录';

-- 请假管理
CREATE TABLE `leave_management` (
  `id` bigint NOT NULL COMMENT '主键',
  `class_id` bigint NOT NULL COMMENT '所属班级',
  `admin_id` bigint NOT NULL COMMENT '学生',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `start_time` datetime NOT NULL COMMENT '请假开始时间',
  `end_time` datetime NOT NULL COMMENT '请假结束时间',
  `status` tinyint(1) DEFAULT 0 COMMENT '审核状态 0待审核  1审核通过 2审核不通过',
  `deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否  1是',
  `create_system_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_system_time` datetime DEFAULT NULL COMMENT '更新时间',
  `create_system_admin_id` bigint DEFAULT NULL COMMENT '创建人ID',
  `update_system_admin_id` bigint DEFAULT NULL COMMENT '修改人ID',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='请假管理';

四、项目结构图

1.后端使用idea开发:

 2.前端使用webstorm开发,当然其他开发工具都有可以(vscode/Hbuilder等):

3.项目本地文档访问:

访问地址格式:后端项目地址+后端项目端口号+/doc.html

如:http://localhost:9003/doc.html

4.项目端口号、数据库访问等配置 

5.静态资源访问、文件上传配置 

五、总结

项目功能完整,后续可能将不断升级。

关注作者,及时了解更多好项目!

作者主页也有更多好项目分享!

获取源码或如需帮助,可通过博客后面名片+作者即可!

 其他作品集合

  1. 《vue+element实现电商商城礼品代发网,商品、订单管理》
  2. 《vue+vant2完美实现香奈儿移动端商城网站》
  3. 《vue+elementui实现联想购物商城,样式美观大方》
  4. 《vue+elementui实现英雄联盟道具城》
  5. 《vue+elementui实现app布局小米商城,样式美观大方,功能完整》
  6. 《vue完美模拟pc版快手,实现短视频,含短视频详情播放》
  7. 《vue+element实现美观大方好看的音乐网站,仿照咪咕音乐网》     
  8. 《vue实现功能完整的购物商城,商品零食、电商通用商城》
  9. 《vue+element实现蔬菜、水果、电商商城》
  10. 《vue+element简单实现电商商城网站,模仿小米电商商城》
  11. 《vue实现美观大方的动漫、cos、帖子类型网站》
  12. 《vue实现好看的相册、图片网站》
  13. 《高度仿PC版《微信读书》,好看的小说、读书网站》
  14. 《vue+element实现非常好看的鲜花网站商城,页面完整,样式美观》
  15. 《vue+elementui+springboot前后端分离实现通用商城管理后台》
  16. 《微信小程序日记、微信小程序个人空间、个人日记》
  17. 《vue+element模仿腾讯视频电影网站》
  18. 《vue+element高度仿照QQ音乐,完美实现PC端QQ音乐》
  19. 《vue+element详细完整实现个人博客、个人网站》
  20. 《vue+elementui+springboot前后端分离实现学校帖子网站,学校大作业》
  21. 《vue+elementui实现U袋网-完整版》
  22. 《vue+element+electron仿微信实现》
  23. 《vue+element模仿电商商城,前后端分离实现,下单微信扫码支付》
  24. 《electron+vue+elementui实现类似QQ窗口靠边自动边缘隐藏》
  25. 《微信小程序仿唯聚时代,微信小程序商城》
  26. 《jquery+bootstrap完整丰富样式开发框架源码,各种现成样式简单易用》
  27. 《html+css响应式旅游主题网站模板,旅游网站,企业文化新闻类网站》
  28. 《css+html各种动态、动画、3D相册等7件套》
  29. 《仿华为电商商城,官网,华为超级新品日demo,大屏霸气且简洁》
  30. 《vue+element简单实现商城网站首页,模仿电商商城》
  31. 《vue+elementui实现非常好看的博客、网站首页,网站模板》
  32. 《elementui+vue实现经典管理系统布局框架,拿来即用》
  33. 《简系统登录页模板html+vue+elementui》
  34. 《vue+elementui完美实现博客、网站、个人网站,高仿“张凯博客”》
  35. 《vue+elementui完美实现后台管理系统的左、右、顶部菜单布局》
  36. 《html5+css3实现3D正方体动画相册2种+3D旋转木马立体动画相册+表白文字加动画爱心+炫酷万花筒五件套含音乐》
  37. 《后端使用springboot+maven+shiro+mybatis+mysql,前端使用H-ui.admin_v3.1.3.1,快速实现管理后台功能》
  38. 《springboot+thymeleaf+maven+html+css实现精美大方好看官网模板完整源码》
  39. 《html+css实现好友列表,类似QQ群聊成员列表》
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐