| 版本 | 修订人 | 备注 | 修改时间 |
|---|---|---|---|
| V1.0 | hamish | 初稿 | 2019.12.26 |
本文设计文档为19年起草,上市公司会员中心设计概要,适合百万会员的会员中心业务,可以根据业务需要删减逻辑构建微服务,也可以增加业务逻辑构建会员中台。
设计思想实践了DDD, 整体多用了领域服务,没有严格意义的遵循DDD,偏向失血模型。
应用的时候根据自己业务需要改动。
一、引言:
1.1 项目背景
随着业务的扩展,多业务线都会使用到会员服务,为了避免重复开发功能,公司统一各个业务线的会员服务,设计构建会员中台,对接各个业务线。
1.2 术语定****义
本文当中涉及的专业术语定义或解释,一般可以表格形式给出,如表 2-1 所示。
表 2-1
| 编号 | 术语名称 | 术语定义 |
|---|---|---|
| 1 | B2B | |
| 2 | B2C | |
| 3 | 会员 | 注册激活的用户即为会员 |
| 4 | 企业会员 | 认证过企业工商营业执照信息的会员 |
| 5 | 个人会员 | b2c 消费者会员 |
1.3 范围
本文档限定在用户中心服务领域,提供用户信息、管理、用户等级、积分公共服务
1.4 其他约定
- 系统使用 restful 风格接口
- 与业务系统 HTTP 交互,内网权限。
- 业务系统根据 memberId 交互。
二、总体设计
2.1 需求概述
因公司业务线拓展,商城、金融、crm 都需要使用会员信息,crm 专注于客户前期线索管理,审批,需要构建一个多租户中台服务提供会员信息、等级、积分的功能。
2.2 基本设计描述
会员中台服务,使用领域驱动设计思想,微服务化多租户系统,会员域包括会员基本信息、会员附件,会员地址。对外提供 HTTP 服务,限制在内网访问,数据持久化使用 mysql.基于 springboot2.2.2 和 springcloud2.2.0 [Hoxton] 提供 HTTP 服务。
功能结构图:

2.3 主流程设计描述
2.3.1 企业会员信息提交

2.4 技术目标
- SLO
统计周期:1 个月
指标:
-
基础日志文件(log) 从日志中看到程序运行状态
-
响应时间(latency) : 99% 访问延迟 < 300ms
-
QPS: 115
-
平均负载 :cpu: 40% 内存:50% (预估)
-
错误率:5XX 状态小于 0.1%
-
可用性:99.5%
-
SLA
考核指标
三、模块设计
3.1 会员信息模块
会员信息模块,保存会员基本信息,企业会员的企业信息,个人会员的个人信息,会员信息的状态,配合 crm 和商城 实现会员信息提交,修改,会员信息审核,信息状态修改。
3.2 会员附件模块 #
会员信息附件模块,保存会员信息图片附件,图片上传服务暂时由各个业务线独立上传,附件模块保存上传后的信息
3.3 会员地址模块 #
会员地址模块,管理会员的多个收货地址,发票接收地址。
需要确认:收货地址是否有个数,发票地址是否有个数。
3.4 会员积分模块
会员积分,计算,更新 会员的积分
和 crm、商城 交互,支撑多个业务线的营销
积分计算规则由产品提供。
3.5 等级模块
会员等级,计算,更新会员等级信息,用于商城的会员的展示。
等级计算规则由产品提供。
3.6 会员权益模
提供会员权益的服务
四、接口设计
O 的意思是可选,英文缩写 Optional,表示可传可不传。
M 的意思是强制性的,英文缩写 Mandatory,表示是必传的域。
C 的意思是有条件的,英文缩写 Conditional,表示这个域根据条件传输,比如你有个协议是传输商
最新接口文档参见联调环境 swagger 文档
4.1 会员信息查询
HTTP: GET
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
返回:
{
"code": 0,
"data": {
"companyFlag": "string",
"companyName": "string",
"companyType": "string",
"creator": "string",
"gmtCreateTime": "2019-12-30T01:26:12.824Z",
"gmtModifyTime": "2019-12-30T01:26:12.824Z",
"insertAttachmentReqsList": [
{
"businessType": 1,
"channelId": 1000001,
"filePath": "/path/123.jgg",
"fileRealName": "/path/123.jgg",
"fileStorageName": "123.jgg",
"fileType": ".jpg",
"fromType": 1001,
"productId": 1001,
"tenantId": 1000,
"userId": 123456789
}
],
"legalPerson": "string",
"legalPersonIdnum": "string",
"memberId": "string",
"modifier": "string",
"registerTime": "2019-12-30T01:26:12.824Z",
"state": "string",
"unifiedSocialCreditCode": "string"
},
"message": "string",
"success": true
}
4.2 会员基本信息提交
HTTP: POST
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
| companyName | String | 营业执照的企业名称 | M | |
| unifiedSocialCreditCode | String | 统一社会信用代码号 | M | |
| legalPerson | String | 法人姓名 | M | |
| legalPersonIdnum | String | 法人身份证号 | M | |
| companyFlag | String | 企业标识 | M | 企业标识 1、供方,2、需方,3、两者都是 |
| companyType | String | 企业性质 | M | wjlj01:集团内(杭萧关联公司);wjlj00:集团外(纯外部公司);wjlj02:参股公司 |
返回:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.3 会员基本信息删除
HTTP: DELETE
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
返回:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.4 会员基本信息修改
HTTP: PUT
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
| companyName | String | 营业执照的企业名称 | O | |
| unifiedSocialCreditCode | String | 统一社会信用代码号 | O | |
| legalPerson | String | 法人姓名 | O | |
| legalPersonIdnum | String | 法人身份证号 | O | |
| companyFlag | String | 企业标识 | O | 企业标识 1、供方,2、需方,3、两者都是 |
| companyType | String | 企业性质 | O | wjlj01:集团内(杭萧关联公司);wjlj00:集团外(纯外部公司);wjlj02:参股公司 |
返回:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.5 会员营业执照信息查询
URL: http://host:8080/businesslicenses/query
HTTP: POST
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
返回 1:
{
"code": 200,
"data": {
"businessScope": "string",
"companyName": "string",
"id": 0,
"industry": "string",
"legalPerson": "string",
"legalPersonIdnum": "string",
"registerAddress": "string",
"registerBeginDate": "string",
"registerBusinessNo": "string",
"registerCapital": "string",
"registerCurrency": "string",
"registerEndDate": "string",
"registerOrgCode": "string",
"unifiedSocialCreditCode": "string"
},
"message": "操作成功",
"success": true
}
返回 2:
{
"data": null,
"code": 414121,
"message": "营业执照信息不存在~",
"success": false
}
4.6 会员营业执照信息提交
URL: http://host:8080/businesslicenses
HTTP: POST
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
| companyName | String | 营业执照的企业名称 | M | |
| unifiedSocialCreditCode | String | 统一社会信用代码号 | M | |
| registerOrgCode | String | 组织机构代码号 | M | |
| registerBusinessNo | String | 工商注册号 | M | |
| registerAddress | String | 注册地址 | M | |
| registerCapital | String | 注册资本 | M | |
| registerCurrency | String | 币种 | M | |
| registerBeginDate | Date | 经营期限/起 | M | |
| registerEndDate | Date | 经营期限/止 | M | |
| legalPerson | String | 法人姓名 | M | |
| legalPersonIdnum | String | 法人身份证号 | M | |
| industry | String | 所属行业 | M | |
| businessScope | String | 经营(业务)范围 | M |
返回:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.7 会员营业执照信息删除
URL: http://host:8080/businesslicenses
HTTP: DELETE
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
返回 1:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
返回 2:
{
"data": null,
"code": 414121,
"message": "营业执照信息不存在~",
"success": false
}
4.8 会员营业执照信息修改
URL: http://host:8080/businesslicenses
HTTP: PUT
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
| companyName | String | 营业执照的企业名称 | O | |
| unifiedSocialCreditCode | String | 统一社会信用代码号 | O | |
| registerOrgCode | String | 组织机构代码号 | O | |
| registerBusinessNo | String | 工商注册号 | O | |
| registerAddress | String | 注册地址 | O | |
| registerCapital | String | 注册资本 | O | |
| registerCurrency | String | 币种 | O | |
| registerBeginDate | Date | 经营期限/起 | O | |
| registerEndDate | Date | 经营期限/止 | O | |
| legalPerson | String | 法人姓名 | O | |
| legalPersonIdnum | String | 法人身份证号 | O | |
| industry | String | 所属行业 | O | |
| businessScope | String | 经营(业务)范围 | O |
返回 1:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
返回 2:
{
"data": null,
"code": 414121,
"message": "营业执照信息不存在~",
"success": false
}
4.9 会员附件信息查询
URL: http://host:8080/attachments/query
HTTP: POST
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
| businessType | String | 业务类型 | M |
返回 1:
{
"code": 200,
"data": {
"businessType": "string",
"creator": "string",
"deleted": "string",
"filePath": "string",
"fileRealName": "string",
"fileStorageName": "string",
"fileType": "string",
"fromType": "string",
"gmtCreateTime": "2019-12-30T02:58:02.941Z",
"gmtModifyTime": "2019-12-30T02:58:02.941Z",
"id": 0,
"modifier": "string",
"productId": 0,
"remark": "string",
"state": "string",
"tenantId": 0,
"userId": "string"
},
"message": "操作成功",
"success": true
}
返回 2:
{
"data": null,
"code": 414111,
"message": "附件不存在~",
"success": false
}
4.10 会员附件信息提交
URL: http://host:8080/attachments
HTTP: POST
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
| businessType | String | 业务类型 | M | |
| fromType | String | 来源 | M | |
| fileType | String | 文件类型 | M | |
| filePath | String | 存储路径 | M | |
| fileRealName | String | 文件真实名称 | M | |
| fileStorageName | String | 文件存储名称 | M |
返回:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.11 会员附件信息删除
URL: http://host:8080/attachments
HTTP: DELETE
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
返回 1:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
返回 2:
{
"data": null,
"code": 414111,
"message": "附件不存在~",
"success": false
}
4.12 会员附件信息修改
URL: http://host:8080/attachments
HTTP: PUT
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
| businessType | String | 业务类型 | M | |
| fromType | String | 来源 | M | |
| fileType | String | 文件类型 | M | |
| filePath | String | 存储路径 | M | |
| fileRealName | String | 文件真实名称 | M | |
| fileStorageName | String | 文件存储名称 | M |
返回 1:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
返回 2:
{
"data": null,
"code": 414111,
"message": "附件不存在~",
"success": false
}
4.13 会员发票信息查询
URL: http://host:8080/invoices/query
HTTP: POST
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
返回 1:
{
"code": 200,
"data": {
"generalTaxpayer": "string",
"corporationTax": "string",
"invoiceType": "string",
"invoiceAddress": "string",
"invoicePhone": "string"
},
"message": "操作成功",
"success": true
}
4.14 会员发票信息提交
URL: http://host:8080/invoices
HTTP: POST
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
| generalTaxpayer | String | 一般纳税人 | 1:是,0:否 | |
| corporationTax | String | 纳税人识别号 | ||
| invoiceType | String | 发票类型 | spcl、专票;ord、普票 | |
| invoiceAddress | String | 开票地址 | ||
| invoicePhone | String | 开票电话 |
返回:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.15 会员发票信息删除
URL: http://host:8080 /invoices
HTTP: DELETE
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
返回 1:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.16 会员发票信息修改
URL: http://host:8080/attachments
HTTP: PUT
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| companyId | Long | 企业 Id | M | 业务系统使用 companyId 登录作为 userId 使用 |
| generalTaxpayer | String | 一般纳税人 | 1:是,0:否 | |
| corporationTax | String | 纳税人识别号 | ||
| invoiceType | String | 发票类型 | spcl、专票;ord、普票 | |
| invoiceAddress | String | 开票地址 | ||
| invoicePhone | String | 开票电话 |
返回 1:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.17 会员联系人信息查询
URL: http://host:8080/contacts/query
HTTP: POST
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| memberId | Long | 会员 Id | M |
返回 1:
{
"code": 200,
"data": {
"generalTaxpayer": "string",
"corporationTax": "string",
"invoiceType": "string",
"invoiceAddress": "string",
"invoicePhone": "string"
},
"message": "操作成功",
"success": true
}
4.18 会员联系人信息提交
URL: http://host:8080/contacts
HTTP: POST
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| memberId | Long | 企业 Id | M | |
| contactName | String | 联系人姓名 | O | |
| contactMobile | String | 联系人手机号 | O | |
| contactDuty | String | 联系人职务 | O | |
| contactEmail | String | 联系人邮箱 | O | |
| contactTelephone | String | 联系人固话 | O |
返回:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.19 会员联系人信息删除
URL: http://host:8080/contacts
HTTP: DELETE
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| memberId | Long | 会员 Id | M |
返回 1:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.20 会员联系人信息修改
URL: http://host:8080/contacts
HTTP: PUT
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| memberId | Long | 企业 Id | M | |
| contactName | String | 联系人姓名 | O | |
| contactMobile | String | 联系人手机号 | O | |
| contactDuty | String | 联系人职务 | O | |
| contactEmail | String | 联系人邮箱 | O | |
| contactTelephone | String | 联系人固话 | O |
返回 1:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.21 会员收货地址信息查询
URL: http://host:8080/address /query
HTTP: POST
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| memberId | Long | 会员 Id | M |
返回 1:
{
"code": 200,
"data": {
"addressLinkman": "string",
"linkmanMobile": "string",
"province": "string",
"city": "string",
"zone": "string",
"town": "string",
"address": "string",
"addressDetail": "string"
},
"message": "操作成功",
"success": true
}
4.22 会员收货地址信息提交
HTTP: POST
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| memberId | Long | 会员 Id | M | |
| addressLinkman | String | 联系人姓名 | O | |
| linkmanMobile | String | 联系人手机号 | O | |
| province | String | 省份 | O | |
| city | String | 城市 | O | |
| zone | String | 区县 | O | |
| town | String | 乡镇 | O | |
| address | String | 地址 | O | |
| addressDetail | String | 详细地址 | O | |
| postalCode | String | 邮政编码 | O | |
| addressType | String | 地址类型 | O | 10:发票邮寄地址;20:收货地址 |
返回:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.23 会员收货地址信息删除
HTTP: DELETE
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| memberId | Long | 会员 Id | M |
返回 1:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.24 会员收货地址信息修改
HTTP: PUT
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| memberId | Long | 会员 Id | M | |
| addressLinkman | String | 联系人姓名 | O | |
| linkmanMobile | String | 联系人手机号 | O | |
| province | String | 省份 | O | |
| city | String | 城市 | O | |
| zone | String | 区县 | O | |
| town | String | 乡镇 | O | |
| address | String | 地址 | O | |
| addressDetail | String | 详细地址 | O | |
| postalCode | String | 邮政编码 | O | |
| addressType | String | 地址类型 | O | 10:发票邮寄地址;20:收货地址 |
返回 1:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.25 会员等级信息查询
URL: http://host:8080/level /query
HTTP: POST
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| memberId | Long | 会员 Id | M |
返回 1:
{
"code": 200,
"data": {
"level": "string"
},
"message": "操作成功",
"success": true
}
4.26 会员等级信息提交
HTTP: POST
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| memberId | Long | 会员 Id | M | |
| level | String | 等级 | O |
返回:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.27 会员等级信息修改
HTTP: PUT
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| memberId | Long | 会员 Id | M | |
| level | String | 等级 | O |
返回 1:
{
"data": null,
"code": 200,
"message": "操作成功",
"success": true
}
4.28 会员积分信查询
HTTP: GET
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| memberId | Long | 会员 Id | M |
返回 1:
{
"code": 200,
"data": {
"pointAll": "string"
},
"message": "操作成功",
"success": true
}
4.29 会员权益信查询
URL: http://host:8080/interests
HTTP: GET
参数:
| 参数名 | 类型 | 含义 | 是否必传 | 备注 |
|---|---|---|---|---|
| tenantId | Long | 租户 Id | M | |
| productId | Long | 租户下的产品 Id | M | |
| memberId | Long | 会员 Id | M |
返回 1:
{
"code": 200,
"data": {
},
"message": "操作成功",
"success": true
}
五、领域划分
5.1 领域划分
5.1.1 会员信息域
5.1.2 企业信息域
5.1.2 个人信息域
5.1.3 会员信息附件域
5.1.4 会员信息地址域
5.1.5 会员积分域
5.1.6 会员等级域
5.1.7 会员权益
5.2 领域模型图
图 5-1 会员中心领域模型图

六、数据库****设计
6.1 会员表(mi_member)
| 字段 | 类型 | 长度 | 是否为空 | 备注 |
|---|---|---|---|---|
| id | bigint | 12 | 否 | 主键 |
| user_id | varchar | 40 | 否 | 用户 id |
| member_id | varchar | 40 | 否 | 会员 id |
| company_id | varchar | 40 | 否 | 企业 id |
| state | char | 1 | 否 | 会员状态 |
| type | char | 1 | 否 | 会员类型 1 企业需方会员 2 企业供方会员 3 个人会员 |
| remark | varchar | 255 | ||
| register_time | datetime | 否 | 注册日期 | |
| tenant_id | bigint | 20 | 否 | 租户 id |
| product_id | bigint | 20 | 否 | 产品 id |
| deleted | char | 1 | 否 | 删除状态 1 正常 0 删除 |
| gmt_create_time | datetime | 否 | 创建时间 | |
| gmt_modify_time | datetime | 修改时间 | ||
| creator | varchar | 20 | 创建人 | |
| modifier | varchar | 20 | 修改人 |
6.2 企业会员 基本信息(mi_company_info)
| 字段 | 类型 | 长度 | 是否为空 | 备注 |
|---|---|---|---|---|
| id | bigint | 12 | 否 | 主键 |
| user_id | varchar | 40 | 否 | 用户 id |
| company_id | varchar | 40 | 否 | 企业 id |
| comapny_short_name | char | 1 | 否 | 企业简称 |
| company_english_name | char | 1 | 否 | 英文名称 |
| company_code | varchar | 255 | 企业编码 | |
| company_type | datetime | 否 | 企业性质 | |
| tenant_id | bigint | 20 | 否 | 租户 id |
| product_id | bigint | 20 | 否 | 产品 id |
| deleted | char | 1 | 否 | 删除状态 1 正常 0 删除 |
| gmt_create_time | datetime | 否 | 创建时间 | |
| gmt_modify_time | datetime | 修改时间 | ||
| creator | varchar | 20 | 创建人 | |
| modifier | varchar | 20 | 修改人 |
6.3 企业背景信息(mi_company_background)
| 字段 | 类型 | 长度 | 是否为空 | 备注 |
|---|---|---|---|---|
| id | bigint | 12 | 否 | 主键 |
| company_id | varchar | 40 | 否 | 企业 id |
| business_background | char | 100 | 企业背景 | |
| enterprise_size | varchar | 10 | 企业规模 | |
| enterprises_nature | varchar | 255 | 企业性质 | |
| annual_sales | varchar | 10 | 年销售额 | |
| local_ranking | varchar | 10 | 当地排名 | |
| total_assets | varchar | 10 | 总资产 | |
| ownership_assets | varchar | 10 | 自有资产 | |
| employee_numbers | varchar | 10 | 员工数量 | |
| annual_tax_payment | varchar | 10 | 年缴税额 | |
| product_varieties | varchar | 需求产品品种 | ||
| credit_rating | varchar | 10 | 资信等级 | |
| tenant_id | bigint | 20 | 否 | 租户 id |
| product_id | bigint | 20 | 否 | 产品 id |
| deleted | char | 1 | 否 | 删除状态 1 正常 0 删除 |
| gmt_create_time | datetime | 否 | 创建时间 | |
| gmt_modify_time | datetime | 修改时间 | ||
| creator | varchar | 20 | 创建人 | |
| modifier | varchar | 20 | 修改人 |
6.4 企业会员营业执照信息(mi_business_license)
| 字段 | 类型 | 长度 | 是否为空 | 备注 |
|---|---|---|---|---|
| id | bigint | 12 | 否 | 主键 |
| company_id | varchar | 40 | 否 | 企业 id |
| company_name | char | 40 | 否 | 企业名称 |
| unified_social_credit_code | varchar | 40 | 否 | 统一社会信用代码号 |
| register_org_code | varchar | 40 | 组织机构代码号 | |
| register_business_no | varchar | 40 | 工商注册号 | |
| register_address | varchar | 40 | 否 | 注册地址 |
| register_capital | varchar | 40 | 否 | 注册资本 |
| register_currency | varchar | 10 | 否 | 币种 |
| register_begin_date | date | 0 | 否 | 经营期限/起 |
| register_end_date | date | 0 | 否 | 经营期限/止 |
| legal_person | varchar | 10 | 法人代表 | |
| industry | varchar | 10 | 所属行业 | |
| business_scope | varchar | 100 | 经营(业务)范围 | |
| legal_person_idnum | varchar | 20 | 法人身份证号 | |
| tenant_id | bigint | 20 | 否 | 租户 id |
| product_id | bigint | 20 | 否 | 产品 id |
| deleted | char | 1 | 否 | 删除状态 1 正常 0 删除 |
| gmt_create_time | datetime | 否 | 创建时间 | |
| gmt_modify_time | datetime | 修改时间 | ||
| creator | varchar | 20 | 创建人 | |
| modifier | varchar | 20 | 修改人 |
6.5企业会员发票信息**(mi_invoice)**
| 字段 | 类型 | 长度 | 是否为空 | 备注 |
|---|---|---|---|---|
| id | bigint | 12 | 否 | 主键 |
| company_id | varchar | 40 | 否 | 企业 id |
| general_taxpayer | char | 40 | 否 | 一般纳税人;1:是,0:否 |
| corporation_tax | varchar | 40 | 否 | 纳税人识别号 |
| invoice_type | varchar | 40 | 发票类型;spcl、专票;ord、普票’ | |
| invoice_address | varchar | 40 | 开票地址 | |
| invoice_phone | varchar | 40 | 否 | 开票电话 |
| state | varchar | 40 | 否 | 数据状态 0 未生效 1 生效 |
| tenant_id | bigint | 20 | 否 | 租户 id |
| product_id | bigint | 20 | 否 | 产品 id |
| deleted | char | 1 | 否 | 删除状态 1 正常 0 删除 |
| gmt_create_time | datetime | 否 | 创建时间 | |
| gmt_modify_time | datetime | 修改时间 | ||
| creator | varchar | 20 | 创建人 | |
| modifier | varchar | 20 | 修改人 |
6.6会员联系人信息**(mi_contacts)**
| 字段 | 类型 | 长度 | 是否为空 | 备注 |
|---|---|---|---|---|
| id | bigint | 12 | 否 | 主键 |
| member_id | varchar | 40 | 否 | 会员 id |
| contact_name | char | 40 | 否 | 联系人姓名 |
| contact_mobile | varchar | 11 | 否 | 联系人手机号 |
| contact_duty | varchar | 10 | 联系人职务 | |
| contact_email | varchar | 40 | 联系人邮箱 | |
| contact_telephone | varchar | 32 | 否 | 联系人固话 |
| user_type | char | 1 | 否 | 1 个人 2 是企业 |
| tenant_id | bigint | 20 | 否 | 租户 id |
| product_id | bigint | 20 | 否 | 产品 id |
| deleted | char | 1 | 否 | 删除状态 1 正常 0 删除 |
| gmt_create_time | datetime | 否 | 创建时间 | |
| gmt_modify_time | datetime | 修改时间 | ||
| creator | varchar | 20 | 创建人 | |
| modifier | varchar | 20 | 修改人 |
6.7附件信息**(mi_attachment)**
| 字段 | 类型 | 长度 | 是否为空 | 备注 |
|---|---|---|---|---|
| id | bigint | 12 | 否 | 主键 |
| member_id | varchar | 40 | 否 | 会员 id |
| business_type | char | 40 | 否 | 业务类型 |
| from_type | varchar | 11 | 否 | 来源(1001 商城 1003 crm) |
| file_type | varchar | 10 | 文件类型(.jpg .png) | |
| file_path | varchar | 40 | 存储路径 | |
| file_real_name | varchar | 32 | 否 | 文件真实名称 |
| file_storage_name | char | 1 | 否 | 文件存储名称 |
| remark | varchar | 255 | 备注 | |
| state | char | 1 | 数据状态 0 未生效 1 生效 | |
| tenant_id | bigint | 20 | 否 | 租户 id |
| product_id | bigint | 20 | 否 | 产品 id |
| deleted | char | 1 | 否 | 删除状态 1 正常 0 删除 |
| gmt_create_time | datetime | 否 | 创建时间 | |
| gmt_modify_time | datetime | 修改时间 | ||
| creator | varchar | 20 | 创建人 | |
| modifier | varchar | 20 | 修改人 |
6.8会员收货地址**(mi_address)**
| 字段 | 类型 | 长度 | 是否为空 | 备注 |
|---|---|---|---|---|
| id | bigint | 12 | 否 | 主键 |
| member_id | varchar | 40 | 否 | 会员 id |
| address_linkman | char | 40 | 否 | 地址联系人 |
| linkman_mobile | varchar | 11 | 否 | 联系人手机号 |
| province | varchar | 10 | 省份 | |
| city | varchar | 40 | 城市 | |
| zone | varchar | 32 | 区县 | |
| town | char | 1 | 乡镇 | |
| address | varchar | 255 | 地址 | |
| address_detail | varchar | 32 | 详细地址 | |
| postal_code | varchar | 10 | 邮政编码 | |
| address_type | varchar | 2 | 地址类型 | |
| sequence | char | 1 | 排序 | |
| state | char | 1 | 数据状态 0 未生效 1 生效 | |
| tenant_id | bigint | 20 | 否 | 租户 id |
| product_id | bigint | 20 | 否 | 产品 id |
| deleted | char | 1 | 否 | 删除状态 1 正常 0 删除 |
| gmt_create_time | datetime | 否 | 创建时间 | |
| gmt_modify_time | datetime | 修改时间 | ||
| creator | varchar | 20 | 创建人 | |
| modifier | varchar | 20 | 修改人 |
6.9 会员等级(mi_level)
| 字段 | 类型 | 长度 | 是否为空 | 备注 |
|---|---|---|---|---|
| id | bigint | 12 | 否 | 主键 |
| member_id | varchar | 40 | 否 | 会员 id |
| level | char | 40 | 否 | 等级 |
| tenant_id | bigint | 20 | 否 | 租户 id |
| product_id | bigint | 20 | 否 | 产品 id |
| deleted | char | 1 | 否 | 删除状态 1 正常 0 删除 |
| gmt_create_time | datetime | 否 | 创建时间 | |
| gmt_modify_time | datetime | 修改时间 | ||
| creator | varchar | 20 | 创建人 | |
| modifier | varchar | 20 | 修改人 |
6.1****0 自然人会员**(mi_person_info)**
| 字段 | 类型 | 长度 | 是否为空 | 备注 |
|---|---|---|---|---|
| id | bigint | 12 | 否 | 主键 |
| user_id | varchar | 40 | 否 | 用户 Id |
| member_id | varchar | 40 | 否 | 会员 id |
| nick_name | varchar | 40 | 否 | 昵称 |
| name | varchar | 11 | 否 | 姓名 |
| moblie | varchar | 11 | 电话 | |
| varchar | 40 | 邮箱 | ||
| sex | char | 1 | 性别 | |
| id_card | varchar | 20 | 身份证号 | |
| birthday | varchar | 255 | 生日 | |
| province | varchar | 10 | 省份 | |
| city | varchar | 10 | 城市 | |
| zone | varchar | 10 | 区 | |
| state | char | 1 | 数据状态 0 未生效 1 生效 | |
| tenant_id | bigint | 20 | 否 | 租户 id |
| product_id | bigint | 20 | 否 | 产品 id |
| deleted | char | 1 | 否 | 删除状态 1 正常 0 删除 |
| gmt_create_time | datetime | 否 | 创建时间 | |
| gmt_modify_time | datetime | 修改时间 | ||
| creator | varchar | 20 | 创建人 | |
| modifier | varchar | 20 | 修改人 |
七、技术架构
7.1 系统分层架构图
图7-1 会员中心技术架构图

7.2 技术选型
| 技术栈 | 用途说明 |
|---|---|
| SpringBoot2.2.2 | |
| SpringCloud2.2.0[Hoxton] | Spring Cloud 为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线) |
| Nacos | 配置中心、服务注册中心 |
| Mybatis-plus | Mybatis 功能加强,分页 |
| Mysql | 关系型数据库,数据持久化,业务数据存储 |
八、数据架构
8.1 持久化机制的选择
Redis 缓存,MySQL 数据库持久化。Mysql 使用阿里云 RDS。建议DBA 搭建MySQL 集群
8.2 持久化存储方案
mybatis-plus + Mysql 持久存储业务数据。
8.3 数据同步与复制策略
RDS 策略。
8.4 数据架构图
图8-1 会员中心数据架构图

九、部署方案
Jenkins 部署阿里云
1万+



被折叠的 条评论
为什么被折叠?



