---
# System prepended metadata

title: Transaction Purchase Process
tags: [' mPOS', ' transaction', NewPOS]

---

---
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

```