/*** 订单监控类

* 定时扫描所有待付款订单,超时自动取消

* Created by huangbaidong

* 2017/3/29.*/@Componentpublic classOrderMonitorJob {

@ResourceprivateRedisUtil redisUtil;

@ResourceprivateBsdOrderService bsdOrderService;

@ResourceprivateBsdDFKOrderCacheManager bsdDFKOrderCacheManager;private boolean isLock = false;/*** 待付款订单定时扫描类

* 定时扫描所有待付款订单,超时自动取消*/

public voidpaymentTimeoutScan() {if(!isLock) {//加锁,防止定时器重复执行,

isLock = true;try{

List orders =bsdDFKOrderCacheManager.getAll();if(BlankUtil.isNotEmpty(orders)) {

List removeIds = new ArrayList<>();//需要移除的订单

for(BsdDFKOrderCacheEntity order : orders) {if (Dictionary.ORDER_STATUS_DFK ==order.getOrderStatus()) {boolean isExpire = false;if (order.isHasPromotion() == 1) {//如果是有促销规则的订单,1小时未支付,自动取消订单

if (System.currentTimeMillis() - order.getOrderTime().getTime() >CommonConstants.hasRulePayTimeout) {

isExpire= true;

}

}else{//如果是没有促销规则的订单,24小时未支付,自动取消订单

if (System.currentTimeMillis() - order.getOrderTime().getTime() >CommonConstants.hasNotRulePayTimeout) {

isExpire= true;

}

}if(isExpire) {//1、自动取消订单(操作人ID传0)

bsdOrderService.cancel(order.getId(), 0l);//2、记录过期的订单,将订单从缓存中清除

removeIds.add(order.getId().toString());

System.out.println("------>订单[" + order.getCode() + "]超时未付款自动取消订单");

}

}else{//不是待付款状态的订单,记录从缓存中清除

removeIds.add(order.getId().toString());

}

}//将不是待支付状态的订单,以及过期的未支付的订单从缓存中删除

if(BlankUtil.isNotEmpty(removeIds)) {

bsdDFKOrderCacheManager.removeFromCache(removeIds);

}

}

}finally{//运行完后释放锁

isLock = false;

}

}

}

}

java quartz没执行完_quartz 防止上一任务未执行完毕,下一时间点重复执行相关推荐

  1. java quartz 是干什么的_Quartz可以用来做什么

    废话的前言 以前凭借年轻,凡事都靠脑记.现在工作几年后发现,很多以前看过.用过的东西,再次拿起的时候总觉得记不牢靠."好记性不如烂笔头"应该是某位上了年纪的大叔的切肤之痛(仅次于上 ...

  2. 为什么 MySQL 执行完 Delete 操作之后,空间没有释放?

    为什么 MySQL 执行完 Delete 操作之后,空间没有释放? 文章目录 为什么 MySQL 执行完 Delete 操作之后,空间没有释放? Mysql数据结构 表文件大小未更改和mysql设计有 ...

  3. 让python执行完停在解释器窗口

    让python执行完停在解释器窗口 文章目录: 一.windows让批处理文件运行完成后不关闭窗口 二.让python执行完停在解释器窗口 我是在windows里写入的一个执行python脚本的批处理 ...

  4. 【11款最全最新】Java游戏开发项目合集(上)_Java项目实战_Java练手项目

    黄金矿工.俄罗斯方块.飞机大战.超级玛丽.坦克大战.飞翔的小鸟等等经典小游戏相信很多人都玩过.大家有没有想过亲自制作出这些小游戏呢? 今天给大家分享11款经典小游戏的Java开发教程,快来戳下方视频学 ...

  5. c# 使用timer定时器操作,上次定时到了以后,下次还未执行完怎么处理

    c# 使用timer定时器操作,下次定时到了以后,上次还未执行完怎么办 ------解决方案------------------------------------------------------ ...

  6. 集群部署中解决定时任务重复执行的问题-redis分布式锁应用

    背景描述 有小伙伴私信我,关于存在定时任务的项目在集群环境下部署如何解决重复执行的问题,PS:定时任务没有单独拆分. 概述:之前的项目都是单机器部署,所以定时任务不会重复消费,只会执行一次.而在集群环 ...

  7. 重复执行——循环结构

    一.循环语句 1.while语句 (1)格式 while(表达式){ 循环体 } (2)含义 先计算表达式的值,当表达式值为真时,执行一次循环体.也就是"当表达式成立时,不断重复执行循环体& ...

  8. shell脚本【符号6】“!”重复执行先前命令/非/内部变量

    这一篇博客会介绍"!"符号在不同情境下的使用 1.重复执行先前命令 2.逻辑非 3.作为shell内部变量 4.变量的间接引用 一.重复执行先前命令: ! 在bash中,为了重复执 ...

  9. 埃森哲java开发怎么样_花费2亿,耗时2年,网站还没建完,咨询公司埃森哲被告上法庭!...

    本文作者:靠谱的小灶君 全文共3158字,预计阅读8分钟 耗费2个多亿,耗时2年多 连一个可用的网站都无法交付 想要完工?那就再交1000万美元 美国汽车租赁公司赫兹(Hertz)一怒之下 将知名咨询 ...

最新文章

  1. TensorFlow基础7-机器学习基础知识(逻辑回归,鸢尾花实现多分类)
  2. Android系统将内置滤镜功能
  3. scrapy爬取动态网页_scrapy_splash 设置随机请求头
  4. CF1479D Odd Mineral Resource
  5. C语言 do while 和 while 循环 - C语言零基础入门教程
  6. 小程序入门到精通(三):学小程序必备技术基础-flex布局
  7. LBS移动网络基站定位
  8. echarts时间散点图_ECharts 实现地图散点图(下)
  9. 小米 红米 历代手机型号大全 发布时间 发布价格
  10. cfree安装与使用
  11. split函数 在oracle,oracle的split函数
  12. C语言(B站比特鹏哥)笔记
  13. 【财富空间】人性的弱点,明白了你就可以掌控自己的人生
  14. 独家揭秘影响SEO排名的17项核心因素
  15. Bomb Game(题目地址链接:https://acs.jxnu.edu.cn/problem/NOIOPJCH02011661)
  16. 2021-01-20JSON和本地存储
  17. img 图片自适应大小
  18. tddl+diamond(一)
  19. 如何将图片压缩到15k以下?教你一键压缩图片的大小
  20. 【软考软件评测师】2013综合知识历年真题

热门文章

  1. 使用Apache Isis快速进行SEMAT应用程序开发
  2. java io顺序_Java顺序IO性能
  3. 在Spring中配置多个View解析器
  4. Gradle入门:我们的第一个Java项目
  5. 在N + 1场景中使用@NamedEntityGraph更有选择地加载JPA实体
  6. 在IntelliJ IDEA中为不同的数据源着色
  7. 骆驼路线的主/从故障转移
  8. Spring安全–幕后
  9. Spring MVC:带有CNVR卷的REST应用程序。 1个
  10. 很少使用“ ControlFlowException”