flowon failureon cancel出荷 v1examples/order/temporal/order.ja.flow · dandori doc
倉庫のシステムにある注文について、入金を催促し、出荷させ、配達の知らせを待つ。注文の状態は倉庫のシステムが持ち、その移り方は rulec の規則「注文の状態」に従う。Temporal 向けの版:倉庫の呼び出しは dandori が生成するアクティビティで、お知らせは自分で書くアクティビティ。配達のことは、運送会社のシステムが注文の ID を宛先にして知らせる(event)。お店が途中で注文を取り消すと、倉庫でも取り消す(on cancel)。催促のループは、履歴が長くなると新しい実行に引き継ぐ
flowon failureon cancel| 行 | 呼び出し | 呼ぶもの | リトライ | タイムアウト | 失敗したとき | 呼び出しのあとの案件 |
|---|---|---|---|---|---|---|
| 60 | 受注 ← 注文を見る(…) | GET https://warehouse.example.com/v1/orders/{id}・observes・idempotent | 1 秒おきに 3 回(混雑) | — | 混雑・timeout・failure → on failure | 受注: 受付・入金済・出荷済・配達済・取消 |
| 64 | 催促の控え = 知らせる(…) | 自分で書くタスク・key | 5 秒おきに 2 回(failure・timeout) | — | 宛先なし → 65 行目timeout・failure → on failure | — |
| 67 | 受注 ← 注文を見る(…) | GET https://warehouse.example.com/v1/orders/{id}・observes・idempotent | 1 秒おきに 3 回(混雑) | — | 混雑・timeout・failure → on failure | 受注: 受付・入金済・取消 |
| 71 | 受注 ← 取消を頼む(…) | POST https://warehouse.example.com/v1/orders/{id}/cancellations・sends 取消依頼・key | — | — | 拒否された → 72 行目timeout・failure → on failure | 受注: 取消 |
| 77 | 判定 = 急ぎ(…) | 規則 出荷の急ぎ.rule | 1 秒後と 2 秒後の 2 回(failure) | — | timeout・failure → on failure | — |
| 78 | 受注 ← 出荷を頼む(…) | POST https://warehouse.example.com/v1/orders/{id}/shipments・sends 出荷・key | — | — | 拒否された → 79 行目timeout・failure → on failure | 受注: 出荷済 |
| 81 | 出荷の控え = 知らせる(…) | 自分で書くタスク・key | 5 秒おきに 2 回(failure・timeout) | — | 宛先なし・timeout・failure → on failure | — |
| 83 | 受注 ← 配達の知らせ() | event・observes | — | 7 日 | timeout → 84 行目failure → on failure | 受注: 出荷済・配達済 |
| 97 | 受注 ← 取消を頼む(…) | POST https://warehouse.example.com/v1/orders/{id}/cancellations・sends 取消依頼・key | — | — | 拒否された → 98 行目timeout・failure → 99 行目 | 受注: 取消 |
| 行 | 終わり方 | 受注 |
|---|---|---|
| 65 | fail 連絡先なし leaving 受注 | そのまま引き渡す: 受付・入金済・取消 |
| 73 | fail 未入金 "三日たっても入金がありませんでした" | 取消 |
| 74 | fail 取消済み "取り消された注文です" | 取消 |
| 75 | fail 既に出荷 "もう出荷されています" leaving 受注 | そのまま引き渡す: 出荷済・配達済 |
| 79 | fail 取消済み "出荷の前に取り消されました" | 取消 |
| 84 | fail 配達の遅れ "七日たっても配達の知らせがありません" leaving 受注 | そのまま引き渡す: 出荷済・配達済 |
| 86 | succeed 便 = 判定.便 | 配達済 |
| 87 | fail 配達の遅れ "配達の知らせのあとも出荷済のままです" leaving 受注 | そのまま引き渡す: 出荷済・配達済 |
| 90 | fail 中断 "途中で止まりました。注文は倉庫のシステムにそのまま残ります" leaving 受注 | そのまま引き渡す: 始まっていないか、受付・入金済・出荷済・配達済・取消 |
| 98 | fail 出荷後の取消 "倉庫が注文 {受注.id} の取消を拒否しました。出荷されたのかもしれません" leaving 受注 | そのまま引き渡す: 出荷済・配達済・取消 |
| 99 | fail 取消の失敗 "倉庫で注文 {受注.id} を取り消せませんでした" leaving 受注 | そのまま引き渡す: 受付・入金済・出荷済・配達済・取消 |
| 100 | fail 出荷後の取消 "注文 {受注.id} はもう出荷されています" leaving 受注 | そのまま引き渡す: 出荷済・配達済 |
| 100 | on cancel が最後まで走り、ワークフローはキャンセルで終わる | 始まっていないか、取消 |
ステップを選ぶと、そこについて検査で分かったことが出ます。左のシナリオを選ぶと、その実行が通るところが光ります。ステップの横の数は、その実行が通った回数です。
出荷 v1倉庫のシステムにある注文について、入金を催促し、出荷させ、配達の知らせを待つ。注文の状態は倉庫のシステムが持ち、その移り方は rulec の規則「注文の状態」に従う。Temporal 向けの版:倉庫の呼び出しは dandori が生成するアクティビティで、お知らせは自分で書くアクティビティ。配達のことは、運送会社のシステムが注文の ID を宛先にして知らせる(event)。お店が途中で注文を取り消すと、倉庫でも取り消す(on cancel)。催促のループは、履歴が長くなると新しい実行に引き継ぐ
注文ID: string便: 急ぎ.便examples/order/temporal/order.ja.flow受注 ← 注文を見る(…) 60 行目 60 受注 <- 注文を見る(id: 注文ID, expand: "items")
受注: 始まっていないGET https://warehouse.example.com/v1/orders/{id}・observes・idempotent混雑・timeout・failure → on failure受注: 受付・入金済・出荷済・配達済・取消22 task 注文を見る(id: string, expand: string) -> 注文 23 http GET "https://warehouse.example.com/v1/orders/{id}" 24 observes 25 idempotent 26 errors 混雑 = 429 27 retry 3 times every 1 second on 混雑
match 受注.状態 62 行目62 match 受注.状態 63 受付 => 68 入金済, 出荷済, 配達済, 取消 => break
受注: 受付・入金済・出荷済・配達済・取消催促の控え = 知らせる(…) 64 行目64 let 催促の控え = 知らせる(注文ID: 受注.id, 本文: "お支払いをお待ちしています") 65 on 宛先なし => fail 連絡先なし leaving 受注
受注: 受付key宛先なし → 65 行目timeout・failure → on failure43 # お店の通知サービス。自分で書くコードから呼ぶ。 44 task 知らせる(注文ID: string, 本文: string) -> 受付 45 errors 宛先なし 46 key 47 retry 2 times every 5 seconds
fail 連絡先なし 65 行目 65 on 宛先なし => fail 連絡先なし leaving 受注
受注: 受付受注: そのまま引き渡す: 受付・入金済・取消wait 1 day 66 行目 66 wait 1 day
受注: 受付受注 ← 注文を見る(…) 67 行目 67 受注 <- 注文を見る(id: 受注.id, expand: "items")
受注: 受付GET https://warehouse.example.com/v1/orders/{id}・observes・idempotent混雑・timeout・failure → on failure受注: 受付・入金済・取消22 task 注文を見る(id: string, expand: string) -> 注文 23 http GET "https://warehouse.example.com/v1/orders/{id}" 24 observes 25 idempotent 26 errors 混雑 = 429 27 retry 3 times every 1 second on 混雑
break 68 行目 68 入金済, 出荷済, 配達済, 取消 => break
受注: 入金済・出荷済・配達済・取消match 受注.状態 69 行目69 match 受注.状態 70 受付 => 74 取消 => fail 取消済み "取り消された注文です" 75 出荷済, 配達済 => fail 既に出荷 "もう出荷されています" leaving 受注 76 入金済 => pass
受注: 受付・入金済・出荷済・配達済・取消受注 ← 取消を頼む(…) 71 行目71 受注 <- 取消を頼む(id: 受注.id) 72 on 拒否された => pass
受注: 受付POST https://warehouse.example.com/v1/orders/{id}/cancellations・sends 取消依頼・key拒否された → 72 行目timeout・failure → on failure受注: 取消36 task 取消を頼む(id: string) -> 注文 37 http POST "https://warehouse.example.com/v1/orders/{id}/cancellations" 38 sends 取消依頼 39 errors 拒否された = 409 40 refused as 拒否された 41 key
fail 未入金 73 行目 73 fail 未入金 "三日たっても入金がありませんでした"
受注: 取消受注: 取消fail 取消済み 74 行目 74 取消 => fail 取消済み "取り消された注文です"
受注: 取消受注: 取消fail 既に出荷 75 行目 75 出荷済, 配達済 => fail 既に出荷 "もう出荷されています" leaving 受注
受注: 出荷済・配達済受注: そのまま引き渡す: 出荷済・配達済判定 = 急ぎ(…) 77 行目 77 let 判定 = 急ぎ(会員: 受注.会員, 金額: 受注.金額)
受注: 入金済出荷の急ぎ.ruletimeout・failure → on failure 5 use rule 急ぎ from "../rules/出荷の急ぎ.rule"
受注 ← 出荷を頼む(…) 78 行目78 受注 <- 出荷を頼む(id: 受注.id, 便: 判定.便) 79 on 拒否された => fail 取消済み "出荷の前に取り消されました"
受注: 入金済POST https://warehouse.example.com/v1/orders/{id}/shipments・sends 出荷・key拒否された → 79 行目timeout・failure → on failure受注: 出荷済29 task 出荷を頼む(id: string, 便: 急ぎ.便) -> 注文 30 http POST "https://warehouse.example.com/v1/orders/{id}/shipments" 31 sends 出荷 32 errors 拒否された = 409 33 refused as 拒否された 34 key
fail 取消済み 79 行目 79 on 拒否された => fail 取消済み "出荷の前に取り消されました"
受注: 取消受注: 取消match 判定.急ぎ 80 行目80 match 判定.急ぎ 81 true => let 出荷の控え = 知らせる(注文ID: 受注.id, 本文: "翌日便で出荷しました") 82 false => pass
受注: 出荷済出荷の控え = 知らせる(…) 81 行目 81 true => let 出荷の控え = 知らせる(注文ID: 受注.id, 本文: "翌日便で出荷しました")
受注: 出荷済key宛先なし・timeout・failure → on failure43 # お店の通知サービス。自分で書くコードから呼ぶ。 44 task 知らせる(注文ID: string, 本文: string) -> 受付 45 errors 宛先なし 46 key 47 retry 2 times every 5 seconds
受注 ← 配達の知らせ() 83 行目83 受注 <- 配達の知らせ() 84 on timeout => fail 配達の遅れ "七日たっても配達の知らせがありません" leaving 受注
受注: 出荷済event・observestimeout → 84 行目failure → on failure受注: 出荷済・配達済49 # 運送会社のシステムは、配達を報告したとき、倉庫にあるそのときの注文を、注文のワークフローに送る。 50 task 配達の知らせ() -> 注文 51 event 52 observes 53 timeout 7 days
fail 配達の遅れ 84 行目 84 on timeout => fail 配達の遅れ "七日たっても配達の知らせがありません" leaving 受注
受注: 出荷済受注: そのまま引き渡す: 出荷済・配達済match 受注.状態 85 行目85 match 受注.状態 86 配達済 => succeed 便 = 判定.便 87 出荷済 => fail 配達の遅れ "配達の知らせのあとも出荷済のままです" leaving 受注
受注: 出荷済・配達済succeed 便 = 判定.便 86 行目 86 配達済 => succeed 便 = 判定.便
受注: 配達済受注: 配達済fail 配達の遅れ 87 行目 87 出荷済 => fail 配達の遅れ "配達の知らせのあとも出荷済のままです" leaving 受注
受注: 出荷済受注: そのまま引き渡す: 出荷済・配達済終わり(成功)flow が最後まで走り、ワークフローは成功します。
on failure 89 行目呼び出しが失敗し、そのエラーをその場で処理しないときに走ります。最後まで走ると、ワークフローはそのエラーで失敗します。60・64・67・71・77・78・81・83 行目の呼び出しから、ここに来ます。
fail 中断 90 行目 90 fail 中断 "途中で止まりました。注文は倉庫のシステムにそのまま残ります" leaving 受注
受注: 始まっていないか、受付・入金済・出荷済・取消受注: そのまま引き渡す: 始まっていないか、受付・入金済・出荷済・配達済・取消同じエラーで失敗するon failure が最後まで走り、ワークフローは元のエラーで失敗します。
on cancel 93 行目ワークフローがキャンセルされると、そのとき待っている呼び出しや wait から、ここに来ます。最後まで走ると、ワークフローはキャンセルで終わります。
match 受注.状態 94 行目94 match 受注.状態 95 none => pass 96 受付, 入金済 => 100 出荷済 => fail 出荷後の取消 "注文 {受注.id} はもう出荷されています" leaving 受注
受注: 始まっていないか、受付・入金済・出荷済・取消受注 ← 取消を頼む(…) 97 行目97 受注 <- 取消を頼む(id: 受注.id) 98 on 拒否された => fail 出荷後の取消 "倉庫が注文 {受注.id} の取消を拒否しました。出荷されたのかもしれません" leaving 受注 99 on failure => fail 取消の失敗 "倉庫で注文 {受注.id} を取り消せませんでした" leaving 受注
受注: 受付・入金済・出荷済・取消POST https://warehouse.example.com/v1/orders/{id}/cancellations・sends 取消依頼・key拒否された → 98 行目timeout・failure → 99 行目受注: 取消36 task 取消を頼む(id: string) -> 注文 37 http POST "https://warehouse.example.com/v1/orders/{id}/cancellations" 38 sends 取消依頼 39 errors 拒否された = 409 40 refused as 拒否された 41 key
fail 出荷後の取消 98 行目 98 on 拒否された => fail 出荷後の取消 "倉庫が注文 {受注.id} の取消を拒否しました。出荷されたのかもしれません" leaving 受注
受注: 出荷済・配達済・取消受注: そのまま引き渡す: 出荷済・配達済・取消fail 取消の失敗 99 行目 99 on failure => fail 取消の失敗 "倉庫で注文 {受注.id} を取り消せませんでした" leaving 受注
受注: 受付・入金済・出荷済・配達済・取消受注: そのまま引き渡す: 受付・入金済・出荷済・配達済・取消fail 出荷後の取消 100 行目 100 出荷済 => fail 出荷後の取消 "注文 {受注.id} はもう出荷されています" leaving 受注
受注: 出荷済受注: そのまま引き渡す: 出荷済・配達済キャンセルで終わるon cancel が最後まで走り、ワークフローはキャンセルで終わります。
受注: 始まっていないか、取消repeat at most 3 times 61 行目 61 repeat at most 3 times
受注: 受付・入金済・出荷済・配達済・取消受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) 宛先なし → on 宛先なしfail 連絡先なし受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) ok: 出荷済match 判定.急ぎ → true出荷の控え = 知らせる(…) ok受注 ← 配達の知らせ() ok: 出荷済match 受注.状態 → 出荷済fail 配達の遅れ受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) failure failure failure → ここでは処理しないon failurefail 中断受注 ← 注文を見る(…) ok: 取消repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 取消fail 取消済み受注 ← 注文を見る(…) ok: 出荷済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 出荷済, 配達済fail 既に出荷受注 ← 注文を見る(…) ok: 配達済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 出荷済, 配達済fail 既に出荷受注 ← 注文を見る(…) failure → ここでは処理しないon failurefail 中断受注 ← 注文を見る(…) 混雑 ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) failure failure failure → ここでは処理しないon failurefail 中断受注 ← 注文を見る(…) ok受注 ← 注文を見る(…) ok: 受付受注 ← 注文を見る(…) cancelon cancelmatch 受注.状態 → none受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) failure okwait 1 day受注 ← 注文を見る(…) ok: 入金済match 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) ok受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) cancelon cancelmatch 受注.状態 → 受付, 入金済受注 ← 取消を頼む(…) ok: 取消受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) ok: 入金済match 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) cancelon cancelmatch 受注.状態 → 受付, 入金済受注 ← 取消を頼む(…) 拒否された → on 拒否されたfail 出荷後の取消受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) ok: 取消match 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 取消fail 取消済み受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) failure → ここでは処理しないon failurefail 中断受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) 混雑 ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) 混雑 ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) 混雑 ok: 受付match 受注.状態 → 受付受注 ← 取消を頼む(…) ok: 取消fail 未入金受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) ok: 出荷済受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) ok受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) ok: 受付受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) cancelon cancelmatch 受注.状態 → 受付, 入金済受注 ← 取消を頼む(…) 拒否された → on 拒否されたfail 出荷後の取消受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) ok: 受付match 受注.状態 → 受付受注 ← 取消を頼む(…) 拒否された → on 拒否されたfail 未入金受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) failure okwait 1 day受注 ← 注文を見る(…) ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) failure okwait 1 day受注 ← 注文を見る(…) ok: 受付match 受注.状態 → 受付受注 ← 取消を頼む(…) 拒否された → on 拒否されたfail 未入金受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) cancelon cancelmatch 受注.状態 → 受付, 入金済受注 ← 取消を頼む(…) failure → on failurefail 取消の失敗受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) cancelon cancelmatch 受注.状態 → 受付, 入金済受注 ← 取消を頼む(…) ok: 受付受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) 拒否された → on 拒否されたfail 取消済み受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) 拒否された → on 拒否されたfail 取消済み受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) failure → ここでは処理しないon failurefail 中断受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) ok: 受付受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) ok受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) ok: 出荷済受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) cancelon cancelmatch 受注.状態 → 受付, 入金済受注 ← 取消を頼む(…) ok受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) ok: 出荷済match 判定.急ぎ → false受注 ← 配達の知らせ() ok: 配達済match 受注.状態 → 配達済succeed 便 = 判定.便受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) ok: 出荷済match 判定.急ぎ → true出荷の控え = 知らせる(…) failure failure failure → ここでは処理しないon failurefail 中断受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) ok: 出荷済match 判定.急ぎ → true出荷の控え = 知らせる(…) failure ok受注 ← 配達の知らせ() timeout → on timeoutfail 配達の遅れ受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) ok: 出荷済match 判定.急ぎ → true出荷の控え = 知らせる(…) ok受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) ok: 出荷済match 判定.急ぎ → true出荷の控え = 知らせる(…) cancelon cancelmatch 受注.状態 → 出荷済fail 出荷後の取消受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) ok: 出荷済match 判定.急ぎ → true出荷の控え = 知らせる(…) ok受注 ← 配達の知らせ() failure → ここでは処理しないon failurefail 中断受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) ok: 出荷済match 判定.急ぎ → true出荷の控え = 知らせる(…) ok受注 ← 配達の知らせ() ok: 受付受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) ok: 出荷済match 判定.急ぎ → true出荷の控え = 知らせる(…) ok受注 ← 配達の知らせ() ok受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) ok: 出荷済match 判定.急ぎ → true出荷の控え = 知らせる(…) ok受注 ← 配達の知らせ() ok: 出荷済受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) ok受注 ← 出荷を頼む(…) ok: 出荷済match 判定.急ぎ → true出荷の控え = 知らせる(…) ok受注 ← 配達の知らせ() cancelon cancelmatch 受注.状態 → 出荷済fail 出荷後の取消受注 ← 注文を見る(…) ok: 入金済repeat at most 3 timesmatch 受注.状態 → 入金済, 出荷済, 配達済, 取消breakmatch 受注.状態 → 入金済判定 = 急ぎ(…) cancelon cancelmatch 受注.状態 → 受付, 入金済受注 ← 取消を頼む(…) ok: 取消受注 ← 注文を見る(…) 混雑 ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) failure okwait 1 day受注 ← 注文を見る(…) 混雑 ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) failure okwait 1 day受注 ← 注文を見る(…) 混雑 ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) failure okwait 1 day受注 ← 注文を見る(…) 混雑 ok: 受付match 受注.状態 → 受付受注 ← 取消を頼む(…) failure → ここでは処理しないon failurefail 中断受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) failure okwait 1 day受注 ← 注文を見る(…) ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) failure okwait 1 day受注 ← 注文を見る(…) ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) failure okwait 1 day受注 ← 注文を見る(…) ok: 受付match 受注.状態 → 受付受注 ← 取消を頼む(…) ok: 受付受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) failure okwait 1 day受注 ← 注文を見る(…) 混雑 ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) failure okwait 1 day受注 ← 注文を見る(…) 混雑 ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) failure okwait 1 day受注 ← 注文を見る(…) 混雑 ok: 受付match 受注.状態 → 受付受注 ← 取消を頼む(…) ok受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) 混雑 ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) failure okwait 1 day受注 ← 注文を見る(…) 混雑 ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) failure okwait 1 day受注 ← 注文を見る(…) 混雑 ok: 受付match 受注.状態 → 受付受注 ← 取消を頼む(…) ok: 取消受注 ← 注文を見る(…) ok: 受付repeat at most 3 timesmatch 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) 混雑 ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) ok: 受付match 受注.状態 → 受付催促の控え = 知らせる(…) okwait 1 day受注 ← 注文を見る(…) ok: 受付match 受注.状態 → 受付受注 ← 取消を頼む(…) cancelon cancelmatch 受注.状態 → 受付, 入金済受注 ← 取消を頼む(…) ok: 受付