--- description: 牛只运输管理系统项目结构规范 globs: alwaysApply: true --- # 项目结构规范 ## 项目概述 牛只运输管理系统是一个前后端分离的全栈项目,包含后端 Spring Boot 服务和前端 Vue 3 应用,用于提供完整的牛只运输、检疫、设备监控等管理功能。 ## 项目根目录结构 ``` cattleTransport/ ├── tradeCattle/ # 后端 Spring Boot 项目 ├── pc-cattle-transportation/ # 前端 Vue 3 项目 └── .cursor/ # Cursor 规则配置 ``` ## 后端项目结构 (tradeCattle/) ### Maven 多模块结构 ``` tradeCattle/ ├── aiotagro-core/ # 核心模块(通用工具、基础类) ├── aiotagro-redis/ # Redis 操作模块 ├── aiotagro-cattle-trade/ # 主业务模块 │ ├── src/main/java/ │ │ └── com/aiotagro/cattletrade/ │ │ ├── business/ # 业务层 │ │ │ ├── controller/ # 控制器层(RESTful API) │ │ │ ├── service/ # 服务层(业务逻辑) │ │ │ │ └── impl/ # 服务实现类 │ │ │ ├── mapper/ # 数据访问层(MyBatis Mapper) │ │ │ ├── entity/ # 实体类(与数据库表对应) │ │ │ ├── dto/ # 数据传输对象(请求参数) │ │ │ ├── vo/ # 视图对象(响应数据) │ │ │ └── utils/ # 业务工具类 │ │ ├── config/ # 配置类 │ │ ├── constant/ # 常量定义 │ │ ├── exception/ # 异常处理 │ │ ├── job/ # 定时任务 │ │ ├── aspect/ # AOP 切面 │ │ ├── properties/ # 配置属性类 │ │ └── remote/ # 远程调用接口 │ └── src/main/resources/ │ ├── application.yml # 主配置文件 │ ├── application-dev.yml # 开发环境配置 │ ├── application-demo.yml # 演示环境配置 │ ├── application-prod.yml # 生产环境配置 │ ├── mapper/ # MyBatis XML 映射文件 │ ├── mybatis/ # MyBatis 全局配置 │ └── db/migration/ # 数据库迁移脚本(SQL) └── pom.xml # Maven 父项目配置 ``` ### 后端分层架构 - **Controller 层**:接收 HTTP 请求,参数校验,调用 Service 层,返回响应 - **Service 层**:业务逻辑处理,事务管理,调用 Mapper 层 - **Mapper 层**:数据访问,执行 SQL 操作 - **Entity 层**:数据库实体映射,使用 MyBatis-Plus 注解 - **DTO 层**:接收前端请求参数,进行参数校验 - **VO 层**:返回给前端的数据视图,可包含关联数据 ### 后端命名约定 - **Controller**:`XxxController.java`(如 `DeliveryController.java`) - **Service 接口**:`IXxxService.java`(如 `IDeliveryService.java`) - **Service 实现**:`XxxServiceImpl.java`(如 `DeliveryServiceImpl.java`) - **Mapper 接口**:`XxxMapper.java`(如 `DeliveryMapper.java`) - **Mapper XML**:`XxxMapper.xml`(与 Mapper 接口同名) - **Entity**:`Xxx.java`(如 `Delivery.java`,对应表名 `delivery`) - **DTO**:`XxxDto.java`、`XxxCreateDto.java`、`XxxEditDto.java` - **VO**:`XxxVo.java`(如 `DeliveryLogVo.java`) ## 前端项目结构 (pc-cattle-transportation/) ### Vue 3 + TypeScript 结构 ``` pc-cattle-transportation/ ├── src/ │ ├── api/ # API 接口定义 │ │ ├── common/ # 通用 API │ │ ├── abroad.js # 出境管理 │ │ ├── device.js # 设备管理 │ │ ├── shipping.js # 运输管理 │ │ ├── sys.js # 系统管理 │ │ └── userManage.js # 用户管理 │ ├── assets/ # 静态资源 │ │ ├── icons/svg/ # SVG 图标 │ │ └── images/ # 图片资源 │ ├── components/ # 公共组件 │ │ ├── common/ # 通用组件 │ │ │ ├── searchCustom/ # 自定义搜索组件 │ │ │ └── tableCustom/ # 自定义表格组件 │ │ ├── layout/ # 布局组件 │ │ ├── Editor/ # 富文本编辑器 │ │ ├── Pagination/ # 分页组件 │ │ └── SvgIcon/ # SVG 图标组件 │ ├── directive/ # 自定义指令 │ │ ├── permission/ # 权限指令 │ │ └── common/ # 通用指令 │ ├── plugins/ # 插件配置 │ │ ├── auth.js # 权限认证 │ │ └── cache.js # 缓存管理 │ ├── router/ # 路由配置 │ │ └── index.ts # 路由主文件 │ ├── store/ # Pinia 状态管理 │ │ ├── index.ts # Store 主文件 │ │ ├── user.ts # 用户状态 │ │ └── permission.js # 权限状态 │ ├── styles/ # 全局样式 │ │ └── index.scss # 样式主文件 │ ├── utils/ # 工具函数 │ │ ├── axios.ts # Axios 实例配置 │ │ ├── request.js # 请求封装 │ │ ├── auth.js # 认证工具 │ │ ├── permission.js # 权限工具 │ │ └── validate.js # 表单验证 │ ├── views/ # 页面组件 │ │ ├── shipping/ # 运输管理页面 │ │ │ ├── shippingList.vue # 运输列表 │ │ │ ├── createDeliveryDialog.vue # 创建运单对话框 │ │ │ ├── detailDialog.vue # 详情对话框 │ │ │ └── editDialog.vue # 编辑对话框 │ │ ├── userManage/ # 用户管理页面 │ │ │ ├── driver.vue # 司机管理 │ │ │ ├── vehicle.vue # 车辆管理 │ │ │ └── user.vue # 用户管理 │ │ ├── hardware/ # 硬件设备页面 │ │ ├── entry/ # 数据录入页面 │ │ ├── earlywarning/ # 预警系统页面 │ │ └── system/ # 系统管理页面 │ ├── App.vue # 根组件 │ ├── main.ts # 应用入口 │ └── permission.js # 路由权限控制 ├── public/ # 静态资源(不经过构建) ├── vite.config.ts # Vite 配置 ├── tsconfig.json # TypeScript 配置 ├── package.json # 依赖配置 └── .eslintrc.cjs # ESLint 配置 ``` ### 前端组织规则 - **API 按模块分离**:每个业务模块对应一个 API 文件 - **组件按功能分类**:通用组件放在 `components/common/`,业务组件放在对应的 `views/` 子目录 - **页面与对话框分离**:列表页面与弹窗对话框分开定义(如 `shippingList.vue` 与 `createDeliveryDialog.vue`) - **状态管理按模块**:每个业务模块有独立的 Store 文件 - **工具函数分类**:按功能分类(如 `auth.js`、`permission.js`、`validate.js`) ### 前端命名约定 - **组件文件**:使用 PascalCase 或 camelCase(如 `Pagination/index.vue`、`createDeliveryDialog.vue`) - **页面文件**:使用 camelCase(如 `shippingList.vue`、`driver.vue`) - **API 文件**:使用 camelCase(如 `shipping.js`、`userManage.js`) - **工具文件**:使用 camelCase(如 `axios.ts`、`auth.js`) ## 数据库迁移脚本规范 ### 位置 - 后端项目:`tradeCattle/aiotagro-cattle-trade/src/main/resources/db/migration/` ### 命名约定 - 格式:`alter__.sql` - 示例: - `alter_vehicle_record_code.sql` - 修改车辆表的备案码字段 - `alter_delivery_add_estimated_departure_time.sql` - 添加预计出发时间字段 - `alter_client_logs_latlng.sql` - 扩展经纬度字段长度 ### 脚本规范 - 每个脚本必须以 `USE cattletrade;` 开头 - 包含详细的注释说明变更目的 - 对于已执行的脚本,注释掉 `ALTER TABLE` 语句,保留作为文档 - 提供数据迁移语句(如有必要) ## 配置文件规范 ### 后端配置 - **主配置**:`application.yml` - 包含通用配置和环境切换 - **环境配置**: - `application-dev.yml` - 开发环境(本地数据库) - `application-demo.yml` - 演示环境 - `application-prod.yml` - 生产环境 - **敏感信息**:不要硬编码到配置文件,使用环境变量或配置中心 ### 前端配置 - **Vite 配置**:`vite.config.ts` - 包含代理、插件、别名等 - **环境变量**:`.env`、`.env.development`、`.env.production` - **代理配置**:开发环境代理 `/api` 到后端 `http://127.0.0.1:16200` ## 模块依赖关系 ### 后端模块依赖 ``` aiotagro-cattle-trade (主业务模块) ├── depends on: aiotagro-core (核心模块) └── depends on: aiotagro-redis (Redis 模块) ``` ### 前端模块依赖 - **核心依赖**:Vue 3、Vite、Pinia、Vue Router、Element Plus - **工具依赖**:Axios、Moment.js、ECharts - **地图依赖**:百度地图(vue-baidu-map-3x) - **视频依赖**:@liveqing/liveplayer-v3 ## 文件组织原则 1. **按功能模块组织**:相关的 Controller、Service、Mapper、Entity 放在同一业务包下 2. **保持层次清晰**:严格遵守分层架构,避免跨层调用 3. **避免循环依赖**:Service 之间可以相互调用,但需注意避免循环依赖 4. **分离通用逻辑**:通用工具类放在 `core` 模块,业务工具类放在 `utils` 包 5. **配置与代码分离**:配置文件放在 `resources` 目录,代码放在 `java` 目录 6. **前端组件复用**:通用组件放在 `components/common/`,业务组件就近放置