@startuml left to right direction skinparam monochrome true actor "个人用户\n经销商\n参展商\n等等" as User actor "管理员" as SysUser rectangle "CMS + 管理系统" { "CMS浏览:\n门户信息\n公告\n等等" as (cms) "CMS发布:\n门户信息\n公告\n等等" as (cmsSys) "短信发送服务" as (sms) "用户信息" as (userInfo) "楼层、展会、参展商信息" as (3info) (专属海报-企业) <.. (分享邀请-企业) : <<包含>> (sms) <.. (营销短信) : <<依赖>> (cms) ..> (cmsSys) : <<依赖>> User --> (cms) (3info) <-- SysUser (cmsSys) <-- SysUser (userInfo) <-- SysUser (分享邀请-企业) <-- SysUser (营销短信) <-- SysUser } rectangle 微信服务 { "实名+人脸识别" as (wx) "解析身份信息" as (wx2) (wx) ..> (wx2) : <<包含>> (wx2) ..> (userInfo) : <<依赖>> } rectangle "硬件-门禁" { "人脸识别" as (jcc) "解析身份信息" as (jcc2) (进出场) ..> (jcc) : <<包含>> (jcc) ..> (jcc2) : <<包含>> (jcc2) ..> (userInfo) : <<依赖>> } rectangle 小程序 { "登录/注册" as (login) User --> (login) (login) ..> (wx) : <<依赖>> (login) ..> (渠道来源) : <<包含>> (login) ..> (短信验证码) : <<包含>> (短信验证码) ..> (sms) : <<依赖>> User --> (分享邀请-个人) (分享邀请-个人) .> (专属海报-个人) : <<包含>> User --> (专属海报-个人) : <<浏览其它用户的海报>> (专属海报-个人) ..> (邀请关系关联) : <<包含>> (邀请关系关联) ..> (userInfo) : <<依赖>> User --> (进出场) User --> (导航) (导航) ..> (地图) : <<包含>> (导航) ..> (线上展馆) : <<包含>> (地图) ..> (3info) : <<依赖>> } @enduml @startuml left to right direction skinparam monochrome true map "字典-渠道" as channel{ code => PK name => } map "现有CMS的用户表" as u{ id => PK ... => } map "邀请海报" as invitation { id => PK url => 海报的访问地址 content => 海报的内容\n是图片还是富文本?\n根据业务来定,可能还要单独的表 code => 邀请码? user_id => 用户ID type => 类型\n区别个人还是企业 } invitation::user_id --> u::id map "用户扩展表" as user{ user_id => PK:用户ID invitation_user => 邀请的用户 channel_code => 注册时的渠道码\n保存当时选择的渠道快照 channel_name => 注册时的渠道名\n保存当时选择的渠道快照 微信相关 => 不清楚CMS是否能接入微信\n不能的话,就要扩展微信相关字段 } user::user_id --> u::id user::invitation_user --> u::id user::channel_code ..> channel::code user::channel_name ..> channel::name map "参展商信息" as exhibitors{ user_id => PK:用户ID ... => 一些说明或公司介绍等字段? } exhibitors::user_id --> u::id map "展会" as act{ id => PK start_time => 展会开始时间 end_time => 展会结束时间 ... => 一些展会的介绍等字段? } map "字典-展位" as booth{ code => PK:展位比如1-001 floor => 楼层 ... => 一些位置的介绍说明等字段? } map "展会详情" as act_info{ id => PK act_id => 展会ID booth_code => 展位编码 exhibitors_id => 参展商ID ... => } act_info::act_id --> act::id act_info::booth_code --> booth::code act_info::exhibitors_id --> exhibitors::user_id map "短信" as sms{ id => PK message => 短信消息 code => 验证码,可能会有 user_id => 接收的用户 tel => 电话号码 status => 状态,默认1\n1:未发送\n2:发送成功\n3:发送失败 max_retry => 最大失败重试次数,默认3 retry => 已失败重试次数,默认0 } map 现在CMS的文章表 { id => PK content => 文章内容 } @enduml @startuml participant 小程序 as ui participant 后台 as sys ui -> sys: wx.login 登录,带上code sys --> ui: 返回用户在微信的唯一标识openid\n如果已经注册过用,就返回用户信息和登录标识cookie\n如果没注册过,不会有登录标识cookie ui -> sys: 游客注册:\n如果没有用户信息,就是”游客“,就调用xx接口保存昵称和头像\n真实注册:\n调用”注册“接口保存用户的全部信息 sys --> ui: 注册的结果 ui -> sys: 业务操作,带上登录标识cookie @enduml @startuml participant 用户 as user participant 亚洲展会小程序 as yz participant 票务系统 as pw participant 硬件闸机 as zj participant 支付宝 as zfb == 二维码 == user -> yz: 登录、注册之后,生成入场二维码 user -> zj: 出示入场二维码 zj -> zj: 识别二维码 zj -> pw: 携带二维码数据访问接口 pw -> yz: 携带二维码数据访问接口 yz -> yz: 执行判断逻辑\n判断该二维码是否可以入场 yz --> pw: 返回是否可放行的结果 pw --> zj: 返回是否可放行的结果 zj --> zj: 根据结果判断是否开闸 == 人脸识别 == user -> yz: 注册时要录入人脸图片 yz -> pw: 用户增、删、改时\n都要及时同步用户身份证号码 pw -> zfb: 用身份证号码拿到人脸图片 user -> zj: 在闸机前扫描人脸 zj -> zj: 拍照人脸图片 zj -> pw: 携带人脸图片访问接口 pw -> pw: 识别人脸图片\n根据人脸图片查出对应的用户 pw -> yz: 携带用户信息访问接口 yz -> yz: 执行判断逻辑\n判断该用户是否可以入场 yz --> pw: 返回是否可放行的结果 pw --> zj: 返回是否可放行的结果 zj --> zj: 根据结果判断是否开闸 @enduml