User.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\model\system;
  11. use app\model\store\Store;
  12. use think\facade\Session;
  13. use app\model\BaseModel;
  14. /**
  15. * 管理员模型
  16. */
  17. class User extends BaseModel
  18. {
  19. /*******************************************************************用户 编辑查询 start*****************************************************/
  20. /**
  21. * 添加用户
  22. * @param $data
  23. * @param int $store_id
  24. * @param string $source_type register 注册 add 添加
  25. * @return array
  26. */
  27. public function addUser($data, $store_id = 0, $source_type = 'register')
  28. {
  29. $site_id = isset($data[ 'site_id' ]) ? $data[ 'site_id' ] : '';
  30. $app_module = isset($data[ 'app_module' ]) ? $data[ 'app_module' ] : '';
  31. $member_id = isset($data[ 'member_id' ]) ? $data[ 'member_id' ] : 0;
  32. if ($site_id === '') return $this->error('', 'REQUEST_SITE_ID');
  33. if ($app_module === '') return $this->error('', 'REQUEST_APP_MODULE');
  34. if (empty($data[ "username" ])) return $this->error('', '用户名不能为空');
  35. if (empty($data[ "password" ])) return $this->error('', '密码不能为空');
  36. //判断 用户名 是否存在
  37. $user_info = model('user')->getInfo(
  38. [
  39. [ 'username', "=", $data[ "username" ] ],
  40. [ 'site_id', '=', $site_id ],
  41. [ 'app_module', '=', $app_module ]
  42. ]
  43. );
  44. if ($source_type == 'add') {
  45. if (!empty($user_info)) {
  46. return $this->error('', '账号已存在');
  47. }
  48. } else {
  49. if (!empty($user_info)) {
  50. if (data_md5($data[ "password" ]) == $user_info[ 'password' ]) {
  51. return $this->success(2);
  52. } else {
  53. return $this->error('', '账号已存在');
  54. }
  55. }
  56. }
  57. if ($member_id > 0) {
  58. $temp_condition = array (
  59. "app_module" => $data[ "app_module" ],
  60. "member_id" => $member_id
  61. );
  62. $temp_count = model('user')->getCount($temp_condition, 'uid');
  63. if ($temp_count > 0) {
  64. return $this->error('', 'USERNAME_EXISTED');
  65. }
  66. }
  67. $group_id = isset($data[ 'group_id' ]) ? $data[ 'group_id' ] : 0;
  68. if ($group_id > 0) {
  69. $group_model = new Group();
  70. $group_info = $group_model->getGroupInfo([ [ "group_id", "=", $group_id ], [ "site_id", "=", $site_id ], [ "app_module", "=", $app_module ] ], "group_name")[ 'data' ];
  71. $data[ "group_name" ] = $group_info[ "group_name" ];
  72. }
  73. $data[ "password" ] = data_md5($data[ "password" ]);
  74. $data[ "create_time" ] = time();
  75. model("user")->startTrans();
  76. try {
  77. $uid = model("user")->add($data);
  78. if ($uid === false) {
  79. model("user")->rollback();
  80. return $this->error('', 'UNKNOW_ERROR');
  81. }
  82. if (isset($data[ 'store' ]) && !empty($data[ 'store' ])) {
  83. $store_user_list = [];
  84. foreach ($data[ 'store' ] as $item) {
  85. if (empty($item[ 'store_id' ])) {
  86. model("user")->rollback();
  87. return $this->error('', '门店id不能为空');
  88. }
  89. if (empty($item[ 'group_id' ])) {
  90. model("user")->rollback();
  91. return $this->error('', '门店角色不能为空');
  92. }
  93. array_push($store_user_list, [
  94. 'uid' => $uid,
  95. 'site_id' => $data[ 'site_id' ],
  96. 'store_id' => $item[ 'store_id' ],
  97. 'group_id' => $item[ 'group_id' ],
  98. 'create_time' => time(),
  99. 'app_module' => 'store'
  100. ]);
  101. }
  102. model('user_group')->addList($store_user_list);
  103. }
  104. model("user")->commit();
  105. return $this->success($uid);
  106. } catch (\Exception $e) {
  107. model("user")->rollback();
  108. return $this->error('', '用户添加失败');
  109. }
  110. }
  111. public function getUserColumn($condition = [], $field = '')
  112. {
  113. $res = model('user')->getColumn($condition, $field);
  114. return $res;
  115. }
  116. /**
  117. * 编辑用户
  118. * @param $data
  119. * @param $condition
  120. */
  121. public function editUser($data, $condition, $store_id = 0)
  122. {
  123. $check_condition = array_column($condition, 2, 0);
  124. $site_id = isset($check_condition[ 'site_id' ]) ? $check_condition[ 'site_id' ] : '';
  125. $app_module = isset($check_condition[ 'app_module' ]) ? $check_condition[ 'app_module' ] : '';
  126. $uid = isset($check_condition[ 'uid' ]) ? $check_condition[ 'uid' ] : '';
  127. if ($uid === '') {
  128. return $this->error('', '缺少必须参数UID');
  129. }
  130. if ($site_id === '') {
  131. return $this->error('', 'REQUEST_SITE_ID');
  132. }
  133. if ($app_module === '') {
  134. return $this->error('', 'REQUEST_APP_MODULE');
  135. }
  136. $group_id = isset($data[ 'group_id' ]) ? $data[ 'group_id' ] : 0;
  137. if ($group_id > 0) {
  138. $group_model = new Group();
  139. $group_info = $group_model->getGroupInfo([ [ "group_id", "=", $group_id ], [ "site_id", "=", $site_id ], [ 'app_module', '=', $app_module ] ], "group_name")[ 'data' ];
  140. $data[ "group_name" ] = $group_info[ "group_name" ] ?? '';
  141. }
  142. model('user')->startTrans();
  143. try {
  144. $res = model("user")->update($data, $condition);
  145. if ($res === false) {
  146. model('user')->rollback();
  147. return $this->error('', 'UNKNOW_ERROR');
  148. }
  149. model('user_group')->delete([ [ 'site_id', '=', $site_id ], [ 'uid', '=', $uid ], [ 'app_module', '=', 'store' ] ]);
  150. if (isset($data[ 'store' ]) && !empty($data[ 'store' ])) {
  151. $store_user_list = [];
  152. foreach ($data[ 'store' ] as $item) {
  153. if (empty($item[ 'store_id' ])) {
  154. model("user")->rollback();
  155. return $this->error('', '门店id不能为空');
  156. }
  157. if (empty($item[ 'group_id' ])) {
  158. model("user")->rollback();
  159. return $this->error('', '门店角色不能为空');
  160. }
  161. array_push($store_user_list, [
  162. 'uid' => $uid,
  163. 'site_id' => $site_id,
  164. 'store_id' => $item[ 'store_id' ],
  165. 'group_id' => $item[ 'group_id' ],
  166. 'create_time' => time(),
  167. 'app_module' => 'store'
  168. ]);
  169. }
  170. model('user_group')->addList($store_user_list);
  171. }
  172. model("user")->commit();
  173. return $this->success($res);
  174. } catch (\Exception $e) {
  175. model("user")->rollback();
  176. return $this->error('', '用户编辑失败');
  177. }
  178. }
  179. /**
  180. * 编辑用户状态
  181. * @param $status
  182. * @param $condition
  183. */
  184. public function modifyUserStatus($status, $condition)
  185. {
  186. $check_condition = array_column($condition, 2, 0);
  187. $site_id = isset($check_condition[ 'site_id' ]) ? $check_condition[ 'site_id' ] : '';
  188. if ($site_id === '') {
  189. return $this->error('', 'REQUEST_SITE_ID');
  190. }
  191. $data = array (
  192. "status" => $status,
  193. "update_time" => time()
  194. );
  195. $res = model('user')->update($data, $condition);
  196. if ($res === false) {
  197. return $this->error('', 'UNKNOW_ERROR');
  198. }
  199. return $this->success($res);
  200. }
  201. /**
  202. * 重置密码
  203. * @param $password
  204. * @param $condition
  205. * @return array|\multitype
  206. */
  207. public function modifyUserPassword($password, $condition)
  208. {
  209. $res = model('user')->update([ 'password' => data_md5($password) ], $condition);
  210. if ($res === false) {
  211. return $this->error('', 'RESULT_ERROR');
  212. }
  213. return $this->success($res);
  214. }
  215. /**
  216. * 系统用户修改密码
  217. * @param $condition
  218. * @param $new_password
  219. * @return array
  220. */
  221. public function modifyAdminUserPassword($condition, $new_password)
  222. {
  223. if (addon_is_exit("demo")) {
  224. return $this->error('', '权限不足,请联系客服');
  225. }
  226. $res = model('user')->getInfo($condition, "uid,password");
  227. if (!empty($res)) {
  228. $data = array (
  229. 'password' => data_md5($new_password)
  230. );
  231. $res = model('user')->update($data, $condition);
  232. return $this->success($res, 'SUCCESS');
  233. } else {
  234. return $this->error('', 'PASSWORD_ERROR');
  235. }
  236. }
  237. /**
  238. * 删除用户
  239. * @param array $condition
  240. * @return multitype:string mixed
  241. */
  242. public function deleteUser($condition)
  243. {
  244. $check_condition = array_column($condition, 2, 0);
  245. $app_module = isset($check_condition[ 'app_module' ]) ? $check_condition[ 'app_module' ] : '';
  246. $uid = isset($check_condition[ 'uid' ]) ? $check_condition[ 'uid' ] : '';
  247. if ($uid === '') {
  248. return $this->error('', '缺少必须参数UID');
  249. }
  250. if ($app_module === '') {
  251. return $this->error('', 'REQUEST_APP_MODULE');
  252. }
  253. $res = model('user')->delete($condition);
  254. if ($res === false) {
  255. return $this->error('', 'UNKNOW_ERROR');
  256. }
  257. model('user_group')->delete([ [ 'uid', '=', $uid ] ]);
  258. return $this->success($res);
  259. }
  260. /**
  261. * 清除后台所有用户的登录信息
  262. * @param $app_module
  263. * @param $site_id
  264. * @return array
  265. */
  266. public function deleteUserLoginInfo($app_module, $site_id)
  267. {
  268. $dir = './runtime/session';
  269. $this->deldir($dir);
  270. Session::delete($app_module . "_" . $site_id . ".uid");
  271. return $this->success();
  272. }
  273. public function deldir($dir)
  274. {
  275. //先删除目录下的文件:
  276. $dh = opendir($dir);
  277. while ($file = readdir($dh)) {
  278. if ($file != "." && $file != "..") {
  279. $fullpath = $dir . "/" . $file;
  280. if (!is_dir($fullpath)) {
  281. unlink($fullpath);
  282. } else {
  283. deldir($fullpath);
  284. }
  285. }
  286. }
  287. closedir($dh);
  288. }
  289. /**
  290. * 获取用户信息
  291. * @param $condition
  292. * @param string $field
  293. * @return \multitype
  294. */
  295. public function getUserInfo($condition, $field = "uid, app_module, site_id, group_id, group_name, username, member_id, create_time, update_time, status, login_time, login_ip, is_admin")
  296. {
  297. $info = model('user')->getInfo($condition, $field);
  298. if (!empty($info)) {
  299. if (isset($info[ 'uid' ])) {
  300. $join = [
  301. [ 'store s', 's.store_id = ug.store_id', 'inner' ],
  302. [ 'cashier_auth_group g', 'g.group_id = ug.group_id', 'inner' ]
  303. ];
  304. $info[ 'user_group_list' ] = model('user_group')->getList([ [ 'ug.uid', '=', $info[ 'uid' ] ] ], 'ug.store_id,ug.group_id,s.store_name,g.menu_array', 's.is_default desc', 'ug', $join);
  305. }
  306. }
  307. return $this->success($info);
  308. }
  309. /**
  310. * 获取用户列表
  311. * @param array $condition
  312. * @param string $field
  313. * @param string $order
  314. * @param string $limit
  315. * @return multitype:string mixed
  316. */
  317. public function getUserList($condition = [], $field = 'uid, app_module, site_id, group_id, username, member_id, create_time, update_time, status, login_time, login_ip, is_admin, group_name', $order = '', $limit = null)
  318. {
  319. $list = model('user')->getList($condition, $field, $order, '', '', '', $limit);
  320. return $this->success($list);
  321. }
  322. /**
  323. * 获取会员分页列表
  324. * @param array $condition
  325. * @param number $page
  326. * @param string $page_size
  327. * @param string $order
  328. * @param string $field
  329. * @return multitype:string mixed
  330. */
  331. public function getUserPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = 'uid, app_module, site_id, group_id, username, member_id, create_time, update_time, status, login_time, login_ip, is_admin, group_name, login_time')
  332. {
  333. $list = model('user')->pageList($condition, $field, $order, $page, $page_size);
  334. return $this->success($list);
  335. }
  336. /**
  337. * 获取站点用户分页列表
  338. * @param unknown $condition
  339. * @param number $page
  340. * @param string $page_size
  341. * @param string $order
  342. */
  343. public function getSiteUserPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '')
  344. {
  345. $field = ' nu.uid, nu.app_module, nu.app_group,
  346. nu.is_admin, nu.site_id, nu.group_id, nu.group_name, nu.username, nu.member_id, nu.create_time,
  347. nu.update_time, nu.status, nu.login_time, nu.login_ip, ns.site_name,';
  348. $alias = 'nu';
  349. $join = [
  350. [
  351. 'shop ns',
  352. 'nu.site_id = ns.site_id',
  353. 'left'
  354. ],
  355. ];
  356. $list = model("user")->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
  357. return $this->success($list);
  358. }
  359. /**
  360. * 检测权限,true:通过,false:拒绝
  361. * @param $url
  362. * @param $app_module
  363. * @param $group_info
  364. * @param string $addon
  365. * @return bool
  366. */
  367. public function checkAuth($url, $app_module, $group_info, $addon = '')
  368. {
  369. $auth_control = event("AuthControl", [ 'url' => $url, 'app_module' => $app_module ], 1);
  370. if (!empty($auth_control)) {
  371. if ($auth_control[ 'code' ] < 0) {
  372. return false;
  373. }
  374. }
  375. $menu_model = new Menu();
  376. $menu_info = $menu_model->getMenuInfoByUrl($url, $app_module, $addon);
  377. if (!empty($menu_info[ 'data' ])) {
  378. if ($group_info[ 'is_system' ] == 1) {
  379. return true;
  380. }
  381. if ($menu_info[ 'data' ][ 'is_control' ] == 0) {
  382. return true;
  383. }
  384. //权限组
  385. if (empty($group_info)) {
  386. return false;
  387. }
  388. if (strpos(',' . $group_info[ 'menu_array' ] . ',', ',' . $menu_info[ 'data' ][ 'name' ] . ',') !== false) {
  389. return true;
  390. } else {
  391. return false;
  392. }
  393. } else {
  394. $count = $menu_model->getMenuCount([ [ 'url', '=', $url ] ]);
  395. if ($count[ 'data' ] > 0) {
  396. return false;
  397. }
  398. return true;
  399. }
  400. }
  401. /**
  402. * 获取相邻菜单
  403. * @param $url
  404. * @param $app_module
  405. * @param $group_info
  406. * @param string $addon
  407. * @return array
  408. */
  409. public function getRedirectUrl($url, $app_module, $group_info, $addon = '')
  410. {
  411. if ($this->checkAuth($url, $app_module, $group_info) == false) {
  412. $menu_model = new Menu();
  413. $menu_info = $menu_model->getMenuInfoByUrl($url, $app_module, $addon)[ 'data' ];
  414. if (empty($menu_info)) {
  415. //针对空值特殊
  416. $menu_count = $menu_model->getMenuCount([ [ 'url', "=", $url ] ]);
  417. if ($menu_count[ 'data' ] > 0) {
  418. return [
  419. 'url' => 'shop/login/login'
  420. ];
  421. }
  422. }
  423. $menu_count = $menu_model->getMenuCount([ [ 'url', "=", $url ], [ 'app_module', "=", $app_module ] ])[ 'data' ];
  424. if ($menu_count == 1) {
  425. return [];
  426. }
  427. if ($menu_info[ 'level' ] == 1) {
  428. } elseif ($menu_info[ 'level' ] == 2) {
  429. $menu_second_info = $menu_model->getMenuInfo([
  430. [ 'parent', '=', $menu_info[ 'parent' ] ],
  431. [ 'level', '=', 2 ],
  432. [ 'is_show', '=', 1 ],
  433. [ 'name', 'in', $group_info[ 'menu_array' ] ],
  434. [ 'app_module', '=', $app_module ]
  435. ])[ 'data' ];
  436. if (!empty($menu_second_info)) {
  437. if ($menu_info[ 'addon' ] == $menu_second_info[ 'addon' ]) {
  438. return $menu_second_info;
  439. }
  440. }
  441. } elseif ($menu_info[ 'level' ] == 3) {
  442. $check_menu_info = $menu_model->getMenuInfo([
  443. [ 'parent', '=', $menu_info[ 'parent' ] ],
  444. [ 'level', '=', 3 ],
  445. [ 'is_show', '=', 1 ],
  446. [ 'name', 'in', $group_info[ 'menu_array' ] ],
  447. [ 'app_module', '=', $app_module ]
  448. ])[ 'data' ];
  449. if (!empty($check_menu_info)) {
  450. if ($menu_info[ 'addon' ] == $check_menu_info[ 'addon' ]) {
  451. return $check_menu_info;
  452. }
  453. } else {
  454. $parent_menu_info = $menu_model->getMenuInfo([ [ 'name', '=', $menu_info[ 'parent' ] ], [ 'is_show', '=', 1 ], [ 'app_module', '=', $app_module ] ])[ 'data' ];
  455. $check_menu_info = $menu_model->getMenuInfo([
  456. [ 'parent', '=', $parent_menu_info[ 'parent' ] ],
  457. [ 'is_show', '=', 1 ],
  458. [ 'name', 'in', $group_info[ 'menu_array' ] ],
  459. [ 'app_module', '=', $app_module ]
  460. ])[ 'data' ];
  461. if (!empty($check_menu_info)) {
  462. // if($menu_info['addon'] == $check_menu_info['addon']){
  463. return $check_menu_info;
  464. // }
  465. }
  466. }
  467. } elseif ($menu_info[ 'level' ] == 4) {
  468. $check_menu_info = $menu_model->getMenuInfo([
  469. [ 'parent', '=', $menu_info[ 'parent' ] ],
  470. [ 'level', '=', 3 ], [ 'is_show', '=', 1 ],
  471. [ 'name', 'in', $group_info[ 'menu_array' ] ],
  472. [ 'app_module', '=', $app_module ]
  473. ])[ 'data' ];
  474. if (!empty($check_menu_info)) {
  475. if ($menu_info[ 'addon' ] == $check_menu_info[ 'addon' ]) {
  476. return $check_menu_info;
  477. }
  478. } else {
  479. $parent_menu_info = $menu_model->getMenuInfo([ [ 'name', '=', $menu_info[ 'parent' ] ], [ 'is_show', '=', 1 ], [ 'app_module', '=', $app_module ] ])[ 'data' ];
  480. $check_menu_info = $menu_model->getMenuInfo([
  481. [ 'parent', '=', $parent_menu_info[ 'parent' ] ],
  482. [ 'is_show', '=', 1 ],
  483. [ 'name', 'in', $group_info[ 'menu_array' ] ],
  484. [ 'app_module', '=', $app_module ]
  485. ])[ 'data' ];
  486. if (!empty($check_menu_info)) {
  487. if ($menu_info[ 'addon' ] == $check_menu_info[ 'addon' ]) {
  488. return $check_menu_info;
  489. }
  490. }
  491. }
  492. }
  493. }
  494. return [];
  495. }
  496. /*******************************************************************用户 编辑查询 end*****************************************************/
  497. /*******************************************************************用户注册登录 start*****************************************************/
  498. /**
  499. * 用户登录
  500. * @param unknown $mobile
  501. * @param unknown $password
  502. */
  503. public function login($username, $password, $app_module = 'shop', $site_id = 0)
  504. {
  505. $user_condition = [
  506. [ 'username', '=', $username ],
  507. [ 'app_module', '=', $app_module ],
  508. [ 'site_id', '=', $site_id ]
  509. ];
  510. if ($app_module == 'shop') $user_condition[] = [ 'group_id', '>', 0 ];
  511. $user_info = model('user')->getInfo($user_condition);
  512. if (empty($user_info)) {
  513. return $this->error('', 'USER_NOT_EXIST');
  514. }
  515. if ($user_info[ 'password' ] != data_md5($password)) {
  516. return $this->error('', 'PASSWORD_ERROR');
  517. }
  518. if ($user_info[ 'status' ] !== 1) {
  519. return $this->error([], 'USER_IS_LOCKED');
  520. }
  521. if ($user_info['group_id'] == 2){
  522. return $this->error([], 'USER_IS_SHOP_GROUP');
  523. }
  524. $this->initLogin($user_info);
  525. return $this->success();
  526. }
  527. /**
  528. * 初始化登录
  529. * @param unknown $user_info
  530. */
  531. private function initLogin($user_info)
  532. {
  533. $time = time();
  534. //初始化登录信息
  535. $auth = array (
  536. 'uid' => $user_info[ 'uid' ],
  537. 'username' => $user_info[ 'username' ],
  538. 'create_time' => $user_info[ 'create_time' ],
  539. 'status' => $user_info[ 'status' ],
  540. 'group_id' => $user_info[ "group_id" ],
  541. 'site_id' => $user_info[ "site_id" ],
  542. 'app_group' => $user_info[ "app_group" ],
  543. 'is_admin' => $user_info[ 'is_admin' ],
  544. 'login_time' => $time,
  545. 'login_ip' => request()->ip(),
  546. 'sys_uid' => $user_info[ 'sys_uid' ]
  547. );
  548. //更新登录记录
  549. $data = [
  550. 'login_time' => time(),
  551. 'login_ip' => request()->ip(),
  552. ];
  553. model('user')->update($data, [ [ 'uid', "=", $user_info[ 'uid' ] ] ]);
  554. Session::set($user_info[ 'app_module' ] . "_" . $user_info[ 'site_id' ] . ".uid", $user_info[ 'uid' ]);
  555. Session::set($user_info[ 'app_module' ] . "_" . $user_info[ 'site_id' ] . ".user_info", $auth);
  556. Session::set('app_module' . "_" . $user_info[ 'site_id' ] . ".login_module", $user_info[ 'app_module' ]);
  557. $this->addUserLog($user_info[ 'uid' ], $user_info[ 'username' ], $user_info[ 'site_id' ], "用户登录", []);//添加日志
  558. }
  559. /**
  560. * uni-app端用户登录
  561. * @param $username
  562. * @param $password
  563. * @param $app_module
  564. * @return array
  565. */
  566. public function uniAppLogin($username, $password, $app_module)
  567. {
  568. $time = time();
  569. // 验证参数 预留
  570. $user_info = $this->getUserInfo([ [ 'username', "=", $username ] ], 'uid,app_module,site_id,group_id,group_name,username,status,is_admin,password')[ 'data' ];
  571. if (empty($user_info)) {
  572. return $this->error('', 'USER_LOGIN_ERROR');
  573. } else if (data_md5($password) !== $user_info[ 'password' ]) {
  574. return $this->error([], 'PASSWORD_ERROR');
  575. } else if ($user_info[ 'status' ] !== 1) {
  576. return $this->error([], 'USER_IS_LOCKED');
  577. }
  578. // 查询默认门店
  579. if ($app_module == 'store' && $user_info[ 'is_admin' ]) {
  580. $store_info = ( new Store() )->getDefaultStore($user_info[ 'site_id' ])[ 'data' ] ?? [];
  581. if (empty($user_info[ 'user_group_list' ])) {
  582. $user_info[ 'user_group_list' ] = [ $store_info ];
  583. } else {
  584. $store_list = array_column($user_info[ 'user_group_list' ], null, 'store_id');
  585. if (!isset($store_list[ $store_info[ 'store_id' ] ])) array_push($user_info[ 'user_group_list' ], $store_info);
  586. }
  587. }
  588. //更新登录记录
  589. $data = [
  590. 'login_time' => $time,
  591. 'login_ip' => request()->ip(),
  592. ];
  593. model('user')->update($data, [ [ 'uid', "=", $user_info[ 'uid' ] ] ]);
  594. $this->addUserLog($user_info[ 'uid' ], $user_info[ 'username' ], $user_info[ 'site_id' ], "用户登录", []); //添加日志
  595. unset($user_info[ 'password' ]);
  596. return $this->success($user_info);
  597. }
  598. /**
  599. * 获取当前登录uid
  600. * @param $app_module
  601. * @param int $site_id
  602. * @return mixed
  603. */
  604. public function uid($app_module, $site_id = 0)
  605. {
  606. return Session::get($app_module . "_" . $site_id . ".uid");
  607. }
  608. /**
  609. * 登录模块
  610. */
  611. public function loginModule($site_id)
  612. {
  613. $login_module = Session::get('app_module' . "_" . $site_id . ".login_module");
  614. if (empty($login_module) || !strstr($_SERVER[ "REQUEST_URI" ], 'store/store')) {
  615. return 'shop';
  616. } else {
  617. return $login_module;
  618. }
  619. }
  620. /**
  621. * 获取当前登录管理员信息
  622. * @param $app_module
  623. * @param int $site_id
  624. * @return mixed
  625. */
  626. public function userInfo($app_module, $site_id = 0)
  627. {
  628. return Session::get($app_module . "_" . $site_id . ".user_info");
  629. }
  630. /**
  631. * 清除登录信息
  632. */
  633. public function clearLogin($app_module, $site_id = 0)
  634. {
  635. Session::delete($app_module . "_" . $site_id);
  636. }
  637. /*******************************************************************用户注册登录 end*****************************************************/
  638. /*******************************************************************用户日志 start*****************************************************/
  639. /**
  640. * 添加用户日志
  641. * @param $data
  642. */
  643. public function addUserLog($uid, $username, $site_id, $action_name, $data = [])
  644. {
  645. $url = request()->parseUrl();
  646. $ip = request()->ip();
  647. $log = array (
  648. "uid" => $uid,
  649. "username" => $username,
  650. "site_id" => $site_id,
  651. "url" => $url,
  652. "ip" => $ip,
  653. "data" => json_encode($data),
  654. "action_name" => $action_name,
  655. "create_time" => time(),
  656. );
  657. $res = model("user_log")->add($log);
  658. if ($res === false) {
  659. return $this->error('', 'UNKNOW_ERROR');
  660. }
  661. return $this->success($res);
  662. }
  663. /**
  664. * 删除用户日志
  665. */
  666. public function deleteUserLog($condition)
  667. {
  668. $check_condition = array_column($condition, 2, 0);
  669. $site_id = isset($check_condition[ 'site_id' ]) ? $check_condition[ 'site_id' ] : '';
  670. if ($site_id === '') {
  671. return $this->error('', 'REQUEST_SITE_ID');
  672. }
  673. $res = model("user_log")->delete($condition);
  674. if ($res === false) {
  675. return $this->error('', 'UNKNOW_ERROR');
  676. }
  677. return $this->success($res);
  678. }
  679. /**
  680. * 获用户员日志分页列表
  681. *
  682. * @param array $condition
  683. * @param number $page
  684. * @param string $page_size
  685. * @param string $order
  686. * @param string $field
  687. * @return multitype:string mixed
  688. */
  689. public function getUserLogPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = 'username, site_id, url, id, uid, data, ip, action_name, create_time')
  690. {
  691. $list = model('user_log')->pageList($condition, $field, $order, $page, $page_size);
  692. return $this->success($list);
  693. }
  694. /*******************************************************************用户日志 end*****************************************************/
  695. }