Files
mokeegateway/memory/session-20260611-1.md
2026-07-16 00:10:03 +08:00

5.0 KiB
Raw Permalink Blame History

name, description, metadata
name description metadata
session-20260611-1 2026-06-11 会话 — 头像上传修复、用户信息显示修复、文件存DB、系统Bug全面检查
type date sessionNumber startTime
session 2026-06-11 1 2026-06-11T01:00:00+08:00

2026-06-11 会话

会话摘要

修复了上次会话遗留的2个已知问题头像上传、用户信息不显示将文件存储从磁盘改为数据库并对整个系统进行了全面Bug检查修复了8个高/中优先级问题。

关键操作

一、sys_file 表重构(文件存数据库)

  • 做了什么:
    • 重新设计 sys_file 表,添加 file_data LONGBLOB 字段存储二进制
    • 统一 Entity 和 DDL新增 system_id, mime_type, upload_user_id, md5 字段
    • 删除旧磁盘存储字段 file_path(→file_data), upload_by(→upload_user_id)
  • 原因: 用户要求图片文件存入数据库而非磁盘
  • 结果: QA 数据库已更新PROD 迁移脚本已准备(sql/prod_migrate_sys_file.sql

二、FileServiceImpl 重写

  • 做了什么: upload()改为读取文件字节存入DBpage()/list()排除file_data字段新增getMetaById();新增文件输出流
  • 原因: 配合数据库存储方案
  • 结果: 编译通过

三、FileController 更新

  • 做了什么: upload返回时清除fileData新增 GET /{id}/view 端点直接输出文件流(支持浏览器 <img> 标签加载)
  • 原因: 文件存DB后需要HTTP接口访问

四、PersonalView 头像上传修复

  • 做了什么:
    • 修正 res.data?.url → 通过 res.data?.id 构建访问URL
    • 上传时添加 fd.append('fileType', 'avatar')
    • 头像地址格式: {VITE_GATEWAY_URL}/zgapi/v1/admin/file/{id}/view
    • 更新后调用 authStore.fetchUserInfo() 刷新store
  • 原因: Entity字段名不匹配+文件访问方式变更

五、AdminLayout 用户信息修复

  • 做了什么: onMounted中调用 authStore.fetchUserInfo()
  • 原因: 跨域名跳转(login.user.mokee.com→web.gw.mokee.com)后Pinia状态丢失需要重新加载
  • 结果: 顶栏头像和用户名正确显示

六、Redis TokenInfo 同步机制

  • 做了什么:
    • 登录时建立反向索引 auth:user_session:{userId} → tokenId
    • 登出时清除反向索引
    • UserServiceImpl.update()后同步更新Redis中的TokenInfousername/realName/email/phone/avatar/post
    • UserServiceImpl.assignRoles()后清除用户Redis会话强制重新登录
    • RoleServiceImpl.assignMenus()后清除所有受影响用户的Redis会话
  • 原因: 用户信息/角色/权限变更后前端fetchUserInfo读到过期数据

七、SysSystem 实体补充

  • 做了什么: 添加 gatewayUrl 字段映射 gateway_url
  • 原因: DDL中有此列但Entity缺少映射INSERT可能失败

八、前端错误处理修复

  • 做了什么: LoginView和UserForm的catch块添加具体错误提示
  • 原因: 登录失败/保存失败时用户看不到任何反馈

九、系统全面检查发现(已记录,部分待处理)

  • A-2: SysMenu.menuType注释错误(0-based vs 1-based) — LOW
  • D-3~D-6: 多处catch块无用户反馈 — MEDIUM拦截器已提供基线处理
  • E-1: Cookie domain硬编码.mokee.com导致localhost开发不可用 — HIGH已知限制
  • E-2: auth.ts和request.ts重复实现Token Cookie操作 — MEDIUM
  • F-3: bindSystems/unbindSystems不同步Redis — MEDIUM
  • F-5: RoleServiceImpl.update不同步Redis — LOW

修改文件清单

后端 (7个文件):

  • mokee-gateway-common/.../entity/SysFile.java — 重构字段
  • mokee-gateway-common/.../entity/SysSystem.java — 添加gatewayUrl
  • mokee-gateway-admin/.../service/FileService.java — 新增getMetaById
  • mokee-gateway-admin/.../service/impl/FileServiceImpl.java — 完全重写(DB存储)
  • mokee-gateway-admin/.../controller/FileController.java — 新增view端点
  • mokee-gateway-admin/.../service/impl/UserServiceImpl.java — Redis同步+会话失效
  • mokee-gateway-admin/.../service/impl/RoleServiceImpl.java — 角色变更会话失效
  • mokee-gateway-auth/.../service/impl/AuthServiceImpl.java — 反向索引

前端 (3个文件):

  • mokee-gateway-web/src/views/admin/PersonalView.vue — 头像上传修复
  • mokee-gateway-web/src/views/admin/AdminLayout.vue — fetchUserInfo onMount
  • mokee-gateway-web/src/views/login/LoginView.vue — 错误提示
  • mokee-gateway-web/src/views/admin/user/UserForm.vue — 错误提示

SQL (4个文件):

  • sql/qa_ddl.sql — sys_file新结构
  • sql/prod_align_qa.sql — sys_file新结构
  • sql/prod_migrate_sys_file.sql — PROD迁移(新建)
  • init_qa_database.py — sys_file新结构

待处理

  • PROD 数据库 sys_file 表迁移 — 已完成QA和PROD结构一致
  • 部署前端到PRODNginx 10.20.1.160
  • 部署后端到PROD10.20.1.170
  • 验证头像上传端到端流程
  • E-1 Cookie域localhost问题开发环境限制暂不处理
  • F-3 bindSystems/unbindSystems Redis同步低优先级