103 lines
3.1 KiB
PHP
Executable File
103 lines
3.1 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Jobs;
|
|
|
|
use App\Enums\LottState;
|
|
use App\Enums\OrderType;
|
|
use App\Enums\PayState;
|
|
use App\Events\OrderWinedEvent;
|
|
use App\Model\Customer\Customer;
|
|
use App\Model\Order;
|
|
use App\Service\CustomerWalletService;
|
|
use App\Service\External\WechatService;
|
|
use Illuminate\Bus\Queueable;
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
use Illuminate\Foundation\Bus\Dispatchable;
|
|
use Illuminate\Queue\InteractsWithQueue;
|
|
use Illuminate\Queue\SerializesModels;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
/**
|
|
* 中奖后,累计中奖,代红人数
|
|
*/
|
|
class HandleOrderWin implements ShouldQueue
|
|
{
|
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
|
|
|
/** @var OrderWinedEvent */
|
|
protected $event;
|
|
|
|
public function __construct($event)
|
|
{
|
|
$this->event = $event;
|
|
$this->queue = config('queue.names.handle_order_win');
|
|
}
|
|
|
|
public function handle()
|
|
{
|
|
Log::info('HandleOrderWin start ', $this->event->getEventData());
|
|
$order = Order::find($this->event->orderId);
|
|
if (!$order) {
|
|
Log::error('HandleOrderWin not found order ', $this->event->getEventData());
|
|
return;
|
|
}
|
|
if ($order->lottery_state != LottState::WIN && $order->lottery_state != LottState::SEND) {
|
|
Log::error('HandleOrderWin not win', $this->event->getEventData());
|
|
return;
|
|
}
|
|
|
|
if ($order->type == OrderType::UNION) {
|
|
$this->handleUnionOrder($order);
|
|
} else {
|
|
$this->handleUnUnionOrder($order);
|
|
}
|
|
|
|
if ($order->type == OrderType::FADAN) {
|
|
$this->handleFadanOrder($order);
|
|
}
|
|
}
|
|
|
|
public function handleFadanOrder(Order $order) {
|
|
$gendanNum = Order::where('pid', $order->id)
|
|
->where('pay_state', PayState::SUCCESS)
|
|
->count();
|
|
Customer::where('id', $order->customer_id)
|
|
->update([
|
|
'gendan_num' => DB::raw("`gendan_num` + {$gendanNum}")
|
|
]);
|
|
Log::info('handleFadanOrder ---', [
|
|
'order_id' => $order->id,
|
|
'gendan_num' => $gendanNum,
|
|
]);
|
|
}
|
|
|
|
public function handleUnionOrder(Order $order) {
|
|
|
|
$perPrize = $order->lottery_prize / $order->union_piece_total;
|
|
// 合买参与人的数据
|
|
$unionOrders = Order::where('type', OrderType::UNION)
|
|
->where('pid', $order->id)
|
|
->get();
|
|
foreach ($unionOrders as $unionOrder) {
|
|
|
|
$buyPiece = $unionOrder->union_piece_self;
|
|
if ($unionOrder->id == $unionOrder->pid) {
|
|
$buyPiece = $unionOrder->union_piece_self + $unionOrder->union_piece_keep;
|
|
}
|
|
$winPrize = $perPrize * $buyPiece;
|
|
Customer::where('id', $unionOrder->customer_id)->update([
|
|
'win_prize_total' => DB::raw("`win_prize_total` + {$winPrize}")
|
|
]);
|
|
}
|
|
}
|
|
|
|
public function handleUnUnionOrder(Order $order) {
|
|
Customer::where('id', $order->customer_id)->update([
|
|
'win_prize_total' => DB::raw("`win_prize_total` + {$order->lottery_prize}")
|
|
]);
|
|
|
|
}
|
|
|
|
}
|