iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0

假設要設計雲端載具系統,基本上會有會員資料、發票資料去紀錄資料。但其中的發票資料,我認為至少要用三張表格去儲存,分別為手動輸入的發票、財政部查詢的正確發票及購買細項。而會員資料假設我們已經創建好名稱為 user。

  1. 手動發票:

表格名稱:invoice_manual

Private key Foreign key Field Type Description Source Required Default Ref ENUM Error Msg
invoicesManual_id string 系統產手動發票 Id
userId string userId 前端 user
save_type string 存入方式 前端 Barcode、QRcode
invNum string 發票號碼 前端
invDate string 發票日期 前端
random_number string 隨機碼 前端
encrypt string QRcode 驗證 前端
sellerId string 賣家統一編號 前端
status string 狀態碼 後端改 審查中 審查中/未通過/已通過
  1. 正確發票(包含紙本發票、載具發票)

名稱:invoice

Private key Foreign key Field Type Description Source Required Default Ref ENUM Error Msg
invoice_id string 系統產發票 Id
userId string userId 原本就有 user
save_type string 存入方式 原本就有 Barcode、QRCode、Carrier
random_number string 隨機碼 原本就有 Barcode、QRCode 需要
invNum string 發票號碼 財政部
cardNo string 載具條碼 財政部 有可能因為是跨境會變成 email
cardType string 卡別 財政部 5G0001:跨境、3J0002:手機、1K0001:悠遊卡、2G0001:iCash
sellerName string 賣家名稱 財政部
invStatus string 發票狀態 財政部 查詢中/已確認
invDonatable boolean 可否捐贈
amount float 購買總金額 財政部
invPeriod string 發票期別 財政部
donateMark boolean 是否捐贈 財政部
invDate string 發票日期 財政部
sellerBan string 賣家統一編號 財政部
sellerAddress string 賣家地址 財政部
invoiceTime string 發票時間 財政部
buyerBan string 買家統一編號 財政部
currency string 幣別 財政部
  1. 購買細項

名稱:item

Private key Foreign key Field Type Description Required Default Ref ENUM Error Msg
Item_id string 系統產細項 Id
invoice_id string 發票 Id invoice
description string 細項名稱
quantity float 數量
unitPrice float 單價
amount float 小計
ItemId invoiceId description quantity unitPrice amount
AAAAAA 1 Subscription 1 390 390
BBBBBB 2 義美無加糖厚濃高纖黑豆奶 2 32 64
CCCCC 2 低溫促 1 0 -12

大概需要設計包含這幾項表格,但我認為使用關聯式設計發票資料有點複雜,如果要列出所有發票細項,要再去查詢另外一張表格。

用關聯式資料庫的時候,不但要先定義好所有的資料格式,並且在存入的時候也要事先定義好所有資料庫欄位,如下程式碼。

# 寫入 Invoice
new_invoice = Invoice(
    fb_id=inv.fb_id,
    invoice_manual_id=inv.invoiceManual_id,
    save_type=inv.save_type,
    invNum=response["invNum"],
    sellName=response["sellerName"],
    invStatus=response["invStatus"],
    invDonatable=False,
    amount=response["amount"],
    invPeriod=response["invPeriod"],
    donateMark=False,
    invDate=response["invDate"],
    sellerBan=response["sellerBan"],
    sellerAddress=response["sellerAddress"],
    invoiceTime=response["invoiceTime"],
    buyerBan=response["buyerBan"],
    currency=response["currency"],
    random_number=inv.random_number,
    status="審查中",
    gov_status="排程執行成功",
    error_msg="",
)
session.add(new_invoice)
session.commit()

往後要改動資料庫欄位需要亦要做資料庫遷移,我認為以小型專案的快速開發而言,可以先考慮用非關聯式資料庫比較好寫,明天將會說明如何改用 MongoDB 設計。


上一篇
Day 12:如何用 docker 架設 FastAPI
下一篇
Day 14:用 MongoDB 設計 - 紙本電子發票
系列文
透過 python 建立發票系統 - 自己的發票自己查30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言