首先,我们需要定义一个实体类来表示请假记录:

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

    @Column(name = "user_id")
    private Long userId;

    @Column(name = "start_date")
    private LocalDate startDate;

    @Column(name = "end_date")
    private LocalDate endDate;

    @Column(name = "leave_days")
    private Integer leaveDays;

    // getter/setter 省略
}

接下来,我们需要编写一个工具类来计算请假天数:

@Component
public class LeaveCalculator {
    private static final int WORK_DAYS_PER_WEEK = 5;

    public int calculateLeaveDays(LocalDate startDate, LocalDate endDate) {
        int leaveDays = 0;

        LocalDate currentDate = startDate;
        while (currentDate.isBefore(endDate) || currentDate.isEqual(endDate)) {
            if (isWorkDay(currentDate)) {
                leaveDays++;
            }
            currentDate = currentDate.plusDays(1);
        }

        return leaveDays;
    }

    private boolean isWorkDay(LocalDate date) {
        DayOfWeek dayOfWeek = date.getDayOfWeek();
        return dayOfWeek != DayOfWeek.SATURDAY && dayOfWeek != DayOfWeek.SUNDAY;
    }
}

注意,我们在这里使用了 LocalDate 类来处理日期,而不是 Date 类。LocalDate 类是 Java 8 引入的日期时间 API 中的一部分,它提供了一些方便的方法来处理日期。另外,我们在这里也使用了 Spring 的依赖注入功能,将这个工具类声明为一个组件。

最后,我们需要编写一个控制器来处理前端的请求:

@Controller
public class LeaveController {
    @Autowired
    private LeaveRepository leaveRepository;

    @Autowired
    private LeaveCalculator leaveCalculator;

    @GetMapping("/leave")
    public String leaveForm(Model model) {
        model.addAttribute("leaveRecord", new LeaveRecord());
        return "leave";
    }

    @PostMapping("/leave")
    public String leaveSubmit(@ModelAttribute LeaveRecord leaveRecord) {
        leaveRecord.setLeaveDays(leaveCalculator.calculateLeaveDays(
                leaveRecord.getStartDate(),
                leaveRecord.getEndDate()));
        leaveRepository.save(leaveRecord);
        return "result";
    }
}

在这里,我们使用了 @Autowired 注解来注入 LeaveRepositoryLeaveCalculator 对象。leaveForm 方法用于显示请假表单,leaveSubmit 方法用于处理提交的表单数据,并将请假记录保存到数据库中。

最后,我们需要编写一个 Thymeleaf 模板来渲染前端页面:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>请假系统</title>
</head>
<body>
    <h1>请假申请</h1>
    <form action="#" th:action="@{/leave}" th:object="${leaveRecord}" method="post">
        <div>
            <label for="userId">用户ID:</label>
            <input type="text" id="userId" name="userId" th:field="*{userId}">
        </div>
        <div>
            <label for="startDate">开始日期:</label>
            <input type="date" id="startDate" name="startDate" th:field="*{startDate}">
        </div>
        <div>
            <label for="endDate">结束日期:</label>
            <input type="date" id="endDate" name="endDate" th:field="*{endDate}">
        </div>
        <button type="submit">提交</button>
    </form>
</body>
</html>

在模板中,我们使用了 Thymeleaf 的表达式来绑定表单字段和模型属性。th:field 属性用于将表单字段绑定到模型属性,th:action 属性用于指定表单提交的地址。

这样,我们就完成了一个简单的请假系统。当用户提交请假申请时,系统会自动计算请假天数,并将请假记录保存到数据库中。在实际应用中,我们还可以添加更多功能,例如管理员审核、请假统计等

公司请假系统休假维护中维护的当月周期为上月16日到当月15日系统自动略过周六日写一个工具类完成前端用thymeleaf后端用spring boot+JPA

原文地址: https://www.cveoy.top/t/topic/cRa7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录