From 1f4b85f9b594bcf49dc4cb3804fa3dbc65d6a649 Mon Sep 17 00:00:00 2001 From: XiaoLFeng Date: Tue, 16 Apr 2024 14:56:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E8=AE=BE=E5=A4=87=E5=87=86=E5=A4=87=E7=9A=84=E6=89=80?= =?UTF-8?q?=E9=9C=80=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsl/oa/config/startup/PrepareData.java | 18 +-- .../config/startup/StartupConfiguration.java | 145 ++++++++++++++++-- .../oa/services/impl/ModuleServiceImpl.java | 8 +- 3 files changed, 148 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/jsl/oa/config/startup/PrepareData.java b/src/main/java/com/jsl/oa/config/startup/PrepareData.java index f9fafa6..46449ee 100644 --- a/src/main/java/com/jsl/oa/config/startup/PrepareData.java +++ b/src/main/java/com/jsl/oa/config/startup/PrepareData.java @@ -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,15 +16,15 @@ 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, - roleName - ); - // 检查角色是否存在 - if (getRole == null) { + try { + jdbcTemplate.queryForObject( + "SELECT id FROM organize_oa.oa_role WHERE role_name = ? LIMIT 1", + Long.class, + roleName + ); + } catch (DataAccessException e) { // 创建角色 - log.debug("[Preparation] 创建角色 [{}]{}", roleName, displayName); + log.debug("[Preparation] 创建角色 [{}] {}", roleName, displayName); jdbcTemplate.update( "INSERT INTO organize_oa.oa_role (role_name, display_name) VALUES (?,?)", roleName, diff --git a/src/main/java/com/jsl/oa/config/startup/StartupConfiguration.java b/src/main/java/com/jsl/oa/config/startup/StartupConfiguration.java index a3202a3..37b4a3e 100644 --- a/src/main/java/com/jsl/oa/config/startup/StartupConfiguration.java +++ b/src/main/java/com/jsl/oa/config/startup/StartupConfiguration.java @@ -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 { }; } + /** + * 检查默认管理员账户 + *
+ * 为程序进行检查默认管理员程序,检查默认管理员是否存在,若管理员存在且权限正确则检查通过,若检查失败或该用户不存在将会创建一个超级管理员 + * 账户。 + */ + @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 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("") + ); + } + }; + } + /** * 准备安全密钥 *
* 准备安全密钥,用于加密解密等操作 */ @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 getData = gson.fromJson( + getSecurityKey, + new TypeToken>() { + }.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("===========================================================>"); + }; + } } diff --git a/src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java index ac75a22..147cf52 100644 --- a/src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java @@ -62,14 +62,14 @@ public class ModuleServiceImpl implements ModuleService { } List projectWorkDOList = moduleMapper.getBySysId(sysId, userId, is); -// 封装VO类 + // 封装VO类 List projectWorkAndNameVOS = new ArrayList<>(); for (ProjectModuleDO projectWorkDO : projectWorkDOList) { 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);