BookTest.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Jobs\SendTexts;
  4. use App\Modules\Book\Services\BookSubscribleChapterService;
  5. use App\Modules\Product\Services\ProductService;
  6. use App\Modules\Subscribe\Services\ChapterOrderService;
  7. use App\Modules\Subscribe\Services\SubstituteOrderService;
  8. use App\Modules\User\Services\ReadRecordService;
  9. use App\Modules\User\Services\UserDivisionCpcPropertyService;
  10. use App\Modules\User\Services\UserService;
  11. use App\Modules\YunQi\Models\BookUser;
  12. use App\Modules\YunQi\Models\YqUserBidRelation;
  13. use App\Modules\YunQi\Models\YqZsyTest;
  14. use App\Modules\YunQi\Services\YqZsyTestService;
  15. use GuzzleHttp\Client;
  16. use Illuminate\Console\Command;
  17. use Log;
  18. use DB;
  19. use Redis;
  20. use App\Modules\Book\Models\Book;
  21. use App\Modules\Book\Models\Chapter;
  22. use App\Modules\SendOrder\Models\SendOrder;
  23. use App\Modules\SendOrder\Services\SendOrderService;
  24. use App\Modules\Subscribe\Models\Order;
  25. use App\Jobs\SendStatisticsList;
  26. use App\Modules\OfficialAccount\Models\ForceSubscribeUsers;
  27. use App\Modules\User\Services\UserSignService;
  28. use App\Modules\Book\Models\BookUvStat;
  29. use App\Modules\Subscribe\Models\ChapterOrder;
  30. class BookTest extends Command
  31. {
  32. /**
  33. * The name and signature of the console command.
  34. *
  35. * @var string
  36. */
  37. protected $signature = 'book:test
  38. {--bid= : the id of a book}';
  39. /**
  40. * The console command description.
  41. *
  42. * @var string
  43. */
  44. protected $client;
  45. protected $description = 'Command description';
  46. /**
  47. * Create a new command instance.
  48. *
  49. * @return void
  50. */
  51. public function __construct()
  52. {
  53. parent::__construct();
  54. $this->client = new Client(['timeout' => 8.0, 'allow_redirects' => true]);
  55. }
  56. /**
  57. * Execute the console command.
  58. *
  59. * @return mixed
  60. */
  61. public function handle()
  62. {
  63. //$this->data1();
  64. //$this->testTest();
  65. //$this->activity();
  66. //$this->testBookSmartPushStats();
  67. //$this->sendOrderStats105();
  68. //$this->you2();
  69. //$this->transfromUserOrder();
  70. //$this->clearUserReadRecord();
  71. //$this->deleteToLongReadRecord();
  72. $this->clearUserReadRecord();
  73. }
  74. public function activity()
  75. {
  76. $res = \App\Modules\Activity\Services\ActivityService::ActivityStatsI(16);
  77. $str = "日期,site id,活动页面访问uv,按钮uv,生成订单数,成功支付订单数,首充用户数,点击阅读页面文字链uv,阅读页面文字链订单数,阅读页面文字链成功订单数,阅读页面文字链首充用户数,签到回调文字链uv,签到回调文字链生成订单数,签到回调文字链成功成功订单数,签到回调文字链首充用户数\r\n";
  78. $str = mb_convert_encoding($str, 'gbk');
  79. $file_name = date('Y-m-d') . '.csv';
  80. file_put_contents($file_name, $str);
  81. $temp = '';
  82. foreach ($res as $val) {
  83. $temp .= "{$val['day']},{$val['siteid']},{$val['uv']},{$val['button_uv']},{$val['order_num']},{$val['success_order_num']},{$val['first_charge_num']},{$val['reader_uv']},{$val['reader_order']},{$val['reader_success_order']},{$val['reader_first_charge']},{$val['signcallback_uv']},{$val['signcallback_order']},{$val['signcallback_success_order']},{$val['signcallback_first_charge']}\r\n";
  84. }
  85. file_put_contents($file_name, $temp, FILE_APPEND);
  86. }
  87. public function data1(){
  88. //1,图书uv
  89. $keys = Redis::SMEMBERS('book_before_five_uvs');
  90. if(!$keys){
  91. return 0;
  92. }
  93. $data = [];
  94. $book_name_arr = [];
  95. $i = 0;
  96. foreach ($keys as $k){
  97. $k_array = explode('_',$k);
  98. $uv = Redis::scard('book_before_five_uv_'.$k);
  99. Redis::del('book_before_five_uv_'.$k);
  100. if(isset($book_name_arr[$k_array[1]]) && !empty($book_name_arr[$k_array[1]])){
  101. $book_name = $book_name_arr[$k_array[1]];
  102. }else{
  103. $book_name_info = DB::table('book_configs')->where('bid',$k_array[1])->select('book_name')->first();
  104. if($book_name_info){
  105. $book_name_arr[$k_array[1]] = $book_name_info->book_name;
  106. $book_name = $book_name_info->book_name;
  107. }else{
  108. $book_name = '未知';
  109. }
  110. }
  111. $data[] = [
  112. 'bid'=>$k_array[1],
  113. 'day'=>$k_array[0],
  114. 'sequence'=>$k_array[2],
  115. 'book_name'=>$book_name,
  116. 'uv'=>$uv,
  117. 'created_at'=>date('Y-m-d H:i:s'),
  118. 'updated_at'=>date('Y-m-d H:i:s')
  119. ];
  120. $i++;
  121. if($i && $i%200 == 0){
  122. DB::table('book_five_chapter_uv')->insert($data);
  123. $data = [];
  124. }
  125. }
  126. DB::table('book_five_chapter_uv')->insert($data);
  127. Redis::del('book_before_five_uvs');
  128. }
  129. public function data2(){
  130. //强关
  131. $keys = Redis::SMEMBERS('subscribe_page_uv_send_order_ids');
  132. $data = [];
  133. $i = 0;
  134. foreach ($keys as $k){
  135. $subscribe_uv = Redis::scard('subscribe_page_uv'.$k);
  136. Redis::del('subscribe_page_uv'.$k);
  137. $data[] = [
  138. 'send_order_id'=>$k,
  139. 'subscribe_uv'=>$subscribe_uv,
  140. 'pay_uv'=>0,
  141. 'created_at'=>date('Y-m-d H:i:s'),
  142. 'updated_at'=>date('Y-m-d H:i:s')
  143. ];
  144. $i++;
  145. if($i && $i%200 == 0){
  146. DB::table('subscribe_pay_page_uv')->insert($data);
  147. $data = [];
  148. }
  149. }
  150. $keys = null;
  151. $k = null;
  152. DB::table('subscribe_pay_page_uv')->insert($data);
  153. $data = [];
  154. //支付
  155. $keys = Redis::SMEMBERS('pay_page_uv_send_order_ids');
  156. foreach ($keys as $v){
  157. $pay_uv = Redis::scard('pay_page_uv'.$v);
  158. Redis::del('pay_page_uv'.$v);
  159. $o = DB::table('subscribe_pay_page_uv')->where('send_order_id',$v)->first();
  160. if($o){
  161. DB::table('subscribe_pay_page_uv')->where('send_order_id',$v)->update([
  162. 'pay_uv'=>$pay_uv
  163. ]);
  164. }else{
  165. DB::table('subscribe_pay_page_uv')->insert([
  166. 'send_order_id'=>$v,
  167. 'subscribe_uv'=>0,
  168. 'pay_uv'=>$pay_uv,
  169. 'created_at'=>date('Y-m-d H:i:s'),
  170. 'updated_at'=>date('Y-m-d H:i:s')
  171. ]);
  172. }
  173. }
  174. Redis::del('subscribe_page_uv_send_order_ids');
  175. Redis::del('pay_page_uv_send_order_ids');
  176. }
  177. public function testTest(){
  178. $res = \App\Modules\Statistic\Services\WapVisitStatService::smartPushTestBookStats(6);
  179. echo \Hashids::encode(6).PHP_EOL;
  180. print_r($res);
  181. }
  182. private function testBookChapterStats(){
  183. function t($bid,$vip_seq){
  184. $data = [];
  185. $key1 = 'smartPushTestBookPayPageUv:bid:%s';
  186. $pay_page_uv = 0;
  187. $key2 = 'smartPushTestBookPaidUv:bid:%s';
  188. $paid_num = 0;
  189. $amount = 0;
  190. for ($i = 1;$i<=60;$i++){
  191. $key3 = 'smartPushTestBookChapterUv:bid:%s:seq:%s';
  192. $sequence_uv = (int)(Redis::scard(sprintf($key3,$bid,$i)));
  193. if(!$sequence_uv){
  194. continue;
  195. }
  196. $data[] = [
  197. 'bid'=>$bid,
  198. 'sequence'=>$i,
  199. 'sequence_uv'=>$sequence_uv,
  200. 'vip_sequence'=>$vip_seq,
  201. 'pay_page_uv'=>$pay_page_uv,
  202. 'paid_user_num'=>$paid_num,
  203. 'amount'=>$amount,
  204. 'created_at'=>date('Y-m-d H:i:s'),
  205. 'updated_at'=>date('Y-m-d H:i:s')
  206. ];
  207. //Redis::del($sequence_uv);
  208. }
  209. if($data){
  210. DB::table('test_book_smart_push_stats20190709')->insert($data);
  211. }
  212. }
  213. for ($i = 1;$i<6539;$i++){
  214. t($i,0);
  215. }
  216. }
  217. private function testBookSmartPushStats(){
  218. $sql1 = 'TRUNCATE test_book_smart_push_stats';
  219. DB::update($sql1);
  220. $result = DB::table('book_configs')->whereIn('test_status',[1,2])->select('bid','vip_seq')->get();
  221. /*foreach ($result as $v){
  222. t($v->bid,$v->vip_seq);
  223. }*/
  224. function t($bid,$vip_seq){
  225. $data = [];
  226. $key1 = 'smartPushTestBookPayPageUv:bid:%s';
  227. $pay_page_uv = (int)(Redis::scard(sprintf($key1,$bid)));
  228. $key2 = 'smartPushTestBookPaidUv:bid:%s';
  229. $paid_num = (int)(Redis::scard(sprintf($key2,$bid)));
  230. $amount = Redis::Hget('smartPushTestBookPaidAmount',$bid);
  231. if(!$amount)
  232. $amount = 0;
  233. for ($i = 1;$i<=60;$i++){
  234. $key3 = 'smartPushTestBookChapterUv:bid:%s:seq:%s';
  235. $sequence_uv = (int)(Redis::scard(sprintf($key3,$bid,$i)));
  236. if(!$sequence_uv){
  237. continue;
  238. }
  239. $data[] = [
  240. 'bid'=>$bid,
  241. 'sequence'=>$i,
  242. 'sequence_uv'=>$sequence_uv,
  243. 'vip_sequence'=>$vip_seq,
  244. 'pay_page_uv'=>$pay_page_uv,
  245. 'paid_user_num'=>$paid_num,
  246. 'amount'=>$amount,
  247. 'created_at'=>date('Y-m-d H:i:s'),
  248. 'updated_at'=>date('Y-m-d H:i:s')
  249. ];
  250. }
  251. if($data){
  252. DB::table('test_book_smart_push_stats')->insert($data);
  253. }
  254. }
  255. foreach ($result as $v){
  256. t($v->bid,$v->vip_seq);
  257. }
  258. }
  259. private function sendOrderStats105(){
  260. //$sql1 = 'TRUNCATE send_order_stats_105';
  261. //DB::update($sql1);
  262. $send_order_ids = Redis::hgetall('sendOrderIdToBid');
  263. if(!$send_order_ids){
  264. return ;
  265. }
  266. function one(int $sendOrderId,int $time){
  267. $info = SendOrderService::getById($sendOrderId);
  268. if(!$info || !$info->book_id){
  269. return ;
  270. }
  271. $subscribe_chaper_seq = 0;
  272. if($info && $info->subscribe_chapter_seq){
  273. $subscribe_chaper_seq = $info->subscribe_chapter_seq;
  274. }
  275. if(!$subscribe_chaper_seq){
  276. $subscribe = BookSubscribleChapterService::getSubcribleChapter($info->book_id,$info->distribution_channel_id);
  277. if ($subscribe) {
  278. $subscribe_chaper_seq = (isset($subscribe->subscribe_chapter_id) && $subscribe->subscribe_chapter_id > 0) ? $subscribe->subscribe_chapter_id : 0;
  279. }
  280. }
  281. $key_1 = 'accurateSendOrderSubscribePageUv:bid:%s:sendorderid:'.$sendOrderId;
  282. //强关页面uv
  283. $subscribe_uv = (int)(Redis::scard(sprintf($key_1,$info->book_id)));
  284. Redis::del( sprintf($key_1,$info->book_id) );
  285. $key_2 = 'accurateSendOrderPayPageUv:bid:%s:send_order_id:'.$sendOrderId;
  286. //付费页面UV
  287. $pay_page_uv = (int)(Redis::scard(sprintf($key_2,$info->book_id)));
  288. Redis::del( sprintf($key_2,$info->book_id) );
  289. //强关数
  290. $subscribe_num = DB::table('force_subscribe_users')
  291. ->where('send_order_id',$sendOrderId)
  292. ->where('bid',$info->book_id)
  293. ->where('created_at','>=',date('Y-m-d H:i:s',$time))
  294. ->count();
  295. $paid_user_num = DB::table('orders')
  296. ->where('send_order_id',$sendOrderId)
  297. ->where('from_bid',$info->book_id)
  298. ->where('status','PAID')
  299. ->where('created_at','>=',date('Y-m-d H:i:s',$time))
  300. ->count();
  301. $book_info = DB::table('book_configs')->where('bid',$info->book_id)->select('book_name','force_subscribe_chapter_seq','vip_seq')->first();
  302. $send_order_chapter_sequence_info = DB::table('chapters')->where('id',$info->chapter_id)->select('sequence')->first();
  303. $send_order_chapter_sequence = 0;
  304. if($send_order_chapter_sequence_info && $send_order_chapter_sequence_info->sequence){
  305. $send_order_chapter_sequence = $send_order_chapter_sequence_info->sequence;
  306. }
  307. if(!$subscribe_chaper_seq){
  308. if($book_info){
  309. $subscribe_chaper_seq = $book_info->force_subscribe_chapter_seq;
  310. }else{
  311. $subscribe_chaper_seq = 0;
  312. }
  313. }
  314. $vip_seq = 0;
  315. $vip_seq_info = Chapter::where('bid',$info->book_id)->where('is_vip',1)->orderBy('sequence')->select('sequence')->first();
  316. if($vip_seq_info){
  317. $vip_seq = $vip_seq_info->sequence;
  318. }
  319. $data = [];
  320. for ($i = 1;$i<=30;$i++){
  321. $key_3 = 'accurateSendOrderChapterUv:bid:%s:seq:%s:sendorderid:'.$sendOrderId;
  322. $chapter_seq_uv = (int)(Redis::scard(sprintf($key_3,$info->book_id,$i)));
  323. Redis::del( sprintf($key_3,$info->book_id,$i) );
  324. if(!$chapter_seq_uv){
  325. continue;
  326. }
  327. /*$data[] = [
  328. 'send_order_id'=>$sendOrderId,
  329. 'send_order_chapter_seq'=>$send_order_chapter_sequence,
  330. 'bid'=>$info->book_id,
  331. 'book_name'=>$book_info?$book_info->book_name:'xx',
  332. 'chaper_sequence'=>$i,
  333. 'chapter_uv'=>$chapter_seq_uv,
  334. 'subscribe_chaper_seq'=>$subscribe_chaper_seq,
  335. 'subscribe_page_uv'=>$subscribe_uv,
  336. 'subscribe_user_num'=>$subscribe_num,
  337. 'vip_chapter_sequence'=>$vip_seq,
  338. 'pay_page_uv'=>$pay_page_uv,
  339. 'paid_user_num'=>$paid_user_num,
  340. 'created_at'=>date('Y-m-d H:i:s'),
  341. 'updated_at'=>date('Y-m-d H:i:s')
  342. ];*/
  343. }
  344. if($data){
  345. DB::table('send_order_stats_105')->insert($data);
  346. }
  347. }
  348. foreach ($send_order_ids as $send_order_id=> $v){
  349. $array = explode('-',$v);
  350. if(count($array) == 2){
  351. one($send_order_id,$array[1]);
  352. }
  353. }
  354. Redis::del('sendOrderIdToBid');
  355. }
  356. private function you2(){
  357. $sql1 = 'TRUNCATE yq_stats2';
  358. DB::update($sql1);
  359. $info = BookUser::where('type','ENABLE')->select('bid','uid','type','updated_at')
  360. ->orderBy('updated_at')->limit(1500)->get();
  361. $info2 = BookUser::where('type','GROUP_1')
  362. ->select('bid','uid','type','updated_at')->orderBy('updated_at')->limit(1500)->get();
  363. $this->you2Type($info,'GROUP_2');
  364. $this->you2Type($info2,'GROUP_1');
  365. }
  366. private function you2Type($info,$type){
  367. $result = [];
  368. $chapter_model = new ChapterOrder();
  369. foreach ($info as $item){
  370. $to_bids = YqUserBidRelation::where('uid',$item->uid)->where('to_bid','>',0)->select('to_bid','created_at')->get();
  371. $from_bids = YqUserBidRelation::where('uid',$item->uid)->where('from_bid','>',0)->select('from_bid','created_at')->get();
  372. $chapter_model->setCurrentTable($item->uid);
  373. if($to_bids){
  374. foreach ($to_bids as $v){
  375. $to_bid = $v->to_bid;
  376. $time = $v->created_at->format('Y-m-d H:i:s');
  377. $end_time = date('Y-m-d H:i:s',strtotime($time)+2*86400);
  378. if(!$to_bid) continue;
  379. $fee = $chapter_model->where('uid',$item->uid)
  380. ->where('bid',$to_bid)
  381. ->where('created_at','>=',$time)
  382. ->where('created_at','<=',$end_time)
  383. ->sum('fee');
  384. $amount = Order::where('uid',$item->uid)
  385. ->where('from_bid',$to_bid)
  386. ->where('created_at','>=',$time)
  387. ->where('created_at','<=',$end_time)
  388. ->where('status','PAID')
  389. ->sum('price');
  390. $result[] = [
  391. 'bid'=>$to_bid,
  392. 'uid'=>$item->uid,
  393. 'fee'=>$fee,
  394. 'amount'=>$amount,
  395. 'start_time'=>$time,
  396. 'type'=>'to',
  397. 'group'=>$type,
  398. 'created_at'=>date('Y-m-d H:i:s'),
  399. 'updated_at'=>date('Y-m-d H:i:s')
  400. ];
  401. }
  402. if($result){
  403. DB::table('yq_stats2')->insert($result);
  404. $result = [];
  405. }
  406. }
  407. $to_bid = null;
  408. if($from_bids){
  409. foreach ($from_bids as $from_bid){
  410. $bid = $from_bid->from_bid;
  411. $test = YqZsyTestService::getByBid($bid);
  412. if($test) continue;
  413. $time = $from_bid->created_at->format('Y-m-d H:i:s');
  414. $end_time = date('Y-m-d H:i:s',strtotime($time)+2*86400);
  415. $fee = $chapter_model->where('uid',$item->uid)
  416. ->where('bid',$bid)
  417. ->where('created_at','>=',$time)
  418. ->where('created_at','<=',$end_time)
  419. ->sum('fee');
  420. $amount = Order::where('uid',$item->uid)
  421. ->where('from_bid',$bid)
  422. ->where('created_at','>=',$time)
  423. ->where('created_at','<=',$end_time)
  424. ->where('status','PAID')
  425. ->sum('price');
  426. $result[] = [
  427. 'bid'=>$bid,
  428. 'uid'=>$item->uid,
  429. 'fee'=>$fee,
  430. 'amount'=>$amount,
  431. 'start_time'=>$time,
  432. 'type'=>'from',
  433. 'group'=>$type,
  434. 'created_at'=>date('Y-m-d H:i:s'),
  435. 'updated_at'=>date('Y-m-d H:i:s')
  436. ];
  437. }
  438. if($result){
  439. DB::table('yq_stats2')->insert($result);
  440. $result = [];
  441. }
  442. }
  443. }
  444. }
  445. private function transfromUserOrder(){
  446. $user = DB::table('users')
  447. ->where('distribution_channel_id',4815)
  448. ->where('created_at','>=','2019-01-31 15:00:00')
  449. ->select('openid','id')
  450. ->get();
  451. $chapter_model = new ChapterOrder();
  452. foreach ($user as $v){
  453. Log::info('now user is :');
  454. Log::info('openid is: '.$v->openid.',old uid is :'.$v->id);
  455. $froce_user = DB::table('force_subscribe_users')
  456. ->where('openid',$v->openid)
  457. ->where('distribution_channel_id',384)
  458. ->select('uid')
  459. ->first();
  460. if(!$froce_user){
  461. continue;
  462. }
  463. Log::info('$froce_user user is :');
  464. Log::info('$froce_user is: '.$froce_user->uid);
  465. if($froce_user && $froce_user->uid != $v->id){
  466. $chapter_model->setCurrentTable($froce_user->uid);
  467. $data = [];
  468. //章节订购
  469. $chapter_order_info = $chapter_model->where('uid',$froce_user->uid)->get();
  470. Log::info('$chapter_order_info user is :');
  471. Log::info($chapter_order_info);
  472. if($chapter_order_info){
  473. foreach ($chapter_order_info as $chapter_order_item){
  474. $data = [
  475. 'distribution_channel_id'=>4815,
  476. 'bid'=>$chapter_order_item->bid,
  477. 'cid'=>$chapter_order_item->cid,
  478. 'chapter_name'=>$chapter_order_item->chapter_name,
  479. 'book_name'=>$chapter_order_item->book_name,
  480. 'uid'=>$v->id,
  481. 'send_order_id'=>0,
  482. 'fee'=>0,
  483. 'created_at'=>$chapter_order_item->created_at,
  484. 'updated_at'=>date('Y-m-d H:i:s'),
  485. 'charge_balance'=>0,
  486. 'reward_balance'=>0
  487. ];
  488. $chapter_model->setCurrentTable($v->id);
  489. $old = $chapter_model->where('uid',$v->id)
  490. ->where('bid',$chapter_order_item->bid)
  491. ->where('cid',$chapter_order_item->cid)
  492. ->select('id')->first();
  493. if(!$old){
  494. $chapter_model->insert($data);
  495. }
  496. }
  497. }
  498. /*if($data){
  499. Log::info('$chapter_order_info user $data is :');
  500. Log::info($data);
  501. $chapter_model->setCurrentTable($v->id);
  502. $chapter_model->insert($data);
  503. }*/
  504. //单本订购
  505. if($froce_user && $froce_user->uid != $v->id){
  506. $book_order_data = [];
  507. $book_orders = DB::table('book_orders')->where('uid',$froce_user->uid)->get();
  508. Log::info('$book_orders user is :');
  509. if($book_orders){
  510. foreach ($book_orders as $book_order_item){
  511. $book_order_data[] = [
  512. 'uid'=>$v->id,
  513. 'distribution_channel_id'=>4815,
  514. 'bid'=>$book_order_item->bid,
  515. 'book_name'=>$book_order_item->book_name,
  516. 'u'=>$book_order_item->u,
  517. 'send_order_id'=>0,
  518. 'charge_balance'=>0,
  519. 'reward_balance'=>0,
  520. 'fee'=>0,
  521. 'created_at'=>$book_order_item->created_at,
  522. 'updated_at'=>date('Y-m-d H:i:s'),
  523. ];
  524. }
  525. }
  526. if($book_order_data){
  527. Log::info('$book_order_data user is :');
  528. Log::info($book_order_data);
  529. foreach ($book_order_data as $book_o ){
  530. $old = DB::table('book_orders')
  531. ->where('uid',$book_o['uid'])
  532. ->where('bid',$book_o['bid'])
  533. ->select('id')->first();
  534. if(!$old){
  535. DB::table('book_orders')->insert($book_order_data);
  536. }
  537. }
  538. }
  539. }
  540. //阅读记录
  541. $read_bids = Redis::hgetall('book_read:' . $froce_user->uid);
  542. Log::info('$read_bids is :');
  543. Log::info($read_bids);
  544. if ($read_bids){
  545. foreach ($read_bids as $key=>$field){
  546. Redis::hset('book_read:' . $v->id,$key,$field);
  547. }
  548. }
  549. //用户信息
  550. $old_user = DB::table('users')->where('id', $froce_user->uid)->first();
  551. if($old_user){
  552. DB::table('users')->where('id',$v->id)->update([
  553. 'balance'=>$old_user->balance,
  554. 'charge_balance'=>$old_user->charge_balance,
  555. 'reward_balance'=>$old_user->reward_balance,
  556. ]);
  557. }
  558. //年费
  559. $year = DB::table('year_orders')->where('uid',$froce_user->uid)->orderBy('id','desc')->first();
  560. if($year){
  561. $old_year = DB::table('year_orders')->where('uid',$v->id)->orderBy('id','desc')->first();
  562. if(!$old_year){
  563. DB::table('year_orders')->insert([[
  564. 'uid'=>$v->id,
  565. 'begin_time'=>$year->begin_time,
  566. 'end_time'=>$year->end_time,
  567. 'distribution_channel_id'=>4815,
  568. 'created_at'=>$year->created_at,
  569. 'updated_at'=>date('Y-m-d H:i:s'),
  570. 'fee'=>0,
  571. ]]);
  572. }
  573. }
  574. }
  575. }
  576. }
  577. private function clearUserReadRecord(){
  578. $i = 108655782;
  579. //$not_uid_key = ['last_read','send_order_id','sign_count','sign_counts','sign_info','sign_day','smart_push','inner_send_order_id','gxhp','property','bind_phone_status','ua'];
  580. $k = 0;
  581. while ( $i<137406313){
  582. $i++;
  583. $last_read = ReadRecordService::getByField($i,'last_read');
  584. if(!$last_read){
  585. $k++;
  586. Redis::del('book_read:'.$i,'userRecommendBids:'.$i);
  587. continue;
  588. }
  589. $last_info = explode('_',$last_read);
  590. if(!isset($last_info[2])){
  591. $k++;
  592. Redis::del('book_read:'.$i,'userRecommendBids:'.$i);
  593. }
  594. if( (time()-$last_info[2]) >=2*30*86400 ){
  595. $record = Redis::hgetall('book_read:'.$i);
  596. $data = [];
  597. foreach ($record as $ks=>$item){
  598. $data[] = ['uid'=>$i,'field'=>$ks,'value'=>$item,
  599. 'created_at'=>date('Y-m-d H:i:s'),'updated_at'=>date('Y-m-d H:i:s')];
  600. }
  601. $k++;
  602. Redis::del('book_read:'.$i,'userRecommendBids:'.$i);
  603. DB::table('read_record_from_redis')->insert($data);
  604. }
  605. }
  606. echo 'delete ' . $k . ' keys' . PHP_EOL;
  607. }
  608. private function deleteToLongReadRecord(){
  609. $i = 10000;
  610. ReadRecordService::delTheLastRecord(109861757);
  611. while ($i <= 35600000){
  612. ReadRecordService::delTheLastRecord($i);
  613. $i++;
  614. }
  615. }
  616. private function userPropertyV2(){
  617. $tmp = 0;
  618. //19493455
  619. while (true){
  620. $info = DB::table('orders')
  621. ->select('id','uid','price','status')
  622. ->where('id','>',$tmp)
  623. ->orderBy('id')
  624. ->limit(1000)
  625. ->get();
  626. if($info->isEmpty()) break;
  627. foreach ($info as $item){
  628. if($item->status != 'PAID') continue;
  629. //$old = UserDivisionCpcPropertyService::getUserPropertyV2($item->uid);
  630. //if($old) continue;
  631. $property = UserDivisionCpcPropertyService::calculateUserPropertyV2($item->uid);
  632. if($property){
  633. $info = UserDivisionCpcPropertyService::getUserPropertyV2($item->uid);
  634. if($info == 'none'){
  635. DB::table('user_division_cpc_property_v2')->insert([
  636. 'openid'=>$property['openid'],
  637. 'property'=>$property['property'],
  638. 'is_enable'=>1,
  639. 'created_at'=>date('Y-m-d H:i:s'),
  640. 'updated_at'=>date('Y-m-d H:i:s')
  641. ]);
  642. }
  643. if($info == 'high') continue;
  644. UserDivisionCpcPropertyService::updateV2($property);
  645. }
  646. }
  647. $tmp = $item->id;
  648. if($tmp >=19493455) break;
  649. }
  650. }
  651. }