UserStatisticController.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\UserOperationDaily;
  4. use App\Models\UserOperationLog;
  5. use App\Models\Wbw;
  6. use App\Models\Sentence;
  7. use App\Models\DhammaTerm;
  8. use App\Models\UserDict;
  9. use Illuminate\Http\Request;
  10. use App\Http\Api\AuthApi;
  11. use App\Http\Api\UserApi;
  12. use Illuminate\Support\Facades\Cache;
  13. use App\Tools\RedisClusters;
  14. class UserStatisticController extends Controller
  15. {
  16. /**
  17. * Display a listing of the resource.
  18. *
  19. * @return \Illuminate\Http\Response
  20. */
  21. public function index()
  22. {
  23. //
  24. }
  25. /**
  26. * Show the form for creating a new resource.
  27. *
  28. * @return \Illuminate\Http\Response
  29. */
  30. public function create()
  31. {
  32. //
  33. }
  34. /**
  35. * Store a newly created resource in storage.
  36. *
  37. * @param \Illuminate\Http\Request $request
  38. * @return \Illuminate\Http\Response
  39. */
  40. public function store(Request $request)
  41. {
  42. //
  43. }
  44. /**
  45. * Display the specified resource.
  46. *
  47. * @param \App\Models\UserOperationDaily $userOperationDaily
  48. * @return \Illuminate\Http\Response
  49. */
  50. public function show(Request $request,string $userName)
  51. {
  52. //
  53. $queryUserId = UserApi::getIntIdByName($userName);
  54. $queryUserUuid = UserApi::getIdByName($userName);
  55. $cacheExpiry = config('mint.cache.expire');
  56. $expSum = 0;
  57. $wbwCount = 0;
  58. $lookupCount = 0;
  59. $translationCount = 0;
  60. $translationCountPub = 0;
  61. $termCount = 0;
  62. $termCountWithNote = 0;
  63. $myDictCount = 0;
  64. //总经验值
  65. if(!$request->has('view') || $request->get('view') === 'exp-sum'){
  66. $expSum = RedisClusters::remember("user/{$userName}/exp/sum",$cacheExpiry,
  67. function() use($queryUserId){
  68. return UserOperationDaily::where('user_id',$queryUserId)
  69. ->sum('duration');
  70. });
  71. }
  72. //逐词解析
  73. if(!$request->has('view') || $request->get('view') === 'wbw-count'){
  74. $wbwCount = RedisClusters::remember("user/{$userName}/wbw/count",$cacheExpiry,
  75. function() use($queryUserId){
  76. return Wbw::where('editor_id',$queryUserId)
  77. ->count();
  78. });
  79. }
  80. //查字典次数
  81. if(!$request->has('view') || $request->get('view') === 'lookup-count'){
  82. $lookupCount = RedisClusters::remember("user/{$userName}/lookup/count",$cacheExpiry,
  83. function() use($queryUserId){
  84. return UserOperationLog::where('user_id',$queryUserId)
  85. ->where('op_type','dict_lookup')
  86. ->count();
  87. });
  88. }
  89. //译文
  90. //TODO 判断是否是译文channel
  91. if(!$request->has('view') || $request->get('view') === 'translation-count'){
  92. $translationCount = RedisClusters::remember("user/{$userName}/translation/count",$cacheExpiry,
  93. function() use($queryUserUuid){
  94. return Sentence::where('editor_uid',$queryUserUuid)
  95. ->count();
  96. });
  97. $translationCountPub = RedisClusters::remember("user/{$userName}/translation/count-pub",$cacheExpiry,
  98. function() use($queryUserUuid){
  99. return Sentence::where('editor_uid',$queryUserUuid)
  100. ->where('status',30)
  101. ->count();
  102. });
  103. }
  104. //术语
  105. if(!$request->has('view') || $request->get('view') === 'term-count'){
  106. $termCount = RedisClusters::remember("user/{$userName}/term/count",$cacheExpiry,
  107. function() use($queryUserId){
  108. return DhammaTerm::where('editor_id',$queryUserId)
  109. ->count();
  110. });
  111. $termCountWithNote = RedisClusters::remember("user/{$userName}/term/count-note",$cacheExpiry,
  112. function() use($queryUserId){
  113. return DhammaTerm::where('editor_id',$queryUserId)
  114. ->where('note',"<>","")
  115. ->count();
  116. });
  117. }
  118. //单词本
  119. if(!$request->has('view') || $request->get('view') === 'my-dict-count'){
  120. $myDictCount = RedisClusters::remember("user/{$userName}/dict/count",$cacheExpiry,
  121. function() use($queryUserId){
  122. return UserDict::where('creator_id',$queryUserId)
  123. ->count();
  124. });
  125. }
  126. return $this->ok([
  127. "exp" => ["sum"=>(int)$expSum],
  128. "wbw" => ["count"=>(int)$wbwCount],
  129. "lookup" => ["count"=>(int)$lookupCount],
  130. "translation" =>["count"=>(int)$translationCount,
  131. "count_pub"=>(int)$translationCountPub],
  132. "term" => ["count"=>(int)$termCount,
  133. "count_with_note"=>(int)$termCountWithNote],
  134. "dict" => ["count"=>(int)$myDictCount],
  135. ]);
  136. }
  137. /**
  138. * Show the form for editing the specified resource.
  139. *
  140. * @param \App\Models\UserOperationDaily $userOperationDaily
  141. * @return \Illuminate\Http\Response
  142. */
  143. public function edit(UserOperationDaily $userOperationDaily)
  144. {
  145. //
  146. }
  147. /**
  148. * Update the specified resource in storage.
  149. *
  150. * @param \Illuminate\Http\Request $request
  151. * @param \App\Models\UserOperationDaily $userOperationDaily
  152. * @return \Illuminate\Http\Response
  153. */
  154. public function update(Request $request, UserOperationDaily $userOperationDaily)
  155. {
  156. //
  157. }
  158. /**
  159. * Remove the specified resource from storage.
  160. *
  161. * @param \App\Models\UserOperationDaily $userOperationDaily
  162. * @return \Illuminate\Http\Response
  163. */
  164. public function destroy(UserOperationDaily $userOperationDaily)
  165. {
  166. //
  167. }
  168. }