option('month'); if(!$month){ $this->error('month necessary'); } $cpNames = DB::table('cps') ->select('cp_name') ->get()->pluck('cp_name'); $datas = DB::table('cp_subscribe_statistic_data') ->where([ 'month' => $month ])->select( DB::raw('count(distinct bid) as book_num'), 'cp_name' )->groupBy('cp_name') ->get()->keyBy('cp_name'); $insertDatas = []; $now = date('Y-m-d H:i:s'); foreach ($cpNames as $cpName) { $bookFinalAmounts = []; $bids = DB::table('cp_subscribe_statistic_data') ->where(['cp_name' => $cpName, 'month' => $month]) ->distinct() ->select('bid') ->get()->pluck('bid'); $finalAmount = 0; DB::table('cp_book_month_final_amounts') ->where(['cp_name' => $cpName, 'month' => $month]) ->update(['is_enabled' => 0, 'updated_at' => $now]); foreach ($bids as $bid) { $service = new BookSettlement($bid, $month); $service->traceContext = TraceContext::newFromParent(app(TraceContext::class)->getTraceInfo()); $bookFinalAmountDetails = $service->detail(); $monthFinalAmount = array_sum($bookFinalAmountDetails); $finalAmount += $monthFinalAmount; $bookFinalAmounts[] = [ 'bid' => $bid, 'cp_name' => $cpName, 'month' => $month, 'final_amount' => $monthFinalAmount, 'created_at' => $now, 'updated_at' => $now, ]; } DB::table('cp_book_month_final_amounts') ->insert($bookFinalAmounts); $insertDatas[] = [ 'book_num' => $datas->get($cpName)->book_num ?? 0, 'final_amount' => $finalAmount, 'cp_name' => $cpName, 'month' => $month, 'created_at' => $now, 'updated_at' => $now, ]; } DB::table('cp_subscribe_month_statistic_data') ->insert($insertDatas); } }