# 用户管理需求说明 [原型地址](https://org.modao.cc/app/e6901721256b50fa80884755fcf42250e875e733)

注意，本文档所说用户为C端用户，即小区的住户，扫码出入停车场的车主，扫码充电的电动车车主或通过其他方式关注**绘服务**的人员。

目前**绘服务**只有一个微信服务号客户端，但是未来会有微信小程序，支付宝生活号，支付宝小程序，手机App，因此需要有用户的客户端信息。

## 微信端用户

微信端用户来源分为以下两种途径：

* 扫码关注：通过扫描微信固定二维码扫码关注绘服务，二维码包括小区推广二维码，智能停车场场内缴费码，充电桩充电口动态二维码，充电桩主机二维码

* 页面访问：在微信公众号访问绘服务分享出去的网页，如通知公告，新闻资讯，通过微信的用户授权拿到的用户信息。

* 线上关注：用户通过微信的公众号搜索关注。

创建用户的基础信息均通过拿到的openId向微信获取用户信息（如昵称，头像，所在地），由于绘服务已经绑定了微信的开放平台，因此微信端的用户`唯一标识`可以通过unionId区分或通过应用类型+openId组合区分，因为微信的不同端（小程序，公众号，Ouath2.0授权登录）的openId可能是相同的。微信端创建用户的流程如下图所示。

![微信用户创建流程](image/createWechatUser.png)

三种方式不同之处有以下两点：

* 扫码或线上关注的用户，微信会自动将关注消息推送到我们的后台，推送的数据中带有openId，因此无需获取openId，而页面访问是需要主动向微信方获取openId的。

* 扫秒平台生成的二维码（非公众号关注二维码，公众号关注二维码流程和线上关注一致）关注的用户，微信会带有一个EventKey字段，标识二维码的场景值，需要根据该场景值确定用户的来源。该场景值也决定了该如何处理扫码事件（如充电桩二维码推送充电入口，小区二维码推送小区欢迎页面等）。

## 用户实体关系

平台用户的实体关系如下图所示。

![用户实体关系图](image/userER.png)

各个实体说明如下：

* 用户：主表，存储用户的账号信息，如手机号，密码（第三方授权登录时无密码），用户来源，创建时间，更新时间等；

* 用户个人资料：用户维护的个人资料，如昵称，头像，性别，邮箱，生日等网络社交资料，该资料未必真实。一个用户对应一份个人资料。

* 用户实名信息：用户实名认证信息，中国大陆用户通过身份证认证，存储如身份证正反面照片，身份证号码，性别，生日，姓名等信息。一个用户对应一条实名信息。**该表作为预留设计，目前绘服务端并未启用强制的实名认证**。

* 用户人脸：用户真实人脸照片，用于人脸门禁通行或其他方面。目的在于一个用户只需添加一次人脸，即可在多个小区申请刷脸通行。一个用户对应一条用户人脸记录。

* 人脸变更记录：用户在不同小区可能会上传不同的人脸，或随着年龄变化无法通行后再次更新，该人脸变更记录为人脸的历史版本，方便做数据分析，一个用户人脸对应多条变更记录。

* 用户家庭成员：目前用于住户帮助录入家庭成员的人脸（如小孩，老人不方便自助录入的），一个用户拥有多名家庭成员。

* 用户第三方授权信息：该表用于区分第三方授权对应的用户是否已经被创建，存储用户已授权的第三方的唯一标识信息，如微信平台的unionId，支付宝的userId。一个用户有多条第三方授权信息（如支付宝，微信等）。

* 第三方授权详细信息：该表存储通过第三方授权注册的用户的详细信息，如头像，昵称，openId，所在地，性别等等，方便有必要时可以查看最初的授权信息。

* 用户活跃应用：记录平台用户在平台各个C端应用的使用和活跃情况，如公众号，小程序，支付宝生活号，手机App。需要记录的数据包括应用类型，终端设备，设备唯一标识（App端），推送消息的token（App端），首次活跃时间，最近活跃时间，累计使用次数等。方便查看用户在各个应用的活跃度分布情况。

除用户活跃应用数据表目前没有外，其他数据表结构可以参考绘服务的目前已有的数据表。

## 微信对接注意实现

微信推送的信息入口只允许指定一个，因此平台需要给微信提供统一的一个入口处理微信推送的全部事件。

## 用户家庭成员关系枚举

| 枚举名称 | 枚举别名              | 排序值 |
| ---- | ----------------- | --- |
| 父亲   | father            | 1   |
| 母亲   | mother            | 2   |
| 儿子   | son               | 3   |
| 女儿   | daughter          | 4   |
| 公公   | father_of_husband | 5   |
| 婆婆   | mother_of_husband | 6   |
| 岳父   | father_of_wife    | 7   |
| 岳母   | mother_of_wife    | 8   |
| 兄弟   | brother           | 9   |
| 姐妹   | sister            | 10  |
| 其他   | other             | 11  |

微信端用户选择关系时，应提示“他是你什么人”。

## 微信对接SDK

为简化开发实现，可以考虑使用WxJava开发包，该开发包为开源代码，每两个月发布一次版本。GitHub地址：[https://github.com/wechat-group/WxJava](https://github.com/wechat-group/WxJava)。
