gozero框架crm系统中的查询条件动态筛选业务设计与实践
在CRM系统中,查询条件与动态筛选功能通常涉及记录不同人在不同模块下的操作行为、筛选条件、筛选结果等信息。动态筛选(高级筛选)功能需要支持灵活的筛选条件设置,并根据用户的不同需求展示数据。这些功能需要有相应的表结构设计,以便能够高效地存储、查询和展示动态筛选条件及结果。
以下是针对**不同人在不同模块的动态筛选和动态列表(高级筛选)**的表结构设计及业务设计方案:
---
### **一、表结构设计**
#### 1. **筛选条件表(`filter_conditions`)**
该表记录用户在不同模块中定义的筛选条件,包括筛选字段、操作符、值等信息。它支持灵活的筛选逻辑,用户可以设置多个条件进行组合。
```sql
CREATE TABLE filter_conditions (
condition_id INT PRIMARY KEY AUTO_INCREMENT, -- 筛选条件ID
user_id INT, -- 用户ID,表示谁创建了这个条件
module_id INT, -- 模块ID,表示这个条件在哪个模块下
field_name VARCHAR(255), -- 筛选字段名称(例如:客户名称、任务状态等)
operator ENUM('=', '>', '<', '>=', '<=', 'LIKE', 'IN', 'NOT IN', 'BETWEEN') DEFAULT '=', -- 操作符
value VARCHAR(255), -- 筛选值,存储条件的具体值,可以是数字、日期、文本等
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 最后更新时间
FOREIGN KEY (user_id) REFERENCES users(user_id), -- 外键关联用户表
FOREIGN KEY (module_id) REFERENCES modules(module_id) -- 外键关联模块表
);
```
#### 2. **筛选条件组合表(`filter_condition_groups`)**
如果用户需要进行多个条件的组合(如AND、OR等),可以使用此表来记录筛选条件的组合关系。
```sql
CREATE TABLE filter_condition_groups (
group_id INT PRIMARY KEY AUTO_INCREMENT, -- 筛选条件组合ID
user_id INT, -- 用户ID
module_id INT, -- 模块ID
logical_operator ENUM('AND', 'OR') DEFAULT 'AND', -- 逻辑操作符(AND、OR)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 最后更新时间
FOREIGN KEY (user_id) REFERENCES users(user_id), -- 外键关联用户表
FOREIGN KEY (module_id) REFERENCES modules(module_id) -- 外键关联模块表
);
```
#### 3. **筛选条件与组合关联表(`condition_group_association`)**
该表用于记录筛选条件和筛选条件组的关系,表示哪些条件属于同一组,并且需要根据组合的逻辑进行筛选。
```sql
CREATE TABLE condition_group_association (
association_id INT PRIMARY KEY AUTO_INCREMENT, -- 关联ID
group_id INT, -- 筛选条件组合ID
condition_id INT, -- 筛选条件ID
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间
FOREIGN KEY (group_id) REFERENCES filter_condition_groups(group_id), -- 外键关联筛选条件组合
FOREIGN KEY (condition_id) REFERENCES filter_conditions(condition_id) -- 外键关联筛选条件
);
```
#### 4. **筛选结果表(`filter_results`)**
该表记录每次筛选操作的结果,保存筛选结果的数据(如客户列表、任务列表等),并记录筛选操作的执行情况。
```sql
CREATE TABLE filter_results (
result_id INT PRIMARY KEY AUTO_INCREMENT, -- 筛选结果ID
user_id INT, -- 用户ID,表示执行筛选的用户
module_id INT, -- 模块ID,表示筛选所属的模块
filter_conditions TEXT, -- 存储筛选条件的JSON格式数据
result_data TEXT, -- 存储筛选结果的JSON格式数据(例如,客户数据列表、任务列表等)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 最后更新时间
FOREIGN KEY (user_id) REFERENCES users(user_id), -- 外键关联用户表
FOREIGN KEY (module_id) REFERENCES modules(module_id) -- 外键关联模块表
);
```
#### 5. **模块表(`modules`)**
该表记录CRM系统中所有模块的信息(如客户管理、任务管理等),为筛选条件提供模块分类支持。
```sql
CREATE TABLE modules (
module_id INT PRIMARY KEY AUTO_INCREMENT, -- 模块ID
module_name VARCHAR(255), -- 模块名称(如“客户管理”、“任务管理”等)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 最后更新时间
);
```
#### 6. **用户表(`users`)**
该表记录系统用户的信息,能够识别哪些用户创建了哪些筛选条件或执行了哪些筛选操作。
```sql
CREATE TABLE users (
user_id INT PRIMARY KEY AUTO_INCREMENT, -- 用户ID
username VARCHAR(255), -- 用户名
email VARCHAR(255), -- 用户邮箱
password VARCHAR(255), -- 用户密码(加密存储)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 最后更新时间
);
```
---
### **二、业务设计**
#### 1. **动态筛选功能(高级筛选)**
**(1)定义筛选条件:**
- 用户在不同模块(如客户管理、任务管理等)中,可以自由定义筛选条件。例如,筛选客户名称包含"ABC"、任务状态为“进行中”。
- 筛选条件可以是单个条件,也可以是多个条件的组合。每个条件都有字段、操作符和值。
**(2)条件组合:**
- 用户可以为多个筛选条件设置组合逻辑,如“AND”、“OR”等。例如,“客户名称包含‘ABC’ AND 客户状态为‘活跃’”。
- 用户可以选择将多个筛选条件组合成一个“条件组”,并定义组合逻辑。
**(3)执行筛选:**
- 用户点击“筛选”按钮时,系统根据定义的条件与组合逻辑,执行查询操作,返回符合条件的数据(如客户列表、任务列表等)。
- 查询的结果会存储在`filter_results`表中,便于后续查看和复用。
**(4)筛选结果:**
- 筛选结果数据以JSON格式存储在`filter_results`表中。每次执行筛选操作时,生成一条记录,包含筛选条件和返回的结果。
- 用户可以查看筛选历史,并且重新加载历史筛选结果。
---
#### 2. **动态列表与筛选历史**
**(1)动态列表展示:**
- 用户根据不同的筛选条件,展示模块的动态列表(如客户、任务列表等)。
- 列表内容可以根据用户的筛选条件动态变化。
**(2)筛选历史:**
- 用户可以查看自己以前的筛选历史,并且可以选择复用某个筛选条件进行再次筛选。每个历史筛选记录都存储在`filter_results`表中。
**(3)查询条件持久化:**
- 筛选条件可以被持久化,用户每次登录后,可以看到之前使用过的筛选条件,并且可以继续使用。持久化条件存储在`filter_conditions`和`filter_condition_groups`表中。
---
#### 3. **动态筛选与权限控制**
**(1)用户权限:**
- 每个用户只能访问自己有权限查看的模块和数据。例如,某些用户只能查看部分客户数据,其他用户则可以访问所有客户数据。
- 在设计筛选条件时,可以结合权限管理功能,限制用户只能筛选和查看自己有权限访问的数据。
**(2)模块与条件映射:**
- 筛选条件表中,`module_id`字段可以与模块权限进行关联,确保用户只能在他们有权限的模块中定义筛选条件。
---
### **三、总结**
通过以上表结构和业务设计,CRM系统能够支持灵活的动态筛选功能,用户可以在不同模块下定义筛选条件、组合条件并执行筛选操作,同时系统能够存储和展示历史筛选记录。筛选条件的组合、逻辑运算以及结果展示提供了强大的数据查询功能,使用户能够快速找到符合需求的客户、任务等信息。这种设计能够提高用户在CRM系统中的操作效率和体验,确保灵活的查询需求得到满足。