forked from liweijie/education
DBVersion的读写修改
This commit is contained in:
@@ -3,10 +3,29 @@ package com.roomroot.jwgl.mapper;
|
|||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.roomroot.jwgl.entity.DBVersion;
|
import com.roomroot.jwgl.entity.DBVersion;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DBVersion Mapper
|
* DBVersion Mapper
|
||||||
|
*
|
||||||
|
* 注意:DBVersion 表与部分列为混合大小写标识符,且该表按"最大 ID=当前版本"
|
||||||
|
* 保留历史记录,禁止用 MyBatis-Plus 自动生成的 select/insert/update
|
||||||
|
* (约定列名与真实列名不符),必须走本接口的显式 XML 语句。
|
||||||
*/
|
*/
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface DBVersionMapper extends BaseMapper<DBVersion> {
|
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="sSKBJ" />
|
||||||
<result column="增加学时标记" property="zJXSBJ" />
|
<result column="增加学时标记" property="zJXSBJ" />
|
||||||
<result column="减少学时标记" property="jSXSBJ" />
|
<result column="减少学时标记" property="jSXSBJ" />
|
||||||
<result column="JSONZD" property="jsonZD" />
|
<result column="json字典" property="jsonZD" />
|
||||||
<result column="学员正课请假模板文件编号" property="xYZKQJMBWJBH" />
|
<result column="学员正课请假模板文件编号" property="xYZKQJMBWJBH" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="Base_Column_List">
|
<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>
|
</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>
|
</mapper>
|
||||||
|
|||||||
+2
-2
@@ -179,7 +179,7 @@
|
|||||||
"大屏显示教学内容", "大屏显示前景标题颜色",
|
"大屏显示教学内容", "大屏显示前景标题颜色",
|
||||||
"大屏显示前景内容颜色", "大屏显示背景颜色",
|
"大屏显示前景内容颜色", "大屏显示背景颜色",
|
||||||
"实践课标记", "三实课标记", "增加学时标记",
|
"实践课标记", "三实课标记", "增加学时标记",
|
||||||
"减少学时标记", "JSONZD", "学员正课请假模板文件编号"
|
"减少学时标记", "json字典", "学员正课请假模板文件编号"
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
currentVersion."ID" + 1,
|
currentVersion."ID" + 1,
|
||||||
@@ -222,7 +222,7 @@
|
|||||||
currentVersion."三实课标记",
|
currentVersion."三实课标记",
|
||||||
currentVersion."增加学时标记",
|
currentVersion."增加学时标记",
|
||||||
currentVersion."减少学时标记",
|
currentVersion."减少学时标记",
|
||||||
currentVersion."JSONZD",
|
currentVersion."json字典",
|
||||||
currentVersion."学员正课请假模板文件编号"
|
currentVersion."学员正课请假模板文件编号"
|
||||||
FROM "DBVersion" currentVersion
|
FROM "DBVersion" currentVersion
|
||||||
WHERE currentVersion."ID" = #{dto.expectedVersionId}
|
WHERE currentVersion."ID" = #{dto.expectedVersionId}
|
||||||
|
|||||||
+13
-32
@@ -1,60 +1,41 @@
|
|||||||
package com.roomroot.jwgl.service.impl;
|
package com.roomroot.jwgl.service.impl;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
||||||
import com.roomroot.jwgl.entity.DBVersion;
|
import com.roomroot.jwgl.entity.DBVersion;
|
||||||
import com.roomroot.jwgl.mapper.DBVersionMapper;
|
import com.roomroot.jwgl.mapper.DBVersionMapper;
|
||||||
import com.roomroot.jwgl.service.SystemSettingsService;
|
import com.roomroot.jwgl.service.SystemSettingsService;
|
||||||
import com.roomroot.jwgl.utils.UuidUtil;
|
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 教务系统参数实现:DBVersion 单行 get-or-create,更新仅写非空字段。
|
* 教务系统参数实现:DBVersion 按"最大 ID=当前版本"读取,
|
||||||
|
* 更新复制当前行生成新版本(保留历史),仅覆盖非空字段。
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class SystemSettingsServiceImpl implements SystemSettingsService {
|
public class SystemSettingsServiceImpl implements SystemSettingsService {
|
||||||
|
|
||||||
|
private static final String INITIAL_VERSION_VALUE = "1";
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private DBVersionMapper dbVersionMapper;
|
private DBVersionMapper dbVersionMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DBVersion get() {
|
public DBVersion get() {
|
||||||
DBVersion row = dbVersionMapper.selectOne(
|
DBVersion row = dbVersionMapper.selectCurrent();
|
||||||
new LambdaQueryWrapper<DBVersion>().last("LIMIT 1"));
|
|
||||||
return row == null ? new DBVersion() : row;
|
return row == null ? new DBVersion() : row;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@Override
|
||||||
public DBVersion update(DBVersion settings) {
|
public DBVersion update(DBVersion settings) {
|
||||||
DBVersion row = dbVersionMapper.selectOne(
|
LocalDateTime now = LocalDateTime.now();
|
||||||
new LambdaQueryWrapper<DBVersion>().last("LIMIT 1"));
|
if (dbVersionMapper.selectCurrent() == null) {
|
||||||
if (row == null) {
|
dbVersionMapper.insertInitialSettings(settings, now, INITIAL_VERSION_VALUE);
|
||||||
row = new DBVersion();
|
} else {
|
||||||
row.setXYZKQJMBWJBH(UuidUtil.getUUID());
|
dbVersionMapper.insertNextSettingsVersion(settings, now);
|
||||||
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());
|
|
||||||
}
|
}
|
||||||
|
return get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user