Files
yunzerwebsiteallinone/go/docs/sql/create_oa_attendance.sql
T

69 lines
4.4 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =============================================================
-- OA 考勤打卡 —— 表结构
--
-- 对应代码:
-- models/oa_attendance.go
-- controllers/backend_oa_attendance.go (打卡核心 + 后台考勤记录)
-- controllers/app_oa_attendance.go (移动端 /api/oa/attendance/*)
--
-- 执行顺序:
-- 1) 本脚本:创建考勤表
-- 2) oa_attendance_menus.sql:注册「OA → 排班考勤 → 考勤记录 / 考勤打卡」菜单
--
-- 设计要点:
-- 1. 一人一天一条:签到与签退写同一行,统计与列表都按「人 × 日期」聚合。
-- 2. 打卡时联动排班明细(yz_backend_oa_schedule_entry),把班次名称与
-- 上下班时间快照进本表;后续调班不影响历史考勤判定。
-- 3. 匹配不上排班(含员工档案缺失)不阻断打卡:match_status=2,
-- clock_in_status/clock_out_status=3(无排班打卡),提醒文案落在
-- clock_in_note / clock_out_note,后台可据此筛选与备注。
-- 4. 唯一键 (tid, uid, attend_date):uid 是登录身份,保证员工档案未建
-- 也能先打卡(此时 employee_id=0,后台按账号/姓名检索)。
-- =============================================================
SET NAMES utf8mb4;
CREATE TABLE IF NOT EXISTS `yz_backend_oa_attendance` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`tid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '租户ID',
`uid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '登录身份ID(打卡主体)',
`employee_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '员工ID(yz_backend_employee.id),0=未绑定员工档案',
`employee_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '员工姓名快照',
`employee_account` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '员工账号快照',
`org_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属组织ID',
`org_name` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '组织名称快照',
`position` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '职位快照',
`attend_date` DATE NOT NULL COMMENT '考勤日期',
`entry_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '排班明细ID,0=未匹配排班',
`shift_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '班次ID快照',
`shift_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '班次名称快照',
`short_name` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '班次简称快照',
`color` VARCHAR(20) NOT NULL DEFAULT '#409EFF' COMMENT '班次颜色快照',
`work_start` VARCHAR(8) NOT NULL DEFAULT '' COMMENT '上班时间快照 HH:mm',
`work_end` VARCHAR(8) NOT NULL DEFAULT '' COMMENT '下班时间快照 HH:mm',
`match_status` TINYINT NOT NULL DEFAULT 0 COMMENT '0=未知 1=已匹配排班 2=未匹配排班',
`clock_in_time` DATETIME DEFAULT NULL COMMENT '签到时间',
`clock_in_status` TINYINT NOT NULL DEFAULT 0 COMMENT '0=未打卡 1=正常 2=迟到 3=无排班打卡 4=不在班次时段',
`clock_in_note` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '签到提醒/异常说明',
`clock_out_time` DATETIME DEFAULT NULL COMMENT '签退时间',
`clock_out_status` TINYINT NOT NULL DEFAULT 0 COMMENT '0=未打卡 1=正常 2=早退 3=无排班打卡 4=不在班次时段',
`clock_out_note` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '签退提醒/异常说明',
`location` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '打卡地点(预留)',
`remark` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '管理员备注/异常说明',
`source` TINYINT NOT NULL DEFAULT 1 COMMENT '1=移动端打卡 2=后台补录',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tid_uid_date` (`tid`, `uid`, `attend_date`),
KEY `idx_tid_date` (`tid`, `attend_date`),
KEY `idx_tid_emp_date` (`tid`, `employee_id`, `attend_date`),
KEY `idx_tid_org_date` (`tid`, `org_id`, `attend_date`),
KEY `idx_tid_status` (`tid`, `clock_in_status`, `clock_out_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA-考勤打卡记录';
-- ---------------- 校验 ----------------
SELECT TABLE_NAME, TABLE_COMMENT
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'yz_backend_oa_attendance';