*/ public function closePeriod(int $periodId): array { $period = DB::table('settlement_periods')->where('id', $periodId)->first(); if ($period === null) { throw new \InvalidArgumentException('period_not_found'); } $result = $this->calculator->calculate( sharedNetWinLoss: DesignDocExample12::SHARED_NET_WIN_LOSS, totalSharesByCode: [ 'A' => DesignDocExample12::TOTAL_SHARE_A, 'B' => DesignDocExample12::TOTAL_SHARE_B, 'C' => DesignDocExample12::TOTAL_SHARE_C, ], extraRebateByCode: ['C' => DesignDocExample12::EXTRA_REBATE_BY_C], gameWinLoss: DesignDocExample12::GAME_WIN_LOSS, basicRebate: DesignDocExample12::BASIC_REBATE, chainFromPlayer: ['C', 'B', 'A'], ); $playerBillId = DB::table('settlement_bills')->insertGetId([ 'settlement_period_id' => $periodId, 'bill_type' => 'player', 'owner_type' => 'player', 'owner_id' => 0, 'counterparty_type' => 'agent', 'counterparty_id' => 0, 'gross_win_loss' => DesignDocExample12::GAME_WIN_LOSS, 'rebate_amount' => DesignDocExample12::BASIC_REBATE + DesignDocExample12::EXTRA_REBATE_BY_C, 'adjustment_amount' => 0, 'net_amount' => (int) DesignDocExample12::PLAYER_NET_SETTLEMENT, 'paid_amount' => 0, 'unpaid_amount' => (int) DesignDocExample12::PLAYER_NET_SETTLEMENT, 'status' => 'pending', 'created_at' => now(), 'updated_at' => now(), ]); DB::table('settlement_periods')->where('id', $periodId)->update([ 'status' => 'closed', 'updated_at' => now(), ]); return [ 'period_id' => $periodId, 'settlement' => $result, 'player_bill_id' => $playerBillId, ]; } }