diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/DBVersionMapper.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/DBVersionMapper.java index 023fe2c4..0340168f 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/DBVersionMapper.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/DBVersionMapper.java @@ -3,10 +3,29 @@ package com.roomroot.jwgl.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.roomroot.jwgl.entity.DBVersion; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.time.LocalDateTime; /** * DBVersion Mapper + * + * 注意:DBVersion 表与部分列为混合大小写标识符,且该表按"最大 ID=当前版本" + * 保留历史记录,禁止用 MyBatis-Plus 自动生成的 select/insert/update + * (约定列名与真实列名不符),必须走本接口的显式 XML 语句。 */ @Mapper public interface DBVersionMapper extends BaseMapper { + + /** 当前生效配置:最大 ID 行。 */ + DBVersion selectCurrent(); + + /** 版本表为空时写入第一条设置记录,未提供字段走数据库默认值。 */ + int insertInitialSettings(@Param("dto") DBVersion dto, + @Param("versionDate") LocalDateTime versionDate, + @Param("versionValue") String versionValue); + + /** 复制当前版本整行并覆盖本次提供的设置字段,形成新版本。 */ + int insertNextSettingsVersion(@Param("dto") DBVersion dto, + @Param("versionDate") LocalDateTime versionDate); } diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/DBVersionMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/DBVersionMapper.xml index 02b62f86..29c9a1b7 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/DBVersionMapper.xml +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/DBVersionMapper.xml @@ -43,12 +43,126 @@ - + -ID, VersionDate, VersionValue, UniversityName, 学员队全名称含年级, 学期名称样式, 节次类别, 外部文件存储根路径, 本站文件访问路径, 登录失败弹窗, 允许密码尝试次数, 用户锁定分钟数, 允许教研室管理教材, 使用虚拟教学场地设置班次专用教室, 使用虚拟教员设置课程责任教员, 允许多主讲分组教学, 跟查课录入锁定天数, UniversityCode, UniversityValidCode, 显示78节, 显示晚上, 显示夜间, 教学要点名称, 教材导出包含图片, 建立班次学期信息时自动生成教学计划, 成绩报表显示结论成绩, 缺省系统名称, Excel课表按开课日期排序, Excel课表显示实施教员数, 系统模式, 课程表标题样式, 课程表副标题样式, 大屏显示教学内容, 大屏显示前景标题颜色, 大屏显示前景内容颜色, 大屏显示背景颜色, 实践课标记, 三实课标记, 增加学时标记, 减少学时标记, JSONZD, 学员正课请假模板文件编号 +"ID", "VersionDate", "VersionValue", "UniversityName", 学员队全名称含年级, 学期名称样式, 节次类别, 外部文件存储根路径, 本站文件访问路径, 登录失败弹窗, 允许密码尝试次数, 用户锁定分钟数, 允许教研室管理教材, 使用虚拟教学场地设置班次专用教室, 使用虚拟教员设置课程责任教员, 允许多主讲分组教学, 跟查课录入锁定天数, "UniversityCode", "UniversityValidCode", 显示78节, 显示晚上, 显示夜间, 教学要点名称, 教材导出包含图片, 建立班次学期信息时自动生成教学计划, 成绩报表显示结论成绩, 缺省系统名称, "Excel课表按开课日期排序", "Excel课表显示实施教员数", 系统模式, 课程表标题样式, 课程表副标题样式, 大屏显示教学内容, 大屏显示前景标题颜色, 大屏显示前景内容颜色, 大屏显示背景颜色, 实践课标记, 三实课标记, 增加学时标记, 减少学时标记, "json字典", "学员正课请假模板文件编号" + + + + + + INSERT INTO "DBVersion" ( + "ID", "VersionDate", "VersionValue" + , "显示78节" + , "显示晚上" + , "显示夜间" + , "教学要点名称" + ) + SELECT 1, #{versionDate}, #{versionValue} + , #{dto.XS78J} + , #{dto.XSWS} + , #{dto.XSYJ} + , #{dto.JXYDMC} + FROM DUAL + WHERE NOT EXISTS ( + SELECT 1 FROM "DBVersion" + ) + + + + + INSERT INTO "DBVersion" ( + "ID", "VersionDate", "VersionValue", "UniversityName", + "学员队全名称含年级", "学期名称样式", "节次类别", + "外部文件存储根路径", "本站文件访问路径", + "登录失败弹窗", "允许密码尝试次数", "用户锁定分钟数", + "允许教研室管理教材", + "使用虚拟教学场地设置班次专用教室", + "使用虚拟教员设置课程责任教员", + "允许多主讲分组教学", "跟查课录入锁定天数", + "UniversityCode", "UniversityValidCode", + "显示78节", "显示晚上", "显示夜间", "教学要点名称", + "教材导出包含图片", + "建立班次学期信息时自动生成教学计划", + "成绩报表显示结论成绩", "缺省系统名称", + "Excel课表按开课日期排序", "Excel课表显示实施教员数", + "系统模式", "课程表标题样式", "课程表副标题样式", + "大屏显示教学内容", "大屏显示前景标题颜色", + "大屏显示前景内容颜色", "大屏显示背景颜色", + "实践课标记", "三实课标记", "增加学时标记", + "减少学时标记", "json字典", "学员正课请假模板文件编号" + ) + SELECT + currentVersion."ID" + 1, + #{versionDate}, + currentVersion."VersionValue", + currentVersion."UniversityName", + currentVersion."学员队全名称含年级", + currentVersion."学期名称样式", + currentVersion."节次类别", + currentVersion."外部文件存储根路径", + currentVersion."本站文件访问路径", + currentVersion."登录失败弹窗", + currentVersion."允许密码尝试次数", + currentVersion."用户锁定分钟数", + currentVersion."允许教研室管理教材", + currentVersion."使用虚拟教学场地设置班次专用教室", + currentVersion."使用虚拟教员设置课程责任教员", + currentVersion."允许多主讲分组教学", + currentVersion."跟查课录入锁定天数", + currentVersion."UniversityCode", + currentVersion."UniversityValidCode", + + #{dto.XS78J} + currentVersion."显示78节" + , + + #{dto.XSWS} + currentVersion."显示晚上" + , + + #{dto.XSYJ} + currentVersion."显示夜间" + , + + #{dto.JXYDMC} + currentVersion."教学要点名称" + , + currentVersion."教材导出包含图片", + currentVersion."建立班次学期信息时自动生成教学计划", + currentVersion."成绩报表显示结论成绩", + currentVersion."缺省系统名称", + currentVersion."Excel课表按开课日期排序", + currentVersion."Excel课表显示实施教员数", + currentVersion."系统模式", + currentVersion."课程表标题样式", + currentVersion."课程表副标题样式", + currentVersion."大屏显示教学内容", + currentVersion."大屏显示前景标题颜色", + currentVersion."大屏显示前景内容颜色", + currentVersion."大屏显示背景颜色", + currentVersion."实践课标记", + currentVersion."三实课标记", + currentVersion."增加学时标记", + currentVersion."减少学时标记", + currentVersion."json字典", + currentVersion."学员正课请假模板文件编号" + FROM "DBVersion" currentVersion + WHERE currentVersion."ID" = ( + SELECT MAX("ID") FROM "DBVersion" + ) + + diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SystemInitializationMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SystemInitializationMapper.xml index 82d2d990..5cef1fe4 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SystemInitializationMapper.xml +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SystemInitializationMapper.xml @@ -179,7 +179,7 @@ "大屏显示教学内容", "大屏显示前景标题颜色", "大屏显示前景内容颜色", "大屏显示背景颜色", "实践课标记", "三实课标记", "增加学时标记", - "减少学时标记", "JSONZD", "学员正课请假模板文件编号" + "减少学时标记", "json字典", "学员正课请假模板文件编号" ) SELECT currentVersion."ID" + 1, @@ -222,7 +222,7 @@ currentVersion."三实课标记", currentVersion."增加学时标记", currentVersion."减少学时标记", - currentVersion."JSONZD", + currentVersion."json字典", currentVersion."学员正课请假模板文件编号" FROM "DBVersion" currentVersion WHERE currentVersion."ID" = #{dto.expectedVersionId} diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/SystemSettingsServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/SystemSettingsServiceImpl.java index d08e017e..94406ad1 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/SystemSettingsServiceImpl.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/SystemSettingsServiceImpl.java @@ -1,60 +1,41 @@ package com.roomroot.jwgl.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.roomroot.jwgl.entity.DBVersion; import com.roomroot.jwgl.mapper.DBVersionMapper; import com.roomroot.jwgl.service.SystemSettingsService; -import com.roomroot.jwgl.utils.UuidUtil; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; + /** - * 教务系统参数实现:DBVersion 单行 get-or-create,更新仅写非空字段。 + * 教务系统参数实现:DBVersion 按"最大 ID=当前版本"读取, + * 更新复制当前行生成新版本(保留历史),仅覆盖非空字段。 */ @Service public class SystemSettingsServiceImpl implements SystemSettingsService { + private static final String INITIAL_VERSION_VALUE = "1"; + @Resource private DBVersionMapper dbVersionMapper; @Override public DBVersion get() { - DBVersion row = dbVersionMapper.selectOne( - new LambdaQueryWrapper().last("LIMIT 1")); + DBVersion row = dbVersionMapper.selectCurrent(); return row == null ? new DBVersion() : row; } @Transactional(rollbackFor = Exception.class) @Override public DBVersion update(DBVersion settings) { - DBVersion row = dbVersionMapper.selectOne( - new LambdaQueryWrapper().last("LIMIT 1")); - if (row == null) { - row = new DBVersion(); - row.setXYZKQJMBWJBH(UuidUtil.getUUID()); - apply(row, settings); - dbVersionMapper.insert(row); - return row; - } - apply(row, settings); - dbVersionMapper.updateById(row); - return row; - } - - /** 只写非空字段,避免前端局部提交清空其它参数 */ - private void apply(DBVersion row, DBVersion src) { - if (src.getXS78J() != null) { - row.setXS78J(src.getXS78J()); - } - if (src.getXSWS() != null) { - row.setXSWS(src.getXSWS()); - } - if (src.getXSYJ() != null) { - row.setXSYJ(src.getXSYJ()); - } - if (src.getJXYDMC() != null) { - row.setJXYDMC(src.getJXYDMC()); + LocalDateTime now = LocalDateTime.now(); + if (dbVersionMapper.selectCurrent() == null) { + dbVersionMapper.insertInitialSettings(settings, now, INITIAL_VERSION_VALUE); + } else { + dbVersionMapper.insertNextSettingsVersion(settings, now); } + return get(); } }