AdminUserController.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: dingran
  5. * Date: 2019/3/10
  6. * Time: 下午12:37
  7. */
  8. namespace app\platform\modules\user\controllers;
  9. use app\common\events\UserActionEvent;
  10. use app\common\helpers\Url;
  11. use app\platform\controllers\BaseController;
  12. use app\platform\modules\system\models\SystemSetting;
  13. use app\platform\modules\user\models\AdminUser;
  14. use app\platform\modules\user\models\Role;
  15. use app\platform\modules\user\requests\AdminUserCreateRequest;
  16. use app\platform\modules\user\requests\AdminUserUpdateRequest;
  17. use app\platform\modules\user\models\YzUserProfile;
  18. use app\platform\modules\application\models\UniacidApp;
  19. use app\platform\modules\application\models\AppUser;
  20. use app\platform\controllers\ResetpwdController;
  21. use Illuminate\Support\Facades\Hash;
  22. use Illuminate\Validation\Rule;
  23. use app\common\helpers\Cache;
  24. class AdminUserController extends BaseController
  25. {
  26. protected $fields = [
  27. 'name' => '',
  28. 'phone' => '',
  29. 'roles' => [],
  30. ];
  31. /**
  32. * Display a listing of the resource.(显示用户列表.)
  33. *
  34. * @return \Illuminate\Http\JsonResponse
  35. */
  36. public function index()
  37. {
  38. $param = request();
  39. $users = AdminUser::getList($param);
  40. return $this->successJson('成功', $users);
  41. }
  42. /**
  43. * Show the form for creating a new resource And Store a newly created resource in storage.(添加用户)
  44. *
  45. * @return \Illuminate\Http\JsonResponse
  46. * @throws \app\common\exceptions\AppException
  47. */
  48. public function create()
  49. {
  50. $data = request()->user;
  51. $loginset = SystemSetting::settingLoad('loginset', 'system_loginset');
  52. if (preg_match('/[\x{4e00}-\x{9fa5}]/u', $data['password'])>0) {
  53. return $this->errorJson(['密码不能含有中文']);
  54. }
  55. if($loginset['password_verify'] == 1)
  56. {
  57. $validatePassword = validatePassword($data['password']);
  58. if ($validatePassword !== true) {
  59. return $this->errorJson($validatePassword);
  60. }
  61. }
  62. if (!$data) {
  63. return $this->check(AdminUser::returnData('0', AdminUser::PARAM));
  64. }
  65. return $this->returnMessage(0, $data);
  66. }
  67. /**
  68. * Show the form for editing the specified resource And Update the specified resource in storage.(修改用户)
  69. *
  70. * @return \Illuminate\Http\JsonResponse
  71. * @throws \app\common\exceptions\AppException
  72. */
  73. public function edit()
  74. {
  75. $uid = request()->uid;
  76. $data = request()->user;
  77. if (preg_match('/[\x{4e00}-\x{9fa5}]/u', $data['password'])>0) {
  78. return $this->errorJson(['密码不能含有中文']);
  79. }
  80. if (!$uid) {
  81. return $this->check(AdminUser::returnData('0', AdminUser::PARAM));
  82. }
  83. $user = AdminUser::with('hasOneProfile')->with(['hasOneAppUser' => function ($query) {
  84. return $query->select('uid', 'role_name', 'role');
  85. }])->find($uid);
  86. if ($data) {
  87. return $this->returnMessage(1, $data, $user);
  88. }
  89. return $this->successJson('成功', $user);
  90. }
  91. /**
  92. * Remove the specified resource from storage.
  93. *
  94. * @param $uid
  95. * @return \Illuminate\Http\RedirectResponse
  96. */
  97. public function destroy($uid)
  98. {
  99. $tag = AdminUser::find((int)$uid);
  100. foreach ($tag->roles as $v) {
  101. $tag->roles()->detach($v);
  102. }
  103. if ($tag && $tag->$uid != 1) {
  104. /*********************用户被删除BUG-log*********************/
  105. $find = base_path().'\storage\logs\user_admin_delete_log.log';
  106. if(!file_exists($find)){
  107. fopen($find,'a');
  108. }
  109. $array = [];
  110. $array['deleteid'] = $uid;
  111. $array['uid'] = \YunShop::app()->uid;
  112. $array['uniacid'] = \YunShop::app()->uniacid;
  113. $array['acid'] = \YunShop::app()->acid;
  114. $array['username'] = \YunShop::app()->username;
  115. $array['siteurl'] = \YunShop::app()->siteurl;
  116. $array['time'] = date('Y-m-d H:i:s',time());
  117. $txt = "app\platform\modules\user\controllers\AdminUserController.php\n";
  118. $txt .= json_encode($array,true)."\n\n";
  119. file_put_contents($find,$txt, FILE_APPEND);
  120. \Log::debug("====用户被删除BUG-log===",$array);
  121. /*********************用户被删除BUG-log*********************/
  122. $tag->delete();
  123. } else {
  124. return redirect()->back()
  125. ->withErrors("删除失败");
  126. }
  127. return redirect()->back()
  128. ->withSuccess("删除成功");
  129. }
  130. /**
  131. * 修改状态
  132. *
  133. * @return \Illuminate\Http\JsonResponse
  134. */
  135. public function status()
  136. {
  137. $uid = request()->uid;
  138. $status = request()->status;
  139. if (!$uid || !$status) {
  140. return $this->check(AdminUser::returnData('0', AdminUser::PARAM));
  141. }
  142. if($status == '2')
  143. {
  144. $updateArr = ['status'=>$status,'change_password_at'=>time()];
  145. }else{
  146. $updateArr = ['status'=>$status];
  147. }
  148. $result = AdminUser::where('uid', $uid)->update($updateArr);
  149. $status == '2' ? $state = '有效' : $state = '无效' ;
  150. if ($result) {
  151. \Log::info('状态修改成功,现状态'.$state);
  152. return $this->check(AdminUser::returnData('1'));
  153. } else {
  154. return $this->check(AdminUser::returnData('0', AdminUser::FAIL));
  155. }
  156. }
  157. /**
  158. * 修改密码
  159. *
  160. * @return \Illuminate\Http\JsonResponse
  161. * @throws \app\common\exceptions\AppException
  162. */
  163. public function change()
  164. {
  165. $uid = request()->uid;
  166. $data = request()->user;
  167. if (preg_match('/[\x{4e00}-\x{9fa5}]/u', $data['password'])>0) {
  168. return $this->errorJson(['密码不能含有中文']);
  169. }
  170. $loginset = SystemSetting::settingLoad('loginset', 'system_loginset');
  171. if($loginset['password_verify'] == 1)
  172. {
  173. $validatePassword = validatePassword($data['password']);
  174. if ($validatePassword !== true) {
  175. return $this->errorJson($validatePassword);
  176. }
  177. }
  178. if (!$uid || !$data) {
  179. return $this->check(AdminUser::returnData('0', AdminUser::PARAM));
  180. }
  181. $user = AdminUser::getData($uid);
  182. return $this->returnMessage(1, $data, $user);
  183. }
  184. public function userChange()
  185. {
  186. $data = request()->user;
  187. $data['password'] = trim($data['password']);
  188. if (!$data['password'] || $data['password'] != $data['confirm_password']) {
  189. return $this->errorJson('两次密码输入不一致');
  190. }
  191. if (preg_match('/[\x{4e00}-\x{9fa5}]/u', $data['password'])>0) {
  192. return $this->errorJson('密码不能含有中文');
  193. }
  194. $loginset = SystemSetting::settingLoad('loginset', 'system_loginset');
  195. if($loginset['password_verify'] == 1)
  196. {
  197. $validatePassword = validatePassword($data['password']);
  198. if ($validatePassword !== true) {
  199. return $this->errorJson($validatePassword);
  200. }
  201. }
  202. $user = \Auth::guard('admin')->user();
  203. if(Hash::check($user->password, $data['original_password']))
  204. {
  205. return $this->errorJson('原密码填写有误');
  206. }
  207. $user->password = bcrypt($data['password']);
  208. $user->save();
  209. \Auth::guard('admin')->logoutOtherDevices($data['password']);
  210. return $this->successJson('修改成功');
  211. }
  212. /**
  213. * 单个用户平台列表
  214. */
  215. public function applicationList()
  216. {
  217. $uid = request()->uid;
  218. $page = intval(request()->page);
  219. $page_size = 15;
  220. // 如果page小于且等于1 就等于0 (因为offset是从0开始取数据)
  221. if ($page<=1) {
  222. $page = 0;
  223. $offset = ($page)*$page_size;
  224. } else {
  225. $offset = ($page-1)*$page_size;
  226. }
  227. // 获取与用户关联的平台角色信息
  228. $user = AdminUser::with(['hasManyAppUser' => function ($query) use ($offset, $page_size) {
  229. $query->with('hasOneApp');
  230. $query->offset($offset)->limit($page_size);
  231. }])->where('uid', $uid)->first();
  232. $total = AppUser::where('uid', $uid)->count();
  233. $avg = $page <= 1 ? intval(floor($total / $page_size)) : intval(ceil($total / $page_size));
  234. // 获取创始人
  235. $uniacid_app = UniacidApp::where('creator', $uid);
  236. $user['total'] = $uniacid_app->count();
  237. $sign = false;
  238. if ($page >= $avg) {
  239. $sign = true;
  240. $offset = 0;
  241. $rem = $total % $page_size;
  242. $mod = 0;
  243. if ($page == $avg) {
  244. $mod = $rem;
  245. } else {
  246. $offset = ($page-$avg)*$page_size;
  247. }
  248. $uniacid_apps = $uniacid_app->offset($offset-$rem)->limit($page_size-$mod)->get();
  249. }
  250. $user['total'] += $total;
  251. if (!$user) {
  252. return $this->errorJson(['未获取到该用户']);
  253. } elseif ($user->hasManyAppUser->isEmpty() && $uniacid_apps->isEmpty()) {
  254. return $this->successJson('该用户暂时没有平台');
  255. }
  256. $user = $user->toArray();
  257. if ($sign && !$uniacid_apps->isEmpty()) {
  258. $uniacid_apps = $uniacid_apps->toArray();
  259. // 添加创始人数据
  260. foreach ($uniacid_apps as $item) {
  261. array_push($user['has_many_app_user'], ['role_name' => '创始人', 'has_one_app' => $item ? : [] ]);
  262. }
  263. }
  264. $user['current_page'] = $page ? : 1;
  265. $user['per_page'] = $page_size;
  266. return $this->successJson('成功', $user);
  267. }
  268. /**
  269. * 店员列表
  270. *
  271. * @return \Illuminate\Http\JsonResponse
  272. */
  273. public function clerkList()
  274. {
  275. $parames = request();
  276. $user = AdminUser::where('type', 3)->searchUsers($parames)->with(['hasOneProfile'])->orderBy('uid','DESC')->paginate();
  277. foreach ($user as &$item) {
  278. $item['status'] == 2 ? $item['state'] = '有效' : null;
  279. $item['status'] == 3 ? $item['state'] = '已禁用' : null;
  280. $item['create_at'] = $item['created_at']->format('Y年m月d日');
  281. $item->hasOneAppUser['app_name'] = $item->hasOneAppUser->hasOneApp->name;
  282. }
  283. return $this->successJson('成功', $user);
  284. }
  285. /**
  286. * 修改当前用户信息
  287. *
  288. * @return \Illuminate\Http\JsonResponse
  289. * @throws \app\common\exceptions\AppException
  290. */
  291. public function modifyCurrentUser()
  292. {
  293. $data = request()->user;
  294. if (!$data) {
  295. return $this->check(AdminUser::returnData('0', AdminUser::PARAM));
  296. }
  297. $loginset = SystemSetting::settingLoad('loginset', 'system_loginset');
  298. if ($loginset['password_verify'] == 1) {
  299. $validatePassword = validatePassword($data['password']);
  300. if ($validatePassword !== true) {
  301. return $this->errorJson($validatePassword);
  302. }
  303. }
  304. $user = \Auth::guard('admin')->user();
  305. return $this->returnMessage(1, $data, $user);
  306. }
  307. /**
  308. * 发送手机验证码
  309. *
  310. * @return \Illuminate\Http\JsonResponse|string
  311. */
  312. public function sendCode()
  313. {
  314. $user = \Auth::guard('admin')->user();
  315. if (request()->mobile != $user['hasOneProfile']['mobile']) {
  316. return $this->errorJson(['您输入的手机与登录的账号不符合']);
  317. }
  318. request()->offsetSet('username', $user['username']);
  319. return (new ResetpwdController)->SendCode();
  320. }
  321. /**
  322. * 修改手机号
  323. *
  324. * @return \Illuminate\Http\JsonResponse
  325. */
  326. public function modifyMobile()
  327. {
  328. $data = request()->data;
  329. $user = \Auth::guard('admin')->user();
  330. if (request()->data['old_mobile'] != $user['hasOneProfile']['mobile']) {
  331. return $this->errorJson(['您输入的手机与登录的账号不符合']);
  332. }
  333. $data['avatar'] = $user['hasOneProfile']['avatar'];
  334. if (AdminUser::saveProfile($data, $user)) {
  335. return $this->check(AdminUser::returnData('0', AdminUser::FAIL));
  336. } else {
  337. return $this->check(AdminUser::returnData('1'));
  338. }
  339. }
  340. /**
  341. * 发送新手机号验证码
  342. *
  343. * @return \Illuminate\Http\JsonResponse|string
  344. */
  345. public function sendNewCode()
  346. {
  347. $mobile = request()->mobile;
  348. $state = \YunShop::request()->state ? : '86';
  349. return (new ResetpwdController)->send($mobile, $state);
  350. }
  351. /**
  352. * 返回消息
  353. *
  354. * @param $sign 1: 修改, 0: 添加
  355. * @param null $data 参数
  356. * @param array $user 用户信息
  357. * @return \Illuminate\Http\JsonResponse
  358. */
  359. public function returnMessage($sign, $data = null, $user = [])
  360. {
  361. if ($sign && !$user) {
  362. return $this->check(AdminUser::returnData('0', AdminUser::NO_DATA));
  363. }
  364. $validate = $this->validate($this->rules(), $data, $this->message());
  365. if ($sign) {
  366. $validate = $this->validate($this->rules($user), $data, $this->message());
  367. }
  368. if ($validate) {
  369. return $validate;
  370. }
  371. return $this->check(AdminUser::saveData($data, $user));
  372. }
  373. /**
  374. * 处理表单验证
  375. *
  376. * @param array $rules
  377. * @param \Request|null $request
  378. * @param array $messages
  379. * @param array $customAttributes
  380. * @return \Illuminate\Http\JsonResponse
  381. */
  382. public function validate($rules, $request = null, $messages = [], $customAttributes = [])
  383. {
  384. if (!isset($request)) {
  385. $request = request();
  386. }
  387. $validator = $this->getValidationFactory()->make($request, $rules, $messages, $customAttributes);
  388. if ($validator->fails()) {
  389. return $this->errorJson($validator->errors()->all());
  390. }
  391. }
  392. /**
  393. * 表单验证规则
  394. *
  395. * @param $user
  396. * @param $data
  397. * @return array
  398. */
  399. public function rules($user = [], $data = [])
  400. {
  401. $rules = [];
  402. if (request()->path() == "admin/user/create") {
  403. $rules = [
  404. // 'username' => 'required|regex:/^[\x{4e00}-\x{9fa5}A-Za-z0-9_\-]{3,30}$/u|unique:yz_admin_users',
  405. // 'username' => 'required|unique:yz_admin_users',
  406. 'username' => [
  407. 'required',
  408. Rule::unique('yz_admin_users')->where(function($q){
  409. return $q->whereNull('deleted_at');
  410. })
  411. ],
  412. // 'mobile' => 'required|regex:/^1[3456789]\d{9}$/|unique:yz_users_profile',
  413. 'mobile' => [
  414. 'required',
  415. 'regex:/^1[3456789]\d{9}$/',
  416. Rule::unique('yz_users_profile')->where(function($q){
  417. return $q->whereNull('deleted_at');
  418. })
  419. ]
  420. ];
  421. }else if(request()->path() == "admin/user/edit") {
  422. $rules = [
  423. // 'username' => 'required|regex:/^[\x{4e00}-\x{9fa5}A-Za-z0-9_\-]{3,30}$/u|unique:yz_admin_users,username,'.$user['uid'].',uid',
  424. // 'username' => 'required|unique:yz_admin_users,username,'.$user['uid'].',uid',
  425. 'username' => [
  426. 'required',
  427. Rule::unique('yz_admin_users')->where(function($q) use($user){
  428. return $q->whereNull('deleted_at')->where('uid','<>',$user['uid']);
  429. })
  430. ],
  431. // 'mobile' => 'required|regex:/^1[3456789]\d{9}$/|unique:yz_users_profile,mobile,'.$user['hasOneProfile']['id'],
  432. 'mobile' => [
  433. 'required',
  434. 'regex:/^1[3456789]\d{9}$/',
  435. Rule::unique('yz_users_profile')->where(function($q) use($user){
  436. return $q->whereNull('deleted_at')->where('id','<>',$user['hasOneProfile']['id']);
  437. })
  438. ]
  439. ];
  440. }
  441. if (request()->path() != "admin/user/edit") {
  442. if (request()->path() == "admin/user/modify_user" && !$data['password']) {
  443. return $rules;
  444. }
  445. $rules['password'] = 'required';
  446. $rules['re_password'] = 'same:password';
  447. }
  448. return $rules;
  449. }
  450. /**
  451. * 表单验证自定义错误消息
  452. *
  453. * @return array
  454. */
  455. public function message()
  456. {
  457. return [
  458. 'username.required' => '用户名不能为空',
  459. 'username.regex' => '用户名格式不正确',
  460. 'username.unique' => '用户名已存在',
  461. 'mobile.required' => '手机号不能为空',
  462. 'mobile.regex' => '手机号格式不正确',
  463. 'mobile.unique' => '手机号已存在',
  464. 'password.required' => '密码不能为空',
  465. 're_password.same' => '两次密码不一致',
  466. ];
  467. }
  468. /**
  469. * 返回 json 信息
  470. *
  471. * @param $param
  472. * @return \Illuminate\Http\JsonResponse
  473. */
  474. public function check($param)
  475. {
  476. if ($param['sign'] == 1) {
  477. return $this->successJson('成功');
  478. } else {
  479. return $this->errorJson([$param['message']]);
  480. }
  481. }
  482. }