meet_sys_loginModel.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  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'=>getconfig('meetsys_admin_name'),
  16. 'password'=>getconfig('meetsys_admin_pass'),
  17. 'from'=>'wx'
  18. ];
  19. $adminid = getconfig('meetsys_admin_id');
  20. // } else {
  21. // $body = [
  22. // 'username'=>$uname,
  23. // 'password'=>substr(md5($pass), 0, 16),
  24. // 'from'=>'wx'
  25. // ];
  26. // }
  27. // 发送请求
  28. $resp = $this->sendPostRequest($loginUrl, $body);
  29. $code = $resp['code'] ?? -1;
  30. // 登录成功
  31. if ($code != 0) {
  32. // 登录报错处理
  33. if ($code == 400) {
  34. $msg = $resp['msg'];
  35. // 本地表中获取到用户信息
  36. $dataOne = $this->getone("username='$uname'", 'count(1) as con');
  37. $getCon = $dataOne['con'];
  38. // 找到了说明已经创建了,肯定是密码错了
  39. if ($getCon > 0) {
  40. // 用户名或者密码错误
  41. $type = '用户信息-登录时-'.$code;
  42. $remark = $msg;
  43. m('log')->addlog($type, $remark);
  44. // 阻止一下,要不第二次登录就创建用户了
  45. return;
  46. } else {
  47. $type = '用户信息-登录时-'.$code;
  48. $remark = '我要创建用户了啊';
  49. m('log')->addlog($type, $remark);
  50. // 没找到就要创建用户了->执行创建用户
  51. $this->createUser($uname, md5($pass));
  52. // 创建后登录
  53. $resp = $this->sendPostRequest($loginUrl, $body);
  54. // 如果创建失败,写日志退出
  55. if ($resp['code'] ?? -1!= 0) {
  56. $type = '登录第三方会议-登录时-创建用户';
  57. $remark = "用户{$uname}登录失败,错误信息:{$resp['msg']}";
  58. m('log')->addlog($type, $remark);
  59. return;
  60. }
  61. }
  62. } else {
  63. $type = '登录第三方会议-登录';
  64. $remark = "用户{$uname}登录失败,错误信息:{$resp['msg']}";
  65. m('log')->addlog($type, $remark);
  66. return;
  67. }
  68. }
  69. // 登录成功记录token
  70. $resp = $resp['data'];
  71. $data = [
  72. 'uid' => $resp['user']['id'],
  73. 'admin_id' => $resp['user']['admin_id'],
  74. 'username' => $resp['user']['username'],
  75. 'face' => $resp['user']['face'],
  76. 'door_pass' => $resp['user']['door_pass'],
  77. 'token' => $resp['token'],
  78. 'token_expired' => date('Y-m-d H:i:s', $resp['expired']),
  79. 'oa_uid' => $adminid,
  80. 'pass' => substr(md5($pass), 0, 16),
  81. 'desc' => $pass,
  82. ];
  83. // 查找是否已有登录信息
  84. $conInfo = m('meet_sys_login')->getone("`oa_uid`=$adminid", 'count(1) con');
  85. $con = $conInfo['con'];
  86. // 如果存在则更新,不存在则插入
  87. if ($con > 0) {
  88. $type = '登录第三方会议-登录2';
  89. $remark = '更新';
  90. m('meet_sys_login')->update($data, "`oa_uid`=".$adminid);
  91. } else {
  92. $type = '登录第三方会议-登录3';
  93. // $remark = $con.json_encode($data);
  94. $remark = '插入';
  95. m('meet_sys_login')->insert($data);
  96. }
  97. m('log')->addlog($type, $remark);
  98. }
  99. /*
  100. * 第三方会议-登录————创建用户
  101. * */
  102. public function createUser($uname, $md5Pass, $isSelf=True) {
  103. $baseUrl = getconfig('meetsys_basurl');
  104. $url = $baseUrl.'user/add';
  105. $md5Pass = substr($md5Pass, 0, 16); // 第三方限制长度,限制一下长度
  106. $body = [
  107. 'username'=>$uname, // 用户名
  108. 'password'=>$md5Pass, // 密码
  109. 'face'=>'' // 人脸图url地址
  110. ];
  111. // 会议管理员token
  112. $adminname = getconfig('meetsys_admin_name');
  113. $token = $this->getMeetSysToken();
  114. // 打log
  115. $type = '登录第三方会议-创建用户-获取token';
  116. m('log')->addlog($type, $adminname);
  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. $adminid = getconfig('meetsys_admin_id');
  260. $token = m('meet_sys_login')->getone("oa_uid='{$adminid}'", 'token');
  261. if ($token == null || $token == '') {
  262. // 打log
  263. $type = '登录第三方会议-获取token';
  264. $remark = '未找到token,需要重新登录';
  265. m('log')->addlog($type, $remark);
  266. return -2;
  267. }
  268. // 打log
  269. $type = '登录第三方会议-获取token';
  270. // $remark = $token['token'];
  271. $remark = 'token';
  272. m('log')->addlog($type, $remark);
  273. return $token['token'];
  274. }
  275. }