|
|
| (15 intermediate revisions by the same user not shown) |
| Line 1: |
Line 1: |
| See: https://graphviz.gitlab.io/_pages/pdf/dotguide.pdf | | See: https://graphviz.gitlab.io/_pages/pdf/dotguide.pdf |
| | |
| | = Test = |
| | <quickmmd name="main"> |
| | flowchart TD |
| | A --> B |
| | </quickmmd> |
| | |
| | = 認知負荷 = |
| | |
| | <quickmmd name="cognitive-load"> |
| | mindmap |
| | ((認知負荷)) |
| | ((熟能生巧<br>有效認知負荷<br>germane)) |
| | --> 數學解題突破盲腸 |
| | --> 游泳換氣成功了 |
| | --> 繞口令不吃螺絲 |
| | ((錯綜複雜<br>內在認知負荷<br>intrinsic)) |
| | --> 教材太難, 越級打怪 |
| | --> 基礎知識沒學好 |
| | ((莫名其妙<br>外在認知負荷<br>extraneous)) |
| | --> 教材太多雜訊 |
| | --> 光罰寫就寫不完 |
| | </quickmmd> |
| | |
| | = Colored Edge = |
| | |
| | <quickmmd name="colored-edge"> |
| | flowchart TD |
| | A1(["👩🏻💻 Human"]) |
| | A2(["🤖 Agent"]) |
| | |
| | B1("HTTP<br>(Fiber v3)") |
| | |
| | subgraph backend handlers |
| | B2("API handler") |
| | B3("MCP HTTP") |
| | B4("Streamable Handler") |
| | B5("SSE handler") |
| | B6("MCP Server") |
| | end |
| | |
| | subgraph backend services |
| | C1(Mermaid to SVG) |
| | C2(Mermaid to PNG) |
| | C3(XML Formatter) |
| | end |
| | |
| | subgraph frontend |
| | B7("Nuxt.js") |
| | end |
| | |
| | subgraph resources |
| | D1(Mermaid Container<br>yuzutech/kroki-mermaid) |
| | end |
| | |
| | %% human path |
| | A1 --> B1 |
| | B1 --> |the rest URI| B7 |
| | linkStyle 0,1 stroke:#0000ff,stroke-width:2px |
| | |
| | %% agent path |
| | A2 --> B1 |
| | B1 --> |/mcp or /sse| B3 |
| | linkStyle 2,3 stroke:#00aa00,stroke-width:2px |
| | |
| | %% api path |
| | B7 --> |axios| B1 |
| | B1 --> |/api| B2 |
| | linkStyle 4,5 stroke:#9900cc,stroke-width:2px |
| | |
| | B3 --> |/mcp| B4 |
| | B3 --> |/sse| B5 |
| | B4 & B5 --> B6 |
| | B6 --> C1 & C2 & C3 |
| | B2 --> D1 |
| | C1 & C2 --> D1 |
| | </quickmmd> |
|
| |
|
| = Dish = | | = Dish = |
| Line 12: |
Line 89: |
|
| |
|
| = MMD = | | = MMD = |
| | |
| <quickmmd name="testmmd"> | | <quickmmd name="testmmd"> |
| flowchart TD | | flowchart LR |
| A[(更新 MAINSYS_DB.md)]@{ shape: doc }
| | Root("規則動詞變化<br>(play)") |
| B[(`task mig-create -- xxx`<br>新增一組資料庫版本異動)]
| |
| C[(`assets/migrations/xxx.sql`<br>修訂資料庫異動檔 )]
| |
| D[(`task mig-up`<br>升級資料庫)]
| |
| E[(`task mig-down`<br>降級資料庫)]
| |
| F{{`src/main_be/internal/schema/xxx.go`<br>新增 Ent schema 定義}}
| |
| G{{`task ent-gen`<br>生成 Ent 資料存取碼}}
| |
| H([在 service 層寫業務邏輯])
| |
| I([在 service 層寫單元測試])
| |
| J([在 handler 層寫請求處理])
| |
| K[在 main.go 組裝 client, service, handler]@{ shape: procs }
| |
|
| |
|
| A --> B
| | Root --> Past("過去") |
| | Root --> Pres("現在") |
| | Root --> Fut("未來") |
|
| |
|
| subgraph database_layer
| | Past --> P1("過去普通: played") |
| direction LR
| | Past --> P2("過去進行: was/were playing") |
| B --> C | | Past --> P3("過去完成: had played") |
| C --> D | | Past --> P4("過去被動: was/were played") |
| D --Failed--> E | |
| E --Tunning--> C | |
| end
| |
|
| |
|
| D --Passed--> F
| | Pres --> R1("現在普通: play / plays") |
| F --> G
| | Pres --> R2("現在進行: am/is/are playing") |
| G --> H
| | Pres --> R3("現在完成: have/has played") |
| | Pres --> R4("現在被動: am/is/are played") |
|
| |
|
| subgraph service_layer
| | Fut --> F1("未來普通: will play") |
| direction LR
| | Fut --> F2("未來進行: will be playing") |
| H --> I
| | Fut --> F3("未來完成: will have played") |
| I --Failed--> H
| | Fut --> F4("未來被動: will be played") |
| I --Passed--> J
| |
| end
| |
|
| |
| J --> K
| |
| </quickmmd> | | </quickmmd> |
|
| |
| = ClinicWiz =
| |
|
| |
| <quickgv name="clinicwiz" theme="warm">
| |
| rankdir=TB;
| |
|
| |
| subgraph cluster_formain_cs {
| |
| label="HTTP";
| |
| A [label="GenHTTP http://localhost:8168\n(FormMain.cs)"];
| |
| B [label="Functional Handler\n(FormMain.cs)"];
| |
| C [label="Functions\n(RestfulMethods.cs)"];
| |
| }
| |
|
| |
| subgraph cluster_form {
| |
| label="WPF";
| |
| L [label="ReadTest.cs"];
| |
| }
| |
|
| |
| subgraph cluster_cshistaskfactory_cs {
| |
| label="Queue Mechanism";
| |
| D [label="TaskFactory\n(CsHisTask/CsHisTaskFactory.cs)"];
| |
| E [label="Task\n(CsHisTask/CsHisTaskFactory.cs)"];
| |
| F [label="StateMachine\n(CsHisStateMachine.cs)"];
| |
| }
| |
|
| |
| subgraph cluster_hal {
| |
| label="Hardware Control";
| |
| G [label="CsHisHAL.cs"];
| |
| H [label="CsHis.dll\n(CsHis99Native.cs)"];
| |
| J [label="PCSC API"];
| |
| K [label="SetupAPI"];
| |
| R1 [label="HC3000"];
| |
| R2 [label="DWR18"];
| |
| R3 [label="PCSC Reader"];
| |
| }
| |
|
| |
| A -> B -> C -> D -> E -> F -> G -> H;
| |
| F -> J;
| |
| F -> K;
| |
| L -> D;
| |
|
| |
| H -> R1;
| |
| H -> R2;
| |
| H -> R3;
| |
| J -> R2;
| |
| J -> R3;
| |
| </quickgv>
| |
|
| |
|
| = WebSocket Service = | | = WebSocket Service = |
| Line 125: |
Line 142: |
| s:mh -> iq [color="#ff0000"]; | | s:mh -> iq [color="#ff0000"]; |
| s:mw -> iq [color="#ff0000",dir="back"]; | | s:mw -> iq [color="#ff0000",dir="back"]; |
| </quickgv>
| |
|
| |
| = 建議線路 gen1 =
| |
| <quickgv name="topology" theme="warm">
| |
| subgraph cluster_clinic {
| |
| label="診間網路";
| |
|
| |
| his[label="HIS Server"];
| |
| nas[label="NAS"];
| |
| opd[label="診間"];
| |
| pt[label="復健"];
| |
| reg[label="掛號"];
| |
| tv[label="衛教"];
| |
| prn[label="印表機"];
| |
| sw[label="辦公室交換器"];
| |
| fw[label="防火牆"];
| |
| wan1[label="固定IP線路"];
| |
| wan2[label="健保局 VPN"];
| |
| cross[label="跨院病歷"];
| |
|
| |
| {opd pt reg tv his nas prn} -> sw;
| |
| sw -> fw;
| |
| fw -> {wan1 wan2};
| |
| wan1 -> cross [dir="back", color="#ff0000"];
| |
| }
| |
|
| |
| // 開放網路
| |
| subgraph cluster_open {
| |
| label="開放網路";
| |
|
| |
| gu[label="新光保全"];
| |
| mo[label="監視系統"];
| |
| pc1[label="外網專用PC"];
| |
| rt[label="IP分享器"];
| |
| wan3[label="浮動IP線路"];
| |
| mobile[label="監視系統 App"];
| |
| hacker[label="駭客 or 殭屍電腦"];
| |
|
| |
| {pc1 gu mo} -> rt -> wan3;
| |
| wan3 -> {mobile hacker} [label="tcp:3880", dir="back", color="#ff0000"];
| |
| }
| |
| </quickgv>
| |
|
| |
| = 建議線路 gen2 =
| |
|
| |
| <quickgv name="topology_gen2" theme="warm">
| |
| subgraph cluster_clinic {
| |
| label="診間網路";
| |
|
| |
| his[label="HIS Server"];
| |
| nas[label="NAS"];
| |
| opd[label="診間"];
| |
| pt[label="復健"];
| |
| reg[label="掛號"];
| |
| tv[label="衛教"];
| |
| prn[label="印表機"];
| |
| fw[label="防火牆"];
| |
| wan1[label="固定IP線路"];
| |
| wan2[label="健保局 VPN"];
| |
| cross[label="跨院病歷"];
| |
|
| |
| subgraph cluster_switch {
| |
| label="網路交換器";
| |
| vlan1[label="診間區虛擬網路"];
| |
| vlan2[label="敏感區虛擬網路"];
| |
| }
| |
|
| |
| {opd pt reg tv prn} -> vlan1;
| |
| {his nas} -> vlan2;
| |
| {vlan1 vlan2} -> fw;
| |
| fw -> {wan1 wan2};
| |
| wan1 -> cross [dir="back", color="#ff0000"];
| |
| }
| |
|
| |
| // 開放網路
| |
| subgraph cluster_open {
| |
| label="開放網路";
| |
|
| |
| gu[label="新光保全"];
| |
| mo[label="監視系統"];
| |
| pc1[label="外網專用PC"];
| |
| rt[label="IP分享器"];
| |
| wan3[label="浮動IP線路"];
| |
| mobile[label="監視系統 App\n(僅限特定地點存取)"];
| |
|
| |
| {pc1 gu mo} -> rt -> wan3;
| |
| wan3 -> mobile [label="tcp:3880", dir="back", color="#ff0000"];
| |
| }
| |
| </quickgv>
| |
|
| |
| = A =
| |
| <quickgv name="Gff" theme="warm">
| |
| rankdir=TB;
| |
|
| |
| A [label="驗證銷售權"];
| |
| B [label="驗證輸入值格式"];
| |
| C [label="驗證報價是否存在"];
| |
| D [label="產生 GDS 訂單"];
| |
| E [label="產生供應商訂單"];
| |
|
| |
| A -> B -> C -> D -> E;
| |
| </quickgv> | | </quickgv> |
|
| |
|