Commit 285d1643 authored by Junling Bu's avatar Junling Bu
Browse files

feat[litemall-wx-api]: 系统启动时,查询数据库,创建订单超时未支付任务

parent 31eb1481
......@@ -32,32 +32,6 @@ public class OrderJob {
@Autowired
private LitemallGrouponRulesService rulesService;
/**
* 自动取消订单
* <p>
* 定时检查订单未付款情况,如果超时 LITEMALL_ORDER_UNPAID 分钟则自动取消订单
* 定时时间是每次相隔半个小时。
* <p>
* TODO
* 注意,因为是相隔半小时检查,因此导致订单真正超时时间是 [LITEMALL_ORDER_UNPAID, 30 + LITEMALL_ORDER_UNPAID]
*/
@Scheduled(fixedDelay = 30 * 60 * 1000)
@Transactional(rollbackFor = Exception.class)
public void checkOrderUnpaid() {
logger.info("系统开启任务检查订单是否已经超期自动取消订单");
List<LitemallOrder> orderList = orderService.queryUnpaid(SystemConfig.getOrderUnpaid());
for (LitemallOrder order : orderList) {
// 设置订单已取消状态
order.setOrderStatus(OrderUtil.STATUS_AUTO_CANCEL);
order.setEndTime(LocalDateTime.now());
cancelOrderScope(order);
logger.info("订单 ID" + order.getId() + " 已经超期自动取消订单");
}
}
/**
* 自动确认订单
* <p>
......@@ -69,7 +43,7 @@ public class OrderJob {
*/
@Scheduled(cron = "0 0 3 * * ?")
public void checkOrderUnconfirm() {
logger.info("系统开启任务检查订单是否已经超期自动确认收货");
logger.info("系统开启定时任务检查订单是否已经超期自动确认收货");
List<LitemallOrder> orderList = orderService.queryUnconfirm(SystemConfig.getOrderUnconfirm());
for (LitemallOrder order : orderList) {
......@@ -117,7 +91,7 @@ public class OrderJob {
@Scheduled(initialDelay = 5000, fixedDelay = 10 * 60 * 1000)
@Transactional(rollbackFor = Exception.class)
public void checkGrouponOrderTimeout() {
logger.info("系统开启任务检查团购订单是否已经拼团超期自动取消订单");
logger.info("系统开启定时任务检查团购订单是否已经拼团超期自动取消订单");
List<LitemallGroupon> grouponList = grouponService.queryJoinRecord(0);
for (LitemallGroupon groupon : grouponList) {
......
package org.linlinjava.litemall.core.task;
import com.sun.org.apache.bcel.internal.generic.ARETURN;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Iterator;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Executors;
@Component
public class TaskService {
private TaskService taskService;
......
......@@ -68,4 +68,24 @@ public class TaskTest {
}
}
@Test
public void test1() {
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String now = df.format(LocalDateTime.now());
System.out.println("start at time=" + now);
taskService.addTask(new DemoTask("3", 0));
taskService.addTask(new DemoTask("2", 0));
taskService.addTask(new DemoTask("1", 0));
taskService.addTask(new DemoTask("4", 0));
taskService.addTask(new DemoTask("5", 0));
taskService.addTask(new DemoTask("6", 0));
try {
Thread.sleep(10 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
......@@ -126,10 +126,8 @@ public class LitemallOrderService {
}
public List<LitemallOrder> queryUnpaid(int minutes) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime expired = now.minusMinutes(minutes);
LitemallOrderExample example = new LitemallOrderExample();
example.or().andOrderStatusEqualTo(OrderUtil.STATUS_CREATE).andAddTimeLessThan(expired).andDeletedEqualTo(false);
example.or().andOrderStatusEqualTo(OrderUtil.STATUS_CREATE).andDeletedEqualTo(false);
return litemallOrderMapper.selectByExample(example);
}
......
......@@ -19,6 +19,11 @@ public class OrderUnpaidTask extends Task {
private final Log logger = LogFactory.getLog(OrderUnpaidTask.class);
private int orderId = -1;
public OrderUnpaidTask(Integer orderId, long delayInMilliseconds){
super("OrderUnpaidTask-" + orderId, delayInMilliseconds);
this.orderId = orderId;
}
public OrderUnpaidTask(Integer orderId){
super("OrderUnpaidTask-" + orderId, SystemConfig.getOrderUnpaid() * 60 * 1000);
this.orderId = orderId;
......@@ -26,7 +31,7 @@ public class OrderUnpaidTask extends Task {
@Override
public void run() {
logger.info("系统开始处理订单超时未付款订单 " + this.orderId);
logger.info("系统开始处理延时任务---订单超时未付款---" + this.orderId);
LitemallOrderService orderService = BeanUtil.getBean(LitemallOrderService.class);
LitemallOrderGoodsService orderGoodsService = BeanUtil.getBean(LitemallOrderGoodsService.class);
......@@ -57,6 +62,6 @@ public class OrderUnpaidTask extends Task {
throw new RuntimeException("商品货品库存增加失败");
}
}
logger.info("系统成功处理订单超时未付款订单 " + this.orderId);
logger.info("系统结束处理延时任务---订单超时未付款---" + this.orderId);
}
}
package org.linlinjava.litemall.wx.task;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.linlinjava.litemall.core.system.SystemConfig;
import org.linlinjava.litemall.core.task.TaskService;
import org.linlinjava.litemall.db.domain.LitemallOrder;
import org.linlinjava.litemall.db.service.LitemallOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
@Component
public class TaskStartupRunner implements ApplicationRunner {
@Autowired
private LitemallOrderService orderService;
@Autowired
private TaskService taskService;
@Override
public void run(ApplicationArguments args) throws Exception {
List<LitemallOrder> orderList = orderService.queryUnpaid(SystemConfig.getOrderUnpaid());
for(LitemallOrder order : orderList){
LocalDateTime add = order.getAddTime();
LocalDateTime now = LocalDateTime.now();
LocalDateTime expire = add.plusMinutes(SystemConfig.getOrderUnpaid());
if(expire.isBefore(now)) {
// 已经过期,则加入延迟队列
taskService.addTask(new OrderUnpaidTask(order.getId(), 0));
}
else{
// 还没过期,则加入延迟队列
long delay = ChronoUnit.MILLIS.between(now, expire);
taskService.addTask(new OrderUnpaidTask(order.getId(), delay));
}
}
}
}
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment