UserController.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603
  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. $param = Arr::only($param, ['id', 'password', 'status', 'pid_mobile', 'mobile']);
  354. Db::beginTransaction();
  355. try {
  356. Validator::input($param, [
  357. 'id' => Validator::notEmpty()->setName('标识'),
  358. ]);
  359. $userModel = User::query();
  360. $has = (clone $userModel)->where('id', $param['id'])->first();
  361. if (empty($has)) {
  362. throw new \Exception('账号不存在!');
  363. }
  364. if (Arr::get($param, 'name')) {
  365. $save['name'] = $param['name'];
  366. }
  367. if (Arr::get($param, 'password')) {
  368. $save['password'] = md5($param['password']);
  369. }
  370. /** 修改手机号 */
  371. if (Arr::get($param, 'mobile') && $has->mobile != Arr::get($param, 'mobile')) {
  372. $hasMobile = (clone $userModel)->where('mobile', $param['mobile'])->exists();
  373. if (empty($hasMobile)) {
  374. $save['mobile'] = $param['mobile'];
  375. } else {
  376. throw new \Exception($param['mobile'] . '手机号已存在!');
  377. }
  378. }
  379. if (Arr::get($param, 'pid_mobile')) {
  380. $pid = (clone $userModel)->where('mobile', $param['pid_mobile'])->value('id');
  381. if (!empty($pid)) {
  382. $save['pid'] = $pid;
  383. (clone $userModel)->where('pid', $has->id)->update(['ppid' => $pid]);
  384. (clone $userModel)->where('ppid', $has->id)->update(['toppid' => $pid]);
  385. } else {
  386. throw new \Exception($param['pid_mobile'] . '未查询到您需要变更的上级信息,请确认手机号是否正确!');
  387. }
  388. }
  389. if (is_numeric(Arr::get($param, 'status'))) {
  390. $save['status'] = $param['status'];
  391. }
  392. (clone $userModel)->where('id', $param['id'])->update($save);
  393. } catch (\Throwable $exception) {
  394. Db::rollBack();
  395. return $this->fail($exception->getMessage());
  396. }
  397. Db::commit();
  398. return $this->success();
  399. }
  400. return view('user/update');
  401. }
  402. /**
  403. * 插入
  404. * @param Request $request
  405. * @return Response
  406. * @throws BusinessException
  407. */
  408. public function insert(Request $request): Response
  409. {
  410. if ($request->method() === 'POST') {
  411. $param = Arr::only($request->all(), ['mobile', 'password', 'invitation_code']);
  412. Db::beginTransaction();
  413. try {
  414. Validator::input($param, [
  415. 'mobile' => Validator::notEmpty()->intType()->setName('手机号'),
  416. 'password' => Validator::notEmpty()->stringType()->Length(6, 15)->alnum()->setName('密码'),
  417. 'invitation_code' => Validator::notEmpty()->intType()->setName('邀请码'),
  418. ]);
  419. LoginBusiness::register($param);
  420. } catch (\Throwable $exception) {
  421. Db::rollBack();
  422. return $this->fail($exception->getMessage());
  423. }
  424. Db::commit();
  425. return $this->success();
  426. }
  427. return view('user/insert');
  428. }
  429. /** 更新银行卡
  430. * @param Request $request
  431. * @return Response
  432. */
  433. public function bankcardsave(Request $request): Response
  434. {
  435. $param = $request->all();
  436. $param = Arr::only($param, ['id', 'affiliated_bank', 'account_holder', 'card_number']);
  437. if ($request->isAjax()) {
  438. try {
  439. $has = BankCard::query()->where('uid', $param['id'])->first();
  440. if ($has) {
  441. BankCard::query()->where('uid', $param['id'])->update([
  442. 'affiliated_bank' => $param['affiliated_bank'],
  443. 'account_holder' => $param['account_holder'],
  444. 'card_number' => $param['card_number'],
  445. 'o_account_holder' => $has->account_holder,
  446. 'o_affiliated_bank' => $has->affiliated_bank,
  447. 'o_card_number' => $has->card_number,
  448. ]);
  449. } else {
  450. BankCard::query()->insert([
  451. 'uid' => $param['id'],
  452. 'affiliated_bank' => $param['affiliated_bank'],
  453. 'account_holder' => $param['account_holder'],
  454. 'card_number' => $param['card_number'],
  455. ]);
  456. }
  457. } catch (\Throwable $exception) {
  458. return $this->fail($exception->getMessage());
  459. }
  460. return $this->success();
  461. }
  462. }
  463. /** 会员产品
  464. * @param Request $request
  465. * @return Response
  466. */
  467. public function goods(Request $request): Response
  468. {
  469. $param = $request->all();
  470. if ($request->isAjax()) {
  471. $teamId = admin('team_id');
  472. $data = MyGood::query()->where(function ($query) use ($param) {
  473. if (Arr::get($param, 'id')) {
  474. $query->where('user_id', $param['id']);
  475. }
  476. })->whereExists(function ($query) use ($teamId) {
  477. $query->from('wa_users')->whereRaw('wa_users.id=wa_my_goods.user_id');
  478. if (!empty($teamId)) {
  479. $query->where('team_id', $teamId);
  480. }
  481. })->with('userData:id,name');
  482. if (Arr::get($param, 'field')) {
  483. $order = 'asc';
  484. if (Arr::get($param, 'order')) {
  485. $order = 'desc';
  486. }
  487. $data = $data->orderBy($param['field'], $order);
  488. } else {
  489. $data = $data->orderByDesc('id');
  490. }
  491. $data = $data->paginate(Arr::get($param, 'limit', 10))->toArray();
  492. return json(['code' => 0, 'data' => $data['data'], 'msg' => 'ok', 'count' => $data['total']]);
  493. }
  494. return view('user/goods', $param);
  495. }
  496. /** 上下分
  497. * @param Request $request
  498. * @return Response
  499. */
  500. public function money(Request $request): Response
  501. {
  502. if ($request->method() === 'POST') {
  503. $param = $request->all();
  504. $param = Arr::only($param, ['id', 'type', 'buy', 'mold', 'operate_password']);
  505. Db::beginTransaction();
  506. try {
  507. Validator::input($param, [
  508. 'id' => Validator::notEmpty()->setName('标识'),
  509. 'type' => Validator::notEmpty()->setName('操作类型'),
  510. 'buy' => Validator::notEmpty()->setName('金额'),
  511. 'mold' => Validator::notEmpty()->setName('钱包'),
  512. // 'operate_password' => Validator::notEmpty()->setName('密码'),
  513. ]);
  514. // $system = Db::table('wa_system')->first();
  515. // if (md5($param['operate_password']) != $system->operate_password) {
  516. // throw new \Exception('密码填写错误!');
  517. // }
  518. if (Arr::get($param, 'type') == 1) {
  519. StreamBusiness::addStream($param['id'], $param['buy'], streamType7, $param['mold'], moldTypefild($param['mold']));
  520. } elseif (Arr::get($param, 'type') == 2) {
  521. StreamBusiness::delStream($param['id'], $param['buy'], streamType8, $param['mold'], moldTypefild($param['mold']));
  522. }
  523. } catch (\Throwable $exception) {
  524. Db::rollBack();
  525. return $this->fail($exception->getMessage());
  526. }
  527. Db::commit();
  528. return $this->success();
  529. }
  530. return view('user/money');
  531. }
  532. }