# 资金服务平台 - 开发规则清单 > **创建时间**: 2026-02-17 > **用途**: 重新生成代码前的规范和约束 > **版本**: v1.0 --- ## 1. 技术栈规范 ### 1.1 核心框架 - **Java**: 21 - **Spring Boot**: 3.2.0 - **Spring Cloud**: 2023.0.0 - **认证框架**: Apache Shiro 2.0.0(必须,不使用 Spring Security) - **数据库连接池**: HikariCP - **ORM框架**: MyBatis-Plus 3.5.6 ### 1.2 依赖版本锁定 ```xml 1.18.30 2.0.0 4.4.0 5.8.23 3.5.6 ``` ### 1.3 禁用的依赖 - ❌ `spring-boot-starter-security` - ❌ Shiro 1.x(不兼容 Spring Boot 3) --- ## 2. Maven 多模块配置规范 ### 2.1 父 POM 配置 ```xml org.apache.maven.plugins maven-compiler-plugin 3.13.0 21 21 -parameters org.projectlombok lombok ${lombok.version} ``` ### 2.2 子模块 POM 配置 **每个子模块都必须显式激活 maven-compiler-plugin**: ```xml org.apache.maven.plugins maven-compiler-plugin 3.13.0 21 21 -parameters org.projectlombok lombok ${lombok.version} ``` ### 2.3 依赖冲突检查 - ⚠️ 避免在 pom.xml 中重复声明同一依赖 - ⚠️ 使用 `mvn dependency:tree` 检查依赖冲突 --- ## 3. Lombok 使用规范 ### 3.1 禁止在继承 ServiceImpl 的类上使用 @Slf4j **❌ 错误示例**: ```java @Slf4j @Service public class DeptService extends ServiceImpl { public void saveDept(Dept dept) { log.info("保存部门"); // 编译错误! } } ``` **✅ 正确示例**: ```java @Service public class DeptService extends ServiceImpl { private static final Logger logger = LoggerFactory.getLogger(DeptService.class); public void saveDept(Dept dept) { logger.info("保存部门"); } } ``` **原因**: MyBatis-Plus 的 ServiceImpl 基类已定义 `protected Log log`(org.apache.ibatis.logging.Log),与 Lombok @Slf4j 生成的字段冲突。 ### 3.2 实体类 Lombok 注解规范 ```java @Data @EqualsAndHashCode(callSuper = true) @TableName("sys_dept") public class Dept extends BaseEntity { // 必须确保 import lombok.Data 和 import lombok.EqualsAndHashCode 存在 } ``` ### 3.3 Controller/Component Lombok 注解 ```java @RestController @RequestMapping("/api/v1/dept") @RequiredArgsConstructor // 推荐用于依赖注入 public class DeptController { private final DeptService deptService; } ``` --- ## 4. Shiro 认证框架规范 ### 4.1 核心组件清单 1. **JwtToken.java** - 自定义 Token 类 2. **JwtRealm.java** - 认证授权域 3. **JwtFilter.java** - JWT 过滤器 4. **ShiroConfig.java** - Shiro 配置类 5. **PasswordEncoderConfig.java** - 密码编码器(使用 BCrypt) ### 4.2 权限注解规范 - ✅ 使用 `@RequiresRoles("ADMIN")` - ✅ 使用 `@RequiresPermissions("system:user:view")` - ❌ 不使用 Spring Security 注解(@PreAuthorize) ### 4.3 认证流程 1. 用户登录 → 查询数据库 2. BCrypt 验证密码 3. 生成 JWT Token(包含 userId, username, tenantId) 4. 每次请求通过 JwtFilter 验证 Token 5. JwtRealm 加载用户权限 --- ## 5. 代码编写规范 ### 5.1 分层架构 ``` Controller → Service → Mapper → Database ↓ ↓ DTO Entity ``` ### 5.2 包结构规范 ``` com.fundplatform.sys ├── controller # 控制器层 ├── service # 业务逻辑层 ├── mapper # 数据访问层 ├── entity # 实体类 ├── dto # 数据传输对象 ├── vo # 视图对象 ├── security # 安全相关(Shiro配置) ├── config # 配置类 └── util # 工具类 ``` ### 5.3 命名规范 - **Entity**: 单数名词,如 `User.java`、`Dept.java` - **Mapper**: 实体名 + Mapper,如 `UserMapper.java` - **Service**: 实体名 + Service,如 `UserService.java` - **Controller**: 实体名 + Controller,如 `UserController.java` ### 5.4 日志规范 ```java // 业务操作日志 logger.info("[ServiceName] 业务操作描述: {}, 参数: {}", entity.getName(), param); // 错误日志 logger.error("[ServiceName] 操作失败: {}", errorMessage, exception); ``` --- ## 6. 数据库规范 ### 6.1 表命名规范 - 系统表前缀: `sys_`(如 `sys_user`, `sys_role`) - 业务表前缀: `biz_`(如 `biz_project`, `biz_fund`) ### 6.2 字段规范 - 主键: `主表名_id`(如 `user_id`, `dept_id`) - 租户ID: `tenant_id`(必须字段,默认值 1) - 软删除: `deleted`(0-未删除,1-已删除) - 状态: `status`(1-启用,0-禁用) - 时间: `created_time`, `updated_time` ### 6.3 BaseEntity 基类 ```java @Data public class BaseEntity implements Serializable { private Long tenantId; // 租户ID private Integer deleted; // 删除标记 private LocalDateTime createdTime; // 创建时间 private Long createdBy; // 创建人 private LocalDateTime updatedTime; // 更新时间 private Long updatedBy; // 更新人 } ``` --- ## 7. API 规范 ### 7.1 RESTful 路径规范 ``` GET /api/v1/dept # 查询列表 GET /api/v1/dept/{id} # 查询单个 POST /api/v1/dept # 创建 PUT /api/v1/dept/{id} # 更新 DELETE /api/v1/dept/{id} # 删除 ``` ### 7.2 统一响应格式 ```java public class Result { private Integer code; // 200-成功,其他-失败 private String message; private T data; } ``` ### 7.3 认证路径规范 ``` POST /api/v1/auth/login # 登录(不需要认证) POST /api/v1/auth/logout # 登出 POST /api/v1/auth/refresh # 刷新Token ``` --- ## 8. 多租户规范 ### 8.1 租户隔离 - 所有业务表必须包含 `tenant_id` 字段 - Service 层插入数据时自动设置 `tenant_id` - 查询时自动过滤 `tenant_id` ### 8.2 默认租户 - 系统租户: `tenant_id = 0` - 业务租户: `tenant_id >= 1` --- ## 9. 编译和测试规范 ### 9.1 编译命令 ```bash # 清理编译 cd /home/along/MyCode/wanjiabuluo/fundplatform/fundplatform mvn clean compile -DskipTests # 安装到本地仓库 mvn clean install -DskipTests # 编译单个模块 mvn clean compile -pl fund-sys -am -DskipTests ``` ### 9.2 禁止的操作 - ❌ 不要在 run_in_terminal 中重复 `cd` 到同一目录 - ❌ 不要使用 `mvn clean` 后立即执行其他命令(应分开执行) --- ## 10. Git 规范 ### 10.1 分支策略 - `main` - 生产分支 - `develop` - 开发分支 - `feature/*` - 功能分支 - `bugfix/*` - 修复分支 ### 10.2 提交规范 ``` feat: 新功能 fix: 修复bug refactor: 重构 docs: 文档更新 style: 代码格式调整 test: 测试相关 chore: 构建/工具链相关 ``` --- ## 11. 常见陷阱清单 ### 11.1 Lombok 相关 - ✓ 每个子模块必须显式配置 maven-compiler-plugin - ✓ 继承 ServiceImpl 的类不能使用 @Slf4j - ✓ 确保所有 import lombok.* 语句存在 ### 11.2 Shiro 相关 - ✓ 使用 Shiro 2.0.0(支持 jakarta.servlet) - ✓ 保留 spring-security-crypto(用于 BCrypt) - ✓ 登录接口路径配置为匿名访问 ### 11.3 Maven 相关 - ✓ 避免在 pom.xml 中重复声明依赖 - ✓ 父 pom 中未创建的子模块需注释掉 - ✓ 使用 `-U` 参数强制更新依赖 ### 11.4 数据库相关 - ✓ 初始化 SQL 主键必须与字段定义一致 - ✓ tenant_id 必须有默认值保障机制 - ✓ 软删除字段 deleted 默认为 0 --- ## 12. 重新生成代码的策略 ### 12.1 代码生成工具选择 **选项 A**: MyBatis-Plus 代码生成器 - 优点: 自动生成 Entity、Mapper、Service、Controller - 缺点: 需要手动调整生成的代码 **选项 B**: 手动编写 - 优点: 完全可控,符合规范 - 缺点: 工作量大 **选项 C**: 模板化生成 - 优点: 可重复使用,质量稳定 - 缺点: 需要先建立模板 ### 12.2 推荐策略 1. **第一步**: 手动编写核心基础类(BaseEntity、Result、自定义异常) 2. **第二步**: 使用 MyBatis-Plus 生成器生成基础 CRUD 3. **第三步**: 手动完善业务逻辑和复杂查询 4. **第四步**: 编写单元测试验证 ### 12.3 生成顺序 ``` 1. fund-common (基础类) ├── BaseEntity ├── Result └── 工具类 2. fund-sys (系统模块) ├── 实体类 (Entity) ├── Mapper 接口 ├── Service 实现 ├── Controller └── Shiro 配置 3. fund-gateway (网关) └── 路由配置 4. fund-cust (客户模块) 5. fund-proj (项目模块) ``` --- ## 13. 架构约束 ### 13.1 必须遵守的架构要求 1. ✅ 使用 Shiro 作为认证框架(架构文档要求) 2. ✅ 实现多租户数据隔离 3. ✅ Header 透传(X-Uid, X-Uname) 4. ✅ 全链路日志追踪 ### 13.2 性能要求 - 接口响应时间 < 500ms - 数据库查询使用索引 - 使用 Redis 缓存热点数据 --- ## 14. 下一步行动 ### 14.1 准备工作 - [ ] 备份当前代码 - [ ] 清理所有 target 目录 - [ ] 确认数据库表结构 - [ ] 准备初始化 SQL 脚本 ### 14.2 代码生成 - [ ] 生成 fund-common 基础类 - [ ] 生成 fund-sys 实体类和 Mapper - [ ] 实现 Shiro 认证框架 - [ ] 编写核心业务逻辑 ### 14.3 验证 - [ ] 编译通过(mvn clean compile) - [ ] 启动成功 - [ ] 登录功能正常 - [ ] 基础 CRUD 接口正常 --- **注意**: 本规则清单将持续更新,每次遇到问题都会添加到"常见陷阱清单"中。