iT邦幫忙

2021 iThome 鐵人賽

DAY 26
0

昨天已經有說明為什麼要有重新付款的功能,
以及大致作法,今天要介紹的是另外一種作法的,
兩種誰好誰壞,全看個人喜好,
這次我們會動到原先的結構,簡單看一下改動

Schema::create('order', function (Blueprint $table) {
    $table->string('id', 30)->comment('訂單id');
    $table->string('name', 30)->comment('購買人姓名');
    $table->integer('amount')->default(0)->comment('總金額');
    $table->string('payment_id, 30')->nullable()->comment('金流單id');
    $table->string('status', 20)->default(‘pending’)->comment('訂單狀態');
    $table->primary(['id']);
});

Schema::create('payment', function (Blueprint $table) {
    $table->string('id', 30)->comment('金流單id');
    $table->string('type', 20)->comment('付款類型'); //credit, atm
    $table->string('status', 30)->default('unpaid')->comment('付款狀態');
    $table->dateTime('expired_at')->nullable()->comment('付款截止時間');
    $table->dateTime('paid_at')->nullable()->comment('付款時間');
    $table->text('info')->nullable(); // 付款資訊物件(ATM帳號/超商代碼/超商條碼)
    $table->float('amount')->default(0); // 金額
    $table->float('fee')->default(0); // 手續費
    $table->primary(['id']);
});

對照 --Day21 訂單金流 -- 獨立資料,
可以看到我們在order table保留的payment_id,以及將payment.id定義為金流單id,
而不是原本的同訂單id,流程也稍微變動,
https://ithelp.ithome.com.tw/upload/images/20211002/20118647jcX0bo22s1.png

不一樣的是我們這次將一次金流單紀錄成一筆payment table的資料,
而不是透過更新payment,payment_id來區別,
並且透過order.payment_id來判斷目前是對應哪筆金流資料,
跟之前的區別在於這次我們紀錄整個金流資訊,包含付款方式付款期限等等,
之前的作法如果重新付款後就看不到以前的付款資料、付款方式、重新付款幾次之類的資料,
簡單來說就是一個訂單只可以對應一個payment table的資料,
但可以用更新的或者新建立一筆的差別,
至於這些資料要幹麻呢?

就自由發揮拉,客製化推薦或者黑名單等等的應用都可以,
反正這時代有數據就是王道!


上一篇
Day25 訂單 -- 重新付款1
下一篇
Day27 訂單 -- 分期付款
系列文
掌握訂單與線上金流的剪不斷理還亂30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言