时序图
登录逻辑
sequenceDiagram
participant 用户
participant 微信小程序
participant 微信小程序缓存
participant 后端服务器
participant 数据库
用户->>微信小程序: 启动小程序
activate 微信小程序
微信小程序->>微信小程序缓存: 检查本地token
alt token有效
微信小程序->>微信小程序缓存: 使用现有token
else token无效
微信小程序->>后端服务器: POST /auth/token
后端服务器-->>微信小程序: 返回新token
微信小程序->>微信小程序缓存: 存储token
end
微信小程序->>微信小程序缓存: 检查userinfo
alt userinfo存在
微信小程序->>用户: 直接进入首页
else userinfo不存在
微信小程序->>用户: 跳转登录页面
用户->>微信小程序: 点击登录按钮
微信小程序->>后端服务器: GET /userinfo (携带token)
后端服务器->>数据库: 查询用户信息
alt 用户已注册
数据库-->>后端服务器: 返回userinfo
后端服务器-->>微信小程序: 200 返回用户数据
微信小程序->>微信小程序缓存: 存储userinfo
微信小程序->>用户: 跳转首页
else 用户未注册
后端服务器-->>微信小程序: 404 用户未注册
微信小程序->>用户: 显示注册引导弹窗
用户->>微信小程序: 填写注册信息
微信小程序->>后端服务器: POST /users (注册数据)
后端服务器->>数据库: 创建用户记录
数据库-->>后端服务器: 201 创建成功
后端服务器-->>微信小程序: 返回完整userinfo
微信小程序->>微信小程序缓存: 更新userinfo
微信小程序->>用户: 自动跳转首页
end
end
deactivate 微信小程序
注册
sequenceDiagram
participant 用户
participant 微信小程序
participant 微信小程序缓存
participant 后端服务器
participant 数据库
用户->>微信小程序: 点击注册
activate 微信小程序
微信小程序-->>用户: 展示协议条款
用户-->>微信小程序: 勾选状态
alt 已勾选协议
微信小程序->>后端服务器: POST /registry_user
activate 后端服务器
后端服务器->>数据库: 写入用户数据
activate 数据库
数据库-->>后端服务器: 写入成功
deactivate 数据库
后端服务器-->>微信小程序: 返回 userinfo
deactivate 后端服务器
微信小程序->>微信小程序缓存: 存储 userinfo
微信小程序->>用户: 显示注册成功
微信小程序->>用户: 自动跳转至首页
else 未勾选协议
微信小程序-->>用户: 弹窗提示需勾选协议
end
deactivate 微信小程序
graph TD
A[开始] --> B[用户注册]
B --> B0{输入UID?}
B0 -->|是| H[正式用户替换临时用户]
B0 -->|否| B1[生成唯一UID]
%% 替换临时用户流程
H --> H1[验证临时UID有效性]
H1 -->|有效| H2[创建正式用户]
H2 --> H3[查询临时用户表]
H3 --> H4[复制userinfo到正式用户]
H4 --> H5[查询临时关系表]
H5 --> H6[复制relationship到正式用户]
H6 --> H7[删除临时用户]
H7 --> H8[通知相关用户]
H8 --> END[注册完成]
H1 -->|无效| TERM1[终止流程]
%% 正常注册流程
B1 --> B2[创建userinfo]
B2 --> B3[创建relationship]
B3 --> END[注册完成]
%% 添加亲属流程
A --> C[添加亲属]
C --> C00[查询原有关系]
C00 --> C000{关系已存在?}
C000 -->|是| C001[显示现有关系详情]
C001 --> C002{确认继续?}
C002 -->|是| C0{提供目标UID?}
C002 -->|否| TERM4[终止流程]
C000 -->|否| C0{提供目标UID?}
C0 -->|是| C1[验证UID类型]
C0 -->|否| C2[创建临时用户]
C2 --> C2a[生成临时UID]
C2a --> C2b[创建临时userinfo]
C2b --> C2c[自动添加确认关系]
C2c --> C2d[当前用户关系表添加]
C1 --> C1a{UID类型}
C1a -->|无效UID| TERM2[终止流程]
C1a -->|正式用户| D[验证目标用户设置]
C1a -->|临时用户| E[关联临时用户]
D --> D1{允许他人添加?}
D1 -->|是| D2[双方添加未确认关系]
D1 -->|否| TERM3[终止流程]
E --> E1[双方添加未确认关系]
E1 --> E1c[获取临时用户创建者]
E1c --> E1d[发送通知给创建者]
%% 通知处理流程
A --> G[处理通知]
G --> G1{通知类型}
G1 -->|关系确认| G2[显示关系详情]
G2 --> G3{用户选择}
G3 -->|同意| G4[更新关系状态]
G3 -->|拒绝| G5[删除关系]
G1 -->|UID替换| G7[显示替换邀请]
G7 --> G8{用户选择}
G8 -->|接受| G9[执行UID替换]
G8 -->|拒绝| G10[标记已读]
%% 血缘查询
A --> I[血缘查询]
I --> I1[递归查询关系]
%% 样式定义
classDef process fill:#e6f7ff,stroke:#333;
classDef decision fill:#ffe6e6,stroke:#333;
classDef notification fill:#f0ffe6,stroke:#333;
classDef terminate fill:#ffcccc,stroke:#333;
classDef query fill:#e6ffe6,stroke:#333;
class B1,B2,B3,H2,H4,H6,H7,G4,G5,G9,I1,C2a,C2b,C2d,C00,C001 process
class B0,C0,C1a,D1,G3,G8,C000,C002 decision
class H8,E1d,G2,G7 notification
class TERM1,TERM2,TERM3,TERM4 terminate
class H3,H5 query