2026-04-20.md 8.8 KB

2026-04-20 工作日志

后端代码生成模板修正

问题

用户反馈代码生成模板文件不对,对照 ruoyi-backstage/basics/PtParameter 实际代码分析发现多处差异。

修正内容

模板文件修正(3个):

  1. ServiceImpl.java.template — 最大改动

    • ❌ 旧:baseMapper.selectVoList(bo) / baseMapper.selectVoPageList(bo, pageQuery) — 编译不通过的方法签名
    • ✅ 新:LambdaQueryWrapper + buildQueryWrapper 私有方法
    • 新增 validEntityBeforeSave 保存前校验方法
    • insertByBo 增加主键回填 + Objects.requireNonNull 校验
    • updateByBo 增加 null 检查 + validEntityBeforeSave
    • deleteWithValidByIds 增加 isValid 校验预留位置
    • 分页查询默认 orderByDesc(createTime)
    • 新增模板变量 ${queryWrapperConditions}${PkCapField}
  2. Mapper.java.template — 删除多余的 Bo import(Mapper 不需要引入 Bo)

  3. Service.java.template — 删除多余的 Domain import(Service 接口不引入实体类)

已生成代码修正(3个 ServiceImpl + 3个 Service 接口 + 3个 Mapper):

  • EcsTermServiceImpl — 完整 CRUD + buildQueryWrapper(termName like, termNumb like, termType eq, roomId eq)
  • EcsAttendServiceImpl — 完整 CRUD + 保留手工考勤特殊逻辑 + buildQueryWrapper
  • EcsSectionServiceImpl — 完整 CRUD + buildQueryWrapper(含日期范围查询)
  • IEcsAttendService — 补充 updateByBo / deleteWithValidByIds 接口
  • IEcsSectionService — 补充 insertByBo / updateByBo / deleteWithValidByIds 接口
  • 3个 Mapper 文件删除多余 Bo import

SKILL.md 更新:

  • 新增「模板变量说明」表格
  • 新增「ServiceImpl 查询规范」章节,明确 LambdaQueryWrapper 模式

MEMORY.md 更新:

  • 新增 ServiceImpl 查询规范和模板变量说明

前端代码生成 — ECS 课表管理(/dev ecs section --frontend-only)

需求特点

  • 只读模式:无新增/编辑/删除,只有列表查询和导出
  • lockRule:dataSource=1 时禁止编辑删除(当前接口无编辑删除,预留)
  • 日期范围查询:courseDate 支持 between 查询
  • 字典字段:ecs_time_slot(上课时段)

生成文件

文件 路径 说明
types.ts src/api/ecs/section/types.ts VO/Query 类型定义
index.ts src/api/ecs/section/index.ts 仅 listSection + getSection
index.vue src/views/ecs/section/index.vue 列表页(搜索+表格+导出,无增删改form)

设计要点

  • 无 form.vue(只读模式不需要表单页)
  • 学期字典前端本地定义(非系统字典),ecs_time_slot 使用 useDict
  • 星期使用前端映射表 weekdayMap 转换显示
  • 日期范围使用 el-date-picker type="daterange",查询时拆分为 courseDateBegin/courseDateEnd
  • 是否考勤使用 el-tag 标签展示
  • 默认隐藏低频列(连课节次/占用节次/占用列表/开始时间/结束时间)

前端代码生成 — ECS 设备管理(/dev ecs term --frontend-only)

需求特点

  • 完整 CRUD:新增/编辑/删除/导入/导出
  • 字典字段:term_type(设备类型)、term_brand(设备品牌)
  • 教室关联选择:通过弹窗选择教室,选择后回填 roomId 和 roomName
  • 管理密码:不在列表显示,不在 Excel 导出,仅在表单中可编辑(show-password)
  • 双列表单布局:el-row + el-col :span="12" 排列

生成文件

文件 路径 说明
types.ts src/api/ecs/term/types.ts VO/Form/Query 类型定义
index.ts src/api/ecs/term/index.ts 完整 CRUD API
index.vue src/views/ecs/term/index.vue 列表页(搜索+表格+增删改+导入导出)
form.vue src/views/ecs/term/form.vue 表单页(双列布局+教室选择弹窗)

设计要点

  • 列表页使用 min-width 替代 width(遵循前端表格列宽规范)
  • 教室选择:点击输入框弹窗 → listClassroom 分页查询 → 单选高亮 → 确认回填 roomId/roomName
  • 新增时字典字段(termType)默认选中第一个选项
  • form.vue 使用双列布局提升空间利用率
  • 操作列固定 width="120"(包含编辑+删除两个按钮)

修正记录

  • ClassroomVO 主键是 roomId(非 ptRoomId),已修正 form.vue 中的教室选择确认逻辑
  • ClassroomVO 无 floorName 字段,教室选择表格改为 roomCode 列

前端代码生成 — ECS 考勤管理(/dev ecs attend --frontend-only)

需求特点

  • 只读模式 + 手工考勤补签:无编辑/删除/导入,仅新增(手工考勤)+导出
  • 级联选择:教室(弹窗选择)→ 班级(下拉)→ 学员(下拉,依赖班级过滤)
  • 字典字段:check_type(考勤方式)、push_status(推送状态)
  • 冗余回填:选择学员后自动回填 realName/userNumb,选择班级后回填 className

生成文件

文件 路径 说明
types.ts src/api/ecs/attend/types.ts AttendVO / AttendForm / AttendQuery 类型定义
index.ts src/api/ecs/attend/index.ts listAttend / getAttend / addAttend(无 update/del)
index.vue src/views/ecs/attend/index.vue 列表页(搜索+表格+手工考勤按钮+导出)
form.vue src/views/ecs/attend/form.vue 手工考勤表单(级联选择+教室弹窗)

设计要点

  • 列表页无 selection 列、无编辑/删除/导入按钮,仅「手工考勤」和「导出」
  • form.vue 核心逻辑:教室(弹窗选择,同 term)→ 班级(getClassOptions 下拉)→ 学员(listTrainee 按 deptId 过滤,级联清空)
  • 选班级后自动清空已选学员并重新加载学员列表
  • 选学员后自动回填 realName 和 userNumb
  • 考勤方式默认选中字典第一项,考勤时间默认当前时间
  • 推送状态列使用 dict-tag 组件展示

字典字段类型规范 — 全局更新

规范内容

数据字典(dictType)对应的数据库表字段类型为 varchar(16),Java 实体/Bo/Vo 中对应类型为 String(而非 Integer)。字典值虽然常为数字,但存储和传输统一使用字符串。

更新文件

文件 更新内容
MEMORY.md 技术规范新增「字典字段类型规范」条目
require/SKILL.md 字段解析规则:fieldType=IntegerfieldType=String(4处);字段类型映射表新增 String(字典字段)varchar(16);DDL生成逻辑新增字典字段说明
ruoyi-backend/SKILL.md A.5 映射表新增字典字段行 private String xxxType;注意事项新增第7条;buildQueryWrapper 规则拆分出字典字段的 StringUtils.isNotBlank 判断
ykt-web-dev/SKILL.md A.4.1 类型定义注释中标注字典字段类型;注意事项新增第10条

主键不导出 Excel — 规范更新

规范内容

主键字段(Long 类型)不加 @ExcelProperty 注解,不参与 Excel 导出。Vo 中主键仅作为标识字段,需求文档中主键默认 excelExport: false

更新文件

文件 更新内容
Vo.java.template 去掉主键字段的 @ExcelProperty(value = "${pkComment}") 注解
ruoyi-backend/SKILL.md A.5 映射表主键行:@ExcelProperty("ID")不导出;注意事项新增第8条
require/references/requirements-template.md 主键字段模板增加 excelExport: false
require/SKILL.md 字段生成规则主键增加 excelExport=false;注意事项新增第9条
MEMORY.md 技术规范新增「主键不导出 Excel」条目

日期类型规范修正:LocalDateTime → Date

规范内容

日期和时间字段 Java 类型统一使用 java.util.Date(而非 LocalDateTime),与 BaseEntity 基类保持一致。ServiceImpl 中使用 new Date() 而非 LocalDateTime.now()

更新文件

文件 更新内容
EcsAttend.java / Bo / Vo LocalDateTimeDate(checkTime/uploadTime/pushTime)
EcsAttendServiceImpl.java LocalDateTime.now()new Date(),import 改为 java.util.Date
EcsSection.java / Bo / Vo LocalDateTimeDate(courseDate/startTime/endTime + 范围字段)
EcsCourseVo.java createTimeLocalDateTimeDate,删除多余 import
EcsCourseTeacherVo.java createTimeLocalDateTimeDate,删除多余 import
EcsTermVo.java 删除多余的 import java.time.LocalDateTime
require/SKILL.md 日期映射 fieldType=LocalDateTimeDate;通用字段表 LocalDateTimeDate;字段类型映射表 LocalDateTimeDate
ruoyi-backend/SKILL.md A.5 映射表新增 fieldType=Date
4个需求文档(term/attend/section/course) 所有 LocalDateTimeDate
MEMORY.md 新增「日期类型规范」条目