UserDictController.php 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\UserDict;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\Redis;
  6. use Illuminate\Support\Facades\Log;
  7. class UserDictController extends Controller
  8. {
  9. /**
  10. * Display a listing of the resource.
  11. *
  12. * @return \Illuminate\Http\Response
  13. */
  14. public function index(Request $request)
  15. {
  16. //
  17. $result=false;
  18. $indexCol = ['id','word','type','grammar','mean','factors','confidence','updated_at','creator_id'];
  19. switch ($request->get('view')) {
  20. case 'user':
  21. # code...
  22. $table = UserDict::select($indexCol)
  23. ->where('creator_id', $_COOKIE["user_id"])
  24. ->where('source', '<>', "_SYS_USER_WBW_");
  25. if(isset($_GET["search"])){
  26. $table->where('word', 'like', $_GET["search"]."%");
  27. }
  28. if(isset($_GET["order"]) && isset($_GET["dir"])){
  29. $table->orderBy($_GET["order"],$_GET["dir"]);
  30. }else{
  31. $table->orderBy('updated_at','desc');
  32. }
  33. $count = $table->count();
  34. if(isset($_GET["limit"])){
  35. $offset = 0;
  36. if(isset($_GET["offset"])){
  37. $offset = $_GET["offset"];
  38. }
  39. $table->skip($offset)->take($_GET["limit"]);
  40. }
  41. $result = $table->get();
  42. break;
  43. case 'word':
  44. $result = UserDict::select($indexCol)
  45. ->where('word', $_GET["word"])
  46. ->orderBy('created_at','desc')
  47. ->get();
  48. break;
  49. default:
  50. # code...
  51. break;
  52. }
  53. if($result){
  54. return $this->ok(["rows"=>$result,"count"=>$count]);
  55. }else{
  56. return $this->error("没有查询到数据");
  57. }
  58. }
  59. /**
  60. * Store a newly created resource in storage.
  61. *
  62. * @param \Illuminate\Http\Request $request
  63. * @return \Illuminate\Http\Response
  64. */
  65. public function store(Request $request)
  66. {
  67. //
  68. if(!isset($_COOKIE["user_id"])){
  69. $this->error("not login");
  70. }
  71. $snowflake = new SnowFlakeId();
  72. $_data = json_decode($_POST["data"],true);
  73. switch($request->get('view')){
  74. case "wbw":
  75. #查询用户重复的数据
  76. $iOk = 0;
  77. $updateOk=0;
  78. foreach ($_data as $key => $word) {
  79. # code...
  80. $isDoesntExist = UserDict::where('creator_id', $_COOKIE["user_id"])
  81. ->where('word',$word["word"])
  82. ->where('type',$word["type"])
  83. ->where('grammar',$word["grammar"])
  84. ->where('parent',$word["parent"])
  85. ->where('mean',$word["mean"])
  86. ->where('factors',$word["factors"])
  87. ->where('factormean',$word["factormean"])
  88. ->where('source','_USER_WBW_')
  89. ->doesntExist();
  90. if($isDoesntExist){
  91. #不存在插入数据
  92. $word["id"]=app('snowflake')->id();
  93. $word["source"]='_USER_WBW_';
  94. $word["create_time"]=mTime();
  95. $word["creator_id"]=$_COOKIE["user_id"];
  96. $id = UserDict::insert($word);
  97. $updateOk = $this->update_sys_wbw($word);
  98. $this->update_redis($word);
  99. $iOk++;
  100. }
  101. }
  102. $this->ok([$iOk,$updateOk]);
  103. break;
  104. case "dict":
  105. break;
  106. }
  107. }
  108. /**
  109. * Display the specified resource.
  110. *
  111. * @param int $id
  112. * @return \Illuminate\Http\Response
  113. */
  114. public function show($id)
  115. {
  116. //
  117. $result = UserDict::find($id);
  118. if($result){
  119. $this->ok($result);
  120. }else{
  121. $this->error("没有查询到数据");
  122. }
  123. }
  124. /**
  125. * Update the specified resource in storage.
  126. *
  127. * @param \Illuminate\Http\Request $request
  128. * @param int $id
  129. * @return \Illuminate\Http\Response
  130. */
  131. public function update(Request $request, $id)
  132. {
  133. //
  134. $newData = $request->all();
  135. $result = UserDict::where('id', $id)
  136. ->update($newData);
  137. if($result){
  138. $updateOk = $this->update_sys_wbw($newData);
  139. $this->update_redis($newData);
  140. $this->ok([$result,$updateOk]);
  141. }else{
  142. $this->error("没有查询到数据");
  143. }
  144. }
  145. /**
  146. * Remove the specified resource from storage.
  147. * @param \Illuminate\Http\Request $request
  148. * @param int $id
  149. * @return \Illuminate\Http\Response
  150. */
  151. public function destroy(Request $request,$id)
  152. {
  153. //
  154. Log::info("userDictController->destroy start");
  155. Log::info("userDictController->destroy id= {$id}");
  156. $arrId = json_decode($request->get("id"),true) ;
  157. $count = 0;
  158. foreach ($arrId as $key => $id) {
  159. # 找到对应数据
  160. $data = UserDict::find($id);
  161. //查看是否有权限删除
  162. if($data->creator_id == $_COOKIE["user_id"]){
  163. $result = UserDict::where('id', $id)
  164. ->delete();
  165. $count += $result;
  166. $updateOk = $this->update_sys_wbw($data);
  167. $this->update_redis($data);
  168. }
  169. }
  170. return $this->ok([$count,$updateOk]);
  171. }
  172. public function delete(Request $request){
  173. Log::info("userDictController->delete start");
  174. $arrId = json_decode($request->get("id"),true) ;
  175. Log::info("id=".$request->get("id"));
  176. $count = 0;
  177. $updateOk = false;
  178. foreach ($arrId as $key => $id) {
  179. $data = UserDict::where('id',$id)->first();
  180. if($data){
  181. # 找到对应数据
  182. Log::info('creator_id:'.$data->creator_id);
  183. $param = [
  184. "id"=>$id,
  185. 'creator_id'=>$_COOKIE["user_id"]
  186. ];
  187. Log::info($param);
  188. $del = UserDict::where($param)->delete();
  189. $count += $del;
  190. $updateOk = $this->update_sys_wbw($data);
  191. $this->update_redis($data);
  192. }
  193. }
  194. Log::info("delete:".$count);
  195. return $this->ok(['deleted'=>$count]);
  196. }
  197. /*
  198. 更新系统wbw汇总表
  199. */
  200. private function update_sys_wbw($data){
  201. #查询用户重复的数据
  202. $count = UserDict::where('word',$data["word"])
  203. ->where('type',$data["type"])
  204. ->where('grammar',$data["grammar"])
  205. ->where('parent',$data["parent"])
  206. ->where('mean',$data["mean"])
  207. ->where('factors',$data["factors"])
  208. ->where('factormean',$data["factormean"])
  209. ->where('source','_USER_WBW_')
  210. ->count();
  211. if($count==0){
  212. # 没有任何用户有这个数据
  213. #删除数据
  214. $result = UserDict::where('word',$data["word"])
  215. ->where('type',$data["type"])
  216. ->where('grammar',$data["grammar"])
  217. ->where('parent',$data["parent"])
  218. ->where('mean',$data["mean"])
  219. ->where('factors',$data["factors"])
  220. ->where('factormean',$data["factormean"])
  221. ->where('source','_SYS_USER_WBW_')
  222. ->delete();
  223. return($result);
  224. }else{
  225. #更新或新增
  226. #查询最早上传这个数据的用户
  227. $creator_id = UserDict::where('word',$data["word"])
  228. ->where('type',$data["type"])
  229. ->where('grammar',$data["grammar"])
  230. ->where('parent',$data["parent"])
  231. ->where('mean',$data["mean"])
  232. ->where('factors',$data["factors"])
  233. ->where('factormean',$data["factormean"])
  234. ->where('source','_USER_WBW_')
  235. ->orderby("created_at",'asc')
  236. ->value("creator_id");
  237. $count = UserDict::where('word',$data["word"])
  238. ->where('type',$data["type"])
  239. ->where('grammar',$data["grammar"])
  240. ->where('parent',$data["parent"])
  241. ->where('mean',$data["mean"])
  242. ->where('factors',$data["factors"])
  243. ->where('factormean',$data["factormean"])
  244. ->where('source','_SYS_USER_WBW_')
  245. ->count();
  246. if($count==0){
  247. #系统字典没有 新增
  248. $result = UserDict::insert(
  249. [
  250. 'id' =>$snowflake->id(),
  251. 'word'=>$data["word"],
  252. 'type'=>$data["type"],
  253. 'grammar'=>$data["grammar"],
  254. 'parent'=>$data["parent"],
  255. 'mean'=>$data["mean"],
  256. 'factors'=>$data["factors"],
  257. 'factormean'=>$data["factormean"],
  258. 'source'=>"_SYS_USER_WBW_",
  259. 'creator_id' => $creator_id,
  260. 'ref_counter' => 1,
  261. "create_time"=>time()*1000
  262. ]);
  263. }else{
  264. #有,更新
  265. $result = UserDict::where('word',$data["word"])
  266. ->where('type',$data["type"])
  267. ->where('grammar',$data["grammar"])
  268. ->where('parent',$data["parent"])
  269. ->where('mean',$data["mean"])
  270. ->where('factors',$data["factors"])
  271. ->where('factormean',$data["factormean"])
  272. ->where('source','_SYS_USER_WBW_')
  273. ->update(
  274. [
  275. 'creator_id'=>$creator_id,
  276. 'ref_counter'=>$count
  277. ]);
  278. }
  279. return($result);
  280. }
  281. }
  282. private function update_redis($word){
  283. #更新 redis
  284. $Fetch = UserDict::where(['word'=>$word['word'],"source"=>"_USER_WBW_"])->get();
  285. $redisWord=array();
  286. foreach ($Fetch as $one) {
  287. # code...
  288. $redisWord[] = array(
  289. $one["id"],
  290. $one["word"],
  291. $one["type"],
  292. $one["grammar"],
  293. $one["parent"],
  294. $one["mean"],
  295. $one["note"],
  296. $one["factors"],
  297. $one["factormean"],
  298. $one["status"],
  299. $one["confidence"],
  300. $one["creator_id"],
  301. $one["source"],
  302. $one["language"]
  303. );
  304. }
  305. $redisData = json_encode($redisWord,JSON_UNESCAPED_UNICODE);
  306. Log::info("word={$word['word']} redis-data={$redisData}");
  307. Redis::hSet("dict/user",$word['word'],$redisData);
  308. $redisData1 = Redis::hGet("dict/user",$word['word']);
  309. Log::info("word={$word['word']} redis-data1={$redisData1}");
  310. #更新redis结束
  311. }
  312. }