基于SSM框架的企业员工考勤管理系统 - 源码深度解析
在现代企业人力资源管理中,考勤管理是基础且关键的一环。传统的手工记录或简单的Excel表格管理方式存在数据易出错、统计效率低下、信息追溯困难以及人工成本高昂等核心痛点。为了解决这些问题,我们设计并实现了一套基于SSM(Spring + Spring MVC + MyBatis)框架的企业级智能考勤管理平台。
系统架构与技术栈
该平台采用经典的三层架构模式,确保系统的高内聚低耦合:
- 表现层:使用HTML、CSS和JavaScript构建响应式用户界面
- 业务逻辑层:基于Spring MVC框架处理核心业务逻辑
- 数据持久层:采用MyBatis框架实现数据访问
- 数据库:选用MySQL 5.7+作为数据存储方案
整个系统通过Maven进行依赖管理和项目构建,确保了项目的可维护性和可扩展性。
Spring框架核心作用
Spring框架作为系统的核心容器,通过以下机制实现高效管理:
- 控制反转(IoC):负责管理所有业务逻辑组件的依赖注入
- 面向切面编程(AOP):实现日志记录、事务管理等横切关注点
- 声明式事务管理:通过@Transactional注解确保数据一致性
Spring MVC请求处理流程
Spring MVC框架负责Web层的请求分发和响应处理,其核心组件包括:
- DispatcherServlet:前端控制器,统一处理所有请求
- HandlerMapping:根据URL映射到对应的控制器
- Controller:处理具体业务逻辑
- ViewResolver:解析视图名称返回具体视图
@Controller
@RequestMapping("/attendance")
public class AttendanceController {
@Autowired
private AttendanceService attendanceService;
@RequestMapping("/addStart.do")
public String addStart(Integer employeeNumber){
attendanceService.addStart(employeeNumber);
return "welcome";
}
@RequestMapping("/addEnd.do")
public String addEnd(Integer employeeNumber){
attendanceService.addEnd(employeeNumber);
return "welcome";
}
}
MyBatis数据持久化优势
MyBatis作为数据持久层框架,提供了以下关键特性:
- 灵活的SQL映射:支持XML配置和注解两种方式
- 动态SQL:通过
、 等标签实现条件查询 - 缓存机制:一级缓存和二级缓存提升查询性能
- 结果集映射:自动将ResultSet映射为Java对象
数据库设计亮点
考勤表设计
考勤表(attendance)的设计充分考虑了实际业务需求和高性能查询:
CREATE TABLE `attendance` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`employee_number` int(10) DEFAULT NULL COMMENT '员工编号',
`day` date DEFAULT NULL COMMENT '考勤日期',
`time_type` varchar(10) DEFAULT NULL COMMENT '时间类型',
`start_time` datetime DEFAULT NULL COMMENT '上班时间',
`start_type` varchar(10) DEFAULT NULL COMMENT '上班打卡类型',
`end_time` datetime DEFAULT NULL COMMENT '下班时间',
`end_type` varchar(10) DEFAULT NULL COMMENT '下班打卡类型',
`work_type` varchar(20) DEFAULT NULL COMMENT '工作类型',
`notes` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_employee_date` (`employee_number`, `day`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='考勤表';
设计亮点分析:
- 性能优化:使用复合索引
idx_employee_date优化了按员工和日期查询的性能 - 业务灵活性:分离上班和下班时间记录,支持灵活的打卡机制
- 异常处理:详细的打卡类型标识,便于统计异常考勤情况
- 数据完整性:使用InnoDB引擎支持事务和外键约束
请假表设计
请假表(lea)的设计体现了业务流程的完整性和数据一致性:
CREATE TABLE `lea` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`employee_number` int(10) DEFAULT NULL COMMENT '员工编号',
`department_number` int(10) DEFAULT NULL COMMENT '部门编号',
`start_time` date DEFAULT NULL COMMENT '开始时间',
`end_time` date DEFAULT NULL COMMENT '结束时间',
`days` varchar(10) DEFAULT NULL COMMENT '请假天数',
`reason` varchar(100) DEFAULT NULL COMMENT '请假原因',
`type` enum('事假','病假') DEFAULT NULL COMMENT '请假类型',
`manager` varchar(10) DEFAULT NULL COMMENT '审批经理',
`status` enum('已批准','未批准') DEFAULT '未批准' COMMENT '审批状态',
`notes` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_employee_status` (`employee_number`, `status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='请假表';
业务逻辑设计:
- 数据约束:通过枚举类型严格限制请假类型和审批状态的可选值
- 流程控制:状态字段默认值设置为'未批准',符合业务流程初始状态
- 查询优化:建立员工编号和状态的复合索引,提升审批查询效率
职位表设计
职位表(position)采用层级化设计,为权限控制奠定基础:
CREATE TABLE `position` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`position_number` int(10) DEFAULT NULL COMMENT '职位编号',
`name` varchar(20) DEFAULT NULL COMMENT '职位名称',
`level` enum('部门主任','部门员工','人事部主任','人事部员工') DEFAULT NULL COMMENT '职位级别',
`notes` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_position_number` (`position_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='职位表';
权限管理基础:
- 层级清晰:使用枚举类型明确组织架构中的权限层级
- 唯一约束:确保职位编号的唯一性,避免数据重复
- 扩展性:为后续的RBAC(基于角色的访问控制)提供数据结构支持

核心功能实现
智能考勤管理
考勤管理模块采用策略模式实现灵活的考勤规则,支持多种考勤场景:
@Service
public class AttendanceServiceImpl implements AttendanceService {
@Autowired
private AttendanceMapper attendanceMapper;
@Override
@Transactional
public void addStart(Integer employeeNumber) {
Attendance attendance = new Attendance();
attendance.setEmployeeNumber(employeeNumber);
attendance.setDay(new Date());
attendance.setStartTime(new Date());
attendance.setStartType("正常");
// 使用策略模式判断考勤状态
if (isLate(attendance.getStartTime())) {
attendance.setStartType("迟到");
}
attendanceMapper.insert(attendance);
}
/**
* 迟到判断逻辑 - 可配置化设计
* 标准上班时间:9:00
*/
private boolean isLate(Date startTime) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(startTime);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
// 支持可配置的考勤规则
return hour > 9 || (hour == 9 && minute > 0);
}
}
功能特性:
- 自动识别:系统自动识别迟到、早退、缺勤等异常情况
- 灵活配置:考勤规则支持配置化,适应不同企业需求
- 事务保障:使用@Transactional确保数据一致性
- 异常处理:完善的异常处理机制,保证系统稳定性

请假审批流程
请假模块采用状态模式实现完整的业务流程管理:
@Controller
@RequestMapping("/leave")
public class LeaveController {
@Autowired
private LeaveService leaveService;
@RequestMapping("/apply")
public String applyLeave(Leave leave, Model model) {
try {
leaveService.applyLeave(leave);
model.addAttribute("message", "请假申请提交成功");
} catch (BusinessException e) {
model.addAttribute("error", e.getMessage());
}
return "leave/result";
}
}
流程设计亮点:
- 状态管理:完整的请假状态流转(草稿→提交→审批→完成)
- 权限控制:基于职位级别的分级审批机制
- 自动计算:系统自动计算工作日,排除节假日
- 消息通知:审批结果实时通知相关人员
系统特色与创新点
技术架构优势
- 高可维护性:分层架构设计,各层职责清晰
- 扩展性强:接口化设计,便于功能扩展
- 性能优异:数据库优化和缓存策略提升系统响应速度
业务价值体现
- 效率提升:自动化考勤统计,减少人工操作90%以上
- 准确性高:数字化管理避免人为错误
- 成本节约:降低人力资源管理成本
- 决策支持:提供全面的考勤数据分析报表
该系统不仅解决了传统考勤管理的痛点,更为企业数字化转型提供了可靠的技术支撑。通过SSM框架的优雅实现,展现了Java企业级应用开发的成熟技术和最佳实践。