服务启动

This commit is contained in:
2025-12-05 18:24:21 +08:00
parent a8233ceb72
commit 133209691e
39 changed files with 2526 additions and 30 deletions

View File

@@ -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

View File

@@ -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) {

View File

@@ -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

View File

@@ -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