User.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647
  1. <?php
  2. namespace app\admin\controller\user;
  3. use app\common\controller\Backend;
  4. use fast\Random;
  5. /**
  6. * 会员管理
  7. *
  8. * @icon fa fa-user
  9. */
  10. class User extends Backend
  11. {
  12. protected $relationSearch = true;
  13. /**
  14. * @var \app\admin\model\User
  15. */
  16. protected $model = null;
  17. public function _initialize()
  18. {
  19. parent::_initialize();
  20. $this->model = model('User');
  21. }
  22. /**
  23. * 查看
  24. */
  25. public function index()
  26. {
  27. //设置过滤方法
  28. $this->request->filter(['strip_tags']);
  29. if ($this->request->isAjax()) {
  30. //如果发送的来源是Selectpage,则转发到Selectpage
  31. if ($this->request->request('keyField')) {
  32. return $this->selectpage();
  33. }
  34. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  35. $total = $this->model
  36. ->with('group')
  37. ->where($where)
  38. ->where(['ct_user.status'=>['neq',0]])
  39. ->order($sort, $order)
  40. ->count();
  41. $list = $this->model
  42. ->with('group')
  43. ->where($where)
  44. ->where(['ct_user.status'=>['neq',0]])
  45. ->order($sort, $order)
  46. ->limit($offset, $limit)
  47. ->select();
  48. $result = array("total" => $total, "rows" => $list);
  49. return json($result);
  50. }
  51. return $this->view->fetch();
  52. }
  53. function showprc()
  54. {
  55. $ids=input('ids');
  56. $user=get_user_data($ids);
  57. $this->view->assign("info",$user);
  58. return $this->view->fetch();
  59. }
  60. public function reallist()
  61. {
  62. //当前是否为关联查询
  63. $this->relationSearch = false;
  64. //设置过滤方法
  65. $this->request->filter(['strip_tags']);
  66. if ($this->request->isAjax())
  67. {
  68. //如果发送的来源是Selectpage,则转发到Selectpage
  69. if ($this->request->request('keyField'))
  70. {
  71. return $this->selectpage();
  72. }
  73. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  74. $total = $this->model
  75. ->where($where)
  76. ->where(['isreal'=>['gt',0]])
  77. ->order($sort, $order)
  78. ->count();
  79. $list = $this->model
  80. ->where($where)
  81. ->where(['isreal'=>['gt',0]])
  82. ->order($sort, $order)
  83. ->limit($offset, $limit)
  84. ->select();
  85. $result = array("total" => $total, "rows" => $list, "where" => $order);
  86. return json($result);
  87. }
  88. return $this->view->fetch('index');
  89. }
  90. function viewauto()
  91. {
  92. $ids = input('ids');
  93. $status=input('status');
  94. $info=$this->model->where(['id'=>$ids,'status'=>1])->find();
  95. if(!$info)
  96. {
  97. $this->error("信息不存在,或已审核");
  98. }else{
  99. if($status == 1)
  100. {
  101. $res=db('user')->where(['id'=>$ids])->update(['isreal'=>2]);
  102. }elseif($status == -1)
  103. {
  104. $data=[
  105. 'isreal'=>0,
  106. 'idcard'=>'',
  107. 'realname'=>'',
  108. 'idprc1'=>'',
  109. 'idprc2'=>'',
  110. ];
  111. $res=db('user')->where(['id'=>$ids])->update($data);
  112. }
  113. if($res)
  114. {
  115. $this->success('审核通过');
  116. }else{
  117. $this->error('审核失败');
  118. }
  119. }
  120. }
  121. public function noactivelist()
  122. {
  123. //当前是否为关联查询
  124. $this->relationSearch = false;
  125. //设置过滤方法
  126. $this->request->filter(['strip_tags']);
  127. if ($this->request->isAjax())
  128. {
  129. //如果发送的来源是Selectpage,则转发到Selectpage
  130. if ($this->request->request('keyField'))
  131. {
  132. return $this->selectpage();
  133. }
  134. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  135. $total = $this->model
  136. ->where($where)
  137. ->where(['status'=>0])
  138. ->order($sort, $order)
  139. ->count();
  140. $list = $this->model
  141. ->where($where)
  142. ->where(['status'=>0])
  143. ->order($sort, $order)
  144. ->limit($offset, $limit)
  145. ->select();
  146. $result = array("total" => $total, "rows" => $list, "where" => $order);
  147. return json($result);
  148. }
  149. return $this->view->fetch('index');
  150. }
  151. function updatepwd()
  152. {
  153. if ($this->request->isPost()) {
  154. $ids=$this->request->post('id');
  155. $password=$this->request->post('password');
  156. $password2=$this->request->post('password2');
  157. if(empty($password) && empty($password2))
  158. {
  159. $this->error('请输入要充值得密码');
  160. }
  161. $user=db('user')->where(['id'=>$ids])->find();
  162. if($password)
  163. {
  164. $data['password']=getEncryptPassword($password,$user['salt']);
  165. }
  166. if($password2)
  167. {
  168. $data['password2']=getEncryptPassword($password2,$user['salt']);
  169. }
  170. $data['updatetime']=time();
  171. $res=db('user')->where(['id'=>$ids])->update($data);
  172. if($res)
  173. {
  174. $this->success('重置成功');
  175. }else{
  176. $this->error('重置失败');
  177. }
  178. }
  179. $ids=input('ids');
  180. $user=db('user')->where(['id'=>$ids])->find();
  181. if(empty($user))
  182. {
  183. $this->error('用户不存在,或不可用');
  184. }
  185. $this->view->assign('user',$user);
  186. return $this->view->fetch('updatepwd');
  187. }
  188. /* 充值
  189. * */
  190. function chongzhi()
  191. {
  192. if ($this->request->isPost()) {
  193. $ids=$this->request->post('id');
  194. $money=$this->request->post('money');
  195. if(empty($money))
  196. {
  197. $this->error('请输入充值金额');
  198. }
  199. if($money <= 0){
  200. $this->error('充值金额不正确');
  201. }
  202. $money_type=$this->request->post('money_type');
  203. if(empty($money_type))
  204. {
  205. $this->error('请选择要充值的币种');
  206. }
  207. $remark=$this->request->post('remark');
  208. $changedata=[
  209. 'type'=>2,
  210. 'money'=>$money,
  211. 'userid'=>$ids,
  212. 'relevant_userid'=>-1,
  213. 'remark'=>$remark==''?'':$remark,
  214. ];
  215. $res=caiwu($changedata, $money_type);
  216. if($res)
  217. {
  218. $this->success('充值成功');
  219. }else{
  220. $this->error('充值失败');
  221. }
  222. }
  223. #人,币种,备注
  224. $ids=input('ids');
  225. $user=db('user')->where(['id'=>$ids,'status'=>1])->field('id,username')->find();
  226. if(empty($user))
  227. {
  228. $this->error('用户不存在,或不可用');
  229. }
  230. $this->view->assign('user',$user);
  231. #币种
  232. $money_type_list=db('money_type')->where(['status'=>1])->field('identification,name')->select();
  233. $this->view->assign('moneytype',list_to_arr($money_type_list,'identification','name'));
  234. return $this->view->fetch('chongzhi');
  235. }
  236. /* 扣费
  237. * */
  238. function koufei()
  239. {
  240. if ($this->request->isPost()) {
  241. $ids=$this->request->post('id');
  242. $money=$this->request->post('money');
  243. if(empty($money))
  244. {
  245. $this->error('请输入充值金额');
  246. }
  247. if($money <= 0){
  248. $this->error('充值金额不正确');
  249. }
  250. $money_type=$this->request->post('money_type');
  251. if(empty($money_type))
  252. {
  253. $this->error('请选择要充值的币种');
  254. }
  255. $remark=$this->request->post('remark');
  256. $changedata=[
  257. 'type'=>3,
  258. 'money'=>0-$money,
  259. 'userid'=>$ids,
  260. 'relevant_userid'=>-1,
  261. 'remark'=>$remark==''?'':$remark,
  262. ];
  263. $res=caiwu($changedata, $money_type);
  264. if($res)
  265. {
  266. $this->success('扣除成功');
  267. }else{
  268. $this->error('扣除失败');
  269. }
  270. }
  271. #人,币种,备注
  272. $ids=input('ids');
  273. $user=db('user')->where(['id'=>$ids,'status'=>1])->field('id,username')->find();
  274. if(empty($user))
  275. {
  276. $this->error('用户不存在,或不可用');
  277. }
  278. $this->view->assign('user',$user);
  279. #币种
  280. $money_type_list=db('money_type')->where(['status'=>1])->field('identification,name')->select();
  281. $this->view->assign('moneytype',list_to_arr($money_type_list,'identification','name'));
  282. return $this->view->fetch('chongzhi');
  283. }
  284. /* 冻结解冻
  285. * */
  286. function setStatus()
  287. {
  288. $ids=input('ids');
  289. $status=input('status');
  290. $info=$this->model->where(['id'=>$ids])->find();
  291. if(empty($info))
  292. {
  293. $this->error('用户不存在,或不可用');
  294. }
  295. $res=$this->model->where(['id'=>$ids])->update(['status'=>$status]);
  296. if($res)
  297. {
  298. $this->success('设置完成');
  299. }else{
  300. $this->error('设置失败');
  301. }
  302. }
  303. public function usermessage()
  304. {
  305. //设置过滤方法
  306. //当前是否为关联查询
  307. $this->relationSearch = false;
  308. $this->request->filter(['strip_tags']);
  309. if ($this->request->isAjax())
  310. {
  311. //如果发送的来源是Selectpage,则转发到Selectpage
  312. if ($this->request->request('keyField'))
  313. {
  314. return $this->selectpage();
  315. }
  316. $ids=db('user_message')->where(['to_uid'=>0,'isread'=>0])->group('userid')->column('userid');
  317. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  318. if(count($ids)>0)
  319. {
  320. $total = $this->model
  321. ->where($where)
  322. ->where(['status'=>1,'id'=>['in',$ids]])
  323. ->order($sort, $order)
  324. ->count();
  325. $list = $this->model
  326. ->where($where)
  327. ->where(['status'=>1,'id'=>['in',$ids]])
  328. ->order($sort, $order)
  329. ->limit($offset, $limit)
  330. ->select();
  331. }else{
  332. $total = $this->model
  333. ->where($where)
  334. ->where(['status'=>1])
  335. ->order($sort, $order)
  336. ->count();
  337. $list = $this->model
  338. ->where($where)
  339. ->where(['status'=>1])
  340. ->order($sort, $order)
  341. ->limit($offset, $limit)
  342. ->select();
  343. }
  344. $result = array("total" => $total, "rows" => $list, "where" => $order);
  345. return json($result);
  346. }
  347. return $this->view->fetch('index');
  348. }
  349. function viewmsg()
  350. {
  351. $ids = input('ids');
  352. $user=db('user')->where('id',$ids)->find();
  353. $map['from_uid|to_uid'] = 0;
  354. $map['userid']=$ids;
  355. $data_list=db('user_message')->where($map)->select();
  356. foreach ($data_list as $k=>$v)
  357. {
  358. if($v['from_uid'] === 0)
  359. {
  360. $data_list[$k]['fromuser']='系统';
  361. $data_list[$k]['flag']=0;
  362. }else{
  363. $data_list[$k]['flag']=1;
  364. $data_list[$k]['fromuser']=$user['username'];
  365. }
  366. }
  367. $this->view->assign("uid",$ids);
  368. db('user_message')->where(['to_uid'=>0])->update(['isread'=>1]);
  369. $this->view->assign("list",$data_list);
  370. return $this->view->fetch('viewmsg');
  371. }
  372. function usertree()
  373. {
  374. $keyword = input('keyword');
  375. if(!empty($keyword))
  376. {
  377. $user=$this->model->where(['username'=>$keyword])->find();
  378. if(empty($user))
  379. {
  380. $this->error("会员不存在");
  381. }else{
  382. $uid=$user['id'];
  383. }
  384. }else{
  385. $uid=1;
  386. }
  387. $this->view->assign('rootid',$uid);
  388. $this->view->assign('uid',0);
  389. $this->view->assign('keyword',$keyword);
  390. return $this->view->fetch('usertree');
  391. }
  392. /* 接点图 */
  393. function dottree()
  394. {
  395. $keyword = input('keyword');
  396. if(!empty($keyword))
  397. {
  398. $user_info=db("user")->where(['username'=>$keyword])->find();
  399. if(!empty($user_info)){
  400. $node_info=db("user_parent")->where(['userid'=>$user_info['id']])->find();
  401. }else{
  402. $this->error("要查询的会员不存在");
  403. }
  404. }
  405. if(empty($node_info)){//没有搜索显示网头
  406. $node_info=db("user_parent")->where(['id'=>1])->find();
  407. }
  408. $datascource['id']=strval($node_info['id']);//这里要用字符串
  409. $datascource['name']=$node_info['username'];
  410. $datascource['title']=$node_info['nickname'];
  411. $datascource['nums']=$node_info['cnum'];
  412. $datascource['relationship']['children_num']=$node_info['cnum'];
  413. $datascource['relationship']['parent_num']=$node_info['pid']>0?$node_info['pid']:0;
  414. $datascource_json=json_encode($datascource);
  415. $this->view->assign('datascource',$datascource_json);
  416. return $this->view->fetch('dottree');
  417. }
  418. function childrendot()
  419. {
  420. $res=[];
  421. $nid = input('nid');
  422. $children_list=db("user_parent")->where(['pid'=>$nid])->order('distance asc')->select();
  423. foreach ($children_list as $clv){
  424. $datascource['id']=strval($clv['id']);//这里要用字符串
  425. $datascource['name']=$clv['username'];
  426. $datascource['title']=$clv['nickname'];
  427. $datascource['nums']=$clv['cnum'];
  428. $datascource['relationship']['children_num']=$clv['cnum'];
  429. $datascource['relationship']['parent_num']=$clv['pid']>0?$clv['pid']:0;
  430. $res['children'][]=$datascource;
  431. }
  432. return $res;
  433. }
  434. function parentdot()
  435. {
  436. $res=[];
  437. $nid = input('nid');
  438. $userinfo=db("user_parent")->where(['id'=>$nid])->find();
  439. $parentinfo=db("user_parent")->where(['id'=>$userinfo['pid']])->find();
  440. $datascource['id']=strval($parentinfo['id']);//这里要用字符串
  441. $datascource['name']=$parentinfo['username'];
  442. $datascource['title']=$parentinfo['nickname'];
  443. $datascource['nums']=$parentinfo['cnum'];
  444. $datascource['relationship']['children_num']=$parentinfo['cnum'];
  445. $datascource['relationship']['parent_num']=$parentinfo['pid']>0?$parentinfo['pid']:0;
  446. return $datascource;
  447. }
  448. /* 激活数据 */
  449. function jihuo()
  450. {
  451. $ids = input('ids');
  452. $info=$this->model->where(['id'=>$ids,'status'=>0])->find();
  453. if($info)
  454. {
  455. db()->startTrans();
  456. $res1=$this->model->where('id',$ids)->update(['status'=>1]);
  457. if($info['refereeid']>0)
  458. {
  459. $res2=$this->model->where('id',$info['refereeid'])->setInc('referee_number',1);
  460. }else{
  461. $res2=1;
  462. }
  463. $bonusconfig=db('bonus_config')->where(['config_type'=>1,'user_level'=>$info['level']])->find();
  464. $res3=db('user_account')->insertGetId(['userid'=>$ids,'username'=>$info['username'],'reg_money'=>$bonusconfig['value']]);
  465. if($res1 && $res2 && $res3)
  466. {
  467. finance(1, $bonusconfig['value']);
  468. $count=db('user')->count();
  469. if($count>1)
  470. {
  471. #activeuser($ids);
  472. }
  473. db()->commit();
  474. $this->success("激活成功");
  475. }else{
  476. db()->rollback();
  477. $this->error("激活失败");
  478. }
  479. }else{
  480. $this->error("要操作的数据不存在,或已激活");
  481. }
  482. }
  483. /* 新增 */
  484. function add()
  485. {
  486. if ($this->request->isPost()) {
  487. $params = $this->request->post("row/a");
  488. $flag=$this->request->post('flag');
  489. if(empty($params['username']))
  490. {
  491. $this->error("用户名不能为空");
  492. }else{
  493. $usernameinfo=$this->model->where('username',$params['username'])->find();
  494. if($usernameinfo)
  495. {
  496. $this->error("此用户名已注册,请更换");
  497. }
  498. }
  499. if(empty($params['nickname']))
  500. {
  501. $this->error("昵称不能为空");
  502. }
  503. if(empty($params['mobile']))
  504. {
  505. $this->error("手机号不能为空");
  506. }else{
  507. if(!preg_match('/^1\d{10}$/',$params['mobile']))
  508. {
  509. $this->error('手机号格式不正确');
  510. }
  511. $mobileinfo=db('user')->where('mobile',$params['mobile'])->find();
  512. if($mobileinfo)
  513. {
  514. $this->error("此手机号已注册,请更换");
  515. }
  516. }
  517. $data = [
  518. 'username' => $params['username'],
  519. 'nickname' => $params['nickname'],
  520. 'mobile' => $params['mobile'],
  521. 'level' => 0,
  522. 'salt' => Random::alnum(),
  523. 'createtime' => time(),
  524. 'joinip' => request()->ip(),
  525. 'status' => '1',
  526. ];
  527. $data['password'] = getEncryptPassword($params['password'], $data['salt']);
  528. $data['password2'] =getEncryptPassword($params['password2'], $data['salt']);
  529. if($flag == 0)
  530. {
  531. $data['refereeid']=0;
  532. $data['referee_name']='';
  533. $data['refereeids']='0,';
  534. $data['tdeep']=0;
  535. $data['pid']=0;
  536. $data['parent_name']='';
  537. }else{
  538. $referee=$this->model->where(['username|mobile'=>$params['referee'],'status'=>1])->find();
  539. if($referee)
  540. {
  541. $data['refereeid']=$referee['id'];
  542. $data['referee_name']=$referee['username'];
  543. $data['refereeids']=$referee['refereeids'].$referee['id'].',';
  544. $data['tdeep']=$referee['tdeep']+1;
  545. }else{
  546. $this->error("推荐人不可用或输入的推荐编号有误");
  547. }
  548. if(config('dot_mode')==1)
  549. {
  550. $parent=$this->model->where(['username'=>$params['parent'],'status'=>1])->find();
  551. if($parent)
  552. {
  553. $data['pid']=$parent['id'];
  554. $data['parent_name']=$parent['username'];
  555. $pos=$params['pos'];
  556. }else{
  557. $this->error("结点人不可用或输入的或输入的编号有误");
  558. }
  559. }else{
  560. $data['pid']=0;
  561. $data['parent_name']='';
  562. $pos=0;
  563. }
  564. }
  565. $ids=$this->model->insertGetId($data);
  566. if($ids)
  567. {
  568. if(config('dot_mode')==1)
  569. {
  570. if($flag == 0)
  571. {
  572. $updata['userid']=$ids;
  573. $updata['username']=$data['username'];
  574. $updata['nickname']=$data['nickname'];
  575. $updata['pid']=0;
  576. $updata['distance']=1;
  577. $updata['position']=0;
  578. $updata['pids']='0,';
  579. $updata['system']=1;
  580. db('user_parent')->insertGetId($updata);
  581. }else{
  582. $upinfo=db('user_parent')->where(['userid'=>$data['pid']])->find();
  583. $updata['userid']=$ids;
  584. $updata['username']=$data['username'];
  585. $updata['pid']=$upinfo['id'];
  586. $updata['distance']=$upinfo['distance']+1;
  587. $updata['position']=$pos;
  588. $updata['nickname']=$data['nickname'];
  589. $updata['pids']=$upinfo['pids'].$upinfo['id'].',';
  590. $updata['system']=1;
  591. db('user_parent')->insertGetId($updata);
  592. db('user_parent')->where('id',$upinfo['id'])->setInc('cnum',1);
  593. }
  594. }
  595. if($data['refereeid']>0)
  596. {
  597. $res2=$this->model->where('id',$data['refereeid'])->setInc('referee_number',1);
  598. }
  599. $this->success("注册成功");
  600. }else{
  601. $this->error("注册失败");
  602. }
  603. }
  604. #检测推荐人
  605. $info=$this->model->where('id','>=','1')->find();
  606. if($info)
  607. {
  608. $flag=1;
  609. }else{
  610. $flag=0;
  611. }
  612. $this->assign("flag",$flag);
  613. $randStr = str_shuffle('1234567890');
  614. $randZm = str_shuffle('abcdefghijklmnopqrstuvwxyz');
  615. $username= substr($randZm,0,2).substr($randStr,0,6);//账号为7位随机数
  616. $this->view->assign('userlevel', build_select('row[level]', \app\admin\model\Userlevel::column('id,name'), '', ['class' => 'form-control selectpicker']));
  617. $this->view->assign("username",$username);
  618. return parent::add();
  619. }
  620. /**
  621. * 编辑
  622. */
  623. public function edit($ids = NULL)
  624. {
  625. $row = $this->model->get($ids);
  626. if (!$row)
  627. $this->error(__('No Results were found'));
  628. $this->view->assign('groupList', build_select('row[group_id]', \app\admin\model\UserGroup::column('id,name'), $row['group_id'], ['class' => 'form-control selectpicker']));
  629. return parent::edit($ids);
  630. }
  631. }