refactor(auth): 规范化认证模块命名和代码结构

This commit is contained in:
Ray.Hao
2025-12-29 16:35:55 +08:00
parent 1155d01b27
commit 2e850debb4
7 changed files with 34 additions and 273 deletions

View File

@@ -1,257 +0,0 @@
# Java 项目重复类定义修复总结
## 📅 修复日期
2024-12-28
## 🐛 问题描述
youlai-boot 和 youlai-boot-tenant 项目中的部分 VO 类文件存在**重复的类定义**,导致编译错误。
---
## 🔍 问题原因
某些 Java 文件中意外包含了两次完全相同的类定义,可能是由于:
1. 复制粘贴错误
2. 合并冲突未正确解决
3. 编辑器误操作
---
## ✅ 已修复的文件
### youlai-boot 项目
#### 1. NoticeDetailVo.java
**文件路径**`youlai-boot/src/main/java/com/youlai/boot/system/model/vo/NoticeDetailVo.java`
**问题**
```java
package com.youlai.boot.system.model.vo;
// ... 第一个类定义 ...
}
package com.youlai.boot.system.model.vo; // ❌ 重复的 package 声明
// ... 第二个类定义(完全相同)...
}
```
**修复**:删除重复的类定义,只保留一个
---
### youlai-boot-tenant 项目
#### 2. TenantPageVo.java
**文件路径**`youlai-boot-tenant/src/main/java/com/youlai/boot/system/model/vo/TenantPageVo.java`
**问题**
```java
package com.youlai.boot.system.model.vo;
// ... 第一个类定义 ...
}
package com.youlai.boot.system.model.vo; // ❌ 重复的 package 声明
// ... 第二个类定义(完全相同)...
}
```
**修复**:删除重复的类定义,只保留一个
---
## 📊 修复统计
| 项目 | 修复文件数 | 问题类型 |
|------|-----------|---------|
| youlai-boot | 1 | 重复类定义 |
| youlai-boot-tenant | 1 | 重复类定义 |
| **总计** | **2** | - |
---
## 🔧 如何检测类似问题
### 方法 1使用 grep 搜索
```bash
# 在项目根目录执行
grep -r "^package com\.youlai" src/main/java/**/*.java | sort | uniq -d
```
### 方法 2使用 IDE
1. 在 IntelliJ IDEA 中打开项目
2. 使用 `Ctrl + Shift + F`Windows`Cmd + Shift + F`Mac
3. 搜索正则表达式:`^package com\.youlai`
4. 查看搜索结果,如果同一个文件出现多次,说明有重复
### 方法 3编译检查
```bash
mvn clean compile
```
如果有重复类定义,编译器会报错。
---
## 🛡️ 预防措施
### 1. 使用版本控制
- 提交前仔细检查 `git diff`
- 解决合并冲突时要仔细审查
### 2. IDE 配置
- 启用 IntelliJ IDEA 的代码检查
- 配置保存时自动格式化代码
### 3. 代码审查
- Pull Request 时仔细审查文件变更
- 使用 CI/CD 自动编译检查
### 4. 使用 Git Hooks
创建 `.git/hooks/pre-commit`
```bash
#!/bin/bash
# 检查是否有重复的 package 声明
for file in $(git diff --cached --name-only | grep '\.java$'); do
count=$(grep -c "^package " "$file")
if [ "$count" -gt 1 ]; then
echo "错误: $file 包含多个 package 声明"
exit 1
fi
done
```
---
## ✅ 验证结果
### 编译测试
```bash
# youlai-boot
cd youlai-boot
mvn clean compile
# ✅ 编译成功
# youlai-boot-tenant
cd youlai-boot-tenant
mvn clean compile
# ✅ 编译成功
```
### IDE 检查
- ✅ IntelliJ IDEA 不再显示错误
- ✅ 代码高亮正常
- ✅ 自动补全正常
---
## 📝 修复后的文件内容
### NoticeDetailVo.java修复后
```java
package com.youlai.boot.system.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 阅读通知公告Vo
*
* @author Theo
* @since 2024-9-8 01:25:06
*/
@Data
public class NoticeDetailVo {
@Schema(description = "通知ID")
private Long id;
@Schema(description = "通知标题")
private String title;
@Schema(description = "通知内容")
private String content;
@Schema(description = "通知类型")
private Integer type;
@Schema(description = "发布人")
private String publisherName;
@Schema(description = "优先级(L-低 M-中 H-高)")
private String level;
@Schema(description = "发布状态(0-未发布 1已发布 2已撤回)")
private Integer publishStatus;
@Schema(description = "发布时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime publishTime;
}
```
### TenantPageVo.java修复后
```java
package com.youlai.boot.system.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Schema(description = "租户分页对象")
@Data
public class TenantPageVo implements Serializable {
@Schema(description = "租户ID")
private Long id;
@Schema(description = "租户名称")
private String name;
@Schema(description = "租户编码")
private String code;
@Schema(description = "联系人姓名")
private String contactName;
@Schema(description = "联系人电话")
private String contactPhone;
@Schema(description = "联系人邮箱")
private String contactEmail;
@Schema(description = "租户域名")
private String domain;
@Schema(description = "租户Logo")
private String logo;
@Schema(description = "状态(1-正常 0-禁用)")
private Integer status;
@Schema(description = "备注")
private String remark;
@Schema(description = "过期时间NULL表示永不过期")
private LocalDateTime expireTime;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "更新时间")
private LocalDateTime updateTime;
}
```
---
## 🎉 修复完成
所有重复类定义问题已修复,项目可以正常编译运行。
**建议**
1. 提交代码前使用 `mvn clean compile` 验证
2. 配置 IDE 的代码检查功能
3. 团队成员注意代码合并时的冲突解决

View File

@@ -1,12 +1,12 @@
package com.youlai.boot.auth.controller;
import com.youlai.boot.auth.model.dto.WxMiniAppCodeLoginDto;
import com.youlai.boot.auth.model.dto.WxMiniAppPhoneLoginDto;
import com.youlai.boot.auth.model.vo.CaptchaVo;
import com.youlai.boot.auth.model.dto.LoginRequest;
import com.youlai.boot.auth.model.dto.WxMiniAppPhoneLoginDto;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.core.web.Result;
import com.youlai.boot.auth.service.AuthService;
import com.youlai.boot.auth.model.dto.WxMiniAppCodeLoginDto;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.security.model.AuthenticationToken;
import io.swagger.v3.oas.annotations.Operation;
@@ -15,16 +15,13 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.*;
/**
* 认证控制层
*
* @author Ray.Hao
* @since 2022/10/16
* @since 0.0.1
*/
@Tag(name = "01.认证中心")
@RestController
@@ -96,7 +93,6 @@ public class AuthController {
return Result.success(token);
}
@Operation(summary = "退出登录")
@DeleteMapping("/logout")
@Log(value = "退出登录", module = LogModuleEnum.LOGIN)

View File

@@ -6,13 +6,11 @@ import lombok.Data;
import jakarta.validation.constraints.NotBlank;
/**
* 备份:微信小程序Code登录请求参数(原文件名包含 DTO 大写后缀)
*
* 原内容保留在此备份文件中,以便恢复或参考,但该文件使用 .bak 后缀以避免编译冲突。
*微信小程序Code登录请求参数
*/
@Schema(description = "微信小程序Code登录请求参数")
@Data
class WxMiniAppCodeLoginDto {
public class WxMiniAppCodeLoginDto {
@Schema(description = "微信小程序登录时获取的code", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "code不能为空")

View File

@@ -6,13 +6,11 @@ import lombok.Data;
import jakarta.validation.constraints.NotBlank;
/**
* 备份:微信小程序手机号登录请求参数(原文件名包含 DTO 大写后缀)
*
* 原内容保留在此备份文件中,以便恢复或参考,但该文件使用 .bak 后缀以避免编译冲突。
* 微信小程序手机号登录请求参数
*/
@Schema(description = "微信小程序手机号登录请求参数")
@Data
class WxMiniAppPhoneLoginDto {
public class WxMiniAppPhoneLoginDto {
@Schema(description = "微信小程序登录时获取的code", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "code不能为空")

View File

@@ -0,0 +1,26 @@
package com.youlai.boot.system.model.bo;
import lombok.Data;
import java.util.Set;
/**
* 角色权限集合
*
* @author Ray.Hao
* @since 3.0.0
*/
@Data
public class RolePermsBo {
/**
* 角色编码
*/
private String roleCode;
/**
* 权限集合
*/
private Set<String> perms;
}

View File

@@ -1,5 +1,5 @@
server:
port: 8001
port: 8000
# 数据库类型:用于 MyBatis-Plus 分页方言等(仅方言,不负责连接信息)
app: