当前位置: 首页 > 新闻资讯  > 学工系统

基于Spring Boot的师范大学学生工作管理系统请假模块实现

本文通过对话形式探讨了基于Spring Boot构建的师范大学学生工作管理系统中请假模块的设计与实现,涉及后端技术、数据库设计和前端交互。

小明:嘿,小李,最近我在做一个关于师范大学学生工作管理系统的项目,你对这个系统有了解吗?

小李:哦,学生工作管理系统啊,我之前也接触过一些。你是用什么技术做的呢?

小明:目前是用Spring Boot来开发的,感觉挺适合做这种管理系统。不过现在遇到了一个难题,就是请假模块怎么设计比较好。

小李:请假模块?那应该是一个比较基础的功能吧。你要考虑用户提交请假申请、老师审批、系统记录这些流程。

小明:没错,而且还要考虑到不同角色的权限问题,比如学生只能提交请假,老师可以审批,管理员可能需要查看所有记录。

小李:那你可以先从数据库设计开始。请假信息通常包括学生ID、姓名、课程名称、请假类型(事假、病假等)、时间、原因、状态(待审批、已批准、已拒绝)等字段。

小明:嗯,那我应该怎么设计表结构呢?有没有具体的代码示例?

小李:当然有,我可以给你写一个简单的例子。首先,创建一个请假表,比如叫leave_request。

小明:好的,那我来写一下SQL语句。

小李:你可以这样写:

CREATE TABLE leave_request (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    student_id VARCHAR(20) NOT NULL,
    name VARCHAR(50) NOT NULL,
    course_name VARCHAR(100) NOT NULL,
    leave_type ENUM('事假', '病假', '其他') NOT NULL,
    start_time DATETIME NOT NULL,
    end_time DATETIME NOT NULL,
    reason TEXT,
    status ENUM('待审批', '已批准', '已拒绝') DEFAULT '待审批',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
    

小明:这看起来很清晰。那接下来是后端逻辑部分,你怎么处理呢?

小李:Spring Boot的话,可以用RESTful API来实现。比如,学生提交请假请求时,调用一个POST接口,将数据传入。

小明:那具体的Java类怎么写呢?

小李:我们可以创建一个LeaveRequest实体类,对应数据库表。

小明:那具体代码是怎样的?

小李:如下所示:

@Entity
@Table(name = "leave_request")
public class LeaveRequest {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String studentId;

    private String name;

    private String courseName;

    private String leaveType;

    private LocalDateTime startTime;

    private LocalDateTime endTime;

    private String reason;

    private String status;

    private LocalDateTime createTime;

    // Getters and Setters
}
    

小明:明白了,那接下来是Service层,负责处理业务逻辑,比如保存请假请求。

小李:对的,你可以写一个LeaveService类,里面包含save方法。

小明:那具体怎么写呢?

小李:例如:

@Service
public class LeaveService {

    @Autowired
    private LeaveRepository leaveRepository;

    public LeaveRequest saveLeaveRequest(LeaveRequest leaveRequest) {
        return leaveRepository.save(leaveRequest);
    }
}
    

小明:那Controller层呢?是不是要处理HTTP请求?

小李:没错,你可以写一个LeaveController,接收POST请求,把参数封装成LeaveRequest对象,然后调用Service保存。

小明:那具体代码是怎样的?

小李:如下所示:

@RestController
@RequestMapping("/api/leave")
public class LeaveController {

    @Autowired
    private LeaveService leaveService;

    @PostMapping("/submit")
    public ResponseEntity submitLeave(@RequestBody LeaveRequest request) {
        return ResponseEntity.ok(leaveService.saveLeaveRequest(request));
    }
}
    

小明:看来这个流程已经很清晰了。那审批功能怎么实现呢?

小李:审批功能需要老师登录后查看待审批的请假请求,并进行操作。这时候你可以设计一个查询接口,返回状态为“待审批”的记录。

小明:那怎么在Controller里实现呢?

小李:比如,可以添加一个GET接口,根据status查询:

@GetMapping("/pending")
public ResponseEntity> getPendingRequests() {
    List requests = leaveService.findPendingRequests();
    return ResponseEntity.ok(requests);
}
    

小明:那Service层需要怎么实现呢?

小李:在LeaveService中,可以写一个方法,调用Repository查询状态为“待审批”的记录:

public List findPendingRequests() {
    return leaveRepository.findByStatus("待审批");
}
    

小明:那Repository层呢?是不是要定义一个自定义查询方法?

小李:是的,可以在LeaveRepository接口中添加如下方法:

public interface LeaveRepository extends JpaRepository {
    List findByStatus(String status);
}
    

学生工作管理系统

小明:明白了。那审批功能还需要更新状态,比如老师点击批准或拒绝,该怎么处理呢?

小李:你可以再写一个PUT接口,用来更新请假记录的状态。

小明:那具体代码是怎样的?

小李:比如:

@PutMapping("/update-status/{id}")
public ResponseEntity updateStatus(@PathVariable Long id, @RequestParam String status) {
    return ResponseEntity.ok(leaveService.updateStatus(id, status));
}
    

小明:那Service层怎么处理呢?

小李:在LeaveService中,可以写一个方法,根据ID查找记录,然后更新状态:

public LeaveRequest updateStatus(Long id, String status) {
    LeaveRequest request = leaveRepository.findById(id).orElseThrow(() -> new RuntimeException("请假记录不存在"));
    request.setStatus(status);
    return leaveRepository.save(request);
}
    

小明:听起来不错。那前端怎么调用这些API呢?

小李:前端可以通过AJAX或者Fetch API发送请求,比如提交请假请求时使用POST,审批时使用PUT。

小明:那权限控制方面呢?比如只有老师才能审批,学生只能提交。

小李:这个就需要用到Spring Security来实现权限控制。你可以配置不同的角色,比如Student和Teacher,分别赋予不同的访问权限。

小明:那具体怎么配置呢?

小李:可以定义一个SecurityConfig类,继承WebSecurityConfigurerAdapter,并配置权限规则。

小明:那具体代码是怎样的?

小李:比如:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/api/leave/**").hasRole("STUDENT")
                .antMatchers("/api/leave/update-status/**").hasRole("TEACHER")
                .anyRequest().authenticated()
            .and()
            .formLogin();
    }
}
    

小明:这样就能限制不同角色的访问权限了。

小李:没错,这就是一个基本的请假模块的实现思路。当然,还可以进一步优化,比如添加通知功能、请假记录导出、审批历史查看等。

小明:太好了,谢谢你!我现在对这个系统有了更清晰的认识。

小李:不客气,如果你还有其他问题,随时问我!

本站部分内容及素材来源于互联网,如有侵权,联系必删!

相关资讯

    暂无相关的数据...