meet_sys_loginModel.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. <?php
  2. /*
  3. * 会议后台相关
  4. * */
  5. class meet_sys_loginClassModel extends Model
  6. {
  7. /*
  8. * 第三方会议-登录————会议后台
  9. * */
  10. public function loginMeetSysLogin($uname, $pass='Zhks2023_jw') {
  11. $baseUrl = getconfig('meetsys_basurl');;
  12. $loginUrl = $baseUrl.'login';
  13. if ($uname == '杰唯智能') {
  14. $body = [
  15. 'username'=>'杰唯智能',
  16. 'password'=>substr(md5('Zhks2023_jw'), 0, 16),
  17. 'from'=>'wx'
  18. ];
  19. } else {
  20. $body = [
  21. 'username'=>$uname,
  22. 'password'=>substr(md5($pass), 0, 16),
  23. 'from'=>'wx'
  24. ];
  25. }
  26. // 发送请求
  27. $resp = $this->sendPostRequest($loginUrl, $body);
  28. $code = $resp['code'] ?? -1;
  29. // 登录成功
  30. if ($code != 0) {
  31. // 登录报错处理
  32. if ($code == 400) {
  33. $msg = $resp['msg'];
  34. // 本地表中获取到用户信息
  35. $dataOne = $this->getone("username='$uname'", 'count(1) as con');
  36. $getCon = $dataOne['con'];
  37. // 找到了说明已经创建了,肯定是密码错了
  38. if ($getCon > 0) {
  39. // 用户名或者密码错误
  40. $type = '用户信息-登录时-'.$code;
  41. $remark = $msg;
  42. m('log')->addlog($type, $remark);
  43. // 阻止一下,要不第二次登录就创建用户了
  44. return;
  45. } else {
  46. $type = '用户信息-登录时-'.$code;
  47. $remark = '我要创建用户了啊';
  48. m('log')->addlog($type, $remark);
  49. // 没找到就要创建用户了->执行创建用户
  50. $this->createUser($uname, md5($pass));
  51. // 创建后登录
  52. $resp = $this->sendPostRequest($loginUrl, $body);
  53. // 如果创建失败,写日志退出
  54. if ($resp['code'] ?? -1!= 0) {
  55. $type = '登录第三方会议-登录时-创建用户';
  56. $remark = "用户{$uname}登录失败,错误信息:{$resp['msg']}";
  57. m('log')->addlog($type, $remark);
  58. return;
  59. }
  60. }
  61. } else {
  62. $type = '登录第三方会议-登录';
  63. $remark = "用户{$uname}登录失败,错误信息:{$resp['msg']}";
  64. m('log')->addlog($type, $remark);
  65. return;
  66. }
  67. }
  68. // 登录成功记录token
  69. $resp = $resp['data'];
  70. $data = [
  71. 'uid' => $resp['user']['id'],
  72. 'admin_id' => $resp['user']['admin_id'],
  73. 'username' => $resp['user']['username'],
  74. 'face' => $resp['user']['face'],
  75. 'door_pass' => $resp['user']['door_pass'],
  76. 'token' => $resp['token'],
  77. 'token_expired' => date('Y-m-d H:i:s', $resp['expired']),
  78. 'oa_uid' => $this->adminid,
  79. 'pass' => substr(md5($pass), 0, 16),
  80. 'desc' => $pass,
  81. ];
  82. // 查找是否已有登录信息
  83. $conInfo = m('meet_sys_login')->getone("`oa_uid`=$this->adminid", 'count(1) con');
  84. $con = $conInfo['con'];
  85. // 如果存在则更新,不存在则插入
  86. if ($con > 0) {
  87. $type = '登录第三方会议-登录2';
  88. $remark = '更新';
  89. m('meet_sys_login')->update($data, "`oa_uid`=".$this->adminid);
  90. } else {
  91. $type = '登录第三方会议-登录3';
  92. // $remark = $con.json_encode($data);
  93. $remark = '插入';
  94. m('meet_sys_login')->insert($data);
  95. }
  96. m('log')->addlog($type, $remark);
  97. }
  98. /*
  99. * 第三方会议-登录————创建用户
  100. * */
  101. public function createUser($uname, $md5Pass, $isSelf=True) {
  102. $baseUrl = getconfig('meetsys_basurl');
  103. $url = $baseUrl.'user/add';
  104. $md5Pass = substr($md5Pass, 0, 16); // 第三方限制长度,限制一下长度
  105. $body = [
  106. 'username'=>$uname, // 用户名
  107. 'password'=>$md5Pass, // 密码
  108. 'face'=>'' // 人脸图url地址
  109. ];
  110. // 会议管理员token
  111. $adminname = getconfig('meetsys_admin_name');
  112. $token = $this->getMeetSysToken();
  113. // 打log
  114. $type = '登录第三方会议-创建用户-获取token';
  115. $remark = $adminname;
  116. m('log')->addlog($type, $remark);
  117. // 请求创建用户接口
  118. $resp = $this->sendPostRequest($url, $body, $token);
  119. $code = $resp['code'] ?? -1;
  120. if ($code != 0) {
  121. $msg = "用户{$uname}创建失败,错误信息:{$resp['msg']}";
  122. // 打log
  123. $type = '登录第三方会议-创建用户';
  124. $remark = $msg;
  125. m('log')->addlog($type, $remark);
  126. return ;
  127. }
  128. // 不是本人创建(管理员创建)
  129. if (!$isSelf) {
  130. $uinfo = m('admin')->getone("user='$uname'", 'id, user');
  131. $oaUid = $uinfo['id'] ?? null;
  132. }
  133. $resp = $resp['data'];
  134. $data['uid'] = $resp['id']; // 会议系统用户id
  135. $data['admin_id'] = $resp['admin_id'];
  136. $data['username'] = $resp['username'];
  137. $data['face'] = $resp['face'];
  138. $data['door_pass'] = $resp['door_pass'];
  139. $data['oa_uid'] = $isSelf ? $this->adminid : $oaUid; // 信呼系统的用户id
  140. $data['pass'] = $md5Pass;
  141. // 查找是否已有登录信息
  142. $conInfo = m('meet_sys_login')->getone("`uid`={$data['uid']}", 'count(1) con');
  143. $con = $conInfo['con'];
  144. // 如果存在则更新,不存在则插入
  145. if ($con > 0) {
  146. m('meet_sys_login')->update($data, "`uid`={$data['uid']}");
  147. } else {
  148. m('meet_sys_login')->insert($data);
  149. }
  150. }
  151. /*
  152. * 第三方会议-登录————修改密码
  153. * */
  154. public function changePassword($newPass, $oldPass, $token=null) {
  155. $baseUrl = getconfig('meetsys_basurl');
  156. $url = $baseUrl.'user/change_password';
  157. $body = [
  158. 'password'=>$oldPass, // 旧密码
  159. 'new_password'=>$newPass, // 新密码
  160. 'new_password_confirm'=>$newPass // 重复新密码
  161. ];
  162. if($token == null) {
  163. $token = $this->getMeetSysToken($this->adminid);
  164. }
  165. $resp = $this->sendPostRequest($url, $body, $token);
  166. $code = $resp['code'] ?? -1;
  167. if ($code != 0) {
  168. $msg = "用户{$this->adminname}修改密码失败,错误信息:{$resp['msg']}";
  169. // 打log
  170. $type = '登录第三方会议-修改密码';
  171. $remark = $msg;
  172. m('log')->addlog($type, $remark);
  173. }
  174. }
  175. /*
  176. * 第三方会议-登录————获取用户列表
  177. * */
  178. public function syncUserList() {
  179. // 需要先设置唯一索引 ALTER TABLE xinhu_meet_sys_login ADD UNIQUE INDEX idx_unique_user_id (uid);
  180. // 获取所有用户
  181. $baseUrl = getconfig('meetsys_basurl');
  182. $url = $baseUrl.'user/lst';
  183. $body = [
  184. 'page'=>0, // 旧密码
  185. "size"=> 3000
  186. ];
  187. $token = m('meet_sys_login')->getMeetSysToken();
  188. // 从接口获取用户
  189. $rows = json_decode(m('meet_sys_login')->sendPostRequest($url, $body, $token), true);
  190. // 组装数组
  191. $valArr = [];
  192. $resp = $rows['data']['data'];
  193. for ($i = 0; $i < count($resp); $i++) {
  194. $data = $resp[$i];
  195. $valArr[$i]['uid'] = $data['id'];
  196. $valArr[$i]['face'] = $data['face'];
  197. $valArr[$i]['admin_id'] = $data['admin_id'];
  198. $valArr[$i]['username'] = $data['username'];
  199. $valArr[$i]['door_pass'] = $data['door_pass'];
  200. }
  201. $checkColArr = ['uid'];
  202. // 更新数据库中用户数据
  203. $data = m('meet_sys_login')->insertOrUpdate($valArr, $checkColArr);
  204. $type = '3-用户同步-api';
  205. $remark = "同步完成";
  206. m('log')->addlog($type, $remark);
  207. return $data;
  208. }
  209. /*
  210. * 第三方会议-登录————删除用户
  211. * */
  212. public function dropUser($username) {
  213. $baseUrl = getconfig('meetsys_basurl');
  214. $url = $baseUrl.'user/del';
  215. $masterToken = $this->getMeetSysToken();
  216. $uinfo = $this->getone("username='$username'");
  217. if (!isset($uinfo['uid'])){
  218. m('log')->addlog('3-删除用户', "meet_sys_login表内无该用户:$username");
  219. return $uinfo;
  220. }
  221. $uid = intval($uinfo['uid']);
  222. $body =['id' => $uid];
  223. $rows = $this->sendPostRequest($url, $body, $masterToken);
  224. if ($rows['code'] == 0) {
  225. $this->delete("username='$username'");
  226. m('log')->addlog('3-删除用户', json_encode($rows));
  227. } else {
  228. m('log')->addlog('3-删除用户', "失败:$username");
  229. }
  230. return $rows;
  231. }
  232. /*
  233. * 第三方会议-登录————编辑用户信息处理
  234. * */
  235. public function changeUserInfo($uname, $md5Pass) {
  236. // 判断密码是否一致,一致则不动,不一致则修改
  237. $row = $this->getone("`username`='$uname'", 'username, pass, token');
  238. $md5Pass = substr($md5Pass, 0, 16); // 第三方限制长度,限制一下长度
  239. if (isset($row['pass'])) {
  240. $oldPass = substr($row['pass'], 0, 16); // 第三方限制长度,限制一下长度
  241. if ($md5Pass != $oldPass) {
  242. $token = $row['token'];
  243. $this->changePassword($md5Pass, $oldPass, $token);
  244. m('log')->addlog('修改密码', json_encode($oldPass));
  245. } else {
  246. m('log')->addlog('不修改密码', json_encode($oldPass));
  247. }
  248. } else {
  249. m('log')->addlog('编辑用户信息处理-创建', json_encode($uname));
  250. $this->createUser($uname, $md5Pass, False);
  251. }
  252. }
  253. /*
  254. * 第三方会议-登录————获取token
  255. * */
  256. public function getMeetSysToken($adminid=null) {
  257. // 没传默认用管理员id
  258. $adminid = $adminid ?? getconfig('meetsys_admin_id');
  259. $token = m('meet_sys_login')->getone("oa_uid='{$adminid}'", 'token');
  260. if ($token == null || $token == '') {
  261. // 打log
  262. $type = '登录第三方会议-获取token';
  263. $remark = '未找到token,需要重新登录';
  264. m('log')->addlog($type, $remark);
  265. return -2;
  266. }
  267. // 打log
  268. $type = '登录第三方会议-获取token';
  269. // $remark = $token['token'];
  270. $remark = 'token';
  271. m('log')->addlog($type, $remark);
  272. return $token['token'];
  273. }
  274. }