服务启动
This commit is contained in:
@@ -20,6 +20,15 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
@Mapper
|
||||
public interface TbSysConfigMapper extends BaseMapper<TbSysConfigDTO> {
|
||||
|
||||
/**
|
||||
* @description 从key读取配置
|
||||
* @param
|
||||
* @author yslg
|
||||
* @since 2025-12-05
|
||||
*/
|
||||
TbSysConfigDTO selectSysConfigByKey(@Param("configKey") String configKey);
|
||||
|
||||
|
||||
/**
|
||||
* @description 插入系统配置
|
||||
* @param configDTO 系统配置DTO
|
||||
|
||||
@@ -41,6 +41,190 @@ public class SysConfigServiceImpl implements SysConfigService {
|
||||
@Resource
|
||||
private TbSysConfigMapper configMapper;
|
||||
|
||||
/**
|
||||
* 根据key查询配置
|
||||
*/
|
||||
private TbSysConfigDTO getConfigByKey(String key) {
|
||||
if (key == null || key.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
return configMapper.selectSysConfigByKey(key);
|
||||
}
|
||||
|
||||
public Object getSysConfig(String key) {
|
||||
try {
|
||||
TbSysConfigDTO config = getConfigByKey(key);
|
||||
if (config == null) {
|
||||
logger.warn("配置项不存在: {}", key);
|
||||
return null;
|
||||
}
|
||||
|
||||
String configType = config.getConfigType();
|
||||
String configValue = config.getValue();
|
||||
|
||||
if (configValue == null || configValue.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 根据config_type返回对应的类型
|
||||
if (configType == null || "string".equalsIgnoreCase(configType)) {
|
||||
return configValue;
|
||||
} else if ("number".equalsIgnoreCase(configType) || "integer".equalsIgnoreCase(configType)) {
|
||||
try {
|
||||
// 尝试解析为Integer,如果失败则解析为Long
|
||||
return Integer.parseInt(configValue);
|
||||
} catch (NumberFormatException e) {
|
||||
try {
|
||||
return Long.parseLong(configValue);
|
||||
} catch (NumberFormatException ex) {
|
||||
logger.error("配置项 {} 的值无法转换为数字: {}", key, configValue);
|
||||
return configValue;
|
||||
}
|
||||
}
|
||||
} else if ("boolean".equalsIgnoreCase(configType)) {
|
||||
String value = configValue.toLowerCase().trim();
|
||||
if ("true".equals(value) || "1".equals(value) || "yes".equals(value) || "on".equals(value)) {
|
||||
return true;
|
||||
} else if ("false".equals(value) || "0".equals(value) || "no".equals(value) || "off".equals(value)) {
|
||||
return false;
|
||||
} else {
|
||||
logger.warn("配置项 {} 的值无法识别为Boolean: {}", key, value);
|
||||
return configValue;
|
||||
}
|
||||
} else if ("double".equalsIgnoreCase(configType) || "float".equalsIgnoreCase(configType)) {
|
||||
try {
|
||||
return Double.parseDouble(configValue);
|
||||
} catch (NumberFormatException e) {
|
||||
logger.error("配置项 {} 的值无法转换为Double: {}", key, configValue);
|
||||
return configValue;
|
||||
}
|
||||
} else {
|
||||
// 未知类型,直接返回字符串
|
||||
return configValue;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("获取配置失败: {}", key, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStringConfig(String key) {
|
||||
try {
|
||||
TbSysConfigDTO config = getConfigByKey(key);
|
||||
if (config == null) {
|
||||
logger.warn("配置项不存在: {}", key);
|
||||
return null;
|
||||
}
|
||||
return config.getValue();
|
||||
} catch (Exception e) {
|
||||
logger.error("获取字符串配置失败: {}", key, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getIntConfig(String key) {
|
||||
try {
|
||||
TbSysConfigDTO config = getConfigByKey(key);
|
||||
if (config == null) {
|
||||
logger.warn("配置项不存在: {}", key);
|
||||
return null;
|
||||
}
|
||||
|
||||
String value = config.getValue();
|
||||
if (value == null || value.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return Integer.parseInt(value);
|
||||
} catch (NumberFormatException e) {
|
||||
logger.error("配置项 {} 的值无法转换为Integer: {}", key, e.getMessage());
|
||||
return null;
|
||||
} catch (Exception e) {
|
||||
logger.error("获取Integer配置失败: {}", key, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean getBooleanConfig(String key) {
|
||||
try {
|
||||
TbSysConfigDTO config = getConfigByKey(key);
|
||||
if (config == null) {
|
||||
logger.warn("配置项不存在: {}", key);
|
||||
return null;
|
||||
}
|
||||
|
||||
String value = config.getValue();
|
||||
if (value == null || value.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 支持多种布尔值表示:true/false, 1/0, yes/no, on/off
|
||||
value = value.toLowerCase().trim();
|
||||
if ("true".equals(value) || "1".equals(value) || "yes".equals(value) || "on".equals(value)) {
|
||||
return true;
|
||||
} else if ("false".equals(value) || "0".equals(value) || "no".equals(value) || "off".equals(value)) {
|
||||
return false;
|
||||
} else {
|
||||
logger.warn("配置项 {} 的值无法识别为Boolean: {}", key, value);
|
||||
return null;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("获取Boolean配置失败: {}", key, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getDoubleConfig(String key) {
|
||||
try {
|
||||
TbSysConfigDTO config = getConfigByKey(key);
|
||||
if (config == null) {
|
||||
logger.warn("配置项不存在: {}", key);
|
||||
return null;
|
||||
}
|
||||
|
||||
String value = config.getValue();
|
||||
if (value == null || value.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return Double.parseDouble(value);
|
||||
} catch (NumberFormatException e) {
|
||||
logger.error("配置项 {} 的值无法转换为Double: {}", key, e.getMessage());
|
||||
return null;
|
||||
} catch (Exception e) {
|
||||
logger.error("获取Double配置失败: {}", key, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getLongConfig(String key) {
|
||||
try {
|
||||
TbSysConfigDTO config = getConfigByKey(key);
|
||||
if (config == null) {
|
||||
logger.warn("配置项不存在: {}", key);
|
||||
return null;
|
||||
}
|
||||
|
||||
String value = config.getValue();
|
||||
if (value == null || value.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return Long.parseLong(value);
|
||||
} catch (NumberFormatException e) {
|
||||
logger.error("配置项 {} 的值无法转换为Long: {}", key, e.getMessage());
|
||||
return null;
|
||||
} catch (Exception e) {
|
||||
logger.error("获取Long配置失败: {}", key, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbSysConfigDTO> insertConfig(TbSysConfigDTO configDTO) {
|
||||
if (configDTO == null) {
|
||||
|
||||
@@ -19,10 +19,15 @@ import org.xyzh.common.core.page.PageParam;
|
||||
import org.xyzh.common.core.page.PageDomain;
|
||||
|
||||
import org.xyzh.common.utils.IDUtils;
|
||||
import org.xyzh.common.utils.NonUtils;
|
||||
import org.xyzh.common.utils.StringUtils;
|
||||
import org.xyzh.common.utils.crypto.AesEncryptUtil;
|
||||
import org.xyzh.system.mapper.user.TbSysUserMapper;
|
||||
import org.xyzh.system.mapper.user.TbSysUserInfoMapper;
|
||||
import org.xyzh.system.mapper.user.TbSysUserRoleMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* @description 用户服务实现类
|
||||
@@ -52,6 +57,112 @@ public class SysUserServiceImpl implements SysUserService {
|
||||
@Resource
|
||||
private TbSysUserRoleMapper userRoleMapper;
|
||||
|
||||
@Autowired
|
||||
private PasswordEncoder passwordEncoder;
|
||||
|
||||
@Autowired
|
||||
private AesEncryptUtil aesEncryptUtil;
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public ResultDomain<TbSysUserDTO> registerUser(SysUserVO userVO) {
|
||||
try {
|
||||
logger.info("开始注册用户:{}", userVO.getUsername());
|
||||
|
||||
// 检查用户是否已存在
|
||||
if (checkUserExists(userVO)) {
|
||||
return ResultDomain.failure("用户已存在");
|
||||
}
|
||||
|
||||
// 转换为 DTO
|
||||
TbSysUserDTO dto = SysUserVO.toDTO(userVO);
|
||||
|
||||
// 设置用户基本信息
|
||||
Date now = new Date();
|
||||
if (StringUtils.isBlank(dto.getUserId())) {
|
||||
dto.setUserId(IDUtils.generateID());
|
||||
}
|
||||
dto.setCreateTime(now);
|
||||
dto.setDeleted(false);
|
||||
|
||||
// 加密密码
|
||||
if (StringUtils.isNotBlank(dto.getPassword())) {
|
||||
dto.setPassword(passwordEncoder.encode(dto.getPassword()));
|
||||
}
|
||||
|
||||
// 插入用户主表
|
||||
int rows = userMapper.insertUser(dto);
|
||||
if (rows <= 0) {
|
||||
logger.warn("插入用户失败, username={}", dto.getUsername());
|
||||
return ResultDomain.failure("插入用户失败");
|
||||
}
|
||||
|
||||
// 创建用户信息表
|
||||
TbSysUserInfoDTO userInfo = new TbSysUserInfoDTO();
|
||||
userInfo.setUserId(dto.getUserId());
|
||||
userInfo.setCreateTime(now);
|
||||
userInfo.setAvatar("default");
|
||||
userInfoMapper.insertUserInfo(userInfo);
|
||||
|
||||
// 分配默认角色(role_guest)
|
||||
TbSysUserRoleDTO userRole = new TbSysUserRoleDTO();
|
||||
userRole.setUserId(dto.getUserId());
|
||||
userRole.setRoleId("role_guest");
|
||||
userRole.setCreateTime(now);
|
||||
userRoleMapper.insertUserRole(userRole);
|
||||
|
||||
logger.info("注册用户成功, userId={}, username={}", dto.getUserId(), dto.getUsername());
|
||||
return ResultDomain.success("注册用户成功", dto);
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("注册用户失败:{}", userVO.getUsername(), e);
|
||||
return ResultDomain.failure("注册用户失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查用户是否已存在
|
||||
* @param userVO 用户信息
|
||||
* @return true-存在,false-不存在
|
||||
*/
|
||||
private boolean checkUserExists(SysUserVO userVO) {
|
||||
TbSysUserDTO filter = new TbSysUserDTO();
|
||||
|
||||
// 检查用户名是否存在
|
||||
if (StringUtils.isNotBlank(userVO.getUsername())) {
|
||||
filter.setUsername(userVO.getUsername());
|
||||
List<SysUserVO> users = userMapper.getUserByFilter(filter);
|
||||
if (users != null && !users.isEmpty()) {
|
||||
logger.warn("用户名已存在: {}", userVO.getUsername());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// 检查手机号是否存在
|
||||
if (StringUtils.isNotBlank(userVO.getPhone())) {
|
||||
filter = new TbSysUserDTO();
|
||||
filter.setPhone(userVO.getPhone());
|
||||
List<SysUserVO> users = userMapper.getUserByFilter(filter);
|
||||
if (users != null && !users.isEmpty()) {
|
||||
logger.warn("手机号已存在: {}", userVO.getPhone());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// 检查邮箱是否存在
|
||||
if (StringUtils.isNotBlank(userVO.getEmail())) {
|
||||
filter = new TbSysUserDTO();
|
||||
filter.setEmail(userVO.getEmail());
|
||||
List<SysUserVO> users = userMapper.getUserByFilter(filter);
|
||||
if (users != null && !users.isEmpty()) {
|
||||
logger.warn("邮箱已存在: {}", userVO.getEmail());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbSysUserDTO> insertUser(SysUserVO userVO) {
|
||||
if (userVO == null) {
|
||||
@@ -120,9 +231,12 @@ public class SysUserServiceImpl implements SysUserService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<SysUserVO> getLoginUser(SysUserVO filter) {
|
||||
public ResultDomain<TbSysUserDTO> getLoginUser(TbSysUserDTO filter) {
|
||||
// 登录查询语义与 getUser 相同(可根据用户名/手机号/邮箱查询)
|
||||
return getUser(filter);
|
||||
if(NonUtils.isNotNull(filter.getPhone())){
|
||||
filter.setPhone_hash(aesEncryptUtil.encrypt(filter.getPhone()));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -67,6 +67,15 @@
|
||||
optsn, creator, updater, dept_path, remark, create_time, update_time, delete_time, deleted
|
||||
</sql>
|
||||
|
||||
<!-- selectSysConfigByKey -->
|
||||
|
||||
<select id="selectSysConfigByKey">
|
||||
SELECT <include refid="Base_Column_List" />
|
||||
FROM config.tb_sys_config
|
||||
WHERE config_key = #{configKey}
|
||||
AND deleted = 0
|
||||
</select>
|
||||
|
||||
<!-- 插入系统配置 -->
|
||||
<insert id="insertConfig" parameterType="TbSysConfigDTO">
|
||||
INSERT INTO config.tb_sys_config
|
||||
|
||||
Reference in New Issue
Block a user