应用处理系统中工作日的截止日期计算
应用处理系统需要跟踪工作日而非日历日,以确保截止日期计算的准确性。计数从发布日的工作时间内开始,若在非工作时间发布,则顺延至下一个工作日。系统启动时自动从外部服务加载日历,并每日检查当前及下一年的数据。若无日历,系统将回退至日历日计算。
发布后立即注册,无需等待工作日。例如:在工作日晚上11点发布,起始日移至下一个工作日;在同一日早上6点发布,若工作时间稍后开始,则仍算作当日。
计数器显示规则
计数器显示已过去的完整工作日数。无论发布时间如何,在截止日期的起始日,显示为0/N。
- 工作时间内的发布日:直到次日00:00显示0/N。
- 非工作时间发布:直到第一个工作日的00:00显示0/N。
计数器在完整工作日结束后于00:00递增。当值≥N(例如5/5)时,视为截止日期已过。
讨论中否决的替代方案
- 从发布时刻开始以1/N计数——增加了完整日感知的复杂性。
- 在工作日结束时递增——忽略了员工延迟。
- 在工作日结束时标记为逾期——对于下午5:59与6:01的情况不直观。
计算示例
示例1:1月1日(假日)发布,第一个工作日为1月12日,截止日期为1月16日(5天)。1月13日处理——计数器为1/5(完整日:仅1月12日)。
示例2:处理时间为2天,在工作日早上9点(周一)发布。周一:0/2;周二:1/2;周二午夜:2/2(逾期)。
示例3:相同任务,周一晚上8点发布。周一:0/2;周二:0/2;周三:1/2;周三午夜:2/2。
为简化处理,时区统一为服务器时间。
后端实现细节
- 内存中缓存日历:当前年+下一年(清理旧数据)。
- 为每个应用记录计数器值和原始截止日期于数据库中——减少重新计算。
- 存储截止日期历史:按类型/周期配置的单独表或实体上的列。
日历更新:启动时API请求,每日00:00执行。
测试关键场景
实时测试或通过数据库/API模拟:
- 正常工作日。
- 假日。
- 工作日晚上(工作时间后)。
- 无日历——回退和自动更新。
- 逾期和正常截止日期。
- 负载:跨多年度的多个日历。
- 休眠的API服务。
关键要点
- 计数从发布日的工作时间内或下一个工作日开始。
- 计数器:已过去的完整日,起始为0/N。
- 逾期:截止日期后00:00时≥N。
- 缓存和数据库记录降低负载。
- 测试边缘情况:假日、晚上、数据缺失。
— Editorial Team
暂无评论。