生鲜配送系统是一个复杂的电子商务解决方案,通常包含前端用户界面、后端管理系统、数据库设计和物流配送模块。以下是一个简化的生鲜配送系统源代码结构概述:
技术栈建议
- 前端:React/Vue.js + HTML/CSS
- 后端:Node.js/Express 或 Spring Boot
- 数据库:MySQL/MongoDB
- 移动端:React Native/Flutter
- 实时通信:WebSocket/Socket.IO
核心模块代码示例
1. 用户模块 (Node.js/Express)
```javascript
// 用户注册路由
const express = require(express);
const router = express.Router();
const User = require(../models/User);
const bcrypt = require(bcryptjs);
router.post(/register, async (req, res) => {
try {
const { name, email, password, phone, address } = req.body;
// 检查用户是否已存在
const existingUser = await User.findOne({ email });
if (existingUser) {
return res.status(400).json({ message: 用户已存在 });
}
// 哈希密码
const hashedPassword = await bcrypt.hash(password, 10);
// 创建新用户
const newUser = new User({
name,
email,
password: hashedPassword,
phone,
address,
role: customer // 默认角色
});
await newUser.save();
res.status(201).json({ message: 用户注册成功 });
} catch (error) {
res.status(500).json({ message: 服务器错误, error });
}
});
```
2. 商品管理模块 (Spring Boot)
```java
// ProductController.java
@RestController
@RequestMapping("/api/products")
public class ProductController {
@Autowired
private ProductService productService;
@GetMapping
public ResponseEntity
> getAllProducts() {
return ResponseEntity.ok(productService.getAllProducts());
}
@PostMapping
public ResponseEntity createProduct(@RequestBody Product product) {
Product savedProduct = productService.saveProduct(product);
return ResponseEntity.status(HttpStatus.CREATED).body(savedProduct);
}
// 其他CRUD操作...
}
// Product.java (实体类)
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String category; // 生鲜类别(蔬菜、水果、肉类等)
private double price;
private double weight;
private String origin;
private Date expiryDate;
private int stock;
// getters and setters...
}
```
3. 订单处理模块 (Node.js)
```javascript
// 订单创建
router.post(/orders, authenticateToken, async (req, res) => {
try {
const { products, deliveryAddress, deliveryTime } = req.body;
const userId = req.user.id;
// 验证库存
for (const item of products) {
const product = await Product.findById(item.productId);
if (!product || product.stock < item.quantity) {
return res.status(400).json({ message: 库存不足 });
}
}
// 计算总价
let total = 0;
for (const item of products) {
const product = await Product.findById(item.productId);
total += product.price * item.quantity;
}
// 创建订单
const newOrder = new Order({
userId,
products,
total,
status: pending,
deliveryAddress,
deliveryTime,
createdAt: new Date()
});
await newOrder.save();
// 更新库存
for (const item of products) {
await Product.updateOne(
{ _id: item.productId },
{ $inc: { stock: -item.quantity } }
);
}
res.status(201).json(newOrder);
} catch (error) {
res.status(500).json({ message: 创建订单失败, error });
}
});
```
4. 配送调度模块 (Python示例)
```python
配送调度算法示例
class DeliveryScheduler:
def __init__(self):
self.drivers = []
self.orders = []
def add_driver(self, driver):
self.drivers.append(driver)
def add_order(self, order):
self.orders.append(order)
def schedule_deliveries(self):
简单的调度算法:按订单时间分配最近的司机
scheduled = []
for order in sorted(self.orders, key=lambda x: x.delivery_time):
available_drivers = [d for d in self.drivers if d.is_available()]
if available_drivers:
closest_driver = min(available_drivers,
key=lambda d: self.calculate_distance(d.location, order.address))
closest_driver.assign_order(order)
scheduled.append((order, closest_driver))
return scheduled
def calculate_distance(self, loc1, loc2):
简化距离计算,实际应用中应使用地理编码API
return ((loc1[0]-loc2[0])2 + (loc1[1]-loc2[1])2)0.5
```
数据库设计 (MySQL示例)
```sql
-- 用户表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
phone VARCHAR(20),
address TEXT,
role ENUM(customer, admin, driver) DEFAULT customer,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 商品表
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
category ENUM(vegetable, fruit, meat, seafood, dairy) NOT NULL,
price DECIMAL(10,2) NOT NULL,
weight DECIMAL(10,2),
origin VARCHAR(100),
expiry_date DATE,
stock INT NOT NULL DEFAULT 0,
image_url VARCHAR(255),
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 订单表
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
total DECIMAL(10,2) NOT NULL,
status ENUM(pending, processing, shipped, delivered, cancelled) DEFAULT pending,
delivery_address TEXT NOT NULL,
delivery_time DATETIME,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- 订单商品表
CREATE TABLE order_items (
id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
FOREIGN KEY (order_id) REFERENCES orders(id),
FOREIGN KEY (product_id) REFERENCES products(id)
);
```
完整系统开发建议
1. 前端开发:
- 用户端:商品浏览、购物车、下单、订单跟踪
- 司机端:订单接收、导航、配送状态更新
- 管理端:商品管理、订单管理、用户管理、数据分析
2. 关键功能:
- 实时库存更新
- 智能配送路线规划
- 冷链物流监控
- 保质期预警
- 支付集成
3. 扩展功能:
- 预售/预订系统
- 拼团购买
- 会员积分系统
- 智能推荐算法
注意事项
1. 生鲜配送系统需要特别注意:
- 冷链物流的实时监控
- 商品保质期管理
- 配送时效性要求高
- 退货退款流程的特殊性
2. 安全性考虑:
- 支付安全
- 用户数据保护
- 配送人员背景验证
3. 性能优化:
- 高并发订单处理
- 实时库存同步
- 地理信息系统(GIS)集成
如需更详细的实现或特定功能的代码示例,可以进一步说明您的具体需求。