user_dicts.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. <?php
  2. require_once __DIR__."/../model/user_dicts.php";
  3. require_once __DIR__."/controller.php";
  4. require_once __DIR__."/../../public/snowflakeid.php";
  5. require_once __DIR__."/../../public/function.php";
  6. Class CtlUserDict extends Controller{
  7. public function index(){
  8. $result=false;
  9. $indexCol = ['id','word','type','grammar','mean','factors','confidence','updated_at'];
  10. switch ($_GET["view"]) {
  11. case 'user':
  12. # code...
  13. $table = UserDict::select($indexCol)
  14. ->where('creator_id', $_COOKIE["user_id"])
  15. ->where('source', '<>', "_SYS_USER_WBW_");
  16. if(isset($_GET["search"])){
  17. $table->where('word', 'like', $_GET["search"]."%");
  18. }
  19. if(isset($_GET["order"]) && isset($_GET["dir"])){
  20. $table->orderBy($_GET["order"],$_GET["dir"]);
  21. }else{
  22. $table->orderBy('updated_at','desc');
  23. }
  24. $count = $table->count();
  25. if(isset($_GET["limit"])){
  26. $offset = 0;
  27. if(isset($_GET["offset"])){
  28. $offset = $_GET["offset"];
  29. }
  30. $table->skip($offset)->take($_GET["limit"]);
  31. }
  32. $result = $table->get();
  33. break;
  34. case 'word':
  35. $result = UserDict::select($indexCol)
  36. ->where('word', $_GET["word"])
  37. ->orderBy('created_at','desc')
  38. ->get();
  39. break;
  40. default:
  41. # code...
  42. break;
  43. }
  44. if($result){
  45. $this->ok(["rows"=>$result,"count"=>$count]);
  46. }else{
  47. $this->error("没有查询到数据");
  48. }
  49. }
  50. public function create(){
  51. if(!isset($_COOKIE["user_id"])){
  52. $this->error("not login");
  53. }
  54. $snowflake = new SnowFlakeId();
  55. $_data = json_decode($_POST["data"],true);
  56. switch($_POST["view"]){
  57. case "wbw":
  58. #查询用户重复的数据
  59. $iOk = 0;
  60. $updateOk=0;
  61. foreach ($_data as $key => $word) {
  62. # code...
  63. $isDoesntExist = UserDict::where('creator_id', $_COOKIE["user_id"])
  64. ->where('word',$word["word"])
  65. ->where('type',$word["type"])
  66. ->where('grammar',$word["grammar"])
  67. ->where('parent',$word["parent"])
  68. ->where('mean',$word["mean"])
  69. ->where('factors',$word["factors"])
  70. ->where('factormean',$word["factormean"])
  71. ->where('source','_USER_WBW_')
  72. ->doesntExist();
  73. if($isDoesntExist){
  74. #不存在插入数据
  75. $word["id"]=$snowflake->id();
  76. $word["source"]='_USER_WBW_';
  77. $word["create_time"]=mTime();
  78. $word["creator_id"]=$_COOKIE["user_id"];
  79. $id = UserDict::insert($word);
  80. $updateOk = $this->update_sys_wbw($word);
  81. $this->update_redis($word);
  82. $iOk++;
  83. }
  84. }
  85. $this->ok([$iOk,$updateOk]);
  86. break;
  87. case "dict":
  88. break;
  89. }
  90. }
  91. public function show(){
  92. $result = UserDict::find($_GET["id"]);
  93. if($result){
  94. $this->ok($result);
  95. }else{
  96. $this->error("没有查询到数据");
  97. }
  98. }
  99. public function update(){
  100. $snowflake = new SnowFlakeId();
  101. $data = json_decode($_POST["data"],true);
  102. $result = UserDict::where('id', $data["id"])
  103. ->update($data);
  104. if($result){
  105. $updateOk = $this->update_sys_wbw($data);
  106. $this->update_redis($data);
  107. $this->ok([$result,$updateOk]);
  108. }else{
  109. $this->error("没有查询到数据");
  110. }
  111. }
  112. public function delete(){
  113. $arrId = json_decode($_GET["id"],true) ;
  114. $count = 0;
  115. foreach ($arrId as $key => $id) {
  116. # code...
  117. $data = UserDict::find($id);
  118. $result = UserDict::where('id', $id)
  119. ->where('creator_id', $_COOKIE["user_id"])
  120. ->delete();
  121. if($result){
  122. $count++;
  123. $updateOk = $this->update_sys_wbw($data);
  124. $this->update_redis($data);
  125. }
  126. }
  127. $this->ok([$count,$updateOk]);
  128. }
  129. /*
  130. 更新系统wbw汇总表
  131. */
  132. private function update_sys_wbw($data){
  133. $snowflake = new SnowFlakeId();
  134. #查询用户重复的数据
  135. $count = UserDict::where('word',$data["word"])
  136. ->where('type',$data["type"])
  137. ->where('grammar',$data["grammar"])
  138. ->where('parent',$data["parent"])
  139. ->where('mean',$data["mean"])
  140. ->where('factors',$data["factors"])
  141. ->where('factormean',$data["factormean"])
  142. ->where('source','_USER_WBW_')
  143. ->count();
  144. if($count==0){
  145. # 没有任何用户有这个数据
  146. #删除数据
  147. $result = UserDict::where('word',$data["word"])
  148. ->where('type',$data["type"])
  149. ->where('grammar',$data["grammar"])
  150. ->where('parent',$data["parent"])
  151. ->where('mean',$data["mean"])
  152. ->where('factors',$data["factors"])
  153. ->where('factormean',$data["factormean"])
  154. ->where('source','_SYS_USER_WBW_')
  155. ->delete();
  156. return($result);
  157. }else{
  158. #更新或新增
  159. #查询最早上传这个数据的用户
  160. $creator_id = UserDict::where('word',$data["word"])
  161. ->where('type',$data["type"])
  162. ->where('grammar',$data["grammar"])
  163. ->where('parent',$data["parent"])
  164. ->where('mean',$data["mean"])
  165. ->where('factors',$data["factors"])
  166. ->where('factormean',$data["factormean"])
  167. ->where('source','_USER_WBW_')
  168. ->orderby("created_at",'asc')
  169. ->value("creator_id");
  170. $count = UserDict::where('word',$data["word"])
  171. ->where('type',$data["type"])
  172. ->where('grammar',$data["grammar"])
  173. ->where('parent',$data["parent"])
  174. ->where('mean',$data["mean"])
  175. ->where('factors',$data["factors"])
  176. ->where('factormean',$data["factormean"])
  177. ->where('source','_SYS_USER_WBW_')
  178. ->count();
  179. if($count==0){
  180. #系统字典没有 新增
  181. $result = UserDict::insert(
  182. [
  183. 'id' =>$snowflake->id(),
  184. 'word'=>$data["word"],
  185. 'type'=>$data["type"],
  186. 'grammar'=>$data["grammar"],
  187. 'parent'=>$data["parent"],
  188. 'mean'=>$data["mean"],
  189. 'factors'=>$data["factors"],
  190. 'factormean'=>$data["factormean"],
  191. 'source'=>"_SYS_USER_WBW_",
  192. 'creator_id' => $creator_id,
  193. 'ref_counter' => 1,
  194. "create_time"=>mTime()
  195. ]);
  196. }else{
  197. #有,更新
  198. $result = UserDict::where('word',$data["word"])
  199. ->where('type',$data["type"])
  200. ->where('grammar',$data["grammar"])
  201. ->where('parent',$data["parent"])
  202. ->where('mean',$data["mean"])
  203. ->where('factors',$data["factors"])
  204. ->where('factormean',$data["factormean"])
  205. ->where('source','_SYS_USER_WBW_')
  206. ->update(
  207. [
  208. 'creator_id'=>$creator_id,
  209. 'ref_counter'=>$count
  210. ]);
  211. }
  212. return($result);
  213. }
  214. }
  215. private function update_redis($word){
  216. #更新 redis
  217. if ($this->redis != false) {
  218. {
  219. $Fetch = UserDict::where(['word'=>$word['word'],"source"=>"_SYS_USER_WBW_"])->get();
  220. $redisWord=array();
  221. foreach ($Fetch as $one) {
  222. # code...
  223. $redisWord[] = array(
  224. $one["id"],
  225. $one["word"],
  226. $one["type"],
  227. $one["grammar"],
  228. $one["parent"],
  229. $one["mean"],
  230. $one["note"],
  231. $one["factors"],
  232. $one["factormean"],
  233. $one["status"],
  234. $one["confidence"],
  235. $one["creator_id"],
  236. $one["source"],
  237. $one["language"]
  238. );
  239. }
  240. $this->redis->hSet("dict://user",$word['word'],json_encode($redisWord,JSON_UNESCAPED_UNICODE));
  241. }
  242. }
  243. #更新redis结束
  244. }
  245. }