-- 考勤设置相关表创建脚本 -- 执行库:lqerp_dev / lqerp -- 用途:支持考勤设置页面、公休时间、考勤分组、假期规则、迟到/缺卡/旷工规则、免考勤人员设置 -- 注意:MySQL 不支持 ALTER TABLE ... ADD COLUMN IF NOT EXISTS / ADD INDEX IF NOT EXISTS -- 所以这里改为 information_schema 判断后再动态执行,兼容老版本 MySQL SET @db_name = DATABASE(); SET @attendance_group_col_exists = ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'BASE_USER' AND COLUMN_NAME = 'F_AttendanceGroupId' ); SET @attendance_group_col_sql = IF( @attendance_group_col_exists = 0, 'ALTER TABLE `BASE_USER` ADD COLUMN `F_AttendanceGroupId` varchar(50) DEFAULT NULL COMMENT ''考勤分组ID'' AFTER `F_GW`;', 'SELECT ''BASE_USER.F_AttendanceGroupId 已存在'';' ); PREPARE stmt_attendance_group_col FROM @attendance_group_col_sql; EXECUTE stmt_attendance_group_col; DEALLOCATE PREPARE stmt_attendance_group_col; SET @attendance_group_idx_exists = ( SELECT COUNT(1) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'BASE_USER' AND INDEX_NAME = 'idx_attendance_group_id' ); SET @attendance_group_idx_sql = IF( @attendance_group_idx_exists = 0, 'ALTER TABLE `BASE_USER` ADD INDEX `idx_attendance_group_id` (`F_AttendanceGroupId`);', 'SELECT ''idx_attendance_group_id 已存在'';' ); PREPARE stmt_attendance_group_idx FROM @attendance_group_idx_sql; EXECUTE stmt_attendance_group_idx; DEALLOCATE PREPARE stmt_attendance_group_idx; CREATE TABLE IF NOT EXISTS `lq_attendance_setting` ( `F_Id` varchar(50) NOT NULL COMMENT '主键ID', `F_LeaveDeductDailySalaryRate` decimal(18,2) NOT NULL DEFAULT 1.00 COMMENT '请假扣款日薪倍率', `F_SickLeaveDeductDailySalaryRate` decimal(18,2) NOT NULL DEFAULT 1.00 COMMENT '病假扣款日薪倍率', `F_Remark` varchar(500) DEFAULT NULL COMMENT '备注', `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间', `F_CreateUserId` varchar(50) DEFAULT NULL COMMENT '创建人ID', PRIMARY KEY (`F_Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考勤设置主表'; CREATE TABLE IF NOT EXISTS `lq_attendance_holiday` ( `F_Id` varchar(50) NOT NULL COMMENT '主键ID', `F_HolidayDate` datetime NOT NULL COMMENT '公休日期', `F_HolidayName` varchar(100) DEFAULT NULL COMMENT '公休名称', `F_Remark` varchar(500) DEFAULT NULL COMMENT '备注', `F_SortCode` int NOT NULL DEFAULT 0 COMMENT '排序', `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间', `F_CreateUserId` varchar(50) DEFAULT NULL COMMENT '创建人ID', PRIMARY KEY (`F_Id`), KEY `idx_holiday_date` (`F_HolidayDate`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考勤公休日期表'; CREATE TABLE IF NOT EXISTS `lq_attendance_group` ( `F_Id` varchar(50) NOT NULL COMMENT '主键ID', `F_GroupName` varchar(100) NOT NULL COMMENT '分组名称', `F_WorkStartTime` varchar(10) NOT NULL COMMENT '上班打卡时间', `F_WorkEndTime` varchar(10) NOT NULL COMMENT '下班打卡时间', `F_MonthlyRestDays` int NOT NULL DEFAULT 0 COMMENT '月应休天数', `F_HalfDaySplitRestDays` int NOT NULL DEFAULT 0 COMMENT '可拆分半天休假天数', `F_IsEnabled` int NOT NULL DEFAULT 1 COMMENT '是否启用(1-启用,0-禁用)', `F_Remark` varchar(500) DEFAULT NULL COMMENT '备注', `F_SortCode` int NOT NULL DEFAULT 0 COMMENT '排序', `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间', `F_CreateUserId` varchar(50) DEFAULT NULL COMMENT '创建人ID', PRIMARY KEY (`F_Id`), KEY `idx_group_name` (`F_GroupName`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考勤分组表'; CREATE TABLE IF NOT EXISTS `lq_attendance_exempt_user` ( `F_Id` varchar(50) NOT NULL COMMENT '主键ID', `F_UserId` varchar(50) NOT NULL COMMENT '用户ID', `F_UserName` varchar(100) DEFAULT NULL COMMENT '用户姓名', `F_StartDate` datetime DEFAULT NULL COMMENT '生效开始日期', `F_EndDate` datetime DEFAULT NULL COMMENT '生效结束日期', `F_IsEnabled` int NOT NULL DEFAULT 1 COMMENT '是否启用(1-启用,0-禁用)', `F_Remark` varchar(500) DEFAULT NULL COMMENT '备注', `F_SortCode` int NOT NULL DEFAULT 0 COMMENT '排序', `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间', `F_CreateUserId` varchar(50) DEFAULT NULL COMMENT '创建人ID', PRIMARY KEY (`F_Id`), KEY `idx_exempt_user` (`F_UserId`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='免考勤人员表'; CREATE TABLE IF NOT EXISTS `lq_attendance_extra_leave` ( `F_Id` varchar(50) NOT NULL COMMENT '主键ID', `F_UserId` varchar(50) NOT NULL COMMENT '用户ID', `F_UserName` varchar(100) DEFAULT NULL COMMENT '用户姓名', `F_LeaveName` varchar(100) NOT NULL COMMENT '额外假期名称', `F_GrantYear` int NOT NULL COMMENT '归属年份', `F_ExtraDays` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '额外假期天数', `F_IsEnabled` int NOT NULL DEFAULT 1 COMMENT '是否启用(1-启用,0-禁用)', `F_Remark` varchar(500) DEFAULT NULL COMMENT '备注', `F_SortCode` int NOT NULL DEFAULT 0 COMMENT '排序', `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间', `F_CreateUserId` varchar(50) DEFAULT NULL COMMENT '创建人ID', PRIMARY KEY (`F_Id`), KEY `idx_extra_leave_user` (`F_UserId`), KEY `idx_extra_leave_year` (`F_GrantYear`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工额外假期配置表'; CREATE TABLE IF NOT EXISTS `lq_attendance_marriage_leave_rule` ( `F_Id` varchar(50) NOT NULL COMMENT '主键ID', `F_MinYears` int NOT NULL COMMENT '最小司龄(含)', `F_MaxYears` int DEFAULT NULL COMMENT '最大司龄(不含)', `F_LeaveDays` int NOT NULL DEFAULT 0 COMMENT '婚假天数', `F_Remark` varchar(500) DEFAULT NULL COMMENT '备注', `F_SortCode` int NOT NULL DEFAULT 0 COMMENT '排序', `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`F_Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='婚假规则表'; CREATE TABLE IF NOT EXISTS `lq_attendance_funeral_leave_rule` ( `F_Id` varchar(50) NOT NULL COMMENT '主键ID', `F_MinYears` int NOT NULL COMMENT '最小司龄(含)', `F_MaxYears` int DEFAULT NULL COMMENT '最大司龄(不含)', `F_DirectRelativeDays` int NOT NULL DEFAULT 0 COMMENT '直系亲属丧假天数', `F_IndirectRelativeDays` int NOT NULL DEFAULT 0 COMMENT '非直系亲属丧假天数', `F_Remark` varchar(500) DEFAULT NULL COMMENT '备注', `F_SortCode` int NOT NULL DEFAULT 0 COMMENT '排序', `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`F_Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='丧假规则表'; CREATE TABLE IF NOT EXISTS `lq_attendance_annual_leave_rule` ( `F_Id` varchar(50) NOT NULL COMMENT '主键ID', `F_MinYears` int NOT NULL COMMENT '最小司龄(含)', `F_MaxYears` int DEFAULT NULL COMMENT '最大司龄(不含)', `F_LeaveDays` int NOT NULL DEFAULT 0 COMMENT '年假天数', `F_Remark` varchar(500) DEFAULT NULL COMMENT '备注', `F_SortCode` int NOT NULL DEFAULT 0 COMMENT '排序', `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`F_Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='年假规则表'; CREATE TABLE IF NOT EXISTS `lq_attendance_maternity_leave_rule` ( `F_Id` varchar(50) NOT NULL COMMENT '主键ID', `F_MinYears` int NOT NULL COMMENT '最小司龄(含)', `F_MaxYears` int DEFAULT NULL COMMENT '最大司龄(不含)', `F_LeaveDays` int NOT NULL DEFAULT 0 COMMENT '产假天数', `F_Remark` varchar(500) DEFAULT NULL COMMENT '备注', `F_SortCode` int NOT NULL DEFAULT 0 COMMENT '排序', `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`F_Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产假规则表'; CREATE TABLE IF NOT EXISTS `lq_attendance_late_rule` ( `F_Id` varchar(50) NOT NULL COMMENT '主键ID', `F_MinMinutes` int NOT NULL COMMENT '最小迟到分钟(含)', `F_MaxMinutes` int DEFAULT NULL COMMENT '最大迟到分钟(不含)', `F_DeductMode` int NOT NULL COMMENT '扣款方式', `F_DeductValue` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '扣款值', `F_ExpressionText` varchar(255) DEFAULT NULL COMMENT '展示说明', `F_Remark` varchar(500) DEFAULT NULL COMMENT '备注', `F_SortCode` int NOT NULL DEFAULT 0 COMMENT '排序', `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`F_Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='迟到扣款规则表'; CREATE TABLE IF NOT EXISTS `lq_attendance_missing_card_rule` ( `F_Id` varchar(50) NOT NULL COMMENT '主键ID', `F_MinCount` int NOT NULL COMMENT '最小缺卡次数(含)', `F_MaxCount` int DEFAULT NULL COMMENT '最大缺卡次数(不含)', `F_DeductPerTime` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '每次扣款金额', `F_ExpressionText` varchar(255) DEFAULT NULL COMMENT '展示说明', `F_Remark` varchar(500) DEFAULT NULL COMMENT '备注', `F_SortCode` int NOT NULL DEFAULT 0 COMMENT '排序', `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`F_Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='缺卡扣款规则表'; CREATE TABLE IF NOT EXISTS `lq_attendance_absenteeism_rule` ( `F_Id` varchar(50) NOT NULL COMMENT '主键ID', `F_MinDays` decimal(18,2) NOT NULL COMMENT '最小旷工天数(含)', `F_MaxDays` decimal(18,2) DEFAULT NULL COMMENT '最大旷工天数(不含)', `F_DeductMode` int DEFAULT NULL COMMENT '扣款方式', `F_DeductValue` decimal(18,2) DEFAULT NULL COMMENT '扣款值', `F_ActionType` int NOT NULL COMMENT '处理方式', `F_ActionText` varchar(255) DEFAULT NULL COMMENT '展示说明', `F_Remark` varchar(500) DEFAULT NULL COMMENT '备注', `F_SortCode` int NOT NULL DEFAULT 0 COMMENT '排序', `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`F_Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='旷工规则表'; CREATE TABLE IF NOT EXISTS `lq_attendance_record` ( `F_Id` varchar(50) NOT NULL COMMENT '主键ID', `F_UserId` varchar(50) NOT NULL COMMENT '员工ID', `F_EmployeeName` varchar(100) DEFAULT NULL COMMENT '员工姓名快照', `F_StoreId` varchar(50) DEFAULT NULL COMMENT '门店ID快照', `F_StoreName` varchar(100) DEFAULT NULL COMMENT '门店名称快照', `F_AttendanceGroupId` varchar(50) DEFAULT NULL COMMENT '考勤分组ID快照', `F_AttendanceGroupName` varchar(100) DEFAULT NULL COMMENT '考勤分组名称快照', `F_AttendanceDate` date NOT NULL COMMENT '打卡日期', `F_PunchInTime` datetime DEFAULT NULL COMMENT '上班打卡时间', `F_PunchOutTime` datetime DEFAULT NULL COMMENT '下班打卡时间', `F_PunchInType` int DEFAULT NULL COMMENT '上班打卡类型(1正常上班,2外勤)', `F_PunchOutType` int DEFAULT NULL COMMENT '下班打卡类型(1正常上班,2外勤)', `F_PunchInLongitude` decimal(18,6) DEFAULT NULL COMMENT '上班打卡经度', `F_PunchInLatitude` decimal(18,6) DEFAULT NULL COMMENT '上班打卡纬度', `F_PunchInAddress` varchar(500) DEFAULT NULL COMMENT '上班打卡地址', `F_PunchInPhotoUrl` varchar(500) DEFAULT NULL COMMENT '上班打卡照片地址', `F_PunchOutLongitude` decimal(18,6) DEFAULT NULL COMMENT '下班打卡经度', `F_PunchOutLatitude` decimal(18,6) DEFAULT NULL COMMENT '下班打卡纬度', `F_PunchOutAddress` varchar(500) DEFAULT NULL COMMENT '下班打卡地址', `F_PunchOutPhotoUrl` varchar(500) DEFAULT NULL COMMENT '下班打卡照片地址', `F_IsPunchInFenceValid` int DEFAULT NULL COMMENT '上班打卡是否通过围栏校验(1通过0未通过)', `F_IsPunchOutFenceValid` int DEFAULT NULL COMMENT '下班打卡是否通过围栏校验(1通过0未通过)', `F_Status` int NOT NULL COMMENT '打卡状态(1正常,2迟到,3休息,4请假,5病假,6缺卡,7旷工)', `F_LateMinutes` int NOT NULL DEFAULT 0 COMMENT '迟到分钟数', `F_EarlyLeaveMinutes` int NOT NULL DEFAULT 0 COMMENT '早退分钟数', `F_IsManual` int NOT NULL DEFAULT 0 COMMENT '是否手动补录(1是0否)', `F_Remark` varchar(500) DEFAULT NULL COMMENT '备注', `F_SupplementRemark` varchar(500) DEFAULT NULL COMMENT '补卡备注', `F_SupplementOperatorId` varchar(50) DEFAULT NULL COMMENT '补卡操作人ID', `F_SupplementOperatorName` varchar(100) DEFAULT NULL COMMENT '补卡操作人姓名', `F_SupplementTime` datetime DEFAULT NULL COMMENT '补卡操作时间', `F_SupplementWorkflowId` varchar(50) DEFAULT NULL COMMENT '关联补卡流程ID', `F_CreateUserId` varchar(50) DEFAULT NULL COMMENT '创建人ID', `F_CreateTime` datetime DEFAULT NULL COMMENT '创建时间', `F_UpdateUserId` varchar(50) DEFAULT NULL COMMENT '更新人ID', `F_UpdateTime` datetime DEFAULT NULL COMMENT '更新时间', `F_IsEffective` int NOT NULL DEFAULT 1 COMMENT '是否有效(1有效0无效)', PRIMARY KEY (`F_Id`), UNIQUE KEY `uk_attendance_record_user_date` (`F_UserId`, `F_AttendanceDate`), KEY `idx_attendance_record_month_group` (`F_AttendanceDate`, `F_AttendanceGroupId`), KEY `idx_attendance_record_store` (`F_StoreId`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考勤打卡记录表';