真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java中怎么實現(xiàn)商城訂單超時取消功能

這篇文章將為大家詳細講解有關(guān)Java中怎么實現(xiàn)商城訂單超時取消功能,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:申請域名、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、富寧網(wǎng)站維護、網(wǎng)站推廣。

實現(xiàn)原理:

利用 jdk 的 DelayQueue的阻塞隊列的特性實現(xiàn)。在項目啟動時開啟一個線程處理 DelayQueue 隊列里彈出的超時訂單對象,訂單未超時該線程處于等待中。

DelayQueue的簡單介紹:

DelayQueue類的主要作用:是一個無界的BlockingQueue,用于放置實現(xiàn)了Delayed接口的對象,其中的對象只能在其到期時才能從隊列中取走。這種隊列是有序的,即隊頭對象的延遲到期時間最長。注意:不能將null元素放置到這種隊列中。

實現(xiàn)方式 :

1.創(chuàng)建一個實現(xiàn)Delayed接口的 order 類并重寫compareTo和 getDelay方法

2.創(chuàng)建一個幫助類OrderCollection(訂單的增刪查)

3. 創(chuàng)建CancellOrder類

在生成訂單時將訂單號創(chuàng)建時間和過期時間封裝成一個實現(xiàn)Delayed接口的對象存入DelayQueue隊列中,當該訂單支付完成后將該對象從隊列中移除,(為了保證不丟失訂單建議在項目啟動時將數(shù)據(jù)庫中的符合條件的訂單初始化到DelayQueue隊列中 )

實現(xiàn)代碼如下:

/** * 類說明 * * @author grl * @date 2019年12月16日 新建 */public class Order implements Delayed {  private String orderShopNum;  /**  * 1-普通活動 2-限時活動 3-拼購活動  */  private int orderType;  private long orderCreateTime;  private long expTime;  public Order(String orderShopNum, int orderType, Date createTime) {   if (StringUtils.isNotBlank(orderShopNum)) {     this.orderShopNum = orderShopNum.trim();   }   if (createTime == null) {     this.orderCreateTime = System.currentTimeMillis();   } else {     this.orderCreateTime = createTime.getTime();   }   this.orderType = orderType;   if (orderType == 2) {     this.expTime = TimeUnit.MILLISECONDS.convert(Const.LIMIT_ACTIVITY_EXPIRATION_TIME, TimeUnit.MINUTES)        + createTime.getTime();   }if(orderType == 3){     this.expTime = TimeUnit.MILLISECONDS.convert(Const.LIMIT_GROUP_BUY_EXPIRATION_TIME, TimeUnit.MINUTES)        + createTime.getTime();   } else {     this.expTime = TimeUnit.MILLISECONDS.convert(Const.ORDER_PAYMENT_DEADLINE, TimeUnit.DAYS)        + createTime.getTime();   }  }  public String getOrderShopNum() {   return orderShopNum;  }  public long getOrderCreateTime() {   return orderCreateTime;  }  public long getExpTime() {   return expTime;  }  public int getOrderType() {   return orderType;  }  @Override  public int compareTo(Delayed o) {   return Long.valueOf(this.expTime).compareTo(Long.valueOf(((Order) o).expTime));  }  @Override  public long getDelay(TimeUnit unit) {   return unit.convert(this.expTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS);  } } /** * 類說明 * * @author grl * @date 2019年12月16日 新建 */public class OrderCollection {  /**  * 訂單管理集合  */  private static DelayQueue orderList = new DelayQueue();  private OrderCollection() {  }  /**  * 獲取訂單集合  * @author grl  * @return  */  protected static DelayQueue getOrderCollection() {   return orderList;  }   /**  * 向集合中添加訂單  *   * @author grl  * @param order  * @return  */  public static boolean add(Order order) {   boolean flag = false;   if (order != null && StringUtils.isNotBlank(order.getOrderShopNum())) {     flag = orderList.offer(order);   }   return flag;  }  /**  * 從集合中刪除訂單  *   * @author grl  * @param orderShopNum  * @return  */  public static boolean remove(String orderShopNum) {   boolean flag = false;   Order thisOrder = null;   if (StringUtils.isNotBlank(orderShopNum)) {     orderShopNum = orderShopNum.trim();     for (Order order : orderList) {      String orderNum = order.getOrderShopNum();      if (orderNum.equals(orderShopNum)) {        thisOrder = order;      }     }     if (thisOrder != null) {      flag = orderList.remove(thisOrder);     }   }   return flag;  }  /**  * 獲取訂單的過期剩余時間  *   * @author grl  * @param orderShopNum  * @param unit  * @return -1 已經(jīng)過期  */  public static long getDelay(String orderShopNum) {   long time = -1;   if (StringUtils.isNotBlank(orderShopNum)) {     orderShopNum = orderShopNum.trim();     for (Order order : orderList) {      String orderNum = order.getOrderShopNum();      if (orderNum.equals(orderShopNum)) {        time = order.getDelay(TimeUnit.MILLISECONDS);        if(time<5000) {         time = -1;        }      }     }   }   return time;  }} /** * 類說明 * * @author grl * @date 2019年12月16日 新建 */@Componentpublic class CancellOrder implements Runnable {  private static final Logger log = LoggerFactory.getLogger(CancellOrder.class);  @Override  public void run() {   while (true) {     try {      Order take = OrderCollection.getOrderCollection().take();      String orderShopNum = take.getOrderShopNum();      int orderType = take.getOrderType();      // 業(yè)務(wù)邏輯操作     } catch (InterruptedException e) {      e.printStackTrace();      log.error("CancellOrder DelayQueue 錯誤 {}", e.getMessage());     }   }  }}

關(guān)于Java中怎么實現(xiàn)商城訂單超時取消功能就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


標題名稱:Java中怎么實現(xiàn)商城訂單超時取消功能
URL地址:http://weahome.cn/article/ijepdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部