Skip to content

Commit 31eb148

Browse files
committed
feat[litemall-wx-api]: 订单超时未支付任务
1 parent d8ccd13 commit 31eb148

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.linlinjava.litemall.core.notify.NotifyType;
1919
import org.linlinjava.litemall.core.qcode.QCodeService;
2020
import org.linlinjava.litemall.core.system.SystemConfig;
21+
import org.linlinjava.litemall.core.task.TaskService;
2122
import org.linlinjava.litemall.core.util.DateTimeUtil;
2223
import org.linlinjava.litemall.core.util.JacksonUtil;
2324
import org.linlinjava.litemall.core.util.ResponseUtil;
@@ -27,6 +28,7 @@
2728
import org.linlinjava.litemall.db.util.OrderHandleOption;
2829
import org.linlinjava.litemall.db.util.OrderUtil;
2930
import org.linlinjava.litemall.core.util.IpUtil;
31+
import org.linlinjava.litemall.wx.task.OrderUnpaidTask;
3032
import org.springframework.beans.factory.annotation.Autowired;
3133
import org.springframework.stereotype.Service;
3234
import org.springframework.transaction.annotation.Transactional;
@@ -105,6 +107,8 @@ public class WxOrderService {
105107
private LitemallCouponUserService couponUserService;
106108
@Autowired
107109
private CouponVerifyService couponVerifyService;
110+
@Autowired
111+
private TaskService taskService;
108112

109113
/**
110114
* 订单列表
@@ -422,6 +426,9 @@ public Object submit(Integer userId, String body) {
422426
grouponService.createGroupon(groupon);
423427
}
424428

429+
// 订单支付超期任务
430+
taskService.addTask(new OrderUnpaidTask(orderId));
431+
425432
Map<String, Object> data = new HashMap<>();
426433
data.put("orderId", orderId);
427434
return ResponseUtil.ok(data);
@@ -766,6 +773,9 @@ public Object payNotify(HttpServletRequest request, HttpServletResponse response
766773

767774
notifyService.notifyWxTemplate(result.getOpenid(), NotifyType.PAY_SUCCEED, parms, "pages/index/index?orderId=" + order.getId());
768775

776+
// 取消订单超时未支付任务
777+
taskService.removeTask(new OrderUnpaidTask(order.getId()));
778+
769779
return WxPayNotifyResponse.success("处理成功!");
770780
}
771781

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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.Task;
7+
import org.linlinjava.litemall.core.util.BeanUtil;
8+
import org.linlinjava.litemall.db.domain.LitemallOrder;
9+
import org.linlinjava.litemall.db.domain.LitemallOrderGoods;
10+
import org.linlinjava.litemall.db.service.LitemallGoodsProductService;
11+
import org.linlinjava.litemall.db.service.LitemallOrderGoodsService;
12+
import org.linlinjava.litemall.db.service.LitemallOrderService;
13+
import org.linlinjava.litemall.db.util.OrderUtil;
14+
15+
import java.time.LocalDateTime;
16+
import java.util.List;
17+
18+
public class OrderUnpaidTask extends Task {
19+
private final Log logger = LogFactory.getLog(OrderUnpaidTask.class);
20+
private int orderId = -1;
21+
22+
public OrderUnpaidTask(Integer orderId){
23+
super("OrderUnpaidTask-" + orderId, SystemConfig.getOrderUnpaid() * 60 * 1000);
24+
this.orderId = orderId;
25+
}
26+
27+
@Override
28+
public void run() {
29+
logger.info("系统开始处理订单超时未付款订单 " + this.orderId);
30+
31+
LitemallOrderService orderService = BeanUtil.getBean(LitemallOrderService.class);
32+
LitemallOrderGoodsService orderGoodsService = BeanUtil.getBean(LitemallOrderGoodsService.class);
33+
LitemallGoodsProductService productService = BeanUtil.getBean(LitemallGoodsProductService.class);
34+
35+
LitemallOrder order = orderService.findById(this.orderId);
36+
if(order == null){
37+
return;
38+
}
39+
if(!OrderUtil.isCreateStatus(order)){
40+
return;
41+
}
42+
43+
// 设置订单已取消状态
44+
order.setOrderStatus(OrderUtil.STATUS_AUTO_CANCEL);
45+
order.setEndTime(LocalDateTime.now());
46+
if (orderService.updateWithOptimisticLocker(order) == 0) {
47+
throw new RuntimeException("更新数据已失效");
48+
}
49+
50+
// 商品货品数量增加
51+
Integer orderId = order.getId();
52+
List<LitemallOrderGoods> orderGoodsList = orderGoodsService.queryByOid(orderId);
53+
for (LitemallOrderGoods orderGoods : orderGoodsList) {
54+
Integer productId = orderGoods.getProductId();
55+
Short number = orderGoods.getNumber();
56+
if (productService.addStock(productId, number) == 0) {
57+
throw new RuntimeException("商品货品库存增加失败");
58+
}
59+
}
60+
logger.info("系统成功处理订单超时未付款订单 " + this.orderId);
61+
}
62+
}

0 commit comments

Comments
 (0)