jingcai-php/app/Jobs/ComputeCtzqSfc9OrderPrize.php

99 lines
3.1 KiB
PHP
Executable File

<?php
namespace App\Jobs;
use App\Enums\BoolEnum;
use App\Enums\LottState;
use App\Enums\LottType;
use App\Events\OrderWinedEvent;
use App\Model\Config;
use App\Model\Order;
use App\Model\OrderCtzqSfcResult;
use App\Model\Zq\CtzqSfc;
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\Log;
class ComputeCtzqSfc9OrderPrize implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $orderId;
public function __construct($orderId)
{
$this->orderId = $orderId;
$this->queue = config('queue.names.compute_order_prize');
}
public function handle()
{
Log::info('ComputeCtzqSfc9OrderPrize::start, orderId:' . $this->orderId);
$order = Order::find($this->orderId);
if (!$order) {
Log::error('ComputeCtzqBqcOrderPrize 订单状不存在, orderId:' . $this->orderId);
return;
}
if ($order->lottery_state != LottState::WAIT) {
Log::error('ComputeCtzqSfc9OrderPrize 订单状态不是待开奖状态, orderId:' . $this->orderId);
return;
}
$unPublishes = OrderCtzqSfcResult::where('order_id', $this->orderId)
->where('lottery_type', LottType::CTZQ_SFC9)
->where('published', BoolEnum::NO)
->count();
if ($unPublishes > 0) {
Log::error('ComputeCtzqSfc9OrderPrize has no publish match, orderId:' . $this->orderId);
return;
}
$orderResults = OrderCtzqSfcResult::where('order_id', $this->orderId)
->where('lottery_type', LottType::CTZQ_SFC9)
->get();
if (!$orderResults || count($orderResults) < 9) {
Log::error('ComputeCtzqSfc9OrderPrize 不够9场比赛数据, orderId:' . $this->orderId);
return;
}
$win = true;
$ctzqSfcId = 0;
foreach ($orderResults as $orderResult) {
$ctzqSfcId = $orderResult->ctzq_sfc_id;
if ($orderResult->result != '*' && !in_array($orderResult->result, $orderResult->odds)) {
$win = false;
break;
}
}
$winPrize = 0;
if ($win) {
$ctzqSfc = CtzqSfc::find($ctzqSfcId);
$winPrize = $ctzqSfc->first_prize_val_nine;
}
$winTaxPrize = Config::getAfterTaxPrize($winPrize);
$winPrize = $winPrize * $order->bets_num;
$winTaxPrize = $winTaxPrize * $order->bets_num;
$order->lottery_state = $win ? LottState::WIN : LottState::LOSS;
$order->lottery_prize = $winPrize;
$order->lottery_tax_prize = $winTaxPrize;
$order->lottery_should_send_prize = $winTaxPrize;
if ($win) {
$order->win_date = date('Ymd');
}
$order->save();
$order->updateUnionOrderState($order->lottery_state);
if ($win) {
OrderWinedEvent::dispatch($order->id);
}
}
}