182 lines
8.1 KiB
PHP
182 lines
8.1 KiB
PHP
|
|
<?php
|
|||
|
|
|
|||
|
|
namespace App\Exports\Sheets;
|
|||
|
|
|
|||
|
|
use App\Models\Consultation;
|
|||
|
|
use App\Models\Course\Course;
|
|||
|
|
use App\Models\Live\Anchor;
|
|||
|
|
use App\Models\MerchantShop;
|
|||
|
|
use App\Models\Order;
|
|||
|
|
use App\Models\Server\CommunityActivity;
|
|||
|
|
use App\Models\Server\MEarning;
|
|||
|
|
use App\Models\Server\MerchantAccount;
|
|||
|
|
use App\Models\Server\MerchantEvaluate;
|
|||
|
|
use App\Models\Server\MerchantTransferLog;
|
|||
|
|
use App\Models\Server\MerchantUser;
|
|||
|
|
use App\Models\TouristOrder;
|
|||
|
|
use Illuminate\Support\Facades\Log;
|
|||
|
|
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 SaasIncomeV2 implements FromCollection, WithTitle, WithEvents, WithStrictNullComparison, ShouldAutoSize,WithColumnFormatting
|
|||
|
|
{
|
|||
|
|
protected $start_date, $end_date;
|
|||
|
|
public function __construct($start_date, $end_date)
|
|||
|
|
{
|
|||
|
|
$this->start_date = $start_date;
|
|||
|
|
$this->end_date = $end_date;
|
|||
|
|
}
|
|||
|
|
public function saasContent($start_date, $end_date)
|
|||
|
|
{
|
|||
|
|
$rows = [
|
|||
|
|
["深圳福恋智能信息科技有限公司
|
|||
|
|
|
|||
|
|
SAAS收入明细表", '', '', '', '','','','','','',''],
|
|||
|
|
['ID',"订单号", "商户", "性质", "类型",'商品名称', '金额', '订单退款金额', '手续费率', '手续费', '订单时间', '结算时间', '下单月份']
|
|||
|
|
];
|
|||
|
|
// $earnings = MEarning::with('order', 'order.refunds')->whereHas('order')->where('value', ">", 0)->whereBetween('created_at', [$start_date, $end_date])->get();
|
|||
|
|
$orders = TouristOrder::with("refunds",'earnings')->where('pay_type', '!=', 'free')->where("price", '>', 0)->where('pay_status', "!=", 0)->whereBetween('created_at', [$start_date, $end_date])->get();
|
|||
|
|
$pre_id = null;
|
|||
|
|
foreach ($orders as $order)
|
|||
|
|
{
|
|||
|
|
$goods_name = $order->desc;
|
|||
|
|
if (empty($order->desc)) {
|
|||
|
|
switch ($order->type) {
|
|||
|
|
case "community":
|
|||
|
|
$goods_name = CommunityActivity::where('id', $order->type_id)->value('title');
|
|||
|
|
break;
|
|||
|
|
case "course":
|
|||
|
|
$goods_name = Course::where('id', $order->type_id)->value('title');
|
|||
|
|
break;
|
|||
|
|
case "consult":
|
|||
|
|
$goods_name = Consultation::where('id', $order->type_id)->value("title");
|
|||
|
|
break;
|
|||
|
|
case "evaluate":
|
|||
|
|
$goods_name = MerchantEvaluate::where("id", $order->type_id)->value("title");
|
|||
|
|
break;
|
|||
|
|
case "shop":
|
|||
|
|
$goods_name = MerchantShop::where("id", $order->type_id)->value("title");
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$nature = "代收代付";
|
|||
|
|
if ($order->merchant_id == 491) {
|
|||
|
|
$nature = "福恋";
|
|||
|
|
}elseif ($order->merchant_id == 44) {
|
|||
|
|
$nature = "福恋(友福)";
|
|||
|
|
}
|
|||
|
|
if ($order->earnings()->count()) {
|
|||
|
|
foreach ($order->earnings as $earning) {
|
|||
|
|
if ($earning->m_user_id) {
|
|||
|
|
$name = MerchantUser::where('id', $earning->m_user_id)->value('nickname')?:"";
|
|||
|
|
$name = "用户( $name )";
|
|||
|
|
$poundage = 0.02;
|
|||
|
|
}else{
|
|||
|
|
$name = Anchor::where('m_id', $earning->m_id)->value('name')?:"";
|
|||
|
|
$name = "商家( $name )";
|
|||
|
|
$poundage = $order->merchant?($order->merchant->poundage / 100) :0.02;
|
|||
|
|
}
|
|||
|
|
$type = "代付";
|
|||
|
|
$value = "-".$earning->value;
|
|||
|
|
if ($order->type == 'transfer') {
|
|||
|
|
$log = MerchantTransferLog::where('m_earning_id', $earning->id)->first();
|
|||
|
|
if (empty($log)) dd($earning->id);
|
|||
|
|
$merchant = MerchantAccount::where('id', $log->m_id)->first();
|
|||
|
|
$merchant_name = $merchant&&$merchant->anchorV2?$merchant->anchorV2->name:"未知";
|
|||
|
|
$type = "<$merchant_name>转账";
|
|||
|
|
$value = $earning->value;
|
|||
|
|
}else{
|
|||
|
|
if ($pre_id != $earning->m_order_id) {//新订单
|
|||
|
|
$index = 0;
|
|||
|
|
//提现费率
|
|||
|
|
//订单退款
|
|||
|
|
$refund_price = $order->refunds->sum('refund_fee')?:0;
|
|||
|
|
//订单代收
|
|||
|
|
$rows[] = [$order->id."-$index", $order->trade_no.' ', "福恋平台", $nature, "代收", $goods_name, $order->price, $refund_price, 0.006, "-".number_format(($order->price - $refund_price) * 0.006, 2, '.',''), $order->created_at, $earning->created_at, date('m', strtotime($start_date))];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$index++;
|
|||
|
|
if ($order->merchant_id == 491 && $earning->m_user_id == 0) {
|
|||
|
|
$poundage_fee = 0;
|
|||
|
|
}else {
|
|||
|
|
$poundage_fee = number_format($earning->value * $poundage, 4, '.','');
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
$rows[] = [$order->id."-$index", $order->trade_no.' ', $name, $nature, $type, $goods_name, $value, 0, $poundage, $poundage_fee, $order->created_at, $earning->created_at, date('m', strtotime($start_date))];
|
|||
|
|
|
|||
|
|
$pre_id = $earning->m_order_id;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}else {
|
|||
|
|
$value = $order->price;
|
|||
|
|
$refund_price = $order->refunds->sum('refund_fee')?:0;
|
|||
|
|
$rows[] = [$order->id, $order->trade_no.' ', "福恋平台", $nature, "代收", $goods_name, $value, $refund_price, 0, 0, $order->created_at, "未结算", date('m', strtotime($start_date))];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return $rows;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function collection()
|
|||
|
|
{
|
|||
|
|
$rows = $this->saasContent($this->start_date, $this->end_date);
|
|||
|
|
return collect($rows);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function columnFormats(): array
|
|||
|
|
{
|
|||
|
|
return [
|
|||
|
|
'G' => NumberFormat::FORMAT_NUMBER_00, //金额保留两位小数
|
|||
|
|
'H' => NumberFormat::FORMAT_GENERAL, //金额保留两位小数
|
|||
|
|
'I' => NumberFormat::FORMAT_GENERAL, //金额保留两位小数
|
|||
|
|
'J' => NumberFormat::FORMAT_NUMBER_00, //金额保留两位小数
|
|||
|
|
// 'B' => NumberFormat::FORMAT_NUMBER, //订单号
|
|||
|
|
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function registerEvents(): array
|
|||
|
|
{
|
|||
|
|
return [
|
|||
|
|
AfterSheet::class => function(AfterSheet $event) {
|
|||
|
|
//设置列宽
|
|||
|
|
$arr = ['B','C','D','E','F',"G","H",'I','J','K', 'L',"M"];
|
|||
|
|
foreach ($arr as $value) {
|
|||
|
|
$event->sheet->getDelegate()->getColumnDimension($value)->setWidth(20);
|
|||
|
|
}
|
|||
|
|
$event->sheet->getDelegate()->getColumnDimension("C")->setWidth(50);
|
|||
|
|
$event->sheet->getDelegate()->getColumnDimension("F")->setWidth(50);
|
|||
|
|
|
|||
|
|
//自动换行
|
|||
|
|
$event->sheet->getStyle("A1:M1")->getAlignment()->setWrapText(TRUE);
|
|||
|
|
$event->sheet->getDelegate()->getRowDimension(1)->setRowHeight(50);
|
|||
|
|
// //设置行高,$i为数据行数
|
|||
|
|
for ($i = 2; $i<=1265; $i++) {
|
|||
|
|
$event->sheet->getDelegate()->getRowDimension($i)->setRowHeight(30);
|
|||
|
|
}
|
|||
|
|
// //设置区域单元格垂直居中
|
|||
|
|
$event->sheet->getDelegate()->getStyle('A1:M1265')->getAlignment()->setVertical('center');
|
|||
|
|
// //设置区域单元格水平居中
|
|||
|
|
$event->sheet->getDelegate()->getStyle('A1:M1265')->getAlignment()->setHorizontal('center');
|
|||
|
|
//合并单元格
|
|||
|
|
$event->sheet->getDelegate()->mergeCells('A1:M1');
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @return string
|
|||
|
|
*/
|
|||
|
|
public function title(): string
|
|||
|
|
{
|
|||
|
|
return 'Saas收入';
|
|||
|
|
}
|
|||
|
|
}
|