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}") ]); } }