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-upload 的 action 属性 + 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/ |
前端代码生成(模板驱动 + 需求驱动) |