Day26 订单 -- 重新付款2

昨天已经有说明为什麽要有重新付款的功能,
以及大致作法,今天要介绍的是另外一种作法的,
两种谁好谁坏,全看个人喜好,
这次我们会动到原先的结构,简单看一下改动

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的资料,
但可以用更新的或者新建立一笔的差别,
至於这些资料要干麻呢?

就自由发挥拉,客制化推荐或者黑名单等等的应用都可以,
反正这时代有数据就是王道!


<<:  Day24 生产环境需要注意的部分

>>:  可爱的小企鹅

[Day1] 资讯安全是什麽?

第一天,想笔记下我对资讯安全的理解。 资讯安全怎麽来的? 我印象里的历史战争剧中,国家或两个阵营打仗...

Unity自主学习(九):创建新专案

今天来从"Unity Hub"开起第一个专案,并熟悉Unity的操作介面 首先打...

Day 15 - 用 useReducer 取代 useState !?

如果有错误,欢迎留言指教~ Q_Q 上篇提到,如何取得更新後的 state useReducer ...

Domain layer testing

今天会为上一篇所写的两个 use case 加上 unit test。 GetLinesAndSta...

Day 30--Retrofit 登入练习

前置作业 build.gradle dependencies记得加入使用retrofit2 impl...