订单导出功能实现
1. 基础订单导出方案
- 数据库查询:通过SQL语句从订单表中查询所需数据
- Excel/CSV生成:使用PHPExcel、PhpSpreadsheet等库生成可下载文件
- 前端触发:添加"导出订单"按钮,通过AJAX或直接链接触发导出
2. 增强型导出功能
```php
// 示例:使用PhpSpreadsheet导出订单
require vendor/autoload.php;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
function exportOrders($startDate, $endDate) {
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 设置表头
$sheet->setCellValue(A1, 订单号);
$sheet->setCellValue(B1, 客户姓名);
$sheet->setCellValue(C1, 水果种类);
$sheet->setCellValue(D1, 数量);
$sheet->setCellValue(E1, 金额);
$sheet->setCellValue(F1, 下单时间);
// 查询数据库获取订单数据
$orders = DB::table(orders)
->whereBetween(created_at, [$startDate, $endDate])
->get();
// 填充数据
$row = 2;
foreach($orders as $order) {
$sheet->setCellValue(A.$row, $order->order_no);
$sheet->setCellValue(B.$row, $order->customer_name);
// 其他字段...
$row++;
}
// 保存文件
$writer = new Xlsx($spreadsheet);
header(Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet);
header(Content-Disposition: attachment;filename="订单导出_.date(Ymd)..xlsx");
header(Cache-Control: max-age=0);
$writer->save(php://output);
}
```
万象源码部署与统计方案
1. 万象源码部署步骤
1. 环境准备:
- PHP 7.2+
- MySQL 5.7+
- Nginx/Apache
- 必要扩展:pdo_mysql, gd, openssl等
2. 部署流程:
```
解压源码
unzip wanxiang_source.zip -d /var/www/fruit_mall
设置权限
chown -R www-data:www-data /var/www/fruit_mall
chmod -R 755 /var/www/fruit_mall/storage
配置虚拟主机
在Nginx/Apache中配置域名指向/var/www/fruit_mall/public
导入数据库
mysql -u root -p fruit_mall < database.sql
修改.env文件配置数据库连接
```
2. 统计功能实现
订单统计看板
```php
// 订单统计控制器
class StatisticsController extends Controller
{
public function orderStats()
{
// 日订单量
$dailyOrders = DB::table(orders)
->select(DB::raw(DATE(created_at) as date), DB::raw(COUNT(*) as count))
->groupBy(date)
->orderBy(date)
->get();
// 水果品类销售排行
$categorySales = DB::table(order_items)
->join(products, order_items.product_id, =, products.id)
->select(products.category, DB::raw(SUM(order_items.quantity) as total_quantity))
->groupBy(products.category)
->orderBy(total_quantity, desc)
->limit(10)
->get();
return view(admin.statistics, [
dailyOrders => $dailyOrders,
categorySales => $categorySales
]);
}
}
```
前端展示(使用ECharts)
```html
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js">
<script>
// 日订单量图表
var chart1 = echarts.init(document.getElementById(dailyOrdersChart));
chart1.setOption({
xAxis: {
type: category,
data: <?php echo json_encode($dailyOrders->pluck(date)); ?>
},
yAxis: {
type: value
},
series: [{
data: <?php echo json_encode($dailyOrders->pluck(count)); ?>,
type: line
}]
});
// 品类销售图表
var chart2 = echarts.init(document.getElementById(categorySalesChart));
chart2.setOption({
xAxis: {
type: category,
data: <?php echo json_encode($categorySales->pluck(category)); ?>
},
yAxis: {
type: value
},
series: [{
data: <?php echo json_encode($categorySales->pluck(total_quantity)); ?>,
type: bar
}]
});
```
优化建议
1. 性能优化:
- 对订单表按日期建立索引
- 大数据量导出时使用分页查询
- 考虑使用队列处理导出任务
2. 安全考虑:
- 导出功能添加权限验证
- 防止SQL注入,使用预处理语句
- 限制导出数据量,避免服务器过载
3. 扩展功能:
- 添加按状态、支付方式等条件的筛选导出
- 实现定时自动导出功能
- 添加数据可视化大屏展示
4. 部署优化:
- 使用Docker容器化部署
- 配置Supervisor保证队列进程常驻
- 设置日志轮转,避免日志文件过大
以上方案可根据实际水果商城的业务需求进行调整和扩展。