增加ai办公,考勤管理

This commit is contained in:
hero920103 committed 2026-11-14 18:15:55 +08:00
1 parent eb9b7beff5
commit 31ae07175d
46 files changed
+9250 -296

No files matched your search

+68
View File
@@ -0,0 +1,68 @@
-- =============================================================
-- 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';