--- tags: NewPOS, mPOS, transaction --- # Transaction Purchase Process ```plantuml @startuml txprocess |前端| start :商品選購完成; if (列印機狀狀態) then (異常) :跳出異常提示 ; :停留至購物車頁 ; stop; else (正常) :選擇付款類型; :完成付款; |api| if (寫入交易資料) then (失敗) |前端| :回傳交易失敗訊息至前端 ; :停留至小計頁 ; stop; else (成功) |api| :API回傳發票格式給前端; |前端| :發送列印MQTT訊息; |DOCK| :DOCK接受訊息; :列印發票; :回傳列印訊息至前端; |前端| if (列印回傳訊息) then (成功) :結束交易; stop else(失敗/逾時) :跳出需人工檢查提示; :結束交易; stop endif endif @enduml ``` ## Flow chart ``` mermaid graph TD; 既有流程至選付款別-->各類付款別 各類付款別-->驗證成功 驗證成功-->完成付款 完成付款-->有接DOCK模式API 完成付款-->沒有接DOCK模式API 有接DOCK模式API-->寫入交易資料 沒有接DOCK模式API-->寫入交易資料 寫入交易資料-->寫入成功 寫入成功-->有接DOCK模式 寫入成功-->沒有接DOCK模式 沒有接DOCK模式-->列印發票-api 列印發票-api-->列印成功 列印發票-api-->列印失敗 有接DOCK模式-->API回傳發票格式給前端 API回傳發票格式給前端-->前端發列印訊息透過MQTT給DOCK 前端發列印訊息透過MQTT給DOCK-->列印發票-dock 列印發票-dock-->列印成功 列印發票-dock-->列印失敗 列印成功-->回傳訊息至前端 列印失敗-->回傳訊息至前端 回傳訊息至前端-->失敗/逾時 回傳訊息至前端-->成功 失敗/逾時-->人工檢查發票機狀態 成功-->結束交易 人工檢查發票機狀態-->印出發票 印出發票-->結束交易 人工檢查發票機狀態-->無印出發票需刷退 無印出發票需刷退-->結束交易 寫入交易資料-->寫入失敗 寫入失敗-->回傳交易失敗訊息至前端 回傳交易失敗訊息至前端-->前端停留在小計頁 ``` # Transaction Purchase Process ```plantuml @startuml txprocess |mPOS/POS| start :Confirm Purchase; if (Mode) then (Docked/Desktop) |mPOS/POS| :POST ./mPOS/transaction?flag=noprint\nor\nPOST ./mPOS/transaction\n data:{printerNo: null,...}; else (Portable) |mPOS/POS| :POST ./mPOS/transaction; endif |API| :process transaction; if (noprint flag\nor\nprinterNo == null) then (yes) :INSERT THD / TDL and commit; else (no) :INSERT THD / TDL; |API Receipt Printer Service| :Print Invoice/Receipt; |API| ':commit transaction; endif |mPOS/POS| if (Mode) then (Docked/Desktop) |mPOS/POS| :MQTT publish tk3c/dock/{uid}: flag=escpos.print; |DOCK Service| :Print Invoice / Receipt; else (Portable) endif |mPOS/POS| stop @enduml ```