15天自動收貨,30分鐘不支付訂單自動取消是如何實現的?
(1)使用者支付完成以後,把訂單ID插入到記憶體的一個DelayQueue中,同時插入到Redis中。
(2)15天之內,使用者點選了確認收貨,則從DelayQueue中刪除,從Redis中刪除。
(3)超過7天,DelayQueue中的訂單ID出隊,查詢資料庫,改狀態為自動收貨,刪除redis。
(4)如果15天之內,web伺服器重啟過,則web伺服器啟動以後,從redis中讀取待收貨的訂單,插入到DelayQueue。
看下具體的程式碼:
- @Controller
- @RequestMapping(value = "")
- publicclass OrderController {
- @Autowired
- DelayService delayService;
- @Autowired
- RedisService redisServie;
- @Autowired
- ConfigService configService;
- //模擬資料庫
- private List<Long> ordeIds = new ArrayList<Long>();
- privatestaticfinal Logger log = Logger.getLogger(OrderController.class);
- @RequestMapping
- public String order(final HttpServletRequest request, final Model model) {
- return"order";
- }
- @RequestMapping(value = "/pay", method = RequestMethod.GET)
- @ResponseBody
- public Response<Void> pay(final HttpServletRequest request,
- finallong orderId = Long.parseLong(request.getParameter("orderId"));
- ordeIds.add(orderId);
- log.error("訂單已支付:"+orderId);
- //把訂單插入到待收貨的佇列和redis
- ThreadPoolUtil.execute(new Runnable(){
- @Override
- publicvoid run() {
- //1 插入到待收貨佇列
- DSHOrder dshOrder = new DSHOrder(orderId, configService.getDshTimeOut());
- delayService.add(dshOrder);
- log.error("訂單入隊:"+orderId);
- //2插入到redis
- redisServie.set(Constants.RedisKey.DSH_PREFIX+orderId, dshOrder, RedisService.DB.DSH);
- log.error("訂單入redis:"+orderId);
- }
- });
- returnnew Response<Void>(0,"成功");
- }
- @RequestMapping(value = "/confirm_delivery", method = RequestMethod.GET)
- @ResponseBody
- public Response<Void> confirm_delivery(final HttpServletRequest request, final Model model) {
- finallong orderId = Long.parseLong(request.getParameter("orderId"));
- ordeIds.remove(orderId);
- log.error("訂單已確認收貨:"+orderId);
- //從delay佇列刪除,從redis刪除
- ThreadPoolUtil.execute(new Runnable(){
- publicvoid run(){
- //從delay佇列刪除
- delayService.remove(orderId);
- log.error("訂單手動出隊:"+orderId);
- //從redis刪除
- redisServie.delete(Constants.RedisKey.DSH_PREFIX+orderId, RedisService.DB.DSH);
- log.error("訂單手動出redis:"+orderId);
- }
- });
- returnnew Response<Void>(0,"成功");
- }
- }
- @Service
- publicclass DelayService {
- privatestaticfinal Logger log = Logger.getLogger(DelayService.class);
- @Autowired
- ConfigService configService;
- privateboolean start ;
- private OnDelayedListener listener;
- private DelayQueue<DSHOrder> delayQueue = new DelayQueue<DSHOrder>();
- publicstaticinterface OnDelayedListener{
- publicvoid onDelayedArrived(DSHOrder order);
- }
- publicvoid start(OnDelayedListener listener){
- if(start){
- return;
- }
- log.error("DelayService 啟動");
- start = true;
- this.listener = listener;
- new Thread(new Runnable(){
- publicvoid run(){
- try{
- while(true){
- DSHOrder order = delayQueue.take();
- if(DelayService.this.listener != null){
- DelayService.this.listener.onDelayedArrived(order);
- }
- }
- }catch(Exception e){
- e.printStackTrace();
- }
- }
- }).start();;
- }
- publicvoid add(DSHOrder order){
- delayQueue.put(order);
- }
- publicboolean remove(DSHOrder order){
- return delayQueue.remove(order);
- }
- publicvoid add(long orderId){
- delayQueue.put(new DSHOrder(orderId, configService.getDshTimeOut()));
- }
- publicvoid remove(long orderId){
- DSHOrder[] array = delayQueue.toArray(new DSHOrder[]{});
- if(array == null || array.length <= 0){
- return;
-
相關推薦
15天自動收貨,30分鐘不支付訂單自動取消是如何實現的?
(1)使用者支付完成以後,把訂單ID插入到記憶體的一個DelayQueue中,同時插入到Redis中。(2)15天之內,使用者點選了確認收貨,則從DelayQueue中刪除,從Redis中刪除。(3)超過7天,DelayQueue中的訂單ID出隊,查詢資料庫,改狀態為自動收貨
7天自動收貨,30分鐘不支付訂單自動取消是如何實現的?
1.我們以支付以後7天自動收貨為例來說明下: (1)使用者支付完成以後,把訂單ID插入到記憶體的一個DelayQueue中,同時插入到Redis中。 (2)7天之內,使用者點選了確認收貨,則從DelayQueue中刪除,從Redis中刪除。 (3)超過7天,DelayQue
LaTeX新人教程,30分鐘從完全陌生到基本入門[轉載]
XA don fcc 過程 idt 咨詢 官網下載 恐懼感 尋找 LaTeX新人教程,30分鐘從完全陌生到基本入門[轉載] 2017-02-05 分類:TeX講義 閱讀(32514) 評論(0) 這是一篇老文了,前幾天看微博的時候看到的,文中的很多表達比較過激,思路還是
通過“走後門”才得來的關註和贊賞,15天後的今天,我來炫耀下成果
fff 好文 有關 RM one 決心 ges http 產品 我的關註和贊賞是如何得來的 想必看過小魚兒前一篇文章的人都知道,我是如何開始走上在博客寫文這條路的。好歹也是博客“堂堂”一產品經理,好歹也是親自策劃關註和贊賞並看著TA們上線的,竟然沒有關註和贊賞。如一休刺激
強化學習AI,20分鐘可學會開自動駕駛汽車
本文由人工智慧觀察編譯譯者:Sandy據外媒報道,來自英國的一組研究人員在短短20分鐘之內就教會
每日一問 如果 WEB 測試 7 天內免登陸,15 天內免登陸,1 個月內免登陸,測試要怎麼去測?
首先確認三個實現的細節:1、日期計算時,時間是按照伺服器時間、資料庫時間還是使用者本機時間或者其他的計算的?2、免登入是怎麼實現的?是Cookie還是Session?3、計算是按照時分秒計算還是按照整天計算的?測試點:以7天為例1、選擇7天內免登入,登入後退出再次登入,是否免
LaTeX新人教程,30分鐘從完全陌生到基本入門
1.LaTeX軟體的安裝和使用 方法A(自助):在MikTeX的官網下載免費的MikTeX編譯包並安裝。下載WinEdt(收費)或TexMaker(免費)等編輯介面軟體並安裝。 方法B(打包):在ctex.org下載ctex套裝(含MikTeX及WinEdt) 哈哈這一部分當然不包含在標題的30分鐘裡。 2.
《旅行青蛙》登陸淘寶“帶貨”,馬雲不差錢,幹嘛選過氣手遊?
旅行青蛙明天,5月9日《旅行青蛙》國內版將以“小遊戲”的形式登陸手機淘寶。結果,今天書樂就被北京商報和IT時報問了一輪又一輪,難道阿裏又一次想要做遊戲大佬嗎?《旅行青蛙》還能火嗎?答案很簡單,一定會火,只是火的方式不一樣了。以下是書樂的若幹分析,你看看對不對:一 旅行青蛙能帶貨,特產什麽的只是起手式?毫無疑問
編寫一個程式,獲取10個1至20的隨機數,要求隨機數不能重複(HashSet實現)
廢話不多說,直接上程式碼。 package cn.ketang.lianxi02; import java.util.HashSet; import java.util.Random; /** *
天貓,淘寶,京東收貨信息中,自動識別手機號、姓名、省市區
reader 經緯度 nod val tostring pri location com matcher 最近工作需要,需要從一串字符串中識別出姓名,手機號和省市區,例如下面的一些字符串: 櫥之友,包衛貞,13600000000,浙江省寧波市,慈溪市,庵東鎮 杭州灣新區世
Java中用sql語句顯示最近30天每日登入量每日登入量,並以echarts頁面統計出最近15天登入量
需求:Java中統計每日登入總數,頁面顯示最近30 天資料,並以條形統計圖形式顯示出來。效果圖(新手,歡迎指教)sql語句如下:步驟1.:按天數統計每日登入量select count(id) as 每天
30分鐘掌握ES6/ES2015核心內容[上和下], 不錯的說
還得 天下 span default es6 ava arguments nts http ECMAScript 6(以下簡稱ES6)是JavaScript語言的下一代標準。因為當前版本的ES6是在2015年發布的,所以又稱ECMAScript 2015。 也就是說,E
15天倒計時:深度學習高端講座免費聽,最後200位贈教材名額!
技術講座 深度學習 tensor 深度學習是對使用多層神經網絡過程進行機器學習的統稱。目前已經被應用到圖像識別,語音識別,自然語言處理,機器翻譯等場景並取得了很好的行業應用效果。由谷歌研發的新一代深度學習工具Tensor Flow,於2015年底正式向公眾開源。Tensor Flow技術是當前最值
php 利用cookie設置用戶30分鐘未操作自動退出
func 成功 color emp ase upper highlight 解密 tmpl 登陸控制器需要做的登陸成功把用戶ID等信息存入cookie: $this->systemSetKey(array(‘name‘=>$admin_info[‘admin_
SQL語句來查詢今天、昨天、7天內、30天的數據,經典!
diff 指定 first 內容 輸出 har edi time nth ---恢復內容開始--- 今天的所有數據:select * from 表名 where DateDiff(dd,datetime類型字段,getdate())=0 昨天的所有數據:select *
自動登陸已失敗多次,30分鐘內請手動登陸
cnblogs post 衛士 失敗 spa 恢復 跳板 class 報錯 遠程登陸跳板機時,該電腦未加入域,遇到報錯:自動登陸已失敗多次,30分鐘內請手動登陸 本地登陸正常。 解決辦法:卸載跳板機上的360安全衛士,恢復正常。 自動登陸已失敗多次,30分鐘內請手動登陸
請拿出30分鐘鉆研此文,系統掌握java面試題分析技巧
java 面試 架構師 談一談對MySQL InnoDB的認識 介紹: InnoDB引擎是MySQL數據庫的一個重要的存儲引擎,和其他存儲引擎相比,InnoDB引擎的優點是支持兼容ACID的事務(類似於PostgreSQL),以及參數完整性(有外鍵)等。現在Innobase實行雙認證授權.MySQ
微信提前解封!微信號被封7天/8天/15天/16天/30天/31天/60天怎麽提前解除
社會 及其 帳號登錄 騰訊 方式 資金 產業 著作權 添加 微信個人帳號封號常見問題 微信是一個生活辦法。為了更好的協助你了解咱們在打造綠色、健康的互聯網生態環境上做出的盡力,咱們對微信個人帳號約束登錄辦理收拾如下常見問題與回答: 一、何種行為或狀況會導致微信個人帳號被封?
java幾秒前,幾分鐘前,幾小時前,幾天前,幾月前,幾年前的實現
程式碼下載:http://www.zuidaima.com/share/1562038902000640.htm package com.zuidaima; import java.text.ParseException; import java.text.SimpleDat
用Python指令碼自動運營多個自媒體平臺,不寫稿坐等收錢,只告訴你原理
使用此方法最低成本不超過120元/年,年收入根據你所選擇垂直行業和帳號多少以及哪些平臺來決定 我所說的最低成本是針對我而言來說的,辛苦點的可以做到0成本操作,喜歡冒險的總投入不會超過5000塊錢 首先第一步就是你要有自媒體帳號,帳號和平臺不限,根據你對平臺的理解來自行選擇使用那個平臺,