94 lines
2.6 KiB
PHP
Executable File
94 lines
2.6 KiB
PHP
Executable File
<?php
|
||
|
||
namespace App\Listeners;
|
||
|
||
use App\Enums\LottState;
|
||
use App\Enums\OrderType;
|
||
use App\Events\OrderTicketedEvent;
|
||
use App\Jobs\ComputeCustomerBuyLevelScore;
|
||
use App\Model\Customer\Customer;
|
||
use App\Model\Order;
|
||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||
use Illuminate\Support\Facades\Log;
|
||
|
||
class OrderTicketedListener implements ShouldQueue
|
||
{
|
||
/**
|
||
* Create the event listener.
|
||
*
|
||
* @return void
|
||
*/
|
||
public function __construct()
|
||
{
|
||
}
|
||
|
||
// 1、普通:累加方案金额和2倍中奖
|
||
// 1、合买:累加方案金额和2倍中奖;参与人只累加购买
|
||
// 1、发单:累加方案金额和2倍中奖;跟单人累加购买和中
|
||
public function handle(OrderTicketedEvent $event)
|
||
{
|
||
// 用户统计积分
|
||
ComputeCustomerBuyLevelScore::dispatch($event->orderId);
|
||
|
||
// 处理订单相关
|
||
$this->handleOrder($event->orderId);
|
||
}
|
||
|
||
public function handleOrder($orderId)
|
||
{
|
||
$order = Order::find($orderId);
|
||
if (!$order) {
|
||
return;
|
||
}
|
||
if ($order->type == OrderType::GENDAN) {
|
||
$this->sumGendanNum($order->pid);
|
||
}
|
||
|
||
if ($order->type == OrderType::FADAN) {
|
||
$this->markCustomerFadan($order);
|
||
}
|
||
}
|
||
|
||
public function sumGendanNum($fadanId)
|
||
{
|
||
$fadanOrder = Order::where('type', OrderType::FADAN)->find($fadanId);
|
||
if (!$fadanOrder) {
|
||
Log::error('sumGendanNum error not found fadanId:' . $fadanId);
|
||
return;
|
||
}
|
||
|
||
$gendanNum = Order::where('pid', $fadanId)
|
||
->where('id', '<>', $fadanId)
|
||
->whereIn('lottery_state', $fadanOrder->gendanLotteryState())
|
||
->count();
|
||
$gendanMoney = Order::where('pid', $fadanId)
|
||
->where('id', '<>', $fadanId)
|
||
->whereIn('lottery_state', $fadanOrder->gendanLotteryState())
|
||
->sum('money');
|
||
$fadanOrder->gendan_num = $gendanNum;
|
||
$fadanOrder->gendan_money = $gendanMoney;
|
||
$fadanOrder->save();
|
||
}
|
||
|
||
public function markCustomerFadan($order)
|
||
{
|
||
if ($order->type != OrderType::FADAN) {
|
||
return;
|
||
}
|
||
$customer = Customer::find($order->customer_id);
|
||
if (!$customer) {
|
||
return;
|
||
}
|
||
|
||
$states = [LottState::WAIT, LottState::WIN, LottState::LOSS, LottState::SEND];
|
||
$fadanNum = Order::where('customer_id', $customer->id)
|
||
->where('type', OrderType::FADAN)
|
||
->where('pay_state', 'success')
|
||
->whereIn('lottery_state', $states)
|
||
->count();
|
||
|
||
$customer->fadan_num = $fadanNum;
|
||
$customer->save();
|
||
}
|
||
}
|