feat: 初始化多个小程序和前端项目
- 新建多个小程序的 app.js、app.json 和 app.wxss 文件 - 新建多个前端项目的 App.vue 文件 - 添加 .gitignore 文件和后端 API 的 .env.example 文件
This commit is contained in:
25
backend/api/.env.example
Normal file
25
backend/api/.env.example
Normal file
@@ -0,0 +1,25 @@
|
||||
# 服务器配置
|
||||
PORT=8000
|
||||
|
||||
# 数据库配置
|
||||
DB_HOST=localhost
|
||||
DB_USER=root
|
||||
DB_PASSWORD=password
|
||||
DB_NAME=xlxumu
|
||||
DB_PORT=3306
|
||||
|
||||
# JWT配置
|
||||
JWT_SECRET=your_jwt_secret_key_here
|
||||
JWT_EXPIRES_IN=24h
|
||||
|
||||
# 腾讯云存储配置
|
||||
TENCENT_CLOUD_SECRET_ID=your_secret_id
|
||||
TENCENT_CLOUD_SECRET_KEY=your_secret_key
|
||||
TENCENT_CLOUD_BUCKET=your_bucket_name
|
||||
TENCENT_CLOUD_REGION=your_region
|
||||
|
||||
# 日志配置
|
||||
LOG_LEVEL=info
|
||||
|
||||
# 其他配置
|
||||
NODE_ENV=development
|
||||
30
backend/api/package.json
Normal file
30
backend/api/package.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"name": "xlxumu-api",
|
||||
"version": "1.0.0",
|
||||
"description": "锡林郭勒盟安格斯牛数字化管理平台API服务",
|
||||
"author": "xlxumu team",
|
||||
"main": "server.js",
|
||||
"scripts": {
|
||||
"start": "node server.js",
|
||||
"dev": "nodemon server.js",
|
||||
"test": "jest"
|
||||
},
|
||||
"dependencies": {
|
||||
"express": "^4.18.0",
|
||||
"cors": "^2.8.5",
|
||||
"helmet": "^6.0.0",
|
||||
"dotenv": "^16.0.0",
|
||||
"jsonwebtoken": "^9.0.0",
|
||||
"bcryptjs": "^2.4.3",
|
||||
"mysql2": "^3.0.0",
|
||||
"sequelize": "^6.0.0",
|
||||
"joi": "^17.0.0",
|
||||
"winston": "^3.8.0",
|
||||
"express-rate-limit": "^6.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"nodemon": "^2.0.0",
|
||||
"jest": "^29.0.0",
|
||||
"supertest": "^6.3.0"
|
||||
}
|
||||
}
|
||||
48
backend/api/server.js
Normal file
48
backend/api/server.js
Normal file
@@ -0,0 +1,48 @@
|
||||
const express = require('express');
|
||||
const cors = require('cors');
|
||||
const helmet = require('helmet');
|
||||
const dotenv = require('dotenv');
|
||||
const rateLimit = require('express-rate-limit');
|
||||
|
||||
// 加载环境变量
|
||||
dotenv.config();
|
||||
|
||||
// 创建Express应用
|
||||
const app = express();
|
||||
const PORT = process.env.PORT || 8000;
|
||||
|
||||
// 中间件
|
||||
app.use(helmet()); // 安全头部
|
||||
app.use(cors()); // 跨域支持
|
||||
app.use(express.json({ limit: '10mb' })); // JSON解析
|
||||
app.use(express.urlencoded({ extended: true, limit: '10mb' })); // URL编码解析
|
||||
|
||||
// 速率限制
|
||||
const limiter = rateLimit({
|
||||
windowMs: 15 * 60 * 1000, // 15分钟
|
||||
max: 100, // 限制每个IP 15分钟内最多100个请求
|
||||
message: '请求过于频繁,请稍后再试'
|
||||
});
|
||||
app.use(limiter);
|
||||
|
||||
// 基础路由
|
||||
app.get('/', (req, res) => {
|
||||
res.json({
|
||||
message: '欢迎使用锡林郭勒盟安格斯牛数字化管理平台API服务',
|
||||
version: '1.0.0'
|
||||
});
|
||||
});
|
||||
|
||||
app.get('/health', (req, res) => {
|
||||
res.json({
|
||||
status: 'OK',
|
||||
timestamp: new Date().toISOString()
|
||||
});
|
||||
});
|
||||
|
||||
// 启动服务器
|
||||
app.listen(PORT, () => {
|
||||
console.log(`API服务器正在端口 ${PORT} 上运行`);
|
||||
});
|
||||
|
||||
module.exports = app;
|
||||
900
backend/database/DESIGN.md
Normal file
900
backend/database/DESIGN.md
Normal file
@@ -0,0 +1,900 @@
|
||||
# 数据库详细设计
|
||||
|
||||
## 概述
|
||||
|
||||
本项目使用MySQL作为主要的关系型数据库,存储用户信息、牛只档案、交易记录、监管数据等核心业务数据。
|
||||
|
||||
## 数据库设计规范
|
||||
|
||||
1. 使用InnoDB存储引擎
|
||||
2. 字符集使用utf8mb4
|
||||
3. 所有表都有创建时间和更新时间字段
|
||||
4. 主键使用自增ID
|
||||
5. 外键约束用于保证数据一致性
|
||||
6. 表名使用复数形式,以下划线分隔单词
|
||||
7. 字段名使用下划线分隔单词
|
||||
8. 所有表都包含`created_at`和`updated_at`时间戳字段
|
||||
|
||||
## 核心数据表设计
|
||||
|
||||
### 1. 用户表 (users)
|
||||
存储系统用户信息,包括牧民、银行职员、保险员、政府监管人员等。
|
||||
|
||||
```sql
|
||||
CREATE TABLE users (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',
|
||||
username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
|
||||
email VARCHAR(100) UNIQUE COMMENT '邮箱',
|
||||
phone VARCHAR(20) UNIQUE COMMENT '手机号',
|
||||
password_hash VARCHAR(255) NOT NULL COMMENT '密码哈希值',
|
||||
real_name VARCHAR(50) COMMENT '真实姓名',
|
||||
avatar_url VARCHAR(255) COMMENT '头像URL',
|
||||
user_type ENUM('farmer', 'banker', 'insurer', 'government', 'trader', 'admin') NOT NULL COMMENT '用户类型',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态: 1-正常, 0-禁用',
|
||||
last_login TIMESTAMP NULL COMMENT '最后登录时间',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
INDEX idx_username (username),
|
||||
INDEX idx_email (email),
|
||||
INDEX idx_phone (phone),
|
||||
INDEX idx_user_type (user_type)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
|
||||
```
|
||||
|
||||
### 2. 角色表 (roles)
|
||||
存储系统角色信息,如管理员、牧民、银行职员等。
|
||||
|
||||
```sql
|
||||
CREATE TABLE roles (
|
||||
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '角色ID',
|
||||
name VARCHAR(50) NOT NULL UNIQUE COMMENT '角色名称',
|
||||
description TEXT COMMENT '角色描述',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
|
||||
```
|
||||
|
||||
### 3. 用户角色关联表 (user_roles)
|
||||
存储用户和角色的多对多关系。
|
||||
|
||||
```sql
|
||||
CREATE TABLE user_roles (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
user_id BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
|
||||
role_id INT UNSIGNED NOT NULL COMMENT '角色ID',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE,
|
||||
UNIQUE KEY uk_user_role (user_id, role_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';
|
||||
```
|
||||
|
||||
### 4. 权限表 (permissions)
|
||||
存储系统权限信息。
|
||||
|
||||
```sql
|
||||
CREATE TABLE permissions (
|
||||
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '权限ID',
|
||||
name VARCHAR(100) NOT NULL UNIQUE COMMENT '权限名称',
|
||||
description TEXT COMMENT '权限描述',
|
||||
module VARCHAR(50) COMMENT '所属模块',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限表';
|
||||
```
|
||||
|
||||
### 5. 角色权限关联表 (role_permissions)
|
||||
存储角色和权限的多对多关系。
|
||||
|
||||
```sql
|
||||
CREATE TABLE role_permissions (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
role_id INT UNSIGNED NOT NULL COMMENT '角色ID',
|
||||
permission_id INT UNSIGNED NOT NULL COMMENT '权限ID',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
|
||||
FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE,
|
||||
UNIQUE KEY uk_role_permission (role_id, permission_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色权限关联表';
|
||||
```
|
||||
|
||||
### 6. 牛只档案表 (cattle)
|
||||
存储牛只基本信息,包括品种、年龄、健康状况等。
|
||||
|
||||
```sql
|
||||
CREATE TABLE cattle (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '牛只ID',
|
||||
ear_tag VARCHAR(50) NOT NULL UNIQUE COMMENT '耳标号',
|
||||
name VARCHAR(50) COMMENT '名称',
|
||||
breed VARCHAR(50) COMMENT '品种',
|
||||
gender ENUM('male', 'female') COMMENT '性别',
|
||||
birth_date DATE COMMENT '出生日期',
|
||||
color VARCHAR(30) COMMENT '毛色',
|
||||
weight DECIMAL(5,2) COMMENT '体重(kg)',
|
||||
health_status ENUM('healthy', 'sick', 'quarantine', 'dead') DEFAULT 'healthy' COMMENT '健康状况',
|
||||
owner_id BIGINT UNSIGNED COMMENT '所有者ID(牧民)',
|
||||
farm_location VARCHAR(255) COMMENT '牧场位置',
|
||||
status ENUM('active', 'sold', 'dead', 'quarantine') DEFAULT 'active' COMMENT '状态',
|
||||
image_url VARCHAR(255) COMMENT '图片URL',
|
||||
qr_code_url VARCHAR(255) COMMENT '二维码URL',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE SET NULL,
|
||||
INDEX idx_ear_tag (ear_tag),
|
||||
INDEX idx_owner (owner_id),
|
||||
INDEX idx_breed (breed),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='牛只档案表';
|
||||
```
|
||||
|
||||
### 7. 饲养记录表 (feeding_records)
|
||||
存储牛只饲养记录,包括饲料、疫苗、治疗等信息。
|
||||
|
||||
```sql
|
||||
CREATE TABLE feeding_records (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '记录ID',
|
||||
cattle_id BIGINT UNSIGNED NOT NULL COMMENT '牛只ID',
|
||||
record_type ENUM('feed', 'vaccine', 'treatment', 'checkup') NOT NULL COMMENT '记录类型: 饲料, 疫苗, 治疗, 检查',
|
||||
feed_type VARCHAR(100) COMMENT '饲料类型',
|
||||
feed_amount DECIMAL(6,2) COMMENT '饲料量(kg)',
|
||||
vaccine_name VARCHAR(100) COMMENT '疫苗名称',
|
||||
treatment_desc TEXT COMMENT '治疗描述',
|
||||
medicine_name VARCHAR(100) COMMENT '药品名称',
|
||||
dosage VARCHAR(100) COMMENT '用量',
|
||||
veterinarian VARCHAR(50) COMMENT '兽医',
|
||||
cost DECIMAL(10,2) COMMENT '费用',
|
||||
record_date DATE NOT NULL COMMENT '记录日期',
|
||||
notes TEXT COMMENT '备注',
|
||||
operator_id BIGINT UNSIGNED COMMENT '操作员ID',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (cattle_id) REFERENCES cattle(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (operator_id) REFERENCES users(id) ON DELETE SET NULL,
|
||||
INDEX idx_cattle_date (cattle_id, record_date),
|
||||
INDEX idx_record_type (record_type)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='饲养记录表';
|
||||
```
|
||||
|
||||
### 8. 繁殖记录表 (breeding_records)
|
||||
存储牛只繁殖相关信息。
|
||||
|
||||
```sql
|
||||
CREATE TABLE breeding_records (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '记录ID',
|
||||
cattle_id BIGINT UNSIGNED NOT NULL COMMENT '母牛ID',
|
||||
breeding_method ENUM('natural', 'artificial') NOT NULL COMMENT '配种方式',
|
||||
breeding_date DATE NOT NULL COMMENT '配种日期',
|
||||
breeding_male_id BIGINT UNSIGNED COMMENT '公牛ID',
|
||||
semen_code VARCHAR(50) COMMENT '冻精编号',
|
||||
expected_delivery_date DATE COMMENT '预产期',
|
||||
actual_delivery_date DATE COMMENT '实际产犊日期',
|
||||
calf_count TINYINT DEFAULT 1 COMMENT '产犊数',
|
||||
calf_ids JSON COMMENT '犊牛IDs',
|
||||
breeding_result ENUM('success', 'failed', 'pending') DEFAULT 'pending' COMMENT '配种结果',
|
||||
notes TEXT COMMENT '备注',
|
||||
operator_id BIGINT UNSIGNED COMMENT '操作员ID',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (cattle_id) REFERENCES cattle(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (breeding_male_id) REFERENCES cattle(id) ON DELETE SET NULL,
|
||||
FOREIGN KEY (operator_id) REFERENCES users(id) ON DELETE SET NULL,
|
||||
INDEX idx_cattle_date (cattle_id, breeding_date),
|
||||
INDEX idx_result (breeding_result)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='繁殖记录表';
|
||||
```
|
||||
|
||||
### 9. 环境监测表 (environment_monitoring)
|
||||
存储牧场环境监测数据。
|
||||
|
||||
```sql
|
||||
CREATE TABLE environment_monitoring (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '记录ID',
|
||||
location VARCHAR(255) NOT NULL COMMENT '监测位置',
|
||||
temperature DECIMAL(5,2) COMMENT '温度(℃)',
|
||||
humidity DECIMAL(5,2) COMMENT '湿度(%)',
|
||||
air_quality VARCHAR(50) COMMENT '空气质量',
|
||||
ammonia_concentration DECIMAL(6,3) COMMENT '氨气浓度(ppm)',
|
||||
carbon_dioxide DECIMAL(6,2) COMMENT '二氧化碳浓度(ppm)',
|
||||
noise_level DECIMAL(5,2) COMMENT '噪音(dB)',
|
||||
light_intensity DECIMAL(7,2) COMMENT '光照强度(lux)',
|
||||
monitoring_date DATETIME NOT NULL COMMENT '监测时间',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
INDEX idx_location_date (location, monitoring_date)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='环境监测表';
|
||||
```
|
||||
|
||||
### 10. 交易记录表 (transactions)
|
||||
存储活牛交易记录。
|
||||
|
||||
```sql
|
||||
CREATE TABLE transactions (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '交易ID',
|
||||
cattle_id BIGINT UNSIGNED NOT NULL COMMENT '牛只ID',
|
||||
seller_id BIGINT UNSIGNED NOT NULL COMMENT '卖方ID',
|
||||
buyer_id BIGINT UNSIGNED NOT NULL COMMENT '买方ID',
|
||||
transaction_type ENUM('direct', 'auction', 'platform') NOT NULL COMMENT '交易类型',
|
||||
price DECIMAL(12,2) NOT NULL COMMENT '交易价格',
|
||||
currency VARCHAR(10) DEFAULT 'CNY' COMMENT '货币',
|
||||
transaction_date DATETIME NOT NULL COMMENT '交易时间',
|
||||
contract_id BIGINT UNSIGNED COMMENT '合同ID',
|
||||
status ENUM('pending', 'completed', 'cancelled') DEFAULT 'pending' COMMENT '状态',
|
||||
payment_status ENUM('unpaid', 'partial', 'paid') DEFAULT 'unpaid' COMMENT '付款状态',
|
||||
delivery_status ENUM('pending', 'in_transit', 'delivered') DEFAULT 'pending' COMMENT '交付状态',
|
||||
notes TEXT COMMENT '备注',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (cattle_id) REFERENCES cattle(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (seller_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (buyer_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (contract_id) REFERENCES contracts(id) ON DELETE SET NULL,
|
||||
INDEX idx_cattle_date (cattle_id, transaction_date),
|
||||
INDEX idx_seller (seller_id),
|
||||
INDEX idx_buyer (buyer_id),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易记录表';
|
||||
```
|
||||
|
||||
### 11. 合同表 (contracts)
|
||||
存储交易合同信息。
|
||||
|
||||
```sql
|
||||
CREATE TABLE contracts (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '合同ID',
|
||||
contract_number VARCHAR(50) NOT NULL UNIQUE COMMENT '合同编号',
|
||||
seller_id BIGINT UNSIGNED NOT NULL COMMENT '卖方ID',
|
||||
buyer_id BIGINT UNSIGNED NOT NULL COMMENT '买方ID',
|
||||
cattle_details JSON COMMENT '牛只详情',
|
||||
total_price DECIMAL(15,2) NOT NULL COMMENT '总价',
|
||||
currency VARCHAR(10) DEFAULT 'CNY' COMMENT '货币',
|
||||
contract_date DATE NOT NULL COMMENT '合同日期',
|
||||
effective_date DATE COMMENT '生效日期',
|
||||
expiry_date DATE COMMENT '到期日期',
|
||||
payment_terms TEXT COMMENT '付款条款',
|
||||
delivery_terms TEXT COMMENT '交付条款',
|
||||
contract_status ENUM('draft', 'signed', 'active', 'completed', 'cancelled') DEFAULT 'draft' COMMENT '合同状态',
|
||||
contract_file_url VARCHAR(255) COMMENT '合同文件URL',
|
||||
notes TEXT COMMENT '备注',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (seller_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (buyer_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_contract_number (contract_number),
|
||||
INDEX idx_seller (seller_id),
|
||||
INDEX idx_buyer (buyer_id),
|
||||
INDEX idx_status (contract_status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='合同表';
|
||||
```
|
||||
|
||||
### 12. 商品表 (products)
|
||||
存储牛肉商城商品信息。
|
||||
|
||||
```sql
|
||||
CREATE TABLE products (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '商品ID',
|
||||
name VARCHAR(100) NOT NULL COMMENT '商品名称',
|
||||
description TEXT COMMENT '商品描述',
|
||||
category_id INT UNSIGNED COMMENT '分类ID',
|
||||
sku VARCHAR(50) UNIQUE COMMENT 'SKU',
|
||||
price DECIMAL(10,2) NOT NULL COMMENT '价格',
|
||||
original_price DECIMAL(10,2) COMMENT '原价',
|
||||
currency VARCHAR(10) DEFAULT 'CNY' COMMENT '货币',
|
||||
stock_quantity INT DEFAULT 0 COMMENT '库存数量',
|
||||
min_stock INT DEFAULT 0 COMMENT '最低库存',
|
||||
unit VARCHAR(20) COMMENT '单位',
|
||||
weight DECIMAL(8,3) COMMENT '重量(kg)',
|
||||
origin VARCHAR(100) COMMENT '产地',
|
||||
production_date DATE COMMENT '生产日期',
|
||||
expiration_date DATE COMMENT '保质期',
|
||||
cattle_id BIGINT UNSIGNED COMMENT '关联牛只ID',
|
||||
status ENUM('active', 'inactive', 'discontinued') DEFAULT 'active' COMMENT '状态',
|
||||
image_urls JSON COMMENT '图片URL列表',
|
||||
tags JSON COMMENT '标签',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (cattle_id) REFERENCES cattle(id) ON DELETE SET NULL,
|
||||
INDEX idx_name (name),
|
||||
INDEX idx_category (category_id),
|
||||
INDEX idx_sku (sku),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
|
||||
```
|
||||
|
||||
### 13. 商品分类表 (product_categories)
|
||||
存储商品分类信息。
|
||||
|
||||
```sql
|
||||
CREATE TABLE product_categories (
|
||||
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '分类ID',
|
||||
name VARCHAR(50) NOT NULL COMMENT '分类名称',
|
||||
parent_id INT UNSIGNED DEFAULT 0 COMMENT '父分类ID',
|
||||
level TINYINT DEFAULT 1 COMMENT '层级',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序',
|
||||
image_url VARCHAR(255) COMMENT '图片URL',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态: 1-正常, 0-禁用',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
INDEX idx_parent (parent_id),
|
||||
INDEX idx_level (level)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品分类表';
|
||||
```
|
||||
|
||||
### 14. 订单表 (orders)
|
||||
存储用户订单信息。
|
||||
|
||||
```sql
|
||||
CREATE TABLE orders (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '订单ID',
|
||||
order_number VARCHAR(50) NOT NULL UNIQUE COMMENT '订单编号',
|
||||
user_id BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
|
||||
total_amount DECIMAL(12,2) NOT NULL COMMENT '订单总额',
|
||||
currency VARCHAR(10) DEFAULT 'CNY' COMMENT '货币',
|
||||
order_status ENUM('pending', 'confirmed', 'processing', 'shipped', 'delivered', 'cancelled', 'refunded') DEFAULT 'pending' COMMENT '订单状态',
|
||||
payment_status ENUM('unpaid', 'partial', 'paid') DEFAULT 'unpaid' COMMENT '付款状态',
|
||||
shipping_status ENUM('unshipped', 'shipped', 'delivered') DEFAULT 'unshipped' COMMENT '发货状态',
|
||||
receiver_name VARCHAR(50) COMMENT '收货人姓名',
|
||||
receiver_phone VARCHAR(20) COMMENT '收货人电话',
|
||||
receiver_address TEXT COMMENT '收货地址',
|
||||
shipping_method VARCHAR(50) COMMENT '配送方式',
|
||||
shipping_fee DECIMAL(10,2) DEFAULT 0.00 COMMENT '运费',
|
||||
notes TEXT COMMENT '备注',
|
||||
payment_method VARCHAR(50) COMMENT '付款方式',
|
||||
paid_at TIMESTAMP NULL COMMENT '付款时间',
|
||||
shipped_at TIMESTAMP NULL COMMENT '发货时间',
|
||||
delivered_at TIMESTAMP NULL COMMENT '送达时间',
|
||||
cancelled_at TIMESTAMP NULL COMMENT '取消时间',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_order_number (order_number),
|
||||
INDEX idx_user (user_id),
|
||||
INDEX idx_status (order_status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';
|
||||
```
|
||||
|
||||
### 15. 订单项表 (order_items)
|
||||
存储订单详情信息。
|
||||
|
||||
```sql
|
||||
CREATE TABLE order_items (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '订单项ID',
|
||||
order_id BIGINT UNSIGNED NOT NULL COMMENT '订单ID',
|
||||
product_id BIGINT UNSIGNED NOT NULL COMMENT '商品ID',
|
||||
quantity INT NOT NULL COMMENT '数量',
|
||||
unit_price DECIMAL(10,2) NOT NULL COMMENT '单价',
|
||||
total_price DECIMAL(12,2) NOT NULL COMMENT '总价',
|
||||
cattle_id BIGINT UNSIGNED COMMENT '关联牛只ID',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (cattle_id) REFERENCES cattle(id) ON DELETE SET NULL,
|
||||
INDEX idx_order (order_id),
|
||||
INDEX idx_product (product_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单项表';
|
||||
```
|
||||
|
||||
### 16. 物流跟踪表 (logistics_tracking)
|
||||
存储物流跟踪信息。
|
||||
|
||||
```sql
|
||||
CREATE TABLE logistics_tracking (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '物流ID',
|
||||
order_id BIGINT UNSIGNED NOT NULL COMMENT '订单ID',
|
||||
tracking_number VARCHAR(100) UNIQUE COMMENT '物流单号',
|
||||
carrier VARCHAR(50) COMMENT '承运商',
|
||||
status ENUM('pending', 'in_transit', 'delivered', 'exception') DEFAULT 'pending' COMMENT '物流状态',
|
||||
origin VARCHAR(255) COMMENT '起始地',
|
||||
destination VARCHAR(255) COMMENT '目的地',
|
||||
estimated_delivery_date DATE COMMENT '预计送达日期',
|
||||
actual_delivery_date DATE COMMENT '实际送达日期',
|
||||
current_location VARCHAR(255) COMMENT '当前位置',
|
||||
tracking_info JSON COMMENT '物流跟踪信息',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE,
|
||||
INDEX idx_tracking_number (tracking_number),
|
||||
INDEX idx_order (order_id),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物流跟踪表';
|
||||
```
|
||||
|
||||
### 17. 贷款申请表 (loan_applications)
|
||||
存储银行贷款申请信息。
|
||||
|
||||
```sql
|
||||
CREATE TABLE loan_applications (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '贷款申请ID',
|
||||
applicant_id BIGINT UNSIGNED NOT NULL COMMENT '申请人ID',
|
||||
loan_type ENUM('cattle', 'farm', 'equipment', 'operating') NOT NULL COMMENT '贷款类型',
|
||||
cattle_ids JSON COMMENT '质押牛只IDs',
|
||||
loan_amount DECIMAL(15,2) NOT NULL COMMENT '贷款金额',
|
||||
currency VARCHAR(10) DEFAULT 'CNY' COMMENT '货币',
|
||||
interest_rate DECIMAL(5,4) COMMENT '利率',
|
||||
term_months INT COMMENT '期限(月)',
|
||||
purpose TEXT COMMENT '用途',
|
||||
repayment_method ENUM('equal_principal', 'equal_payment', 'bullet') COMMENT '还款方式',
|
||||
guarantee_type ENUM('cattle_pledge', 'guarantor', 'insurance', 'credit') COMMENT '担保方式',
|
||||
status ENUM('submitted', 'under_review', 'approved', 'rejected', 'disbursed', 'completed', 'overdue') DEFAULT 'submitted' COMMENT '状态',
|
||||
reviewer_id BIGINT UNSIGNED COMMENT '审核人ID',
|
||||
review_notes TEXT COMMENT '审核备注',
|
||||
approved_amount DECIMAL(15,2) COMMENT '批准金额',
|
||||
approved_date TIMESTAMP NULL COMMENT '批准日期',
|
||||
disbursement_date TIMESTAMP NULL COMMENT '放款日期',
|
||||
repayment_schedule JSON COMMENT '还款计划',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (applicant_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (reviewer_id) REFERENCES users(id) ON DELETE SET NULL,
|
||||
INDEX idx_applicant (applicant_id),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_type (loan_type)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='贷款申请表';
|
||||
```
|
||||
|
||||
### 18. 保险申请表 (insurance_applications)
|
||||
存储保险申请信息。
|
||||
|
||||
```sql
|
||||
CREATE TABLE insurance_applications (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '保险申请ID',
|
||||
applicant_id BIGINT UNSIGNED NOT NULL COMMENT '申请人ID',
|
||||
insurance_type ENUM('cattle_death', 'cattle_health', 'cattle_theft', 'property') NOT NULL COMMENT '保险类型',
|
||||
cattle_ids JSON COMMENT '保险牛只IDs',
|
||||
policy_number VARCHAR(50) UNIQUE COMMENT '保单号',
|
||||
insured_amount DECIMAL(15,2) COMMENT '保险金额',
|
||||
premium DECIMAL(12,2) COMMENT '保费',
|
||||
currency VARCHAR(10) DEFAULT 'CNY' COMMENT '货币',
|
||||
start_date DATE COMMENT '起保日期',
|
||||
end_date DATE COMMENT '终保日期',
|
||||
status ENUM('applied', 'underwriting', 'issued', 'active', 'expired', 'cancelled', 'claiming', 'settled') DEFAULT 'applied' COMMENT '状态',
|
||||
underwriter_id BIGINT UNSIGNED COMMENT '核保人ID',
|
||||
underwriting_notes TEXT COMMENT '核保备注',
|
||||
policy_file_url VARCHAR(255) COMMENT '保单文件URL',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (applicant_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (underwriter_id) REFERENCES users(id) ON DELETE SET NULL,
|
||||
INDEX idx_applicant (applicant_id),
|
||||
INDEX idx_policy_number (policy_number),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='保险申请表';
|
||||
```
|
||||
|
||||
### 19. 理赔申请表 (claims)
|
||||
存储保险理赔信息。
|
||||
|
||||
```sql
|
||||
CREATE TABLE claims (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '理赔申请ID',
|
||||
insurance_id BIGINT UNSIGNED NOT NULL COMMENT '保险ID',
|
||||
applicant_id BIGINT UNSIGNED NOT NULL COMMENT '申请人ID',
|
||||
claim_amount DECIMAL(12,2) NOT NULL COMMENT '理赔金额',
|
||||
currency VARCHAR(10) DEFAULT 'CNY' COMMENT '货币',
|
||||
incident_date DATE NOT NULL COMMENT '事故日期',
|
||||
incident_type ENUM('death', 'illness', 'accident', 'theft') NOT NULL COMMENT '事故类型',
|
||||
description TEXT COMMENT '事故描述',
|
||||
evidence_files JSON COMMENT '证据文件URL列表',
|
||||
status ENUM('submitted', 'under_review', 'approved', 'rejected', 'paid') DEFAULT 'submitted' COMMENT '状态',
|
||||
reviewer_id BIGINT UNSIGNED COMMENT '审核人ID',
|
||||
review_notes TEXT COMMENT '审核备注',
|
||||
approved_amount DECIMAL(12,2) COMMENT '批准金额',
|
||||
paid_amount DECIMAL(12,2) COMMENT '赔付金额',
|
||||
submitted_at TIMESTAMP NULL COMMENT '提交时间',
|
||||
reviewed_at TIMESTAMP NULL COMMENT '审核时间',
|
||||
approved_at TIMESTAMP NULL COMMENT '批准时间',
|
||||
paid_at TIMESTAMP NULL COMMENT '赔付时间',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (insurance_id) REFERENCES insurance_applications(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (applicant_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (reviewer_id) REFERENCES users(id) ON DELETE SET NULL,
|
||||
INDEX idx_insurance (insurance_id),
|
||||
INDEX idx_applicant (applicant_id),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='理赔申请表';
|
||||
```
|
||||
|
||||
### 20. 政府监管报告表 (government_reports)
|
||||
存储政府监管报告信息。
|
||||
|
||||
```sql
|
||||
CREATE TABLE government_reports (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '报告ID',
|
||||
report_type ENUM('production', 'sales', 'disease', 'environment', 'finance') NOT NULL COMMENT '报告类型',
|
||||
reporter_id BIGINT UNSIGNED NOT NULL COMMENT '报告人ID',
|
||||
reporting_period_start DATE NOT NULL COMMENT '报告期开始日期',
|
||||
reporting_period_end DATE NOT NULL COMMENT '报告期结束日期',
|
||||
data_content JSON COMMENT '报告数据内容',
|
||||
summary TEXT COMMENT '摘要',
|
||||
status ENUM('draft', 'submitted', 'approved', 'rejected') DEFAULT 'draft' COMMENT '状态',
|
||||
approver_id BIGINT UNSIGNED COMMENT '审批人ID',
|
||||
approval_notes TEXT COMMENT '审批备注',
|
||||
submitted_at TIMESTAMP NULL COMMENT '提交时间',
|
||||
approved_at TIMESTAMP NULL COMMENT '审批时间',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (reporter_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (approver_id) REFERENCES users(id) ON DELETE SET NULL,
|
||||
INDEX idx_reporter (reporter_id),
|
||||
INDEX idx_type (report_type),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='政府监管报告表';
|
||||
```
|
||||
|
||||
## 数据库关系图
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
users ||--o{ user_roles : has
|
||||
roles ||--o{ user_roles : includes
|
||||
roles ||--o{ role_permissions : has
|
||||
permissions ||--o{ role_permissions : includes
|
||||
users ||--o{ cattle : owns
|
||||
cattle ||--o{ feeding_records : has
|
||||
cattle ||--o{ breeding_records : has
|
||||
cattle ||--o{ transactions : involved_in
|
||||
users ||--o{ transactions : involved_in
|
||||
contracts ||--o{ transactions : related_to
|
||||
cattle ||--o{ products : related_to
|
||||
product_categories ||--o{ products : belongs_to
|
||||
users ||--o{ orders : places
|
||||
orders ||--o{ order_items : contains
|
||||
products ||--o{ order_items : contains
|
||||
cattle ||--o{ order_items : related_to
|
||||
orders ||--o{ logistics_tracking : has
|
||||
users ||--o{ loan_applications : applies
|
||||
users ||--o{ loan_applications : reviews
|
||||
cattle ||--o{ loan_applications : pledged
|
||||
users ||--o{ insurance_applications : applies
|
||||
users ||--o{ insurance_applications : underwrites
|
||||
cattle ||--o{ insurance_applications : insured
|
||||
insurance_applications ||--o{ claims : has
|
||||
users ||--o{ claims : applies
|
||||
users ||--o{ claims : reviews
|
||||
users ||--o{ government_reports : submits
|
||||
users ||--o{ government_reports : approves
|
||||
|
||||
users {
|
||||
BIGINT id PK
|
||||
VARCHAR username
|
||||
VARCHAR email
|
||||
VARCHAR phone
|
||||
VARCHAR password_hash
|
||||
VARCHAR real_name
|
||||
VARCHAR avatar_url
|
||||
ENUM user_type
|
||||
TINYINT status
|
||||
TIMESTAMP last_login
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
roles {
|
||||
INT id PK
|
||||
VARCHAR name
|
||||
TEXT description
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
user_roles {
|
||||
BIGINT id PK
|
||||
BIGINT user_id FK
|
||||
INT role_id FK
|
||||
TIMESTAMP created_at
|
||||
}
|
||||
|
||||
permissions {
|
||||
INT id PK
|
||||
VARCHAR name
|
||||
TEXT description
|
||||
VARCHAR module
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
role_permissions {
|
||||
BIGINT id PK
|
||||
INT role_id FK
|
||||
INT permission_id FK
|
||||
TIMESTAMP created_at
|
||||
}
|
||||
|
||||
cattle {
|
||||
BIGINT id PK
|
||||
VARCHAR ear_tag
|
||||
VARCHAR name
|
||||
VARCHAR breed
|
||||
ENUM gender
|
||||
DATE birth_date
|
||||
VARCHAR color
|
||||
DECIMAL weight
|
||||
ENUM health_status
|
||||
BIGINT owner_id FK
|
||||
VARCHAR farm_location
|
||||
ENUM status
|
||||
VARCHAR image_url
|
||||
VARCHAR qr_code_url
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
feeding_records {
|
||||
BIGINT id PK
|
||||
BIGINT cattle_id FK
|
||||
ENUM record_type
|
||||
VARCHAR feed_type
|
||||
DECIMAL feed_amount
|
||||
VARCHAR vaccine_name
|
||||
TEXT treatment_desc
|
||||
VARCHAR medicine_name
|
||||
VARCHAR dosage
|
||||
VARCHAR veterinarian
|
||||
DECIMAL cost
|
||||
DATE record_date
|
||||
TEXT notes
|
||||
BIGINT operator_id FK
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
breeding_records {
|
||||
BIGINT id PK
|
||||
BIGINT cattle_id FK
|
||||
ENUM breeding_method
|
||||
DATE breeding_date
|
||||
BIGINT breeding_male_id FK
|
||||
VARCHAR semen_code
|
||||
DATE expected_delivery_date
|
||||
DATE actual_delivery_date
|
||||
TINYINT calf_count
|
||||
JSON calf_ids
|
||||
ENUM breeding_result
|
||||
TEXT notes
|
||||
BIGINT operator_id FK
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
environment_monitoring {
|
||||
BIGINT id PK
|
||||
VARCHAR location
|
||||
DECIMAL temperature
|
||||
DECIMAL humidity
|
||||
VARCHAR air_quality
|
||||
DECIMAL ammonia_concentration
|
||||
DECIMAL carbon_dioxide
|
||||
DECIMAL noise_level
|
||||
DECIMAL light_intensity
|
||||
DATETIME monitoring_date
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
transactions {
|
||||
BIGINT id PK
|
||||
BIGINT cattle_id FK
|
||||
BIGINT seller_id FK
|
||||
BIGINT buyer_id FK
|
||||
ENUM transaction_type
|
||||
DECIMAL price
|
||||
VARCHAR currency
|
||||
DATETIME transaction_date
|
||||
BIGINT contract_id FK
|
||||
ENUM status
|
||||
ENUM payment_status
|
||||
ENUM delivery_status
|
||||
TEXT notes
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
contracts {
|
||||
BIGINT id PK
|
||||
VARCHAR contract_number
|
||||
BIGINT seller_id FK
|
||||
BIGINT buyer_id FK
|
||||
JSON cattle_details
|
||||
DECIMAL total_price
|
||||
VARCHAR currency
|
||||
DATE contract_date
|
||||
DATE effective_date
|
||||
DATE expiry_date
|
||||
TEXT payment_terms
|
||||
TEXT delivery_terms
|
||||
ENUM contract_status
|
||||
VARCHAR contract_file_url
|
||||
TEXT notes
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
products {
|
||||
BIGINT id PK
|
||||
VARCHAR name
|
||||
TEXT description
|
||||
INT category_id FK
|
||||
VARCHAR sku
|
||||
DECIMAL price
|
||||
DECIMAL original_price
|
||||
VARCHAR currency
|
||||
INT stock_quantity
|
||||
INT min_stock
|
||||
VARCHAR unit
|
||||
DECIMAL weight
|
||||
VARCHAR origin
|
||||
DATE production_date
|
||||
DATE expiration_date
|
||||
BIGINT cattle_id FK
|
||||
ENUM status
|
||||
JSON image_urls
|
||||
JSON tags
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
product_categories {
|
||||
INT id PK
|
||||
VARCHAR name
|
||||
INT parent_id
|
||||
TINYINT level
|
||||
INT sort_order
|
||||
VARCHAR image_url
|
||||
TINYINT status
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
orders {
|
||||
BIGINT id PK
|
||||
VARCHAR order_number
|
||||
BIGINT user_id FK
|
||||
DECIMAL total_amount
|
||||
VARCHAR currency
|
||||
ENUM order_status
|
||||
ENUM payment_status
|
||||
ENUM shipping_status
|
||||
VARCHAR receiver_name
|
||||
VARCHAR receiver_phone
|
||||
TEXT receiver_address
|
||||
VARCHAR shipping_method
|
||||
DECIMAL shipping_fee
|
||||
TEXT notes
|
||||
VARCHAR payment_method
|
||||
TIMESTAMP paid_at
|
||||
TIMESTAMP shipped_at
|
||||
TIMESTAMP delivered_at
|
||||
TIMESTAMP cancelled_at
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
order_items {
|
||||
BIGINT id PK
|
||||
BIGINT order_id FK
|
||||
BIGINT product_id FK
|
||||
INT quantity
|
||||
DECIMAL unit_price
|
||||
DECIMAL total_price
|
||||
BIGINT cattle_id FK
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
logistics_tracking {
|
||||
BIGINT id PK
|
||||
BIGINT order_id FK
|
||||
VARCHAR tracking_number
|
||||
VARCHAR carrier
|
||||
ENUM status
|
||||
VARCHAR origin
|
||||
VARCHAR destination
|
||||
DATE estimated_delivery_date
|
||||
DATE actual_delivery_date
|
||||
VARCHAR current_location
|
||||
JSON tracking_info
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
loan_applications {
|
||||
BIGINT id PK
|
||||
BIGINT applicant_id FK
|
||||
ENUM loan_type
|
||||
JSON cattle_ids
|
||||
DECIMAL loan_amount
|
||||
VARCHAR currency
|
||||
DECIMAL interest_rate
|
||||
INT term_months
|
||||
TEXT purpose
|
||||
ENUM repayment_method
|
||||
ENUM guarantee_type
|
||||
ENUM status
|
||||
BIGINT reviewer_id FK
|
||||
TEXT review_notes
|
||||
DECIMAL approved_amount
|
||||
TIMESTAMP approved_date
|
||||
TIMESTAMP disbursement_date
|
||||
JSON repayment_schedule
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
insurance_applications {
|
||||
BIGINT id PK
|
||||
BIGINT applicant_id FK
|
||||
ENUM insurance_type
|
||||
JSON cattle_ids
|
||||
VARCHAR policy_number
|
||||
DECIMAL insured_amount
|
||||
DECIMAL premium
|
||||
VARCHAR currency
|
||||
DATE start_date
|
||||
DATE end_date
|
||||
ENUM status
|
||||
BIGINT underwriter_id FK
|
||||
TEXT underwriting_notes
|
||||
VARCHAR policy_file_url
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
claims {
|
||||
BIGINT id PK
|
||||
BIGINT insurance_id FK
|
||||
BIGINT applicant_id FK
|
||||
DECIMAL claim_amount
|
||||
VARCHAR currency
|
||||
DATE incident_date
|
||||
ENUM incident_type
|
||||
TEXT description
|
||||
JSON evidence_files
|
||||
ENUM status
|
||||
BIGINT reviewer_id FK
|
||||
TEXT review_notes
|
||||
DECIMAL approved_amount
|
||||
DECIMAL paid_amount
|
||||
TIMESTAMP submitted_at
|
||||
TIMESTAMP reviewed_at
|
||||
TIMESTAMP approved_at
|
||||
TIMESTAMP paid_at
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
government_reports {
|
||||
BIGINT id PK
|
||||
ENUM report_type
|
||||
BIGINT reporter_id FK
|
||||
DATE reporting_period_start
|
||||
DATE reporting_period_end
|
||||
JSON data_content
|
||||
TEXT summary
|
||||
ENUM status
|
||||
BIGINT approver_id FK
|
||||
TEXT approval_notes
|
||||
TIMESTAMP submitted_at
|
||||
TIMESTAMP approved_at
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
```
|
||||
49
backend/database/README.md
Normal file
49
backend/database/README.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# 数据库设计
|
||||
|
||||
## 概述
|
||||
|
||||
本项目使用MySQL作为主要的关系型数据库,存储用户信息、牛只档案、交易记录、监管数据等核心业务数据。
|
||||
|
||||
## 数据库设计规范
|
||||
|
||||
1. 使用InnoDB存储引擎
|
||||
2. 字符集使用utf8mb4
|
||||
3. 所有表都有创建时间和更新时间字段
|
||||
4. 主键使用自增ID
|
||||
5. 外键约束用于保证数据一致性
|
||||
|
||||
## 核心数据表
|
||||
|
||||
### 1. 用户表 (users)
|
||||
存储系统用户信息,包括牧民、银行职员、保险员、政府监管人员等。
|
||||
|
||||
### 2. 角色表 (roles)
|
||||
存储系统角色信息,如管理员、牧民、银行职员等。
|
||||
|
||||
### 3. 权限表 (permissions)
|
||||
存储系统权限信息。
|
||||
|
||||
### 4. 牛只档案表 (cattle)
|
||||
存储牛只基本信息,包括品种、年龄、健康状况等。
|
||||
|
||||
### 5. 饲养记录表 (feeding_records)
|
||||
存储牛只饲养记录,包括饲料、疫苗、治疗等信息。
|
||||
|
||||
### 6. 繁殖记录表 (breeding_records)
|
||||
存储牛只繁殖相关信息。
|
||||
|
||||
### 7. 交易记录表 (transactions)
|
||||
存储活牛交易记录。
|
||||
|
||||
### 8. 合同表 (contracts)
|
||||
存储交易合同信息。
|
||||
|
||||
### 9. 商品表 (products)
|
||||
存储牛肉商城商品信息。
|
||||
|
||||
### 10. 订单表 (orders)
|
||||
存储用户订单信息。
|
||||
|
||||
## 数据库脚本
|
||||
|
||||
数据库初始化脚本和迁移脚本将存放在此目录中。
|
||||
42
backend/utils/README.md
Normal file
42
backend/utils/README.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# 工具类
|
||||
|
||||
## 概述
|
||||
|
||||
本目录包含项目中使用的各种工具函数和辅助类。
|
||||
|
||||
## 工具分类
|
||||
|
||||
### 1. 认证工具 (auth.js)
|
||||
- JWT令牌生成和验证
|
||||
- 密码加密和验证
|
||||
- 用户身份验证
|
||||
|
||||
### 2. 文件处理工具 (file.js)
|
||||
- 腾讯云存储集成
|
||||
- 文件上传和下载
|
||||
- 图片处理
|
||||
|
||||
### 3. 数据验证工具 (validation.js)
|
||||
- 请求参数验证
|
||||
- 数据格式校验
|
||||
|
||||
### 4. 日志工具 (logger.js)
|
||||
- 系统日志记录
|
||||
- 错误日志处理
|
||||
|
||||
### 5. 邮件工具 (email.js)
|
||||
- 邮件发送功能
|
||||
- 邮件模板
|
||||
|
||||
### 6. 短信工具 (sms.js)
|
||||
- 短信发送功能
|
||||
- 验证码生成
|
||||
|
||||
### 7. 工具函数 (helpers.js)
|
||||
- 通用工具函数
|
||||
- 数据处理函数
|
||||
- 时间处理函数
|
||||
|
||||
## 使用说明
|
||||
|
||||
所有工具函数都应该是无状态的纯函数,便于测试和复用。
|
||||
Reference in New Issue
Block a user