love_php/app/Exports/Sheets/SaasIncomeV2.php
2026-04-02 09:20:51 +08:00

182 lines
8.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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收入';
}
}