= '" . mysqli_real_escape_string($conn, $fliterFromDate) . "'"; $urlStr .= "&fliterFromDate=" . urlencode($fliterFromDate); } if (!empty($fliterToDate)) { $fliterStr .= " AND o.order_date <= '" . mysqli_real_escape_string($conn, $fliterToDate) . " 23:59:59'"; $urlStr .= "&fliterToDate=" . urlencode($fliterToDate); } // 搜索参数 $keys = $_GET['Keys'] ?? ''; $keyscode = mysqli_real_escape_string($conn, $keys); $page = $_GET['Page'] ?? 1; // 构建基本条件SQL - 这部分是两个查询共用的 $employee_id = $_SESSION['employee_id']; $isAdmin = checkIfAdmin(); // 步骤1:查询符合条件的客户ID列表 $customerListSql = "SELECT DISTINCT o.customer_id FROM orders o JOIN order_items oi ON o.id = oi.order_id JOIN customer c ON o.customer_id = c.id JOIN products p ON oi.product_id = p.id WHERE o.order_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY) AND p.rebate = 1 AND NOT EXISTS ( SELECT 1 FROM rebate_redemption_items rri WHERE rri.order_item_id = oi.id ) AND EXISTS ( SELECT 1 FROM rebate_rules rr WHERE rr.product_id = oi.product_id ) AND ( SELECT SUM(oi2.quantity) FROM order_items oi2 JOIN orders o2 ON oi2.order_id = o2.id WHERE o2.customer_id = o.customer_id AND oi2.product_id = oi.product_id AND o2.order_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY) AND NOT EXISTS ( SELECT 1 FROM rebate_redemption_items rri WHERE rri.order_item_id = oi2.id ) ) >= ( SELECT MIN(rr.min_quantity) FROM rebate_rules rr WHERE rr.product_id = oi.product_id )"; // 非管理员只能查看自己的客户返点 if (!$isAdmin) { $customerListSql .= " AND c.cs_belong = $employee_id"; } // 添加搜索条件 if (!empty($keyscode)) { $customerListSql .= " AND (c.cs_company LIKE '%$keyscode%' OR c.cs_code LIKE '%$keyscode%')"; } // 添加日期筛选 $customerListSql .= $fliterStr; // 执行查询获取客户ID列表 $customerResult = mysqli_query($conn, $customerListSql); if (!$customerResult) { die("查询客户列表错误: " . mysqli_error($conn)); } // 获取客户ID并创建IN子句 $customerIds = []; while ($row = mysqli_fetch_assoc($customerResult)) { $customerIds[] = $row['customer_id']; } // 如果没有找到客户,设置一个不可能的ID以确保查询不返回任何结果 if (empty($customerIds)) { $customerIds = [-1]; // 不可能的ID } $customerIdsStr = implode(',', $customerIds); // 设置每页显示记录数和分页 $pageSize = 20; $totalRecords = count($customerIds); // 计算总页数 $totalPages = ceil($totalRecords / $pageSize); if ($totalPages < 1) $totalPages = 1; // 验证当前页码 $page = (int)$page; if ($page < 1) $page = 1; if ($page > $totalPages) $page = $totalPages; // 计算起始记录 $offset = ($page - 1) * $pageSize; // 步骤2:获取分页后的客户详细信息 // 为防止表结构问题,使用更简单的SQL格式并明确使用id字段 // 先获取客户基本信息 $paginatedCustomerIds = array_slice($customerIds, $offset, $pageSize); if (empty($paginatedCustomerIds)) { $paginatedCustomerIds = [-1]; // 确保不会有结果 } $paginatedIdsStr = implode(',', $paginatedCustomerIds); $customerDetailSql = " SELECT c.id AS customer_id, c.cs_company AS customer_name, c.cs_code FROM customer c WHERE c.id IN ($paginatedIdsStr)"; $result = mysqli_query($conn, $customerDetailSql); if (!$result) { die("查询客户基本信息错误: " . mysqli_error($conn)); } $customers = []; while ($row = mysqli_fetch_assoc($result)) { $customers[$row['customer_id']] = $row; $customers[$row['customer_id']]['total_rebate_amount'] = 0; $customers[$row['customer_id']]['qualifying_products'] = 0; $customers[$row['customer_id']]['rebate_details'] = ''; } // 如果找到客户,获取每个客户的返点详情 if (!empty($customers)) { $customerIdsForDetails = array_keys($customers); $customerIdsForDetailsStr = implode(',', $customerIdsForDetails); // 获取客户返点总金额和产品数量 $rebateDetailsSql = " SELECT o.customer_id, SUM( oi.quantity * ( SELECT rr.rebate_amount FROM rebate_rules rr WHERE rr.product_id = oi.product_id AND rr.min_quantity <= ( SELECT SUM(oi2.quantity) FROM order_items oi2 JOIN orders o2 ON oi2.order_id = o2.id WHERE o2.customer_id = o.customer_id AND oi2.product_id = oi.product_id AND o2.order_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY) AND NOT EXISTS ( SELECT 1 FROM rebate_redemption_items rri WHERE rri.order_item_id = oi2.id ) ) ORDER BY rr.min_quantity DESC LIMIT 1 ) ) AS total_rebate_amount, COUNT(DISTINCT oi.product_id) AS qualifying_products FROM orders o JOIN order_items oi ON o.id = oi.order_id JOIN products p ON oi.product_id = p.id WHERE o.customer_id IN ($customerIdsForDetailsStr) AND o.order_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY) AND p.rebate = 1 AND NOT EXISTS ( SELECT 1 FROM rebate_redemption_items rri WHERE rri.order_item_id = oi.id ) GROUP BY o.customer_id"; $detailsResult = mysqli_query($conn, $rebateDetailsSql); if (!$detailsResult) { die("查询返点详情错误: " . mysqli_error($conn)); } // 填充总金额和产品数量 while ($detailRow = mysqli_fetch_assoc($detailsResult)) { if (isset($customers[$detailRow['customer_id']])) { $customers[$detailRow['customer_id']]['total_rebate_amount'] = $detailRow['total_rebate_amount']; $customers[$detailRow['customer_id']]['qualifying_products'] = $detailRow['qualifying_products']; } } // 获取每个客户的产品返点详情 foreach ($customerIdsForDetails as $customerId) { $productDetailsSql = " SELECT p.ProductName, SUM(oi.quantity) AS quantity, ( SELECT rr.rebate_amount FROM rebate_rules rr WHERE rr.product_id = oi.product_id AND rr.min_quantity <= SUM(oi.quantity) ORDER BY rr.min_quantity DESC LIMIT 1 ) AS rebate_amount FROM order_items oi JOIN orders o ON oi.order_id = o.id JOIN products p ON oi.product_id = p.id WHERE o.customer_id = $customerId AND o.order_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY) AND p.rebate = 1 AND NOT EXISTS ( SELECT 1 FROM rebate_redemption_items rri WHERE rri.order_item_id = oi.id ) GROUP BY oi.product_id, p.ProductName"; $productResult = mysqli_query($conn, $productDetailsSql); if (!$productResult) { die("查询产品详情错误: " . mysqli_error($conn)); } // 构建返点详情文本 $details = []; while ($productRow = mysqli_fetch_assoc($productResult)) { $details[] = $productRow['ProductName'] . ': ' . $productRow['quantity'] . ' 件 x ' . $productRow['rebate_amount'] . ' 元/件'; } $customers[$customerId]['rebate_details'] = implode('; ', $details); } // 按照返点金额排序 usort($customers, function($a, $b) { return $b['total_rebate_amount'] <=> $a['total_rebate_amount']; }); } ?> 客户返点统计

筛选条件

查看过期预警 查看返点历史
序号
客户编码
客户名称
返点产品数
返点金额合计
查看详情
操作
返点详情
当前没有客户有可用返点
'; } else { echo '
没有找到匹配的返点记录,点击返回
'; } } ?>
1) { $pageName = "?Keys=$keys$urlStr&"; $pageLen = 3; if ($page > 1) { echo "首页"; echo "上一页"; } if ($pageLen * 2 + 1 >= $totalPages) { $startPage = 1; $endPage = $totalPages; } else { if ($page <= $pageLen + 1) { $startPage = 1; $endPage = $pageLen * 2 + 1; } else { $startPage = $page - $pageLen; $endPage = $page + $pageLen; } if ($page + $pageLen > $totalPages) { $startPage = $totalPages - $pageLen * 2; $endPage = $totalPages; } } for ($i = $startPage; $i <= $endPage; $i++) { if ($i == $page) { echo "$i"; } else { echo "$i"; } } if ($page < $totalPages) { if ($totalPages - $page > $pageLen) { echo "...$totalPages"; } echo "下一页"; echo "尾页"; } } ?>