版本 | 修订人 | 备注 | 修改时间 |
---|---|---|---|
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 部署阿里云