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
@@ -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();
}
}