基于SSM框架的医院人事考勤管理系统 - 源码深度解析

JavaJavaScriptHTMLCSSSSM框架MavenMySQL
2026-02-079 浏览

文章摘要

本项目是基于SSM(Spring+SpringMVC+MyBatis)框架开发的医院人事考勤管理系统,旨在解决医院内部人员管理流程繁琐、考勤数据分散、审批效率低下等核心痛点。系统通过集成请假申请、考勤记录、人员信息管理等功能,将传统纸质或Excel表格管理方式升级为数字化流程,显著减少人工统计错误,...

在现代医疗机构的日常运营中,人事考勤管理是保障医疗服务连续性的关键环节。传统医院普遍面临人员流动频繁、排班复杂、考勤数据分散等挑战,手工记录和Excel表格管理方式容易导致数据不一致、审批流程滞后。为解决这些痛点,我们设计并实现了一套基于SSM框架的医院智能人事管理平台,通过数字化手段重构了医院的人事考勤工作流。

系统架构与技术栈

该平台采用经典的三层架构设计,前端使用JSP动态页面技术结合jQuery实现用户交互,后端基于Spring+SpringMVC+MyBatis框架体系。Spring框架负责业务组件的依赖注入和事务管理,通过AOP切面统一处理权限验证和操作日志记录;SpringMVC采用RESTful风格接口设计,实现前后端数据交互的标准化;MyBatis作为数据持久层框架,通过XML映射文件灵活配置复杂的SQL查询逻辑。

项目采用Maven进行依赖管理,确保第三方库版本的一致性。数据库选用MySQL 5.7,通过InnoDB存储引擎保障事务的ACID特性,为医院人事数据提供可靠存储保障。

数据库设计亮点

考勤表设计:精细化时间记录

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(10) DEFAULT NULL COMMENT '工作类型',
  `notes` varchar(255) DEFAULT NULL COMMENT '备注'
) ENGINE=InnoDB CHARSET=utf8 COMMENT='考勤表';

考勤表设计体现了对医疗行业特殊工作模式的深度理解。start_typeend_type字段记录打卡类型(正常、迟到、早退等),work_type区分常规班次与特殊排班,满足医院24小时轮班制需求。日期与时间分离存储的设计便于生成月度考勤统计报表。

请假表设计:状态驱动的工作流

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 '备注'
) ENGINE=InnoDB CHARSET=utf8 COMMENT='请假表';

请假表采用状态驱动设计,status字段控制审批流程流转。枚举类型严格限制请假类型和状态值,确保数据规范性。department_numberemployee_number的双重关联支持按部门统计请假数据,为科室人力调配提供依据。

历史记录表设计:全生命周期追踪

CREATE TABLE `history` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `employee_number` int(10) DEFAULT NULL COMMENT '员工编号',
  `name` varchar(10) DEFAULT NULL COMMENT '员工姓名',
  `gender` enum('男','女') DEFAULT NULL COMMENT '性别',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `telephone` varchar(20) DEFAULT '' COMMENT '电话',
  `email` varchar(30) DEFAULT '' COMMENT '邮箱',
  `in_time` date DEFAULT NULL COMMENT '入职时间',
  `out_time` date DEFAULT NULL COMMENT '离职时间',
  `department_number` int(10) DEFAULT NULL COMMENT '部门编号',
  `position_number` int(10) DEFAULT NULL COMMENT '职位编号',
  `status` enum('离职','在职','退休') DEFAULT NULL COMMENT '状态'
) ENGINE=InnoDB CHARSET=utf8 COMMENT='历史记录表';

历史记录表实现了员工全生命周期管理,通过in_timeout_time记录任职周期,status字段动态反映员工当前状态。该表作为人事数据仓库,支持员工流动分析和人力成本核算。

考勤记录查询

核心功能实现

智能考勤打卡机制

系统通过AttendanceController实现双轨制考勤记录,分别处理上班打卡和下班打卡业务逻辑:

@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";
    }
}

Service层封装了复杂的考勤规则校验,包括迟到早退判断、连续工作时间计算等业务逻辑:

@Service
public class AttendanceServiceImpl implements AttendanceService {
    
    @Override
    public void addStart(Integer employeeNumber) {
        // 检查是否重复打卡
        Attendance todayRecord = attendanceMapper.selectByEmployeeAndDate(
            employeeNumber, new Date());
        if(todayRecord != null && todayRecord.getStartTime() != null) {
            throw new BusinessException("今日已打卡,请勿重复操作");
        }
        
        // 创建考勤记录
        Attendance attendance = new Attendance();
        attendance.setEmployeeNumber(employeeNumber);
        attendance.setDay(new Date());
        attendance.setStartTime(new Date());
        
        // 判断打卡类型(正常/迟到)
        Date standardStartTime = getStandardStartTime(employeeNumber);
        if(new Date().after(standardStartTime)) {
            attendance.setStartType("迟到");
        } else {
            attendance.setStartType("正常");
        }
        
        attendanceMapper.insert(attendance);
    }
}

上下班打卡界面

请假审批工作流

请假管理模块实现了完整的申请-审批-归档流程,支持事假和病假两种类型:

@Service
public class LeaveServiceImpl implements LeaveService {
    
    @Transactional
    @Override
    public void applyLeave(Leave leave) {
        // 校验假期余额
        Integer usedDays = leaveMapper.getUsedLeaveDays(
            leave.getEmployeeNumber(), leave.getType(), getYear());
        Integer totalDays = getTotalLeaveDays(leave.getEmployeeNumber(), leave.getType());
        
        if(usedDays + leave.getDays() > totalDays) {
            throw new BusinessException("假期余额不足");
        }
        
        // 自动计算审批路径
        Employee employee = employeeMapper.selectByNumber(leave.getEmployeeNumber());
        Department department = departmentMapper.selectByNumber(employee.getDepartmentNumber());
        leave.setManager(department.getManager());
        leave.setStatus("未批准");
        
        leaveMapper.insert(leave);
        
        // 发送审批通知
        notificationService.sendLeaveApprovalNotice(department.getManager(), leave);
    }
}

前端采用Ajax异步提交技术,实时验证表单数据并提示用户操作结果:

<script>
$('#leaveForm').submit(function(e) {
    e.preventDefault();
    
    $.ajax({
        url: 'leave/apply.do',
        type: 'POST',
        data: $(this).serialize(),
        success: function(response) {
            if(response.success) {
                $('#resultMessage').html('请假申请提交成功,等待审批');
                $('#leaveForm')[0].reset();
            } else {
                $('#resultMessage').html('提交失败:' + response.message);
            }
        }
    });
});
</script>

请假申请界面

多维度考勤查询分析

系统提供灵活的考勤数据查询功能,支持按员工、部门、时间范围等多维度统计分析:

@Controller
@RequestMapping("/attendance")
public class AttendanceController {

    @RequestMapping("/list.do")
    public String selectList(Model model){
        List<Attendance> list = attendanceService.selectList();
        model.addAttribute("aList", list);
        return "admin/attendance_list";
    }
    
    @RequestMapping("/{employeeNumber}/oneself.do")
    public String select(Model model, @PathVariable Integer employeeNumber){
        List<Attendance> list = attendanceService.selectByEmployee(employeeNumber);
        model.addAttribute("aList", list);
        return "admin/oneself_attendance";
    }
}

MyBatis映射文件实现复杂关联查询,将考勤记录与员工信息进行联合查询:

<!-- AttendanceMapper.xml -->
<select id="selectList" resultMap="AttendanceResultMap">
    SELECT a.*, e.name as employee_name, d.name as department_name
    FROM attendance a
    LEFT JOIN employee e ON a.employee_number = e.employee_number
    LEFT JOIN department d ON e.department_number = d.department_number
    WHERE a.day BETWEEN #{startDate} AND #{endDate}
    ORDER BY a.day DESC, e.department_number
</select>

考勤统计分析

人员调动与历史追踪

员工调动模块记录完整的职业轨迹,确保人事变动的可追溯性:

@Entity
@Table(name = "move")
public class EmployeeTransfer {
    private Integer id;
    private Integer employeeNumber;
    private Integer beforeDepartment;  // 调动前部门
    private Integer afterDepartment;   // 调动后部门
    private Date transferTime;         // 调动时间
    private String manager;            // 审批经理
    private String notes;              // 调动原因
    
    // 关联员工信息
    private Employee employee;
    private Department beforeDept;
    private Department afterDept;
}

系统自动维护员工状态变更,当发生部门调动时,同步更新相关数据:

@Service
public class TransferServiceImpl implements TransferService {
    
    @Transactional
    @Override
    public void processTransfer(EmployeeTransfer transfer) {
        // 记录调动历史
        transferMapper.insert(transfer);
        
        // 更新员工当前部门
        Employee employee = employeeMapper.selectByNumber(transfer.getEmployeeNumber());
        employee.setDepartmentNumber(transfer.getAfterDepartment());
        employeeMapper.update(employee);
        
        // 记录人事变动日志
        systemLogService.logTransfer(transfer);
    }
}

人员调动记录

实体模型设计

系统采用贫血模型设计,实体类严格对应数据库表结构,通过MyBatis-Plus注解简化数据访问操作:

@TableName("attendance")
public class Attendance extends Model<Attendance> implements Serializable{
    
    private static final long serialVersionUID = 1L;
    
    @TableId
    private Integer id;
    private Integer employeeNumber;
    private Date day;
    private String timeType;
    private Date startTime;
    private String startType;
    private Date endTime;
    private String endType;
    private String workType;
    private String notes;
    
    @TableField(exist=false)
    private Employee employee;
    
    // Getter/Setter方法
    public Integer getId() { return id; }
    public void setId(Integer id) { this.id = id; }
    
    public Integer getEmployeeNumber() { return employeeNumber; }
    public void setEmployeeNumber(Integer employeeNumber) { 
        this.employeeNumber = employeeNumber; 
    }
    
    // 其他属性方法...
    
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}

实体类通过@TableField(exist=false)注解标注非持久化字段,支持业务层的数据关联查询,避免在数据库层面进行过多的表连接操作。

功能展望与优化

实时数据大屏展示

引入ECharts等数据可视化库,构建医院人力运营监控大屏。实时展示各科室在岗率、请假趋势、考勤异常预警等关键指标,为管理层决策提供数据支持。技术实现上可采用WebSocket推送实时数据更新。

移动端适配与小程序开发

开发微信小程序版本,实现移动端打卡、请假申请、审批操作等功能。利用uni-app框架实现跨平台开发,后端接口增加JWT令牌认证机制,保障移动端访问安全。

智能排班优化算法

集成遗传算法或约束规划技术,基于历史考勤数据、员工技能矩阵、科室需求预测等要素,自动生成最优排班方案。减少人工排班工作量,同时平衡员工工作负荷。

微服务架构改造

将单体应用拆分为考勤服务、人事服务、审批服务等独立微服务。通过Spring Cloud体系实现服务治理,配置API网关统一入口,提升系统可扩展性和容错能力。

数据审计与安全增强

增加操作日志全量记录功能,实现数据变更的完整审计追踪。引入ShardingSphere进行数据分片,对敏感人事信息进行加密存储,符合医疗行业数据安全规范要求。

总结

该医院智能人事管理平台通过精细化的数据库设计、严谨的业务逻辑实现和友好的用户交互体验,成功解决了传统医院人事管理中的核心痛点。系统采用成熟的SSM技术栈,保证了项目的稳定性和可维护性。实体模型设计合理,业务层封装完善,为后续功能扩展奠定了坚实基础。特别是在考勤规则处理、请假审批流程等核心业务场景中,展现了良好的工程实践和业务适配能力。

平台不仅实现了基础的人事考勤管理功能,更通过历史数据追踪、多维度统计分析等高级特性,为医院人力资源管理提供了深度价值。未来通过引入大数据分析、移动互联等新技术,有望进一步提升系统的智能化水平和用户体验,成为医疗行业数字化转型的重要支撑平台。

本文关键词
SSM框架医院人事管理考勤管理系统源码解析数据库设计

上下篇

上一篇
没有更多文章
下一篇
没有更多文章