编辑 | blame | 历史 | 原始文档

考勤规则支持「同一个部门多条规则(多班次)」

变更日期:2026-10-16 模块:HRM → 考勤管理 → 考勤规则配置

涉及页面

  • HRM → 考勤管理 → 考勤规则(新增 / 编辑)
  • HRM → 考勤管理 → 考勤记录(打卡、导入、月度汇总依赖的规则匹配)
  • 移动端/大屏的打卡入口(走同一套 clock-in / clock-out 接口)

变更点

项 变更前 变更后
部门与规则的关系 一个部门只能配置一条规则,新增/编辑时若该部门已有规则,报错「该部门已配置考勤规则」 一个部门可以配置多条规则,用于多班次;新增/编辑不再报该错
规则名称 全局唯一(hrm_attendance_rule.name 不允许重复) 不变,仍然全局唯一,请用「早班规则 / 夜班规则」这类可区分的名称
打卡/导入时用哪条规则 该部门启用规则中的任意一条(按数据库返回顺序) 按打卡时间匹配班次,见下表
未配置部门规则时 回退到全局规则(dept_id 为空) 不变

班次匹配规则(同一个部门有多条启用规则时)

场景 取哪条规则
打卡时间落在某条规则的 [上班时间, 下班时间] 内 取这条
打卡时间不在任何班次窗口内(如提前 2 小时到岗) 取班次窗口离打卡时间最近的那条
有多条都符合(并列) 按上班时间早的优先,再按规则编号,结果稳定不漂移
跨天班次(如 22:00-06:00,即下班时间 ≤ 上班时间) 凌晨的打卡(00:00-06:00)判给该跨天班次
不关心班次(内部调用未传打卡时间) 取上班时间最早的一条

匹配只在该部门启用的规则中进行;若该部门一条启用规则都没有,仍回退到全局规则(同样按上述规则匹配)。

API

接口路径、请求参数、响应结构**均无变化**:

方法 路径 说明
POST /hrm/attendance-rule/create 新增考勤规则(不再因部门重复而失败)
PUT /hrm/attendance-rule/update 修改考勤规则(不再因部门重复而失败)
POST /hrm/attendance-clock/clock-in 上班打卡(按打卡时间匹配班次判迟到)
POST /hrm/attendance-clock/clock-out 下班打卡(按打卡时间匹配班次判早退、算加班)

错误码 1_030_004_007「该部门已配置考勤规则」 已不再有触发点,前端无需再针对它做特殊处理(若有按错误码写死的文案,可删除)。

前端修改点

无。前端的部门下拉本来就是拉取全量部门、不做「已配置则禁用」的过滤;该提示来自后端异常,后端不再返回即可。

注意事项

  • 同一个部门配多条规则时,**班次时间必须能区分开**(例如早班 08:00-16:00、晚班 16:00-24:00)。若两条规则的班次窗口完全重叠,打卡只会命中其中一条(上班时间早的那条),请避免配置重叠班次。
  • 规则名称仍全局唯一,两个部门各配「白班」会提示「考勤规则名称已存在」,请改名区分。
  • 已有的考勤记录不回溯重算:本次变更只影响变更之后新打卡、新导入/编辑的记录。历史记录如需按新班次重算,需要单独处理(重新导入或提供重算脚本)。
  • 无表结构变更,无需执行 SQL;hrm_attendance_rule.dept_id 本来就是普通索引(idx_dept_id),不存在唯一索引。