SearchPaliWbwController.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\DB;
  5. use App\Models\WbwTemplate;
  6. use App\Http\Resources\SearchPaliWbwResource;
  7. use App\Http\Resources\SearchBookResource;
  8. class SearchPaliWbwController extends Controller
  9. {
  10. /**
  11. * Display a listing of the resource.
  12. *
  13. * @return \Illuminate\Http\Response
  14. */
  15. public function index(Request $request)
  16. {
  17. //获取书的范围
  18. $bookId = [];
  19. $search = new SearchController;
  20. if($request->has('book')){
  21. $bookId = [(int)$request->get('book')];
  22. }else if($request->has('tags')){
  23. //查询搜索范围
  24. //查询搜索范围
  25. $tagItems = explode(';',$request->get('tags'));
  26. foreach ($tagItems as $tagItem) {
  27. $bookId = array_merge($bookId,$search->getBookIdByTags(explode(',',$tagItem)));
  28. }
  29. }
  30. $keyWords = explode(',',$request->get('key'));
  31. switch ($request->get('view')) {
  32. case 'pali':
  33. $table = WbwTemplate::whereIn('real',$keyWords)
  34. ->groupBy(['book','paragraph'])
  35. ->selectRaw('book,paragraph,sum(weight) as rank');
  36. break;
  37. case 'para':
  38. $table = WbwTemplate::whereIn('word',$keyWords)
  39. ->groupBy(['book','paragraph'])
  40. ->selectRaw('book,paragraph');
  41. break;
  42. default:
  43. return $this->error('unknown param view='.$request->get('view'),500,500);
  44. break;
  45. }
  46. $placeholderWord = implode(",",array_fill(0, count($keyWords), '?')) ;
  47. $whereWord = "real in ({$placeholderWord})";
  48. $whereBookId = '';
  49. if(count($bookId)>0){
  50. $table = $table->whereIn('pcd_book_id',$bookId);
  51. $placeholderBookId = implode(",",array_fill(0, count($bookId), '?')) ;
  52. $whereBookId = " and pcd_book_id in ({$placeholderBookId}) ";
  53. }
  54. $queryCount = "SELECT count(*) FROM ( SELECT book,paragraph FROM wbw_templates WHERE $whereWord $whereBookId GROUP BY book,paragraph) T;";
  55. $count = DB::select($queryCount,array_merge($keyWords,$bookId));
  56. $table = $table->orderBy('rank','desc');
  57. $table = $table->skip($request->get("offset",0))
  58. ->take($request->get('limit',10));
  59. $result = $table->get();
  60. return $this->ok([
  61. "rows"=>SearchPaliWbwResource::collection($result),
  62. "count"=>$count[0]->count,
  63. ]);
  64. }
  65. public function book_list(Request $request){
  66. //获取书的范围
  67. $bookId = [];
  68. $search = new SearchController;
  69. if($request->has('tags')){
  70. //查询搜索范围
  71. //查询搜索范围
  72. $tagItems = explode(';',$request->get('tags'));
  73. foreach ($tagItems as $tagItem) {
  74. $bookId = array_merge($bookId,$search->getBookIdByTags(explode(',',$tagItem)));
  75. }
  76. }
  77. $keyWords = explode(',',$request->get('key'));
  78. switch ($request->get('view')) {
  79. case 'pali':
  80. $table = WbwTemplate::whereIn('real',$keyWords);
  81. break;
  82. case 'para':
  83. $table = WbwTemplate::whereIn('word',$keyWords);
  84. break;
  85. default:
  86. return $this->error('unknown param view='.$request->get('view'),500,500);
  87. break;
  88. }
  89. if(count($bookId)>0){
  90. $table = $table->whereIn('pcd_book_id',$bookId);
  91. }
  92. $table = $table->groupBy('pcd_book_id')
  93. ->selectRaw('pcd_book_id,count(*) as co');
  94. $result = $table->get();
  95. return $this->ok(["rows"=>SearchBookResource::collection($result),"count"=>count($result)]);
  96. }
  97. /**
  98. * Store a newly created resource in storage.
  99. *
  100. * @param \Illuminate\Http\Request $request
  101. * @return \Illuminate\Http\Response
  102. */
  103. public function store(Request $request)
  104. {
  105. }
  106. /**
  107. * Display the specified resource.
  108. *
  109. * @param \App\Models\WbwTemplate $wbwTemplate
  110. * @return \Illuminate\Http\Response
  111. */
  112. public function show(WbwTemplate $wbwTemplate)
  113. {
  114. //
  115. }
  116. /**
  117. * Update the specified resource in storage.
  118. *
  119. * @param \Illuminate\Http\Request $request
  120. * @param \App\Models\WbwTemplate $wbwTemplate
  121. * @return \Illuminate\Http\Response
  122. */
  123. public function update(Request $request, WbwTemplate $wbwTemplate)
  124. {
  125. //
  126. }
  127. /**
  128. * Remove the specified resource from storage.
  129. *
  130. * @param \App\Models\WbwTemplate $wbwTemplate
  131. * @return \Illuminate\Http\Response
  132. */
  133. public function destroy(WbwTemplate $wbwTemplate)
  134. {
  135. //
  136. }
  137. }