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

您所在的位置:网站首页 倒计分钟app 多个订单待付款半小时倒计时功能

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

2023-09-08 03:57| 来源: 网络整理| 查看: 265

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

前言

阅读这篇文章大概需要您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毫秒的Calendar String cancelTime = TimeUtil.getDateTimeString(after.getTime()); //得到string类型的时间 // 获取下单半小时还未付款的订单 List 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 getUnPaiedOrders(@Param("cancelTime") String cancelTime); select * from `orders` where `order_state` = 1 and `payment_status` = 0 and `create_time` ;= #{cancelTime} 每一个待付款订单显示倒计时并倒计时结束之后自动取消订单

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、在页面中,获取每一个订单的数据

后订单自动关闭 倒计时代码(大家需要的)

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 == ''){ //如果订单剩余时间少于0 time_obj.html('' + 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 { //大于0 time_obj.html('' + time_string); time_obj.attr('left_time_int', left_time_int - 1); //倒计时减1 } } }); window.setTimeout(function() { order_expire_time(); }, 1000); }

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3