UserController.php 29 KB

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