channal_list.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. #输入句子列表查询channel列表 和计算完成度
  3. require_once "../public/function.php";
  4. require_once "../public/_pdo.php";
  5. require_once "../config.php";
  6. require_once '../channal/function.php';
  7. require_once '../ucenter/function.php';
  8. require_once '../share/function.php';
  9. require_once '../db/custom_book.php';
  10. require_once '../redis/function.php';
  11. $redis = redis_connect();
  12. $custom_book = new CustomBookSentence($redis);
  13. $log = "";
  14. $timeStart = microtime(true);
  15. $_data = array();
  16. $output = array();
  17. if (isset($_POST["data"])) {
  18. $_data = json_decode($_POST["data"], true);
  19. } else {
  20. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  21. exit;
  22. }
  23. $_userinfo = new UserInfo();
  24. $_channal = new Channal();
  25. $dns = _FILE_DB_SENTENCE_;
  26. $db_trans_sent = new PDO($dns, _DB_USERNAME_, _DB_PASSWORD_, array(PDO::ATTR_PERSISTENT => true));
  27. $db_trans_sent->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  28. $dns = _FILE_DB_PALI_SENTENCE_;
  29. $db_pali_sent = new PDO($dns, _DB_USERNAME_, _DB_PASSWORD_, array(PDO::ATTR_PERSISTENT => true));
  30. $db_pali_sent->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  31. $channal = array();
  32. #查询有阅读权限的channel
  33. $channal_list = array();
  34. $channel_power=array();
  35. if (isset($_COOKIE["userid"])) {
  36. //找自己的
  37. PDO_Connect(_FILE_DB_CHANNAL_,_DB_USERNAME_,_DB_PASSWORD_);
  38. $query = "SELECT uid from "._TABLE_CHANNEL_." where owner_uid = ? and status >0 limit 100";
  39. $Fetch_my = PDO_FetchAll($query, array($_COOKIE["user_uid"]));
  40. foreach ($Fetch_my as $key => $value) {
  41. # code...
  42. $channal_list[] = $value["uid"];
  43. $channel_power[$value["uid"]]=30;
  44. }
  45. $time = microtime(true);
  46. $log .= $time-$timeStart ." - 找自己的结束". PHP_EOL;
  47. $timeStart = $time;
  48. # 找协作的
  49. $coop_channal = share_res_list_get($_COOKIE["user_uid"],2);
  50. foreach ($coop_channal as $key => $value) {
  51. # return res_id,res_type,power res_title res_owner_id
  52. $channal_list[] = $value["res_id"];
  53. if(isset($channel_power[$value["res_id"]])){
  54. if($channel_power[$value["res_id"]]<(int)$value["power"]){
  55. $channel_power[$value["res_id"]]=(int)$value["power"];
  56. }
  57. }
  58. }
  59. $time = microtime(true);
  60. $log .= $time-$timeStart ." - 找协作的结束". PHP_EOL;
  61. $timeStart = $time;
  62. }
  63. if (count($channal_list) > 0) {
  64. # 创建一个填充了和params相同数量占位符的字符串
  65. $channel_place_holders = implode(',', array_fill(0, count($channal_list), '?'));
  66. $channel_query = " OR channel_uid IN ($channel_place_holders)";
  67. } else {
  68. $channel_query = "";
  69. }
  70. # 查询有阅读权限的channel 结束
  71. $time = microtime(true);
  72. $log .= $time-$timeStart ." - 查询有阅读权限的channel 结束". PHP_EOL;
  73. $timeStart = $time;
  74. $final = array();
  75. $article_len = 0;
  76. foreach ($_data as $key => $value) {
  77. $pali_letter = array();
  78. # code...
  79. $id = $value["id"];
  80. $arrInfo = str_getcsv($value["data"], "@");
  81. $arrSent = str_getcsv($arrInfo[0], "-");
  82. $bookId = $arrSent[0];
  83. $para = $arrSent[1];
  84. $begin = $arrSent[2];
  85. $end = $arrSent[3];
  86. //find out translation
  87. $tran = "";
  88. try {
  89. # 查询句子长度
  90. $pali_letter["id"] = $arrInfo[0];
  91. if($bookId<1000){
  92. $query = "SELECT length FROM "._TABLE_PALI_SENT_." WHERE book= ? AND paragraph= ? AND word_begin= ? AND word_end= ? ";
  93. $stmt = $db_pali_sent->prepare($query);
  94. $stmt->execute(array($bookId, $para, $begin, $end));
  95. $Fetch = $stmt->fetch(PDO::FETCH_ASSOC);
  96. if ($Fetch) {
  97. $pali_letter["len"] = $Fetch["length"];
  98. $article_len += $Fetch["length"];
  99. } else {
  100. $pali_letter["len"] = 0;
  101. }
  102. }
  103. else{
  104. $sentInfo = $custom_book->getAll($bookId, $para, $begin, $end);
  105. $pali_letter["len"] = $sentInfo["length"];
  106. $article_len += $sentInfo["length"];
  107. }
  108. #公开 或 channel有权限的
  109. $query = "SELECT channel_uid FROM "._TABLE_SENTENCE_." WHERE book_id= ? AND paragraph= ? AND word_start= ? AND word_end= ? AND strlen >0 and (status = 30 {$channel_query} ) group by channel_uid limit 20 ";
  110. $stmt = $db_trans_sent->prepare($query);
  111. $parm = array($bookId, $para, $begin, $end);
  112. $parm = array_merge_recursive($parm, $channal_list);
  113. $stmt->execute($parm);
  114. $Fetch = $stmt->fetchAll(PDO::FETCH_ASSOC);
  115. foreach ($Fetch as $key => $value) {
  116. # code...
  117. $pali_letter[$value["channel_uid"]] = 1;
  118. if (isset($channal[$value["channel_uid"]])) {
  119. $channal[$value["channel_uid"]]++;
  120. } else {
  121. $channal[$value["channel_uid"]] = 1;
  122. }
  123. }
  124. $final[] = $pali_letter;
  125. } catch (Exception $e) {
  126. $tran = $e->getMessage();
  127. //echo 'Caught exception: ', $e->getMessage(), "\n";
  128. }
  129. }
  130. $time = microtime(true);
  131. $log .= $time-$timeStart ." - 查询句子长度 结束 ". PHP_EOL;
  132. $timeStart = $time;
  133. foreach ($channal as $key => $value) {
  134. # 计算句子的完成分布
  135. $arr_sent_final = array();
  136. foreach ($final as $final_value) {
  137. # code...
  138. $sent_final = array();
  139. $sent_final["id"] = $final_value["id"];
  140. $sent_final["len"] = $final_value["len"];
  141. if (isset($final_value[$key]) && $final_value[$key] == 1) {
  142. $sent_final["final"] = true;
  143. } else {
  144. $sent_final["final"] = false;
  145. }
  146. $arr_sent_final[] = $sent_final;
  147. }
  148. $channalInfo = $_channal->getChannal($key);
  149. if($channalInfo){
  150. $name = $_userinfo->getName($channalInfo["owner_uid"]);
  151. $channalInfo["username"] = $name["username"];
  152. $channalInfo["nickname"] = $name["nickname"];
  153. $channalInfo["count"] = $value;
  154. $channalInfo["all"] = count($_data);
  155. $channalInfo["final"] = $arr_sent_final;
  156. $channalInfo["article_len"] = $article_len;
  157. $channalInfo["id"] = $key;
  158. $channalInfo["owner"] = $channalInfo["owner_uid"];
  159. if(isset($channel_power[$key])){
  160. $channalInfo["power"] =$channel_power[$key];
  161. }
  162. else{
  163. $channalInfo["power"] =10;
  164. }
  165. $output[] = $channalInfo;
  166. }
  167. }
  168. $time = microtime(true);
  169. $log .= $time-$timeStart ." - 计算句子的完成分布 结束 ". PHP_EOL;
  170. $timeStart = $time;
  171. echo json_encode($output, JSON_UNESCAPED_UNICODE);