#ifndef ATTENDANCE_SYSTEM_APP_HPP #define ATTENDANCE_SYSTEM_APP_HPP #include #include #include #include #include // ============================================================ // 枚举定义 // ============================================================ /// 打卡方式 enum class CheckinMethod { FACE, // 人脸识别 GPS, // GPS定位 CARD // 工牌刷卡 }; /// 打卡状态 enum class CheckinStatus { SUCCESS, FAILED }; /// 考勤状态 enum class AttendanceStatus { NORMAL, LATE, EARLY, ABSENT, OVERTIME }; /// 预警类型 enum class AlertType { UNCHECKED, // 未打卡 EARLY, // 早退 LATE, // 迟到 MISSING // 连续缺勤 }; /// 报表维度 enum class ReportDimension { MONTH, DEPT, PROJECT }; /// 导出格式 enum class ExportFormat { EXCEL, PDF }; /// 系统角色 enum class SystemRole { SUPER_ADMIN, HR_MANAGER, DEPT_MANAGER }; /// 数据同步类型 enum class SyncDataType { EMPLOYEE, SCHEDULE, ATTENDANCE }; /// 同步状态 enum class SyncStatus { SUCCESS, FAILED, PENDING }; // ============================================================ // 数据结构定义 // ============================================================ /// 经纬度坐标 struct GeoLocation { double lat = 0.0; double lng = 0.0; }; /// 打卡记录 (Check-in Record) struct CheckinRecord { std::string recordId; // 打卡记录编号 std::string employeeId; // 员工编号 CheckinMethod method; // 打卡方式 int64_t timestamp; // 13位Unix时间戳(毫秒) GeoLocation location; // 地理位置 std::vector faceFeature; // 人脸特征码(加密后) CheckinStatus status; // 打卡状态 CheckinRecord() : method(CheckinMethod::FACE), timestamp(0), status(CheckinStatus::SUCCESS) {} }; /// 班次定义 struct ShiftRule { std::string shiftName; // 班次名称 int startHour = 9; // 开始小时 int startMinute = 0; // 开始分钟 int endHour = 18; // 结束小时 int endMinute = 0; // 结束分钟 int breakDuration = 60; // 休息时长(分钟) int overtimeThreshold = 30; // 加班判定阈值(分钟) }; /// 排班规则 (Schedule Rule) struct ScheduleRule { std::string deptId; // 部门编号 std::vector rules; // 班次列表 std::string version; // 规则版本号 }; /// 考勤结果 (Attendance Result) struct AttendanceResult { std::string employeeId; // 员工编号 std::string date; // 日期 YYYY-MM-DD int64_t actualInTime = 0; // 实际签到时间戳 int64_t actualOutTime = 0; // 实际签退时间戳 int scheduledInHour = 9; // 应签到小时 int scheduledInMin = 0; // 应签到分钟 int scheduledOutHour = 18; // 应签退小时 int scheduledOutMin = 0; // 应签退分钟 int lateMinutes = 0; // 迟到分钟数 int earlyLeaveMinutes = 0; // 早退分钟数 bool absent = false; // 是否缺勤 float overtimeHours = 0.0f; // 加班小时数 AttendanceStatus status; // 考勤状态 AttendanceResult() : status(AttendanceStatus::NORMAL) {} }; /// 异常预警 (Alert Notification) struct AlertNotification { AlertType alertType; // 预警类型 std::string employeeId; // 员工编号 int64_t time; // 预警时间戳 std::string reason; // 原因描述 std::vector notifiedChannels; // 已通知渠道 AlertNotification() : alertType(AlertType::UNCHECKED), time(0) {} }; /// 报表请求参数 struct ReportRequest { ReportDimension dimension; // 报表维度 std::string startDate; // 开始日期 YYYY-MM-DD std::string endDate; // 结束日期 YYYY-MM-DD ExportFormat format; // 导出格式 std::string deptId; // 部门ID(仅DEPT维度) ReportRequest() : dimension(ReportDimension::MONTH), format(ExportFormat::EXCEL) {} }; /// 报表响应 struct ReportResponse { std::string reportUrl; // 报表下载链接 int64_t fileSize = 0; // 文件大小(字节) bool success = false; std::string message; }; /// 系统用户 struct SystemUser { std::string userId; std::string username; SystemRole role; std::vector permissions; // 权限集合 std::string departmentId; }; /// 外部同步请求 struct SyncRequest { std::string authToken; SyncDataType dataType; }; /// 外部同步响应 struct SyncResponse { SyncStatus syncStatus; std::string errorMsg; SyncResponse() : syncStatus(SyncStatus::SUCCESS) {} }; // ============================================================ // 核心功能函数声明 // ============================================================ /// 将 CheckinMethod 枚举转换为字符串 std::string checkinMethodToString(CheckinMethod method); /// 将 AttendanceStatus 枚举转换为字符串 std::string attendanceStatusToString(AttendanceStatus status); /// 将 AlertType 枚举转换为字符串 std::string alertTypeToString(AlertType type); /// 生成唯一记录ID (基于时间戳+随机数) std::string generateRecordId(); /// 验证JWT令牌(简化模拟) bool validateToken(const std::string& token); /// 验证打卡权限 bool checkCheckinPermission(const std::string& employeeId, CheckinMethod method); /// 记录打卡(核心业务函数) CheckinRecord processCheckin(const std::string& employeeId, CheckinMethod method, int64_t timestamp, const GeoLocation& location, const std::vector& faceFeature); /// 判定考勤结果 AttendanceResult calculateAttendance(const CheckinRecord& record, const ShiftRule& shiftRule); /// 检测异常并生成预警 AlertNotification detectAnomaly(const AttendanceResult& result); /// 生成报表(模拟) ReportResponse generateReport(const ReportRequest& request); /// 加密人脸特征(哈希+盐值模拟) std::vector encryptFaceFeature(const std::vector& feature); /// 运行演示场景(主菜单) void runDemo(); #endif // ATTENDANCE_SYSTEM_APP_HPP