feat(会员系统): 添加从预约记录转换为VIP客户功能

- 在bookings.php中添加转换为VIP客户的按钮
- 在vip.php中实现从预约记录转换VIP客户的逻辑
- 添加VIP客户转换界面和批量转换功能
- 新增get_package.php用于获取套餐信息
- 优化会员类型自动转换逻辑
This commit is contained in:
2025-12-12 03:11:12 +08:00
parent 89a22c7b11
commit 9cd2b31648
5 changed files with 1292 additions and 260 deletions
+20 -20
View File
@@ -32,11 +32,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$phone = $vip_customer['phone'];
// #region agent log
$log_data = json_encode(['location' => 'index.php:28', 'message' => 'VIP customer data', 'data' => ['vip_id' => $vip_id, 'has_car_model' => isset($vip_customer['car_model']), 'has_car_number' => isset($vip_customer['car_number'])], 'timestamp' => time() * 1000, 'sessionId' => 'debug-session', 'runId' => 'run1', 'hypothesisId' => 'A']);
// 确保日志目录存在
$log_dir = '.cursor';
if (!file_exists($log_dir)) {
mkdir($log_dir, 0777, true);
}
file_put_contents('.cursor/debug.log', $log_data . "\n", FILE_APPEND);
// #endregion
// VIP客户信息优先,但允许通过POST覆盖(如果用户想修改)
@@ -121,11 +116,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 两个时间段重叠的条件:现有预约的开始时间 < 新预约的结束时间 AND 现有预约的结束时间 > 新预约的开始时间
// #region agent log
$log_data = json_encode(['location' => 'index.php:98', 'message' => 'Checking time conflict', 'data' => ['start_time' => $start_time, 'end_time' => $end_time, 'duration' => $duration], 'timestamp' => time() * 1000, 'sessionId' => 'debug-session', 'runId' => 'run1', 'hypothesisId' => 'F']);
// 确保日志目录存在
$log_dir = '.cursor';
if (!file_exists($log_dir)) {
mkdir($log_dir, 0777, true);
}
file_put_contents('.cursor/debug.log', $log_data . "\n", FILE_APPEND);
// #endregion
$stmt = $pdo->prepare("SELECT COUNT(*) FROM bookings
@@ -136,11 +126,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$conflict_count = $stmt->fetchColumn();
// #region agent log
$log_data = json_encode(['location' => 'index.php:107', 'message' => 'Time conflict check result', 'data' => ['conflict_count' => $conflict_count], 'timestamp' => time() * 1000, 'sessionId' => 'debug-session', 'runId' => 'run1', 'hypothesisId' => 'F']);
// 确保日志目录存在
$log_dir = '.cursor';
if (!file_exists($log_dir)) {
mkdir($log_dir, 0777, true);
}
file_put_contents('.cursor/debug.log', $log_data . "\n", FILE_APPEND);
// #endregion
@@ -148,6 +133,26 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
throw new Exception('该时间段已被预约,请选择其他时间');
}
// 检查客户是否有历史预约记录,如果有则自动转为普通客户
// #region agent log
$log_data = json_encode(['location' => 'index.php:136', 'message' => 'Checking customer booking history', 'data' => ['phone' => $phone, 'car_number' => $car_number, 'current_member_type' => $member_type], 'timestamp' => time() * 1000, 'sessionId' => 'debug-session', 'runId' => 'run1', 'hypothesisId' => 'I']);
file_put_contents('.cursor/debug.log', $log_data . "\n", FILE_APPEND);
// #endregion
// 检查该手机号和车牌号组合是否有历史预约记录
$stmt = $pdo->prepare("SELECT COUNT(*) FROM bookings
WHERE phone = ? AND car_number = ?");
$stmt->execute([$phone, $car_number]);
$has_booking_history = $stmt->fetchColumn() > 0;
// 如果客户有历史预约记录,自动转为普通客户(除非是VIP客户模式)
if ($has_booking_history && $member_type === 'VIP会员' && $customer_type !== 'vip') {
$member_type = '普通客户';
// #region agent log
$log_data = json_encode(['location' => 'index.php:144', 'message' => 'Auto converted to regular customer', 'data' => ['reason' => 'has_booking_history', 'phone' => $phone, 'car_number' => $car_number], 'timestamp' => time() * 1000, 'sessionId' => 'debug-session', 'runId' => 'run1', 'hypothesisId' => 'I']);
file_put_contents('.cursor/debug.log', $log_data . "\n", FILE_APPEND);
// #endregion
}
// 插入预约记录
// 对于0元订单,自动标记为已付款
$payment_status = ($total_price <= 0) ? '已付款' : '未付款';
@@ -231,11 +236,6 @@ foreach ($all_bookings as $booking) {
// #region agent log
$log_data = json_encode(['location' => 'index.php:196', 'message' => 'Checking cross-day booking', 'data' => ['booking_date' => $booking_date, 'start_time' => $booking_start_time, 'end_time' => $booking_end_time, 'start_ts' => $start_timestamp, 'end_ts' => $end_timestamp], 'timestamp' => time() * 1000, 'sessionId' => 'debug-session', 'runId' => 'run1', 'hypothesisId' => 'G']);
// 确保日志目录存在
$log_dir = '.cursor';
if (!file_exists($log_dir)) {
mkdir($log_dir, 0777, true);
}
file_put_contents('.cursor/debug.log', $log_data . "\n", FILE_APPEND);
// #endregion