核心思想

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

主要代码




java 库存 订单 过期 java订单超时_java订单超时取消设计


java 库存 订单 过期 java订单超时_java订单超时取消设计_02


java 库存 订单 过期 java订单超时_添加数据_03


java 库存 订单 过期 java订单超时_添加数据_04


以下代码为方便复制

//自动装载@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); } }}