多个订单待付款半小时倒计时功能

  • 前言
    • 设置定时器,自动取消订单(后端)
    • 每一个待付款订单显示倒计时并倒计时结束之后自动取消订单
    • 倒计时代码(大家需要的)

前言

阅读这篇文章大概需要您2分钟

需求
将待付款订单设置成半小时未付款自动取消

要求
1、设置定时器,自动取消订单(后端)
2、每一个待付款订单显示倒计时并倒计时结束之后自动取消订单

最终效果

设置定时器,自动取消订单(后端)

1、定时器(具体需求代码)

     /*** 系统自动取消半小时没有付款订单** @return*/public boolean jobSystemCancelOrder() {// 获取当前时间一天前的时间
//        Calendar calendar = Calendar.getInstance();
//        calendar.add(Calendar.DAY_OF_MONTH, -1);
//
//        String cancelTime = TimeUtil.getDateTimeString(calendar.getTime());//获取当前时间的半小时之前的时间Calendar calendar = Calendar.getInstance();Calendar after = after(calendar, 1800000);  //得到指定或者当前时间前offset毫秒的CalendarString cancelTime = TimeUtil.getDateTimeString(after.getTime());    //得到string类型的时间// 获取下单半小时还未付款的订单List<Orders> ordersList = ordersReadDao.getUnPaiedOrders(cancelTime);if (ordersList != null && ordersList.size() > 0) {// 单条数据处理异常不影响其他数据执行for (Orders orders : ordersList) {// 事务管理DefaultTransactionDefinition def = new DefaultTransactionDefinition();def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);TransactionStatus status = transactionManager.getTransaction(def);try {Orders orderNew = new Orders();orderNew.setId(orders.getId());orderNew.setOrderState(Orders.ORDER_STATE_6);Integer update = ordersWriteDao.update(orderNew);if (update == 0) {throw new BusinessException("系统自动取消订单时失败。");}OrderLog log = new OrderLog(0, "system", orders.getId(), orders.getOrderSn(),"系统自动取消订单。", new Date());int orderlogCount = orderLogWriteDao.save(log);if (orderlogCount == 0) {throw new BusinessException("系统自动取消订单,订单日志保存失败,请重试!");}// 返还积分this.cancelOrderBackIntegral(orders);// 还原销量this.restoreActualSales(ordersProductReadDao.getByOrderId(orders.getId()));transactionManager.commit(status);} catch (Exception e) {transactionManager.rollback(status);log.error("[OrderModel][jobSystemCancelOrder]系统自动取消订单时发生异常:", e);log.error("[OrderModel][jobSystemCancelOrder]发生异常的订单:"+ JSON.toJSONString(orders));}}}return true;}

2、获取当前时间半小时之前的方法

 /*** 得到指定或者当前时间前offset毫秒的Calendar*/public static Calendar after(Calendar c, long offset) {Calendar calendar = null;if (c != null) {calendar = c;} else {calendar = Calendar.getInstance();}calendar.setTimeInMillis(calendar.getTimeInMillis() - offset);return calendar;}

3、获取下单半小时还未付款的订单的sql代码

 /*** 获取cancelTime前发货的订单* * @param cancelTime* @return*/List<Orders> getUnPaiedOrders(@Param("cancelTime") String cancelTime);
 <select id="getUnPaiedOrders" resultMap="OrdersResult">select*from `orders`where `order_state` = 1and `payment_status` = 0and `create_time` &lt;= #{cancelTime}</select>

每一个待付款订单显示倒计时并倒计时结束之后自动取消订单

1、在后台将每个订单剩余时间,转换成秒值,传入前端

将查询出的订单数据使用for循环遍历,得到数据存入集合

for(...){//判断当前订单是否是待付款订单,是待付款订单就进去计算剩余时间if (orders.getOrderState() == Orders.ORDER_STATE_1 || orders.getOrderState() == Orders.ORDER_STATE_2){Date createTime = orders.getCreateTime();   //获取当前订单创建时间//半小时的毫秒值为1800000 long createTimeTime = createTime.getTime() + 1800000 ;     //订单的时间戳,订单的结束时间Date nowDate = new Date();  //当前时间long nowDateTime = nowDate.getTime();   //当前时间戳/**使用订单结束时间-当前时间为正数,就是剩余的毫秒值为负数,代表当前订单未付款时间已经超出了半小时。在前端处理除以1000,得到剩余秒值*/orders.setTimeRemaining((int) (createTimeTime - nowDateTime) / 1000);     //将剩余秒数,存入集合}
}

2、在页面中,获取每一个订单的数据

<#list ordersList as order><div class="order-crrinfo"><#if (order.orderState==1)||(order.orderState==2)><!-- 订单状态 为1(未付款的订单)或者 2待确认 才能取消 --><input type="hidden" id="Remaining" value="${order.id}"/><!--订单号,用于取消订单--><div class="order-money"><!--${order.timeRemaining}:当前订单剩余秒值--><span class="timeRemaining" left_time_int="${order.timeRemaining}"></span>后订单自动关闭</div><br/></#if></div>
</#list>

倒计时代码(大家需要的)

3、javascript代码(倒计时)

$(function() {//启用过期时钟order_expire_time();});//倒计时function counterClock(left_time) {var left_time = parseInt(left_time);var days_second = 86400; //每天时间var hours_second = days_second / 24;var minute_second = hours_second / 60;var str = '';// alert(left_time)if(left_time > 0) {var days = parseInt(left_time / days_second);str += (days > 0) ? days + '天' : '';var hours = parseInt((left_time - days * days_second) / hours_second);str += hours > 0 ? hours + '时' : '';var minutes = parseInt((left_time - days * days_second - hours_second * hours) / minute_second);str += minutes > 0 ? minutes + '分' : '';second = left_time - days * days_second - hours_second * hours - minutes * minute_second;str += second + '秒';}return str;}var x=0,c=0;  //简易线程控制//订单过期时间function order_expire_time() {$(".order-crrinfo .order-money").each(function() { //each:遍历var time_obj = $(this).find('.timeRemaining');   //搜索所有段落中的后代 timeRemaining 元素var left_time_int = time_obj.attr('left_time_int'); //attr() 方法设置或返回被选元素的属性值。// alert(left_time_int)if(left_time_int) {var time_string = counterClock(left_time_int);  //调用倒计时方法,得到时间if(time_string == ''){ //如果订单剩余时间少于0time_obj.html('<span></span>' + 0+"秒");var id = $("#Remaining").val();if (x == c) {++x;    //x=c; 执行一轮之后x就不等于c,等这一遍执行完了,重新加载页面。x又等于c了//调用取消订单方法$.ajax({type: "GET",url: domain + "/member/cancalorder.html",data: {id: id},dataType: "json",success: function (data) {if (data.success) {window.location.reload();} else {jAlert(data.message);}},error: function () {jAlert("数据加载失败!");}});}} else {  //大于0time_obj.html('<span></span>' + time_string);time_obj.attr('left_time_int', left_time_int - 1);   //倒计时减1}}});window.setTimeout(function() {order_expire_time();}, 1000);}

博主有话说
非常感谢大家看完我的博客,第一次写,如果有什么写的不好或者错误的欢迎指出。希望我的这篇文章可以帮助到您

多个订单待付款半小时倒计时功能相关推荐

  1. 下单后半小时未付款订单自动取消的实现,延迟队列

    下单后半小时未付款订单自动取消的实现,延迟队列 类似的需要: 订单的评论如果7天未评价,系统需要自动产生一条评论 订单的15天之后未点击收货,系统需要自动更改为已收货. ... 因为是需要一个常驻进程 ...

  2. Java 中Timer定时器设置订单提交后24小时未付款订单状态为已关闭。

    1. 简单的Timer定时器方法 public class CommTimer {/*** 设置指定24小时后执行*/public static void orderClose() {final Ti ...

  3. 滴滴为等乘客半小时被取消订单司机发放补贴

    本文转载自IT之家 IT之家 4 月 15 日消息 今天,滴滴出行发布了关于"深圳网约车司机长途接乘客等半小时后被取消订单"事件情况说明. IT之家了解到,4 月 13 日,深圳快 ...

  4. Java LocalDateTime给当前时间加半小时

    前言 现在有这样一个需求,需要将当前时间加上半小时返回给前端,在Java8之后推荐用LocalDateTime来替换Date,它提供了丰富的方法给我们来调用,那我们来实现一下 实现 如图所示,我们使用 ...

  5. 如何半小时免费搭建NGINX网站?

    原文作者:楚发 原文链接:如何半小时免费搭建NGINX网站? 转载来源:NGINX开源社区 近半年直播越来越火,老罗都登场带货了,疫情就像催化剂,逼着线下各行各业转战线上.毋庸置疑,今年是直播元年. ...

  6. 半小时深刻理解React

    声明:本文来自腾讯增值产品部官方公众号小时光茶社,为CSDN原创投稿,未经许可,禁止任何形式的转载. 作者:左明,企鹅电竞前端团队leader,腾讯高级工程师.从事web开发超过8年,主导过微云web ...

  7. 纳斯达克支持XRP流动性指数XRPLX,XRP半小时涨超3%,突破0.3美元

    "XRPLX仅从流动性最强的交易所(按交易量和订单深度计算)获取数据." 文 | 梁雨山 出品 | 火星财经(ID:hxcj24h) 火星财经APP(ID:hxcj24h)一线报道 ...

  8. 吃鸡2019年5月7日服务器维护,绝地求生12月19日7个半小时更新到几点 吃鸡更新维护公告...

    绝地求生在12月19日正在进行大的新版本的更新维护,此次的维护时间长达7个半小时,可以说是非常的久了,大家估计要到下午的3,4点才能上游戏玩耍,下面来为大家分享一下吃鸡的更新维护公告. [绝地求生正式 ...

  9. 手机测试充电宝软件,记者随机测试5款产品 “有共享充电宝半小时只充了11%”...

    原标题:记者随机测试5款产品 "有共享充电宝半小时只充了11%" 不同品牌的共享充电宝,充电速度差异较大. /晨报记者 潘 文 "花了3块钱,充了半小时,手机只充了11% ...

  10. Go Pro 半小时上手指南

    Jack刚买了台Go Pro 6,商品包装内没有说明书,希望尽快拍那种慢动作或者酷炫的照片,去网上看了些贴都是注重结果,很少讲具体设置或技巧,光靠自己研究什么时候才能入门?<Go Pro 半小时 ...

最新文章

  1. 【 C 】const 进一步解读(由switch引出)
  2. c#中为datagrid添加下拉列表框
  3. MYSQL1130错误的解决方案
  4. 「基本功」不可不说的Java“锁”事
  5. AspNet Core 6.0 Json写默认首字母小写(camelCase)问题
  6. python tuple args_Python基本数据类型之tuple
  7. 产品专家Marty Cagan:不做仅仅会编码的人
  8. maven的java web项目启动找不到Spring ContextLoaderListener的解决办法
  9. 我的docker随笔4:docker常用命令
  10. python3 全局变量 局部变量_Python3获取变量名并修改函数内部的外部变量和局部变量,python3,在,local...
  11. 如何在前端中使用protobuf(vue篇)
  12. Merry Christmas
  13. js获取服务器控件DropDownList所选中的各项属性
  14. matlab中的pzmap的意思,Matlab 学习
  15. nfc加密卡pm3和pm5区别_为了省门禁卡的钱,买了NFC读卡器,到底值不值
  16. centos 下 docker 的 安装与使用 (一)
  17. 小白基础知识必备|| 整型常量与进制间的转换
  18. C语言ip地址转换成十六进制,将IP地址转换为十六进制
  19. mac小技巧之打印文件
  20. fiddler使用过滤、打断点方法

热门文章

  1. USB Type C告白
  2. 不带HDMI的PD HUB方案深度解析(LDR6023A)性价比极高的充电数据方案
  3. Win10任务栏卡死解决方法
  4. 产品读书《长尾理论》
  5. 聊聊这个本不存在的 “元宇宙”
  6. 苹果Mac虚拟机 Parallels Desktop 17 安装 Win11 体验
  7. 前端自动化测试 之 视觉测试
  8. 微信朋友圈+html+字体颜色,改变微信聊天字体颜色的方法?
  9. 笑傲江湖 琴箫合奏之曲
  10. 广义表的存储结构及其基本运算