<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>
