文章目录
设计脑图
功能性
非功能性
功能设计文档
1. 需求分析
1.1、功能性需求
针对主数据管理系统(MDM)需要与外部系统进行主数据交互的需求,设计了以下数据分发管理功能,以实现敏感字段过滤、手动控制数据分发、直观展示分发数据场景以及便捷高效的系统间数据交互:
- 敏感字段过滤:根据权限配置过滤掉敏感字段,确保数据的安全性和合规性。
- 手动控制数据分发:允许业务管理员手动控制数据分发的触发和停止。
- 分发数据场景展示:提供直观的界面展示,用于显示已经分发的数据场景。
- 高效的系统间数据交互:为了提高数据传递的效率和便捷性。
适用对象:获取MDM主数据的外部系统、接收MDM分发数据的外部系统
功能场景描述:
-
系统A需要从MDM拉取数据
当有系统A需要拉取MDM物料数据时,MDM需要过滤掉对于系统A来说没有权限查看的敏感数据。
在系统A数据使用审批(线下)通过之后,MDM业务管理员通过执行步骤(已维护直接跳过):
- 维护系统A信息
- 维护过滤出敏感字段的通用数据权限模板
- 配置拉取策略(绑定接入方、调用限制、授权模板、状态、有效期等)
后,系统A可通过(定时)调用MDM系统方提供的(已开发好的)的标准物料主数据查询接口,拉取到过滤后的物料主数据。
-
MDM向系统B分发数据
当MDM需要集成系统B,并向其分发物料主数据时,发送的数据需要过滤掉系统B没有权限获取的敏感数据。
在MDM需要开发推送数据到系统B的需求场景时(如:场景:物料申请-OA审批通过-推送数据到CRMS),系统B数据使用审批(线下)通过之后,MDM业务管理员通过执行步骤(如已维护跳过):
- 维护系统B信息
- 维护需要过滤敏感字段的通用数据权限模板
后,告知MDM系统方,MDM系统方开发人员在对应需求场景中,通过执行步骤(如已维护跳过):
- 维护数据对象
- 开发标准通用主数据推送接口
- 维护推送场景(比如:物料申请),生成推送任务(目的:直观展示是哪些场景何时分发了数据)
后,告知业务管理员,业务管理员通过MDM系统方维护的场景来配置分发策略,执行步骤:
- 配置分发策略,包括绑定接入方、指定推送场景、授权模板、重试次数、状态和有效时间等。
后,MDM系统方开发人员通过调用对应场景下的配置策略,过滤推送到系统B的敏感数据。
具体功能点:
-
消费方管理
外部系统基础信息管理。
包含消费方新增、修改、删除、列表查看功能。
-
元对象管理(字典)
数据拉取元对象:完整主数据对象,如物料、客户等。
数据推送元对象:场景,如物料新增、客户上市等。
包含新增、修改、删除、列表查看功能。
-
权限模板管理
主数据元对象,具体授权字段。
包含模板的新增、修改、删除、列表等功能。
-
数据分发配置管理
配置外部系统接入方对应数据分发策略。
具体配置内容:
-
被动拉取:绑定接入方、数据授权模板、调用限制、生效状态、有效起止时间
-
主动推送:绑定接入方、选择业务推送场景、数据授权模板、重试次数、生效状态、有效起止时间
-
-
分发任务管理
基于数据推送场景自动创建一条分发任务;展示哪些场景下何时分发数据(场景、创建时间)。
包含列表功能。
-
分发日志管理
基于分发任务自动推送创建分发日志,记录具体分发数据;对于日志中失败记录,可进行手动推送。
包含列表查看、手动重新分发按钮功能。
-
异常提醒功能
对于分发异常数据、系统异常,钉钉推送给运维人员处理。
包含钉钉消息推送功能。
1.2、非功能性需求
- 性能
- 避免同时处理并响应多个数据获取请求时出现响应时间长。
- 可用性
- 系统运行稳定性可靠,避免异常崩溃或意外停机。
- 并发性
- 该功能无并发场景。
- 安全性
- 确保只有经过认证授权的外部系统才能访问系统数据资源。
- 确保数据传输过程的数据完整性、可验证性、安全性,避免被篡改。
- 确保数据在传输过程中得到保护(非必须)。
2. 功能设计
2.1 业务流程图
MDM数据被动拉取、或主动分发时,不同参与者处理的业务活动内容。主要分为:接入方、业务管理员、系统方。
2.2 数据流图
顶层数据流图:
细化数据流图:
2.3 表结构设计
消费方管理、权限模板管理、分发配置管理、分发任务管理表、分发日志记录表结构设计如下;元对象(数据对象、场景)管理为字典管理。
tn_mdm_date_distribute_consumer(消费方管理表)
consumer | 数据类型 | 主键 | 外键 | 描述 |
---|---|---|---|---|
consumer_id | bigint(20) | 是 | 消费方ID | |
consumer_name | varchar(50) | 消费方名称 | ||
description | varchar(100) | 消费方信息 | ||
created_by | varchar(64) | 创建人 | ||
created_time | datetime | 创建时间 | ||
updated_by | varchar(64) | 更新人 | ||
updated_time | datetime | 更新时间 | ||
remark | varchar(500) | 备注 |
tn_mdm_date_distribute_authorization_template(权限模板管理表)
列名 | 数据类型 | 主键 | 外键 | 描述 |
---|---|---|---|---|
template_id | bigint(20) | 是 | 模板ID | |
template_name | varchar(50) | 模板名称 | ||
element_id | varchar(20) | 是 | 元对象ID | |
element_name | varchar(50) | 元对象名称 | ||
authorized_fields | json | 授权字段列表 | ||
created_by | varchar(64) | 创建人 | ||
created_time | datetime | 创建时间 | ||
updated_by | varchar(64) | 更新人 | ||
updated_time | datetime | 更新时间 | ||
remark | varchar(500) | 备注 |
tn_mdm_date_distribute_config(分发配置管理表)
列名 | 数据类型 | 主键 | 外键 | 描述 |
---|---|---|---|---|
config_id | bigint(20) | 是 | 配置ID | |
consumer_id | bigint(20) | 是 | 消费方ID | |
consumer_name | varchar(50) | 消费方名称 | ||
element_id | varchar(20) | 是 | 元对象ID | |
element_name | varchar(20) | 元对象名称 | ||
distribution_type | varchar(20) | 分发类型(被动拉取/主动推送) | ||
template_id | bigint(20) | 是 | 授权模板ID | |
template_name | varchar(50) | 授权模板名称 | ||
call_limit | int | 调用限制 | ||
is_active | boolean | 生效状态 | ||
start_time | datetime | 有效起始时间 | ||
end_time | datetime | 有效结束时间 | ||
created_by | varchar(64) | 创建人 | ||
created_time | datetime | 创建时间 | ||
updated_by | varchar(64) | 更新人 | ||
updated_time | datetime | 更新时间 | ||
remark | varchar(500) | 备注 |
tn_mdm_date_distribute__task(分发任务管理表)
列名 | 数据类型 | 主键 | 外键 | 描述 |
---|---|---|---|---|
distribute_task_id | bigint(20) | 是 | 任务ID | |
element_id | varchar(20) | 是 | 元对象ID | |
element_name | varchar(20) | 元对象名称(场景名称) | ||
created_time | datetime | 创建时间 | ||
created_by | varchar(64) | 创建人 | ||
updated_by | varchar(64) | 更新人 | ||
updated_time | datetime | 更新时间 | ||
remark | varchar(500) | 备注 |
tn_mdm_date_distribute_log(分发日志表)
列名 | 数据类型 | 主键 | 外键 | 描述 |
---|---|---|---|---|
log_id | bigint(20) | 是 | 日志ID | |
distribute_task_id | varchar(50) | 是 | 任务ID | |
consumer_id | bigint(20) | 是 | 消费方ID | |
consumer_name | varchar(50) | 消费方名称 | ||
element_id | varchar(20) | 是 | 元对象ID | |
element_name | varchar(20) | 元对象名称 | ||
business_data | json | 分发的业务数据 | ||
status_code | int(10) | 接口响应状态码 | ||
response_body | varchar(200) | 接口响应内容 | ||
error_msg | varchar(200) | 异常信息 | ||
request_time | datetime | 请求时间 | ||
response_time | datetime | 响应时间 | ||
created_by | varchar(64) | 创建人 | ||
created_time | datetime | 创建时间 | ||
updated_by | varchar(64) | 更新人 | ||
updated_time | datetime | 更新时间 | ||
remark | varchar(500) | 备注 |
2.4 接口设计
根据UI界面,设计定义具体接口。
2.5 功能点
功能点 | 功能描述 | 输入 | 输出 | 预期结果 |
---|---|---|---|---|
1 | 消费方管理 | 消费方基础信息(系统名称、信息等) | 执行操作后的提示信息 | 能够方便地管理和维护外部系统消费方的基础信息 |
2 | 元对象管理(字典) | 元对象的标识、名称、描述等基本信息 | 执行操作后的提示信息 | 能够方便地管理和维护主数据拉取、推送的元对象 |
3 | 权限模板管理 | 权限模板的名称、描述以及授权字段的配置 | 执行操作后的提示信息 | 能够方便地管理和维护主数据元对象的权限模板 |
4 | 数据分发配置管理 | 接入方的信息、数据授权模板、调用限制、生效状态、有效起止时间等配置 | 执行操作后的提示信息 | 能够方便地配置外部系统接入方的数据分发策略 |
5 | 分发任务管理 | 数据推送场景的信息 | 创建任务后的提示信息,已创建任务的列表 | 能够自动创建分发任务,并清晰地展示哪些场景下何时分发了数据 |
6 | 分发日志管理 | 分发任务的信息 | 分发日志的列表查看功能,手动重新分发的操作结果 | 能够记录和管理分发任务的日志,便于查看和处理失败的记录 |
7 | 钉钉提醒功能 | 异常信息提醒 | 分发日志中失败记录(异常) | 能够推送给MDM系统方运维人员异常信息,便于处理 |
3.非功能性设计
3.1 性能
-
限制分发时数据包大小,控制单次数据分发条数。
-
网关负载均衡,采用权重轮询/IP哈希策略。
-
限制调用系统接口次数,控制访问时间。
-
查询数据放入缓存。
-
外部系统获取系统数据异步执行,系统向多个外部系统分发多线程并行执行。
-
数据库设计读写分离,主库实例负责写入,从库实例负责读取。
-
表设计、索引优化。
3.2 可用性
- 通过ESB进行服务限流(设置阈值,监控请求)、熔断(实时监控可用性,出现故障时,暂时关闭活切换到备用结点)。
- 高可用应用部署架构,应用部署主备机制。
3.3 并发性
- 暂无并发场景。
3.4 安全性
-
调用鉴权。
-
调用签名。
-
数据加密(非必须)。