# 活牛采购智能数字化系统 - 系统详细设计文档 ## 版本历史 | 版本 | 日期 | 作者 | 说明 | |------|------|------|------| | v1.0 | 2024-05-15 | 系统架构师 | 基于现有项目架构整理更新 | ## 1. 数据库详细设计 ### 1.1 核心数据表ER图 ```mermaid erDiagram USER ||--o{ ORDER : creates USER ||--o{ ORDER : manages USER ||--o{ ORDER : supplies USER ||--o{ TRANSPORT_TRACK : reports ORDER ||--o{ TRANSPORT_TRACK : has ORDER ||--o{ QUALITY_RECORD : has ORDER ||--o{ SETTLEMENT : has SUPPLIER ||--o{ ORDER : provides USER { BIGINT id PK STRING uuid STRING username STRING password_hash STRING phone STRING email STRING real_name STRING avatar_url ENUM user_type ENUM status DATE last_login_at INT login_count } ORDER { BIGINT id PK STRING orderNo BIGINT buyerId FK BIGINT supplierId FK BIGINT traderId FK STRING cattleBreed INT cattleCount DECIMAL expectedWeight DECIMAL actualWeight DECIMAL unitPrice DECIMAL totalAmount DECIMAL paidAmount DECIMAL remainingAmount ENUM status STRING deliveryAddress DATE expectedDeliveryDate DATE actualDeliveryDate STRING notes } SUPPLIER { BIGINT id PK STRING name STRING code STRING contact STRING phone STRING address STRING businessLicense STRING qualificationLevel JSON certifications JSON cattleTypes INT capacity DECIMAL rating DATE cooperationStartDate ENUM status STRING region } TRANSPORT_TRACK { BIGINT id PK BIGINT orderId FK BIGINT driverId FK DECIMAL latitude DECIMAL longitude DECIMAL speed DECIMAL direction STRING cattle_status STRING video_url DATE timestamp } QUALITY_RECORD { BIGINT id PK BIGINT orderId FK STRING inspectionCode STRING inspectorName DATE inspectionDate STRING inspectionLocation INT cattleCount INT samplingCount STRING inspectionType STRING healthStatus STRING quarantineCertificate JSON vaccineRecords JSON diseaseTests JSON weightCheck STRING qualityGrade INT qualityScore JSON issues JSON recommendations JSON photos ENUM status } SETTLEMENT { BIGINT id PK BIGINT orderId FK STRING settlementCode DECIMAL prepaymentAmount DECIMAL totalAmount DECIMAL finalAmount ENUM paymentStatus DATE paymentDate STRING invoiceNumber ENUM invoiceStatus DECIMAL taxAmount DECIMAL actualPayment STRING bankAccount STRING bankName } ``` ### 1.2 核心表结构定义 #### 1.2.1 用户表 (users) ```javascript const User = sequelize.define('User', { id: { type: DataTypes.BIGINT, primaryKey: true, autoIncrement: true }, uuid: { type: DataTypes.STRING(36), allowNull: false, unique: true, defaultValue: DataTypes.UUIDV4 }, username: { type: DataTypes.STRING(50), allowNull: false, unique: true, validate: { len: [2, 50] } }, password_hash: { type: DataTypes.STRING(255), allowNull: false }, phone: { type: DataTypes.STRING(20), allowNull: false, unique: true, validate: { is: /^1[3-9]\d{9}$/ } }, email: { type: DataTypes.STRING(100), validate: { isEmail: true } }, real_name: DataTypes.STRING(50), avatar_url: DataTypes.STRING(255), user_type: { type: DataTypes.ENUM('client', 'supplier', 'driver', 'staff', 'admin'), allowNull: false, defaultValue: 'client' }, status: { type: DataTypes.ENUM('active', 'inactive', 'locked'), defaultValue: 'active' }, last_login_at: DataTypes.DATE, login_count: { type: DataTypes.INTEGER, defaultValue: 0 } }, { tableName: 'users', timestamps: true, paranoid: true, // 软删除 indexes: [ { fields: ['phone'] }, { fields: ['user_type'] }, { fields: ['status'] }, { fields: ['username'] } ] }); ``` #### 1.2.2 订单表 (orders) ```javascript const Order = sequelize.define('Order', { id: { type: DataTypes.BIGINT, primaryKey: true, autoIncrement: true }, orderNo: { type: DataTypes.STRING(50), allowNull: false, unique: true }, buyerId: { type: DataTypes.BIGINT, allowNull: false }, buyerName: { type: DataTypes.STRING(100), allowNull: false }, supplierId: { type: DataTypes.BIGINT, allowNull: false }, supplierName: { type: DataTypes.STRING(100), allowNull: false }, traderId: DataTypes.BIGINT, traderName: DataTypes.STRING(100), cattleBreed: { type: DataTypes.STRING(50), allowNull: false }, cattleCount: { type: DataTypes.INTEGER, allowNull: false }, expectedWeight: { type: DataTypes.DECIMAL(10, 2), allowNull: false }, actualWeight: DataTypes.DECIMAL(10, 2), unitPrice: { type: DataTypes.DECIMAL(10, 2), allowNull: false }, totalAmount: { type: DataTypes.DECIMAL(15, 2), allowNull: false }, paidAmount: { type: DataTypes.DECIMAL(15, 2), defaultValue: 0 }, remainingAmount: { type: DataTypes.DECIMAL(15, 2), defaultValue: 0 }, status: { type: DataTypes.ENUM('pending', 'confirmed', 'preparing', 'shipping', 'delivered', 'accepted', 'completed', 'cancelled', 'refunded'), defaultValue: 'pending' }, deliveryAddress: { type: DataTypes.STRING(200), allowNull: false }, expectedDeliveryDate: { type: DataTypes.DATE, allowNull: false }, actualDeliveryDate: DataTypes.DATE, notes: DataTypes.TEXT }, { tableName: 'orders', timestamps: true, indexes: [ { fields: ['orderNo'] }, { fields: ['buyerId'] }, { fields: ['supplierId'] }, { fields: ['status'] }, { fields: ['createdAt'] } ] }); ``` #### 1.2.3 供应商表 (suppliers) ```javascript const Supplier = sequelize.define('Supplier', { id: { type: DataTypes.BIGINT, primaryKey: true, autoIncrement: true }, name: { type: DataTypes.STRING(100), allowNull: false }, code: { type: DataTypes.STRING(20), allowNull: false, unique: true }, contact: { type: DataTypes.STRING(50), allowNull: false }, phone: { type: DataTypes.STRING(20), allowNull: false, unique: true }, address: { type: DataTypes.STRING(200), allowNull: false }, businessLicense: DataTypes.STRING(255), qualificationLevel: { type: DataTypes.STRING(10), allowNull: false }, certifications: DataTypes.JSON, cattleTypes: DataTypes.JSON, capacity: DataTypes.INTEGER, rating: DataTypes.DECIMAL(3, 2), cooperationStartDate: DataTypes.DATE, status: { type: DataTypes.ENUM('active', 'inactive', 'suspended'), defaultValue: 'active' }, region: { type: DataTypes.STRING(20), allowNull: false } }, { tableName: 'suppliers', timestamps: true }); ``` #### 1.2.4 运输跟踪表 (transport_tracks) ```javascript const TransportTrack = sequelize.define('TransportTrack', { id: { type: DataTypes.BIGINT, primaryKey: true, autoIncrement: true }, orderId: { type: DataTypes.BIGINT, allowNull: false }, driverId: { type: DataTypes.BIGINT, allowNull: false }, latitude: DataTypes.DECIMAL(10, 8), longitude: DataTypes.DECIMAL(11, 8), speed: DataTypes.DECIMAL(5, 2), direction: DataTypes.DECIMAL(5, 2), cattle_status: DataTypes.STRING(50), video_url: DataTypes.STRING(255) }, { tableName: 'transport_tracks', timestamps: true }); ``` ## 2. API详细设计 ### 2.1 用户认证与管理API #### 2.1.1 登录接口 - **路径**: `/api/auth/login` - **方法**: POST - **请求体**: ```json { "username": "string", "password": "string" } ``` - **响应体**: ```json { "success": true, "message": "登录成功", "data": { "token": "string", "userInfo": { "id": 1, "username": "string", "real_name": "string", "user_type": "string", "avatar_url": "string" } } } ``` - **错误码**: 401(认证失败), 403(账号锁定) #### 2.1.2 获取用户列表 - **路径**: `/api/users` - **方法**: GET - **请求参数**: - page: 页码 - pageSize: 每页条数 - keyword: 搜索关键词 - userType: 用户类型 - status: 用户状态 - **响应体**: ```json { "success": true, "message": "查询成功", "data": { "list": [], "total": 0, "page": 1, "pageSize": 10 } } ``` - **权限**: admin/staff ### 2.2 订单管理API #### 2.2.1 创建订单 - **路径**: `/api/orders` - **方法**: POST - **请求体**: ```json { "buyerId": 1, "supplierId": 2, "traderId": 3, "cattleBreed": "西门塔尔", "cattleCount": 50, "expectedWeight": 25000, "unitPrice": 28.5, "deliveryAddress": "山东省济南市某养殖场", "expectedDeliveryDate": "2024-01-15", "notes": "优质西门塔尔牛" } ``` - **响应体**: ```json { "success": true, "message": "创建成功", "data": {} } ``` - **权限**: client/staff/admin #### 2.2.2 获取订单列表 - **路径**: `/api/orders` - **方法**: GET - **请求参数**: - page: 页码 - pageSize: 每页条数 - orderNo: 订单编号 - buyerId: 采购方ID - supplierId: 供应商ID - status: 订单状态 - startDate: 开始日期 - endDate: 结束日期 - **响应体**: ```json { "success": true, "message": "查询成功", "data": { "list": [], "total": 0, "page": 1, "pageSize": 10 } } ``` - **权限**: 所有登录用户(根据用户类型过滤数据) #### 2.2.3 更新订单状态 - **路径**: `/api/orders/{id}/status` - **方法**: PUT - **请求体**: ```json { "status": "confirmed", "notes": "确认订单" } ``` - **响应体**: ```json { "success": true, "message": "更新成功", "data": {} } ``` - **权限**: 根据订单状态和用户类型控制 ### 2.3 供应商管理API #### 2.3.1 创建供应商 - **路径**: `/api/suppliers` - **方法**: POST - **请求体**: ```json { "name": "山东优质牲畜合作社", "code": "SUP001", "contact": "李经理", "phone": "15888888888", "address": "山东省济南市历城区牲畜养殖基地", "qualificationLevel": "A", "cattleTypes": ["肉牛", "奶牛"], "capacity": 5000, "region": "east" } ``` - **响应体**: ```json { "success": true, "message": "创建成功", "data": {} } ``` - **权限**: staff/admin #### 2.3.2 获取供应商列表 - **路径**: `/api/suppliers` - **方法**: GET - **请求参数**: - page: 页码 - pageSize: 每页条数 - keyword: 搜索关键词 - region: 地区 - qualificationLevel: 资质等级 - status: 状态 - **响应体**: ```json { "success": true, "message": "查询成功", "data": { "list": [], "total": 0, "page": 1, "pageSize": 10 } } ``` - **权限**: staff/admin/client ### 2.4 财务管理API #### 2.4.1 创建结算单 - **路径**: `/api/finance/settlements` - **方法**: POST - **请求体**: ```json { "orderId": 1, "cattleCount": 50, "unitPrice": 25000, "paymentMethod": "bank_transfer", "settlementDate": "2024-01-20", "invoiceNumber": "INV001" } ``` - **响应体**: ```json { "success": true, "message": "创建成功", "data": {} } ``` - **权限**: staff/admin #### 2.4.2 获取结算列表 - **路径**: `/api/finance/settlements` - **方法**: GET - **请求参数**: - page: 页码 - pageSize: 每页条数 - keyword: 搜索关键词 - paymentStatus: 支付状态 - startDate: 开始日期 - endDate: 结束日期 - **响应体**: ```json { "success": true, "message": "查询成功", "data": { "list": [], "total": 0, "page": 1, "pageSize": 10 } } ``` - **权限**: staff/admin/finance ## 3. 核心业务逻辑流程 ### 3.1 订单创建与处理流程 ```mermaid sequenceDiagram participant Buyer as 采购人 participant System as 系统 participant Trader as 贸易商 participant Supplier as 供应商 participant Driver as 司机 Buyer->>System: 创建采购订单 System-->>Buyer: 返回订单号 System->>Trader: 通知订单待确认 Trader->>System: 确认/拒绝订单 System->>Supplier: 转发订单给供应商 Supplier->>System: 接单/拒单 System->>Driver: 分配运输任务 Driver->>System: 上报运输状态 System->>Buyer: 实时更新订单状态 Driver->>System: 确认送达 Buyer->>System: 验收确认 System->>System: 自动计算结算金额 System->>Buyer: 生成结算单 Buyer->>System: 支付尾款 System->>Trader: 结算款项 System->>Supplier: 结算款项 System-->>Buyer: 订单完成通知 ``` ### 3.2 牛只质量核验流程 ```mermaid flowchart TD A[开始 供应商提交牛只信息] --> B{系统检查 检疫证明} B -- 合格 --> C[上传消毒证明 和空车过磅视频] B -- 不合格 --> Z[结束 驳回申请] C --> D{驻场兽医 在线确认} D -- 确认 --> E[系统记录 核验信息] D -- 驳回 --> Z E --> F[进入装车环节] F --> G[结束 核验通过] ``` ### 3.3 运输状态跟踪流程 ```mermaid sequenceDiagram participant DriverApp as 司机APP participant System as 系统 participant Backend as 管理后台 participant BuyerApp as 采购方APP DriverApp->>System: 定时上报位置 DriverApp->>System: 上传视频状态 System->>Backend: 实时更新运输轨迹 System->>BuyerApp: 推送运输状态 Backend->>System: 查询运输详情 BuyerApp->>System: 查询运输详情 alt 异常情况 DriverApp->>System: 上报异常 System->>Backend: 推送异常警报 System->>BuyerApp: 推送异常警报 Backend->>System: 处理异常 end ``` ## 4. 前端组件设计 ### 4.1 管理后台组件结构 ``` ├── layouts/ # 布局组件 │ └── index.vue # 主布局 ├── views/ # 页面组件 │ ├── dashboard/ # 数据驾驶舱 │ ├── login/ # 登录页面 │ ├── order/ # 订单管理 │ ├── user/ # 用户管理 │ ├── supplier/ # 供应商管理 │ ├── transport/ # 运输管理 │ ├── finance/ # 财务管理 │ ├── quality/ # 质量管理 │ └── settings/ # 系统设置 ├── components/ # 公共组件 │ ├── common/ # 通用组件 │ └── business/ # 业务组件 ├── api/ # API调用 ├── stores/ # 状态管理 └── utils/ # 工具函数 ``` ### 4.2 核心组件设计 #### 4.2.1 订单管理组件 - **功能**: 订单列表展示、筛选、排序、详情查看、状态更新 - **关键属性**: - orderList: 订单数据列表 - loading: 加载状态 - searchParams: 搜索参数 - pagination: 分页信息 - **关键方法**: - fetchOrders(): 获取订单列表 - handleStatusChange(): 处理订单状态变更 - handleSearch(): 处理搜索 - handlePagination(): 处理分页 #### 4.2.2 地图跟踪组件 - **功能**: 实时展示运输轨迹、车辆位置、牛只状态 - **关键属性**: - orderId: 订单ID - trackPoints: 轨迹点数据 - currentLocation: 当前位置 - cattleStatus: 牛只状态 - **关键方法**: - initMap(): 初始化地图 - updateTrack(): 更新轨迹 - updateStatus(): 更新状态 - startTracking(): 开始跟踪 - stopTracking(): 停止跟踪 ## 5. 系统配置与部署 ### 5.1 环境配置 #### 5.1.1 开发环境配置 (.env.development) ``` NODE_ENV=development PORT=3000 DB_HOST=129.211.213.226 DB_PORT=9527 DB_NAME=jiebandata DB_USER=root DB_PASSWORD=aiotAiot123! DB_DIALECT=mysql JWT_SECRET=your_jwt_secret ``` #### 5.1.2 生产环境配置 (.env.production) ``` NODE_ENV=production PORT=80 DB_HOST=129.211.213.226 DB_PORT=9527 DB_NAME=jiebandata DB_USER=root DB_PASSWORD=aiotAiot123! DB_DIALECT=mysql JWT_SECRET=your_production_jwt_secret ``` ### 5.2 部署步骤 #### 5.2.1 后端部署 1. 安装Node.js环境 2. 克隆代码仓库 3. 安装依赖: `npm install` 4. 配置环境变量 5. 启动服务: `npm start` (推荐使用PM2管理) #### 5.2.2 前端部署 1. 安装Node.js环境 2. 克隆代码仓库 3. 安装依赖: `npm install` 4. 构建项目: `npm run build` 5. 部署静态文件到Web服务器(Nginx等) ### 5.3 监控与维护 - **日志监控**: 使用日志收集工具收集和分析系统日志 - **性能监控**: 监控系统响应时间、数据库查询性能等指标 - **安全审计**: 定期检查系统安全漏洞,更新依赖包 - **数据备份**: 定期备份数据库,确保数据安全 ## 6. 测试策略 ### 6.1 单元测试 - 使用Jest框架进行后端API单元测试 - 重点测试业务逻辑和数据验证部分 - 覆盖率目标: ≥80% ### 6.2 集成测试 - 测试API接口之间的交互 - 测试前后端集成 - 测试数据库事务处理 ### 6.3 端到端测试 - 使用Cypress或Puppeteer进行UI自动化测试 - 模拟用户真实操作流程 - 重点测试核心业务流程 ### 6.4 性能测试 - 使用压测工具测试系统并发处理能力 - 测试大数据量下的系统响应性能 - 确保满足性能要求: 响应时间<2秒,支持100+并发用户 ## 7. 文档与培训 ### 7.1 开发文档 - 代码注释规范 - API文档(Swagger) - 数据库设计文档 ### 7.2 用户文档 - 操作手册 - 常见问题解答 - 视频教程 ### 7.3 培训计划 - 管理员培训 - 操作人员培训 - 技术支持人员培训 ## 8. 扩展性与未来规划 ### 8.1 系统扩展性设计 - 模块化设计,便于功能扩展 - API标准化,便于集成第三方系统 - 数据库分库分表策略预留 - 微服务架构转型路径 ### 8.2 未来功能规划 - 数据分析与报表功能增强 - AI辅助决策系统 - 区块链追溯系统集成 - 物联网设备接入 - 国际业务支持与多语言功能