User.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\admin\controller;
  4. use app\admin\BaseController;use think\App;use think\facade\Db;use think\facade\Validate;
  5. class User extends BaseController{
  6. public function __construct(App $app) {parent::__construct($app);}
  7. /**
  8. * 设置供应商信息
  9. * @return \think\response\Json|void
  10. */
  11. public function EditUserCompany(){
  12. $post = $this->request->only(["token"=>"","nickname"=>"","id"=>"","mobile"=>"","companyArr"=>[]],"post");
  13. $valide = $validate=Validate::rule([
  14. 'nickname|真实姓名' => 'require|max:255|min:2',
  15. 'id|账户ID' => 'require|number|gt:0',
  16. 'mobile|手机号' => 'require|number|mobile',
  17. 'companyArr|业务公司' => 'require|array',
  18. ]);
  19. if($valide->check($post)==false) return json_show(1004,$valide->getError());
  20. $isSuper = Db::name("user_role")->alias("a")
  21. ->leftJoin("role b","a.roleid=b.id")
  22. ->where(["a.uid"=>$post['id'],"a.is_del"=>0,"b.level"=>1])
  23. ->findOrEmpty();
  24. if(!empty($isSuper) && !empty($post['companyArr']))return error_show(1002,"超管账户不允许设置关联业务公司");
  25. $saveinfo =[
  26. "id"=>$post['id'],
  27. "nickname"=>$post['nickname'],
  28. "mobile"=>$post['mobile'],
  29. "token"=>$post['token']
  30. ];
  31. $saev= resetinfo($saveinfo);
  32. if(!isset($saev['code'])||$saev['code']!=0){
  33. return error_show(1004,$saev['message']);
  34. }
  35. if(!empty($post['companyArr'])){
  36. if(!empty($post['companyArr'])){
  37. foreach ($post['companyArr'] as &$item){
  38. $company =Db::name("supplier_info")->where(["code"=>$item['companyCode']])->find();
  39. $item['company_type'] = $company["type"]==3?2:1;
  40. }
  41. }
  42. $companyinfo = ["id"=>$post['id'],"company"=>$post['companyArr'],"token"=>$post['token']];
  43. $companyset =setUserCompany($companyinfo);
  44. if(!isset($companyset['code'])||$companyset['code']!=0){
  45. return error_show(1004,$companyset['message']);
  46. }
  47. }
  48. return app_show(0,"设置成功");
  49. }
  50. /**
  51. * 用户列表
  52. */
  53. public function userList(){
  54. $post=$this->request->only(["token"=>"","nickname"=>"","relaComNo"=>"","islevel"=>"","username"=>"","companyNo"=>"","status"=>"","page"=>1,"size"=>10],"post");
  55. if($this->level==1){
  56. $companyNo = $post['companyNo']??"";
  57. }else{
  58. $companyNo = $post['relaComNo']??"";
  59. $post['companyNo'] = $post['relaComNo']??"";
  60. }
  61. $where=[["a.is_del","=",0]];
  62. unset($post['relaComNo']);
  63. if($post['companyNo']!=""){
  64. $where[]=["a.companyNo","=",$companyNo];
  65. }
  66. if($post['status']!==''){
  67. $uid =Db::name("user_role")->alias("a")->where(["status"=>1,"is_del"=>0])->where($where)->column("uid");
  68. if($post['status']==1){
  69. $where[]=["a.status","=",1];
  70. $post['uid']= $uid;
  71. }else{
  72. $post['nouid']=$uid;
  73. }
  74. unset($post['status']);
  75. }
  76. if($post["islevel"]!=""){
  77. $uid =Db::name("user_role")->alias("a")
  78. ->leftJoin("role b","a.roleid=b.id")->where([["b.level","=",1],["a.is_del","=",0]])->where($where)->column
  79. ("uid");
  80. if($post['islevel']==1){
  81. $post['uid']= $uid;
  82. }else{
  83. $post['nouid']=$uid;
  84. }
  85. unset($post["islevel"]);
  86. }
  87. $userinfo=GetUserList($post);
  88. if(empty($userinfo)||$userinfo['code']!=0){
  89. return app_show($userinfo['code'],$userinfo['msg']);
  90. }
  91. $data = $userinfo['data']['list'];
  92. $list=[];
  93. foreach ($data as $value){
  94. $roleArr = Db::name("user_role")->alias("a")
  95. ->leftJoin("role b","a.roleid=b.id")
  96. ->where(["uid"=>$value['id'],"a.companyNo"=>$value['companyCode'],"is_del"=>0])
  97. ->field("role_name,roleid,a.status,b.level")->findOrEmpty();
  98. $value['roleid']=$roleArr['roleid']??"";
  99. $value['com_status']=$roleArr['status']??"";
  100. $value["role_name"] =$roleArr['role_name']??"";
  101. $value["role_level"] =$roleArr['level']??"";
  102. $list[]=$value;
  103. }
  104. return app_show(0,"获取成功",["list"=>$list,"count"=>$userinfo['data']["count"]]);
  105. }
  106. /**获取当前访问用户的信息
  107. * @param token
  108. * @return \think\response\Json
  109. * @throws \think\exception\DbException
  110. */
  111. public function userInfo(){
  112. $post =$this->request->only(["token"=>"","relaComNo"=>""],"post","trim");
  113. $userinfo=GetUserInfo($post['token']);
  114. if(empty($userinfo)||$userinfo['code']!=0){
  115. return app_show(1002,"员工信息不存在");
  116. }
  117. $data = $userinfo['data'];
  118. $where=[["uid","=", $data['id']],["status","=",1],["is_del","=",0]];
  119. if($post['relaComNo']!=""){
  120. $where[]=["companyNo","=",$post['relaComNo']];
  121. }else{
  122. $where[]=["is_main","=",1];
  123. }
  124. $role =Db::name("user_role")->where($where)->findOrEmpty();
  125. if(!empty($role)){
  126. $company_name = Db::name("supplier_info")->where(["code"=>$role['companyNo']])->value("name","");
  127. $roleinfo = Db::name("role")->where(["id"=>$role['roleid']])->field("role_name,level")->find();
  128. }else{
  129. return error_show(1004,'未开通登录权限');
  130. }
  131. if(!empty($data['company_relaton'])){
  132. $roleArr = Db::name("user_role")->alias("a")
  133. ->leftJoin("role b","a.roleid=b.id")
  134. ->where(["a.status"=>1,"a.is_del"=>0,"a.uid"=>$data['id']])
  135. ->column("role_name,roleid,a.status,b.level","a.companyNo");
  136. foreach ($data['company_relaton'] as &$item){
  137. $item['roleid'] =isset($roleArr[$item['companyCode']])?$roleArr[$item['companyCode']]['roleid']:"";
  138. $item['role_name'] =isset($roleArr[$item['companyCode']])?$roleArr[$item['companyCode']]['role_name']:"";
  139. $item['role_status'] =isset($roleArr[$item['companyCode']])?$roleArr[$item['companyCode']]['status']:"";
  140. $item['role_level'] =isset($roleArr[$item['companyCode']])?$roleArr[$item['companyCode']]['level']:"";
  141. }
  142. }
  143. $data['role_name']=$roleinfo['role_name']??'';
  144. $data['company_name']=$company_name??'';
  145. $data['role_level']=$roleinfo['level']??'';
  146. $data['role_id']=$role['roleid']??'';
  147. $data['companyNo']=$role['companyNo']??'';
  148. $data['company_type']=$role['company_type']??'';
  149. return app_show(0,"获取成功",$data);
  150. }
  151. /**
  152. * @return \think\response\Json|void
  153. * @throws \think\db\exception\DataNotFoundException
  154. * @throws \think\db\exception\DbException
  155. * @throws \think\db\exception\ModelNotFoundException
  156. */
  157. public function setStatus(){
  158. $post =$this->request->only(["id"=>"","status"=>"","relaComNo"=>"","companyNo"=>"","token"=>""],"post");
  159. $valide =Validate::rule([
  160. 'id|账户ID' => 'require|number|gt:0',
  161. 'status|状态' => 'require|number|in:0,1',
  162. 'relaComNo|业务公司' => 'max:255',
  163. 'companyNo|业务公司' => 'max:255',
  164. ]);
  165. if($valide->check($post)==false) return error_show(1004,$valide->getError());
  166. $message = $post['status']==1?"启用":"禁用";
  167. if($this->level==1){
  168. $companyNo = isset($post['companyNo'])&&$post['companyNo']!=='' ? trim($post['companyNo']) :"";
  169. }else{
  170. $companyNo = isset($post['relaComNo'])&&$post['relaComNo']!=='' ? trim($post['relaComNo']) :"";
  171. }
  172. $userinfo =Db::name("user_role")->where(["uid"=>$post['id'],"companyNo"=>$companyNo,"is_del"=>0])
  173. ->find();
  174. if($userinfo==false){
  175. return error_show(1005,"未找到有关账户信息");
  176. }else{
  177. $userinfo['status']=$post['status'];
  178. $userinfo['updatetime']=date("Y-m-d H:i:s");
  179. $sa=Db::name("user_role")->save($userinfo);
  180. }
  181. if($sa==false){
  182. return error_show(1005,"{$message}失败");
  183. }else{
  184. return app_show(0,"{$message}成功");
  185. }
  186. }
  187. //获取所有用户的信息
  188. public function userAll(){
  189. $post=$this->request->only(['relaComNo'=>"","companyNo"=>"","nickname"=>"","roleid"=>"","status"=>""],"post","trim");
  190. $condition = [["is_del","=",0]];
  191. $rolecond=" level in (1,2,3)";
  192. if($post['relaComNo']!=""){
  193. $condition[]=["companyNo","=",$post['relaComNo']];
  194. $rolecond = "level=1 or (level in (2,3) and companyNo ='{$post['relaComNo']}' )";
  195. }
  196. if($post['companyNo']!=""){
  197. $condition[]=["companyNo","=",$post['companyNo']];
  198. $rolecond = "level=1 or (level in (2,3) and companyNo ='{$post['companyNo']}' )";
  199. }
  200. if($post['roleid']!=""){
  201. $condition[]=["roleid","=",$post['roleid']];
  202. $rolecond = "id={$post['roleid']}";
  203. }
  204. if($post['status']!="")$condition[]=["status","=",$post['status']];
  205. if($post['nickname']!="")$condition[]=["nickname","like","%{$post['nickname']}%"];
  206. $list=Db::name("user_role")->where($condition)->select()->toArray();
  207. $role = Db::name("role")->whereRaw($rolecond)->column("role_name,level","id");
  208. foreach ($list as &$value){
  209. $value['role_name']= $role[$value['roleid']]['role_name']??"";
  210. $value['role_level']= $role[$value['roleid']]['level']??"";
  211. $value['companyName']= Db::name("supplier_info")->where(["code"=>$value['companyNo']])->value("name",'');
  212. }
  213. return app_show(0,"获取成功",$list);
  214. }
  215. /**
  216. * 修改用户基础信息
  217. */
  218. public function setRole(){
  219. $post=$this->request->only(["id"=>"","nickname"=>"","mobile"=>"","relaComNo"=>"","companyNo"=>"","roleid"=>"",
  220. "token"=>""],"post","trim");
  221. $valide=Validate::rule([
  222. "id|账户ID"=>"require|number|gt:0",
  223. "nickname|名称"=>"require|max:255",
  224. "mobile|手机号"=>"require|mobile",
  225. "relaComNo|业务公司"=>"max:255",
  226. "companyNo|业务公司"=>"max:255",
  227. // "company_type|业务公司类型"=>"require|number|in:1,2",
  228. "roleid|角色ID"=>"require|number",
  229. ]);
  230. if($valide->check($post)==false) return error_show(1004,$valide->getError());
  231. if($post['roleid']!=0){
  232. $roleinfo =Db::name("role")->where("id","=",$post['roleid'])->find();
  233. if(empty($roleinfo)){
  234. return error_show(1002,"角色不存在");
  235. }
  236. if($roleinfo['status']==0){
  237. return error_show(1002,"角色已禁用");
  238. }
  239. if($roleinfo['level']==1){
  240. return error_show(1002,"超管级别角色不允许设置");
  241. }
  242. }
  243. if($this->level==1){
  244. $companyNo = isset($post['companyNo'])&&$post['companyNo']!=='' ? trim($post['companyNo']) :"";
  245. }else{
  246. $companyNo = isset($post['relaComNo'])&&$post['relaComNo']!=='' ? trim($post['relaComNo']) :"";
  247. }
  248. if($companyNo==""){
  249. return error_show(1004,"业务公司编号不能为空");
  250. }
  251. $company =Db::name("supplier_info")->where(["code"=>$companyNo])->find();
  252. if($company==false){
  253. return error_show(1004,"业务公司不存在");
  254. }
  255. $isSuper = Db::name("user_role")->alias("a")
  256. ->leftJoin("role b","a.roleid=b.id")
  257. ->where(["a.uid"=>$post['id'],"a.is_del"=>0,"b.level"=>1])
  258. ->findOrEmpty();
  259. if(!empty($isSuper))return error_show(1002,"超管账户不允许设置其他角色");
  260. $userrole = Db::name("user_role")
  261. ->where(["uid"=>$post['id'],"companyNo"=>$companyNo,"is_del"=>0])
  262. ->find();
  263. $ismain =Db::name("user_role")->where(["uid"=>$post['id'],"is_main"=>1,"is_del"=>0])->find();
  264. Db::startTrans();
  265. try{
  266. if(empty($userrole)){
  267. $roledata =[
  268. "uid"=>$post['id'],
  269. "roleid"=>$post['roleid'],
  270. "nickname"=>$post['nickname'],
  271. "companyNo"=>$companyNo,
  272. "company_type"=>$company["type"]==3?2:1,
  273. "is_main"=>$ismain?0:1,
  274. "status"=>1,
  275. "addtime"=>date("Y-m-d H:i:s"),
  276. "updatetime"=>date("Y-m-d H:i:s")
  277. ];
  278. $companyarr=[
  279. [
  280. "companyCode"=>$company["code"],
  281. "companyName"=>$company["name"],
  282. "company_type"=>$company["type"]==3?2:1,
  283. "is_main"=>$ismain?0:1
  284. ]
  285. ];
  286. $companyinfo = ["id"=>$post['id'],"company"=>$companyarr,"token"=>$post['token']];
  287. $companyset =setUserCompany($companyinfo);
  288. if(!isset($companyset['code'])||$companyset['code']!=0){
  289. return error_show(1004,$companyset['message']);
  290. }
  291. $up= Db::name("user_role")->insert($roledata);
  292. }else{
  293. $userrole['roleid'] = $post['roleid'];
  294. $userrole['nickname'] = $post['nickname'];
  295. $userrole['companyNo'] = $companyNo;
  296. $userrole['company_type'] =$company["type"]==3?2:1;
  297. $userrole['updatetime'] = date("Y-m-d H:i:s");
  298. $up=Db::name("user_role")->where(["uid"=>$post['id'],"companyNo"=>$companyNo,"is_del"=>0])->save($userrole);
  299. }
  300. $saveinfo =[
  301. "id"=>$post['id'],
  302. "nickname"=>$post['nickname'],
  303. "mobile"=>$post['mobile'],
  304. "token"=>$post['token']
  305. ];
  306. $saev= resetinfo($saveinfo);
  307. if(!isset($saev['code'])||$saev['code']!=0){
  308. return error_show(1004,$saev['message']);
  309. }
  310. if($up==false){
  311. Db::rollback();
  312. return error_show(1004,'用户信息更新失败');
  313. }
  314. Db::commit();
  315. return app_show(0,'用户信息更新成功');
  316. }catch (\Exception $e){
  317. Db::rollback();
  318. return error_show(1004,$e->getMessage());
  319. }
  320. }
  321. /**获取用户关联业务公司
  322. * @return \think\response\Json|void
  323. * @throws \think\db\exception\DataNotFoundException
  324. * @throws \think\db\exception\DbException
  325. * @throws \think\db\exception\ModelNotFoundException
  326. */
  327. public function GetCompany(){
  328. $post=$this->request->only(["token"=>"","uid"=>"","companyName"=>"","page"=>1,"size"=>20],"post","trim");
  329. $where=[];
  330. if($post['uid']!=""){
  331. $where[]=["a.uid","=",$post['uid']];
  332. }else{
  333. $where[]=["a.uid","=",$this->uid];
  334. }
  335. if($post['companyName']!=""){
  336. $where[]=["b.name","like","%{$post['companyName']}%"];
  337. }
  338. $count = Db::name("user_role")->alias("a")
  339. ->leftJoin("supplier_info b","a.companyNo=b.code")
  340. ->where($where)
  341. ->count();
  342. $total =ceil($count/$post['size']);
  343. $page = $post['page']>$total ? intval($total):intval($post['page']);
  344. $list = Db::name("user_role")->alias("a")
  345. ->leftJoin("supplier_info b","a.companyNo=b.code")
  346. ->where($where)
  347. ->field("a.uid,a.nickname,roleid,companyNo,b.name as companyName,a.status,a.company_type")
  348. ->page($page,intval($post['size']))
  349. ->select()->toArray();
  350. foreach ($list as &$value){
  351. $value['role_name'] = Db::name("role")->where(["id"=>$value["roleid"]])->value("role_name","");
  352. }
  353. return app_show(0,'获取成功',["list"=>$list,"count"=>$count]);
  354. }
  355. //密码设置
  356. public function setPwd(){
  357. $post=$this->request->only(["id"=>"","password"=>""],"post","trim");
  358. $validate=Validate::rule([
  359. 'id|账户ID' => 'require|number',
  360. 'password|密码' => 'require|min:6|max:200',
  361. ]);
  362. if($validate->check($post)==false) return error_show(1004,$validate->getError());
  363. $data = resetpwd($post);
  364. if(empty($data)||$data['code']!=0){
  365. return error_show($data['code'],$data['message']);
  366. }else{
  367. return app_show(0,"密码修改成功");
  368. }
  369. }
  370. public function usersave(){
  371. $post=$this->request->only(["id"=>"","nickname"=>"","mobile"=>"","email"=>"","relaComNo"=>"","companyArr"=>[],"token"=>""],"post","trim");
  372. $validate=Validate::rule([
  373. 'id|账户ID' => 'number',
  374. 'nickname|真实姓名' => 'require|min:2|max:200',
  375. 'mobile|手机号' => 'require|number|length:11|mobile',
  376. 'email|邮箱' => 'email',
  377. 'companyArr|关联账户' => 'array',
  378. ]);
  379. if($validate->check($post)==false) return error_show(1004,$validate->getError());
  380. if(!empty($post['companyArr'])){
  381. foreach ($post['companyArr'] as &$item){
  382. $company =Db::name("supplier_info")->where(["code"=>$item['companyCode']])->find();
  383. $item['company_type'] = $company["type"]==3?2:1;
  384. }
  385. }
  386. if($post['id']!=""){
  387. $isSuper = Db::name("user_role")->alias("a")
  388. ->leftJoin("role b","a.roleid=b.id")
  389. ->where(["a.uid"=>$post['id'],"a.is_del"=>0,"b.level"=>1])
  390. ->findOrEmpty();
  391. if(!empty($isSuper) && !empty($post['companyArr']))return error_show(1002,"超管账户不允许设置关联业务公司");
  392. $saveinfo =[
  393. "id"=>$post['id'],
  394. "nickname"=>$post['nickname'],
  395. "mobile"=>$post['mobile'],
  396. "token"=>$post['token']
  397. ];
  398. $saev= resetinfo($saveinfo);
  399. if(!isset($saev['code'])||$saev['code']!=0){
  400. return error_show(1004,$saev['message']);
  401. }
  402. // if($post['relaComNo']!=""){
  403. // $company =Db::name("supplier_info")->where(["code"=>$post['relaComNo']])->find();
  404. // if($company){
  405. // $temp = [
  406. // "companyCode"=>$company["code"],
  407. // "companyName"=>$company["name"],
  408. // "company_type"=>$company["type"]==3?2:1,
  409. // "is_main"=>1,
  410. // ];
  411. // $post['companyArr'][]=$temp;
  412. // }
  413. // }
  414. if(!empty($post['companyArr'])){
  415. $companyinfo = ["id"=>$post['id'],"company"=>$post['companyArr'],"token"=>$post['token']];
  416. $companyset =setUserCompany($companyinfo);
  417. if(!isset($companyset['code'])||$companyset['code']!=0){
  418. return error_show(1004,$companyset['message']);
  419. }
  420. }
  421. }else{
  422. if($post['relaComNo']!=""){
  423. $company =Db::name("supplier_info")->where(["code"=>$post['relaComNo']])->find();
  424. if($company){
  425. $temp = [
  426. "companyCode"=>$company["code"],
  427. "companyName"=>$company["name"],
  428. "company_type"=>$company["type"]==3?2:1,
  429. "is_main"=>1,
  430. ];
  431. $post['companyArr'][]=$temp;
  432. }
  433. }
  434. $nam = addacount($post);
  435. if(!isset($nam['code'])||$nam['code']!=0){
  436. return error_show(1004,$nam['message']);
  437. }
  438. }
  439. return $post['id']==""?app_show(0,"账户新建成功"):app_show(0,"账户新建失败");
  440. }
  441. }