2025-12-20 16:53:57 +08:00
|
|
|
|
# 许可事项管理筛选器实现报告
|
|
|
|
|
|
|
|
|
|
|
|
## 概述
|
|
|
|
|
|
|
|
|
|
|
|
应需求改进,原有的许可事项管理页面使用传统的"区域选择-许可事项"方式已改为现代化的**筛选器浏览形式**,支持多维度筛选(地区、关联部门、主题等),提供更高效的浏览体验。
|
|
|
|
|
|
|
|
|
|
|
|
## 实现内容
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 后端API开发
|
|
|
|
|
|
|
|
|
|
|
|
#### 新增API接口
|
|
|
|
|
|
|
|
|
|
|
|
**1.1 高级筛选接口**
|
|
|
|
|
|
- **路径**: `POST/GET /fs-ai-asistant/api/workflow/lawrisk/admin/permits/advanced-filter`
|
|
|
|
|
|
- **功能**: 支持多维度筛选许可事项
|
|
|
|
|
|
- **参数**:
|
|
|
|
|
|
- `region`: 行政区域筛选
|
|
|
|
|
|
- `theme`: 主题筛选
|
|
|
|
|
|
- `department`: 关联部门筛选
|
|
|
|
|
|
- `search_text`: 许可名称关键词搜索
|
|
|
|
|
|
- `limit`: 返回数量限制(默认100)
|
|
|
|
|
|
- `offset`: 分页偏移(默认0)
|
|
|
|
|
|
- **特性**:
|
|
|
|
|
|
- 支持GET和POST两种请求方式
|
|
|
|
|
|
- 返回结构化数据,包含分页信息
|
|
|
|
|
|
- 自动计算总数和页数
|
|
|
|
|
|
|
|
|
|
|
|
**1.2 筛选选项接口**
|
|
|
|
|
|
- **路径**: `GET /fs-ai-asistant/api/workflow/lawrisk/admin/permits/filter-options`
|
|
|
|
|
|
- **功能**: 获取所有可用的筛选选项
|
|
|
|
|
|
- **返回数据**:
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"regions": [...], // 所有行政区域
|
|
|
|
|
|
"themes": [...], // 所有主题
|
|
|
|
|
|
"departments": [...] // 所有服务部门
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 新增数据函数
|
|
|
|
|
|
|
|
|
|
|
|
**filter_permits_advanced()**
|
|
|
|
|
|
- 位置: `lawrisk/services/licensing_repo.py`
|
|
|
|
|
|
- 功能: 多维度筛选许可事项的数据库查询函数
|
|
|
|
|
|
- 特性:
|
|
|
|
|
|
- 支持区域、主题、部门、关键词四种筛选维度
|
|
|
|
|
|
- 包含风险数量统计
|
|
|
|
|
|
- 支持主题去重和聚合
|
|
|
|
|
|
- 提供总数统计用于分页
|
|
|
|
|
|
- 使用窗口函数优化性能
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 前端页面开发
|
|
|
|
|
|
|
|
|
|
|
|
#### 许可事项浏览页面
|
|
|
|
|
|
- **文件**: `static/permit_browser.html`
|
|
|
|
|
|
- **功能特性**:
|
|
|
|
|
|
|
|
|
|
|
|
1. **多维度筛选器**
|
|
|
|
|
|
- 行政区域下拉选择
|
|
|
|
|
|
- 主题下拉选择
|
|
|
|
|
|
- 关联部门下拉选择
|
|
|
|
|
|
- 许可名称关键词搜索输入框
|
|
|
|
|
|
|
|
|
|
|
|
2. **筛选结果展示**
|
|
|
|
|
|
- 表格形式展示许可事项
|
|
|
|
|
|
- 显示许可名称、所属区域、主题标签、风险数量
|
|
|
|
|
|
- 支持主题标签展示(一个许可可能有多个主题)
|
|
|
|
|
|
- 每行提供"查看"操作按钮
|
|
|
|
|
|
|
|
|
|
|
|
3. **分页功能**
|
|
|
|
|
|
- 每页50条记录
|
|
|
|
|
|
- 显示总数量和页码信息
|
|
|
|
|
|
- 上一页/下一页按钮
|
|
|
|
|
|
- 自动禁用边界按钮
|
|
|
|
|
|
|
|
|
|
|
|
4. **用户体验优化**
|
|
|
|
|
|
- 加载状态提示
|
|
|
|
|
|
- 错误信息展示
|
|
|
|
|
|
- 空状态友好提示
|
|
|
|
|
|
- 回车键快速搜索
|
|
|
|
|
|
- 响应式设计
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 数据库查询优化
|
|
|
|
|
|
|
|
|
|
|
|
#### 查询语句特点
|
|
|
|
|
|
```sql
|
|
|
|
|
|
SELECT DISTINCT
|
|
|
|
|
|
p.id AS permit_id,
|
|
|
|
|
|
p.name AS permit_name,
|
|
|
|
|
|
rtp.region_id,
|
|
|
|
|
|
r.name AS region_name,
|
|
|
|
|
|
rtp.theme_id,
|
|
|
|
|
|
t.name AS theme_name,
|
|
|
|
|
|
COUNT(rpr.risk_id) OVER (PARTITION BY rtp.permit_id, rtp.region_id) AS risk_count,
|
|
|
|
|
|
COUNT(DISTINCT rtp.theme_id) OVER (PARTITION BY rtp.permit_id, rtp.region_id) AS theme_count
|
|
|
|
|
|
FROM region_theme_permits rtp
|
|
|
|
|
|
JOIN permits p ON p.id = rtp.permit_id
|
|
|
|
|
|
JOIN regions r ON r.id = rtp.region_id
|
|
|
|
|
|
LEFT JOIN themes t ON t.id = rtp.theme_id
|
|
|
|
|
|
LEFT JOIN region_permit_risks rpr ON ...
|
|
|
|
|
|
LEFT JOIN permit_sources ps ON ...
|
|
|
|
|
|
WHERE 1=1
|
|
|
|
|
|
AND (条件筛选)
|
|
|
|
|
|
ORDER BY LOWER(p.name), LOWER(r.name), LOWER(COALESCE(t.name, ''))
|
|
|
|
|
|
LIMIT %s OFFSET %s
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 性能优化措施
|
|
|
|
|
|
1. **DISTINCT去重**: 避免同一许可在不同主题下重复出现
|
|
|
|
|
|
2. **窗口函数**: 高效计算风险数量和主题数量,无需子查询
|
|
|
|
|
|
3. **索引优化**: 充分利用现有索引(region_id, permit_id, theme_id)
|
|
|
|
|
|
4. **分页查询**: 避免一次返回大量数据
|
|
|
|
|
|
5. **统一排序**: 确保分页结果稳定一致
|
|
|
|
|
|
|
|
|
|
|
|
### 4. 数据结构设计
|
|
|
|
|
|
|
|
|
|
|
|
#### 筛选结果数据结构
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"permits": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "permit-uuid",
|
|
|
|
|
|
"name": "许可名称",
|
|
|
|
|
|
"region": {
|
|
|
|
|
|
"id": "region-uuid",
|
|
|
|
|
|
"name": "区域名称"
|
|
|
|
|
|
},
|
|
|
|
|
|
"themes": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "theme-uuid",
|
|
|
|
|
|
"name": "主题名称"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"risk_count": 5,
|
|
|
|
|
|
"theme_count": 3
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"pagination": {
|
|
|
|
|
|
"total": 150,
|
|
|
|
|
|
"limit": 50,
|
|
|
|
|
|
"offset": 0,
|
|
|
|
|
|
"count": 50
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 技术特性
|
|
|
|
|
|
|
|
|
|
|
|
### 安全性
|
|
|
|
|
|
- ✅ 所有API都需要管理员权限验证
|
|
|
|
|
|
- ✅ 参数化查询防止SQL注入
|
|
|
|
|
|
- ✅ 输入数据验证和清理
|
|
|
|
|
|
|
|
|
|
|
|
### 性能
|
|
|
|
|
|
- ✅ 数据库查询优化,使用窗口函数
|
|
|
|
|
|
- ✅ 分页查询减少数据传输
|
|
|
|
|
|
- ✅ 前端缓存筛选选项
|
|
|
|
|
|
- ✅ 支持大数据集分页浏览
|
|
|
|
|
|
|
|
|
|
|
|
### 可维护性
|
|
|
|
|
|
- ✅ 统一API响应格式
|
|
|
|
|
|
- ✅ 清晰的错误处理和日志记录
|
|
|
|
|
|
- ✅ 模块化代码结构
|
|
|
|
|
|
- ✅ 完整的文档注释
|
|
|
|
|
|
|
|
|
|
|
|
## 使用指南
|
|
|
|
|
|
|
|
|
|
|
|
### 访问地址
|
|
|
|
|
|
```
|
|
|
|
|
|
许可事项浏览页面: http://localhost:8000/static/permit_browser.html
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 使用流程
|
|
|
|
|
|
|
|
|
|
|
|
1. **打开页面**
|
|
|
|
|
|
- 访问许可事项浏览页面
|
|
|
|
|
|
- 页面自动加载所有筛选选项
|
|
|
|
|
|
|
|
|
|
|
|
2. **选择筛选条件**
|
|
|
|
|
|
- 从下拉列表选择行政区域(或保持"全部区域")
|
|
|
|
|
|
- 从下拉列表选择主题(或保持"全部主题")
|
|
|
|
|
|
- 从下拉列表选择关联部门(或保持"全部部门")
|
|
|
|
|
|
- 在搜索框输入许可名称关键词(可选)
|
|
|
|
|
|
|
|
|
|
|
|
3. **执行筛选**
|
|
|
|
|
|
- 点击"应用筛选"按钮
|
|
|
|
|
|
- 或在搜索框按回车键
|
|
|
|
|
|
|
|
|
|
|
|
4. **浏览结果**
|
|
|
|
|
|
- 查看许可事项列表
|
|
|
|
|
|
- 查看每个许可的详细信息(区域、主题、风险数)
|
|
|
|
|
|
- 点击"查看"按钮查看详情(功能待完善)
|
|
|
|
|
|
|
|
|
|
|
|
5. **翻页浏览**
|
|
|
|
|
|
- 使用"上一页"/"下一页"按钮翻页
|
|
|
|
|
|
- 查看页码信息了解当前位置
|
|
|
|
|
|
|
|
|
|
|
|
6. **重置筛选**
|
|
|
|
|
|
- 点击"重置筛选"清除所有条件
|
|
|
|
|
|
|
|
|
|
|
|
## 筛选维度说明
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 行政区域
|
|
|
|
|
|
- **说明**: 许可事项所属的行政区域
|
|
|
|
|
|
- **选项**: 市级、禅城区、南海区、顺德区、三水区、高明区
|
|
|
|
|
|
- **筛选逻辑**: 精确匹配指定区域的许可事项
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 主题
|
|
|
|
|
|
- **说明**: 许可事项关联的法律主题
|
|
|
|
|
|
- **选项**: 所有已配置的主题列表
|
|
|
|
|
|
- **筛选逻辑**: 精确匹配指定主题的许可事项
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 关联部门
|
|
|
|
|
|
- **说明**: 上传或绑定许可的部门单位
|
|
|
|
|
|
- **选项**: 所有服务部门(市级单位、区级单位)
|
|
|
|
|
|
- **筛选逻辑**: 匹配上传部门或绑定部门的许可事项
|
|
|
|
|
|
|
|
|
|
|
|
### 4. 搜索关键词
|
|
|
|
|
|
- **说明**: 在许可名称中进行模糊搜索
|
|
|
|
|
|
- **输入**: 任意关键词(支持中文)
|
|
|
|
|
|
- **筛选逻辑**: 许可名称包含关键词即可匹配
|
|
|
|
|
|
|
|
|
|
|
|
## 与原有系统的对比
|
|
|
|
|
|
|
|
|
|
|
|
| 特性 | 原有方式 | 新方式 |
|
|
|
|
|
|
|------|----------|--------|
|
|
|
|
|
|
| 筛选维度 | 单一(区域) | 多维度(区域、主题、部门、关键词) |
|
|
|
|
|
|
| 浏览方式 | 区域选择 → 事项列表 | 筛选器 → 事项列表 |
|
|
|
|
|
|
| 主题支持 | 不明确 | 明确显示主题标签 |
|
|
|
|
|
|
| 风险统计 | 无 | 显示风险数量 |
|
|
|
|
|
|
| 分页支持 | 无 | 支持分页浏览 |
|
|
|
|
|
|
| 搜索功能 | 无 | 支持关键词搜索 |
|
|
|
|
|
|
| 部门关联 | 无 | 支持部门筛选 |
|
|
|
|
|
|
| 响应式设计 | 一般 | 完全响应式 |
|
|
|
|
|
|
|
|
|
|
|
|
## 测试建议
|
|
|
|
|
|
|
|
|
|
|
|
### 功能测试
|
|
|
|
|
|
1. **筛选功能测试**
|
|
|
|
|
|
- 单个维度筛选测试
|
|
|
|
|
|
- 多个维度组合筛选测试
|
|
|
|
|
|
- 关键词搜索测试
|
|
|
|
|
|
- 无结果场景测试
|
|
|
|
|
|
|
|
|
|
|
|
2. **分页功能测试**
|
|
|
|
|
|
- 正常分页浏览
|
|
|
|
|
|
- 边界页面访问(第一页、最后一页)
|
|
|
|
|
|
- 总数统计准确性
|
|
|
|
|
|
|
|
|
|
|
|
3. **用户体验测试**
|
|
|
|
|
|
- 页面加载速度
|
|
|
|
|
|
- 筛选响应时间
|
|
|
|
|
|
- 错误处理验证
|
|
|
|
|
|
|
|
|
|
|
|
### 性能测试
|
|
|
|
|
|
1. 大量数据筛选响应时间
|
|
|
|
|
|
2. 复杂条件组合查询性能
|
|
|
|
|
|
3. 并发访问压力测试
|
|
|
|
|
|
|
|
|
|
|
|
## 未来改进方向
|
|
|
|
|
|
|
|
|
|
|
|
1. **高级筛选功能**
|
|
|
|
|
|
- 支持多选筛选(一个字段可选多个值)
|
|
|
|
|
|
- 支持日期范围筛选
|
|
|
|
|
|
- 支持自定义排序
|
|
|
|
|
|
|
|
|
|
|
|
2. **数据展示优化**
|
|
|
|
|
|
- 添加许可详情弹窗
|
|
|
|
|
|
- 支持列表视图和卡片视图切换
|
|
|
|
|
|
- 添加数据导出功能
|
|
|
|
|
|
|
|
|
|
|
|
3. **性能优化**
|
|
|
|
|
|
- 添加查询结果缓存
|
|
|
|
|
|
- 实现虚拟滚动(大数据量)
|
|
|
|
|
|
- 添加数据预加载
|
|
|
|
|
|
|
|
|
|
|
|
## 总结
|
|
|
|
|
|
|
|
|
|
|
|
本次改进成功将许可事项管理从传统的"区域选择-事项列表"模式升级为现代化的**多维度筛选浏览**模式,大大提升了用户体验和查询效率。新系统支持更丰富的筛选维度、更直观的展示形式,并具有良好的扩展性和维护性。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
**实施日期**: 2025-11-19
|
|
|
|
|
|
**版本**: v1.0
|
|
|
|
|
|
**状态**: ✅ 已完成
|