在OA系统中,节点超时功能是一个关键的技术特性,它能够确保流程的顺畅进行,避免任务因为个别环节的延误而影响整体进度。本文将探讨OA系统中节点超时功能的技术实现和优化策略。
参考泛微OA ecology E9
前台设置:
系统管理员在管理后端设置对应的流程节点相关超时设置,可分为超时提醒 超时处理 两大类(如图)
超时提醒:只提醒 不处理流程
超时处理:会处理流程。
系统设计实现:
在应用系统启动的时候,会起一个多个线程进行超时功能的运行。系统启动 搜索所有节点超时的相关数据,初始化线程 以及一些队列。
在泛微OA中。该功能实现方式为:时钟轮 + 延时队列 模式实现的!
同机器人节点一样,集群环境中 只有主节点处理具体业务逻辑,子节点只通过redis发布数据,不参与超时处理任务当中。
核心启动类为:OvertimeBiz,时间轮 等具体实现为:BaseOvertimeThread
前台保存超时节点设置后,会放入队列中,OvertimeBiz中 会有线程监控和这个队列 ,
监听到队列有新内容后,则添加到任务中 区分是超时提醒 还是超时处理
如任务在时钟轮上的刻度 则放入延迟队列中 等待消费。如果不在,放入父时间轮钟。
系统启动时,初始化时间轮相关数据 以及线程,这里按的是秒 一轮为60秒 ,启动后有单独线程模拟指针运作。
当指针跳到下个刻度的时候 获取延迟队列中符合条件的首个元素进行超时任务的处理。会区分 时超时提醒 还是超时任务。
至此大致逻辑完毕,当然这个功能是超级复杂的 我这里只是讲了很粗的代码。具体实现可以看具体业务场景。
节点超时数据 会存在 数据库表 比如A员工收到这个流程后 没操作,则会取这个员工收到流程的时间+前台设计的超时任务 求出来这个流程将在未来多少秒后超时!
有其他疑问 可以留言哦.