HourlyWorkCommand.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <?php
  2. require_once(APP_PATH."/protected/vendors/tencent/XingeApp.php");
  3. class HourlyWorkCommand extends CConsoleCommand{
  4. public function run($args) {
  5. error_reporting(E_ERROR);
  6. ini_set('memory_limit', '256M');
  7. set_time_limit(0);
  8. //用户活跃度异步任务
  9. $list = new ARedisList('user_active_list');
  10. while ($list->getCount() > 0) {
  11. $key = $list->pop();
  12. try {
  13. Service::factory('LevelService')->addActive($key);
  14. } catch (Exception $e) {
  15. continue;
  16. }
  17. }
  18. $end_time = time();
  19. $start_time = $end_time - 3600*2;
  20. $criteria = new EMongoCriteria();
  21. $criteria->time('>=',$start_time);
  22. $criteria->time('<',$end_time);
  23. $cursor = Topic::model()->findAll($criteria);
  24. $i=1;
  25. $docs_to_upload = array();
  26. foreach ($cursor as $topic) {
  27. $i++;
  28. if($i%200 == 0){
  29. $result = Service::factory('SearchService')->addTopic($docs_to_upload);
  30. var_dump($result);
  31. sleep(3);
  32. $docs_to_upload = array();
  33. }
  34. $item = array();
  35. $item['cmd'] = 'update';
  36. //添加文档内容
  37. $item["fields"] = array(
  38. 'id'=>(string)$topic->_id,
  39. "content" => $topic->content,
  40. "search_rank" => $topic->search_rank,
  41. 'status'=>$topic->status,
  42. 'time'=>$topic->time
  43. );
  44. $docs_to_upload[] = $item;
  45. }
  46. if(!empty($docs_to_upload)){
  47. $result = Service::factory('SearchService')->addTopic($docs_to_upload);
  48. var_dump($result);
  49. }
  50. $docs_to_upload = array();
  51. echo "end_topic:";
  52. $end_time = time();
  53. $start_time = $end_time - 3600*2;
  54. $criteria = new EMongoCriteria();
  55. $criteria->time('>=',$start_time);
  56. $criteria->time('<',$end_time);
  57. $cursor = Post::model()->findAll($criteria);
  58. $i=1;
  59. $docs_to_upload = array();
  60. foreach ($cursor as $post) {
  61. $i++;
  62. if($i%200 == 0){
  63. $result = Service::factory('SearchService')->addPost($docs_to_upload);
  64. var_dump($result);
  65. sleep(3);
  66. $docs_to_upload = array();
  67. }
  68. $item = array();
  69. $item['cmd'] = 'update';
  70. //添加文档内容
  71. $item["fields"] = array(
  72. 'id'=>(string)$post->_id,
  73. "content" => $post->content,
  74. 'time'=>$post->time,
  75. 'status'=>$post->status,
  76. );
  77. $docs_to_upload[] = $item;
  78. }
  79. if(!empty($docs_to_upload)){
  80. $result = Service::factory('SearchService')->addPost($docs_to_upload);
  81. }
  82. $docs_to_upload = array();
  83. echo "end_post:";
  84. var_dump($result);
  85. $criteria = new EMongoCriteria();
  86. $start_time = $end_time - 3600*2;
  87. $criteria->register_time('>=',$start_time);
  88. $criteria->register_time('<',$end_time);
  89. $cursor = RUser::model()->findAll($criteria);
  90. $i=1;
  91. $docs_to_upload = array();
  92. foreach ($cursor as $user) {
  93. $i++;
  94. if($i%100 == 0){
  95. $result = Service::factory('SearchService')->addUser($docs_to_upload);
  96. var_dump($result);
  97. sleep(3);
  98. $docs_to_upload = array();
  99. }
  100. $item = array();
  101. $item['cmd'] = 'ADD';
  102. //添加文档内容
  103. $item["fields"] = array(
  104. 'id'=>(string)$user->_id,
  105. "user_name" => $user->user_name,
  106. "status" => $user->status,
  107. );
  108. $docs_to_upload[] = $item;
  109. }
  110. if(!empty($docs_to_upload)){
  111. $result = Service::factory('SearchService')->addUser($docs_to_upload);
  112. }
  113. $docs_to_upload = array();
  114. echo "end_user:";
  115. var_dump($result);
  116. //用户信息更新,每小时更新
  117. $list = new ARedisList('user_info_update');
  118. while ($list->getCount() > 0) {
  119. $res = $list->pop();
  120. $syncData = unserialize($res);
  121. try {
  122. $user_obj = RUser::get(new MongoId($syncData['user_id']));
  123. $user_obj->app_client_id = $syncData['app_client_id'];
  124. $user_obj->device_id = $syncData['device_id'];
  125. $user_obj->channel = $syncData['channel'];
  126. $user_obj->app_version = $syncData['app_version'];
  127. $user_obj->phone_type = $syncData['phone_type'];
  128. $user_obj->os_version = $syncData['os_version'];
  129. $user_obj->last_visit_time = $syncData['last_visit_time'];
  130. $user_obj->update(array('last_visit_time','app_version','app_client_id','device_id','channel','phone_type','os_version'),true);
  131. $getui = Service::factory('PushService');
  132. $cids = $getui->queryCID($syncData['user_id']);
  133. if($cids){
  134. $tags = [];
  135. foreach ($cids as $cid){
  136. $res = $getui->getCidTags($cid);
  137. $new_tags = preg_replace('/\d+(\.\d+){0,2}/',$syncData['app_version'],$res);
  138. $new_tags = explode(' ',$new_tags);
  139. $res = $getui->setTag($cid,$new_tags);
  140. var_dump($res);
  141. }
  142. }
  143. } catch (Exception $e) {
  144. continue;
  145. }
  146. }
  147. }
  148. }