要實現Java訂單超時取消功能,可以使用定時任務來檢測訂單是否超時并進行取消操作。以下是一個簡單的實現示例:
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分鐘超時
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); // 每秒檢查一次
// 為了演示效果,等待一段時間后取消訂單
try {
Thread.sleep(1000 * 60 * 10); // 10分鐘
} catch (InterruptedException e) {
e.printStackTrace();
}
order1.cancel();
timer.cancel();
System.out.println("定時任務已取消。");
}
}
在上面的示例中,訂單管理類OrderManager
中的cancelExpiredOrders
方法會檢查訂單是否超時,并執行取消操作。定時任務類OrderCancelTask
繼承了TimerTask
,在run
方法中調用OrderManager
的cancelExpiredOrders
方法。OrderCancelTask
被定時器Timer
每秒執行一次。
在main
方法中,我們創建了一個訂單管理類OrderManager
并添加了一些訂單。然后,創建了一個定時器Timer
并指定定時任務為OrderCancelTask
,并以每秒的頻率執行。最后,為了演示效果,等待10分鐘后手動取消訂單,并在定時任務執行完后取消定時器。
這樣,當訂單超過30分鐘未支付時,定時任務會自動取消超時訂單。