工时提醒配置
工时提醒是沐霖工时系统 v4.1.0 新增的智能提醒功能,通过定时任务自动提醒未填写工时的员工,有效提升工时数据的完整性和及时性。
功能概述
为什么需要工时提醒?
| 场景 | 传统方式 | 工时提醒 |
|---|---|---|
| 员工忘记填报 | 项目经理人工催促,效率低 | 系统自动定时提醒 |
| 跨天补录 | 月底集中补录,数据不准确 | 每天提醒,及时填报 |
| 新入职员工 | 需要老员工口头告知 | 系统自动推送提醒 |
| 多项目管理 | 员工可能遗漏某个项目 | 统一提醒,避免遗漏 |
提醒功能设计

核心功能:
- ⏰ 定时提醒:每天固定时间发送提醒
- 📅 灵活日期:可设置工作日(周一至周五)或自定义日期
- 🔧 启用/禁用:按需开启或关闭提醒功能
- 🎯 精准推送:仅提醒当天未填写工时的员工
- 📧 分级通知渠道:社区版支持站内消息,专业版增加邮件,企业版增加企微、钉钉和飞书
配置指南
1. 访问配置页面
路径: 系统管理 → 工时提醒配置
只有系统管理员才能访问此配置页面。
2. 配置项说明
| 配置项 | 说明 | 示例值 |
|---|---|---|
| 启用状态 | 是否启用提醒功能 | 启用 / 禁用 |
| 提醒时间 | 每天发送提醒的时间 | 18:00(下午 6 点) |
| 提醒日期 | 在一周中的哪些天提醒 | 1,2,3,4,5(周一至周五) |
| 通知渠道 | 通过哪些渠道发送 | system,email(站内+邮件) |
3. 详细配置
启用/禁用控制
启用: 系统会按照设定的时间和日期自动发送提醒
禁用: 暂时停止提醒功能,保留配置不丢失
建议:
- 首次使用时先配置好参数再启用
- 节假日期间可临时禁用
提醒时间设置
格式: HH:MM(24 小时制)
常用时间:
17:00- 下午 5 点(下班前提醒)18:00- 下午 6 点(下班时间提醒)09:00- 上午 9 点(上班后提醒)12:00- 中午 12 点(午休前提醒)
最佳实践:
- 建议在下班前 1 小时设置提醒
- 避免在深夜或凌晨发送
- 考虑时区差异(使用服务器时区)
提醒日期设置
格式: 逗号分隔的数字(1-7)
| 数字 | 星期 | 说明 |
|---|---|---|
| 1 | 周一 | 工作日 |
| 2 | 周二 | 工作日 |
| 3 | 周三 | 工作日 |
| 4 | 周四 | 工作日 |
| 5 | 周五 | 工作日 |
| 6 | 周六 | 休息日(可选) |
| 7 | 周日 | 休息日(可选) |
常用组合:
1,2,3,4,5- 周一至周五(推荐)1,2,3,4,5,6- 周一至周六(单休)1,2,3,4,5,6,7- 每天(特殊项目)
通知渠道配置
可用渠道:
system- 站内消息(默认启用)email- 邮件通知wechat- 企业微信dingtalk- 钉钉feishu- 飞书
配置方式: 多个渠道用逗号分隔,例如:
system- 仅站内消息system,email- 站内 + 邮件system,wechat,dingtalk- 站内 + 企微 + 钉钉
前置条件: 使用外部渠道前,需要先在通知配置中完成对应渠道的配置。
已填判定逻辑
系统通过以下逻辑判断员工是否已填写工时:
判定规则
-- 查询员工当天是否已有工时记录
SELECT COUNT(*) FROM mh_day_hour
WHERE user_id = ?
AND fill_date = ?
AND is_deleted = 0判定结果:
- ✅ 有记录 → 不发送提醒(已填写)
- ❌ 无记录 → 发送提醒通知(未填写)
判定范围
检查条件:
- 用户 ID:当前员工
- 填报日期:当天日期
- 删除状态:未删除的记录
说明:
- 只要当天有任意一条工时记录,就认为已填写
- 不区分项目,只要有工时就不提醒
- 不区分工时类型(普通工时/任务工时)
通知内容
站内消息通知
标题: 工时填写提醒
内容:
您好!
您今天(2026-06-05)的工时还未填写,请及时填报。
填报路径:我的工时 → 工时填报
如有疑问,请联系项目经理。邮件通知
主题: 【工时提醒】您今天的工时还未填写
内容: 包含 HTML 格式的提醒信息,包含快捷链接直达填报页面。
企业微信/钉钉/飞书
消息格式: 文本消息或 Markdown 消息
内容示例:
📋 工时填写提醒
您好!您今天(2026-06-05)的工时还未填写。
请及时登录系统填报工时。定时任务机制
执行时间
系统在配置的提醒时间自动执行检查任务:
每天 18:00(配置时间)
↓
查询所有员工
↓
筛选未填写工时的员工
↓
发送提醒通知执行流程
- 定时触发:服务器到达配置时间
- 获取配置:读取工时提醒配置
- 检查状态:查询员工工时填写状态
- 筛选目标:找出未填写的员工列表
- 发送通知:通过配置的渠道发送提醒
- 记录日志:记录本次执行情况
异常处理
场景 1:配置未启用
- 定时任务跳过执行
- 不发送任何通知
场景 2:通知渠道配置不完整
- 已配置的渠道正常发送
- 未配置的渠道跳过
- 记录警告日志
场景 3:发送失败
- 记录错误日志
- 不影响其他渠道发送
- 下次定时任务继续执行
使用场景
场景 1:常规工作日提醒
配置:
- 启用状态:✅ 启用
- 提醒时间:
18:00 - 提醒日期:
1,2,3,4,5 - 通知渠道:
system,email
效果: 每周一至周五下午 6 点,通过站内消息和邮件提醒未填写工时的员工。
场景 2:项目冲刺期
配置:
- 启用状态:✅ 启用
- 提醒时间:
12:00和18:00(需配置两次) - 提醒日期:
1,2,3,4,5,6 - 通知渠道:
system,wechat
效果: 周一至周六,中午和傍晚各提醒一次,通过站内消息和企业微信推送。
场景 3:节假日暂停
操作: 在节假日期间,临时将"启用状态"切换为"禁用"。
效果: 节假日期间不发送提醒,工作日自动恢复(需手动启用)。
最佳实践
1. 首次配置步骤
- ✅ 完成通知渠道配置(邮件、企微等)
- ✅ 设置提醒时间(建议下班前 1 小时)
- ✅ 选择提醒日期(建议周一至周五)
- ✅ 选择通知渠道(建议站内 + 邮件)
- ✅ 测试通知配置(发送测试通知)
- ✅ 启用提醒功能
2. 时间选择建议
| 时间段 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 上午 9:00 | 早提醒 | 员工有整天时间填报 | 可能忘记 |
| 中午 12:00 | 午休前 | 提醒及时 | 午休时可能不看 |
| 下午 17:00 | 下班前 1 小时 | 最佳时间 | 部分员工已下班 |
| 下午 18:00 | 下班时间 | 覆盖更多人 | 可能影响下班 |
推荐: 下午 17:00 - 18:00 之间
3. 渠道选择建议
| 渠道 | 到达率 | 实时性 | 推荐度 |
|---|---|---|---|
| 站内消息 | 中 | 中 | ⭐⭐⭐⭐ |
| 邮件 | 高 | 低 | ⭐⭐⭐⭐⭐ |
| 企业微信 | 高 | 高 | ⭐⭐⭐⭐⭐ |
| 钉钉 | 高 | 高 | ⭐⭐⭐⭐⭐ |
| 飞书 | 高 | 高 | ⭐⭐⭐⭐ |
推荐组合: 站内消息 + 企业微信/钉钉
4. 节假日管理
建议流程:
- 节前最后一天:禁用提醒
- 节后第一天:启用提醒
- 或使用定时任务自动管理(需开发)
提醒设置: 在日历中标记禁用/启用日期,避免忘记。
常见问题
Q1: 为什么收不到提醒?
检查清单:
- 工时提醒功能是否已启用?
- 今天是否在提醒日期范围内?
- 当前时间是否已过提醒时间?
- 个人通知设置中是否开启了对应渠道?
- 通知渠道配置是否完整?
Q2: 能否设置一天多次提醒?
目前系统不支持一天多次提醒。
替代方案:
- 选择最合适的时间点(推荐下班前 1 小时)
- 或联系技术支持定制开发
Q3: 已填写工时的员工会收到提醒吗?
不会。系统会先检查员工当天是否已有工时记录,只有未填写的员工才会收到提醒。
Q4: 提醒可以针对特定部门或项目组吗?
目前系统是全员提醒(仅排除已填写的员工)。
后续计划: 增加按部门、项目组筛选的提醒功能。
Q5: 能否自定义提醒内容?
目前提醒内容为系统自动生成,暂不支持自定义。
后续计划: 增加自定义提醒模板功能。
Q6: 定时任务失败了怎么办?
检查方法:
- 查看系统日志中的定时任务执行记录
- 检查数据库中的提醒发送日志
- 联系系统管理员查看服务器日志
解决方案:
- 如果是配置问题:修改配置后下次自动执行
- 如果是系统问题:联系技术支持
Q7: 新员工入职后会自动收到提醒吗?
会。只要新员工有工时填报权限,系统会自动将其纳入提醒范围。
无需额外配置。
相关功能
技术说明
数据表
工时提醒配置存储在系统配置表中:
-- 配置表
sys_config
- config_key: 'hour.reminder.enabled' -- 启用状态
- config_key: 'hour.reminder.time' -- 提醒时间
- config_key: 'hour.reminder.days' -- 提醒日期
- config_key: 'hour.reminder.channels' -- 通知渠道定时任务
Cron 表达式:0 0 18 * * ? (每天 18:00 执行)性能优化
- 批量查询:一次性查询所有员工的工时状态
- 异步发送:通知发送不阻塞主流程
- 缓存配置:配置信息缓存,减少数据库查询
- 日志记录:详细记录执行情况,便于排查问题
