fundplatform/开发规则清单.md
zhangjf 32abc57338 feat: 添加开发规则清单和完善前后端配置
主要变更:
1. 开发规范文档
   - 新增《开发规则清单.md》,涵盖技术栈、Maven配置、Lombok规范等
   - 记录 Lombok 在 Java 21 + Spring Boot 3 中的已知问题
   - 建立代码生成和开发流程规范

2. 前端功能增强
   - 新增系统配置管理页面(sysConfig.vue)
   - 新增数据字典管理页面(sysDict.vue)
   - 新增财务收据管理页面(receipt.vue)
   - 更新登录认证 API 配置

3. Docker 部署配置
   - 新增应用容器配置(docker-compose.yml)
   - 新增 Nginx 反向代理配置
   - 新增 ELK 日志收集配置(Elasticsearch + Logstash + Filebeat)

4. 性能测试工具
   - 新增 JMeter 测试计划(fundplatform-test-plan.jmx)
   - 新增性能测试执行脚本

5. 环境配置更新
   - 更新 .env 环境变量配置
   - 同步 fundplatform 子模块最新提交
2026-02-17 09:19:14 +08:00

11 KiB
Raw Blame History

资金服务平台 - 开发规则清单

创建时间: 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 依赖版本锁定

<lombok.version>1.18.30</lombok.version>
<shiro.version>2.0.0</shiro.version>
<jwt.version>4.4.0</jwt.version>
<hutool.version>5.8.23</hutool.version>
<mybatis-plus.version>3.5.6</mybatis-plus.version>

1.3 禁用的依赖

  • spring-boot-starter-security
  • Shiro 1.x不兼容 Spring Boot 3

2. Maven 多模块配置规范

2.1 父 POM 配置

<pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.13.0</version>
            <configuration>
                <source>21</source>
                <target>21</target>
                <compilerArgs>
                    <arg>-parameters</arg>
                </compilerArgs>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${lombok.version}</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>

2.2 子模块 POM 配置

每个子模块都必须显式激活 maven-compiler-plugin

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.13.0</version>
            <configuration>
                <source>21</source>
                <target>21</target>
                <compilerArgs>
                    <arg>-parameters</arg>
                </compilerArgs>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${lombok.version}</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

2.3 依赖冲突检查

  • ⚠️ 避免在 pom.xml 中重复声明同一依赖
  • ⚠️ 使用 mvn dependency:tree 检查依赖冲突

3. Lombok 使用规范

3.1 禁止在继承 ServiceImpl 的类上使用 @Slf4j

错误示例

@Slf4j
@Service
public class DeptService extends ServiceImpl<DeptMapper, Dept> {
    public void saveDept(Dept dept) {
        log.info("保存部门"); // 编译错误!
    }
}

正确示例

@Service
public class DeptService extends ServiceImpl<DeptMapper, Dept> {
    private static final Logger logger = LoggerFactory.getLogger(DeptService.class);
    
    public void saveDept(Dept dept) {
        logger.info("保存部门");
    }
}

原因: MyBatis-Plus 的 ServiceImpl 基类已定义 protected Log logorg.apache.ibatis.logging.Log与 Lombok @Slf4j 生成的字段冲突。

3.2 实体类 Lombok 注解规范

@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_dept")
public class Dept extends BaseEntity {
    // 必须确保 import lombok.Data 和 import lombok.EqualsAndHashCode 存在
}

3.3 Controller/Component Lombok 注解

@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.javaDept.java
  • Mapper: 实体名 + MapperUserMapper.java
  • Service: 实体名 + ServiceUserService.java
  • Controller: 实体名 + ControllerUserController.java

5.4 日志规范

// 业务操作日志
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
  • 软删除: deleted0-未删除1-已删除)
  • 状态: status1-启用0-禁用)
  • 时间: created_time, updated_time

6.3 BaseEntity 基类

@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 统一响应格式

public class Result<T> {
    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 编译命令

# 清理编译
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 接口正常

注意: 本规则清单将持续更新,每次遇到问题都会添加到"常见陷阱清单"中。