Skip to content

Commit 285d164

Browse files
committed
feat[litemall-wx-api]: 系统启动时,查询数据库,创建订单超时未支付任务
1 parent 31eb148 commit 285d164

File tree

6 files changed

+74
-37
lines changed

6 files changed

+74
-37
lines changed

litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/OrderJob.java

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -32,32 +32,6 @@ public class OrderJob {
3232
@Autowired
3333
private LitemallGrouponRulesService rulesService;
3434

35-
/**
36-
* 自动取消订单
37-
* <p>
38-
* 定时检查订单未付款情况,如果超时 LITEMALL_ORDER_UNPAID 分钟则自动取消订单
39-
* 定时时间是每次相隔半个小时。
40-
* <p>
41-
* TODO
42-
* 注意,因为是相隔半小时检查,因此导致订单真正超时时间是 [LITEMALL_ORDER_UNPAID, 30 + LITEMALL_ORDER_UNPAID]
43-
*/
44-
@Scheduled(fixedDelay = 30 * 60 * 1000)
45-
@Transactional(rollbackFor = Exception.class)
46-
public void checkOrderUnpaid() {
47-
logger.info("系统开启任务检查订单是否已经超期自动取消订单");
48-
49-
List<LitemallOrder> orderList = orderService.queryUnpaid(SystemConfig.getOrderUnpaid());
50-
for (LitemallOrder order : orderList) {
51-
// 设置订单已取消状态
52-
order.setOrderStatus(OrderUtil.STATUS_AUTO_CANCEL);
53-
order.setEndTime(LocalDateTime.now());
54-
55-
cancelOrderScope(order);
56-
57-
logger.info("订单 ID" + order.getId() + " 已经超期自动取消订单");
58-
}
59-
}
60-
6135
/**
6236
* 自动确认订单
6337
* <p>
@@ -69,7 +43,7 @@ public void checkOrderUnpaid() {
6943
*/
7044
@Scheduled(cron = "0 0 3 * * ?")
7145
public void checkOrderUnconfirm() {
72-
logger.info("系统开启任务检查订单是否已经超期自动确认收货");
46+
logger.info("系统开启定时任务检查订单是否已经超期自动确认收货");
7347

7448
List<LitemallOrder> orderList = orderService.queryUnconfirm(SystemConfig.getOrderUnconfirm());
7549
for (LitemallOrder order : orderList) {
@@ -117,7 +91,7 @@ public void checkOrderComment() {
11791
@Scheduled(initialDelay = 5000, fixedDelay = 10 * 60 * 1000)
11892
@Transactional(rollbackFor = Exception.class)
11993
public void checkGrouponOrderTimeout() {
120-
logger.info("系统开启任务检查团购订单是否已经拼团超期自动取消订单");
94+
logger.info("系统开启定时任务检查团购订单是否已经拼团超期自动取消订单");
12195

12296
List<LitemallGroupon> grouponList = grouponService.queryJoinRecord(0);
12397
for (LitemallGroupon groupon : grouponList) {

litemall-core/src/main/java/org/linlinjava/litemall/core/task/TaskService.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
package org.linlinjava.litemall.core.task;
22

3-
import com.sun.org.apache.bcel.internal.generic.ARETURN;
43
import org.springframework.stereotype.Component;
5-
64
import javax.annotation.PostConstruct;
7-
import java.util.Iterator;
85
import java.util.concurrent.DelayQueue;
96
import java.util.concurrent.Executors;
107

11-
128
@Component
139
public class TaskService {
1410
private TaskService taskService;

litemall-core/src/test/java/org/linlinjava/litemall/core/TaskTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,24 @@ public void test() {
6868
}
6969
}
7070

71+
@Test
72+
public void test1() {
73+
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
74+
String now = df.format(LocalDateTime.now());
75+
System.out.println("start at time=" + now);
76+
77+
taskService.addTask(new DemoTask("3", 0));
78+
taskService.addTask(new DemoTask("2", 0));
79+
taskService.addTask(new DemoTask("1", 0));
80+
81+
taskService.addTask(new DemoTask("4", 0));
82+
taskService.addTask(new DemoTask("5", 0));
83+
taskService.addTask(new DemoTask("6", 0));
84+
85+
try {
86+
Thread.sleep(10 * 1000);
87+
} catch (InterruptedException e) {
88+
e.printStackTrace();
89+
}
90+
}
7191
}

litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallOrderService.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,8 @@ public int count() {
126126
}
127127

128128
public List<LitemallOrder> queryUnpaid(int minutes) {
129-
LocalDateTime now = LocalDateTime.now();
130-
LocalDateTime expired = now.minusMinutes(minutes);
131129
LitemallOrderExample example = new LitemallOrderExample();
132-
example.or().andOrderStatusEqualTo(OrderUtil.STATUS_CREATE).andAddTimeLessThan(expired).andDeletedEqualTo(false);
130+
example.or().andOrderStatusEqualTo(OrderUtil.STATUS_CREATE).andDeletedEqualTo(false);
133131
return litemallOrderMapper.selectByExample(example);
134132
}
135133

litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/task/OrderUnpaidTask.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,19 @@ public class OrderUnpaidTask extends Task {
1919
private final Log logger = LogFactory.getLog(OrderUnpaidTask.class);
2020
private int orderId = -1;
2121

22+
public OrderUnpaidTask(Integer orderId, long delayInMilliseconds){
23+
super("OrderUnpaidTask-" + orderId, delayInMilliseconds);
24+
this.orderId = orderId;
25+
}
26+
2227
public OrderUnpaidTask(Integer orderId){
2328
super("OrderUnpaidTask-" + orderId, SystemConfig.getOrderUnpaid() * 60 * 1000);
2429
this.orderId = orderId;
2530
}
2631

2732
@Override
2833
public void run() {
29-
logger.info("系统开始处理订单超时未付款订单 " + this.orderId);
34+
logger.info("系统开始处理延时任务---订单超时未付款---" + this.orderId);
3035

3136
LitemallOrderService orderService = BeanUtil.getBean(LitemallOrderService.class);
3237
LitemallOrderGoodsService orderGoodsService = BeanUtil.getBean(LitemallOrderGoodsService.class);
@@ -57,6 +62,6 @@ public void run() {
5762
throw new RuntimeException("商品货品库存增加失败");
5863
}
5964
}
60-
logger.info("系统成功处理订单超时未付款订单 " + this.orderId);
65+
logger.info("系统结束处理延时任务---订单超时未付款---" + this.orderId);
6166
}
6267
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.linlinjava.litemall.wx.task;
2+
3+
import org.apache.commons.logging.Log;
4+
import org.apache.commons.logging.LogFactory;
5+
import org.linlinjava.litemall.core.system.SystemConfig;
6+
import org.linlinjava.litemall.core.task.TaskService;
7+
import org.linlinjava.litemall.db.domain.LitemallOrder;
8+
import org.linlinjava.litemall.db.service.LitemallOrderService;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.boot.ApplicationArguments;
11+
import org.springframework.boot.ApplicationRunner;
12+
import org.springframework.stereotype.Component;
13+
14+
import java.time.LocalDateTime;
15+
import java.time.temporal.ChronoUnit;
16+
import java.util.List;
17+
18+
@Component
19+
public class TaskStartupRunner implements ApplicationRunner {
20+
21+
@Autowired
22+
private LitemallOrderService orderService;
23+
@Autowired
24+
private TaskService taskService;
25+
26+
@Override
27+
public void run(ApplicationArguments args) throws Exception {
28+
List<LitemallOrder> orderList = orderService.queryUnpaid(SystemConfig.getOrderUnpaid());
29+
for(LitemallOrder order : orderList){
30+
LocalDateTime add = order.getAddTime();
31+
LocalDateTime now = LocalDateTime.now();
32+
LocalDateTime expire = add.plusMinutes(SystemConfig.getOrderUnpaid());
33+
if(expire.isBefore(now)) {
34+
// 已经过期,则加入延迟队列
35+
taskService.addTask(new OrderUnpaidTask(order.getId(), 0));
36+
}
37+
else{
38+
// 还没过期,则加入延迟队列
39+
long delay = ChronoUnit.MILLIS.between(now, expire);
40+
taskService.addTask(new OrderUnpaidTask(order.getId(), delay));
41+
}
42+
}
43+
}
44+
}

0 commit comments

Comments
 (0)