1
0
Files
GongShangLian/app/Admin/Exporters/OrderExporter.php
2020-08-06 15:36:28 +08:00

166 lines
7.2 KiB
PHP

<?php
namespace App\Admin\Exporters;
use App\Models\Order;
use Encore\Admin\Grid\Exporters\AbstractExporter;
use Maatwebsite\Excel\Facades\Excel;
class OrderExporter extends AbstractExporter
{
/**
* @Notes 订单导出
* @Author 朝霞
* @DateTime 2019/5/14 9:39 AM
*/
public function export()
{
Excel::create('订单明细', function ($excel) {
$excel->sheet('Sheetname', function ($sheet) {
$head = ['订单编号', '商品总数', '商品名称', '商品数量', '商品单价', '商品小计', '商品总额', '营收总额', '下单用户', '订单状态', '支付方式', '商户订单号', '微信支付单号', '创建时间', '付款时间', '最后更新时间'];
$body = ['orderid', 'goods_count', 'goods_name', 'goods_number', 'goods_price', 'goods_amount', 'amount', 'total', 'user.info.nickname', 'state', 'payment.type', 'payment.out_trade_no', 'payment.transaction_id', 'created_at', 'paid_at', 'updated_at'];
$bodyRows_array = collect($this->getData())->map(function ($item) use ($body) {
$i = 0;
$details = array_get($item, 'details');
foreach ($details as $key => $value) {
foreach ($body as $keyName) {
if ($i > 0) {
switch ($keyName) {
case 'goods_name':
$arr[$key][] = $value['item']['name'];
break;
case 'goods_number':
$arr[$key][] = $value['number'];
break;
case 'goods_price':
$arr[$key][] = $value['price'];
break;
case 'goods_amount':
$arr[$key][] = number_format($value['price'] * $value['number'], 2);
break;
default:
$arr[$key][] = ' ';
break;
}
} else {
switch ($keyName) {
case 'goods_count':
$arr[$key][] = array_sum(array_map(function ($val) {return $val['number'];}, $details));
break;
case 'goods_name':
$arr[$key][] = $value['item']['name'];
break;
case 'goods_number':
$arr[$key][] = $value['number'];
break;
case 'goods_price':
$arr[$key][] = $value['price'];
break;
case 'goods_amount':
$arr[$key][] = number_format($value['price'] * $value['number'], 2);
break;
case 'freight':
$arr[$key][] = empty(array_get($item, $keyName)) ? 0 : array_get($item, $keyName);
break;
case 'total':
$freight = empty(array_get($item, 'freight')) ? 0 : array_get($item, 'freight');
$arr[$key][] = number_format(bcadd(array_get($item, 'amount'), $freight, 3), 2);
break;
case 'state':
$state = self::state_text(array_get($item, $keyName));
$arr[$key][] = $state;
break;
case 'payment.type':
switch (array_get($item, $keyName)) {
case 'wxpay':
$arr[$key][] = '微信支付';
break;
case 'balance':
$arr[$key][] = '余额支付';
break;
default:
$arr[$key][] = '';
break;
}
break;
default:
$arr[$key][] = array_get($item, $keyName);
break;
}
}
}
$i++;
}
return $arr;
});
$bodyRows = [];
foreach ($bodyRows_array as $key => $Rows) {
foreach ($Rows as $row) {
array_push($bodyRows, $row);
}
}
$rows = collect([$head])->merge($bodyRows);
$sheet->rows($rows);
});
})->export('xlsx');
}
protected function state_text($orderState): string
{
switch ($orderState) {
case Order::ORDER_INIT:
$state = '订单初始化';
break;
case Order::ORDER_UNPAY:
$state = '待支付';
break;
case Order::ORDER_PAID:
$state = '已支付';
break;
case Order::ORDER_DELIVER:
$state = '发货处理中';
break;
case Order::ORDER_DELIVERED:
$state = '已发货';
break;
case Order::ORDER_SIGNED:
$state = '已签收';
break;
case Order::ORDER_COMPLETED:
$state = '已完成';
break;
case Order::ORDER_CLOSED:
$state = '已关闭';
break;
case Order::ORDER_CANCEL:
$state = '已取消';
break;
case Order::REFUND_APPLY:
$state = '申请退款';
break;
case Order::REFUND_AGREE:
$state = '同意退款';
break;
case Order::REFUND_PROCESS:
$state = '退款中';
break;
case Order::REFUND_COMPLETED:
$state = '退款完毕';
break;
case Order::REFUND_REFUSE:
$state = '拒绝退款';
break;
default:
$state = '未知状态';
break;
}
return $state;
}
}