option('all'); if($options){ $this->resetAll(); }else{ $this->start(); } } private function _update($data){ $sql_fromat = 'select sum(sum_fee) as sum_fee, sum(sum_charge_balance) as sum_charge_balance, sum(sum_reward_balance) as sum_reward_balance from sub_bak5 where bid=%s and send_order_id=%s'; $sql = sprintf($sql_fromat,$data['bid'],$data['send_order_id']); $chapter = DB::connection('chapter_order_mysql')->select($sql); $sqls_fromat = 'select sum(fee) as sum_fee, sum(charge_balance) as sum_charge_balance, sum(reward_balance) as sum_reward_balance from book_orders where bid=%s and send_order_id=%s'; $sqls = sprintf($sqls_fromat,$data['bid'],$data['send_order_id']); $book = DB::select($sqls); $total_fee = 0; $charge_balance = 0; $rewrad_blance = 0; if($chapter && isset($chapter[0])){ $total_fee += (int)$chapter[0]->sum_fee; $charge_balance += (int)$chapter[0]->sum_charge_balance; $rewrad_blance += (int)$chapter[0]->sum_reward_balance; } if($book && isset($book[0])){ $total_fee += (int)$book[0]->sum_fee; $charge_balance += (int)$book[0]->sum_charge_balance; $rewrad_blance += (int)$book[0]->sum_reward_balance; } DB::table('send_orders_stats')->where('id',$data['id'])->update([ 'sum_fee'=>$total_fee, 'sum_charge_balance'=>$charge_balance, 'sum_reward_balance'=>$rewrad_blance ]); } public function start(){ $date = date('Y-m-d',time()-86400); $sql_fromat = 'select bid,send_order_id,sum(sum_fee) as sum_fee, sum(sum_charge_balance) as sum_charge_balance, sum(sum_reward_balance) as sum_reward_balance from sub_bak5 where date="%s" group BY bid,send_order_id '; $sql = sprintf($sql_fromat,$date); $chapter = DB::connection('chapter_order_mysql')->select($sql); foreach ($chapter as $c){ $update_temp = 'update send_orders_stats set sum_fee=sum_fee+'.(int)$c->sum_fee.', sum_charge_balance=sum_charge_balance+'.(int)$c->sum_charge_balance.',sum_reward_balance=sum_reward_balance+'.(int)$c->sum_reward_balance.' where bid='.(int)$c->bid.' and send_order_id='.(int)$c->send_order_id; DB::update($update_temp); } $start_date = $date; $end_date = date('Y-m-d'); $sqls = "select bid,send_order_id,sum(fee) as sum_fee, sum(charge_balance) as sum_charge_balance, sum(reward_balance) as sum_reward_balance from book_orders where created_at >='{$start_date}' and created_at <'{$end_date}' GROUP BY bid,send_order_id"; $book = DB::select($sqls); foreach ($book as $b){ $update_temp = 'update send_orders_stats set sum_fee=sum_fee+'.(int)$b->sum_fee.', sum_charge_balance=sum_charge_balance+'.(int)$b->sum_charge_balance.',sum_reward_balance=sum_reward_balance+'.(int)$b->sum_reward_balance.' where bid='.(int)$b->bid.' and send_order_id='.(int)$b->send_order_id; DB::update($update_temp); } } public function resetAll() { DB::table('send_orders_stats')->select('id', 'send_order_id', 'bid')->orderBy('id')->chunk(1000, function ($res) { foreach ($res as $v) { if ($v->send_order_id && $v->bid) { $this->_update([ 'id' => $v->id, 'send_order_id' => $v->send_order_id, 'bid' => $v->bid ]); } } }); } }