java订单超时取消设计_用纯Java实现订单超时问题

核心思想

创建工具bean,服务启动时查询数据库订单截止时间记录,保存在list中(也可以放在cache里)。新启线程,每秒跑一次,遍历list,如果截止时间小于当前时间,则取消订单。同时,新建订单时,往list和数据库中添加数据,完成支付或者用户主动取消订单时,往list和数据库中删除数据,保持list和数据库的一致性。

主要代码

fed7c91b604f4f1119c76c86268c306e.png
a6f0f41dde25374f6efa716f7cb91f17.png
d199ec404ee8eb095a0bd8b101594bcc.png
e98f0f93467809709d45f93d3c58a76e.png

以下代码为方便复制

//自动装载@Componentpublic class TjscOrderEndPayTimeAutoBean extends Thread { private QuestionBll questionBll = SpringContextHolder.getBean(QuestionBll.class); static List list = new ArrayList<>(); @PostConstruct public void init() { //获取数据库存在的订单截止时间记录 list = questionBll.selTestQuestion(); //开始线程 this.start(); } @Override public void run() { while (true){ try { //每一秒执行一次 sleep(1000); Date date = new Date(); //过期集合 List questionList = new ArrayList<>(); //循环list查看订单是否过期 for(Question item : list){ if(item.getUpToDate().compareTo(date) == -1){ //修改状态 item.setState(2); questionList.add(item); } } System.out.println("run方法中的订单列表:" + list); System.out.println("run方法中 --》 要删除的订单列表:" + questionList); //修改状态 if(questionList.size() > 0){ questionBll.updateAllColumnBatchById(questionList); } //把list中一过期的订单删除 list.removeAll(questionList); } catch (InterruptedException e) { e.printStackTrace(); } } } //list中添加数据,创建订单是调用 public static void addOrderEndPayTimeList (Question question){ list.add(question); } //list中删除数据,完成支付或者取消订单时调用 public static void removeOrderEndPayTimeList (Question question){ if (list.contains(question)) { list.remove(question); } }}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值