【Quartz】——利用Quartz处理超时未付款的订单
引言
在电商项目中我们比较常见的问题就是那些未付款的订单,我们需要在一定的时间以后自动关闭交易,如果这个任务是通过人工来完成,工作量是相当可观的,所以我们采用一个定时任务,自动扫面那些订单,然后自动关闭!
有了前面我们对shpring 整合的基础以后,我们在实现这个功能的时候就非常的的简单了
编写job类代码
package com.taotao.store.order.job;import org.joda.time.DateTime;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.quartz.QuartzJobBean;import com.taotao.store.order.mapper.OrderMapper;/*** 扫描超过2天未付款的订单关闭*/
public class PaymentOrderJob extends QuartzJobBean {@Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {ApplicationContext applicationContext = (ApplicationContext) context.getJobDetail().getJobDataMap().get("applicationContext");//时间参数,当前时间向前推2天applicationContext.getBean(OrderMapper.class).paymentOrderScan(new DateTime().minusDays(2).toDate());}}
对应的mapper接口代码
package com.taotao.store.order.mapper;import java.util.Date;import org.apache.ibatis.annotations.Param;import com.taotao.store.order.pojo.Order;public interface OrderMapper extends IMapper{public void paymentOrderScan(@Param("date") Date date);}
映射文件代码
UPDATE tb_order SETstatus = 6,update_time = NOW(),close_time = NOW(),end_time = NOW()WHERE status = 1 AND payment_type = 1 AND create_time <= #{date}
这个job代码的作用就是,按照编写好的任务频率,执行OrderMapper接口中的paymentOrderScan方法,这个方
法接受一个时间类型的参数,以当期时间往前推两天。然后执行更新数据库订单状态。
配置文件内容
我们现在的事件频率是每个一分钟执行一次,所以我们关闭订单的误差在一分钟之内,如果对于误差要求比较高的需求,我们可以自行设定执行频率。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
