删除过时文档,优化项目结构

This commit is contained in:
2025-09-10 20:04:14 +08:00
parent 02fe7d11da
commit f80848fc0f
31 changed files with 1055 additions and 0 deletions

340
docs/config/PRD.md Normal file
View File

@@ -0,0 +1,340 @@
# 宁夏智慧养殖监管平台产品需求文档
## 版本历史
| 版本 | 日期 | 作者 | 描述 |
|------|------|------|------|
| v1.0 | 2025-01-18 | 产品经理 | 初始版本 |
## 1. 项目概述
### 1.1 项目背景
宁夏回族自治区作为中国重要的畜牧业基地,养殖业在区域经济发展中占据重要地位。随着现代信息技术的快速发展,传统养殖业正逐步向智能化、数字化方向转型升级。为提升宁夏地区养殖业的管理水平和监管效率,建设一套完善的智慧养殖监管平台势在必行。
### 1.2 项目目标
宁夏智慧养殖监管平台旨在通过数字化手段实现对养殖全过程的监管,具体目标包括:
- 实现养殖场信息数字化管理
- 提供养殖环境实时监控功能
- 支持养殖过程数据记录与追溯
- 提供数据分析和决策支持
- 构建统一的养殖监管体系
### 1.3 成功标准
- 用户日活跃度提升20%
- 养殖场管理效率提升30%
- 异常预警响应时间缩短至5分钟内
- 系统可用性达到99.9%
### 1.4 范围界定
**本版本包含:**
- 用户权限管理系统
- 养殖场信息管理
- 设备监控管理
- 动物健康管理
- 预警管理系统
- 数据可视化展示
**本版本不包含:**
- 移动端小程序功能(二期规划)
- 人工智能预警功能(三期规划)
- 微服务架构改造(后续版本)
## 2. 用户角色与用例
### 2.1 用户角色
| 角色 | 描述 | 权限范围 |
|------|------|----------|
| 系统管理员 | 负责系统整体管理和维护 | 全系统权限,用户管理,系统配置 |
| 养殖场管理员 | 负责具体养殖场的管理 | 养殖场信息管理,设备监控,动物管理 |
| 监管人员 | 负责区域养殖监管 | 数据查看,预警处理,报表分析 |
| 普通用户 | 基础系统使用者 | 个人信息管理,数据查看 |
### 2.2 核心用例
#### 用例1用户登录认证
**As a** 系统用户
**I want to** 通过账号密码登录系统
**So that** 我可以访问系统功能
**验收标准:**
- Given 用户打开登录页面
- When 输入正确的用户名和密码
- Then 系统跳转到仪表盘页面
- And 显示欢迎信息
#### 用例2养殖场信息管理
**As a** 养殖场管理员
**I want to** 管理养殖场基本信息
**So that** 我可以维护养殖场档案
**验收标准:**
- Given 用户有养殖场管理权限
- When 进入养殖场管理页面
- Then 可以查看养殖场列表
- And 可以新增、编辑、删除养殖场信息
#### 用例3实时设备监控
**As a** 监管人员
**I want to** 实时查看设备状态
**So that** 我可以及时发现设备异常
**验收标准:**
- Given 用户有设备查看权限
- When 进入设备监控页面
- Then 可以查看设备实时状态
- And 设备异常时收到预警通知
## 3. 功能需求
### 3.1 用户管理模块
#### 3.1.1 用户认证
**用户故事:** As a 用户I want to 通过安全的方式登录系统so that 我的账户信息得到保护
**验收标准:**
- Given 用户访问登录页面
- When 输入正确的凭证
- Then 系统颁发JWT令牌
- And 令牌有效期24小时
- And 密码使用bcrypt加密存储
#### 3.1.2 权限管理
**用户故事:** As a 系统管理员I want to 管理用户角色和权限so that 我可以控制不同用户的访问范围
**验收标准:**
- Given 管理员进入权限管理页面
- When 分配用户角色
- Then 用户获得相应权限
- And 权限变更实时生效
### 3.2 养殖场管理模块
#### 3.2.1 养殖场信息维护
**用户故事:** As a 养殖场管理员I want to 维护养殖场基本信息so that 信息准确完整
**验收标准:**
- Given 管理员进入养殖场管理
- When 填写养殖场信息(名称、类型、位置、联系人等)
- Then 信息保存到数据库
- And 地理位置信息格式正确
#### 3.2.2 地图展示
**用户故事:** As a 监管人员I want to 在地图上查看养殖场分布so that 我可以直观了解区域养殖情况
**验收标准:**
- Given 用户有地图查看权限
- When 打开地图页面
- Then 显示所有养殖场位置标记
- And 点击标记显示养殖场基本信息
### 3.3 设备监控模块
#### 3.3.1 设备状态监控
**用户故事:** As a 监管人员I want to 实时监控设备状态so that 我可以确保设备正常运行
**验收标准:**
- Given 设备数据正常上报
- When 用户查看设备监控页面
- Then 显示设备实时状态(在线、离线、维护)
- And 状态更新间隔不超过30秒
#### 3.3.2 设备预警
**用户故事:** As a 系统用户I want to 接收设备异常预警so that 我可以及时处理问题
**验收标准:**
- Given 设备出现异常状态
- When 系统检测到异常
- Then 发送预警通知给相关用户
- And 预警级别根据异常程度划分
### 3.4 动物管理模块
#### 3.4.1 动物信息管理
**用户故事:** As a 养殖场管理员I want to 管理动物基本信息so that 我可以跟踪动物健康状况
**验收标准:**
- Given 管理员进入动物管理
- When 录入动物信息(类型、数量、健康状态)
- Then 信息保存到数据库
- And 健康状态可更新
#### 3.4.2 健康监测
**用户故事:** As a 监管人员I want to 查看动物健康数据so that 我可以评估养殖场健康状况
**验收标准:**
- Given 有动物健康数据
- When 用户查看健康报表
- Then 显示健康状态统计
- And 可以按时间范围筛选
### 3.5 数据分析模块
#### 3.5.1 数据可视化
**用户故事:** As a 用户I want to 通过图表查看数据so that 我可以更直观理解数据趋势
**验收标准:**
- Given 有统计数据
- When 用户打开数据看板
- Then 显示ECharts图表
- And 图表支持交互操作
#### 3.5.2 报表生成
**用户故事:** As a 监管人员I want to 生成养殖统计报表so that 我可以进行决策分析
**验收标准:**
- Given 用户有报表权限
- When 选择报表类型和时间范围
- Then 生成PDF格式报表
- And 报表包含关键指标数据
## 4. 非功能需求
### 4.1 性能要求
- 页面加载时间:<3秒
- API响应时间<500ms
- 并发用户支持1000+用户
- 数据查询性能复杂查询<2秒
### 4.2 安全要求
- 数据传输HTTPS加密
- 身份认证JWT令牌机制
- 密码存储bcrypt加密
- SQL注入防护ORM参数化查询
- XSS防护输入验证和转义
### 4.3 可靠性要求
- 系统可用性99.9%
- 数据备份每日自动备份
- 故障恢复30分钟内恢复
- 监控告警关键指标监控
### 4.4 兼容性要求
- 浏览器支持ChromeFirefoxSafari最新版本
- 移动端适配响应式设计
- 分辨率支持1920x1080及以上
## 5. 原型说明
### 5.1 界面布局
- **顶部导航栏**系统logo用户信息通知中心退出按钮
- **侧边菜单**模块导航菜单支持折叠展开
- **主内容区**功能页面展示区域
- **底部信息**版权信息系统版本
### 5.2 关键页面
#### 5.2.1 登录页面
- 用户名/密码输入框
- 记住密码选项
- 登录按钮
- 忘记密码链接
#### 5.2.2 仪表盘页面
- 数据概览卡片养殖场数设备数动物数预警数
- 实时监控图表
- 最新预警列表
- 快捷操作入口
#### 5.2.3 养殖场管理页面
- 养殖场列表表格
- 搜索筛选功能
- 新增/编辑表单
- 地图展示选项卡
#### 5.2.4 设备监控页面
- 设备状态卡片布局
- 实时数据图表
- 状态筛选功能
- 设备详情模态框
#### 5.2.5 数据报表页面
- 时间范围选择器
- 图表展示区域
- 报表类型切换
- 数据导出功能
### 5.3 交互流程
#### 5.3.1 登录流程
1. 用户访问系统 跳转到登录页面
2. 输入用户名密码 点击登录按钮
3. 验证通过 跳转到仪表盘页面
4. 验证失败 显示错误提示
#### 5.3.2 预警处理流程
1. 设备异常 系统生成预警
2. 预警通知 用户收到通知
3. 查看预警详情 进入预警处理页面
4. 处理预警 更新预警状态
5. 填写处理说明 完成预警处理
## 6. API规范
### 6.1 通用响应格式
```json
{
"success": true,
"data": {},
"message": "操作成功",
"timestamp": "2025-01-18T10:30:00Z"
}
```
### 6.2 错误处理
- HTTP状态码4xx客户端错误5xx服务端错误
- 错误信息中英文错误描述
- 错误日志记录详细错误信息
### 6.3 认证机制
- Authorization: Bearer <token>
- Token过期401 Unauthorized
- 权限不足403 Forbidden
## 7. 数据字典
### 7.1 状态枚举
- 用户状态active, inactive, banned
- 设备状态online, offline, maintenance
- 预警级别low, medium, high, critical
- 预警状态active, acknowledged, resolved
- 健康状态healthy, sick, quarantine
### 7.2 字段规范
- 时间格式YYYY-MM-DD HH:mm:ss
- 金额单位:分(整数存储)
- 地理坐标JSON格式 {latitude: 0, longitude: 0}
## 8. 依赖关系
### 8.1 第三方服务
- 百度地图API地理位置服务
- 邮件服务:预警通知发送
- SMS服务重要通知短信
### 8.2 基础设施
- MySQL数据库数据存储
- Redis缓存会话缓存
- 文件存储:图片文件存储
- CDN服务静态资源加速
## 9. 约束条件
### 9.1 技术约束
- 前端Vue 3.x + Ant Design Vue
- 后端Node.js + Express + Sequelize
- 数据库MySQL 8.0+
- 部署环境Docker容器化
### 9.2 业务约束
- 数据隐私:养殖场数据权限隔离
- 监管合规:符合农业监管部门要求
- 数据准确性:关键数据必须验证
## 10. 待定问题
1. **移动端支持范围**是否需要开发原生APP还是PWA即可
2. **第三方集成**:需要集成哪些物联网设备厂商?
3. **数据保留策略**:历史数据保留多长时间?
4. **多语言支持**:是否需要支持英文版本?
---
*文档最后更新2025年1月18日*

409
docs/config/arch.md Normal file
View File

@@ -0,0 +1,409 @@
# 项目架构文档
## 1. 项目概述
本项目是**宁夏智慧养殖监管平台**,一个现代化的农场管理系统,包含以下核心功能:
- **农场设备监控**: 实时监控农场设备状态和运行数据
- **动物健康管理**: 跟踪和管理动物健康状况
- **地图可视化**: 基于百度地图的农场地理信息展示
- **数据分析与可视化**: 提供丰富的图表和统计分析
- **用户权限管理**: 基于角色的用户认证和授权系统
- **订单管理**: 产品销售和订单处理功能
- **预警管理**: 实时告警监控和预警处理
- **性能监控**: 实时系统性能监控和分析
## 2. 目录结构
### 2.1 后端 (`backend/`)
- `config/`: 配置文件
- `database.js`: MySQL数据库连接配置
- `database-pool.js`: 数据库连接池管理
- `performance-config.js`: 性能监控配置
- `swagger.js`: API文档配置
- `controllers/`: 业务逻辑控制器
- `farmController.js`: 农场管理
- `animalController.js`: 动物管理
- `deviceController.js`: 设备管理
- `alertController.js`: 告警管理
- `statsController.js`: 统计分析
- `mapController.js`: 地图服务
- `userController.js`: 用户管理
- `productController.js`: 产品管理
- `orderController.js`: 订单管理
- `models/`: 数据模型定义Sequelize ORM
- `Farm.js`: 农场模型
- `Animal.js`: 动物模型
- `Device.js`: 设备模型
- `Alert.js`: 告警模型
- `User.js`: 用户模型
- `Role.js`: 角色模型
- `Product.js`: 产品模型
- `Order.js`: 订单模型
- `OrderItem.js`: 订单项模型
- `UserRole.js`: 用户角色关联模型
- `SensorData.js`: 传感器数据模型
- `BaseModel.js`: 基础模型
- `index.js`: 模型入口文件
- `routes/`: API路由定义
- `auth.js`: 认证路由
- `users.js`: 用户管理路由
- `products.js`: 产品管理路由
- `orders.js`: 订单管理路由
- `farms.js`: 农场管理路由
- `animals.js`: 动物管理路由
- `devices.js`: 设备管理路由
- `alerts.js`: 告警管理路由
- `stats.js`: 统计分析路由
- `map.js`: 地图服务路由
- `performance-routes.js`: 性能监控路由
- `middleware/`: 中间件
- `auth.js`: 认证中间件
- `performance-middleware.js`: 性能监控中间件
- `utils/`: 工具类
- `logger.js`: 日志工具
- `performance-monitor.js`: 性能监控
- `db-monitor.js`: 数据库监控
- `query-optimizer.js`: 查询优化器
- `migrations/`: 数据库迁移文件
- `seeds/`: 种子数据文件
- `logs/`: 日志文件目录
### 2.2 管理后台 (`admin-system/`)
- `frontend/`: 管理后台前端项目
- `src/components/`: 可复用的UI组件
- `BaiduMap.vue`: 百度地图组件
- `EChart.vue`: 图表组件
- `Menu.vue`: 导航菜单
- `Dashboard.vue`: 仪表盘组件
- `AlertStats.vue`: 告警统计组件
- `AnimalStats.vue`: 动物统计组件
- `DeviceStats.vue`: 设备统计组件
- `FarmDetail.vue`: 农场详情组件
- `MonitorChart.vue`: 监控图表组件
- `ChartPerformanceMonitor.vue`: 性能监控图表
- `VirtualScrollChart.vue`: 虚拟滚动图表
- `src/views/`: 页面级组件
- `Home.vue`: 首页
- `Dashboard.vue`: 系统概览
- `MapView.vue`: 地图监控
- `Analytics.vue`: 数据分析
- `Monitor.vue`: 实时监控
- `Login.vue`: 登录页面
- `Users.vue`: 用户管理
- `Products.vue`: 产品管理
- `Orders.vue`: 订单管理
- `Devices.vue`: 设备管理
- `Animals.vue`: 动物管理
- `Alerts.vue`: 预警管理
- `TestAnalytics.vue`: 测试分析页面
- `MapZoomDemo.vue`: 地图缩放演示
- `NotFound.vue`: 404页面
- `src/stores/`: 状态管理Pinia
- `user.js`: 用户状态管理
- `data.js`: 数据状态管理
- `settings.js`: 设置状态管理
- `index.js`: 状态管理入口
- `src/router/`: 路由配置
- `index.js`: 路由实例和守卫
- `routes.js`: 路由定义
- `src/utils/`: 工具类API调用、图表服务等
- `api.js`: API请求封装
- `src/config/`: 配置文件
- `public/`: 静态资源和测试页面
- `debug-devices.html`: 设备调试页面
- `debug-users.html`: 用户调试页面
- `map-test.html`: 地图测试页面
- `test-auto-login.html`: 自动登录测试
- `test-users-display.html`: 用户显示测试
### 2.3 官网 (`website/`)
- `data-screen/`: 官网前端项目
- 包含官网展示页面和数据大屏功能
### 2.4 微信小程序 (`mini_program/`)
- `farm-monitor-dashboard/`: 微信小程序项目
- 包含移动端监控仪表盘功能
### 2.5 脚本目录 (`scripts/`)
- `init-db.js`: 数据库初始化
- `migration-manager.js`: 迁移管理
- `seed-manager.js`: 种子数据管理
- `test-connection.js`: 连接测试
- `test-map-api.js`: 地图API测试
### 2.6 文档目录 (`docs/`)
- `baidu-map-license.md`: 百度地图许可文档
- `performance-monitoring.md`: 性能监控文档
### 2.7 测试目录 (`test/`)
- `performance-monitor-test.js`: 性能监控测试
### 2.8 其他文件
- `examples/`: 示例代码
- `performance-monitor-integration.js`: 性能监控集成示例
- `create_tables.sql`: 数据库表创建脚本
- `schema.sql`: 数据库架构脚本
- `design.md`: 详细设计文档
- `dev-plan.md`: 开发计划文档
- `task.md`: 任务列表文档
## 3. 模块划分
### 3.1 后端模块
- **农场管理模块**: 农场信息管理、地理位置管理
- **设备管理模块**: 监控农场设备状态、设备数据采集
- **动物管理模块**: 跟踪动物健康数据、动物档案管理
- **告警管理模块**: 系统告警处理、告警规则配置
- **用户管理模块**: 用户认证、角色权限管理
- **订单管理模块**: 产品销售、订单处理流程
- **统计分析模块**: 数据统计、报表生成
- **地图服务模块**: 地理信息服务、位置数据处理
- **性能监控模块**: 系统性能监控、API性能分析
### 3.2 前端模块
- **首页模块**: 系统入口、快速导航
- **仪表盘模块**: 关键指标展示、数据概览
- **地图模块**: 基于百度地图的可视化展示、地图缩放演示
- **数据分析模块**: 图表展示、数据分析工具、测试分析功能
- **实时监控模块**: 实时数据监控、告警展示、性能监控图表
- **用户管理模块**: 用户信息管理、权限配置
- **产品管理模块**: 产品信息维护、库存管理
- **订单管理模块**: 订单处理、订单状态跟踪
- **设备管理模块**: 设备状态监控、设备信息管理
- **动物管理模块**: 动物健康档案、动物信息管理
- **预警管理模块**: 告警规则配置、预警信息处理
- **认证模块**: 用户登录、权限验证、自动登录
## 4. 核心架构
### 4.1 技术栈
**后端技术栈:**
- **运行环境**: Node.js 18.0+
- **Web框架**: Express.js 4.18+
- **API风格**: RESTful API
- **ORM框架**: Sequelize 6.30+
- **数据库**: MySQL 8.0+ (mysql2 3.0+)
- **认证授权**: JWT (jsonwebtoken 9.0+)
- **密码加密**: bcrypt 5.1+
- **API文档**: Swagger (swagger-jsdoc + swagger-ui-express)
- **日志管理**: Winston 3.17+
- **开发工具**: nodemon 3.0+
- **跨域处理**: CORS 2.8+
- **数据验证**: express-validator 7.2+
- **环境变量**: dotenv 16.0+
- **HTTP客户端**: Axios 1.4+
- **服务器端口**: 5350
**前端技术栈:**
- **框架**: Vue.js 3.4+
- **构建工具**: Vite 5.0+
- **路由管理**: Vue Router 4.0+
- **状态管理**: Pinia 2.0+
- **UI组件库**: Ant Design Vue 4.0+
- **图表库**: ECharts 5.4+
- **地图服务**: 百度地图API
- **HTTP客户端**: Axios 1.11+
- **响应式设计**: 支持Chrome、Firefox、Safari最新版本
- **分辨率支持**: 1920x1080及以上
### 4.2 性能要求
- **页面加载时间**: <3秒
- **API响应时间**: <500ms
- **并发用户支持**: 1000+用户
- **数据查询性能**: 复杂查询<2秒
- **系统可用性**: 99.9%
### 4.3 安全要求
- **数据传输**: HTTPS加密
- **身份认证**: JWT令牌机制
- **密码存储**: bcrypt加密
- **SQL注入防护**: ORM参数化查询
- **XSS防护**: 输入验证和转义
- **访问控制**: 基于角色的权限管理(RBAC)
- **会话管理**: Token过期机制
### 4.4 可靠性要求
- **数据备份**: 每日自动备份
- **故障恢复**: 30分钟内恢复
- **监控告警**: 关键指标监控
- **日志记录**: 完整的操作日志和错误日志
- **开发服务器**: Vite Dev Server (端口: 5300)
- **代理配置**: API代理到后端服务器
**数据库设计:**
- **主数据库**: MySQL (生产环境)
- **连接池**: 数据库连接池管理
- **字符集**: UTF8MB4
- **时区**: +08:00 (北京时间)
### 4.2 数据流架构
1. **前端请求流程**:
- 用户操作 Vue组件 Pinia状态管理 API调用
2. **后端处理流程**:
- API路由 中间件验证 控制器处理 模型操作 数据库
3. **响应返回流程**:
- 数据库结果 模型封装 控制器响应 前端状态更新 UI渲染
4. **实时数据流**:
- 设备数据采集 后端处理 数据库存储 前端轮询/推送更新
## 5. 数据模型关系
### 5.1 核心实体关系
- **Farm (农场)** 一对多 **Animal (动物)**
- **Farm (农场)** 一对多 **Device (设备)**
- **Farm (农场)** 一对多 **Alert (告警)**
- **Device (设备)** 一对多 **Alert (告警)**
- **User (用户)** 多对多 **Role (角色)** (通过UserRole中间表)
- **User (用户)** 一对多 **Order (订单)**
- **Order (订单)** 一对多 **OrderItem (订单项)**
- **Product (产品)** 一对多 **OrderItem (订单项)**
### 5.2 数据库约束
- **外键约束**: 确保数据完整性
- **级联删除**: Farm删除时级联删除相关AnimalDeviceAlert
- **级联更新**: 主键更新时自动更新外键
- **限制删除**: Product被OrderItem引用时限制删除
## 6. API设计规范
### 6.1 RESTful API结构
```
/api/farms - 农场管理
/api/animals - 动物管理
/api/devices - 设备管理
/api/alerts - 告警管理
/api/users - 用户管理
/api/products - 产品管理
/api/orders - 订单管理
/api/stats - 统计数据
/api/map - 地图服务
/api/auth - 认证服务
```
### 6.2 响应格式标准
```json
{
"success": true,
"data": {},
"message": "操作成功",
"timestamp": "2025-01-18T10:30:00Z"
}
```
## 7. 安全架构
### 7.1 认证与授权
- **JWT Token**: 无状态身份验证
- **角色权限**: 基于RBAC的权限控制
- **路由守卫**: 前端路由级别的权限验证
- **API中间件**: 后端接口级别的权限验证
### 7.2 数据安全
- **密码加密**: bcrypt哈希加密
- **SQL注入防护**: Sequelize ORM参数化查询
- **XSS防护**: 前端输入验证和转义
- **CORS配置**: 跨域请求安全控制
## 8. 性能优化
### 8.1 后端性能
- **数据库连接池**: 优化数据库连接管理
- **查询优化**: 数据库查询性能监控
- **API性能监控**: 接口响应时间监控
- **内存监控**: 系统资源使用监控
### 8.2 前端性能
- **组件懒加载**: 路由级别的代码分割
- **图表优化**: ECharts按需加载
- **状态管理**: Pinia轻量级状态管理
- **构建优化**: Vite快速构建和热更新
## 9. 部署架构
### 9.1 开发环境
- **前端**: Vite开发服务器 (http://localhost:5300)
- **后端**: Node.js开发服务器 (http://localhost:5350)
- **数据库**: MySQL本地实例
### 9.2 生产环境建议
- **前端**: 静态文件部署 (Nginx)
- **后端**: PM2进程管理
- **数据库**: MySQL主从复制
- **负载均衡**: Nginx反向代理
- **容器化**: Docker部署支持
## 10. 依赖关系
### 10.1 后端主要依赖
```json
{
"express": "^4.18.0",
"sequelize": "^6.30.0",
"mysql2": "^3.0.0",
"jsonwebtoken": "^9.0.0",
"bcrypt": "^5.1.0",
"swagger-ui-express": "^5.0.0",
"swagger-jsdoc": "^6.2.8",
"winston": "^3.17.0",
"cors": "^2.8.5",
"express-validator": "^7.2.1",
"dotenv": "^16.0.0",
"axios": "^1.4.0",
"nodemon": "^3.0.0"
}
```
### 10.2 前端主要依赖
```json
{
"vue": "^3.4.0",
"vue-router": "^4.0.0",
"pinia": "^2.0.0",
"ant-design-vue": "^4.0.0",
"echarts": "^5.4.0",
"axios": "^1.11.0",
"@vitejs/plugin-vue": "^5.0.0",
"vite": "^5.0.0"
}
```
### 10.3 外部服务
- **百度地图API**: 地理信息可视化服务
- **MySQL数据库**: 数据持久化存储
## 11. 扩展性设计
### 11.1 模块化架构
- **前端组件化**: 可复用的Vue组件
- **后端模块化**: 控制器模型路由分离
- **配置外部化**: 环境变量配置管理
### 11.2 未来扩展方向
- **微服务架构**: 服务拆分和独立部署
- **消息队列**: 异步任务处理
- **缓存系统**: Redis缓存优化
- **实时通信**: WebSocket实时数据推送
- **移动端支持**: 响应式设计和PWA
## 12. 项目特色功能
### 12.1 性能监控系统
- **实时性能监控**: 监控API响应时间系统资源使用情况
- **性能分析图表**: 基于ECharts的性能数据可视化
- **虚拟滚动优化**: 大数据量图表的性能优化
- **数据库查询优化**: 查询性能监控和优化建议
### 12.2 地图可视化系统
- **百度地图集成**: 农场地理位置可视化展示
- **地图缩放演示**: 多级缩放功能演示
- **地理信息服务**: 位置数据处理和展示
### 12.3 数据分析系统
- **多维度统计**: 设备动物告警等多维度数据统计
- **实时图表**: 基于ECharts的实时数据图表
- **测试分析功能**: 专门的测试分析页面
### 12.4 认证与权限系统
- **JWT无状态认证**: 基于Token的身份验证
- **自动登录功能**: 智能的自动登录和Token验证
- **路由权限守卫**: 前端路由级别的权限控制
- **角色权限管理**: 基于RBAC的权限控制
### 12.5 开发与调试工具
- **API调试页面**: 专门的API测试和调试页面
- **性能测试工具**: 内置的性能测试和监控工具
- **数据库管理脚本**: 完整的数据库管理和维护脚本
---
*最后更新: 2025-01-18*
*版本: v2.1*
*分析基于实际代码结构*

View File

@@ -0,0 +1,122 @@
# 经纬度数据同步问题修复报告
## 问题描述
用户反馈经纬度输入框的值与数据库存储的值不一致,存在数据不同步的问题。
## 问题分析
通过深入调查,发现问题的根本原因是:
### 1. 数据库存储格式问题
- **问题**: 数据库中的 `location` 字段被存储为 JSON 字符串而不是 JSON 对象
- **表现**: `location` 字段值为 `"{\"lat\":38.47,\"lng\":106.28}"` (字符串格式)
- **期望**: `location` 字段值应为 `{"lat":38.47,"lng":106.28}` (对象格式)
### 2. 前端解析问题
-`location` 字段为字符串时,前端无法正确解析 `lng``lat` 属性
- 导致编辑表单中经纬度输入框显示为空
## 解决方案
### 1. 数据库格式修复
创建并运行了 `fix-location-data.js` 脚本:
```javascript
// 将JSON字符串转换为JSON对象
if (typeof farm.location === 'string') {
newLocation = JSON.parse(farm.location);
await farm.update({ location: newLocation });
}
```
**修复结果**:
- 总记录数: 12
- 修复成功: 11
- 修复失败: 0
- 无需修复: 1
### 2. 代码验证
#### 后端代码检查
-`Farm` 模型定义正确 (`DataTypes.JSON`)
-`createFarm` 函数正确处理经纬度数据
-`updateFarm` 函数正确构建 location 对象
#### 前端代码检查
-`editFarm` 函数正确解析 `record.location?.lng``record.location?.lat`
- ✅ 表单验证规则完整
-`handleSubmit` 函数正确提交数据
## 测试验证
### 1. 数据格式验证
修复前:
```
Location对象: "{\"lat\":38.4872,\"lng\":106.2309}"
❌ Location字段为空或格式错误
```
修复后:
```
Location对象: {"lat":38.4872,"lng":106.2309}
经度 (lng): 106.2309 (类型: number)
纬度 (lat): 38.4872 (类型: number)
✅ 有经纬度数据
```
### 2. 数据同步测试
运行 `test-data-sync.js` 验证完整流程:
```
=== 测试结果 ===
✅ 创建记录成功
✅ 查询验证通过
✅ API响应格式正确
✅ 前端数据解析正确
✅ 更新操作成功
✅ 数据一致性检查通过
结果: 数据同步正常
```
## 修复效果
### 修复前
- 数据库中 location 字段为 JSON 字符串
- 前端无法正确解析经纬度数据
- 编辑表单中经纬度输入框显示为空
- 用户输入的值与数据库存储值不一致
### 修复后
- 数据库中 location 字段为 JSON 对象
- 前端正确解析并显示经纬度数据
- 编辑表单正确回显经纬度值
- 用户输入值与数据库存储值完全一致
## 预防措施
### 1. 数据验证
-`createFarm``updateFarm` 函数中确保 location 对象格式正确
- 添加数据类型检查,确保经纬度为数值类型
### 2. 前端处理
-`editFarm` 函数中添加容错处理
- 确保 location 对象解析的健壮性
### 3. 测试覆盖
- 定期运行数据一致性检查
- 在部署前验证经纬度数据的完整流程
## 总结
经纬度数据同步问题已完全解决:
1. **根本原因**: 数据库中 location 字段存储格式错误JSON字符串 vs JSON对象
2. **解决方案**: 运行数据修复脚本,将所有记录的 location 字段转换为正确的 JSON 对象格式
3. **验证结果**: 所有测试通过,数据同步正常
4. **预防措施**: 建立了完整的测试和验证机制
现在用户在前端编辑养殖场时,经纬度输入框会正确显示数据库中存储的值,实现了完全的数据同步。

551
docs/config/design.md Normal file
View File

@@ -0,0 +1,551 @@
# 宁夏智慧养殖监管平台详细设计文档
## 1. 项目概述
### 1.1 项目背景
宁夏回族自治区作为中国重要的畜牧业基地,养殖业在区域经济发展中占据重要地位。随着现代信息技术的快速发展,传统养殖业正逐步向智能化、数字化方向转型升级。为提升宁夏地区养殖业的管理水平和监管效率,建设一套完善的智慧养殖监管平台势在必行。
### 1.2 项目目标
宁夏智慧养殖监管平台旨在通过数字化手段实现对养殖全过程的监管,具体目标包括:
- 实现养殖场信息数字化管理
- 提供养殖环境实时监控功能
- 支持养殖过程数据记录与追溯
- 提供数据分析和决策支持
- 构建统一的养殖监管体系
### 1.3 项目范围
本项目主要涵盖以下功能模块:
- 用户权限管理
- 养殖场信息管理
- 养殖环境监控
- 养殖过程管理
- 产品信息管理
- 数据分析与报表
- 地理信息系统展示
## 2. 技术架构设计
### 2.1 整体架构
本项目采用前后端分离的架构设计模式,包含以下主要模块:
- **后端服务** (`backend/`): Node.js + Express + Sequelize ORM
- **管理后台** (`admin-system/`): Vue.js 3.x + Ant Design Vue
- **官网** (`website/`): Vue.js 3.x + 数据大屏展示
- **微信小程序** (`mini_program/`): React + TypeScript + Tailwind CSS
- **脚本工具** (`scripts/`): 数据库管理和维护脚本
- **文档** (`docs/`): 项目技术文档
- **测试** (`test/`): 测试脚本和用例
### 2.2 前端技术栈
- **核心框架**: Vue.js 3.x
- **UI组件库**: Ant Design Vue
- **构建工具**: Vite
- **状态管理**: Pinia
- **路由管理**: Vue Router
- **地图服务**: 百度地图API
- **图表库**: ECharts
### 2.3 后端技术栈
- **运行环境**: Node.js
- **Web框架**: Express.js 4.18+
- **API风格**: RESTful API
- **认证授权**: JWT (jsonwebtoken 9.0+)
- **数据库访问**: Sequelize ORM 6.30+
- **数据库**: MySQL (mysql2 3.0+)
- **密码加密**: bcrypt 5.1+
- **API文档**: Swagger (swagger-jsdoc + swagger-ui-express)
- **日志管理**: Winston 3.17+
- **开发工具**: nodemon 3.0+
- **跨域处理**: CORS 2.8+
- **数据验证**: express-validator 7.2+
- **环境变量**: dotenv 16.0+
- **HTTP客户端**: Axios 1.4+
- **服务器端口**: 5350
### 2.4 部署架构
- **开发环境**: 本地运行
- **生产环境**: Docker容器化部署
## 3. 数据库设计
### 3.1 数据库连接信息
- 数据库地址http://192.168.0.240:3306
- 数据库用户名root
- 数据库密码aiot$Aiot123
- 数据库名称nxxmdata
### 3.2 数据库连接失败解决方案
在开发过程中,可能会遇到数据库连接失败的问题,此时应采取以下措施:
1. **确认MySQL服务状态**:
- 确保MySQL服务已经安装并正在运行
- 检查MySQL是否在默认端口3306上运行和监听
2. **创建数据库**:
- 可以执行项目中的SQL文件来创建数据库和表
- 根据项目中的 schema.sql 文件手动执行创建数据库和表的SQL语句
3. **提供正确的连接参数**:
- 需要提供正确的数据库连接信息包括主机地址host、端口号port、用户名user、密码password、数据库名database
- 验证主机地址、端口号、用户名、密码等连接参数的正确性
- 确保提供完整的数据库配置参数检查参数格式是否符合MCP工具的要求
4. **连接验证参数**:
- 主机: `localhost``127.0.0.1`
- 端口: `3306` (MySQL默认端口)
- 用户名: MySQL用户名 (例如: `root`)
- 密码: MySQL密码
- 数据库: `nxxmdata`
5. **处理未知数据库问题**:
- 如果遇到"Unknown database"错误,应手动创建相应的数据库
- 使用schema.sql文件创建数据库结构
- 确保在连接数据库前完成数据库的初始化工作
6. **验证数据库连接**:
- 在完成数据库创建和配置后,再次尝试连接数据库
- 通过执行简单的数据库操作验证连接的有效性
当无法直接连接数据库时可以通过创建完整的数据库设计文档和SQL脚本文件来提供替代方案。这种方法可以确保设计工作继续进行并为后续的数据库部署提供可执行的起点。
### 3.3 数据表结构设计
#### 3.3.1 用户表 (users)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 用户ID |
| username | VARCHAR(50) | UNIQUE, NOT NULL | 用户名 |
| email | VARCHAR(100) | UNIQUE, NOT NULL | 邮箱地址 |
| password | VARCHAR(255) | NOT NULL | 密码(加密后) |
| phone | VARCHAR(20) | NULL | 手机号 |
| avatar | VARCHAR(255) | NULL | 头像URL |
| status | ENUM('active','inactive','banned') | DEFAULT 'active' | 用户状态 |
| last_login | DATETIME | NULL | 最后登录时间 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
#### 3.3.2 角色表 (roles)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 角色ID |
| name | VARCHAR(50) | UNIQUE, NOT NULL | 角色名称 |
| description | TEXT | NULL | 角色描述 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
#### 3.3.3 用户角色关联表 (user_roles)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| user_id | INT | FOREIGN KEY (users.id), NOT NULL | 用户ID |
| role_id | INT | FOREIGN KEY (roles.id), NOT NULL | 角色ID |
| assigned_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 分配时间 |
#### 3.3.4 产品表 (products)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 产品ID |
| name | VARCHAR(100) | NOT NULL | 产品名称 |
| description | TEXT | NULL | 产品描述 |
| price | INT | NOT NULL | 产品价格(单位:分) |
| stock | INT | DEFAULT 0 | 库存数量 |
| image_url | VARCHAR(255) | NULL | 产品图片URL |
| is_active | TINYINT(1) | DEFAULT 1 | 是否激活 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
#### 3.3.5 订单表 (orders)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 订单ID |
| user_id | INT | FOREIGN KEY (users.id), NOT NULL | 用户ID |
| total_amount | INT | DEFAULT 0 | 订单总金额(单位:分) |
| status | ENUM('pending','processing','shipped','delivered','cancelled') | DEFAULT 'pending' | 订单状态 |
| payment_status | ENUM('unpaid','paid','refunded') | DEFAULT 'unpaid' | 支付状态 |
| shipping_address | TEXT | NULL | 收货地址 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
#### 3.3.6 订单项表 (order_items)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 订单项ID |
| order_id | INT | FOREIGN KEY (orders.id), NOT NULL | 订单ID |
| product_id | INT | FOREIGN KEY (products.id), NOT NULL | 产品ID |
| quantity | INT | DEFAULT 1 | 数量 |
| price | INT | NOT NULL | 单价(单位:分) |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
#### 3.3.7 养殖场表 (farms)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 养殖场ID |
| name | VARCHAR(100) | NOT NULL | 养殖场名称 |
| type | VARCHAR(50) | NOT NULL | 养殖场类型 |
| location | JSON | NOT NULL | 地理位置信息 |
| address | VARCHAR(255) | NULL | 详细地址 |
| contact | VARCHAR(50) | NULL | 联系人 |
| phone | VARCHAR(20) | NULL | 联系电话 |
| status | ENUM('active','inactive','maintenance') | DEFAULT 'active' | 养殖场状态 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
#### 3.3.8 动物表 (animals)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 动物ID |
| type | VARCHAR(50) | NOT NULL | 动物类型 |
| count | INT | DEFAULT 0 | 数量 |
| farm_id | INT | FOREIGN KEY (farms.id), NOT NULL | 所属养殖场ID |
| health_status | ENUM('healthy','sick','quarantine') | DEFAULT 'healthy' | 健康状态 |
| last_inspection | DATETIME | NULL | 最后检查时间 |
| notes | TEXT | NULL | 备注信息 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
#### 3.3.9 设备表 (devices)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 设备ID |
| name | VARCHAR(100) | NOT NULL | 设备名称 |
| type | VARCHAR(50) | NOT NULL | 设备类型 |
| status | ENUM('online','offline','maintenance') | DEFAULT 'offline' | 设备状态 |
| farm_id | INT | FOREIGN KEY (farms.id), NOT NULL | 所属养殖场ID |
| last_maintenance | DATETIME | NULL | 最后维护时间 |
| installation_date | DATETIME | NULL | 安装日期 |
| metrics | JSON | NULL | 设备指标数据 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
#### 3.3.10 预警表 (alerts)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 预警ID |
| type | VARCHAR(50) | NOT NULL | 预警类型 |
| level | ENUM('low','medium','high','critical') | DEFAULT 'medium' | 预警级别 |
| message | TEXT | NOT NULL | 预警消息 |
| status | ENUM('active','acknowledged','resolved') | DEFAULT 'active' | 预警状态 |
| farm_id | INT | FOREIGN KEY (farms.id), NOT NULL | 所属养殖场ID |
| device_id | INT | FOREIGN KEY (devices.id), NULL | 关联设备ID |
| resolved_at | DATETIME | NULL | 解决时间 |
| resolved_by | INT | FOREIGN KEY (users.id), NULL | 解决人ID |
| resolution_notes | TEXT | NULL | 解决说明 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 3.4 初始数据
#### 3.4.1 角色数据
系统初始化时会创建以下基础角色数据:
- admin: 系统管理员
- user: 普通用户
- guest: 访客
#### 3.4.2 用户数据
系统初始化时会创建以下示例用户数据:
- admin用户: admin@example.com
- 普通用户: john@example.com
#### 3.4.3 产品数据
系统初始化时会创建以下示例产品数据:
- 示例产品1: 价格99.99库存100
- 示例产品2: 价格149.99库存50
## 4. 功能模块详细设计
### 4.1 用户管理模块
#### 4.1.1 用户认证
- 用户登录/登出功能
- 密码加密存储
- JWT令牌管理
- 会话超时处理
#### 4.1.2 用户权限管理
- 基于角色的访问控制(RBAC)
- 权限分配与验证
- 用户角色管理
- 访问日志记录
### 4.2 养殖场信息管理模块
#### 4.2.1 养殖场基本信息
- 养殖场名称、地址、联系人等基本信息维护
- 养殖场资质证书管理
- 养殖场规模信息记录
- 养殖场照片上传与展示
#### 4.2.2 养殖场地理信息
- 基于百度地图API的养殖场位置标注
- 养殖场地理围栏设置
- 区域养殖密度可视化展示
### 4.3 养殖环境监控模块
#### 4.3.1 实时数据监控
- 温度、湿度等环境参数实时展示
- 异常数据预警功能
- 历史数据趋势分析
#### 4.3.2 设备管理
- 传感器设备信息管理
- 设备状态监控
- 设备故障报警
### 4.4 养殖过程管理模块
#### 4.4.1 饲料管理
- 饲料种类信息维护
- 饲料投喂记录管理
- 饲料库存管理
#### 4.4.2 疫苗管理
- 疫苗信息维护
- 疫苗接种记录管理
- 疫苗批次追踪
#### 4.4.3 养殖档案
- 养殖动物个体信息管理
- 生长过程记录
- 出栏信息管理
### 4.5 产品管理模块
#### 4.5.1 产品信息管理
- 产品基本信息维护
- 产品质量标准设定
- 产品批次管理
#### 4.5.2 库存管理
- 产品入库管理
- 产品出库管理
- 库存预警功能
### 4.6 数据分析与报表模块
#### 4.6.1 数据可视化
- 基于ECharts的数据图表展示
- 实时监控大屏
- 历史数据趋势分析
#### 4.6.2 报表生成
- 养殖统计报表
- 销售分析报表
- 监管合规报表
- 自定义报表功能
### 4.7 系统管理模块
#### 4.7.1 系统配置
- 系统参数配置
- 字典数据管理
- 系统日志管理
#### 4.7.2 权限管理
- 角色权限配置
- 菜单权限管理
- 数据权限控制
## 5. 接口设计
### 5.1 通用API规范
#### 5.1.1 响应格式
所有API响应遵循统一格式
```json
{
"success": true,
"data": {},
"message": "操作成功",
"timestamp": "2025-01-18T10:30:00Z"
}
```
#### 5.1.2 错误处理
- HTTP状态码4xx客户端错误5xx服务端错误
- 错误信息:中英文错误描述
- 错误日志:记录详细错误信息
#### 5.1.3 认证机制
- Authorization: Bearer <token>
- Token过期401 Unauthorized
- 权限不足403 Forbidden
### 5.2 用户认证接口
- **POST /api/auth/login** - 用户登录
- 请求体:{username, password}
- 响应JWT令牌和用户信息
- **POST /api/auth/logout** - 用户登出
- 请求头Authorization: Bearer <token>
- 响应:登出成功消息
- **POST /api/auth/register** - 用户注册
- 请求体:{username, email, password}
- 响应:注册成功消息
### 5.3 用户管理接口
- **GET /api/users** - 获取用户列表需要admin权限
- 查询参数page, limit, search
- 响应:用户列表分页数据
- **GET /api/users/{id}** - 获取用户详情(需要认证)
- 路径参数用户ID
- 响应:用户详细信息
- **POST /api/users** - 创建用户需要admin权限
- 请求体:用户信息
- 响应:创建的用户信息
- **PUT /api/users/{id}** - 更新用户信息(需要认证)
- 路径参数用户ID
- 请求体:更新字段
- 响应:更新后的用户信息
- **DELETE /api/users/{id}** - 删除用户需要admin权限
- 路径参数用户ID
- 响应:删除成功消息
### 5.4 养殖场管理接口
- **GET /api/farms** - 获取养殖场列表(需要认证)
- 查询参数page, limit, type, status
- 响应:养殖场列表分页数据
- **GET /api/farms/{id}** - 获取养殖场详情(需要认证)
- 路径参数养殖场ID
- 响应:养殖场详细信息
- **POST /api/farms** - 创建养殖场需要manager权限
- 请求体养殖场信息包含地理位置JSON
- 响应:创建的养殖场信息
- **PUT /api/farms/{id}** - 更新养殖场信息需要manager权限
- 路径参数养殖场ID
- 请求体:更新字段
- 响应:更新后的养殖场信息
- **DELETE /api/farms/{id}** - 删除养殖场需要admin权限
- 路径参数养殖场ID
- 响应:删除成功消息
### 5.5 设备管理接口
- **GET /api/devices** - 获取设备列表(需要认证)
- 查询参数page, limit, farm_id, type, status
- 响应:设备列表分页数据
- **GET /api/devices/{id}** - 获取设备详情(需要认证)
- 路径参数设备ID
- 响应:设备详细信息(包含实时指标数据)
- **POST /api/devices** - 创建设备需要manager权限
- 请求体:设备信息
- 响应:创建设备信息
- **PUT /api/devices/{id}** - 更新设备信息需要manager权限
- 路径参数设备ID
- 请求体:更新字段
- 响应:更新后的设备信息
- **DELETE /api/devices/{id}** - 删除设备需要admin权限
- 路径参数设备ID
- 响应:删除成功消息
### 5.6 预警管理接口
- **GET /api/alerts** - 获取预警列表(需要认证)
- 查询参数page, limit, farm_id, level, status
- 响应:预警列表分页数据
- **GET /api/alerts/{id}** - 获取预警详情(需要认证)
- 路径参数预警ID
- 响应:预警详细信息
- **PUT /api/alerts/{id}/acknowledge** - 确认预警需要manager权限
- 路径参数预警ID
- 响应:确认成功消息
- **PUT /api/alerts/{id}/resolve** - 解决预警需要manager权限
- 路径参数预警ID
- 请求体:解决说明
- 响应:解决成功消息
### 5.7 产品管理接口
- **GET /api/products** - 获取产品列表(需要认证)
- 查询参数page, limit, search
- 响应:产品列表分页数据
- **GET /api/products/{id}** - 获取产品详情(需要认证)
- 路径参数产品ID
- 响应:产品详细信息
- **POST /api/products** - 创建产品需要manager权限
- 请求体:产品信息
- 响应:创建的产品信息
- **PUT /api/products/{id}** - 更新产品信息需要manager权限
- 路径参数产品ID
- 请求体:更新字段
- 响应:更新后的产品信息
- **DELETE /api/products/{id}** - 删除产品需要admin权限
- 路径参数产品ID
- 响应:删除成功消息
### 5.8 统计分析接口
- **GET /api/stats/overview** - 获取系统概览统计(需要认证)
- 响应:养殖场数、设备数、动物数、预警数等
- **GET /api/stats/farms/{id}** - 获取养殖场统计(需要认证)
- 路径参数养殖场ID
- 响应:养殖场详细统计数据
- **GET /api/stats/alerts** - 获取预警统计(需要认证)
- 查询参数timeRange今日、本周、本月
- 响应:预警级别分布统计
- **GET /api/stats/animals** - 获取动物健康统计(需要认证)
- 查询参数farm_id
- 响应:动物健康状态分布
## 6. 安全设计
### 6.1 认证安全
- 用户密码加密存储BCrypt等
- JWT令牌机制
- 登录失败次数限制
- 会话超时管理
### 6.2 接口安全
- HTTPS协议支持
- 接口访问权限控制
- 请求参数校验
- SQL注入防护
### 6.3 数据安全
- 敏感数据加密存储
- 数据备份策略
- 数据访问日志记录
## 7. 性能优化
### 7.1 前端优化
- 组件懒加载
- 图片压缩与懒加载
- 数据缓存机制
- 防抖节流处理
### 7.2 后端优化
- 数据库索引优化
- 接口缓存机制
- 数据库连接池
- 异步任务处理
### 7.3 数据库优化
- 查询语句优化
- 表结构设计优化
- 分表分库策略
## 8. 部署方案
### 8.1 开发环境
- 本地开发环境搭建
- 开发调试工具配置
- 代码版本管理
### 8.2 生产环境
- Docker容器化部署
- Nginx反向代理配置
- 负载均衡方案
- 监控告警机制
## 9. 扩展性设计
### 9.1 模块化扩展
- 支持功能模块的独立开发和部署
- 微服务架构兼容性设计
### 9.2 第三方服务集成
- 易于集成物联网设备数据
- 支持与其他监管系统对接
- 开放API接口设计
## 10. 后续发展规划
1. 引入微服务架构,提升系统可扩展性
2. 优化性能监控,提升系统稳定性
3. 增强数据分析能力,提供更深入的业务洞察
4. 完善移动端支持,提供更便捷的操作体验
5. 集成人工智能技术,实现智能预警和决策支持

44
docs/config/dev-plan.md Normal file
View File

@@ -0,0 +1,44 @@
# 项目开发计划
## 1. 项目目标
开发一个现代化的农场管理系统,实现以下核心功能:
- 实时监控农场设备和动物状态
- 数据可视化分析仪表盘
- 多角色权限管理系统
- 移动端适配(二期规划)
## 2. 里程碑计划
| 阶段 | 时间节点 | 交付物 |
|------|----------|--------|
| 需求确认 | 2025/8/20 | 需求规格说明书 |
| 原型设计 | 2025/8/25 | Figma设计稿 |
| 核心功能开发 | 2025/9/10 | 设备监控模块、动物管理模块 |
| 数据分析模块 | 2025/9/20 | 可视化报表系统 |
| 系统联调 | 2025/9/25 | 集成测试报告 |
| 上线部署 | 2025/9/30 | 生产环境部署包 |
## 3. 任务分解
### 3.1 后端开发
- [ ] 设备状态API开发3人日
- [ ] 动物健康数据模型设计2人日
- [ ] 用户权限管理系统5人日
### 3.2 前端开发
- [ ] 实时监控看板4人日
- [ ] 地图可视化组件3人日
- [ ] 响应式布局适配2人日
## 4. 资源需求
- 开发团队3名后端 + 2名前端
- 测试资源专职QA 1名
- 服务器腾讯云CVM 2台4核8G
## 5. 风险预案
| 风险项 | 应对方案 |
|--------|----------|
| 第三方地图API延迟 | 备用百度地图/高德地图双方案 |
| 数据量激增 | 提前规划数据库分表方案 |
| 人员流动 | 核心模块双人负责制 |
---
*最后更新2025/8/18*

View File

@@ -0,0 +1,116 @@
# Farms静态数据导入总结
## 概述
成功将后端API中的farms静态数据导入到数据库的farms表中。
## 数据来源
### 1. API静态数据
来源:`routes/farms.js` 中的 `/public` 路由
- 宁夏农场1 (银川市)
- 宁夏农场2 (石嘴山市)
- 宁夏农场3 (吴忠市)
### 2. 种子数据
来源:`seeds/20230102000000_farm_data.js``seeds/20230103000000_extended_data.js`
- 阳光农场 (养猪场)
- 绿野牧场 (养牛场)
- 山谷羊场 (养羊场)
- 蓝天养鸡场 (养鸡场)
- 金山养鸭场 (养鸭场)
- 银河渔场 (渔场)
- 星空牧场 (综合养殖场)
- 彩虹农庄 (有机农场)
## 导入过程
### 1. 创建导入脚本
文件:`import-farms-static-data.js`
- 合并API静态数据和种子数据
- 使用事务确保数据一致性
- 清空现有数据并重置自增ID
- 批量插入新数据
### 2. 执行导入
```bash
node import-farms-static-data.js
```
### 3. 验证导入结果
文件:`verify-farms-import.js`
- 数据完整性检查
- ID序列连续性验证
- 地理位置数据验证
- 农场类型统计
## 导入结果
### 数据统计
- **总计**11个农场
- **ID范围**1-11连续
- **数据完整性**:✅ 所有字段完整
- **地理位置**:✅ 所有位置数据有效
### 农场类型分布
| 类型 | 数量 |
|------|------|
| 综合农场 | 3个 |
| 养猪场 | 1个 |
| 养牛场 | 1个 |
| 养羊场 | 1个 |
| 养鸡场 | 1个 |
| 养鸭场 | 1个 |
| 渔场 | 1个 |
| 综合养殖场 | 1个 |
| 有机农场 | 1个 |
### API验证
- `/api/farms/public` ✅ 返回正确的静态数据
- `/api/farms` ✅ 返回完整的数据库数据
## 数据结构
每个农场记录包含以下字段:
- `id`: 主键,自增
- `name`: 农场名称
- `type`: 农场类型
- `location`: 地理位置JSON格式包含lat和lng
- `address`: 详细地址
- `contact`: 联系人
- `phone`: 联系电话
- `status`: 状态active/inactive/maintenance
- `created_at`: 创建时间
- `updated_at`: 更新时间
## 相关文件
### 创建的文件
- `import-farms-static-data.js` - 数据导入脚本
- `verify-farms-import.js` - 数据验证脚本
- `farms-data-import-summary.md` - 本总结文档
### 涉及的现有文件
- `routes/farms.js` - API路由定义
- `models/Farm.js` - 数据模型定义
- `controllers/farmController.js` - 控制器逻辑
- `seeds/20230102000000_farm_data.js` - 种子数据
- `seeds/20230103000000_extended_data.js` - 扩展种子数据
## 注意事项
1. **数据库连接警告**:执行过程中出现循环依赖警告,但不影响功能
2. **事务安全**:使用数据库事务确保数据导入的原子性
3. **ID重置**导入前重置了自增ID确保从1开始
4. **数据覆盖**导入过程会清空现有farms数据
## 后续建议
1. 定期备份farms数据
2. 考虑添加数据迁移脚本
3. 优化循环依赖问题
4. 添加更多数据验证规则
---
**导入完成时间**2025-08-21
**状态**:✅ 成功完成

View File

@@ -0,0 +1,256 @@
# 经纬度数据传递验证报告
## 概述
本报告详细验证了经纬度输入值从前端表单到数据库操作层的完整传递流程确保location字段的更新逻辑被正确执行并验证查询绑定的值与数据库中的实际值一致。
## 验证范围
### 1. 前端数据处理
- ✅ 经纬度输入框配置正确
- ✅ 表单验证规则完善
- ✅ 数据提交格式正确
### 2. 后端API处理
- ✅ 创建养殖场时经纬度处理
- ✅ 更新养殖场时经纬度处理(已修复)
- ✅ 空值和边界值处理
### 3. 数据库存储
- ✅ JSON字段存储格式正确
- ✅ 数据类型保持一致
- ✅ 精度保持完整
## 详细验证结果
### 前端组件配置
**经度输入框配置:**
```vue
<a-input-number
v-model:value="formData.longitude"
:min="-180"
:max="180"
:precision="6"
:step="0.000001"
:string-mode="false"
:controls="false"
placeholder="请输入经度 (-180 ~ 180)"
:parser="(value) => {
if (typeof value === 'string') {
const num = parseFloat(value.replace(/[^\d.-]/g, ''));
return isNaN(num) ? undefined : num;
}
return value;
}"
:formatter="(value) => value ? value.toString() : ''"
/>
```
**纬度输入框配置:**
```vue
<a-input-number
v-model:value="formData.latitude"
:min="-90"
:max="90"
:precision="6"
:step="0.000001"
:string-mode="false"
:controls="false"
placeholder="请输入纬度 (-90 ~ 90)"
:parser="(value) => {
if (typeof value === 'string') {
const num = parseFloat(value.replace(/[^\d.-]/g, ''));
return isNaN(num) ? undefined : num;
}
return value;
}"
:formatter="(value) => value ? value.toString() : ''"
/>
```
### 表单验证规则
**经度验证:**
- ✅ 允许为空值
- ✅ 数值有效性检查
- ✅ 范围验证(-180 到 180
- ✅ 精度限制最多6位小数
**纬度验证:**
- ✅ 允许为空值
- ✅ 数值有效性检查
- ✅ 范围验证(-90 到 90
- ✅ 精度限制最多6位小数
### 后端API处理
**创建养殖场createFarm**
```javascript
// 构建location对象
const location = {};
if (longitude !== undefined && longitude !== null) {
location.lng = parseFloat(longitude);
}
if (latitude !== undefined && latitude !== null) {
location.lat = parseFloat(latitude);
}
const farm = await Farm.create({
name,
type: 'farm',
location,
address,
contact: owner,
phone,
status: status || 'active'
});
```
**更新养殖场updateFarm**
```javascript
// 构建location对象 - 创建新对象以确保Sequelize检测到变化
const location = { ...(farm.location || {}) };
if (longitude !== undefined && longitude !== null) {
location.lng = parseFloat(longitude);
}
if (latitude !== undefined && latitude !== null) {
location.lat = parseFloat(latitude);
}
await farm.update({
name,
type: farm.type || 'farm',
location,
address,
contact: owner,
phone,
status: status || 'active'
});
```
### 数据库模型定义
```javascript
location: {
type: DataTypes.JSON,
allowNull: false,
defaultValue: {}
}
```
## 测试结果
### 基础功能测试
| 测试项目 | 输入值 | 期望结果 | 实际结果 | 状态 |
|---------|--------|----------|----------|------|
| 创建记录 | lng: 106.123456, lat: 38.654321 | 正确存储 | ✅ 正确存储 | 通过 |
| 更新记录 | lng: 107.987654, lat: 39.123456 | 正确更新 | ✅ 正确更新 | 通过 |
| 部分更新 | 仅更新经度 | 经度更新,纬度保持 | ✅ 符合期望 | 通过 |
| 清空坐标 | 空对象 | location为空对象 | ✅ 符合期望 | 通过 |
### 边界值测试
| 测试项目 | 输入值 | 存储值 | 精度保持 | 状态 |
|---------|--------|--------|----------|------|
| 最小边界值 | lng: -180, lat: -90 | lng: -180, lat: -90 | ✅ | 通过 |
| 最大边界值 | lng: 180, lat: 90 | lng: 180, lat: 90 | ✅ | 通过 |
| 零值 | lng: 0, lat: 0 | lng: 0, lat: 0 | ✅ | 通过 |
| 高精度值 | lng: 106.123456789, lat: 38.987654321 | lng: 106.123456789, lat: 38.987654321 | ✅ | 通过 |
### 空值处理测试
| 测试项目 | 输入值 | 处理结果 | 状态 |
|---------|--------|----------|------|
| undefined值 | longitude: undefined, latitude: undefined | location: {} | ✅ 通过 |
| null值 | longitude: null, latitude: null | location: {} | ✅ 通过 |
| 空字符串 | longitude: '', latitude: '' | location: {} | ✅ 通过 |
| 仅经度有值 | longitude: 106.123, latitude: undefined | location: {lng: 106.123} | ✅ 通过 |
| 仅纬度有值 | longitude: undefined, latitude: 38.456 | location: {lat: 38.456} | ✅ 通过 |
### API流程测试
| 操作 | 输入经纬度 | 存储结果 | 状态 |
|------|------------|----------|------|
| 创建 | lng: 106.789123, lat: 38.456789 | ✅ 正确存储 | 通过 |
| 更新 | lng: 107.111222, lat: 39.333444 | ✅ 正确更新 | 通过 |
## 发现的问题及修复
### 问题1更新操作中经纬度值未正确保存
**问题描述:**
在更新养殖场时,新的经纬度值没有被正确保存到数据库中。
**原因分析:**
原代码直接修改了原有的location对象引用
```javascript
const location = farm.location || {};
```
Sequelize可能没有检测到这个对象的变化因为它是同一个引用。
**修复方案:**
创建一个新的location对象来确保Sequelize检测到变化
```javascript
const location = { ...(farm.location || {}) };
```
**修复验证:**
- ✅ 更新操作现在能正确保存新的经纬度值
- ✅ 部分更新功能正常工作
- ✅ 不影响其他字段的更新
## 数据流验证
### 完整数据流路径
1. **前端输入** → 用户在经纬度输入框中输入数值
2. **前端验证** → 表单验证规则检查数值有效性和范围
3. **前端提交** → 通过API发送JSON数据到后端
4. **后端接收** → 控制器从req.body中提取longitude和latitude
5. **后端处理** → 使用parseFloat转换并构建location对象
6. **数据库存储** → Sequelize将location对象存储为JSON格式
7. **数据库查询** → 查询时返回完整的location对象
8. **前端显示** → 编辑时正确解析location.lng和location.lat
### 数据类型转换验证
| 阶段 | 数据类型 | 示例值 |
|------|----------|--------|
| 前端输入 | number | 106.123456 |
| API传输 | number | 106.123456 |
| 后端处理 | number (parseFloat) | 106.123456 |
| 数据库存储 | JSON | {"lng":106.123456,"lat":38.654321} |
| 数据库查询 | number | 106.123456 |
| 前端显示 | number | 106.123456 |
## 结论
### 验证结果总结
**经纬度数据传递流程完全正确**
- 前端输入框配置合理,支持高精度数值输入
- 表单验证规则完善,确保数据有效性
- 后端API正确处理经纬度数据的创建和更新
- 数据库存储格式正确支持JSON格式的location字段
- 数据类型在整个流程中保持一致
**修复的问题**
- 更新操作中的对象引用问题已解决
- 经纬度值现在能正确保存和更新
**边界情况处理**
- 空值处理正确
- 边界值验证通过
- 高精度数值保持完整
### 建议
1. **监控建议**:建议在生产环境中添加日志记录,监控经纬度数据的更新操作
2. **性能建议**:对于大量的位置更新操作,可以考虑批量更新优化
3. **扩展建议**:未来可以考虑添加地理位置验证(如检查坐标是否在合理的地理范围内)
### 最终确认
经过全面测试验证经纬度输入值能够正确传递到数据库操作层location字段的更新逻辑被正确执行查询绑定的值与数据库中的实际值完全一致。系统现在能够可靠地处理经纬度数据的存储和更新操作。

40
docs/config/task.md Normal file
View File

@@ -0,0 +1,40 @@
# 项目任务列表
本文档列出了基于项目架构的任务拆解,包括前端和后端的各项开发任务。每个任务都有优先级和状态标记,方便跟踪进度。
## 前端任务
### 高优先级
- [x] **前端用户界面组件开发**基于Vue 3的组件化开发
- [x] **集成Ant Design Vue组件库**引入并配置UI组件库
- [x] **配置Pinia状态管理**:实现应用状态管理
- [x] **设置Vue Router路由管理**:配置前端路由系统
### 中优先级
- [x] **实现百度地图API服务集成**:集成地图服务功能
- [x] **集成ECharts图表库**:实现数据可视化功能
## 后端任务
### 高优先级
- [x] **开发后端RESTful API服务**实现API接口
- [x] **实现JWT认证与授权系统**:开发用户认证功能
- [x] **配置ORM数据库访问层**:实现数据库交互
### 中优先级
- [x] **优化性能监控系统**:实现系统性能监控
## 任务状态说明
- [ ] 待处理
- [x] 已完成
- [-] 进行中
## 后续计划
- 引入微服务架构
- 进一步优化性能监控系统