task_auto_plan1/include/app.hpp

237 lines
6.5 KiB
C++
Raw Normal View History

2026-04-25 04:26:31 +00:00
#ifndef ATTENDANCE_SYSTEM_APP_HPP
#define ATTENDANCE_SYSTEM_APP_HPP
#include <string>
#include <vector>
#include <map>
#include <cstdint>
#include <ctime>
// ============================================================
// 枚举定义
// ============================================================
/// 打卡方式
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<uint8_t> 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<ShiftRule> 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<std::string> 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<std::string> 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<uint8_t>& faceFeature);
/// 判定考勤结果
AttendanceResult calculateAttendance(const CheckinRecord& record,
const ShiftRule& shiftRule);
/// 检测异常并生成预警
AlertNotification detectAnomaly(const AttendanceResult& result);
/// 生成报表(模拟)
ReportResponse generateReport(const ReportRequest& request);
/// 加密人脸特征(哈希+盐值模拟)
std::vector<uint8_t> encryptFaceFeature(const std::vector<uint8_t>& feature);
/// 运行演示场景(主菜单)
void runDemo();
#endif // ATTENDANCE_SYSTEM_APP_HPP