1. 项目概述
作为一名长期从事企业信息化系统开发的工程师,我最近为一家中型建筑公司设计了一套基于Python Flask和微信小程序的员工考勤管理系统。这个系统解决了传统建筑行业在人员分散、工地流动性大情况下的考勤管理难题。
系统核心功能包括:
- 基于地理位置的移动考勤签到
- 多级审批的电子请假流程
- 实时数据统计与分析报表
- 微信小程序便捷访问
这套系统特别适合建筑、工程等需要现场作业的行业,相比传统指纹打卡机,具有部署成本低、使用便捷、数据实时等优势。下面我将详细分享整个开发过程中的技术选型、实现细节和实战经验。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 技术栈选型考量
选择Python Flask作为后端框架主要基于以下考虑:
- 开发效率:建筑行业需求变化快,Flask的轻量级特性适合快速迭代
- 资源占用:相比Django,Flask更节省服务器资源,适合中小型企业
- 扩展性:通过插件可灵活添加所需功能
前端选择微信小程序而非原生App的原因:
- 建筑工人普遍使用微信,无需额外安装App
- 微信生态提供现成的用户体系和支付能力
- 开发维护成本远低于原生App
数据库方案:
- 开发测试阶段使用SQLite:零配置,单文件管理
- 生产环境使用MySQL:支持高并发,数据更安全
2.2 系统架构图
code复制[微信小程序] ←HTTPS→ [Nginx] ←WSGI→ [Flask App]
↑
[MySQL]
[Redis]
这种架构保证了:
- 前端轻量化,所有业务逻辑在后端实现
- Nginx提供静态文件服务和负载均衡
- Redis缓存高频访问数据(如考勤统计)
3. 数据库详细设计
3.1 核心表结构
员工表(employee)
sql复制CREATE TABLE employee (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
department ENUM('工程部','设计部','行政部','财务部') NOT NULL,
position VARCHAR(50),
openid VARCHAR(50) UNIQUE COMMENT '微信用户唯一标识',
phone VARCHAR(20),
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
请假表(leave_request)
sql复制CREATE TABLE leave_request (
id INT AUTO_INCREMENT PRIMARY KEY,
employee_id INT NOT NULL,
leave_type ENUM('年假','病假','事假','调休') NOT NULL,
start_date DATETIME NOT NULL,
end_date DATETIME NOT NULL,
reason TEXT,
status ENUM('pending','approved','rejected') DEFAULT 'pending',
approver_id INT COMMENT '审批人ID',
approve_time DATETIME,
FOREIGN KEY (employee_id) REFERENCES
