iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0
永豐金融APIs

掌握訂單與線上金流的剪不斷理還亂系列 第 17

Day17 購物車 -- 進階應用

  • 分享至 

  • xImage
  •  

接著在講一個也是很常用到的功能,優惠!!!
看似人人喜愛的兩個字,實際上範圍跟方法多到爆炸....,
優惠券、折扣碼、任選xxx系列,各種奇奇怪怪的折扣方式,
因此這邊我們只談比較單純的整筆訂單類型的優惠,
全館免運、全館折扣等等。

一樣說明一下情境,有兩個全館類型的折扣活動,
分別為全館滿2000免運以及全館滿1500打9折兩種,
如果有金額有超過就算符合,接著我們看一下資料結構

//優惠項目
Schema::create('discount', function (Blueprint $table) {
        $table->string('id', 30)->comment('優惠id');
        $table->string('name', 100)->comment('優惠名稱');
        $table->string('type', 30)->comment('折扣類型');
        $table->integer('target_price'); //達成目標金額
        $table->integer('discount_percent')->default(100)->comment('全館折扣百分比');
        $table->dateTime('start_at')->comment('開始時間');
        $table->dateTime('end')->comment('結束時間');
        $table->primary(['id']);
});

非常陽春的結構,但不影響我們跑流程,
在取得使用者購物車的時候,抓出符合時間的全館優惠,
並且逐一比對購物車金額判斷是否達成條件,

$discount_data = [];
foreach($discount as $item){ //$discount為符合條件的優惠資料
  //判斷金額是否達標
  if($cart->amount >= $item->target_price){
    $discount_arr[] = [
       'item' => $item,
       'discount_price' => ceil($cart->amount * $item->discount_percent / 100) //預算要折扣的金額
    ];
  }
}
$cart->discount_data = $discount_data;

最後把達成條件的優惠塞入購物車裡面,這樣就可以顯示出目前符合哪些條件,
並且透過頁面顯示預算好的折扣費用。

其中有幾點跟大家特別說明一下,
為什麼要透過後端直接計算要顯示的折扣金額,
主要是跨裝置就不用寫多套算法,也避免前後端算法不同步的錯誤,
當然這部份還是要看網站架構決定,包含數據讀取的優化,以及網站使用速度體感,
還有更多優惠類型一樣不屬於我們要講的部份了(水太深...)。


終於寫完了...
寫到後面感覺優惠要寫真的不是一兩篇可以寫完的,牽扯到太多架構,
最後決定用比較簡單的案例來講,希望大家能喜歡,
以上就是今天的主要內容。


上一篇
Day16 購物車 -- 異動通知
下一篇
Day18 訂單 -- 優惠項目
系列文
掌握訂單與線上金流的剪不斷理還亂30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言