一、项目背景
在 OA 考勤模块中,通常涉及到客户打卡模块,但是我们又不想员工选择日期的时候把休息日(周末、节假日)也算请假时长,通常在明道云中的做法是维护一张考勤表,让其提交请假申请后再去计算我们的请假时长,这样就会存在一个不太直观的问题,员工申请之后发现请假天数多了给老板造成不好的影响,这时候又想撤销但是已经提交申请了,无力挽回。
这时候我们就可以通过事件去实现这样实时展示出请假天数的效果。
操作步骤
(1).维护节假日表
为什么会需要维护节假日表,目前想要自动的去判断一个日期是否为节假日,通常的做法是用接口实现,但是我为了节约接口的成本(免费的接口大多有请求限制),所以一次性把一年的节假日情况给存储出来管理是最好的。
(2).节假日获取工作流编写
在这里我们可以在每年的开始 1 月 1 日或者 12 月份月底的时候计算出第二年所需维护的节假日数据
通过函数获取到所需的年份数值后,我们就可以通过免费的接口获取到一年中正常的工作日和周末,通过 week 状态来区分是否为周末
因为我这个是接口本身的限制,没有获取到调休工作日和节假日(也可以找其他免费的接口),所以我这边多了一步操作,通过第二个接口获取到所有的节假日和调休日。
获取到这俩个数组之后呢,因为第一个的数据是不含调休工作日和节假日,所以我们要把第二个的接口数据给覆盖到接口一中,举个例子:
2025-1-26 日是星期天,在接口一的返回数据中是周末(休息日),但是实际上他是春节调休,通过我们的接口二可以得出他实际是工作日,所以用第二个接口的数据给他覆盖成工作日。
在子流程中,我们去遍历接口一的数据,通过代码块将接口二的返回参数去判断接口一便利的结构是否是节假日或者调休日,然后去新增对应的休息日或者工作日的状态
(4).组装休息日的 JSON 数组
因为我们想要在前端接口实时显示请假天数,因此我们会用到明道云中的前端事件这个功能去触发封装业务流程
但是我们通过事件去触发封装业务流程,需要拿到返回的参数,在这个流程中我们不能包含延迟节点,如果我们不组装 JSON 数据,我们就必须通过子流程便利循环判断我们所选择日期的间隔日期是否为工作日,这样我们事件就拿不到真实的返回数据,所以我们要去组装一个 JSON 代码,通过代码去判断
在工作流中,我们一样的去拿到当年获取第二年所需要的年份 JSON,去遍历我们刚才存储在表单中所需年份的休息日数据,然后通过子流程去组装成 JSON 数据,这个数据就只包含当年的休息日数据
(5).编写请假表单
这里的请假表单为什么要采用半天为单位,其实采用 0.5 天为最小请假单位,是用标准化规则筑牢管理根基。它能让考勤统计、工作交接等流程,借统一 “时间刻度” 摆脱模糊争议,以客观约束替代主观判断,减少员工申请、管理者审批及团队协作的隐性摩擦 。举个例子:不管是后续的 HR 做月度人力效能分析,还是老板去实时查看数据都比较方便。
(6).请假时长计算—封装业务流程
其实封装业务流程并不复杂,因为我们计算请假时长有四个核心参数,因此这四个参数为空时,我们就跳过流程执行。当我们都不为空时,我们才进行计算,这里面最核心的就是先获取到我们刚才组装好的休息日的请假 JSON。然后通过我们的代码块去计算出我们这个日期范围内的请假时长(跳过节假日和周末)
最终将返回值写入在我们的输出参数中,方便我们编写事件到表单中。
(7).编写事件
为了更直观的展示,我将描述操作步骤写在了图片中,可以自行参考
ps:我这里所编写的只是一种思路,当然有其余更好的思路可以参考,欢迎各位留言讨论