feat: add A-card operations frontend and backend foundation

This commit is contained in:
郑龙捷
2026-09-02 09:54:03 +08:00
parent 9badd3597f
commit ad71259ba5
106 changed files with 12461 additions and 1796 deletions
@@ -0,0 +1,206 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 15.1.0 (20260618.0150)
-->
<!-- Title: A 卡模型运维模块 · 推荐系统架构 V0.1
同一工程 / 同一 MySQL / 源表发布后可见 Pages: 1 -->
<svg width="1513pt" height="2160pt"
viewBox="0.00 0.00 1513.00 2160.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1.26146 1.26146) rotate(0) translate(39.6 1672.7)">
<title>A 卡模型运维模块 · 推荐系统架构 V0.1
同一工程 / 同一 MySQL / 源表发布后可见</title>
<polygon fill="white" stroke="none" points="-39.6,39.6 -39.6,-1672.7 1159.6,-1672.7 1159.6,39.6 -39.6,39.6"/>
<text xml:space="preserve" text-anchor="middle" x="560" y="-1605.35" font-family="PingFang SC" font-size="25.00" fill="#2d3436">A 卡模型运维模块 · 推荐系统架构 V0.1</text>
<text xml:space="preserve" text-anchor="middle" x="560" y="-1569.35" font-family="PingFang SC" font-size="25.00" fill="#2d3436">同一工程 / 同一 MySQL / 源表发布后可见</text>
<g id="clust1" class="cluster">
<title>cluster_入口层(现有)</title>
<path fill="#f5f7fa" stroke="#aeb7c4" d="M20,-793.55C20,-793.55 136,-793.55 136,-793.55 142,-793.55 148,-799.55 148,-805.55 148,-805.55 148,-1533.1 148,-1533.1 148,-1539.1 142,-1545.1 136,-1545.1 136,-1545.1 20,-1545.1 20,-1545.1 14,-1545.1 8,-1539.1 8,-1533.1 8,-1533.1 8,-805.55 8,-805.55 8,-799.55 14,-793.55 20,-793.55"/>
<text xml:space="preserve" text-anchor="middle" x="68.5" y="-1526.85" font-family="PingFang SC" font-size="15.00" fill="#2d3436">入口层(现有)</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_统一 FastAPI 工程(不新增服务)</title>
<path fill="#eef5fd" stroke="#7fa8d8" d="M168,-254.35C168,-254.35 436,-254.35 436,-254.35 442,-254.35 448,-260.35 448,-266.35 448,-266.35 448,-1018.9 448,-1018.9 448,-1024.9 442,-1030.9 436,-1030.9 436,-1030.9 168,-1030.9 168,-1030.9 162,-1030.9 156,-1024.9 156,-1018.9 156,-1018.9 156,-266.35 156,-266.35 156,-260.35 162,-254.35 168,-254.35"/>
<text xml:space="preserve" text-anchor="middle" x="278.38" y="-1012.65" font-family="PingFang SC" font-size="15.00" fill="#2d3436">统一 FastAPI 工程(不新增服务)</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_共享数据层(现有 MySQL</title>
<path fill="#f1f8f5" stroke="#78a88d" d="M468,-8C468,-8 736,-8 736,-8 742,-8 748,-14 748,-20 748,-20 748,-743.8 748,-743.8 748,-749.8 742,-755.8 736,-755.8 736,-755.8 468,-755.8 468,-755.8 462,-755.8 456,-749.8 456,-743.8 456,-743.8 456,-20 456,-20 456,-14 462,-8 468,-8"/>
<text xml:space="preserve" text-anchor="middle" x="559.62" y="-737.55" font-family="PingFang SC" font-size="15.00" fill="#2d3436">共享数据层(现有 MySQL</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_文件层(现有)</title>
<path fill="#faf6ee" stroke="#c6a96d" d="M984,-518.45C984,-518.45 1100,-518.45 1100,-518.45 1106,-518.45 1112,-524.45 1112,-530.45 1112,-530.45 1112,-741.8 1112,-741.8 1112,-747.8 1106,-753.8 1100,-753.8 1100,-753.8 984,-753.8 984,-753.8 978,-753.8 972,-747.8 972,-741.8 972,-741.8 972,-530.45 972,-530.45 972,-524.45 978,-518.45 984,-518.45"/>
<text xml:space="preserve" text-anchor="middle" x="1032.5" y="-735.55" font-family="PingFang SC" font-size="15.00" fill="#2d3436">文件层(现有)</text>
</g>
<!-- 8e923065d05147b68fd08369fc363143 -->
<g id="node1" class="node">
<title>8e923065d05147b68fd08369fc363143</title>
<image xlink:href="/private/tmp/a-card-diagrams-v01/lib/python3.14/site-packages/resources/onprem/client/users.png" width="100.8px" height="100.8px" preserveAspectRatio="xMinYMin meet" x="27.6" y="-1462.95"/>
<text xml:space="preserve" text-anchor="middle" x="78" y="-1350.8" font-family="PingFang SC" font-size="11.00" fill="#2d3436">业务团队 / 模型团队</text>
<text xml:space="preserve" text-anchor="middle" x="78" y="-1335.05" font-family="PingFang SC" font-size="11.00" fill="#2d3436">管理员</text>
</g>
<!-- 7302e8c0cbac47f8b0461d1c3238c1b8 -->
<g id="node2" class="node">
<title>7302e8c0cbac47f8b0461d1c3238c1b8</title>
<image xlink:href="/private/tmp/a-card-diagrams-v01/lib/python3.14/site-packages/resources/onprem/network/nginx.png" width="100.8px" height="100.8px" preserveAspectRatio="xMinYMin meet" x="27.6" y="-1221.85"/>
<text xml:space="preserve" text-anchor="middle" x="78" y="-1109.7" font-family="PingFang SC" font-size="11.00" fill="#2d3436">Nginx Gateway</text>
<text xml:space="preserve" text-anchor="middle" x="78" y="-1093.95" font-family="PingFang SC" font-size="11.00" fill="#2d3436">唯一入口</text>
</g>
<!-- 8e923065d05147b68fd08369fc363143&#45;&gt;7302e8c0cbac47f8b0461d1c3238c1b8 -->
<g id="edge1" class="edge">
<title>8e923065d05147b68fd08369fc363143&#45;&gt;7302e8c0cbac47f8b0461d1c3238c1b8</title>
<path fill="none" stroke="#2f6fe0" stroke-width="1.8" d="M78,-1329.93C78,-1309.56 78,-1287.55 78,-1266.62"/>
<polygon fill="#2f6fe0" stroke="#2f6fe0" stroke-width="1.8" points="81.5,-1266.83 78,-1256.83 74.5,-1266.83 81.5,-1266.83"/>
<text xml:space="preserve" text-anchor="middle" x="100.12" y="-1286.4" font-family="Sans-Serif" font-size="13.00" fill="#2d3436">HTTPS</text>
</g>
<!-- 4e2614e624784972b26a9cbc506918fd -->
<g id="node3" class="node">
<title>4e2614e624784972b26a9cbc506918fd</title>
<image xlink:href="/private/tmp/a-card-diagrams-v01/lib/python3.14/site-packages/resources/programming/framework/react.png" width="100.8px" height="100.8px" preserveAspectRatio="xMinYMin meet" x="27.6" y="-946.75"/>
<text xml:space="preserve" text-anchor="middle" x="78" y="-834.6" font-family="PingFang SC" font-size="11.00" fill="#2d3436">React SPA</text>
<text xml:space="preserve" text-anchor="middle" x="78" y="-818.85" font-family="PingFang SC" font-size="11.00" fill="#2d3436">模型平台 + 运维平台</text>
</g>
<!-- 7302e8c0cbac47f8b0461d1c3238c1b8&#45;&gt;4e2614e624784972b26a9cbc506918fd -->
<g id="edge2" class="edge">
<title>7302e8c0cbac47f8b0461d1c3238c1b8&#45;&gt;4e2614e624784972b26a9cbc506918fd</title>
<path fill="none" stroke="#2f6fe0" d="M78,-1088.88C78,-1057.81 78,-1022.18 78,-990.14"/>
<polygon fill="#2f6fe0" stroke="#2f6fe0" points="81.5,-990.48 78,-980.48 74.5,-990.48 81.5,-990.48"/>
<text xml:space="preserve" text-anchor="middle" x="103.5" y="-1045.3" font-family="Sans-Serif" font-size="13.00" fill="#2d3436">静态资源</text>
</g>
<!-- 62f35beca1644317a41769c903fdcc3d -->
<g id="node4" class="node">
<title>62f35beca1644317a41769c903fdcc3d</title>
<image xlink:href="/private/tmp/a-card-diagrams-v01/lib/python3.14/site-packages/resources/programming/framework/fastapi.png" width="100.8px" height="100.8px" preserveAspectRatio="xMinYMin meet" x="177.6" y="-946.75"/>
<text xml:space="preserve" text-anchor="middle" x="228" y="-834.6" font-family="PingFang SC" font-size="11.00" fill="#2d3436">模型平台模块</text>
<text xml:space="preserve" text-anchor="middle" x="228" y="-818.85" font-family="PingFang SC" font-size="11.00" fill="#2d3436">模型 / 版本 / 计算任务</text>
</g>
<!-- 7302e8c0cbac47f8b0461d1c3238c1b8&#45;&gt;62f35beca1644317a41769c903fdcc3d -->
<g id="edge3" class="edge">
<title>7302e8c0cbac47f8b0461d1c3238c1b8&#45;&gt;62f35beca1644317a41769c903fdcc3d</title>
<path fill="none" stroke="#2f6fe0" d="M126.22,-1088.92C137.17,-1069.98 148.63,-1049.81 159,-1030.9 166.37,-1017.46 173.99,-1003.15 181.36,-989.09"/>
<polygon fill="#2f6fe0" stroke="#2f6fe0" points="184.45,-990.73 185.97,-980.25 178.24,-987.49 184.45,-990.73"/>
<text xml:space="preserve" text-anchor="middle" x="191.3" y="-1045.3" font-family="Sans-Serif" font-size="13.00" fill="#2d3436">模型平台 API</text>
</g>
<!-- 3cf7ac83f6764e16bfd1e5ea55c240e2 -->
<g id="node5" class="node">
<title>3cf7ac83f6764e16bfd1e5ea55c240e2</title>
<image xlink:href="/private/tmp/a-card-diagrams-v01/lib/python3.14/site-packages/resources/programming/framework/fastapi.png" width="100.8px" height="100.8px" preserveAspectRatio="xMinYMin meet" x="325.6" y="-946.75"/>
<text xml:space="preserve" text-anchor="middle" x="376" y="-834.6" font-family="PingFang SC" font-size="11.00" fill="#2d3436">运维模块</text>
<text xml:space="preserve" text-anchor="middle" x="376" y="-818.85" font-family="PingFang SC" font-size="11.00" fill="#2d3436">查询 / 判级 / 复核 / 报告 / 流程</text>
</g>
<!-- 7302e8c0cbac47f8b0461d1c3238c1b8&#45;&gt;3cf7ac83f6764e16bfd1e5ea55c240e2 -->
<g id="edge4" class="edge">
<title>7302e8c0cbac47f8b0461d1c3238c1b8&#45;&gt;3cf7ac83f6764e16bfd1e5ea55c240e2</title>
<path fill="none" stroke="#2f6fe0" stroke-width="1.8" d="M128.03,-1148.5C177.1,-1125.01 251.66,-1083.88 302,-1030.9 313.61,-1018.68 324.01,-1004.3 333.1,-989.58"/>
<polygon fill="#2f6fe0" stroke="#2f6fe0" stroke-width="1.8" points="335.99,-991.55 338.09,-981.17 329.97,-987.98 335.99,-991.55"/>
<text xml:space="preserve" text-anchor="middle" x="317.89" y="-1045.3" font-family="Sans-Serif" font-size="13.00" fill="#2d3436">运维 API</text>
</g>
<!-- d97ed9af3adb480abbe2376e20067521 -->
<g id="node6" class="node">
<title>d97ed9af3adb480abbe2376e20067521</title>
<image xlink:href="/private/tmp/a-card-diagrams-v01/lib/python3.14/site-packages/resources/onprem/compute/server.png" width="100.8px" height="100.8px" preserveAspectRatio="xMinYMin meet" x="177.6" y="-671.65"/>
<text xml:space="preserve" text-anchor="middle" x="228" y="-559.5" font-family="PingFang SC" font-size="11.00" fill="#2d3436">Jupyter Runtime</text>
<text xml:space="preserve" text-anchor="middle" x="228" y="-543.75" font-family="PingFang SC" font-size="11.00" fill="#2d3436">模型开发运行时</text>
</g>
<!-- 62f35beca1644317a41769c903fdcc3d&#45;&gt;d97ed9af3adb480abbe2376e20067521 -->
<g id="edge5" class="edge">
<title>62f35beca1644317a41769c903fdcc3d&#45;&gt;d97ed9af3adb480abbe2376e20067521</title>
<path fill="none" stroke="#8b6fc4" stroke-dasharray="5,2" d="M228,-813.78C228,-782.71 228,-747.08 228,-715.04"/>
<polygon fill="#8b6fc4" stroke="#8b6fc4" points="231.5,-715.38 228,-705.38 224.5,-715.38 231.5,-715.38"/>
<text xml:space="preserve" text-anchor="middle" x="259.88" y="-770.2" font-family="Sans-Serif" font-size="13.00" fill="#2d3436">运行时控制</text>
</g>
<!-- 18c413154ae24c099f7a314c5bda70a5 -->
<g id="node8" class="node">
<title>18c413154ae24c099f7a314c5bda70a5</title>
<image xlink:href="/private/tmp/a-card-diagrams-v01/lib/python3.14/site-packages/resources/onprem/database/mysql.png" width="100.8px" height="100.8px" preserveAspectRatio="xMinYMin meet" x="625.6" y="-163.2"/>
<text xml:space="preserve" text-anchor="middle" x="676" y="-51.05" font-family="PingFang SC" font-size="11.00" fill="#2d3436">7 张模型源表</text>
<text xml:space="preserve" text-anchor="middle" x="676" y="-35.3" font-family="PingFang SC" font-size="11.00" fill="#2d3436">模型方受控直写</text>
</g>
<!-- 62f35beca1644317a41769c903fdcc3d&#45;&gt;18c413154ae24c099f7a314c5bda70a5 -->
<g id="edge6" class="edge">
<title>62f35beca1644317a41769c903fdcc3d&#45;&gt;18c413154ae24c099f7a314c5bda70a5</title>
<path fill="none" stroke="#3f9ad0" stroke-width="2.2" d="M275.95,-813.75C283.7,-805.77 292.38,-798.73 302,-793.55 325.31,-780.99 514.2,-788.5 540,-782.55 569.24,-775.8 584.1,-779.89 602,-755.8 721.98,-594.36 710.21,-344.17 692.37,-208.72"/>
<polygon fill="#3f9ad0" stroke="#3f9ad0" stroke-width="2.2" points="695.85,-208.31 691.03,-198.88 688.91,-209.26 695.85,-208.31"/>
<text xml:space="preserve" text-anchor="middle" x="757.02" y="-495.1" font-family="Sans-Serif" font-size="13.00" fill="#2d3436">受控 SQL 直写</text>
<text xml:space="preserve" text-anchor="middle" x="757.02" y="-476.35" font-family="Sans-Serif" font-size="13.00" fill="#2d3436">writing → published</text>
</g>
<!-- 3cf7ac83f6764e16bfd1e5ea55c240e2&#45;&gt;18c413154ae24c099f7a314c5bda70a5 -->
<g id="edge8" class="edge">
<title>3cf7ac83f6764e16bfd1e5ea55c240e2&#45;&gt;18c413154ae24c099f7a314c5bda70a5</title>
<path fill="none" stroke="#3f9ad0" stroke-width="1.8" stroke-dasharray="5,2" d="M426.11,-893.21C512.07,-886.7 687.3,-860.55 780,-755.8 939.39,-575.7 1017.83,-432.17 893,-226.6 859.54,-171.5 789.44,-142.08 737.93,-127.26"/>
<polygon fill="#3f9ad0" stroke="#3f9ad0" stroke-width="1.8" points="739.13,-123.96 728.56,-124.69 737.28,-130.71 739.13,-123.96"/>
<text xml:space="preserve" text-anchor="middle" x="994.18" y="-487.22" font-family="Sans-Serif" font-size="13.00" fill="#2d3436">只读已发布修订</text>
</g>
<!-- 7a2b21350c4c414098e07d740ff99dad -->
<g id="node9" class="node">
<title>7a2b21350c4c414098e07d740ff99dad</title>
<image xlink:href="/private/tmp/a-card-diagrams-v01/lib/python3.14/site-packages/resources/onprem/database/mysql.png" width="100.8px" height="100.8px" preserveAspectRatio="xMinYMin meet" x="477.6" y="-163.2"/>
<text xml:space="preserve" text-anchor="middle" x="528" y="-51.05" font-family="PingFang SC" font-size="11.00" fill="#2d3436">15 张运维业务表</text>
<text xml:space="preserve" text-anchor="middle" x="528" y="-35.3" font-family="PingFang SC" font-size="11.00" fill="#2d3436">判级 / 处理 / 报告 / 流程</text>
</g>
<!-- 3cf7ac83f6764e16bfd1e5ea55c240e2&#45;&gt;7a2b21350c4c414098e07d740ff99dad -->
<g id="edge9" class="edge">
<title>3cf7ac83f6764e16bfd1e5ea55c240e2&#45;&gt;7a2b21350c4c414098e07d740ff99dad</title>
<path fill="none" stroke="#3f9ad0" stroke-width="2.2" d="M426.32,-890.57C494.21,-881.46 614.61,-855.46 684,-782.55 793.3,-667.71 766.17,-598.69 790,-441.95 804.38,-347.33 851.93,-299.58 790,-226.6 735.21,-162.03 676.34,-236.16 602,-195.6 597.27,-193.02 592.69,-190.02 588.28,-186.72"/>
<polygon fill="#3f9ad0" stroke="#3f9ad0" stroke-width="2.2" points="590.83,-184.29 580.88,-180.66 586.4,-189.71 590.83,-184.29"/>
<text xml:space="preserve" text-anchor="middle" x="811.22" y="-487.22" font-family="Sans-Serif" font-size="13.00" fill="#2d3436">业务读写</text>
</g>
<!-- b33cd1fa7d3641028972a6872041f8b5 -->
<g id="node10" class="node">
<title>b33cd1fa7d3641028972a6872041f8b5</title>
<image xlink:href="/private/tmp/a-card-diagrams-v01/lib/python3.14/site-packages/resources/programming/flowchart/database.png" width="100.8px" height="100.8px" preserveAspectRatio="xMinYMin meet" x="477.6" y="-671.65"/>
<text xml:space="preserve" text-anchor="middle" x="528" y="-559.5" font-family="PingFang SC" font-size="11.00" fill="#2d3436">outbox_events</text>
<text xml:space="preserve" text-anchor="middle" x="528" y="-543.75" font-family="PingFang SC" font-size="11.00" fill="#2d3436">现有异步可靠投递</text>
</g>
<!-- 3cf7ac83f6764e16bfd1e5ea55c240e2&#45;&gt;b33cd1fa7d3641028972a6872041f8b5 -->
<g id="edge10" class="edge">
<title>3cf7ac83f6764e16bfd1e5ea55c240e2&#45;&gt;b33cd1fa7d3641028972a6872041f8b5</title>
<path fill="none" stroke="#e0902f" stroke-dasharray="5,2" d="M425.54,-813.92C436.76,-794.96 448.47,-774.78 459,-755.8 466.44,-742.4 474.1,-728.11 481.48,-714.06"/>
<polygon fill="#e0902f" stroke="#e0902f" points="484.57,-715.7 486.1,-705.22 478.37,-712.46 484.57,-715.7"/>
<text xml:space="preserve" text-anchor="middle" x="490.82" y="-770.2" font-family="Sans-Serif" font-size="13.00" fill="#2d3436">同事务写事件</text>
</g>
<!-- e2ab9cb488234c80803bcdfa37522afa -->
<g id="node11" class="node">
<title>e2ab9cb488234c80803bcdfa37522afa</title>
<image xlink:href="/private/tmp/a-card-diagrams-v01/lib/python3.14/site-packages/resources/generic/storage/storage.png" width="100.8px" height="100.8px" preserveAspectRatio="xMinYMin meet" x="991.6" y="-671.65"/>
<text xml:space="preserve" text-anchor="middle" x="1042" y="-559.5" font-family="PingFang SC" font-size="11.00" fill="#2d3436">对象存储 + storage_objects</text>
<text xml:space="preserve" text-anchor="middle" x="1042" y="-543.75" font-family="PingFang SC" font-size="11.00" fill="#2d3436">报告 / 流程材料 / 评分逻辑</text>
</g>
<!-- 3cf7ac83f6764e16bfd1e5ea55c240e2&#45;&gt;e2ab9cb488234c80803bcdfa37522afa -->
<g id="edge13" class="edge">
<title>3cf7ac83f6764e16bfd1e5ea55c240e2&#45;&gt;e2ab9cb488234c80803bcdfa37522afa</title>
<path fill="none" stroke="#3f9ad0" d="M426.27,-891.09C551.14,-879.66 871.47,-844.86 956,-782.55 979.45,-765.26 997.17,-739.62 1010.24,-713.88"/>
<polygon fill="#3f9ad0" stroke="#3f9ad0" points="1013.33,-715.54 1014.54,-705.01 1007.03,-712.48 1013.33,-715.54"/>
<text xml:space="preserve" text-anchor="middle" x="1018.85" y="-770.2" font-family="Sans-Serif" font-size="13.00" fill="#2d3436">材料与报告文件</text>
</g>
<!-- 60e5076279b545fe957a6ff711d7e045 -->
<g id="node7" class="node">
<title>60e5076279b545fe957a6ff711d7e045</title>
<image xlink:href="/private/tmp/a-card-diagrams-v01/lib/python3.14/site-packages/resources/programming/flowchart/predefined-process.png" width="100.8px" height="100.8px" preserveAspectRatio="xMinYMin meet" x="325.6" y="-409.55"/>
<text xml:space="preserve" text-anchor="middle" x="376" y="-297.4" font-family="PingFang SC" font-size="11.00" fill="#2d3436">Schedule Executor</text>
<text xml:space="preserve" text-anchor="middle" x="376" y="-281.65" font-family="PingFang SC" font-size="11.00" fill="#2d3436">Outbox 轮询与后台任务</text>
</g>
<!-- 60e5076279b545fe957a6ff711d7e045&#45;&gt;18c413154ae24c099f7a314c5bda70a5 -->
<g id="edge7" class="edge">
<title>60e5076279b545fe957a6ff711d7e045&#45;&gt;18c413154ae24c099f7a314c5bda70a5</title>
<path fill="none" stroke="#3f9ad0" d="M422.01,-276.59C428.95,-268.34 436.63,-260.68 445,-254.35 455.43,-246.46 460.67,-249.7 473,-245.35 480.24,-242.79 595.67,-199.95 602,-195.6 607.36,-191.92 612.6,-187.78 617.66,-183.36"/>
<polygon fill="#3f9ad0" stroke="#3f9ad0" points="619.88,-186.07 624.87,-176.72 615.14,-180.92 619.88,-186.07"/>
<text xml:space="preserve" text-anchor="middle" x="567.9" y="-233" font-family="Sans-Serif" font-size="13.00" fill="#2d3436">批处理结果直写</text>
</g>
<!-- 60e5076279b545fe957a6ff711d7e045&#45;&gt;7a2b21350c4c414098e07d740ff99dad -->
<g id="edge12" class="edge">
<title>60e5076279b545fe957a6ff711d7e045&#45;&gt;7a2b21350c4c414098e07d740ff99dad</title>
<path fill="none" stroke="#e0902f" stroke-dasharray="5,2" d="M335.54,-276.64C332.17,-259.47 332.86,-241.92 341.5,-226.6 368.2,-179.25 423.66,-149.52 467.2,-132.55"/>
<polygon fill="#e0902f" stroke="#e0902f" points="468.15,-135.93 476.28,-129.14 465.69,-129.37 468.15,-135.93"/>
<text xml:space="preserve" text-anchor="middle" x="403.75" y="-233" font-family="Sans-Serif" font-size="13.00" fill="#2d3436">判级 / 报告 / 超时任务</text>
</g>
<!-- b33cd1fa7d3641028972a6872041f8b5&#45;&gt;60e5076279b545fe957a6ff711d7e045 -->
<g id="edge11" class="edge">
<title>b33cd1fa7d3641028972a6872041f8b5&#45;&gt;60e5076279b545fe957a6ff711d7e045</title>
<path fill="none" stroke="#e0902f" stroke-width="1.8" stroke-dasharray="5,2" d="M480.32,-538.67C464.34,-511.32 446.41,-480.64 429.98,-452.53"/>
<polygon fill="#e0902f" stroke="#e0902f" stroke-width="1.8" points="433.21,-451.11 425.14,-444.24 427.17,-454.64 433.21,-451.11"/>
<text xml:space="preserve" text-anchor="middle" x="492.23" y="-487.22" font-family="Sans-Serif" font-size="13.00" fill="#2d3436">轮询 / 重试</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 19 KiB