f173149e28
移除phone字段的唯一约束,添加phone和car_number的复合唯一索引 更新相关SQL脚本和PHP代码以支持新的索引规则
417 lines
12 KiB
Markdown
417 lines
12 KiB
Markdown
# 🚗 洗车店订单管理系统
|
||
|
||
一个功能完整的洗车店订单管理系统,支持VIP客户管理、预约处理、套餐管理等功能。
|
||
|
||
## 📋 目录
|
||
|
||
- [系统概述](#-系统概述)
|
||
- [主要功能](#-主要功能)
|
||
- [技术架构](#-技术架构)
|
||
- [系统要求](#-系统要求)
|
||
- [安装指南](#-安装指南)
|
||
- [项目结构](#-项目结构)
|
||
- [功能模块](#-功能模块)
|
||
- [数据库结构](#-数据库结构)
|
||
- [API接口](#-api接口)
|
||
- [使用指南](#-使用指南)
|
||
- [调试工具](#-调试工具)
|
||
- [常见问题](#-常见问题)
|
||
- [版本历史](#-版本历史)
|
||
|
||
## 🎯 系统概述
|
||
|
||
本系统是一个专为洗车店设计的现代化订单管理平台,提供完整的客户管理、预约处理、VIP服务等功能。系统采用PHP + MySQL架构,界面简洁易用,功能完善稳定。
|
||
|
||
### 核心特性
|
||
|
||
- 🏆 **VIP客户管理** - 完整的VIP客户信息管理和历史预约查询功能
|
||
- 📝 **预约管理** - 完整的洗车预约生命周期管理
|
||
- 📦 **套餐管理** - 灵活的洗车服务套餐配置
|
||
- 💾 **数据持久化** - 可靠的MySQL数据库存储
|
||
- 🔍 **搜索功能** - 强大的客户搜索功能
|
||
- ️ **调试工具** - 完善的开发调试和监控工具
|
||
|
||
## 🚀 主要功能
|
||
|
||
### 1. 客户管理
|
||
- **客户信息录入** - 姓名、手机号、车型、车牌号等基本信息
|
||
- **VIP客户管理** - 专门的VIP客户管理功能
|
||
- **客户搜索** - 支持姓名、手机号模糊搜索
|
||
- **VIP客户预约记录** - 自动显示VIP客户最近一次预约信息
|
||
|
||
### 2. 预约管理
|
||
- **预约创建** - 快速创建洗车预约
|
||
- **预约状态** - 待确认、已确认、进行中、已完成、已取消等状态管理
|
||
- **预约详情** - 完整的预约信息记录
|
||
- **VIP客户特殊处理** - 自动关联VIP客户信息和历史记录
|
||
|
||
### 3. 套餐管理
|
||
- **服务套餐** - 预设洗车服务套餐
|
||
- **价格管理** - 灵活的价格设置
|
||
- **套餐配置** - 服务项目和时长配置
|
||
|
||
### 4. VIP专享功能
|
||
- **VIP预约历史查询** - 自动显示VIP客户最近一次预约详情
|
||
- **首次到店提示** - 为首次预约的VIP客户提供特别提示
|
||
- **客户信息自动填充** - 选择VIP客户后自动填充相关信息
|
||
|
||
## 🏗️ 技术架构
|
||
|
||
### 前端技术
|
||
- **HTML5** - 现代化的页面结构
|
||
- **CSS3** - 响应式样式设计
|
||
- **JavaScript** - 动态交互和AJAX请求
|
||
- **Bootstrap** - UI组件库(可选)
|
||
|
||
### 后端技术
|
||
- **PHP 7.4+** - 服务器端脚本语言
|
||
- **MySQL 5.7+** - 关系型数据库
|
||
- **PDO** - 数据库抽象层
|
||
- **RESTful API** - 标准API设计
|
||
|
||
### 核心组件
|
||
- **数据库连接** (`db_connect.php`) - 统一的数据库连接管理
|
||
- **配置管理** (`config.php`) - 系统配置参数
|
||
- **主页面** (`index.php`) - 系统主入口和预约创建页面
|
||
- **VIP管理** (`get_vip_customers.php`, `get_vip_last_booking.php`) - VIP客户相关功能
|
||
|
||
## 💻 系统要求
|
||
|
||
### 服务器环境
|
||
- **PHP**: 7.4 或更高版本
|
||
- **MySQL**: 5.7 或更高版本
|
||
- **Web服务器**: Apache 2.4+ 或 Nginx 1.18+
|
||
- **PHP扩展**: PDO, PDO_MySQL, JSON
|
||
|
||
### 开发环境
|
||
- **操作系统**: Windows 10+, macOS 10.14+, Linux Ubuntu 18+
|
||
- **推荐工具**: XAMPP, WAMP, LAMP 或 Docker
|
||
- **浏览器**: Chrome 80+, Firefox 75+, Safari 13+
|
||
|
||
## 🔧 安装指南
|
||
|
||
### 1. 环境准备
|
||
|
||
#### 使用XAMPP(推荐)
|
||
```bash
|
||
# 下载并安装XAMPP
|
||
# 启动Apache和MySQL服务
|
||
```
|
||
|
||
#### 使用WAMP(Windows用户)
|
||
```bash
|
||
# 下载并安装WAMP
|
||
# 启动WAMP服务
|
||
```
|
||
|
||
### 2. 项目部署
|
||
|
||
#### 项目文件放置
|
||
```bash
|
||
# 将项目文件复制到Web服务器根目录
|
||
# Windows (XAMPP): C:\xampp\htdocs\carwash_order\
|
||
# Linux/macOS: /var/www/html/carwash_order/
|
||
```
|
||
|
||
#### 数据库配置
|
||
```sql
|
||
-- 1. 创建数据库
|
||
CREATE DATABASE carwash_booking CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
||
-- 2. 导入数据库结构
|
||
SOURCE carwash_db.sql;
|
||
|
||
-- 3. 验证表创建
|
||
SHOW TABLES;
|
||
```
|
||
|
||
#### 配置文件设置
|
||
编辑 `config.php`:
|
||
```php
|
||
<?php
|
||
$host = 'localhost'; // 数据库主机
|
||
$username = 'root'; // 数据库用户名
|
||
$password = ''; // 数据库密码
|
||
$database = 'carwash_booking'; // 数据库名称
|
||
?>
|
||
```
|
||
|
||
### 3. 权限设置
|
||
|
||
#### Linux/macOS权限
|
||
```bash
|
||
# 设置目录权限
|
||
chmod -R 755 /var/www/html/carwash_order/
|
||
chown -R www-data:www-data /var/www/html/carwash_order/
|
||
```
|
||
|
||
#### Windows权限
|
||
确保IIS或Apache用户有读取项目文件的权限。
|
||
|
||
### 4. 访问测试
|
||
|
||
打开浏览器访问:
|
||
```
|
||
http://localhost/carwash_order/
|
||
```
|
||
|
||
## 📁 项目结构
|
||
|
||
```
|
||
carwash_order/
|
||
├── README.md # 项目说明文档
|
||
├── carwash_db.sql # 数据库结构和初始数据
|
||
├── config.php # 系统配置文件
|
||
├── db_connect.php # 数据库连接文件
|
||
├── index.php # 主页面入口
|
||
├── style.css # 样式文件
|
||
│
|
||
├── API文件/
|
||
│ ├── get_vip_customers.php # 获取VIP客户列表API
|
||
│ ├── get_vip_customer.php # 获取单个VIP客户信息API
|
||
│ ├── get_vip_last_booking.php # 获取VIP客户最近预约记录API
|
||
│ └── bookings.php # 预约管理相关API
|
||
│
|
||
├── 测试工具/
|
||
│ ├── test_vip_booking_history.php # VIP预约历史测试
|
||
│ ├── test_vip.php # VIP功能测试
|
||
│ ├── verify_vip_data.php # VIP数据验证
|
||
│ ├── debug_vip.php # VIP调试工具
|
||
│ └── vip_search_debug.html # VIP搜索调试页面
|
||
│
|
||
└── 报告文件/
|
||
├── VIP_Function_Fix_Report.md # VIP功能修复报告
|
||
└── VIP_Search_Fix_Report.md # VIP搜索修复报告
|
||
```
|
||
|
||
## 🗄️ 数据库结构
|
||
|
||
### 主要数据表
|
||
|
||
#### 1. vip_customers(VIP客户表)
|
||
```sql
|
||
CREATE TABLE vip_customers (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
customer_name VARCHAR(100) NOT NULL COMMENT '客户姓名',
|
||
phone VARCHAR(20) NOT NULL COMMENT '联系电话',
|
||
car_model VARCHAR(50) COMMENT '车型',
|
||
car_number VARCHAR(20) COMMENT '车牌号',
|
||
email VARCHAR(100) COMMENT '邮箱地址',
|
||
birthday DATE COMMENT '生日',
|
||
-- 复合唯一索引:确保手机号和车牌号组合唯一
|
||
UNIQUE KEY idx_phone_car_number (phone, car_number)
|
||
notes TEXT COMMENT '备注信息',
|
||
is_active BOOLEAN DEFAULT TRUE,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP NULL
|
||
);
|
||
```
|
||
|
||
#### 2. bookings(预约表)
|
||
```sql
|
||
CREATE TABLE bookings (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
customer_name VARCHAR(100) NOT NULL,
|
||
phone VARCHAR(20) NOT NULL,
|
||
car_model VARCHAR(50) NOT NULL,
|
||
car_number VARCHAR(20) NOT NULL,
|
||
package_id INT,
|
||
custom_services TEXT COMMENT '自定义服务内容',
|
||
start_time DATETIME NOT NULL,
|
||
end_time DATETIME NOT NULL,
|
||
duration INT NOT NULL COMMENT '实际服务时长(分钟)',
|
||
total_price DECIMAL(10,2) NOT NULL,
|
||
notes TEXT,
|
||
status ENUM('待确认', '已确认', '进行中', '已完成', '已取消') DEFAULT '待确认',
|
||
member_type ENUM('普通客户', 'VIP会员') DEFAULT '普通客户' COMMENT '会员类型',
|
||
source ENUM('抖音', '微信', '快手', '朋友介绍', '其他') DEFAULT '其他' COMMENT '客户来源',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP NULL,
|
||
FOREIGN KEY (package_id) REFERENCES packages(id) ON DELETE SET NULL
|
||
);
|
||
```
|
||
|
||
#### 3. packages(套餐表)
|
||
```sql
|
||
CREATE TABLE packages (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
package_name VARCHAR(100) NOT NULL,
|
||
description TEXT,
|
||
base_duration INT NOT NULL COMMENT '基础服务时长(分钟)',
|
||
price DECIMAL(10,2) NOT NULL,
|
||
services TEXT NOT NULL COMMENT '包含的服务项目(用逗号分隔)',
|
||
is_active BOOLEAN DEFAULT TRUE,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP NULL
|
||
);
|
||
```
|
||
|
||
## 🔌 API接口
|
||
|
||
### VIP客户相关接口
|
||
|
||
#### 1. 获取VIP客户列表
|
||
```http
|
||
GET /get_vip_customers.php
|
||
```
|
||
|
||
**参数**: 无
|
||
**返回**: JSON格式的VIP客户列表
|
||
|
||
**响应示例**:
|
||
```json
|
||
[
|
||
{
|
||
"id": 1,
|
||
"customer_name": "张总",
|
||
"phone": "13900139001",
|
||
"car_model": "奔驰S500",
|
||
"car_number": "京V88888",
|
||
"email": "zhang@example.com",
|
||
"birthday": "1980-05-15",
|
||
"is_active": 1
|
||
}
|
||
]
|
||
```
|
||
|
||
#### 2. 获取VIP客户最近预约记录
|
||
```http
|
||
GET /get_vip_last_booking.php?vip_id=1
|
||
```
|
||
|
||
**参数**:
|
||
- `vip_id`: VIP客户ID
|
||
|
||
**返回**: JSON格式的最近预约信息或首次到店标识
|
||
|
||
**响应示例** (有预约记录):
|
||
```json
|
||
{
|
||
"has_booking": true,
|
||
"appointment_date": "2024-12-21",
|
||
"appointment_time": "14:00",
|
||
"package_name": "VIP套餐",
|
||
"duration": 180
|
||
}
|
||
```
|
||
|
||
**响应示例** (首次到店):
|
||
```json
|
||
{
|
||
"has_booking": false
|
||
}
|
||
```
|
||
|
||
## � 使用指南
|
||
|
||
### 基础操作流程
|
||
|
||
#### 1. VIP客户预约
|
||
```
|
||
1. 打开系统主页 (index.php)
|
||
2. 选择客户类型为"VIP客户"
|
||
3. 在VIP搜索框中输入关键词搜索客户
|
||
4. 选择目标VIP客户
|
||
5. 系统自动显示客户信息和最近一次预约记录(如有)
|
||
6. 选择服务套餐和预约时间
|
||
7. 提交预约
|
||
```
|
||
|
||
#### 2. 普通客户预约
|
||
```
|
||
1. 打开系统主页 (index.php)
|
||
2. 选择客户类型为"普通客户"
|
||
3. 填写客户基本信息
|
||
4. 选择服务套餐和预约时间
|
||
5. 提交预约
|
||
```
|
||
|
||
### VIP客户特殊功能
|
||
|
||
#### VIP客户最近预约显示
|
||
当选择VIP客户后,系统会自动查询并显示该客户的最近一次预约信息,包括:
|
||
- 预约日期
|
||
- 预约时间
|
||
- 选择的套餐
|
||
- 服务时长
|
||
|
||
如果是首次预约,则显示"该VIP首次到店"的提示信息。
|
||
|
||
## 🛠️ 调试工具
|
||
|
||
### 1. VIP预约历史测试
|
||
- **文件**: `test_vip_booking_history.php`
|
||
- **功能**: 测试VIP客户预约历史查询功能
|
||
- **使用**: 浏览器访问或命令行执行
|
||
|
||
### 2. VIP功能测试
|
||
- **文件**: `test_vip.php`
|
||
- **功能**: 测试VIP客户管理相关功能
|
||
- **使用**: 浏览器访问
|
||
|
||
### 3. 数据库连接测试
|
||
- **文件**: `test_db_connection.php`
|
||
- **功能**: 测试数据库连接是否正常
|
||
- **使用**: 命令行执行
|
||
|
||
## ❓ 常见问题
|
||
|
||
### 安装问题
|
||
|
||
#### Q: PHP版本不兼容怎么办?
|
||
A: 确保使用PHP 7.4或更高版本,检查php.ini配置是否启用PDO扩展。
|
||
|
||
#### Q: 数据库连接失败?
|
||
A: 检查config.php中的数据库配置,确保MySQL服务正在运行,用户权限正确。
|
||
|
||
### 功能问题
|
||
|
||
#### Q: VIP客户搜索不到?
|
||
A:
|
||
1. 检查数据库中是否有VIP客户数据
|
||
2. 查看浏览器控制台是否有JavaScript错误
|
||
3. 使用调试工具验证数据加载
|
||
|
||
#### Q: VIP客户预约记录不显示?
|
||
A:
|
||
1. 确认该VIP客户已有预约记录
|
||
2. 检查get_vip_last_booking.php是否正常工作
|
||
3. 查看数据库中bookings表与vip_customers表的phone字段是否匹配
|
||
|
||
#### Q: 页面显示错误"SQLSTATE[42S22]: Column not found"?
|
||
A: 确保数据库结构与代码中的表结构一致,特别是bookings表使用start_time字段而不是appointment_date字段。
|
||
|
||
## 📝 版本历史
|
||
|
||
### v3.0.0 (最新版)
|
||
- ✨ **新增**: VIP客户最近预约记录显示功能
|
||
- 🐛 **修复**: 数据库查询错误,优化表结构匹配
|
||
- 🔧 **改进**: VIP客户与预约记录的关联逻辑
|
||
- � **增强**: 首次到店提示功能
|
||
|
||
### v2.1.0 (2024-01-15)
|
||
- ✨ **新增**: VIP客户搜索功能优化
|
||
- 🐛 **修复**: VIP客户数据加载时序问题
|
||
- 🔧 **改进**: 异步处理机制优化
|
||
|
||
### v2.0.0 (2024-01-10)
|
||
- ✨ **新增**: VIP客户管理系统
|
||
- ✨ **新增**: 订单状态管理
|
||
- ✨ **新增**: 套餐配置功能
|
||
|
||
### v1.0.0 (2024-01-01)
|
||
- 🎉 **初始版本**: 基础订单管理功能
|
||
- ✨ **新增**: 客户信息管理
|
||
- ✨ **新增**: 订单创建和处理
|
||
|
||
## 📄 许可证
|
||
|
||
本项目采用 [MIT License](LICENSE) 开源协议。
|
||
|
||
## 🙏 致谢
|
||
|
||
感谢所有为这个项目贡献代码、反馈问题和提出建议的开发者们!
|
||
|
||
---
|
||
|
||
**洗车店订单管理系统** - 让洗车店管理更简单、更高效! 🚗✨ |