jingcai-php/app/Console/Commands/Report/GenerateDaySeller.php

110 lines
3.2 KiB
PHP
Executable File

<?php
namespace App\Console\Commands\Report;
use App\Model\Order;
use App\Model\Report\ReportDaySeller;
use App\Model\Seller\Seller;
use App\Model\Seller\ShopBill;
use App\Utils\Helps;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class GenerateDaySeller extends Command
{
/**
* 这个就是命令名称
*/
protected $signature = 'report:generate_day_seller {cdate?}';
/**
* 命令的说明描述
* @var string
*/
protected $description = '';
/**
* 创建命令的构造方法。
* @param string $words 传入的字符参数
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* 命令的具体执行触发方法
* @return mixed
*/
public function handle()
{
$cdate = $this->argument('cdate');
if (!$cdate) {
$cdate = date('Ymd', strtotime('-1 day'));
}
Seller::chunkById(500, function ($sellers) use ($cdate) {
foreach ($sellers as $seller) {
$this->report($seller, $cdate);
}
});
}
public function report(Seller $seller, $cdate)
{
$chupiaoMoneyRow = Order::select([
DB::raw('sum(IF(type = 3, union_money, money)) as m')
])
->usable()
->where('draft_date', $cdate)
->where('draft_user_id', $seller->id)
->first();
$chupiaoMoney = $chupiaoMoneyRow ? $chupiaoMoneyRow->m : 0;
$sendMoneyRow = Order::select([
DB::raw('sum(IF(type = 3, union_send_prize, lottery_send_prize)) as m')
])
->usable()
->where('send_date', $cdate)
->where('send_user_id', $seller->id)
->first();
$sendMoney = $sendMoneyRow ? $sendMoneyRow->m : 0;
$winMoneyRow = Order::select([
DB::raw('sum(IF(type = 3, union_should_send_prize, lottery_should_send_prize)) as m')
])
->usable()
->where('draft_date', $cdate)
->where('draft_user_id', $seller->id)
->first();
$winMoney = $winMoneyRow ? $winMoneyRow->m : 0;
$incrMoney = ShopBill::where('created_date', $cdate)
->where('type', ShopBill::TYPE_SELLER_INCR)
->where('seller_id', $seller->id)
->sum('money');
$reduceMoney = ShopBill::where('created_date', $cdate)
->where('type', ShopBill::TYPE_SELLER_REDUCE)
->where('seller_id', $seller->id)
->sum('money');
$report = ReportDaySeller::where('seller_id', $seller->id)
->where('cdate', $cdate)
->first();
if (!$report) {
$report = new ReportDaySeller();
}
$report->seller_id = $seller->id;
$report->shop_id = $seller->shop_id;
$report->cdate = $cdate;
$report->chupiao_money = Helps::floatFormat($chupiaoMoney);
$report->send_prize = Helps::floatFormat($sendMoney);
$report->win_prize = Helps::floatFormat($winMoney);
$report->incr_money = Helps::floatFormat($incrMoney);
$report->reduce_money = Helps::floatFormat($reduceMoney);
$report->save();
return $report;
}
}