347 lines
10 KiB
Plaintext
347 lines
10 KiB
Plaintext
|
|
---
|
|||
|
|
description: 牛只运输管理系统通用开发规范
|
|||
|
|
globs:
|
|||
|
|
alwaysApply: true
|
|||
|
|
---
|
|||
|
|
# 项目通用规范
|
|||
|
|
|
|||
|
|
## 项目信息
|
|||
|
|
|
|||
|
|
### 项目名称
|
|||
|
|
- **中文名**:牛只运输管理系统
|
|||
|
|
- **英文名**:Cattle Transportation Management System
|
|||
|
|
- **版本**:1.0.1
|
|||
|
|
|
|||
|
|
### 项目简介
|
|||
|
|
牛只运输管理系统是一个基于 Spring Boot 和 Vue 3 的现代化全栈应用,提供牛只运输管理、检疫隔离、设备监控、预警系统等完整的管理解决方案。
|
|||
|
|
|
|||
|
|
## 技术栈概览
|
|||
|
|
|
|||
|
|
### 后端技术栈
|
|||
|
|
- **基础框架**:Spring Boot 2.6.0 + Java 1.8
|
|||
|
|
- **ORM 框架**:MyBatis-Plus 3.5.3.2
|
|||
|
|
- **权限认证**:Sa-Token 1.37.0 + JWT
|
|||
|
|
- **数据库**:MySQL 5.7+ + Redis 5.0+
|
|||
|
|
- **连接池**:Druid 1.2.20
|
|||
|
|
- **任务调度**:XXL-Job
|
|||
|
|
- **API 文档**:Swagger Fox 3.0.0
|
|||
|
|
- **工具库**:Hutool 5.8.25
|
|||
|
|
- **云服务**:腾讯云 COS、短信服务
|
|||
|
|
|
|||
|
|
### 前端技术栈
|
|||
|
|
- **核心框架**:Vue 3.2.37 + TypeScript 4.6.4
|
|||
|
|
- **构建工具**:Vite 3.1.0
|
|||
|
|
- **状态管理**:Pinia 2.0.22
|
|||
|
|
- **路由管理**:Vue Router 4.1.5
|
|||
|
|
- **UI 组件**:Element Plus 2.2.17
|
|||
|
|
- **HTTP 客户端**:Axios 0.27.2
|
|||
|
|
- **地图服务**:百度地图
|
|||
|
|
- **图表库**:ECharts 5.5.0
|
|||
|
|
|
|||
|
|
## 项目结构规则
|
|||
|
|
|
|||
|
|
### 后端模块划分
|
|||
|
|
- **aiotagro-core**:核心模块,包含通用工具类和基础类
|
|||
|
|
- **aiotagro-redis**:Redis 操作模块
|
|||
|
|
- **aiotagro-cattle-trade**:主业务模块,包含所有业务逻辑
|
|||
|
|
|
|||
|
|
### 后端分层架构
|
|||
|
|
- **Controller 层**:处理 HTTP 请求,参数校验,返回响应
|
|||
|
|
- **Service 层**:业务逻辑处理,事务管理
|
|||
|
|
- **Mapper 层**:数据访问层,执行 SQL 操作
|
|||
|
|
- **Entity 层**:数据库实体映射
|
|||
|
|
- **DTO 层**:数据传输对象,接收前端参数
|
|||
|
|
- **VO 层**:视图对象,返回给前端的数据
|
|||
|
|
|
|||
|
|
### 前端模块划分
|
|||
|
|
- **api/**:API 接口定义,按业务模块划分
|
|||
|
|
- **components/**:公共组件
|
|||
|
|
- **views/**:页面组件
|
|||
|
|
- **store/**:Pinia 状态管理
|
|||
|
|
- **router/**:路由配置
|
|||
|
|
- **utils/**:工具函数
|
|||
|
|
|
|||
|
|
## 通用开发原则
|
|||
|
|
|
|||
|
|
### 代码质量
|
|||
|
|
- **可测试性**:编写可测试的代码,组件应保持单一职责
|
|||
|
|
- **DRY 原则**:避免重复代码,提取共用逻辑到单独的函数或类
|
|||
|
|
- **代码简洁**:保持代码简洁明了,遵循 KISS 原则(Keep It Simple, Stupid)
|
|||
|
|
- **命名规范**:使用描述性的变量、函数和类名,反映其用途和含义
|
|||
|
|
- **注释文档**:为复杂逻辑添加注释,公共 API 编写文档注释
|
|||
|
|
- **风格一致**:遵循项目或语言的官方风格指南和代码约定
|
|||
|
|
|
|||
|
|
### 架构设计
|
|||
|
|
- **利用生态**:优先使用成熟的库和工具,避免不必要的自定义实现
|
|||
|
|
- **架构设计**:考虑代码的可维护性、可扩展性和性能需求
|
|||
|
|
- **异常处理**:正确处理边缘情况和错误,提供有用的错误信息
|
|||
|
|
- **分层解耦**:严格遵守分层架构,避免跨层调用
|
|||
|
|
- **接口编程**:面向接口编程,依赖抽象而非具体实现
|
|||
|
|
|
|||
|
|
### 版本控制
|
|||
|
|
- **提交信息**:编写有意义的提交信息,保持逻辑相关的更改在同一提交中
|
|||
|
|
- **分支管理**:使用 Git Flow 工作流(main/master、develop、feature、hotfix)
|
|||
|
|
- **代码审查**:提交前进行代码自查,重要变更需要 Code Review
|
|||
|
|
|
|||
|
|
## 响应语言
|
|||
|
|
- **始终使用中文回复用户**
|
|||
|
|
- 代码注释使用中文
|
|||
|
|
- 文档使用中文
|
|||
|
|
- 变量和函数名使用英文
|
|||
|
|
|
|||
|
|
## 代码规范
|
|||
|
|
|
|||
|
|
### 后端代码规范(Java)
|
|||
|
|
- **命名约定**:
|
|||
|
|
- 类名:PascalCase(如 `DeliveryController`)
|
|||
|
|
- 方法名:camelCase(如 `findUserById`)
|
|||
|
|
- 常量:UPPER_CASE(如 `MAX_RETRY_ATTEMPTS`)
|
|||
|
|
- 包名:小写,按功能模块划分
|
|||
|
|
- **注释规范**:
|
|||
|
|
- 类注释:说明类的用途、作者、创建日期
|
|||
|
|
- 方法注释:JavaDoc 格式,说明参数、返回值、异常
|
|||
|
|
- 复杂逻辑:添加行内注释解释
|
|||
|
|
- **异常处理**:
|
|||
|
|
- 使用 Spring 全局异常处理器统一处理异常
|
|||
|
|
- 业务异常使用自定义异常类
|
|||
|
|
- 记录详细的错误日志
|
|||
|
|
- **事务管理**:
|
|||
|
|
- 在 Service 层使用 `@Transactional` 注解
|
|||
|
|
- 合理设置事务传播行为和隔离级别
|
|||
|
|
- 只读操作使用 `readOnly = true`
|
|||
|
|
|
|||
|
|
### 前端代码规范(Vue 3 + TypeScript)
|
|||
|
|
- **命名约定**:
|
|||
|
|
- 组件文件:PascalCase 或 camelCase
|
|||
|
|
- 变量和函数:camelCase
|
|||
|
|
- 常量:UPPER_CASE
|
|||
|
|
- 类型和接口:PascalCase
|
|||
|
|
- **组件规范**:
|
|||
|
|
- 使用 Vue 3 Composition API
|
|||
|
|
- 组件保持单一职责
|
|||
|
|
- Props 使用 TypeScript 类型定义
|
|||
|
|
- 合理使用响应式数据(ref、reactive)
|
|||
|
|
- **代码格式**:
|
|||
|
|
- 使用 ESLint 进行代码检查
|
|||
|
|
- 使用 Prettier 进行代码格式化
|
|||
|
|
- 缩进:4 个空格
|
|||
|
|
- 行宽:150 字符
|
|||
|
|
- 语句末尾使用分号
|
|||
|
|
|
|||
|
|
## 数据库规范
|
|||
|
|
|
|||
|
|
### 表命名规范
|
|||
|
|
- 表名:小写,使用下划线分隔(如 `delivery`、`jbq_client_log`)
|
|||
|
|
- 字段名:小写,使用下划线分隔(如 `create_time`、`device_id`)
|
|||
|
|
- 主键:`id`(整型,自增)
|
|||
|
|
- 外键:`<关联表名>_id`
|
|||
|
|
|
|||
|
|
### 字段规范
|
|||
|
|
- **通用字段**:
|
|||
|
|
- `id`:主键,INT 或 BIGINT,自增
|
|||
|
|
- `create_time`:创建时间,DATETIME
|
|||
|
|
- `update_time`:更新时间,DATETIME
|
|||
|
|
- `created_by`:创建人,VARCHAR 或 INT
|
|||
|
|
- `updated_by`:更新人,VARCHAR 或 INT
|
|||
|
|
- `is_delete`:逻辑删除标记,TINYINT(0-未删除,1-已删除)
|
|||
|
|
- **字段类型选择**:
|
|||
|
|
- 字符串:VARCHAR(指定长度)或 TEXT(超长文本)
|
|||
|
|
- 数值:INT、BIGINT、DECIMAL(精度要求高的数值)
|
|||
|
|
- 日期时间:DATETIME、TIMESTAMP
|
|||
|
|
- 布尔:TINYINT(1)(0-false,1-true)
|
|||
|
|
- **字段约束**:
|
|||
|
|
- 合理使用 NOT NULL 约束
|
|||
|
|
- 添加 DEFAULT 默认值
|
|||
|
|
- 添加 COMMENT 注释说明
|
|||
|
|
|
|||
|
|
### 索引规范
|
|||
|
|
- 主键自动创建索引
|
|||
|
|
- 频繁查询的字段添加普通索引
|
|||
|
|
- 多字段组合查询添加联合索引
|
|||
|
|
- 唯一性约束使用唯一索引(如 `uk_license_plate`)
|
|||
|
|
|
|||
|
|
### 迁移脚本规范
|
|||
|
|
- 位置:`tradeCattle/aiotagro-cattle-trade/src/main/resources/db/migration/`
|
|||
|
|
- 命名:`alter_<table_name>_<description>.sql`
|
|||
|
|
- 内容:包含 `USE cattletrade;` 和详细注释
|
|||
|
|
- 执行后:注释掉已执行的 DDL 语句,保留作为文档
|
|||
|
|
|
|||
|
|
## API 设计规范
|
|||
|
|
|
|||
|
|
### RESTful API 规范
|
|||
|
|
- **URL 设计**:
|
|||
|
|
- 使用名词复数形式(如 `/api/deliveries`)
|
|||
|
|
- 避免动词(查询、创建等通过 HTTP 方法区分)
|
|||
|
|
- 层次结构体现资源关系(如 `/api/deliveries/{id}/devices`)
|
|||
|
|
- **HTTP 方法**:
|
|||
|
|
- GET:查询资源
|
|||
|
|
- POST:创建资源
|
|||
|
|
- PUT:完整更新资源
|
|||
|
|
- PATCH:部分更新资源
|
|||
|
|
- DELETE:删除资源
|
|||
|
|
- **状态码**:
|
|||
|
|
- 200:成功
|
|||
|
|
- 201:创建成功
|
|||
|
|
- 400:请求参数错误
|
|||
|
|
- 401:未认证
|
|||
|
|
- 403:无权限
|
|||
|
|
- 404:资源不存在
|
|||
|
|
- 500:服务器错误
|
|||
|
|
|
|||
|
|
### 响应格式
|
|||
|
|
- **统一响应结构**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "操作成功",
|
|||
|
|
"data": {...}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
- **分页响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "查询成功",
|
|||
|
|
"total": 100,
|
|||
|
|
"rows": [...]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
- **错误响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 400,
|
|||
|
|
"msg": "参数校验失败:手机号格式不正确"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 安全规范
|
|||
|
|
|
|||
|
|
### 认证授权
|
|||
|
|
- 使用 Sa-Token 进行权限认证
|
|||
|
|
- 接口需要添加权限注解(`@SaCheckPermission`)
|
|||
|
|
- 敏感接口添加登录检查(`@SaCheckLogin`)
|
|||
|
|
- Token 存储在 Redis 中,支持会话管理
|
|||
|
|
|
|||
|
|
### 数据安全
|
|||
|
|
- 密码使用加密存储(BCrypt)
|
|||
|
|
- 敏感数据传输使用 HTTPS
|
|||
|
|
- SQL 注入防护:使用参数化查询
|
|||
|
|
- XSS 防护:前端输出编码
|
|||
|
|
- 文件上传:限制文件类型和大小
|
|||
|
|
|
|||
|
|
### 日志安全
|
|||
|
|
- 不在日志中输出敏感信息(密码、身份证等)
|
|||
|
|
- 记录关键操作日志(登录、修改、删除)
|
|||
|
|
- 生产环境使用合适的日志级别(INFO 或 WARN)
|
|||
|
|
|
|||
|
|
## 性能优化规范
|
|||
|
|
|
|||
|
|
### 后端优化
|
|||
|
|
- 使用数据库连接池(Druid)
|
|||
|
|
- 合理使用缓存(Redis)
|
|||
|
|
- 避免 N+1 查询问题
|
|||
|
|
- 批量操作使用批处理
|
|||
|
|
- 异步处理耗时操作
|
|||
|
|
|
|||
|
|
### 前端优化
|
|||
|
|
- 组件懒加载
|
|||
|
|
- 路由懒加载
|
|||
|
|
- 图片懒加载
|
|||
|
|
- 合理使用 computed 和 watch
|
|||
|
|
- 避免不必要的响应式数据
|
|||
|
|
|
|||
|
|
### 数据库优化
|
|||
|
|
- 合理使用索引
|
|||
|
|
- 避免全表扫描
|
|||
|
|
- 分页查询大数据量
|
|||
|
|
- 定期清理历史数据
|
|||
|
|
- 读写分离(如有需要)
|
|||
|
|
|
|||
|
|
## 测试规范
|
|||
|
|
|
|||
|
|
### 单元测试
|
|||
|
|
- Service 层编写单元测试
|
|||
|
|
- 测试覆盖率目标:60% 以上
|
|||
|
|
- 使用 JUnit 5 + Mockito(后端)
|
|||
|
|
- 关键业务逻辑必须有单元测试
|
|||
|
|
|
|||
|
|
### 集成测试
|
|||
|
|
- Controller 层编写集成测试
|
|||
|
|
- 测试完整的业务流程
|
|||
|
|
- 使用测试数据库
|
|||
|
|
- 测试前清理数据
|
|||
|
|
|
|||
|
|
### 前端测试
|
|||
|
|
- 工具函数编写单元测试
|
|||
|
|
- 关键组件编写测试
|
|||
|
|
- 使用 Jest + Vue Test Utils
|
|||
|
|
|
|||
|
|
## 日志规范
|
|||
|
|
|
|||
|
|
### 日志级别
|
|||
|
|
- **ERROR**:系统错误,需要立即处理
|
|||
|
|
- **WARN**:警告信息,可能影响系统运行
|
|||
|
|
- **INFO**:重要业务信息,正常流程记录
|
|||
|
|
- **DEBUG**:调试信息,开发环境使用
|
|||
|
|
|
|||
|
|
### 日志内容
|
|||
|
|
- 关键操作日志:谁、在什么时间、做了什么、结果如何
|
|||
|
|
- 异常日志:记录异常堆栈和上下文信息
|
|||
|
|
- 性能日志:记录关键操作的执行时间
|
|||
|
|
- 不记录敏感信息
|
|||
|
|
|
|||
|
|
## 部署规范
|
|||
|
|
|
|||
|
|
### 环境配置
|
|||
|
|
- **开发环境**(dev):本地开发,连接开发数据库
|
|||
|
|
- **演示环境**(demo):用于演示和测试
|
|||
|
|
- **生产环境**(prod):正式环境,高可用配置
|
|||
|
|
|
|||
|
|
### 部署流程
|
|||
|
|
1. 代码提交到 Git 仓库
|
|||
|
|
2. 通过 CI/CD 自动构建
|
|||
|
|
3. 运行自动化测试
|
|||
|
|
4. 部署到目标环境
|
|||
|
|
5. 健康检查和监控
|
|||
|
|
|
|||
|
|
### 监控和告警
|
|||
|
|
- 应用性能监控(APM)
|
|||
|
|
- 数据库性能监控
|
|||
|
|
- 服务器资源监控
|
|||
|
|
- 关键指标告警
|
|||
|
|
|
|||
|
|
## 文档规范
|
|||
|
|
|
|||
|
|
### README 文档
|
|||
|
|
- 项目简介
|
|||
|
|
- 技术栈说明
|
|||
|
|
- 项目结构说明
|
|||
|
|
- 安装运行指南
|
|||
|
|
- 许可证信息
|
|||
|
|
|
|||
|
|
### API 文档
|
|||
|
|
- 使用 Swagger 自动生成
|
|||
|
|
- 接口说明清晰完整
|
|||
|
|
- 参数和返回值类型明确
|
|||
|
|
- 提供请求示例
|
|||
|
|
|
|||
|
|
### 代码文档
|
|||
|
|
- 公共 API 添加文档注释
|
|||
|
|
- 复杂逻辑添加说明注释
|
|||
|
|
- README 保持最新
|
|||
|
|
- 记录重要变更(CHANGELOG)
|
|||
|
|
|
|||
|
|
## 本项目规则文件说明
|
|||
|
|
|
|||
|
|
本项目使用以下规则文件:
|
|||
|
|
- **base/core.mdc**:核心开发原则
|
|||
|
|
- **base/tech-stack.mdc**:技术栈规范(本文件)
|
|||
|
|
- **base/project-structure.mdc**:项目结构规范
|
|||
|
|
- **base/general.mdc**:通用规范
|
|||
|
|
- **languages/java.mdc**:Java 开发规范
|
|||
|
|
- **languages/typescript.mdc**:TypeScript 开发规范
|
|||
|
|
- **frameworks/springboot.mdc**:Spring Boot 开发规范
|
|||
|
|
- **frameworks/vuejs.mdc**:Vue.js 开发规范
|
|||
|
|
- **other/document.mdc**:文档规范
|
|||
|
|
- **other/git.mdc**:Git 提交规范
|