BookTest.php 28 KB

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