---
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 提交规范
