DBVersion的读写修改

This commit is contained in:
2026-09-18 16:56:26 +08:00
parent e27b61b5fe
commit cff7b039e3
4 changed files with 150 additions and 36 deletions
@@ -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<DBVersion> {
/** 当前生效配置:最大 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);
}
@@ -43,12 +43,126 @@
<result column="三实课标记" property="sSKBJ" />
<result column="增加学时标记" property="zJXSBJ" />
<result column="减少学时标记" property="jSXSBJ" />
<result column="JSONZD" property="jsonZD" />
<result column="json字典" property="jsonZD" />
<result column="学员正课请假模板文件编号" property="xYZKQJMBWJBH" />
</resultMap>
<sql id="Base_Column_List">
ID, VersionDate, VersionValue, UniversityName, 学员队全名称含年级, 学期名称样式, 节次类别, 外部文件存储根路径, 本站文件访问路径, 登录失败弹窗, 允许密码尝试次数, 用户锁定分钟数, 允许教研室管理教材, 使用虚拟教学场地设置班次专用教室, 使用虚拟教员设置课程责任教员, 允许多主讲分组教学, 跟查课录入锁定天数, UniversityCode, UniversityValidCode, 显示78节, 显示晚上, 显示夜间, 教学要点名称, 教材导出包含图片, 建立班次学期信息时自动生成教学计划, 成绩报表显示结论成绩, 缺省系统名称, Excel课表按开课日期排序, Excel课表显示实施教员数, 系统模式, 课程表标题样式, 课程表副标题样式, 大屏显示教学内容, 大屏显示前景标题颜色, 大屏显示前景内容颜色, 大屏显示背景颜色, 实践课标记, 三实课标记, 增加学时标记, 减少学时标记, JSONZD, 学员正课请假模板文件编号
"ID", "VersionDate", "VersionValue", "UniversityName", 学员队全名称含年级, 学期名称样式, 节次类别, 外部文件存储根路径, 本站文件访问路径, 登录失败弹窗, 允许密码尝试次数, 用户锁定分钟数, 允许教研室管理教材, 使用虚拟教学场地设置班次专用教室, 使用虚拟教员设置课程责任教员, 允许多主讲分组教学, 跟查课录入锁定天数, "UniversityCode", "UniversityValidCode", 显示78节, 显示晚上, 显示夜间, 教学要点名称, 教材导出包含图片, 建立班次学期信息时自动生成教学计划, 成绩报表显示结论成绩, 缺省系统名称, "Excel课表按开课日期排序", "Excel课表显示实施教员数", 系统模式, 课程表标题样式, 课程表副标题样式, 大屏显示教学内容, 大屏显示前景标题颜色, 大屏显示前景内容颜色, 大屏显示背景颜色, 实践课标记, 三实课标记, 增加学时标记, 减少学时标记, "json字典", "学员正课请假模板文件编号"
</sql>
<!-- 当前生效配置:版本表保留历史,最大 ID 行为当前版本。 -->
<select id="selectCurrent" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM "DBVersion"
WHERE "ID" = (
SELECT MAX("ID") FROM "DBVersion"
)
</select>
<!-- 版本表为空时写入第一条设置记录;未提供字段走数据库默认值。 -->
<insert id="insertInitialSettings">
INSERT INTO "DBVersion" (
"ID", "VersionDate", "VersionValue"
<if test="dto.XS78J != null">, "显示78节"</if>
<if test="dto.XSWS != null">, "显示晚上"</if>
<if test="dto.XSYJ != null">, "显示夜间"</if>
<if test="dto.JXYDMC != null">, "教学要点名称"</if>
)
SELECT 1, #{versionDate}, #{versionValue}
<if test="dto.XS78J != null">, #{dto.XS78J}</if>
<if test="dto.XSWS != null">, #{dto.XSWS}</if>
<if test="dto.XSYJ != null">, #{dto.XSYJ}</if>
<if test="dto.JXYDMC != null">, #{dto.JXYDMC}</if>
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM "DBVersion"
)
</insert>
<!-- 复制当前版本整行并覆盖本次提供的设置字段,形成新版本,不原地改历史行。 -->
<insert id="insertNextSettingsVersion">
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",
<choose>
<when test="dto.XS78J != null">#{dto.XS78J}</when>
<otherwise>currentVersion."显示78节"</otherwise>
</choose>,
<choose>
<when test="dto.XSWS != null">#{dto.XSWS}</when>
<otherwise>currentVersion."显示晚上"</otherwise>
</choose>,
<choose>
<when test="dto.XSYJ != null">#{dto.XSYJ}</when>
<otherwise>currentVersion."显示夜间"</otherwise>
</choose>,
<choose>
<when test="dto.JXYDMC != null">#{dto.JXYDMC}</when>
<otherwise>currentVersion."教学要点名称"</otherwise>
</choose>,
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"
)
</insert>
</mapper>
@@ -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}
@@ -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<DBVersion>().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<DBVersion>().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();
}
}