MEMORY.md 5.5 KB

MEMORY.md - 长期记忆

项目背景

  • 用户在腾讯从事 WorkBuddy 需求分析和 Vue 前端设计与重构工作
  • 同时负责 ECS 电子班牌系统和 ykt_server 项目开发
  • ECS 模块位于 ruoyi-modules/ruoyi-ecs
  • 技术栈:RuoYi-Cloud-Plus 框架、Dubbo 微服务、多租户架构
  • 数据库:达梦、人大金仓、OceanBase 等国产方案
  • 开发工具:WebStorm、DataGrip、IDEA
  • 用户偏好轻量软件,使用中文交流,Windows 系统

技术规范

  • 字典命名规范:字典是全局的,命名不加模块前缀(如 course_type 而非 ecs_course_type
  • DTO 命名规范:统一使用 Dto 后缀
  • 关联表处理:多对多关系通过中间表实现,列表显示时需 SQL 拼接关联字段(如讲师姓名拼接串)
  • 数据库类型:默认人大金仓(kingbase),支持 --db 选项指定 mysql/dm/oceanbase
  • 三个技能文件均已添加语言要求:所有对话、说明、注释均使用中文
  • 通用字段规范:所有表统一包含 del_flag(char(1))/create_dept(bigint)/create_by(bigint)/create_time(timestamp)/update_by(bigint)/update_time(timestamp),多租户表额外含 tenant_id(varchar(20))。建表DDL自动追加,字段清单中无需重复声明
  • 前端导入导出规范:导出/下载模板用 proxy?.download(url, params, fileName) 方式,导入用 el-uploadaction 属性 + globalHeaders() + ImportOption reactive。api/index.ts 中不需要 exportTemplate/importData/export 函数
  • 前端表格列宽规范el-table-column 必须使用 min-width 而非 width。固定 width 不会自动扩展,导致右侧空白;min-width 设最小宽度后自动分配剩余空间填满表格
  • 操作锁定规则 lockRule:当某字段值决定行级操作权限时使用 lockRule。格式:{ lockValue: 值, lockActions: [edit/delete], tip: 提示文案 }。字段需 inDb=true,通常 inTable=false/inQuery=false,但必须包含在 VO 中供前端判断。典型场景:dataSource=1 时禁止编辑删除
  • ServiceImpl 查询规范:必须使用 LambdaQueryWrapper + buildQueryWrapper 私有方法,禁止直接传 Bo 给 Mapper。分页查询用 baseMapper.selectVoPage(pageQuery.build(), lqw) + TableDataInfo.build(result)。insertByBo 需回填主键 + validEntityBeforeSave 校验。Mapper 不引入 Bo,Service 接口不引入 Domain。
  • 模板变量${queryWrapperConditions} 用于 buildQueryWrapper 中的条件代码块,${PkCapField} 用于主键首字母大写的 getter/setter 调用
  • 字典字段类型规范:数据字典(dictType)对应的数据库表字段类型为 varchar(16),Java 实体/Bo/Vo 中对应类型为 String(而非 Integer)。字典值虽然常为数字,但存储和传输统一使用字符串
  • 主键不导出 Excel:主键字段(Long 类型)不加 @ExcelProperty 注解,不参与 Excel 导出。Vo 中主键仅作为标识字段,需求文档中主键默认 excelExport: false
  • 日期类型规范:日期和时间字段的 Java 类型统一使用 java.util.Date(而非 LocalDateTime),数据库类型为 datetime。与 BaseEntity 基类保持一致(createTime/updateTime 均为 Date)。ServiceImpl 中使用 new Date() 而非 LocalDateTime.now()

技能体系

指令规范

  • 指令规范文件:D:\dt_ykt\ykt_server\.workbuddy\CMD.md
  • 定义 /require/dev 双指令系统

/require 指令 → require 技能

  • 触发:/require [模块] [功能名] [简要需求] [选项]
  • 技能位置:D:\dt_ykt\ykt_server\.workbuddy\skills\require\
  • 输出:doc/[模块]-[功能名]-requirements.md(需求规格说明书)
  • 流程:分析简要需求 → 加载需求模板 → 生成需求文档 → 用户确认
  • --db 选项:指定数据库类型(kingbase/mysql/dm/oceanbase),默认 kingbase,影响建表语句生成
  • 需求文档包含9个章节:基础信息、接口清单、字段属性速查表、字段清单、VO结构、特殊需求、字典项、建表语句、备注

/dev 指令 → ruoyi-backend + ykt-web-dev 技能

  • 触发:/dev [模块] [功能名] [选项]
  • 输入:读取 doc/[模块]-[功能名]-requirements.md
  • 后端技能:D:\dt_ykt\ykt_server\.workbuddy\skills\ruoyi-backend\(已新增需求驱动章节)
  • 前端技能:D:\dt_ykt\ykt_web\.workbuddy\skills\ykt-web-dev\(已新增需求驱动章节)
  • 输出:后端 Java 文件 + 前端 Vue/TS 文件

路径约定

  • 需求文档:d:/dt_ykt/ykt_server/doc/[模块]-[功能名]-requirements.md
  • 后端代码:d:/dt_ykt/ykt_server/ruoyi-modules/ruoyi-[模块]/
  • 前端代码:d:/dt_ykt/ykt_web/src/
  • 可通过 --backend=--frontend= 参数手工指定项目路径

完整开发流程

1. /require [模块] [功能名] [简要需求]  →  生成需求规格说明书
2. 反复沟通/人工调整需求文档             →  确认最终需求规格说明书
3. /dev [模块] [功能名]                  →  读取需求文档,生成前后端代码
4. 用户确认代码                          →  写入文件

技能清单

技能 位置 职责
require ykt_server/.workbuddy/skills/require/ 需求分析 + 规格说明书生成
ruoyi-backend ykt_server/.workbuddy/skills/ruoyi-backend/ 后端代码生成(模板驱动 + 需求驱动)
ykt-web-dev ykt_web/.workbuddy/skills/ykt-web-dev/ 前端代码生成(模板驱动 + 需求驱动)