dltService = app(DltService::class); $this->orderId = $orderId; $this->queue = config('queue.names.compute_order_prize'); } public function handle() { Log::info('ComputeDltOrderPrize::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('ComputeDltOrderPrize 订单状态不是待开奖状态, orderId:' . $this->orderId); return; } $dlt = Dlt::where('issue_num', $order->issue_num)->where('state', BoolEnum::YES)->first(); if (!$dlt) { Log::error('ComputeDltOrderPrize 无此期号:', [ 'order_id' => $this->orderId, 'issue_num' => $order->issue_num, ]); return; } $prizeInfo = $this->getWinPrize($order->odds, $dlt); $win = $prizeInfo['win']; $winPrize = $prizeInfo['prize']; $winTaxPrize = $prizeInfo['should_send_prize']; $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); } } public function getWinPrize($odds, Dlt $dlt) { $win = false; $prizeAll = 0; $shouldSendPrize = 0; foreach ($odds as $item) { $enableAdd = Arr::get($item, 'enable_add', 0); if ($item['play_type'] == PlayType::DLT_DANSHI) { $prizeInfo = $this->dltService->danshiWinPrize($dlt, $item['play_odd'], $enableAdd); if ($prizeInfo) { Log::warning('ComputeDltOrderPrize,wined_prize_good:', [ 'play_type' => $item['play_type'], 'play_odd' => $item['play_odd'], 'prize_info' => $prizeInfo, 'order_id' => $this->orderId ]); $win = true; $shouldSendPrize += $prizeInfo['prize_after_tax'] * $item['bets_num']; $prizeAll += $prizeInfo['prize']*$item['bets_num']; } continue; } if ($item['play_type'] == PlayType::DLT_FUSHI) { $danshiList = $this->dltService->fushiToDanshi($item); foreach ($danshiList as $danshiPlayOdd) { $prizeInfo3 = $this->dltService->danshiWinPrize($dlt, $danshiPlayOdd, $enableAdd); if ($prizeInfo3) { Log::warning('ComputeDltOrderPrize,wined_prize_good:', [ 'play_type' => $item['play_type'], 'play_odd' => $item['play_odd'], 'danshi_play_odd' => $danshiPlayOdd, 'prize_info' => $prizeInfo3, 'order_id' => $this->orderId ]); $win = true; $shouldSendPrize += $prizeInfo3['prize_after_tax'] * $item['bets_num']; $prizeAll += $prizeInfo3['prize']*$item['bets_num']; } } continue; } if ($item['play_type'] == PlayType::DLT_DANTUO) { $danshiList = $this->dltService->dantuoToDanshi($item); foreach ($danshiList as $danshiPlayOdd) { $prizeInfo2 = $this->dltService->danshiWinPrize($dlt, $danshiPlayOdd, $enableAdd); if ($prizeInfo2) { Log::warning('ComputeDltOrderPrize,wined_prize_good:', [ 'play_type' => $item['play_type'], 'play_odd' => $item['play_odd'], 'danshi_play_odd' => $danshiPlayOdd, 'prize_info' => $prizeInfo2, 'order_id' => $this->orderId ]); $win = true; $shouldSendPrize += $prizeInfo2['prize_after_tax'] * $item['bets_num']; $prizeAll += $prizeInfo2['prize']*$item['bets_num']; } } continue; } } return [ 'win' => $win, 'prize' => $prizeAll, 'should_send_prize' => $shouldSendPrize ]; } }