Files
mokeegateway/memory/session-20260615-2.md
2026-07-15 16:13:27 +08:00

57 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: session-20260615-2
description: 2026-06-15 第2次会话 — sys_user唯一索引删除修复逻辑删除与uk_username冲突
metadata:
type: session
date: 2026-06-15
sessionNumber: 2
startTime: 2026-06-15
---
# 2026-06-15 第2次会话
## 会话摘要
修复了 `sys_user` 表逻辑删除(`is_deleted`)与唯一索引 `uk_username`/`uk_email` 冲突的问题。删除了数据库唯一索引,改为应用层代码校验。
## 问题描述
- **现象**:创建用户时报 `Duplicate entry 'nginxadmin' for key 'sys_user.uk_username'`
- **根因**MyBatis-Plus `@TableLogic` 自动在查询时过滤 `is_deleted=1`,但数据库唯一索引不区分逻辑删除标记。已删用户仍占着 username → 新用户无法创建同名 → 插入时索引冲突
## 关键操作
### 删除唯一索引,改应用层校验
- **做了什么**:从 `sys_user` 表删除 `uk_username``uk_email` 两个唯一索引,用户名/邮箱唯一性交给 `UserServiceImpl.add()` 中的 `selectCount` 校验
- **原因**:唯一索引不区分 `is_deleted`,逻辑删除的记录仍阻塞同名用户创建
- **结果**:已删除的用户不再占坑,可创建同名新用户;活跃用户的唯一性由应用层保证
## 涉及文件
| 文件 | 改动 |
|------|------|
| `sql/qa_ddl.sql` | 删除 uk_username、uk_email 索引定义 |
| `init_database.py` | 同上 |
| `init_qa_database.py` | 同上 |
| QA 数据库 `mokeegatewayqa` | DROP INDEX uk_username, uk_email |
| PROD 数据库 `mokeegateway` | DROP INDEX uk_username, uk_email |
## 代码层无需改动
`UserServiceImpl.add()` 已有校验:`selectCount` + MyBatis-Plus `@TableLogic` 自动过滤已删除记录,重复用户名会提示"用户名已存在"。
## 待处理
- [ ] 验证:创建一个用户 → 删除 → 再创建同名用户,确认不再报错
### 2. 首页仪表盘数据权限
- **做了什么**DashboardController.stats() 增加数据权限过滤。非 super_admin 用户首页统计卡片和登录趋势图只看自己绑定系统的数据(排除网关平台)
- **原因**:之前首页显示全部系统/全部用户的全局统计数据,业务管理员不应看到平台全局数据
- **结果**:
- 系统总数 → 用户绑定系统数(拦截器已排除网关)
- 用户总数 → JOIN sys_user_system 统计绑定系统下的用户
- 今日登录/在线/30天趋势 → system_id IN (用户绑定系统) 过滤
- super_admin 行为不变
- 复用 UserContextInterceptor 已有的 systemIds已排除网关不重复查库
- **涉及文件**: `DashboardController.java`
## 待处理
- [ ] 验证:创建一个用户 → 删除 → 再创建同名用户,确认不再报错
- [ ] 部署后验证首页数据权限:用非 super_admin 账号登录,确认统计数据只显示绑定系统范围内