如何精准做到合同到期后不再发生业务?还是邻家系统做得真好!

简介: 为解决定时任务无法精准控制合同有效期的问题,提出在`contactIsEffective`方法中增加对`expiredTime`的实时检查。此方案类似于缓存技术中的惰性删除策略,简单且高效。

本文以“合同”为例,来探讨特定应用场景的程序设计方案。

合同数据包含生效日 和 到期日。
到了合同的到期日,合同涉及的业务就不能再做了。

这是企业应用系统中常见的应用场景。
即:

  1. 业务发生时,要判断对应的合同是否有效
  2. 合同到期时,要标记为“已到期”

我们先定义合同的数据结构:

名称 类型 说明
contactId int 合同id
effectiveTime date 生效日
expiredTime date 到期日
status char 合同状态。INIT:初始-EFFECTIVE:生效中-EXPIRED:已到期

接着,我们定义合同服务类

interface contactService {
   
    // 判断合同是否有效
    boolean contactIsEffective(contactId);
    // 标记到期合同的状态为“已到期”
    void processExpiredcontacts();
}

当合同到期后,系统要标记合同的状态为“已到期”,我们的程序怎么实现呢?
这里需要考虑的一个重点是,要保证上面的第一点“到期的合同不能再发生业务”,否则就是系统bug了。



使用定时任务,大家自然而然会想到。

每天凌晨0:00定时跑批,检查系统里是否有当日到期的合同,到期则将status由“EFFECTIVE”改为“EXPIRED”。

这里会存在一个问题,就是无法精准保证“到期的合同不能再发生业务”。
毕竟定时任务执行也有耗时的,在这期间被调用的 contactIsEffective(contactId) 会存在错误地返回true的情况。

这个问题怎么解决?

更坏的情况,假如,合同到期的粒度不是date,而是更细粒度的hour/minute,例如 某合同的到期时间是"2025-02-21 17:20:00",上面的定时任务,就更吃力了。

所以,怎么解决呢?



邻家系统一招搞定,简直不要太帅。

在 contactService#contactIsEffective 方法里,获取指定的合同记录后,当 status=EFFECTIVE 时,则再判断一下 expiredTime, 如果 expiredTime≥当前时间,则触发合同状态的变更,并返回false。(注:这里只谈程序实现思路,对于并发调用的控制等方面,本文不做讨论)

是不是很简单?是的,亲爱的你,有没有想起缓存技术中,缓存过期的惰性删除策略呢?是不是有异曲同工之妙呢!

目录
相关文章
|
消息中间件 存储 运维
王者归位:Kafka控制器组件解析
王者归位:Kafka控制器组件解析
235 0
|
3月前
|
安全 IDE Java
【分享排雷经历】系统引入Apache-Tika产生的NoClassDefFoundError错误
为实现文件导入的安全控制,在系统中引入了基于`Apache Tika`的文件类型校验机制。但在运行时出现`NoClassDefFoundError`,提示缺少`commons-io`类。经排查发现,`monorepo`依赖的`commons-io`版本(2.6)低于Tika 2.9.1所需版本(2.16.1)。由于系统依赖统一管理,直接升级`commons-io`可能影响其他模块。最终解决方案为降级Tika版本至2.4.1,该版本兼容`commons-io:2.6`,问题得以解决且功能满足需求。
224 0
|
9月前
|
人工智能 Cloud Native 虚拟化
从铜线到云端:网络技术的跨越与未来趋势
本文围绕物理网络和云网络基础知识科普进行展开,最后浅谈在AI大模型浪潮下云网络的演进方向。
567 130
|
10月前
|
NoSQL Java 测试技术
机房迁移,不同 Pod 副本请求耗时会相差数倍
客户机房迁移过程中,发现不同 Pod 副本耗时前后相差 5 倍,本文介绍如何通过 ARMS 代码热点功能进行快速定位。
479 229
|
9月前
|
人工智能 监控 物联网
写在2025 MWC前夕:AI与移动网络融合的“奇点时刻”
2025年MWC前夕,AI与移动网络融合迎来“奇点时刻”。上海东方医院通过“思维链提示”快速诊断罕见病,某金融机构借助AI识别新型欺诈模式,均展示了AI在推理和学习上的飞跃。5G-A时代,低时延、大带宽特性支持端云协同,推动多模态AI感知能力提升,数字孪生技术打通物理与数字世界,助力各行业智能化转型。AI赋能移动网络,实现智能动态节能和优化用户体验,预示着更聪明、绿色、高效的未来。
186 1
|
数据采集 存储 监控
用爬虫技术玩转石墨文档:自动化数据处理与信息提取的新探索
在当今数字化时代,文档协作与管理成为了职场人士日常工作中不可或缺的一部分。石墨文档,作为一款功能强大的在线文档工具,凭借其云端存储、多人实时协作、丰富的文档格式支持等特点,赢得了广泛的用户群体。然而,随着数据量的激增,如何高效地管理和利用这些数据成为了一个亟待解决的问题。此时,爬虫技术便成为了我们玩转石墨文档、实现自动化数据处理与信息提取的强大工具。
274 0
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
很多文章都介绍了FTPClient如何连接ftp服务器,但却很少有人说如何连接一台开了SSL认证的ftp服务器,现在代码来了。
359 2
|
消息中间件 canal Kafka
flink cdc 数据问题之数据堆积严重如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
NoSQL 关系型数据库 MySQL
主备切换大揭秘:保证系统永不停机的秘密
本文由小米分享,介绍了分布式系统中的主备切换机制,旨在确保高可用性和可靠性。内容涵盖热备和冷备的概念,以及MySQL和Redis的主从复制原理和配置方法。通过主从复制,当主服务器故障时,备服务器能接管工作,维持服务连续性。文章还讨论了主备切换的挑战,如数据一致性与切换延迟,并提出了相应的解决方案。最后,作者鼓励读者就该主题提出疑问和建议。
1206 4
|
人工智能 算法
AI面试:线下面试的“隐形门槛”及其影响
随着近几年科技的飞速发展,尤其是技术圈的新技术层出不穷,人工智能已经渗透到我们生活的方方面面,其中也包括求职面试。近两年越来越多的企业采用AI面试系统作为初步筛选求职者的手段,这一现象引起了程序圈广泛讨论,有人认为AI面试是科技进步的体现,有助于提高筛选效率和客观性;也有人认为,这在一定程度上构成了线下面试的“隐形门槛”,给求职者带来了新的挑战。那么本文就来聊聊关于AI面试对应聘者的影响,以及是否有普及的必要性。
323 3