日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

usleep延时0.毫秒_【进阶】用swoole实现订单的延时处理(自动取消,还原库存等)...

發布時間:2024/9/27 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 usleep延时0.毫秒_【进阶】用swoole实现订单的延时处理(自动取消,还原库存等)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章正文

一、業務場景:當客戶下單在指定的時間內如果沒有付款,那我們需要將這筆訂單取消掉,比如好的處理方法是運用延時取消,很多人首先想到的當然是crontab,這個也行,不過這里我們運用swoole的異步毫秒定時器來實現,同樣也不會影響到當前程序的運行,具體可以參考:https://wiki.swoole.com/wiki/page/319.html

二、說明,order_status為1時代表客戶下單確定,為2時代表客戶已付款,為0時代表訂單已取消(正是swoole來做的)

三、舉例說明,庫存表csdn_product_stock產品ID為1的產品庫存數量為20,產品ID為2的庫存數量為40,然后客戶下單一筆產品ID1減10,產品ID2減20,所以庫存表只夠2次下單,例子中10秒后自動還原庫存,如下圖:

圖解:1、第一次下完單產品ID1庫存從20減到了10,產品ID2庫存從40減到了20;2、第二次下完單產品ID的庫存為0了,產品ID2的庫存也為0了,3、第三次下單時,程序提示Out of stock;4、過了10秒鐘(每個訂單下單后往后推10秒),客戶兩次下單,由于沒有付款(csdn_order表的order_status為1),產品1和產品2的庫存被還原了(csdn_order表的order_status變為0),客戶又可以繼續下單了

1、所需要sql數據庫表

DROP TABLE IF EXISTS `csdn_order`;CREATE TABLE `csdn_order` ( `order_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `order_amount` float(10,2) unsigned NOT NULL DEFAULT '0.00', `user_name` varchar(64) CHARACTER SET latin1 NOT NULL DEFAULT '', `order_status` tinyint(2) unsigned NOT NULL DEFAULT '0', `date_created` datetime NOT NULL, PRIMARY KEY (`order_id`)) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;DROP TABLE IF EXISTS `csdn_order_detail`;CREATE TABLE `csdn_order_detail` ( `detail_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `order_id` int(10) unsigned NOT NULL, `product_id` int(10) NOT NULL, `product_price` float(10,2) NOT NULL, `product_number` smallint(4) unsigned NOT NULL DEFAULT '0', `date_created` datetime NOT NULL, PRIMARY KEY (`detail_id`), KEY `idx_order_id` (`order_id`)) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;DROP TABLE IF EXISTS `csdn_product_stock`;CREATE TABLE `csdn_product_stock` ( `auto_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `product_id` int(10) NOT NULL, `product_stock_number` int(10) unsigned NOT NULL, `date_modified` datetime NOT NULL, PRIMARY KEY (`auto_id`), KEY `idx_product_id` (`product_id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;INSERT INTO `csdn_product_stock` VALUES ('1', '1', '20', '2018-09-13 19:36:19');INSERT INTO `csdn_product_stock` VALUES ('2', '2', '40', '2018-09-13 19:36:19');

下面貼出來純手工PHP,很多同學用了原生PHP,就不會運用到框架里去,其實都一樣的,不要想得那么復雜就是了。只要一點就是你用多了,你就會這樣覺得咯。

配置文件config.php ,這個在框架的話,基本上都是配置好了。

<?php $dbHost = "192.168.23.110";$dbUser = "root";$dbPassword = "123456";$dbName = "test";?>

swoole都是用在linux系統里的,這里的host你可以自己搭建虛擬主機,也可以網上購買屬于自己的服務器

訂單提交的文件order_submit.php,這里對訂單生成,同時扣除庫存的一系列操作

<?phprequire ("config.php");try { $pdo = new PDO("mysql:host=" . $dbHost . ";dbname=" . $dbName, $dbUser, $dbPassword, array(PDO::ATTR_PERSISTENT => true)); $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $orderInfo = array( 'order_amount' => 10.92, 'user_name' => 'yusan', 'order_status' => 1, 'date_created' => 'now()', 'product_lit' => array( 0 => array( 'product_id' => 1, 'product_price' => 5.00, 'product_number' => 10, 'date_created' => 'now()' ), 1 => array( 'product_id' => 2, 'product_price' => 5.92, 'product_number' => 20, 'date_created' => 'now()' ) ) ); try{ $pdo->beginTransaction();//開啟事務處理 $sql = 'insert into csdn_order (order_amount, user_name, order_status, date_created) values (:orderAmount, :userName, :orderStatus, now())'; $stmt = $pdo->prepare($sql); $affectedRows = $stmt->execute(array(':orderAmount' => $orderInfo['order_amount'], ':userName' => $orderInfo['user_name'], ':orderStatus' => $orderInfo['order_status'])); $orderId = $pdo->lastInsertId(); if(!$affectedRows) { throw new PDOException("Failure to submit order!"); } foreach($orderInfo['product_lit'] as $productInfo) { $sqlProductDetail = 'insert into csdn_order_detail (order_id, product_id, product_price, product_number, date_created) values (:orderId, :productId, :productPrice, :productNumber, now())'; $stmtProductDetail = $pdo->prepare($sqlProductDetail); $stmtProductDetail->execute(array(':orderId' => $orderId, ':productId' => $productInfo['product_id'], ':productPrice' => $productInfo['product_price'], ':productNumber' => $productInfo['product_number'])); $sqlCheck = "select product_stock_number from csdn_product_stock where product_id=:productId"; $stmtCheck = $pdo->prepare($sqlCheck); $stmtCheck->execute(array(':productId' => $productInfo['product_id'])); $rowCheck = $stmtCheck->fetch(PDO::FETCH_ASSOC); if($rowCheck['product_stock_number'] < $productInfo['product_number']) { throw new PDOException("Out of stock, Failure to submit order!"); } $sqlProductStock = 'update csdn_product_stock set product_stock_number=product_stock_number-:productNumber, date_modified=now() where product_id=:productId'; $stmtProductStock = $pdo->prepare($sqlProductStock); $stmtProductStock->execute(array(':productNumber' => $productInfo['product_number'], ':productId' => $productInfo['product_id'])); $affectedRowsProductStock = $stmtProductStock->rowCount(); //庫存沒有正常扣除,失敗,庫存表里的product_stock_number設置了為非負數 //如果庫存不足時,sql異常:SQLSTATE[22003]: Numeric value out of range: 1690 BIGINT UNSIGNED value is out of range in '(`test`.`csdn_product_stock`.`product_stock_number` - 20)' if($affectedRowsProductStock <= 0) { throw new PDOException("Out of stock, Failure to submit order!"); } } echo "Successful, Order Id is:" . $orderId .",Order Amount is:" . $orderInfo['order_amount'] . "。"; $pdo->commit();//提交事務 //exec("php order_cancel.php -a" . $orderId . " &"); pclose(popen('php order_cancel.php -a ' . $orderId . ' &', 'w')); //system("php order_cancel.php -a" . $orderId . " &

總結

以上是生活随笔為你收集整理的usleep延时0.毫秒_【进阶】用swoole实现订单的延时处理(自动取消,还原库存等)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 雪白的扔子视频大全在线观看 | 欧美激情国产一区 | 欧美影院一区 | 亚洲av无码乱码国产精品fc2 | 午夜极品 | 午夜淫片| 国产成人av网站 | 中文字幕人妻丝袜乱一区三区 | 男生女生搞鸡视频 | 男女一级特黄 | 三上悠亚在线一区 | 国产乱轮视频 | www.免费av| 久久成人免费视频 | 中国精品一区二区 | 午夜偷拍福利 | 大陆熟妇丰满多毛xxxⅹ | 午夜寂寞影院在线观看 | 最好看的中文字幕国语电影mv | 中文在线www | 日韩一区二区影视 | 国产精品日韩一区 | 欧美色图激情小说 | 天天狠狠 | 国产日韩欧美一区二区 | 性自由色xxxx免费视频 | 日本成片网 | 国产精品123区| 黑人巨大精品欧美一区二区 | 美女视频黄色 | 午夜精品久久久久久久96蜜桃 | 欧美三级午夜理伦三级中视频 | 爱蜜臀av | 亚洲狠狠丁香婷婷综合久久久 | 久久亚洲av成人无码国产电影 | 成人看片在线 | 欧美少妇性生活 | 91中文字幕永久在线 | 涩涩爱在线 | 国产日韩欧美91 | 正在播放一区 | 伊人激情网| 无码一区二区精品 | 午夜激情视频 | 男女日批 | 色丁香婷婷 | av自拍一区 | 美女网站全黄 | 精品一区二区无码 | 亚洲理论在线观看 | 久久视频免费看 | 无码人妻精品一区二区50 | 黄色在线观看视频 | 成人免费看片在线观看 | 九九色综合网 | 成人高清免费观看 | 手机在线一区二区三区 | 国产黄站 | 欧美色一区二区三区在线观看 | 无套内谢88av免费看 | 在线欧美a | 日本一区二区精品 | 春宵av| 亚洲特级毛片 | 国产一卡二 | 日本高清一区二区视频 | 国产美女白浆 | av免播放器 | 妻子的性幻想 | 国产女人18毛片水真多1 | 国产精品成人av性教育 | 好吊妞视频一区二区三区 | 综合网久久 | 天堂欧美城网站网址 | 中国黄色网址 | 青青草欧美 | 最新黄色av网站 | 日本www高清视频 | 久久av一区二区三区 | 亚洲福利视频在线 | 成人aaaa| 一区二区三区日韩精品 | 老汉av | 欧洲亚洲一区二区三区 | 永久免费,视频 | 成人免费在线观看网站 | 狠狠躁日日躁夜夜躁2022麻豆 | www.av在线免费观看 | 精品免费国产一区二区三区 | 国产黄视频在线观看 | 99久久国产视频 | 男男play视频 | 欧美五月激情 | 法国空姐在线观看视频 | 辟里啪啦国语版免费观看 | 精品熟女一区二区三区 | 日本啊啊视频 | 一级黄色大片网站 | 日韩av在线网站 |