152 lines
5.7 KiB
PHP
152 lines
5.7 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Exports\Sheets;
|
||
|
|
|
||
|
|
use App\Models\Order;
|
||
|
|
use Illuminate\Support\Facades\DB;
|
||
|
|
use Maatwebsite\Excel\Concerns\FromCollection;
|
||
|
|
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
|
||
|
|
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
|
||
|
|
use Maatwebsite\Excel\Concerns\WithEvents;
|
||
|
|
use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
|
||
|
|
use Maatwebsite\Excel\Concerns\WithTitle;
|
||
|
|
use Maatwebsite\Excel\Events\AfterSheet;
|
||
|
|
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
|
||
|
|
|
||
|
|
class LoveQuarterIncomDetail implements FromCollection, WithTitle, WithEvents, WithStrictNullComparison, ShouldAutoSize,WithColumnFormatting
|
||
|
|
{
|
||
|
|
protected $date_arr, $key;
|
||
|
|
public function __construct($key, $date_arr)
|
||
|
|
{
|
||
|
|
$this->key = $key;
|
||
|
|
$this->date_arr = $date_arr;
|
||
|
|
}
|
||
|
|
|
||
|
|
//格式化数据
|
||
|
|
public function columnFormats(): array
|
||
|
|
{
|
||
|
|
return [
|
||
|
|
'D' => NumberFormat::FORMAT_NUMBER_00, //金额保留两位小数
|
||
|
|
'E' => NumberFormat::FORMAT_NUMBER_00, //金额保留两位小数
|
||
|
|
];
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* sheet数据
|
||
|
|
* @return \Illuminate\Support\Collection
|
||
|
|
*/
|
||
|
|
public function collection()
|
||
|
|
{
|
||
|
|
$rows = [
|
||
|
|
["深圳福恋智能信息科技有限公司
|
||
|
|
|
||
|
|
福恋小程序会员收款明细表", '', '', ''],
|
||
|
|
['ID',"订单号", '商品名册好难过', '订单金额', '订单退款金额', '微信上手续费', '提现手续费', '订单时间', '月份']
|
||
|
|
];
|
||
|
|
|
||
|
|
foreach ($this->date_arr as $date) {
|
||
|
|
$start_date = $date['start_date'];
|
||
|
|
$end_date = $date['end_date'];
|
||
|
|
$date = date('m', strtotime($start_date));
|
||
|
|
|
||
|
|
$orders = Order::with('refundOrders')->where('pay_status','PAID')->whereBetween('created_at', [$start_date, $end_date])->get();
|
||
|
|
$sum = 0;
|
||
|
|
foreach ($orders as $order) {
|
||
|
|
$refund_price = $order->refundOrders->sum('refund_fee');
|
||
|
|
|
||
|
|
$sum += $order->price;
|
||
|
|
$rows[] = [$order->id, $order->trade_no, $order->goods,$order->price, $refund_price, 0.006, 0, $order->created_at, $date];
|
||
|
|
}
|
||
|
|
if ($sum) {
|
||
|
|
$rows[] = ['','','合计', $sum, '', '', '', '', ''];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return collect($rows);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function registerEvents(): array
|
||
|
|
{
|
||
|
|
$sum = 0;
|
||
|
|
foreach ($this->date_arr as $date) {
|
||
|
|
$start_date = $date['start_date'];
|
||
|
|
$end_date = $date['end_date'];
|
||
|
|
$orders = Order::with('refundOrders')->where('pay_status','PAID')->whereBetween('created_at', [$start_date, $end_date])->get();
|
||
|
|
|
||
|
|
$count = count($orders);
|
||
|
|
if ($count) {
|
||
|
|
$count = $count +1;
|
||
|
|
}
|
||
|
|
$sum = $sum + $count;
|
||
|
|
}
|
||
|
|
return [
|
||
|
|
AfterSheet::class => function(AfterSheet $event) use($sum){
|
||
|
|
//设置列宽
|
||
|
|
$arr = ['A','B','C','D','E','F',"G","H",'I'];
|
||
|
|
foreach ($arr as $value) {
|
||
|
|
$event->sheet->getDelegate()->getColumnDimension($value)->setWidth(20);
|
||
|
|
}
|
||
|
|
//自动换行
|
||
|
|
$event->sheet->getStyle("A1:F1")->getAlignment()->setWrapText(TRUE);
|
||
|
|
$event->sheet->getDelegate()->getRowDimension(1)->setRowHeight(80);
|
||
|
|
//设置行高,$i为数据行数
|
||
|
|
for ($i = 2; $i<=1265; $i++) {
|
||
|
|
$event->sheet->getDelegate()->getRowDimension($i)->setRowHeight(30);
|
||
|
|
}
|
||
|
|
//设置区域单元格垂直居中
|
||
|
|
$event->sheet->getDelegate()->getStyle('A1:K1265')->getAlignment()->setVertical('center');
|
||
|
|
//设置区域单元格水平居中
|
||
|
|
$event->sheet->getDelegate()->getStyle('A1:K1265')->getAlignment()->setHorizontal('center');
|
||
|
|
//设置区域单元格字体、颜色、背景等,其他设置请查看 applyFromArray 方法,提供了注释
|
||
|
|
$event->sheet->getDelegate()->getStyle('A2:I'.($sum+2))->applyFromArray([
|
||
|
|
'borders'=> [
|
||
|
|
'allBorders' => [
|
||
|
|
'borderStyle' =>'thin',
|
||
|
|
]
|
||
|
|
]
|
||
|
|
]);
|
||
|
|
$event->sheet->getDelegate()->getStyle('A1:I1')->applyFromArray([
|
||
|
|
'font' => [
|
||
|
|
'name' => '宋体',
|
||
|
|
'bold' => false,
|
||
|
|
'italic' => false,
|
||
|
|
'strikethrough' => false,
|
||
|
|
'size' => 14,
|
||
|
|
'color' => [
|
||
|
|
'rgb' => '000000'
|
||
|
|
],
|
||
|
|
]
|
||
|
|
|
||
|
|
]);
|
||
|
|
$event->sheet->getDelegate()->getStyle('A2:I1080')->applyFromArray([
|
||
|
|
'font' => [
|
||
|
|
'name' => '宋体',
|
||
|
|
'bold' => false,
|
||
|
|
'italic' => false,
|
||
|
|
'strikethrough' => false,
|
||
|
|
'size' => 11,
|
||
|
|
'color' => [
|
||
|
|
'rgb' => '000000'
|
||
|
|
],
|
||
|
|
]
|
||
|
|
|
||
|
|
]);
|
||
|
|
//合并单元格
|
||
|
|
$event->sheet->getDelegate()->mergeCells('A1:I1');
|
||
|
|
// $event->sheet->getDelegate()->mergeCells('D'.($data[0]).':E'.($data[0]));
|
||
|
|
// $event->sheet->getDelegate()->mergeCells('D'.($data[1]).':E'.($data[1]));
|
||
|
|
// $event->sheet->getDelegate()->mergeCells('D'.($data[2]).':E'.($data[2]));
|
||
|
|
}
|
||
|
|
];
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* sheet标题
|
||
|
|
* @return string
|
||
|
|
*/
|
||
|
|
public function title(): string
|
||
|
|
{
|
||
|
|
return "第".($this->key + 1)."季度福恋程序会员收款明细表";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|