166 lines
7.2 KiB
PHP
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;
|
|
}
|
|
|
|
}
|