SubscribeDataStats.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use DB;
  5. use Log;
  6. class SubscribeDataStats extends Command
  7. {
  8. /**
  9. * The name and signature of the console command.
  10. *
  11. * @var string
  12. */
  13. protected $signature = 'book:subds {--all}';
  14. /**
  15. * The console command description.
  16. *
  17. * @var string
  18. */
  19. protected $description = 'Command description';
  20. /**
  21. * Create a new command instance.
  22. *
  23. * @return void
  24. */
  25. public function __construct()
  26. {
  27. parent::__construct();
  28. }
  29. /**
  30. * Execute the console command.
  31. *
  32. * @return mixed
  33. */
  34. public function handle()
  35. {
  36. $options = $this->option('all');
  37. if($options){
  38. $this->resetAll();
  39. }else{
  40. $this->start();
  41. }
  42. }
  43. private function _update($data){
  44. $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';
  45. $sql = sprintf($sql_fromat,$data['bid'],$data['send_order_id']);
  46. $chapter = DB::connection('chapter_order_mysql')->select($sql);
  47. $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';
  48. $sqls = sprintf($sqls_fromat,$data['bid'],$data['send_order_id']);
  49. $book = DB::select($sqls);
  50. $total_fee = 0;
  51. $charge_balance = 0;
  52. $rewrad_blance = 0;
  53. if($chapter && isset($chapter[0])){
  54. $total_fee += (int)$chapter[0]->sum_fee;
  55. $charge_balance += (int)$chapter[0]->sum_charge_balance;
  56. $rewrad_blance += (int)$chapter[0]->sum_reward_balance;
  57. }
  58. if($book && isset($book[0])){
  59. $total_fee += (int)$book[0]->sum_fee;
  60. $charge_balance += (int)$book[0]->sum_charge_balance;
  61. $rewrad_blance += (int)$book[0]->sum_reward_balance;
  62. }
  63. DB::table('send_orders_stats')->where('id',$data['id'])->update([
  64. 'sum_fee'=>$total_fee,
  65. 'sum_charge_balance'=>$charge_balance,
  66. 'sum_reward_balance'=>$rewrad_blance
  67. ]);
  68. }
  69. public function start(){
  70. $date = date('Y-m-d',time()-86400);
  71. $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 ';
  72. $sql = sprintf($sql_fromat,$date);
  73. $chapter = DB::connection('chapter_order_mysql')->select($sql);
  74. foreach ($chapter as $c){
  75. $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;
  76. DB::update($update_temp);
  77. }
  78. $start_date = $date;
  79. $end_date = date('Y-m-d');
  80. $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";
  81. $book = DB::select($sqls);
  82. foreach ($book as $b){
  83. $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;
  84. DB::update($update_temp);
  85. }
  86. }
  87. public function resetAll()
  88. {
  89. DB::table('send_orders_stats')->select('id', 'send_order_id', 'bid')->orderBy('id')->chunk(1000, function ($res) {
  90. foreach ($res as $v) {
  91. if ($v->send_order_id && $v->bid) {
  92. $this->_update([
  93. 'id' => $v->id,
  94. 'send_order_id' => $v->send_order_id,
  95. 'bid' => $v->bid
  96. ]);
  97. }
  98. }
  99. });
  100. }
  101. }