UserStatisticController.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  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,function() use($queryUserId){
  67. return UserOperationDaily::where('user_id',$queryUserId)
  68. ->sum('duration');
  69. });
  70. }
  71. //逐词解析
  72. if(!$request->has('view') || $request->get('view') === 'wbw-count'){
  73. $wbwCount = RedisClusters::remember("user/{$userName}/wbw/count",$cacheExpiry,function() use($queryUserId){
  74. return Wbw::where('editor_id',$queryUserId)
  75. ->count();
  76. });
  77. }
  78. //查字典次数
  79. if(!$request->has('view') || $request->get('view') === 'lookup-count'){
  80. $lookupCount = RedisClusters::remember("user/{$userName}/lookup/count",$cacheExpiry,function() use($queryUserId){
  81. return UserOperationLog::where('user_id',$queryUserId)
  82. ->where('op_type','dict_lookup')
  83. ->count();
  84. });
  85. }
  86. //译文
  87. //TODO 判断是否是译文channel
  88. if(!$request->has('view') || $request->get('view') === 'translation-count'){
  89. $translationCount = RedisClusters::remember("user/{$userName}/translation/count",$cacheExpiry,function() use($queryUserUuid){
  90. return Sentence::where('editor_uid',$queryUserUuid)
  91. ->count();
  92. });
  93. $translationCountPub = RedisClusters::remember("user/{$userName}/translation/count-pub",$cacheExpiry,function() use($queryUserUuid){
  94. return Sentence::where('editor_uid',$queryUserUuid)
  95. ->where('status',30)
  96. ->count();
  97. });
  98. }
  99. //术语
  100. if(!$request->has('view') || $request->get('view') === 'term-count'){
  101. $termCount = RedisClusters::remember("user/{$userName}/term/count",$cacheExpiry,function() use($queryUserId){
  102. return DhammaTerm::where('editor_id',$queryUserId)
  103. ->count();
  104. });
  105. $termCountWithNote = RedisClusters::remember("user/{$userName}/term/count-note",$cacheExpiry,function() use($queryUserId){
  106. return DhammaTerm::where('editor_id',$queryUserId)
  107. ->where('note',"<>","")
  108. ->count();
  109. });
  110. }
  111. //单词本
  112. if(!$request->has('view') || $request->get('view') === 'my-dict-count'){
  113. $myDictCount = RedisClusters::remember("user/{$userName}/dict/count",$cacheExpiry,function() use($queryUserId){
  114. return UserDict::where('creator_id',$queryUserId)
  115. ->count();
  116. });
  117. }
  118. return $this->ok([
  119. "exp" => ["sum"=>(int)$expSum],
  120. "wbw" => ["count"=>(int)$wbwCount],
  121. "lookup" => ["count"=>(int)$lookupCount],
  122. "translation" =>["count"=>(int)$translationCount,
  123. "count_pub"=>(int)$translationCountPub],
  124. "term" => ["count"=>(int)$termCount,
  125. "count_with_note"=>(int)$termCountWithNote],
  126. "dict" => ["count"=>(int)$myDictCount],
  127. ]);
  128. }
  129. /**
  130. * Show the form for editing the specified resource.
  131. *
  132. * @param \App\Models\UserOperationDaily $userOperationDaily
  133. * @return \Illuminate\Http\Response
  134. */
  135. public function edit(UserOperationDaily $userOperationDaily)
  136. {
  137. //
  138. }
  139. /**
  140. * Update the specified resource in storage.
  141. *
  142. * @param \Illuminate\Http\Request $request
  143. * @param \App\Models\UserOperationDaily $userOperationDaily
  144. * @return \Illuminate\Http\Response
  145. */
  146. public function update(Request $request, UserOperationDaily $userOperationDaily)
  147. {
  148. //
  149. }
  150. /**
  151. * Remove the specified resource from storage.
  152. *
  153. * @param \App\Models\UserOperationDaily $userOperationDaily
  154. * @return \Illuminate\Http\Response
  155. */
  156. public function destroy(UserOperationDaily $userOperationDaily)
  157. {
  158. //
  159. }
  160. }