2023-11-26 分類: 網(wǎng)站建設(shè)
一、業(yè)務(wù)場(chǎng)景:當(dāng)客戶下單在指定的時(shí)間內(nèi)如果沒有付款,那我們需要將這筆訂單取消掉,比如好的處理方法是運(yùn)用延時(shí)取消,很多人首先想到的當(dāng)然是crontab,這個(gè)也行,不過這里我們運(yùn)用swoole的異步毫秒定時(shí)器來實(shí)現(xiàn),同樣也不會(huì)影響到當(dāng)前程序的運(yùn)行,具體可以參考:https://wiki.swoole.com/wiki/page/319.html
二、說明,order_status為1時(shí)代表客戶下單確定,為2時(shí)代表客戶已付款,為0時(shí)代表訂單已取消(正是swoole來做的)
三、舉例說明,庫(kù)存表csdn_product_stock產(chǎn)品ID為1的產(chǎn)品庫(kù)存數(shù)量為20,產(chǎn)品ID為2的庫(kù)存數(shù)量為40,然后客戶下單一筆產(chǎn)品ID1減10,產(chǎn)品ID2減20,所以庫(kù)存表只夠2次下單,例子中10秒后自動(dòng)還原庫(kù)存,如下圖:
圖解:1、第一次下完單產(chǎn)品ID1庫(kù)存從20減到了10,產(chǎn)品ID2庫(kù)存從40減到了20;2、第二次下完單產(chǎn)品ID的庫(kù)存為0了,產(chǎn)品ID2的庫(kù)存也為0了,3、第三次下單時(shí),程序提示Out of stock;4、過了10秒鐘(每個(gè)訂單下單后往后推10秒),客戶兩次下單,由于沒有付款(csdn_order表的order_status為1),產(chǎn)品1和產(chǎn)品2的庫(kù)存被還原了(csdn_order表的order_status變?yōu)?),客戶又可以繼續(xù)下單了
1、所需要sql數(shù)據(jù)庫(kù)表
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,很多同學(xué)用了原生pHp,就不會(huì)運(yùn)用到框架里去,其實(shí)都一樣的,不要想得那么復(fù)雜就是了。只要一點(diǎn)就是你用多了,你就會(huì)這樣覺得咯。
配置文件config.php ,這個(gè)在框架的話,基本上都是配置好了。
<?php
$dbHost = "192.168.23.110";
$dbUser = "root";
$dbpassword = "123456";
$dbName = "test";
?>
swoole都是用在linux系統(tǒng)里的,這里的host你可以自己搭建虛擬主機(jī),也可以網(wǎng)上購(gòu)買屬于自己的服務(wù)器
訂單提交的文件swoole的自動(dòng)取消訂單還原庫(kù)存等操作教程
文章來源:http://www.rwnh.cn/news39/296889.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、Google、微信公眾號(hào)、外貿(mào)建站、虛擬主機(jī)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容