iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0

由於三個發票類型情境,可以再拆分成兩組,

(1) 傳統發票、紙本電子發票

(2) 載具

通常發票應該可以一次存入多張,所以這邊將傳統發票、紙本電子發票歸類一組;載具每個人僅會有一組,所以不需要設計多個傳入的方法。此外,載具驗證碼需要加密,這裡需要特別實作。

async def perform_save_data(save_data):
    data_models = []
    if save_data.tag in ["invoice_paper", "invoice_trad"]:
        invoice_data = save_data.invoice
        user_data = save_data.user
        for invoice in invoice_data:
            invoice["gov"] = {
                "status": "審查中",
                "gov_status": "等待查詢中",
                "error_msg": "",
            }
            data_model = Data(
                tag=save_data.tag,
                created_timestamp=datetime.now(tz),
                updated_timestamp=datetime.now(tz),
                data={**user_data, **invoice}
            )
            data_models.append(data_model)

    elif save_data.tag == "carrier":
        carrier_data = save_data.carrier
        if 'card_encrypt' in carrier_data:
            encrypted_card = encrypt_with_salt(carrier_data['card_encrypt'])
            carrier_data['card_encrypt'] = encrypted_card
        carrier_data["gov"] = {
                "status": "審查中",
                "gov_status": "等待查詢中",
                "error_msg": "",
        }
        data_model = Data(
            tag=save_data.tag,
            created_timestamp=datetime.now(tz),
            updated_timestamp=datetime.now(tz),
            data={**carrier_data},
        )
        data_models.append(data_model)


    result = await Data.insert_many(data_models)
    inserted_ids = result.inserted_ids

    for idx, data_model in enumerate(data_models):
        setattr(data_model, 'id', str(inserted_ids[idx]))

    return data_models

最後可以嘗試打 API 看看是否成功
https://ithelp.ithome.com.tw/upload/images/20230927/20114380H0XmratljK.png

到目前為止,已介紹如何將發票上傳到 MongoDB
接下來更重要的是,要如何去定期更新發票資料呢?
後續將介紹 Airflow 架設以及如何寫 Dag!


上一篇
Day 20:Swagger UI 引入範例
下一篇
Day 22:如何用 docker 架設 Airflow - 1
系列文
透過 python 建立發票系統 - 自己的發票自己查30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言