Day17 购物车 -- 进阶应用

接着在讲一个也是很常用到的功能,优惠!!!
看似人人喜爱的两个字,实际上范围跟方法多到爆炸....,
优惠券、折扣码、任选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;

最後把达成条件的优惠塞入购物车里面,这样就可以显示出目前符合哪些条件,
并且透过页面显示预算好的折扣费用。

其中有几点跟大家特别说明一下,
为什麽要透过後端直接计算要显示的折扣金额,
主要是跨装置就不用写多套算法,也避免前後端算法不同步的错误,
当然这部份还是要看网站架构决定,包含数据读取的优化,以及网站使用速度体感,
还有更多优惠类型一样不属於我们要讲的部份了(水太深...)。


终於写完了...
写到後面感觉优惠要写真的不是一两篇可以写完的,牵扯到太多架构,
最後决定用比较简单的案例来讲,希望大家能喜欢,
以上就是今天的主要内容。


<<:  [Day 9] Vue的模板语法(Template Syntax)---插值(2)

>>:  【9】各种优化器(Optimizer) 大车拼实验

前言与自我回顾

欢迎大家来看我的文章,这次我挑战的主题是 Android 架构,就如同我简介中说的,关於架构方面的文...

Day05 - 让轮子依随机速度转动并渐慢停下来

今天更新了轮子让玩家点击页面时轮子会转动,而转速利用 Math.log(t) 达到先快後慢的渐慢效果...

[JMeter]JMeter安装与环境设定

Jmeter是一套由Apache开发的压力测试工具,除了进行压力测试以外, 它还能在测试完成後,产出...

予焦啦!Golang 执行绪与作业系统执行绪

本节是以 Golang 上游 6a79f358069195e1cddb821e81fab956d9...

[DSA] Overview: Complexity Analysis

Data Structure How to manipulate data? Data struc...