feat: 添加初始化设备准备的所需数据

This commit is contained in:
筱锋xiao_lfeng 2024-04-16 14:56:41 +08:00
parent 39ad8a0944
commit 1f4b85f9b5
Signed by: XiaoLFeng
GPG Key ID: F693AA12AABBFA87
3 changed files with 148 additions and 23 deletions

View File

@ -1,8 +1,8 @@
package com.jsl.oa.config.startup;
import com.jsl.oa.model.dodata.RoleDO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
@Slf4j
@ -16,13 +16,13 @@ public class PrepareData {
* 检查检查指定的角色是否存在如果不存在则创建
*/
public void checkRole(String roleName, String displayName) {
RoleDO getRole = jdbcTemplate.queryForObject(
"SELECT * FROM organize_oa.oa_role WHERE role_name = ?",
RoleDO.class,
try {
jdbcTemplate.queryForObject(
"SELECT id FROM organize_oa.oa_role WHERE role_name = ? LIMIT 1",
Long.class,
roleName
);
// 检查角色是否存在
if (getRole == null) {
} catch (DataAccessException e) {
// 创建角色
log.debug("[Preparation] 创建角色 [{}] {}", roleName, displayName);
jdbcTemplate.update(

View File

@ -1,19 +1,24 @@
package com.jsl.oa.config.startup;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.jsl.oa.common.constant.SafeConstants;
import com.jsl.oa.model.dodata.ConfigDO;
import com.jsl.oa.model.vodata.business.InfoAboutSecurityKey;
import com.jsl.oa.utils.Processing;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.mindrot.jbcrypt.BCrypt;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import java.sql.Timestamp;
import java.util.Date;
import java.util.HashMap;
/**
* 系统启动时进行的一些初始化操作
@ -32,14 +37,15 @@ import java.sql.Timestamp;
@RequiredArgsConstructor
public class StartupConfiguration {
private final JdbcTemplate jdbcTemplate;
private final PrepareData prepareData = new PrepareData(jdbcTemplate);
private PrepareData prepareData;
@Bean
@Order(1)
public CommandLineRunner startUpPreparation() {
return args -> {
log.info("============================================================");
log.info(">===========================================================");
log.info("[Preparation] 系统进行准备检查");
prepareData = new PrepareData(jdbcTemplate);
};
}
@ -50,7 +56,7 @@ public class StartupConfiguration {
*/
@Bean
@Order(2)
public CommandLineRunner sqlDataPreparation() {
public CommandLineRunner roleDataPreparation() {
return args -> {
log.info("[Preparation] 系统进行数据库完整性检查");
// 检查角色信息是否完整
@ -60,25 +66,135 @@ public class StartupConfiguration {
};
}
/**
* 检查默认管理员账户
* <hr/>
* 为程序进行检查默认管理员程序检查默认管理员是否存在若管理员存在且权限正确则检查通过若检查失败或该用户不存在将会创建一个超级管理员
* 账户
*/
@Bean
@Order(3)
public CommandLineRunner defaultConsoleDataPreparation() {
return args -> {
log.info("[Preparation] 系统进行默认超级管理员信息检查");
// 检查默认的信息是否完整
Long getDefaultUser;
try {
getDefaultUser = jdbcTemplate.queryForObject(
"SELECT id FROM organize_oa.oa_user WHERE job_id = 'OTH0000001'",
Long.class);
} catch (DataAccessException e) {
log.debug("[Preparation] 超级管理员不存在,创建 console_user 超级管理员账户,密码 jsl_nbxt");
jdbcTemplate.update(
"INSERT INTO organize_oa.oa_user "
+ "(job_id, username, password, address, phone, email, age) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?)",
"OTH0000001",
"console_user",
BCrypt.hashpw("jsl_nbxt", BCrypt.gensalt()),
"江苏省/无锡市",
"18888888888",
"console@jsl.com",
"18"
);
getDefaultUser = jdbcTemplate.queryForObject(
"SELECT id FROM organize_oa.oa_user WHERE job_id = 'OTH0000001'",
Long.class);
}
// 检查超级管理员权限是否正确
Long getConsoleRole = jdbcTemplate
.queryForObject("SELECT id FROM organize_oa.oa_role WHERE role_name='console' LIMIT 1", Long.class);
assert getConsoleRole != null;
Long getConsoleRoleUser;
try {
getConsoleRoleUser = jdbcTemplate.queryForObject(
"SELECT rid FROM organize_oa.oa_role_user WHERE uid=?",
Long.class,
getDefaultUser
);
if (!getConsoleRole.equals(getConsoleRoleUser)) {
log.debug("[Preparation] 超级管理员账户权限错误,正在恢复权限至 console 角色组");
jdbcTemplate.update(
"UPDATE organize_oa.oa_role_user SET rid=? WHERE uid=?",
getConsoleRole,
getDefaultUser
);
}
} catch (DataAccessException e) {
log.debug("[Preparation] 为超级管理员账户添加 console 角色组权限");
// 插入超级管理员权限
jdbcTemplate.update(
"INSERT INTO organize_oa.oa_role_user (uid, rid) VALUES (?,?)",
getDefaultUser,
getConsoleRole
);
}
};
}
@Bean
@Order(4)
public CommandLineRunner prepareDefaultConfigData(Gson gson) {
return args -> {
// 检查加密密钥是否存在
try {
jdbcTemplate
.queryForObject("SELECT id FROM organize_oa.oa_config WHERE value='security_key'", Long.class);
} catch (DataAccessException e) {
HashMap<String, String> insertData = new HashMap<>();
insertData.put("key", Processing.generateKey(1233061823L));
insertData.put("updateTime", String.valueOf(new Date().getTime()));
jdbcTemplate.update(
"INSERT INTO organize_oa.oa_config (value, data) VALUES (?,?)",
"security_key",
gson.toJson(insertData)
);
}
// 检查 carousel
try {
jdbcTemplate.queryForObject("SELECT id FROM organize_oa.oa_config WHERE value='carousel'", Long.class);
} catch (DataAccessException e) {
jdbcTemplate.update(
"INSERT INTO organize_oa.oa_config (value, data) VALUES (?,?)",
"carousel",
gson.toJson("")
);
}
// 检查 project_show
try {
jdbcTemplate
.queryForObject("SELECT id FROM organize_oa.oa_config WHERE value='project_show'", Long.class);
} catch (DataAccessException e) {
jdbcTemplate.update(
"INSERT INTO organize_oa.oa_config (value, data) VALUES (?,?)",
"project_show",
gson.toJson("")
);
}
};
}
/**
* 准备安全密钥
* <hr/>
* 准备安全密钥用于加密解密等操作
*/
@Bean
@Order(3)
@Order(5)
public CommandLineRunner prepareKey() {
return args -> {
log.info("[Preparation] 系统进行安全密钥准备");
Gson gson = new Gson();
// 获取数据库中的安全密钥
ConfigDO getSecurityKey = jdbcTemplate.queryForObject(
"SELECT * FROM organize_oa.oa_config WHERE value = ?",
ConfigDO.class,
"security_key"
);
String getSecurityKey = jdbcTemplate.queryForObject(
"SELECT data FROM organize_oa.oa_config WHERE value = 'security_key' LIMIT 1",
String.class);
if (getSecurityKey != null) {
SafeConstants.setSecretKey(getSecurityKey.getData());
HashMap<String, String> getData = gson.fromJson(
getSecurityKey,
new TypeToken<HashMap<String, String>>() {
}.getType());
SafeConstants.setSecretKey(getData.get("key"));
} else {
// 生成密钥
String key = Processing.generateKey(System.currentTimeMillis());
@ -100,4 +216,13 @@ public class StartupConfiguration {
}
};
}
@Bean
@Order(100)
public CommandLineRunner preparationCompleted() {
return args -> {
log.info("[Preparation] 系统准备检查完毕");
log.info("===========================================================>");
};
}
}

View File

@ -68,8 +68,8 @@ public class ModuleServiceImpl implements ModuleService {
ProjectWorkAndNameVO projectWorkAndNameVO = new ProjectWorkAndNameVO();
Processing.copyProperties(projectWorkDO, projectWorkAndNameVO);
// 添加负责人和子系统名称
projectWorkAndNameVO.
setChildSystemName(projectDAO.getProjectWorkerById(projectWorkDO.getPid()).getName())
projectWorkAndNameVO
.setChildSystemName(projectDAO.getProjectWorkerById(projectWorkDO.getProjectChildId()).getName())
.setPrincipalUser(userDAO.getUserById(projectWorkDO.getPrincipalId()).getUsername());
projectWorkAndNameVOS.add(projectWorkAndNameVO);