UserController.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608
  1. <?php
  2. namespace plugin\admin\app\controller;
  3. use app\api\repositories\MoneyLogRepositories;
  4. use app\business\LoginBusiness;
  5. use app\business\StreamBusiness;
  6. use Illuminate\Support\Arr;
  7. use plugin\admin\app\model\BankCard;
  8. use plugin\admin\app\model\MyGood;
  9. use plugin\admin\app\model\Stream;
  10. use plugin\admin\app\model\UserIdentity;
  11. use Respect\Validation\Validator;
  12. use support\Db;
  13. use support\Request;
  14. use support\Response;
  15. use plugin\admin\app\model\User;
  16. use plugin\admin\app\controller\Crud;
  17. use support\exception\BusinessException;
  18. /**
  19. * 会员列表
  20. */
  21. class UserController extends Crud
  22. {
  23. /**
  24. * @var User
  25. */
  26. protected $model = null;
  27. /**
  28. * 构造函数
  29. * @return void
  30. */
  31. public function __construct()
  32. {
  33. $this->model = new User;
  34. }
  35. /**
  36. * 浏览
  37. * @return Response
  38. */
  39. public function index(): Response
  40. {
  41. return view('user/index');
  42. }
  43. /** 首页
  44. * @param Request $request
  45. * @return Response
  46. */
  47. public function select(Request $request): Response
  48. {
  49. $param = $request->all();
  50. $teamId = admin('team_id');
  51. $data = User::query()->where(function ($query) use ($param, $teamId) {
  52. if (is_numeric(Arr::get($param, 'money.1')) && is_numeric(Arr::get($param, 'money.0'))) {
  53. $query->whereBetween('money', [$param['money'][0], $param['money'][1]]);
  54. } elseif (is_numeric(Arr::get($param, 'money.0'))) {
  55. $query->where('money', '>=', $param['money'][0]);
  56. } elseif (is_numeric(Arr::get($param, 'money.1'))) {
  57. $query->where('money', '<=', $param['money'][1]);
  58. }
  59. if (is_numeric(Arr::get($param, 'money_one.1')) && is_numeric(Arr::get($param, 'money_one.0'))) {
  60. $query->whereBetween('money_one', [$param['money_one'][0], $param['money_one'][1]]);
  61. } elseif (is_numeric(Arr::get($param, 'money_one.0'))) {
  62. $query->where('money_one', '>=', $param['money_one'][0]);
  63. } elseif (is_numeric(Arr::get($param, 'money_one.1'))) {
  64. $query->where('money_one', '<=', $param['money_one'][1]);
  65. }
  66. if (is_numeric(Arr::get($param, 'money_two.1')) && is_numeric(Arr::get($param, 'money_two.0'))) {
  67. $query->whereBetween('money_two', [$param['money_two'][0], $param['money_two'][1]]);
  68. } elseif (is_numeric(Arr::get($param, 'money_two.0'))) {
  69. $query->where('money_two', '>=', $param['money_two'][0]);
  70. } elseif (is_numeric(Arr::get($param, 'integral.1'))) {
  71. $query->where('money_two', '<=', $param['money_two'][1]);
  72. }
  73. if (Arr::get($param, 'created_at.0') && Arr::get($param, 'created_at.1')) {
  74. $query->whereBetween('created_at', [$param['created_at'][0], $param['created_at'][1]]);
  75. } elseif (Arr::get($param, 'created_at.0')) {
  76. $query->where('created_at', '>=', $param['created_at'][0]);
  77. } elseif (Arr::get($param, 'created_at.1')) {
  78. $query->where('created_at', '<=', $param['created_at'][1]);
  79. }
  80. if (Arr::get($param, 'join_time.0') && Arr::get($param, 'join_time.1')) {
  81. $query->whereBetween('join_time', [$param['join_time'][0], $param['join_time'][1]]);
  82. } elseif (Arr::get($param, 'join_time.0')) {
  83. $query->where('join_time', '>=', $param['join_time'][0]);
  84. } elseif (Arr::get($param, 'join_time.1')) {
  85. $query->where('join_time', '<=', $param['join_time'][1]);
  86. }
  87. if (is_numeric(Arr::get($param, 'status'))) {
  88. $query->where('status', $param['status']);
  89. }
  90. if (Arr::get($param, 'name')) {
  91. $query->where('name', $param['name']);
  92. }
  93. if (Arr::get($param, 'mobile')) {
  94. $query->where('mobile', $param['mobile']);
  95. }
  96. if (Arr::get($param, 'is_autonym')) {
  97. $query->where('is_autonym', $param['is_autonym']);
  98. }
  99. if (Arr::get($param, 'id')) {
  100. $query->where('id', $param['id']);
  101. }
  102. if ($teamId) {
  103. $query->where('team_id', $teamId);
  104. }
  105. })->with('pidData:id,name,mobile');
  106. if (Arr::get($param, 'field')) {
  107. $order = 'asc';
  108. if (Arr::get($param, 'order')) {
  109. $order = $param['order'];
  110. }
  111. $data = $data->orderBy($param['field'], $order);
  112. }
  113. $data = $data->paginate(Arr::get($param, 'limit', 10))->toArray();
  114. return json(['code' => 0, 'data' => $data['data'], 'msg' => 'ok', 'count' => $data['total']]);
  115. }
  116. /** 下级
  117. * @param Request $request
  118. * @return Response
  119. */
  120. public function subordinate(Request $request): Response
  121. {
  122. $param = $request->all();
  123. if ($request->isAjax()) {
  124. $data = User::query()->where(function ($query) use ($param) {
  125. if (is_numeric(Arr::get($param, 'money.1')) && is_numeric(Arr::get($param, 'money.0'))) {
  126. $query->whereBetween('money', [$param['money'][0], $param['money'][1]]);
  127. } elseif (is_numeric(Arr::get($param, 'money.0'))) {
  128. $query->where('money', '>=', $param['money'][0]);
  129. } elseif (is_numeric(Arr::get($param, 'money.1'))) {
  130. $query->where('money', '<=', $param['money'][1]);
  131. }
  132. if (Arr::get($param, 'created_at.0') && Arr::get($param, 'created_at.1')) {
  133. $query->whereBetween('created_at', [$param['created_at'][0], $param['created_at'][1]]);
  134. } elseif (Arr::get($param, 'created_at.0')) {
  135. $query->where('created_at', '>=', $param['created_at'][0]);
  136. } elseif (Arr::get($param, 'created_at.1')) {
  137. $query->where('created_at', '<=', $param['created_at'][1]);
  138. }
  139. if (is_numeric(Arr::get($param, 'status'))) {
  140. $query->where('status', $param['status']);
  141. }
  142. if (Arr::get($param, 'last_time.0') && Arr::get($param, 'last_time.1')) {
  143. $query->whereBetween('last_time', [$param['last_time'][0], $param['last_time'][1]]);
  144. } elseif (Arr::get($param, 'last_time.0')) {
  145. $query->where('last_time', '>=', $param['last_time'][0]);
  146. } elseif (Arr::get($param, 'last_time.1')) {
  147. $query->where('last_time', '<=', $param['last_time'][1]);
  148. }
  149. if (Arr::get($param, 'join_time.0') && Arr::get($param, 'join_time.1')) {
  150. $query->whereBetween('join_time', [$param['join_time'][0], $param['join_time'][1]]);
  151. } elseif (Arr::get($param, 'join_time.0')) {
  152. $query->where('join_time', '>=', $param['join_time'][0]);
  153. } elseif (Arr::get($param, 'last_time.1')) {
  154. $query->where('join_time', '<=', $param['join_time'][1]);
  155. }
  156. if (Arr::get($param, 'last_ip')) {
  157. $query->where('last_ip', $param['last_ip']);
  158. }
  159. if (Arr::get($param, 'join_ip')) {
  160. $query->where('join_ip', $param['join_ip']);
  161. }
  162. if (Arr::get($param, 'name')) {
  163. $query->where('name', $param['name']);
  164. }
  165. if (Arr::get($param, 'mobile')) {
  166. $query->where('mobile', $param['mobile']);
  167. }
  168. if (Arr::get($param, 'pid')) {
  169. $query->where('pid', $param['pid']);
  170. }
  171. });
  172. if (Arr::get($param, 'field')) {
  173. $order = 'asc';
  174. if (Arr::get($param, 'order')) {
  175. $order = 'desc';
  176. }
  177. $data = $data->orderBy($param['field'], $order);
  178. }
  179. $data = $data->paginate(Arr::get($param, 'limit', 10))->toArray();
  180. return json(['code' => 0, 'data' => $data['data'], 'msg' => 'ok', 'count' => $data['total']]);
  181. }
  182. return view('user/subordinate', $param);
  183. }
  184. /** 流水
  185. * @param Request $request
  186. * @return Response
  187. */
  188. public function stream(Request $request): Response
  189. {
  190. $param = $request->all();
  191. if ($request->isAjax()) {
  192. $param = $request->all();
  193. $data = Stream::query()->where(function ($query) use ($param) {
  194. if (is_numeric(Arr::get($param, 'money.1')) && is_numeric(Arr::get($param, 'money.0'))) {
  195. $query->whereBetween('money', [$param['money'][0], $param['money'][1]]);
  196. } elseif (is_numeric(Arr::get($param, 'money.0'))) {
  197. $query->where('money', '>=', $param['money'][0]);
  198. } elseif (is_numeric(Arr::get($param, 'money.1'))) {
  199. $query->where('money', '<=', $param['money'][1]);
  200. }
  201. if (Arr::get($param, 'created_at.0') && Arr::get($param, 'created_at.1')) {
  202. $query->whereBetween('created_at', [$param['created_at'][0], $param['created_at'][1]]);
  203. } elseif (Arr::get($param, 'created_at.0')) {
  204. $query->where('created_at', '>=', $param['created_at'][0]);
  205. } elseif (Arr::get($param, 'created_at.1')) {
  206. $query->where('created_at', '<=', $param['created_at'][1]);
  207. }
  208. if (Arr::get($param, 'type')) {
  209. $query->where('type', $param['type']);
  210. }
  211. if (Arr::get($param, 'mold')) {
  212. $query->where('mold', $param['mold']);
  213. }
  214. if (Arr::get($param, 'user_id')) {
  215. $query->where('user_id', $param['user_id']);
  216. }
  217. })->whereExists(function ($query) use ($param) {
  218. $query->from('wa_users')->whereRaw('wa_users.id=wa_stream.user_id');
  219. if (Arr::get($param, 'user_name')) {
  220. $query->where('name', 'like', '%' . $param['user_name'] . '%');
  221. }
  222. if (Arr::get($param, 'mobile')) {
  223. $query->where('mobile', 'like', '%' . $param['mobile'] . '%');
  224. }
  225. })
  226. ->with('userData:id,name,mobile');
  227. if (Arr::get($param, 'field')) {
  228. $order = 'asc';
  229. if (Arr::get($param, 'order')) {
  230. $order = 'desc';
  231. }
  232. $data = $data->orderBy($param['field'], $order);
  233. } else {
  234. $data = $data->orderByDesc('id');
  235. }
  236. $data = $data->paginate(Arr::get($param, 'limit', 10))->toArray();
  237. $arr = [];
  238. foreach ($data['data'] as $k => $v) {
  239. $arr[] = [
  240. 'user_name' => $v['user_data']['name'],
  241. 'user_mobile' => $v['user_data']['mobile'],
  242. 'type_id' => $v['type'],
  243. 'mold_id' => $v['mold'],
  244. 'type' => streamType($v['type']) . '--' . moldType($v['mold']),
  245. 'created_at' => $v['created_at'],
  246. 'total_money' => $v['total_money'],
  247. 'money' => $v['money']
  248. ];
  249. }
  250. return json(['code' => 0, 'data' => $arr, 'msg' => 'ok', 'count' => $data['total']]);
  251. }
  252. return view('user/stream', $param);
  253. }
  254. /** 银行卡
  255. * @param Request $request
  256. * @return Response
  257. */
  258. public function bankcard(Request $request): Response
  259. {
  260. $param = $request->all();
  261. if ($request->isAjax()) {
  262. $data = BankCard::query()->where(function ($query) use ($param) {
  263. if (Arr::get($param, 'id')) {
  264. $query->where('uid', $param['id']);
  265. }
  266. })->with('userData:id,name,mobile');
  267. if (Arr::get($param, 'field')) {
  268. $order = 'asc';
  269. if (Arr::get($param, 'order')) {
  270. $order = 'desc';
  271. }
  272. $data = $data->orderBy($param['field'], $order);
  273. }
  274. $data = $data->paginate(Arr::get($param, 'limit', 10))->toArray();
  275. return json(['code' => 0, 'data' => $data['data'], 'msg' => 'ok', 'count' => $data['total']]);
  276. }
  277. return view('user/bankcard', $param);
  278. }
  279. /** 身份证
  280. * @param Request $request
  281. * @return Response
  282. */
  283. public function identity(Request $request): Response
  284. {
  285. $param = $request->all();
  286. if ($request->isAjax()) {
  287. $data = UserIdentity::query()->where(function ($query) use ($param) {
  288. if (Arr::get($param, 'id')) {
  289. $query->where('uid', $param['id']);
  290. }
  291. });
  292. if (Arr::get($param, 'field')) {
  293. $order = 'asc';
  294. if (Arr::get($param, 'order')) {
  295. $order = 'desc';
  296. }
  297. $data = $data->orderBy($param['field'], $order);
  298. }
  299. $data = $data->paginate(Arr::get($param, 'limit', 10))->toArray();
  300. return json(['code' => 0, 'data' => $data['data'], 'msg' => 'ok', 'count' => $data['total']]);
  301. }
  302. return view('user/identity', $param);
  303. }
  304. /** 更新身份证
  305. * @param Request $request
  306. * @return Response
  307. */
  308. public function identitysave(Request $request): Response
  309. {
  310. $param = $request->all();
  311. $param = Arr::only($param, ['id', 'name', 'number']);
  312. if ($request->isAjax()) {
  313. try {
  314. $has = UserIdentity::query()->where('uid', $param['id'])->first();
  315. if ($has) {
  316. UserIdentity::query()->where('uid', $param['id'])->update([
  317. 'name' => $param['name'],
  318. 'number' => $param['number'],
  319. 'uid' => $param['id'],
  320. 'oname' => $has->name,
  321. 'onumber' => $has->number,
  322. ]);
  323. } else {
  324. UserIdentity::query()->insert([
  325. 'uid' => $param['id'],
  326. 'name' => $param['name'],
  327. 'number' => $param['number'],
  328. 'created_at' => date('Y-m-d H:i:s'),
  329. 'updated_at' => date('Y-m-d H:i:s'),
  330. ]);
  331. }
  332. User::query()->where('id', $param['id'])->update([
  333. 'is_autonym' => 1,
  334. 'name' => $param['name'],
  335. 'updated_at' => date('Y-m-d H:i:s')
  336. ]);
  337. } catch (\Throwable $exception) {
  338. return $this->fail($exception->getMessage());
  339. }
  340. return $this->success();
  341. }
  342. }
  343. /**
  344. * 更新
  345. * @param Request $request
  346. * @return Response
  347. * @throws BusinessException
  348. */
  349. public function update(Request $request): Response
  350. {
  351. if ($request->method() === 'POST') {
  352. $param = $request->all();
  353. Db::beginTransaction();
  354. try {
  355. Validator::input($param, [
  356. 'id' => Validator::notEmpty()->setName('标识'),
  357. ]);
  358. $userModel = User::query();
  359. $has = (clone $userModel)->where('id', $param['id'])->first();
  360. if (empty($has)) {
  361. throw new \Exception('账号不存在!');
  362. }
  363. if (Arr::get($param, 'name')) {
  364. $save['name'] = $param['name'];
  365. }
  366. if (Arr::get($param, 'is_claim')) {
  367. $save['is_claim'] = $param['is_claim'];
  368. }
  369. if (Arr::get($param, 'is_bank_withdraw')) {
  370. $save['is_bank_withdraw'] = $param['is_bank_withdraw'];
  371. }
  372. if (Arr::get($param, 'password')) {
  373. $save['password'] = md5($param['password']);
  374. }
  375. /** 修改手机号 */
  376. if (Arr::get($param, 'mobile') && $has->mobile != Arr::get($param, 'mobile')) {
  377. $hasMobile = (clone $userModel)->where('mobile', $param['mobile'])->exists();
  378. if (empty($hasMobile)) {
  379. $save['mobile'] = $param['mobile'];
  380. } else {
  381. throw new \Exception($param['mobile'] . '手机号已存在!');
  382. }
  383. }
  384. if (Arr::get($param, 'pid_mobile')) {
  385. $pid = (clone $userModel)->where('mobile', $param['pid_mobile'])->value('id');
  386. if (!empty($pid)) {
  387. $save['pid'] = $pid;
  388. (clone $userModel)->where('pid', $has->id)->update(['ppid' => $pid]);
  389. (clone $userModel)->where('ppid', $has->id)->update(['toppid' => $pid]);
  390. } else {
  391. throw new \Exception($param['pid_mobile'] . '未查询到您需要变更的上级信息,请确认手机号是否正确!');
  392. }
  393. }
  394. if (is_numeric(Arr::get($param, 'status'))) {
  395. $save['status'] = $param['status'];
  396. }
  397. (clone $userModel)->where('id', $param['id'])->update($save);
  398. } catch (\Throwable $exception) {
  399. Db::rollBack();
  400. return $this->fail($exception->getMessage());
  401. }
  402. Db::commit();
  403. return $this->success();
  404. }
  405. return view('user/update');
  406. }
  407. /**
  408. * 插入
  409. * @param Request $request
  410. * @return Response
  411. * @throws BusinessException
  412. */
  413. public function insert(Request $request): Response
  414. {
  415. if ($request->method() === 'POST') {
  416. $param = Arr::only($request->all(), ['mobile', 'password', 'invitation_code']);
  417. Db::beginTransaction();
  418. try {
  419. Validator::input($param, [
  420. 'mobile' => Validator::notEmpty()->intType()->setName('手机号'),
  421. 'password' => Validator::notEmpty()->stringType()->Length(6, 15)->alnum()->setName('密码'),
  422. 'invitation_code' => Validator::notEmpty()->intType()->setName('邀请码'),
  423. ]);
  424. LoginBusiness::register($param);
  425. } catch (\Throwable $exception) {
  426. Db::rollBack();
  427. return $this->fail($exception->getMessage());
  428. }
  429. Db::commit();
  430. return $this->success();
  431. }
  432. return view('user/insert');
  433. }
  434. /** 更新银行卡
  435. * @param Request $request
  436. * @return Response
  437. */
  438. public function bankcardsave(Request $request): Response
  439. {
  440. $param = $request->all();
  441. $param = Arr::only($param, ['id', 'affiliated_bank', 'account_holder', 'card_number']);
  442. if ($request->isAjax()) {
  443. try {
  444. $has = BankCard::query()->where('uid', $param['id'])->first();
  445. if ($has) {
  446. BankCard::query()->where('uid', $param['id'])->update([
  447. 'affiliated_bank' => $param['affiliated_bank'],
  448. 'account_holder' => $param['account_holder'],
  449. 'card_number' => $param['card_number'],
  450. 'o_account_holder' => $has->account_holder,
  451. 'o_affiliated_bank' => $has->affiliated_bank,
  452. 'o_card_number' => $has->card_number,
  453. ]);
  454. } else {
  455. BankCard::query()->insert([
  456. 'uid' => $param['id'],
  457. 'affiliated_bank' => $param['affiliated_bank'],
  458. 'account_holder' => $param['account_holder'],
  459. 'card_number' => $param['card_number'],
  460. ]);
  461. }
  462. } catch (\Throwable $exception) {
  463. return $this->fail($exception->getMessage());
  464. }
  465. return $this->success();
  466. }
  467. }
  468. /** 会员产品
  469. * @param Request $request
  470. * @return Response
  471. */
  472. public function goods(Request $request): Response
  473. {
  474. $param = $request->all();
  475. if ($request->isAjax()) {
  476. $teamId = admin('team_id');
  477. $data = MyGood::query()->where(function ($query) use ($param) {
  478. if (Arr::get($param, 'id')) {
  479. $query->where('user_id', $param['id']);
  480. }
  481. })->whereExists(function ($query) use ($teamId) {
  482. $query->from('wa_users')->whereRaw('wa_users.id=wa_my_goods.user_id');
  483. if (!empty($teamId)) {
  484. $query->where('team_id', $teamId);
  485. }
  486. })->with('userData:id,name');
  487. if (Arr::get($param, 'field')) {
  488. $order = 'asc';
  489. if (Arr::get($param, 'order')) {
  490. $order = 'desc';
  491. }
  492. $data = $data->orderBy($param['field'], $order);
  493. } else {
  494. $data = $data->orderByDesc('id');
  495. }
  496. $data = $data->paginate(Arr::get($param, 'limit', 10))->toArray();
  497. return json(['code' => 0, 'data' => $data['data'], 'msg' => 'ok', 'count' => $data['total']]);
  498. }
  499. return view('user/goods', $param);
  500. }
  501. /** 上下分
  502. * @param Request $request
  503. * @return Response
  504. */
  505. public function money(Request $request): Response
  506. {
  507. if ($request->method() === 'POST') {
  508. $param = $request->all();
  509. $param = Arr::only($param, ['id', 'type', 'buy', 'mold', 'operate_password']);
  510. Db::beginTransaction();
  511. try {
  512. Validator::input($param, [
  513. 'id' => Validator::notEmpty()->setName('标识'),
  514. 'type' => Validator::notEmpty()->setName('操作类型'),
  515. 'buy' => Validator::notEmpty()->setName('金额'),
  516. 'mold' => Validator::notEmpty()->setName('钱包'),
  517. // 'operate_password' => Validator::notEmpty()->setName('密码'),
  518. ]);
  519. // $system = Db::table('wa_system')->first();
  520. // if (md5($param['operate_password']) != $system->operate_password) {
  521. // throw new \Exception('密码填写错误!');
  522. // }
  523. if (Arr::get($param, 'type') == 1) {
  524. StreamBusiness::addStream($param['id'], $param['buy'], streamType7, $param['mold'], moldTypefild($param['mold']));
  525. } elseif (Arr::get($param, 'type') == 2) {
  526. StreamBusiness::delStream($param['id'], $param['buy'], streamType8, $param['mold'], moldTypefild($param['mold']));
  527. }
  528. } catch (\Throwable $exception) {
  529. Db::rollBack();
  530. return $this->fail($exception->getMessage());
  531. }
  532. Db::commit();
  533. return $this->success();
  534. }
  535. return view('user/money');
  536. }
  537. }