出荷 v1

examples/order/temporal/order.ja.flow · dandori doc

倉庫のシステムにある注文について、入金を催促し、出荷させ、配達の知らせを待つ。注文の状態は倉庫のシステムが持ち、その移り方は rulec の規則「注文の状態」に従う。Temporal 向けの版:倉庫の呼び出しは dandori が生成するアクティビティで、お知らせは自分で書くアクティビティ。配達のことは、運送会社のシステムが注文の ID を宛先にして知らせる(event)。お店が途中で注文を取り消すと、倉庫でも取り消す(on cancel)。催促のループは、履歴が長くなると新しい実行に引き継ぐ

flow
repeat at most 3 times受付on 宛先なし入金済, 出荷済, 配達済, 取消3 回終えたら受付on 拒否された取消出荷済, 配達済入金済on 拒否されたtruefalseon timeout配達済出荷済出荷 v160 受注 ← 注文を見る(…)GET https://warehouse.example.com/v1/orders/{id}observes · retry 3 times every 1 second on 混雑混雑, timeout, failure → on failure!62 match 受注.状態64 催促の控え = 知らせる(…)自分で書くタスクretry 2 times every 5 seconds宛先なし → 65 行目; timeout, failure → on failure!65 fail 連絡先なしleaving 受注66 wait 1 day67 受注 ← 注文を見る(…)GET https://warehouse.example.com/v1/orders/{id}observes · retry 3 times every 1 second on 混雑混雑, timeout, failure → on failure!68 break69 match 受注.状態71 受注 ← 取消を頼む(…)POST https://warehouse.example.com/v1/orders/{id}/cancellationssends 取消依頼拒否された → 72 行目; timeout, failure → on failure!73 fail 未入金"三日たっても入金がありませんでした"74 fail 取消済み"取り消された注文です"75 fail 既に出荷"もう出荷されています"leaving 受注77 判定 = 急ぎ(…)rule 出荷の急ぎ.ruletimeout, failure → on failure!78 受注 ← 出荷を頼む(…)POST https://warehouse.example.com/v1/orders/{id}/shipmentssends 出荷拒否された → 79 行目; timeout, failure → on failure!79 fail 取消済み"出荷の前に取り消されました"80 match 判定.急ぎ81 出荷の控え = 知らせる(…)自分で書くタスクretry 2 times every 5 seconds宛先なし, timeout, failure → on failure!83 受注 ← 配達の知らせ()eventobserves · timeout 7 daystimeout → 84 行目; failure → on failure!84 fail 配達の遅れ"七日たっても配達の知らせがありません"leaving 受注85 match 受注.状態86 succeed 便 = 判定.便87 fail 配達の遅れ"配達の知らせのあとも出荷済のままです"leaving 受注
on failure
89 on failure90 fail 中断"途中で止まりました。注文は倉庫のシステムにそのまま残ります"leaving 受注
on cancel
受付, 入金済on 拒否されたon failure出荷済none93 on cancel94 match 受注.状態97 受注 ← 取消を頼む(…)POST https://warehouse.example.com/v1/orders/{id}/cancellationssends 取消依頼98 fail 出荷後の取消"倉庫が注文 {受注.id} の取消を拒否しました。出荷されたのかもしれません"leaving 受注99 fail 取消の失敗"倉庫で注文 {受注.id} を取り消せませんでした"leaving 受注100 fail 出荷後の取消"注文 {受注.id} はもう出荷されています"leaving 受注キャンセルで終わる

呼び出し

行呼び出し呼ぶものリトライタイムアウト失敗したとき呼び出しのあとの案件
60受注 ← 注文を見る(…)GET https://warehouse.example.com/v1/orders/{id}・observes・idempotent1 秒おきに 3 回(混雑)—混雑・timeout・failure → on failure受注: 受付・入金済・出荷済・配達済・取消
64催促の控え = 知らせる(…)自分で書くタスク・key5 秒おきに 2 回(failure・timeout)—宛先なし → 65 行目
timeout・failure → on failure
—
67受注 ← 注文を見る(…)GET https://warehouse.example.com/v1/orders/{id}・observes・idempotent1 秒おきに 3 回(混雑)—混雑・timeout・failure → on failure受注: 受付・入金済・取消
71受注 ← 取消を頼む(…)POST https://warehouse.example.com/v1/orders/{id}/cancellations・sends 取消依頼・key——拒否された → 72 行目
timeout・failure → on failure
受注: 取消
77判定 = 急ぎ(…)規則 出荷の急ぎ.rule1 秒後と 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出荷の控え = 知らせる(…)自分で書くタスク・key5 秒おきに 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 行目
受注: 取消

終わり方

行終わり方受注
65fail 連絡先なし leaving 受注そのまま引き渡す: 受付・入金済・取消
73fail 未入金 "三日たっても入金がありませんでした"取消
74fail 取消済み "取り消された注文です"取消
75fail 既に出荷 "もう出荷されています" leaving 受注そのまま引き渡す: 出荷済・配達済
79fail 取消済み "出荷の前に取り消されました"取消
84fail 配達の遅れ "七日たっても配達の知らせがありません" leaving 受注そのまま引き渡す: 出荷済・配達済
86succeed 便 = 判定.便配達済
87fail 配達の遅れ "配達の知らせのあとも出荷済のままです" leaving 受注そのまま引き渡す: 出荷済・配達済
90fail 中断 "途中で止まりました。注文は倉庫のシステムにそのまま残ります" leaving 受注そのまま引き渡す: 始まっていないか、受付・入金済・出荷済・配達済・取消
98fail 出荷後の取消 "倉庫が注文 {受注.id} の取消を拒否しました。出荷されたのかもしれません" leaving 受注そのまま引き渡す: 出荷済・配達済・取消
99fail 取消の失敗 "倉庫で注文 {受注.id} を取り消せませんでした" leaving 受注そのまま引き渡す: 受付・入金済・出荷済・配達済・取消
100fail 出荷後の取消 "注文 {受注.id} はもう出荷されています" leaving 受注そのまま引き渡す: 出荷済・配達済
100on cancel が最後まで走り、ワークフローはキャンセルで終わる始まっていないか、取消