要實(shí)現(xiàn)Java訂單超時(shí)取消功能,可以使用定時(shí)任務(wù)來(lái)檢測(cè)訂單是否超時(shí)并進(jìn)行取消操作。以下是一個(gè)簡(jiǎn)單的實(shí)現(xiàn)示例:
public class Order {
private String orderId;
private Date createTime;
private boolean canceled;
public Order(String orderId) {
this.orderId = orderId;
this.createTime = new Date();
this.canceled = false;
}
public void cancel() {
this.canceled = true;
System.out.println("訂單 " + this.orderId + " 已取消。");
}
// 其他方法...
public boolean isCanceled() {
return canceled;
}
}
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class OrderManager {
private List<Order> orders;
public OrderManager() {
this.orders = new ArrayList<>();
}
public void addOrder(Order order) {
this.orders.add(order);
}
public void cancelExpiredOrders() {
Date currentTime = new Date();
for (Order order : orders) {
long timeElapsed = currentTime.getTime() - order.getCreateTime().getTime();
if (!order.isCanceled() && timeElapsed > 1000 * 60 * 30) { // 30分鐘超時(shí)
order.cancel();
}
}
}
}
import java.util.Timer;
import java.util.TimerTask;
public class OrderCancelTask extends TimerTask {
private OrderManager orderManager;
public OrderCancelTask(OrderManager orderManager) {
this.orderManager = orderManager;
}
@Override
public void run() {
orderManager.cancelExpiredOrders();
}
public static void main(String[] args) {
OrderManager orderManager = new OrderManager();
Order order1 = new Order("1");
Order order2 = new Order("2");
orderManager.addOrder(order1);
orderManager.addOrder(order2);
Timer timer = new Timer();
timer.schedule(new OrderCancelTask(orderManager), 0, 1000); // 每秒檢查一次
// 為了演示效果,等待一段時(shí)間后取消訂單
try {
Thread.sleep(1000 * 60 * 10); // 10分鐘
} catch (InterruptedException e) {
e.printStackTrace();
}
order1.cancel();
timer.cancel();
System.out.println("定時(shí)任務(wù)已取消。");
}
}
在上面的示例中,訂單管理類OrderManager
中的cancelExpiredOrders
方法會(huì)檢查訂單是否超時(shí),并執(zhí)行取消操作。定時(shí)任務(wù)類OrderCancelTask
繼承了TimerTask
,在run
方法中調(diào)用OrderManager
的cancelExpiredOrders
方法。OrderCancelTask
被定時(shí)器Timer
每秒執(zhí)行一次。
在main
方法中,我們創(chuàng)建了一個(gè)訂單管理類OrderManager
并添加了一些訂單。然后,創(chuàng)建了一個(gè)定時(shí)器Timer
并指定定時(shí)任務(wù)為OrderCancelTask
,并以每秒的頻率執(zhí)行。最后,為了演示效果,等待10分鐘后手動(dòng)取消訂單,并在定時(shí)任務(wù)執(zhí)行完后取消定時(shí)器。
這樣,當(dāng)訂單超過(guò)30分鐘未支付時(shí),定時(shí)任務(wù)會(huì)自動(dòng)取消超時(shí)訂單。