<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="drawio" version="26.0.0">
  <diagram name="状态图">
    <mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1400" pageHeight="900" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />

        <!-- Title -->
        <mxCell id="title" value="12306旅客管理系统 - 订单状态流转图" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;fontSize=20;fontStyle=1" vertex="1" parent="1">
          <mxGeometry x="500" y="20" width="400" height="40" as="geometry" />
        </mxCell>

        <!-- Initial State -->
        <mxCell id="initial" value="[*]" style="ellipse;whiteSpace=wrap;html=1;fillColor=#000000;strokeColor=#000000;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="280" y="100" width="40" height="40" as="geometry" />
        </mxCell>

        <!-- States -->
        <mxCell id="unpaid" value="UNPAID&#xa;待支付" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff9c4;strokeColor=#f57c00;fontSize=14;fontStyle=1" vertex="1" parent="1">
          <mxGeometry x="240" y="180" width="120" height="70" as="geometry" />
        </mxCell>

        <mxCell id="paid" value="PAID&#xa;已支付" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#c8e6c9;strokeColor=#4caf50;fontSize=14;fontStyle=1" vertex="1" parent="1">
          <mxGeometry x="520" y="180" width="120" height="70" as="geometry" />
        </mxCell>

        <mxCell id="cancelled" value="CANCELLED&#xa;已取消" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffcdd2;strokeColor=#f44336;fontSize=14;fontStyle=1" vertex="1" parent="1">
          <mxGeometry x="80" y="320" width="120" height="70" as="geometry" />
        </mxCell>

        <mxCell id="timeout" value="TIMEOUT&#xa;超时" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffcdd2;strokeColor=#f44336;fontSize=14;fontStyle=1" vertex="1" parent="1">
          <mxGeometry x="240" y="400" width="120" height="70" as="geometry" />
        </mxCell>

        <mxCell id="completed" value="COMPLETED&#xa;已完成" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#b2dfdb;strokeColor=#00796b;fontSize=14;fontStyle=1" vertex="1" parent="1">
          <mxGeometry x="680" y="180" width="120" height="70" as="geometry" />
        </mxCell>

        <mxCell id="refunding" value="REFUNDING&#xa;退票中" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe0b2;strokeColor=#ff9800;fontSize=14;fontStyle=1" vertex="1" parent="1">
          <mxGeometry x="520" y="320" width="120" height="70" as="geometry" />
        </mxCell>

        <mxCell id="refunded" value="REFUNDED&#xa;已退款" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1bee7;strokeColor=#7b1fa2;fontSize=14;fontStyle=1" vertex="1" parent="1">
          <mxGeometry x="400" y="480" width="120" height="70" as="geometry" />
        </mxCell>

        <mxCell id="changing" value="CHANGING&#xa;改签中" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe0b2;strokeColor=#ff9800;fontSize=14;fontStyle=1" vertex="1" parent="1">
          <mxGeometry x="680" y="320" width="120" height="70" as="geometry" />
        </mxCell>

        <mxCell id="changed" value="CHANGED&#xa;已改签" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#b2dfdb;strokeColor=#00796b;fontSize=14;fontStyle=1" vertex="1" parent="1">
          <mxGeometry x="840" y="400" width="120" height="70" as="geometry" />
        </mxCell>

        <!-- Final States -->
        <mxCell id="final1" value="[*]" style="ellipse;whiteSpace=wrap;html=1;fillColor=#000000;strokeColor=#000000;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="440" y="600" width="40" height="40" as="geometry" />
        </mxCell>
        <mxCell id="final2" value="[*]" style="ellipse;whiteSpace=wrap;html=1;fillColor=#000000;strokeColor=#000000;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="520" y="600" width="40" height="40" as="geometry" />
        </mxCell>
        <mxCell id="final3" value="[*]" style="ellipse;whiteSpace=wrap;html=1;fillColor=#000000;strokeColor=#000000;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="600" y="600" width="40" height="40" as="geometry" />
        </mxCell>
        <mxCell id="final4" value="[*]" style="ellipse;whiteSpace=wrap;html=1;fillColor=#000000;strokeColor=#000000;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="880" y="520" width="40" height="40" as="geometry" />
        </mxCell>

        <!-- Notes -->
        <mxCell id="note1" value="等待用户支付&#xa;有效期10分钟" style="text;html=1;strokeColor=#f57c00;fillColor=#fff9c4;align=left;fontSize=11;dashed=1;" vertex="1" parent="1">
          <mxGeometry x="370" y="185" width="120" height="40" as="geometry" />
        </mxCell>
        <mxCell id="note2" value="已支付&#xa;可乘车或申请退票/改签" style="text;html=1;strokeColor=#4caf50;fillColor=#c8e6c9;align=left;fontSize=11;dashed=1;" vertex="1" parent="1">
          <mxGeometry x="650" y="185" width="120" height="40" as="geometry" />
        </mxCell>
        <mxCell id="note3" value="退票审核中&#xa;手续费根据时间计算" style="text;html=1;strokeColor=#ff9800;fillColor=#ffe0b2;align=left;fontSize=11;dashed=1;" vertex="1" parent="1">
          <mxGeometry x="650" y="325" width="130" height="40" as="geometry" />
        </mxCell>

        <!-- Transitions -->
        <mxCell id="t1" value="创建订单" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#666666;" edge="1" parent="1" source="initial" target="unpaid">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="t2" value="支付成功" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#4caf50;" edge="1" parent="1" source="unpaid" target="paid">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="t3" value="用户取消" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#f44336;" edge="1" parent="1" source="unpaid" target="cancelled">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="180" y="260" as="sourcePoint" />
            <mxPoint x="100" y="320" as="targetPoint" />
          </mxGeometry>
        </mxCell>

        <mxCell id="t4" value="10分钟超时" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#f44336;" edge="1" parent="1" source="unpaid" target="timeout">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="t5" value="乘车完成" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#00796b;" edge="1" parent="1" source="paid" target="completed">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="t6" value="用户申请退票" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#ff9800;" edge="1" parent="1" source="paid" target="refunding">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="t7" value="用户申请改签" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#ff9800;" edge="1" parent="1" source="paid" target="changing">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="640" y="215" as="sourcePoint" />
            <mxPoint x="680" y="320" as="targetPoint" />
          </mxGeometry>
        </mxCell>

        <mxCell id="t8" value="事后退票" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#ff9800;dashed=1;" edge="1" parent="1" source="completed" target="refunding">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="680" y="250" as="sourcePoint" />
            <mxPoint x="580" y="320" as="targetPoint" />
          </mxGeometry>
        </mxCell>

        <mxCell id="t9" value="退款完成" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#7b1fa2;" edge="1" parent="1" source="refunding" target="refunded">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="t10" value="退票取消" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#4caf50;" edge="1" parent="1" source="refunding" target="paid">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="520" y="355" as="sourcePoint" />
            <mxPoint x="520" y="250" as="targetPoint" />
          </mxGeometry>
        </mxCell>

        <mxCell id="t11" value="改签成功" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#00796b;" edge="1" parent="1" source="changing" target="changed">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="t12" value="改签取消" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#4caf50;" edge="1" parent="1" source="changing" target="paid">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="680" y="355" as="sourcePoint" />
            <mxPoint x="640" y="215" as="targetPoint" />
          </mxGeometry>
        </mxCell>

        <!-- To Final States -->
        <mxCell id="t13" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#7b1fa2;" edge="1" parent="1" source="refunded" target="final1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="t14" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#7b1fa2;" edge="1" parent="1" source="changed" target="final4">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="900" y="435" as="sourcePoint" />
            <mxPoint x="900" y="520" as="targetPoint" />
          </mxGeometry>
        </mxCell>

        <mxCell id="t15" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d32f2f;" edge="1" parent="1" source="cancelled" target="final2">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="200" y="390" as="sourcePoint" />
            <mxPoint x="520" y="620" as="targetPoint" />
          </mxGeometry>
        </mxCell>

        <mxCell id="t16" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d32f2f;" edge="1" parent="1" source="timeout" target="final3">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="360" y="470" as="sourcePoint" />
            <mxPoint x="600" y="620" as="targetPoint" />
          </mxGeometry>
        </mxCell>

      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
