swoole的自動取消訂單還原庫存等操作教程

2023-11-26    分類: 網(wǎng)站建設(shè)

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

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

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

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

1、所需要sql數(shù)據(jù)庫表

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,就不會運用到框架里去,其實都一樣的,不要想得那么復(fù)雜就是了。只要一點就是你用多了,你就會這樣覺得咯。

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

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

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

訂單提交的文件swoole的自動取消訂單還原庫存等操作教程
文章來源:http://www.bm7419.com/news39/296889.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化Google、微信公眾號、外貿(mào)建站虛擬主機、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)