多个订单待付款半小时倒计时功能
多个订单待付款半小时倒计时功能
- 前言
- 设置定时器,自动取消订单(后端)
- 每一个待付款订单显示倒计时并倒计时结束之后自动取消订单
- 倒计时代码(大家需要的)
前言
阅读这篇文章大概需要您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` <= #{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);}
博主有话说
非常感谢大家看完我的博客,第一次写,如果有什么写的不好或者错误的欢迎指出。希望我的这篇文章可以帮助到您
多个订单待付款半小时倒计时功能相关推荐
- 下单后半小时未付款订单自动取消的实现,延迟队列
下单后半小时未付款订单自动取消的实现,延迟队列 类似的需要: 订单的评论如果7天未评价,系统需要自动产生一条评论 订单的15天之后未点击收货,系统需要自动更改为已收货. ... 因为是需要一个常驻进程 ...
- Java 中Timer定时器设置订单提交后24小时未付款订单状态为已关闭。
1. 简单的Timer定时器方法 public class CommTimer {/*** 设置指定24小时后执行*/public static void orderClose() {final Ti ...
- 滴滴为等乘客半小时被取消订单司机发放补贴
本文转载自IT之家 IT之家 4 月 15 日消息 今天,滴滴出行发布了关于"深圳网约车司机长途接乘客等半小时后被取消订单"事件情况说明. IT之家了解到,4 月 13 日,深圳快 ...
- Java LocalDateTime给当前时间加半小时
前言 现在有这样一个需求,需要将当前时间加上半小时返回给前端,在Java8之后推荐用LocalDateTime来替换Date,它提供了丰富的方法给我们来调用,那我们来实现一下 实现 如图所示,我们使用 ...
- 如何半小时免费搭建NGINX网站?
原文作者:楚发 原文链接:如何半小时免费搭建NGINX网站? 转载来源:NGINX开源社区 近半年直播越来越火,老罗都登场带货了,疫情就像催化剂,逼着线下各行各业转战线上.毋庸置疑,今年是直播元年. ...
- 半小时深刻理解React
声明:本文来自腾讯增值产品部官方公众号小时光茶社,为CSDN原创投稿,未经许可,禁止任何形式的转载. 作者:左明,企鹅电竞前端团队leader,腾讯高级工程师.从事web开发超过8年,主导过微云web ...
- 纳斯达克支持XRP流动性指数XRPLX,XRP半小时涨超3%,突破0.3美元
"XRPLX仅从流动性最强的交易所(按交易量和订单深度计算)获取数据." 文 | 梁雨山 出品 | 火星财经(ID:hxcj24h) 火星财经APP(ID:hxcj24h)一线报道 ...
- 吃鸡2019年5月7日服务器维护,绝地求生12月19日7个半小时更新到几点 吃鸡更新维护公告...
绝地求生在12月19日正在进行大的新版本的更新维护,此次的维护时间长达7个半小时,可以说是非常的久了,大家估计要到下午的3,4点才能上游戏玩耍,下面来为大家分享一下吃鸡的更新维护公告. [绝地求生正式 ...
- 手机测试充电宝软件,记者随机测试5款产品 “有共享充电宝半小时只充了11%”...
原标题:记者随机测试5款产品 "有共享充电宝半小时只充了11%" 不同品牌的共享充电宝,充电速度差异较大. /晨报记者 潘 文 "花了3块钱,充了半小时,手机只充了11% ...
- Go Pro 半小时上手指南
Jack刚买了台Go Pro 6,商品包装内没有说明书,希望尽快拍那种慢动作或者酷炫的照片,去网上看了些贴都是注重结果,很少讲具体设置或技巧,光靠自己研究什么时候才能入门?<Go Pro 半小时 ...
最新文章
- 【 C 】const 进一步解读(由switch引出)
- c#中为datagrid添加下拉列表框
- MYSQL1130错误的解决方案
- 「基本功」不可不说的Java“锁”事
- AspNet Core 6.0 Json写默认首字母小写(camelCase)问题
- python tuple args_Python基本数据类型之tuple
- 产品专家Marty Cagan:不做仅仅会编码的人
- maven的java web项目启动找不到Spring ContextLoaderListener的解决办法
- 我的docker随笔4:docker常用命令
- python3 全局变量 局部变量_Python3获取变量名并修改函数内部的外部变量和局部变量,python3,在,local...
- 如何在前端中使用protobuf(vue篇)
- Merry Christmas
- js获取服务器控件DropDownList所选中的各项属性
- matlab中的pzmap的意思,Matlab 学习
- nfc加密卡pm3和pm5区别_为了省门禁卡的钱,买了NFC读卡器,到底值不值
- centos 下 docker 的 安装与使用 (一)
- 小白基础知识必备|| 整型常量与进制间的转换
- C语言ip地址转换成十六进制,将IP地址转换为十六进制
- mac小技巧之打印文件
- fiddler使用过滤、打断点方法