UserController.php 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802
  1. <?php
  2. namespace App\Http\Controllers\Admins;
  3. use App\Modes\AccountLog;
  4. use App\Modes\AdminArea;
  5. use App\Modes\Advertising;
  6. use App\Modes\Area;
  7. use App\Modes\Frozen;
  8. use App\Modes\ProxyArea;
  9. use App\Modes\SystemRoles;
  10. use App\Modes\Upgrade;
  11. use App\Modes\User;
  12. use App\Modes\UserBank;
  13. use App\Modes\UserMsg;
  14. use App\Rules\Phone;
  15. use Illuminate\Http\Request;
  16. use App\Http\Controllers\Controller;
  17. use Illuminate\Validation\Rule;
  18. use App\Modes\Proxy;
  19. use phpDocumentor\Reflection\DocBlock\Tags\Param;
  20. class UserController extends Controller
  21. {
  22. /**
  23. * 用户管理-列表
  24. * @author lyh
  25. * @date 2019/4/15
  26. * @param Request $request
  27. * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  28. * @description
  29. * 显示:排序 登录账号 密码 姓名 手机号 所属用户组 操作
  30. * 查询:手机号码、姓名
  31. */
  32. public function index(Request $request)
  33. {
  34. $validator = \Validator::make($param = $request->all(), [
  35. //'mobile' => 'integer|min:4',
  36. 'real_name' => 'string'
  37. ]);
  38. if ($validator->fails()) {
  39. return showJsonErr($validator->errors()->first());
  40. }
  41. $user = User::select(['id', 'mobile', 'password', 'real_name', 'is_super', 'status']);
  42. // 如果是地区管理员,则不显示同等级的用户信息
  43. if (\Auth::user()->is_super == 3) {
  44. $user->where('level', '<', \Auth::user()->level);
  45. $user = $user->whereIn('id', getIds());
  46. }
  47. if (!empty($param['mobile'])) {
  48. $user->where('mobile', 'like', "%{$param['mobile']}%");
  49. }
  50. if (!empty($param['real_name'])) {
  51. $user->where('real_name', 'like', "%{$param['real_name']}%");
  52. }
  53. $res = $user->paginate(perPage());
  54. return showJsonSucc(1001, $res);
  55. }
  56. /**
  57. * 代理统计列表
  58. * @author lyh
  59. * @date 2019/4/8
  60. * @modify_author lyh
  61. * @modify_time 2019-4-26 11:26:31
  62. * @modify 确认已区分系统管理员与地区管理员权限
  63. * @description
  64. * 代理ID
  65. * 等级
  66. * 昵称
  67. * 手机
  68. * 代理数量
  69. * 代理费总(元)
  70. * 广告笔数
  71. * 查询:时间、城区、手机号
  72. */
  73. public function StatProxy(Request $request)
  74. {
  75. $validator = \Validator::make($param = $request->all(), [
  76. 'mobile' => [
  77. 'integer',
  78. ],
  79. 'start' => 'date',
  80. 'end' => 'date',
  81. 'province' => 'exists:area,id',
  82. 'city' => 'exists:area,id',
  83. 'district' => 'exists:area,id',
  84. ]);
  85. if ($validator->fails()) {
  86. return showJsonErr($validator->errors()->first());
  87. }
  88. //
  89. if (Admin()->is_super == 3) {
  90. if (Admin()->level == 6 && isset($param['district']) && $param['district'] != Admin()->district) {
  91. return showJsonErr('抱歉,您不能查看该地区的信息');
  92. }
  93. if (Admin()->level == 7 && isset($param['city']) && $param['city'] != Admin()->city) {
  94. return showJsonErr('抱歉,您不能查看该城市的信息');
  95. }
  96. }
  97. $user = User::whereIsFrontend(1)->select([
  98. 'id',
  99. 'level',
  100. 'nick_name',
  101. 'mobile',
  102. ]);
  103. // 时间查询
  104. if (isset($param['start']) && isset($param['end'])) {
  105. $user->whereBetween('created_at', [$param['start'], $param['end']]);
  106. }
  107. // 手机号码查询
  108. if (!empty($param['mobile'])) {
  109. $user->where('mobile', 'like', "%{$param['mobile']}%");
  110. }
  111. //管理员查看对应的代理
  112. $district=AdminArea::getAdminArea();
  113. if(!empty($district)){
  114. if(!empty($district['city'])){
  115. $user->whereCity($district['city']);
  116. if (!empty($param['district'])) {
  117. $user->whereDistrict($param['district']);
  118. }
  119. }else{
  120. $user->whereDistrict($district['district']);
  121. }
  122. }else{
  123. if (isset($param['province']) && isset($param['province'])) {
  124. $user->where('province', '=',$param['province']);
  125. }
  126. if (isset($param['city']) && isset($param['city'])) {
  127. $user->where('city', '=',$param['city']);
  128. }
  129. if (isset($param['district']) && isset($param['district'])) {
  130. $user->where('district', '=',$param['district']);
  131. }
  132. }
  133. // 区分系统管理员与地区管理员的数据
  134. if (\Auth::user()->is_super == 3) {
  135. $user = $user->whereIn('id', getIds());
  136. }
  137. $res = $user->paginate(perPage());
  138. if ($res->isNotEmpty()) {
  139. collect($res->items())->each(function ($item, $key) {
  140. // 代理数量
  141. // 代理费总额
  142. // 广告笔数
  143. $uids = User::getAllInvite($item->id, null, null, true);
  144. $item->proxyNum = count($uids);
  145. $item->proxyTotalPrice = Upgrade::whereIn('uid', $uids)->whereUpgradeWay(1)->whereStatus(3)->sum('money');
  146. $proxyarea = \DB::table('proxy_area as pa')->join('order as o', 'o.id', '=', 'pa.order_id')
  147. ->select(\DB::raw('sum(price) totalprice'))->where('pa.status', '=', 3)
  148. ->whereIn('pa.uid', $uids)->first();
  149. $item->proxyTotalPrice=$item->proxyTotalPrice+ $proxyarea->totalprice;
  150. $item->adverNum = Advertising::whereIn('uid', $uids)->whereIn('status', [3, 4, 9])->count('id');
  151. });
  152. }
  153. return showJsonSucc(1001, $res);
  154. }
  155. /**
  156. * 发送信息
  157. * @author lyh
  158. * @date 2019/4/9
  159. * @modify_author lyh
  160. * @modify_time 2019-4-26 12:25:21
  161. * @modify 确认已区分系统管理员与地区管理员权限
  162. * @param Request $request
  163. * @description
  164. */
  165. public function sendMsg(Request $request)
  166. {
  167. $validator = \Validator::make($param = $request->all(), [
  168. 'id' => 'required|exists:user,id',
  169. 'content' => 'required'
  170. ]);
  171. if ($validator->fails()) {
  172. return showJsonErr($validator->errors()->first());
  173. }
  174. // 区分系统管理员与地区管理员数据
  175. if (\Auth::user()->is_super == 3 && !in_array($param['id'], getIds())) {
  176. return showJsonErr('抱歉,您没有权限查看该用户信息');
  177. }
  178. $title=empty($param['title'])?'':$param['title'];
  179. $result = UserMsg::SendGetui([
  180. 'uid' => $param['id'],
  181. 'content' => $param['content'],
  182. 'type' => 1,
  183. 'title'=>$title,
  184. ]);
  185. if (!$result) {
  186. return showJsonError('发送私信失败');
  187. }
  188. return showJsonSucc('发送私信成功');
  189. }
  190. /**
  191. * 解除代理
  192. * @author lyh
  193. * @date 2019/4/9
  194. * @modify_author lyh
  195. * @modify_time 2019-4-26 12:24:51
  196. * @modify 确认已区分系统管理员与地区管理员权限
  197. * @param Request $request
  198. * @description
  199. */
  200. public function relieve(Request $request)
  201. {
  202. $validator = \Validator::make($param = $request->all(), [
  203. 'id' => 'required|exists:user,id'
  204. ]);
  205. if ($validator->fails()) {
  206. return showJsonErr($validator->errors()->first());
  207. }
  208. // 区分系统管理员与地区管理员数据
  209. if (\Auth::user()->is_super == 3 && !in_array($param['id'], getIds())) {
  210. return showJsonErr('抱歉,您没有权限查看该用户信息');
  211. }
  212. $user = User::find($param['id']);
  213. if (!in_array($user->level, [6, 7])) {
  214. return showJsonErr('抱歉,取消代理失败。');
  215. }
  216. $result = User::whereId($param['id'])->update([
  217. 'province' => 0,
  218. 'city' => 0,
  219. 'district' => 0,
  220. 'is_super' => 0
  221. ]);
  222. if (!$result) {
  223. return showJsonError('取消地区代理失败');
  224. }
  225. return showJsonSucc('取消地区代理成功');
  226. }
  227. /**
  228. * 冻结、解冻
  229. * @author lyh
  230. * @date 2019/4/9
  231. * @modify_author lyh
  232. * @modify_time 2019-4-26 11:26:31
  233. * @modify 确认已区分系统管理员与地区管理员权限
  234. * @param Request $request
  235. * @description
  236. */
  237. public function updateStatus(Request $request)
  238. {
  239. $validator = \Validator::make($param = $request->all(), [
  240. 'id' => 'required|exists:user,id',
  241. 'status' => 'required|integer|between:1,2'
  242. ]);
  243. if ($validator->fails()) {
  244. return showJsonErr($validator->errors()->first());
  245. }
  246. // 区分系统管理员与地区管理员数据
  247. if (\Auth::user()->is_super == 3 && !in_array($param['id'], getIds())) {
  248. return showJsonErr('抱歉,您没有权限查看该用户信息');
  249. }
  250. $result = User::whereId($param['id'])->update(['status' => $param['status']]);
  251. if (!$result) {
  252. return showJsonError('修改用户状态失败');
  253. }
  254. //添加进入冻结记录
  255. $frozen=Frozen::whereUid($param['id'])->orderBy('id','desc')->first();
  256. if(!empty($frozen->uid)&&empty($frozen->thaw_time)&&$param['status']==1){
  257. //解冻
  258. Frozen::whereId($frozen->id)->update(['thaw_time'=>date('Y-m-d H:i:s')]);
  259. }else{
  260. //冻结
  261. if((empty($frozen) && $param['status']==2)||!empty($frozen->thaw_time)){
  262. Frozen::insert(['uid'=>$param['id']]);
  263. }
  264. }
  265. return showJsonSucc('修改用户状态成功');
  266. }
  267. /**
  268. * 代理列表
  269. * @author lyh
  270. * @date 2019/4/9
  271. * @param Request $request
  272. * @description
  273. * 字段:ID、等级、代理费(元)、姓名、昵称、手机、推荐人手机号、城区、广告笔数、广告总业绩额(元)、广告分佣(%)、下级代理人数、代理分佣(%)、余额(元)、点币
  274. * 查询:所在城区(省市区)、手机号、等级、注册时间
  275. */
  276. public function proxyList(Request $request)
  277. {
  278. $validator = \Validator::make($param = $request->all(), [
  279. 'province' => 'exists:area,id',
  280. 'city' => 'exists:area,id',
  281. 'district' => 'exists:area,id',
  282. // 'mobile' => 'integer',
  283. 'level' => 'integer|between:1,8',
  284. 'startTime' => 'date',
  285. 'endTime' => 'date',
  286. 'sort'=>'in:level,created_at,agentAllmoney,count,allMoney,adverCommission,invite_num,proxyCommission,coin,balance',
  287. 'order'=>'in:desc,asc,normal'
  288. ]);
  289. if ($validator->fails()) {
  290. return showJsonErr($validator->errors()->first());
  291. }
  292. // zch 2019/08/14 新增排序
  293. if (isset($param['sort'])) {
  294. switch ($param['sort']) {
  295. case 'agentAllmoney':
  296. $param['sort'] = 'agent_all_money';
  297. break;
  298. case 'count':
  299. $param['sort'] = 'ad_num';
  300. break;
  301. case 'allMoney':
  302. $param['sort'] = 'ad_all_money';
  303. break;
  304. case 'adverCommission':
  305. $param['sort'] = 'adver_commission';
  306. break;
  307. case 'proxyCommission':
  308. $param['sort'] = 'proxy_commission';
  309. break;
  310. }
  311. $sort = $param['sort'];
  312. if (isset($param['order']) && $param['order']!='normal') {
  313. $order=$param['order'];
  314. }else{
  315. $order = 'desc';
  316. }
  317. }else{
  318. $sort = 'id';
  319. $order = 'desc';
  320. }
  321. if (isset($param['order']) && $param['order']=='normal') {
  322. $sort = 'id';
  323. $order = 'desc';
  324. }
  325. // 如果当前管理员是地区管理员
  326. if (Admin()->is_super == 3) {
  327. if (Admin()->level == 6 && isset($param['district']) && $param['district'] != Admin()->district) {
  328. return showJsonErr('抱歉,您不能查看该地区的信息');
  329. }
  330. if (Admin()->level == 7 && isset($param['district']) && $param['city'] != Admin()->city) {
  331. return showJsonErr('抱歉,您不能查看该城市的信息');
  332. }
  333. }
  334. $user = User::select([
  335. 'id',
  336. 'level',
  337. 'nick_name',
  338. 'real_name',
  339. 'mobile',
  340. 'invitor',
  341. 'balance',
  342. 'coin',
  343. 'status',
  344. 'province',
  345. 'city',
  346. 'district',
  347. 'created_at',
  348. 'agent_all_money as agentAllmoney',
  349. 'ad_num as count',
  350. 'ad_all_money as allMoney',
  351. 'adver_commission as adverCommission',
  352. 'invite_num as invite_num',
  353. 'proxy_commission as proxyCommission',
  354. ])
  355. ->orderBy($sort,$order)
  356. ->whereIsFrontend(1)
  357. // ->whereIn('level', [6, 7])
  358. ->where('province', '!=', 0);
  359. // 如果是地区管理员,则不显示同等级的用户信息
  360. if (\Auth::user()->is_super == 3) {
  361. //$user->where('level', '<', \Auth::user()->level);
  362. $user = $user->whereIn('id', getIds());
  363. } else {
  364. //管理员查看对应的代理
  365. $district=AdminArea::getAdminArea();
  366. if(!empty($district)){
  367. if(!empty($district['city'])){
  368. $user->whereCity($district['city']);
  369. if (!empty($param['district'])) {
  370. $user->whereDistrict($param['district']);
  371. }
  372. }else{
  373. $user->whereDistrict($district['district']);
  374. }
  375. }else{
  376. // 地区查询
  377. if (!empty($param['province'])) {
  378. $user->whereProvince($param['province']);
  379. }
  380. if (!empty($param['city'])) {
  381. $user->whereCity($param['city']);
  382. }
  383. if (!empty($param['district'])) {
  384. $user->whereDistrict($param['district']);
  385. }
  386. }
  387. }
  388. if(!empty($param['id']) && $param['id']!='undefined'){
  389. $user->where('id','=',$param['id']);
  390. }
  391. if(!empty($param['status'])){
  392. $user->where('status','=',$param['status']);
  393. }
  394. // 时间查询
  395. if (!empty($param['startTime']) && !empty($param['endTime'])) {
  396. $user->whereBetween('created_at', [$param['startTime'], $param['endTime']]);
  397. } else if (!empty($param['endTime']) && empty($param['startTime'])) {
  398. $user->where('created_at', '<', $param['endTime']);
  399. } else if (empty($param['endTime']) && !empty($param['startTime'])) {
  400. $user->where('created_at', '>', $param['startTime']);
  401. }
  402. // 手机号码查询
  403. if (!empty($param['mobile'])) {
  404. $user->where('mobile', 'like', "%{$param['mobile']}%");
  405. }
  406. // 等级查询
  407. if (!empty($param['level'])) {
  408. $user->whereLevel($param['level']);
  409. }
  410. $res = $user->paginate(perPage());
  411. if ($res->isNotEmpty()) {
  412. collect($res->items())->each(function ($item, $key) {
  413. $item->invitor_mobile = User::find($item->invitor)->mobile ?? 0;
  414. $item->area = trim(Area::getName($item->province) . ' ' . Area::getName($item->city) . ' ' . Area::getName($item->district));
  415. /**
  416. *@describe zch 为了做筛选已弃用,保留是为了预防有未知的bug,或遗漏的数据,以便恢复使用。
  417. $adver = Advertising::whereUid($item->id)
  418. ->whereIn('status', [3, 4, 9])
  419. ->select([
  420. \DB::raw('count(id) count'),
  421. \DB::raw('sum(total_price) allMoney')
  422. ])
  423. ->first();
  424. $item->count=$adver->count;
  425. $item->allMoney=$adver->allMoney;
  426. $item->invite_num = count(User::getAllInvite($item->id, null, null, false)); // 邀请人数
  427. $item->proxyCommission = AccountLog::whereIn('type', [20, 21, 22, 23])->whereStatus(1)->whereUid($item->id)->sum('money'); // 代理分佣
  428. $item->adverCommission = AccountLog::whereIn('type', [10, 11, 12, 13])->whereStatus(1)->whereUid($item->id)->sum('money');//广告费分佣
  429. $item->agentAllmoney = AccountLog::whereIn('type',[7,8])->whereStatus(1)->whereUid($item->id)->sum('money');//总的代理费
  430. */
  431. $proxyConfig = Proxy::whereUserLevel($item->level)->whereStatus(1)->whereUid($item->id)->whereAreaType(4)->first();//用户当前配置
  432. $proxyAdverSet = $proxyConfig?$proxyConfig->only(['money', 'min_money','free_num']):'';
  433. $item->proxyAdverSet = $proxyAdverSet;
  434. //查看用户是否是区域代理,是的话就找出相关代理信息
  435. $item->proxyarea='';
  436. $item->invite_num = count(User::getAllInvite($item->id, null, null, false)); // 邀请人数
  437. if($item->level>5&&!empty($item->province)&&!empty($item->city)&&!empty($item->district)){
  438. $ps=ProxyArea::whereUid($item->id)->whereStatus(3)->get();
  439. $parea='';
  440. if(!empty($ps)){
  441. foreach($ps as $pkey=>$pval){
  442. $parea.=Area::whereId($pval->province)->value('name').' '.Area::whereId($pval->city)->value('name').Area::whereId($pval->district)->value('name').' ';
  443. }
  444. }
  445. $item->proxyarea=$parea;
  446. }
  447. //下级代理人数
  448. // $allUids = User::getAllChilds($item->id);
  449. // $item->agent_num = count($allUids);
  450. });
  451. }
  452. return showJsonSucc(1001, $res);
  453. }
  454. //获取后台用户信息wsl 20190726
  455. public function getUerInfo(Request $request){
  456. $user=User::whereId(Admin()->id)->select('id','mobile','nick_name');
  457. $user->with(['roles' => function () {
  458. }]);
  459. $userarea=AdminArea::where('admin_id','=',Admin()->id)->first();
  460. $data=[];
  461. $u=$user->first();
  462. if(!empty($u)){
  463. $data['id']=Admin()->id;
  464. $data['rolename']=$u->roles[0]->name;
  465. $data['mobile']=$u->mobile;
  466. $data['nick_name']=$u->nick_name;
  467. $data['province']='';
  468. $data['city']='';
  469. $data['district']='';
  470. if(!empty($userarea)){
  471. $data['province']=$userarea->province;
  472. $data['city']=$userarea->city;
  473. $data['district']=$userarea->district;
  474. $data['areastr']=Area::whereId($userarea->city)->value('name').Area::whereId($userarea->district)->value('name');
  475. }
  476. }
  477. return showJsonSucc('1001',$data);
  478. }
  479. /**
  480. * 下级代理人数
  481. * @author lyh
  482. * @date 2019/4/9
  483. * @modify_author lyh
  484. * @modify_time 2019-4-26 12:26:57
  485. * @modify 确认已区分系统管理员与地区管理员权限
  486. * @param Request $request
  487. * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  488. * @description
  489. */
  490. public function getListByInvite(Request $request)
  491. {
  492. $validator = \Validator::make($param = $request->all(), [
  493. 'id' => 'required|exists:user,id'
  494. ]);
  495. if ($validator->fails()) {
  496. return showJsonErr($validator->errors()->first());
  497. }
  498. // 区分系统管理员与地区管理员数据
  499. if (\Auth::user()->is_super == 3 && !in_array($param['id'], getIds())) {
  500. return showJsonErr('抱歉,您没有权限查看该用户信息');
  501. }
  502. $invitor = User::getAllInvite($param['id'], null, null, false);
  503. $res = User::whereIn('id', $invitor)
  504. ->orderByDesc('id')
  505. ->select([
  506. 'id', 'level', 'nick_name', 'real_name', 'created_at','mobile'
  507. ])
  508. ->paginate(perPage());
  509. return showJsonSucc(1001, $res);
  510. }
  511. /**
  512. * [modifyPassword 修改指定用户密码]
  513. * @param Request $request [description]
  514. * @return [type] [description]
  515. */
  516. public function modifyPassword(Request $request)
  517. {
  518. $validator = \Validator::make($param = $request->all(), [
  519. 'id' => 'required|exists:user,id',
  520. 'new_pass' => 'required|min:6',
  521. 'comfirm_pass' => 'required|same:new_pass',
  522. ]);
  523. if ($validator->fails()) {
  524. return showJsonErr($validator->errors()->first());
  525. }
  526. $result = User::whereId($param['id'])->update(['password' => User::encodePassword($param['new_pass'])]);
  527. if (!$result) {
  528. return showJsonErr('修改密码失败');
  529. }
  530. return showJsonSucc('修改密码成功');
  531. }
  532. /**
  533. * [modifyPassword 修改当前用户密码]
  534. * @param Request $request [description]
  535. * @return [type] [description]
  536. */
  537. public function modifyCurPassword(Request $request)
  538. {
  539. $validator = \Validator::make($param = $request->all(), [
  540. 'new_pass' => 'required|min:6',
  541. 'comfirm_pass' => 'required|same:new_pass',
  542. ]);
  543. if ($validator->fails()) {
  544. return showJsonErr($validator->errors()->first());
  545. }
  546. $result = User::whereId(\Auth::guard(config('permission.guard'))->id())->update(['password' => User::encodePassword($param['new_pass'])]);
  547. // dd(\Auth::guard(config('permission.guard'))->id());
  548. if (!$result) {
  549. return showJsonErr('修改密码失败');
  550. }
  551. return showJsonSucc('修改密码成功');
  552. }
  553. /**
  554. * [edit 编辑用户]
  555. * @author lgs
  556. * @DateTime 2019-04-28T15:16:30+0800
  557. * @return [type] [description]
  558. */
  559. public function edit(Request $request)
  560. {
  561. $validator = \Validator::make($param = array_filter($request->all()), [
  562. 'id' => 'required|exists:user,id',
  563. 'real_name' => 'sometimes|required',
  564. //'mobile' => ['sometimes', 'required', 'string', Rule::unique('user')->ignore($param['id'])],
  565. //'password' => 'sometimes|required|min:6',
  566. ]);
  567. if(!empty($param['mobile'])){
  568. $users=User::whereId($param['mobile'])->where('is_frontend','=',0)->where('id','!=',$param['id'])->count();
  569. if($users)return showJsonErr('手机号已存在');
  570. }
  571. if(!empty($param['status'])&&$param['status']==2&&$param['id']==8){
  572. return showJsonErr('超级管理员不能冻结');
  573. }
  574. if ($validator->fails()) {
  575. return showJsonErr($validator->errors()->first());
  576. }
  577. if (isset($param['password']) && !empty($param['password'])) {
  578. $param['password'] = User::encodePassword($param['password']);
  579. }
  580. $result = User::whereId($param['id'])->update($param);
  581. if (!$result) {
  582. return showJsonErr('编辑用户失败');
  583. }
  584. return showJsonSucc('编辑用户成功');
  585. }
  586. /**
  587. * [detail 代理详情]
  588. * @author lgs
  589. * @DateTime 2019-06-10T12:32:41+0800
  590. * @param Request $request [description]
  591. * @return [type] [description]
  592. */
  593. public function detail(Request $request)
  594. {
  595. $validator = \Validator::make($param = array_filter($request->all()), [
  596. 'id' => 'required|exists:user,id',
  597. ]);
  598. if ($validator->fails()) {
  599. return showJsonErr($validator->errors()->first());
  600. }
  601. $item = User::select([
  602. 'id',
  603. 'level',
  604. 'nick_name',
  605. 'real_name',
  606. 'id_card',
  607. 'mobile',
  608. 'invitor',
  609. 'balance',
  610. 'coin',
  611. 'status',
  612. 'province',
  613. 'city',
  614. 'district',
  615. 'created_at',
  616. 'invite_code'
  617. ])->whereId($param['id'])->first();
  618. $item->invitor_mobile = User::find($item->invitor)->mobile ?? 0;
  619. $item->area = trim(Area::getName($item->province) . ' ' . Area::getName($item->city) . ' ' . Area::getName($item->district));
  620. $item->adver = Advertising::whereUid($item->id)
  621. ->whereIn('status', [3, 4, 9])
  622. ->select([
  623. \DB::raw('count(id) count'),
  624. \DB::raw('sum(total_price) allMoney')
  625. ])
  626. ->first();
  627. $userWithdrawData = \App\Modes\UserWithdraw::where(['uid'=>$item->id])->orderBy('id','desc')->first();
  628. $userBank = UserBank::where(['uid'=> $item->id])->orderBy('id','desc')->first();
  629. if(!empty($userBank)){
  630. $item->bankname = $userBank->bank_name;
  631. $item->bankno = $userBank->bank_number;
  632. }elseif(!empty($userWithdrawData)){
  633. $item->bankname = $userWithdrawData->bank_name;
  634. $item->bankno = $userWithdrawData->bank_number;
  635. }else{
  636. $item->bankname = '';
  637. $item->bankno = '';
  638. }
  639. $item->invite_num = count(User::getAllInvite($item->id, null, null, false)); // 邀请人数
  640. $item->proxyCommission = AccountLog::whereIn('type', [20, 21, 22, 23])->whereStatus(1)->whereUid($item->id)->sum('money'); // 代理分佣
  641. $item->adverCommission = AccountLog::whereIn('type', [10, 11, 12, 13])->whereStatus(1)->whereUid($item->id)->sum('money');//广告费分佣
  642. $proxyConfig = Proxy::getConfig($item->id)->only(['invite', 'proxy_invite','adver_invite','coin']);//用户当前配置
  643. $item->proxy_invite = $proxyConfig['proxy_invite'];//代理直推
  644. $item->adver_invite = $proxyConfig['adver_invite'];//广告直推
  645. $item->coin_rate = $proxyConfig['coin'];//点币汇率
  646. $item->invite_image = User::getInviteImage($item->invite_code);//推广二维码
  647. $ad1 = [];
  648. $ad2 = [];
  649. $agent1 = [];
  650. $agent2 = [];
  651. foreach ($proxyConfig['invite'] as $key => $v) {
  652. if ($v->proxy_type == 1) {//代理
  653. if ($v->type == 1) {//间一
  654. $agent1[] = $v;
  655. }
  656. if ($v->type == 2) {//间二
  657. $agent2[] = $v;
  658. }
  659. }
  660. if ($v->proxy_type == 2) {//广告
  661. if ($v->type == 1) {//间一
  662. $ad1[] = $v;
  663. }
  664. if ($v->type == 2) {//间二
  665. $ad2[] = $v;
  666. }
  667. }
  668. }
  669. $item->agent_invite1 = $agent1;//代理间一
  670. $item->agent_invite2 = $agent2;//代理间二
  671. $item->adver_invite1 = $ad1;//广告间一
  672. $item->adver_invite2 = $ad2;//广告间二
  673. // $item->proxyConfig = $proxyConfig;
  674. return showJsonSucc(1001, $item);
  675. }
  676. //调整点币 2021/7/21
  677. public function editUserCoin(Request $request)
  678. {
  679. $validator = \Validator::make($param = $request->all(), [
  680. 'id' => 'required|exists:user,id',
  681. 'coin' => 'required|numeric|min:0'
  682. ]);
  683. if ($validator->fails()) {
  684. return showJsonErr($validator->errors()->first());
  685. }
  686. // 区分系统管理员与地区管理员数据
  687. if (\Auth::user()->is_super !== 1) {
  688. return showJsonErr('抱歉,您没有权限调整点币');
  689. }
  690. $user = User::whereId($param['id'])->first();
  691. if(!$user){
  692. return showJsonErr('用户不存在');
  693. }
  694. if($user->coin > $param['coin']){
  695. $difference = - bcsub($user->coin,$param['coin'],4);
  696. }else{
  697. $difference = bcsub($param['coin'],$user->coin,4);
  698. }
  699. $result = User::whereId($param['id'])->update(['coin' => $param['coin']]);
  700. if (!$result) {
  701. return showJsonErr('修改用户状态失败');
  702. }
  703. $ss = $difference>0 ? '上调':'下调';
  704. //点币记录
  705. $remark="用户【id:".$param['id']."】,系统".$ss."点币,".$ss."幅度【".$difference."】";
  706. AccountLog::insert([
  707. 'uid' => $param['id'],
  708. 'type' => 47,
  709. 'status' => 1,
  710. 'money_type' => 1,
  711. 'money' => $difference,
  712. 'current_money' =>$param['coin'],
  713. 'remark' => $remark
  714. ]);
  715. return showJsonSucc('调整用户点币成功');
  716. }
  717. }