Files
cuimengxue/example/爱维宠物医院管理系统-序列图.drawio
王子琦 32e5dad436 docs: 添加系统设计图
包含用例图、类图、实体图、序列图、活动图、功能结构图、界面设计图

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-02-28 13:20:33 +08:00

375 lines
21 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<mxfile host="app.diagrams.net" modified="2026-02-26T21:30:00.000Z" agent="OpenCode" version="24.7.17" type="device">
<diagram id="seq-customer-appointment" name="图4.5 顾客预约序列图">
<mxGraphModel dx="1600" dy="1000" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1200" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<!-- 参与者:人物图标 -->
<mxCell id="actor1" value="顾客" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;strokeColor=#000000;fillColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="80" y="40" width="30" height="55" as="geometry" />
</mxCell>
<!-- 参与者:系统组件矩形 -->
<mxCell id="obj2" value="系统前台" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#000000;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="260" y="50" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="obj3" value="后台系统" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#000000;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="540" y="50" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="obj4" value="数据库" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#000000;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="820" y="50" width="120" height="40" as="geometry" />
</mxCell>
<!-- 生命线(虚线) -->
<mxCell id="ll1" value="" style="endArrow=none;dashed=1;html=1;strokeColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="95" y="95" as="sourcePoint" />
<mxPoint x="95" y="920" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ll2" value="" style="endArrow=none;dashed=1;html=1;strokeColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="320" y="90" as="sourcePoint" />
<mxPoint x="320" y="920" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ll3" value="" style="endArrow=none;dashed=1;html=1;strokeColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="600" y="90" as="sourcePoint" />
<mxPoint x="600" y="920" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ll4" value="" style="endArrow=none;dashed=1;html=1;strokeColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="880" y="90" as="sourcePoint" />
<mxPoint x="880" y="920" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 激活条 -->
<mxCell id="act1" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#000000;fillColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="88" y="130" width="14" height="760" as="geometry" />
</mxCell>
<mxCell id="act2" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#000000;fillColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="313" y="150" width="14" height="720" as="geometry" />
</mxCell>
<mxCell id="act3" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#000000;fillColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="593" y="280" width="14" height="460" as="geometry" />
</mxCell>
<mxCell id="act4" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#000000;fillColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="873" y="360" width="14" height="300" as="geometry" />
</mxCell>
<!-- 消息1顾客 → 前台:进入预约页面 -->
<mxCell id="m1" value="进入预约页面" style="endArrow=block;endFill=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry x="-0.2" relative="1" as="geometry">
<mxPoint x="102" y="160" as="sourcePoint" />
<mxPoint x="313" y="160" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<!-- 消息2前台 → 顾客:提示选择宠物与时段 -->
<mxCell id="m2" value="提示选择宠物与时段" style="endArrow=open;endFill=0;dashed=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="313" y="210" as="sourcePoint" />
<mxPoint x="102" y="210" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息3顾客 → 前台:填写预约信息并提交 -->
<mxCell id="m3" value="填写预约信息并提交" style="endArrow=block;endFill=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="102" y="270" as="sourcePoint" />
<mxPoint x="313" y="270" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息4前台 → 后台:提交预约请求 -->
<mxCell id="m4" value="提交预约请求" style="endArrow=block;endFill=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="327" y="310" as="sourcePoint" />
<mxPoint x="593" y="310" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息5后台 → 数据库:校验宠物与时段可用性 -->
<mxCell id="m5" value="校验宠物与时段可用性" style="endArrow=block;endFill=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="607" y="380" as="sourcePoint" />
<mxPoint x="873" y="380" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息6数据库 → 后台:返回校验结果 -->
<mxCell id="m6" value="返回校验结果" style="endArrow=open;endFill=0;dashed=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="873" y="430" as="sourcePoint" />
<mxPoint x="607" y="430" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- alt 片段框 -->
<mxCell id="alt_frame" value="" style="shape=mxgraph.sysml.package;html=1;overflow=fill;whiteSpace=wrap;strokeColor=#000000;fillColor=none;align=left;verticalAlign=top;spacingLeft=5;tabWidth=120;tabHeight=20;tabPosition=left;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="60" y="470" width="870" height="390" as="geometry" />
</mxCell>
<mxCell id="alt_label" value="alt" style="text;html=1;align=left;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="65" y="472" width="40" height="20" as="geometry" />
</mxCell>
<mxCell id="alt_guard1" value="[校验通过]" style="text;html=1;align=left;verticalAlign=middle;fontStyle=0;fontSize=11;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="70" y="498" width="100" height="20" as="geometry" />
</mxCell>
<!-- 成功路径 -->
<!-- 消息7后台 → 数据库:保存预约记录 -->
<mxCell id="m7" value="保存预约记录" style="endArrow=block;endFill=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="607" y="530" as="sourcePoint" />
<mxPoint x="873" y="530" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息8数据库 → 后台:返回保存结果 -->
<mxCell id="m8" value="返回保存结果" style="endArrow=open;endFill=0;dashed=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="873" y="580" as="sourcePoint" />
<mxPoint x="607" y="580" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息9后台 → 前台:返回预约成功 -->
<mxCell id="m9" value="返回预约成功" style="endArrow=open;endFill=0;dashed=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="593" y="620" as="sourcePoint" />
<mxPoint x="327" y="620" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息10前台 → 顾客:显示预约成功 -->
<mxCell id="m10" value="显示预约成功" style="endArrow=open;endFill=0;dashed=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="313" y="660" as="sourcePoint" />
<mxPoint x="102" y="660" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 分隔虚线 -->
<mxCell id="alt_divider" value="" style="endArrow=none;dashed=1;html=1;strokeColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="60" y="700" as="sourcePoint" />
<mxPoint x="930" y="700" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="alt_guard2" value="[校验失败]" style="text;html=1;align=left;verticalAlign=middle;fontStyle=0;fontSize=11;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="70" y="708" width="100" height="20" as="geometry" />
</mxCell>
<!-- 失败路径 -->
<!-- 消息11后台 → 前台:返回错误码 -->
<mxCell id="m11" value="返回错误码" style="endArrow=open;endFill=0;dashed=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="593" y="750" as="sourcePoint" />
<mxPoint x="327" y="750" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息12前台 → 顾客:提示预约失败信息 -->
<mxCell id="m12" value="提示预约失败信息" style="endArrow=open;endFill=0;dashed=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="313" y="800" as="sourcePoint" />
<mxPoint x="102" y="800" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="seq-admin-user-management" name="图4.6 管理员账号管理序列图">
<mxGraphModel dx="1600" dy="1000" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1200" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<!-- 参与者:人物图标 -->
<mxCell id="actor1" value="管理员" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;strokeColor=#000000;fillColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="80" y="40" width="30" height="55" as="geometry" />
</mxCell>
<!-- 参与者:系统组件矩形 -->
<mxCell id="obj2" value="系统前台" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#000000;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="260" y="50" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="obj3" value="后台系统" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#000000;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="540" y="50" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="obj4" value="数据库" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#000000;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="820" y="50" width="120" height="40" as="geometry" />
</mxCell>
<!-- 生命线(虚线) -->
<mxCell id="ll1" value="" style="endArrow=none;dashed=1;html=1;strokeColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="95" y="95" as="sourcePoint" />
<mxPoint x="95" y="920" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ll2" value="" style="endArrow=none;dashed=1;html=1;strokeColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="320" y="90" as="sourcePoint" />
<mxPoint x="320" y="920" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ll3" value="" style="endArrow=none;dashed=1;html=1;strokeColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="600" y="90" as="sourcePoint" />
<mxPoint x="600" y="920" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ll4" value="" style="endArrow=none;dashed=1;html=1;strokeColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="880" y="90" as="sourcePoint" />
<mxPoint x="880" y="920" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 激活条 -->
<mxCell id="act1" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#000000;fillColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="88" y="130" width="14" height="760" as="geometry" />
</mxCell>
<mxCell id="act2" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#000000;fillColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="313" y="150" width="14" height="720" as="geometry" />
</mxCell>
<mxCell id="act3" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#000000;fillColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="593" y="280" width="14" height="460" as="geometry" />
</mxCell>
<mxCell id="act4" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#000000;fillColor=#FFFFFF;" vertex="1" parent="1">
<mxGeometry x="873" y="360" width="14" height="300" as="geometry" />
</mxCell>
<!-- 消息1管理员 → 前台:进入用户管理页面 -->
<mxCell id="m1" value="进入用户管理页面" style="endArrow=block;endFill=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="102" y="160" as="sourcePoint" />
<mxPoint x="313" y="160" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息2前台 → 管理员:展示用户列表 -->
<mxCell id="m2" value="展示用户列表" style="endArrow=open;endFill=0;dashed=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="313" y="210" as="sourcePoint" />
<mxPoint x="102" y="210" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息3管理员 → 前台:选择新增/更新/禁用操作 -->
<mxCell id="m3" value="选择新增/更新/禁用操作" style="endArrow=block;endFill=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="102" y="270" as="sourcePoint" />
<mxPoint x="313" y="270" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息4前台 → 后台:提交账号管理请求 -->
<mxCell id="m4" value="提交账号管理请求" style="endArrow=block;endFill=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="327" y="310" as="sourcePoint" />
<mxPoint x="593" y="310" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息5后台 → 数据库:校验管理员权限 -->
<mxCell id="m5" value="校验管理员权限" style="endArrow=block;endFill=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="607" y="380" as="sourcePoint" />
<mxPoint x="873" y="380" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息6数据库 → 后台:返回权限信息 -->
<mxCell id="m6" value="返回权限信息" style="endArrow=open;endFill=0;dashed=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="873" y="430" as="sourcePoint" />
<mxPoint x="607" y="430" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- alt 片段框 -->
<mxCell id="alt_frame" value="" style="shape=mxgraph.sysml.package;html=1;overflow=fill;whiteSpace=wrap;strokeColor=#000000;fillColor=none;align=left;verticalAlign=top;spacingLeft=5;tabWidth=120;tabHeight=20;tabPosition=left;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="60" y="470" width="870" height="390" as="geometry" />
</mxCell>
<mxCell id="alt_label" value="alt" style="text;html=1;align=left;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="65" y="472" width="40" height="20" as="geometry" />
</mxCell>
<mxCell id="alt_guard1" value="[权限校验通过]" style="text;html=1;align=left;verticalAlign=middle;fontStyle=0;fontSize=11;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="70" y="498" width="120" height="20" as="geometry" />
</mxCell>
<!-- 成功路径 -->
<!-- 消息7后台 → 数据库:更新目标用户信息/状态 -->
<mxCell id="m7" value="更新目标用户信息/状态" style="endArrow=block;endFill=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="607" y="530" as="sourcePoint" />
<mxPoint x="873" y="530" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息8数据库 → 后台:返回更新结果 -->
<mxCell id="m8" value="返回更新结果" style="endArrow=open;endFill=0;dashed=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="873" y="580" as="sourcePoint" />
<mxPoint x="607" y="580" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息9后台 → 前台:返回操作成功 -->
<mxCell id="m9" value="返回操作成功" style="endArrow=open;endFill=0;dashed=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="593" y="620" as="sourcePoint" />
<mxPoint x="327" y="620" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息10前台 → 管理员:刷新列表并提示成功 -->
<mxCell id="m10" value="刷新列表并提示成功" style="endArrow=open;endFill=0;dashed=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="313" y="660" as="sourcePoint" />
<mxPoint x="102" y="660" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 分隔虚线 -->
<mxCell id="alt_divider" value="" style="endArrow=none;dashed=1;html=1;strokeColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="60" y="700" as="sourcePoint" />
<mxPoint x="930" y="700" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="alt_guard2" value="[权限校验失败]" style="text;html=1;align=left;verticalAlign=middle;fontStyle=0;fontSize=11;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="70" y="708" width="120" height="20" as="geometry" />
</mxCell>
<!-- 失败路径 -->
<!-- 消息11后台 → 前台:返回错误码 -->
<mxCell id="m11" value="返回错误码" style="endArrow=open;endFill=0;dashed=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="593" y="750" as="sourcePoint" />
<mxPoint x="327" y="750" as="targetPoint" />
</mxGeometry>
</mxCell>
<!-- 消息12前台 → 管理员:提示操作失败信息 -->
<mxCell id="m12" value="提示操作失败信息" style="endArrow=open;endFill=0;dashed=1;html=1;strokeColor=#000000;fontColor=#000000;align=center;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="313" y="800" as="sourcePoint" />
<mxPoint x="102" y="800" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>