forked from liweijie/education
DBVersion的读写修改
This commit is contained in:
+13
-32
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user