User.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\controller\api\user;
  12. use app\common\model\user\AwardLake;
  13. use app\common\repositories\store\IntegralRepository;
  14. use app\common\repositories\store\service\StoreServiceRepository;
  15. use app\common\repositories\system\CacheRepository;
  16. use app\common\repositories\user\MemberinterestsRepository;
  17. use app\common\repositories\user\UserBillRepository;
  18. use app\common\repositories\user\UserBrokerageRepository;
  19. use app\common\repositories\user\UserRepository;
  20. use app\common\repositories\user\UserVisitRepository;
  21. use app\validate\api\UserBaseInfoValidate;
  22. use crmeb\basic\BaseController;
  23. use crmeb\services\MiniProgramService;
  24. use crmeb\services\SmsService;
  25. use think\App;
  26. use think\db\exception\DataNotFoundException;
  27. use think\db\exception\DbException;
  28. use think\db\exception\ModelNotFoundException;
  29. class User extends BaseController
  30. {
  31. protected $repository;
  32. protected $user;
  33. public function __construct(App $app, UserRepository $repository)
  34. {
  35. parent::__construct($app);
  36. $this->repository = $repository;
  37. $this->user = $this->request->userInfo();
  38. }
  39. /**
  40. * 推广图片
  41. * @return mixed
  42. * @author xaboy
  43. * @day 2020/6/22
  44. */
  45. public function spread_image()
  46. {
  47. $type = $this->request->param('type');
  48. $res = $type == 'routine'
  49. ? $this->repository->routineSpreadImage($this->user)
  50. : $this->repository->wxSpreadImage($this->user);
  51. return app('json')->success($res);
  52. }
  53. /**
  54. * 推广图片v2
  55. * @return \think\response\Json
  56. * @author wuhaotian
  57. * @email 442384644@qq.com
  58. * @date 2024/7/10
  59. */
  60. public function spread_image_v2()
  61. {
  62. $type = $this->request->param('type');
  63. $user = $this->user;
  64. $siteName = systemConfig('site_name');
  65. $qrcode = $type == 'routine'
  66. ? $this->repository->mpQrcode($user)
  67. : $this->repository->wxQrcode($user);
  68. $poster = systemGroupData('spread_banner');
  69. $nickname = $user['nickname'];
  70. $mark = '邀请您加入' . $siteName;
  71. return app('json')->success(compact('qrcode', 'poster', 'nickname', 'mark'));
  72. }
  73. /**
  74. * 用户推广信息
  75. * @return \think\response\Json
  76. * @throws DbException
  77. * @author wuhaotian
  78. * @email 442384644@qq.com
  79. * @date 2024/7/10
  80. */
  81. public function spread_info()
  82. {
  83. $user = $this->user;
  84. $extensionInfo = get_extension_info($user);//获取用户是否可以分销以及是否内购
  85. if (!$extensionInfo['isPromoter']) return app('json')->fail('您还不是分销员');
  86. $make = app()->make(UserBrokerageRepository::class);
  87. $user->append(['one_level_count', 'lock_brokerage', 'two_level_count', 'spread_total', 'yesterday_brokerage', 'total_extract', 'total_brokerage', 'total_brokerage_price']);
  88. $show_brokerage = (bool)$make->search(['type' => 0])->count();
  89. $data = [
  90. 'total_brokerage_price' => $user->total_brokerage_price,
  91. 'lock_brokerage' => $user->lock_brokerage,
  92. 'one_level_count' => $user->one_level_count,
  93. 'two_level_count' => $user->two_level_count,
  94. 'spread_total' => $user->spread_total,
  95. 'yesterday_brokerage' => $user->yesterday_brokerage,
  96. 'total_extract' => $user->total_extract,
  97. 'total_brokerage' => $user->total_brokerage,
  98. 'brokerage_price' => $user->brokerage_price,
  99. 'show_brokerage' => $show_brokerage,
  100. 'brokerage' => $show_brokerage ? ($user->brokerage ?: ['brokerage_level' => 0, 'brokerage_name' => '普通分销员']) : null,
  101. 'now_money' => $user->now_money,
  102. 'broken_day' => (int)systemConfig('lock_brokerage_timer'),
  103. 'user_extract_min' => (int)systemConfig('user_extract_min'),
  104. ];
  105. return app('json')->success($data);
  106. }
  107. /**
  108. * 推广佣金列表
  109. * @return \think\response\Json
  110. * @author wuhaotian
  111. * @email 442384644@qq.com
  112. * @date 2024/7/10
  113. */
  114. public function brokerage_all()
  115. {
  116. return app('json')->success(app()->make(UserBrokerageRepository::class)->all(0));
  117. }
  118. /**
  119. * 推广佣金详情
  120. * @return \think\response\Json
  121. * @author wuhaotian
  122. * @email 442384644@qq.com
  123. * @date 2024/7/10
  124. */
  125. public function brokerage_info()
  126. {
  127. $make = app()->make(UserBrokerageRepository::class);
  128. $user = $this->user;
  129. $brokerage = $user->brokerage;
  130. $next_brokerage = $make->getNextLevel($user->brokerage_level) ?: $brokerage;
  131. $brokerage_rate = null;
  132. if ($next_brokerage || $brokerage) {
  133. $brokerage_rate = $make->getLevelRate($user, $next_brokerage);
  134. }
  135. $down_brokerage = null;
  136. if ($next_brokerage) {
  137. $down_brokerage = $make->getNextLevel($next_brokerage->brokerage_level);
  138. }
  139. $brokerage = $brokerage ?: ['brokerage_level' => 0, 'brokerage_name' => '普通分销员'];
  140. return app('json')->success(compact('brokerage', 'next_brokerage', 'brokerage_rate', 'down_brokerage'));
  141. }
  142. /**
  143. * 推广佣金通知
  144. * @return \think\response\Json
  145. * @author wuhaotian
  146. * @email 442384644@qq.com
  147. * @date 2024/7/10
  148. */
  149. public function brokerage_notice()
  150. {
  151. $user = $this->user;
  152. if (!$user->brokerage_level) {
  153. return app('json')->fail('无需通知');
  154. }
  155. $make = app()->make(CacheRepository::class);
  156. $key = 'notice_' . $user->uid . '_' . $user->brokerage_level;
  157. if ($make->getResult($key)) {
  158. return app('json')->fail('已通知');
  159. }
  160. $make->create(['key' => $key, 'result' => 1, 'expire_time' => 0]);
  161. $userBrokerageRepository = app()->make(UserBrokerageRepository::class);
  162. return app('json')->success(['type' => $userBrokerageRepository->getNextLevel($user->brokerage_level) ? 'level' : 'top']);
  163. }
  164. /**
  165. * 推广佣金明细
  166. * @param UserBillRepository $billRepository
  167. * @return mixed
  168. * @author xaboy
  169. * @day 2020/6/22
  170. */
  171. public function bill(UserBillRepository $billRepository)
  172. {
  173. [$page, $limit] = $this->getPage();
  174. return app('json')->success($billRepository->userList([
  175. 'now_money' => $this->request->param('type', 0),
  176. 'status' => 1,
  177. ], $this->request->uid(), $page, $limit));
  178. }
  179. /**
  180. * 佣金明细
  181. * @param UserBillRepository $billRepository
  182. * @return mixed
  183. * @author xaboy
  184. * @day 2020/6/22
  185. */
  186. public function brokerage_list(UserBillRepository $billRepository)
  187. {
  188. [$page, $limit] = $this->getPage();
  189. [$start,$stop]= $this->request->params(['start','stop'],true);
  190. $where['date'] = $start&&$stop ? date('Y/m/d',$start).'-'.date('Y/m/d',$stop) : '';
  191. $where['category'] = 'brokerage';
  192. $where['pm'] = $this->request->param('pm', '');
  193. return app('json')->success($billRepository->userList($where, $this->request->uid(), $page, $limit));
  194. }
  195. /**
  196. * 分红份额明细
  197. * @param UserBillRepository $billRepository
  198. * @return mixed
  199. * @author xaboy
  200. * @day 2020/6/22
  201. */
  202. public function award_range_list(UserBillRepository $billRepository)
  203. {
  204. [$page, $limit] = $this->getPage();
  205. [$start,$stop]= $this->request->params(['start','stop'],true);
  206. $pm = $this->request->param('pm', '');
  207. return app('json')->success($billRepository->userList([
  208. // 'award_range' => $this->request->param('type', 0),
  209. 'date'=> $start&&$stop ? date('Y/m/d',$start).'-'.date('Y/m/d',$stop) : '',
  210. 'status' => 1,
  211. 'category' => 'award_range',
  212. 'pm'=> $pm
  213. ], $this->request->uid(), $page, $limit));
  214. }
  215. /**
  216. * 分红积分明细
  217. * @param UserBillRepository $billRepository
  218. * @return mixed
  219. * @author xaboy
  220. * @day 2020/6/22
  221. */
  222. public function award_integral_list(UserBillRepository $billRepository)
  223. {
  224. [$page, $limit] = $this->getPage();
  225. [$start,$stop]= $this->request->params(['start','stop'],true);
  226. $pm = $this->request->param('pm', '');
  227. return app('json')->success($billRepository->userList([
  228. // 'award_integral' => $this->request->param('type', 0),
  229. 'date'=> $start&&$stop ? date('Y/m/d',$start).'-'.date('Y/m/d',$stop) : '',
  230. 'status' => 1,
  231. 'category' => 'award_integral',
  232. 'pm'=> $pm
  233. ], $this->request->uid(), $page, $limit));
  234. }
  235. /**
  236. * 用户分红积分提现
  237. * @return \think\response\Json
  238. */
  239. public function award_create()
  240. {
  241. $user = $this->request->userInfo();
  242. $where= $this->request->params(['num']);
  243. if ($where['num'] > $user['award_integral']){
  244. throw new \Exception('提现积分不能大于可拥有积分');
  245. }
  246. app()->make(UserRepository::class)->extractIntegral($user['uid'],$where['num']);
  247. return app('json')->success('已提现至佣金');
  248. }
  249. /**
  250. * @return mixed
  251. * @throws DataNotFoundException
  252. * @throws DbException
  253. * @throws ModelNotFoundException
  254. * @author xaboy
  255. * @day 2020/6/22
  256. */
  257. public function spread_order()
  258. {
  259. [$page, $limit] = $this->getPage();
  260. $where= $this->request->params(['keyword']);
  261. [$start,$stop]= $this->request->params(['start','stop'],true);
  262. $where['create_time'] = $start&&$stop ? date('Y/m/d',$start).'-'.date('Y/m/d',$stop) : '';
  263. $data = $this->repository->subOrder($this->request->uid(), $page, $limit,$where);
  264. return app('json')->success($data);
  265. }
  266. /**
  267. * 绑定手机号
  268. * @return mixed
  269. * @author Qinii
  270. * @day 2020-06-18
  271. */
  272. public function binding()
  273. {
  274. $data = $this->request->params(['phone', 'sms_code']);
  275. $sms_code = app()->make(SmsService::class)->checkSmsCode($data['phone'], $data['sms_code'], 'binding');
  276. if (!$data['sms_code'] || !$sms_code)
  277. return app('json')->fail('验证码不正确');
  278. $user = $this->repository->accountByUser($data['phone']);
  279. if ($user) {
  280. // if (systemConfig('is_phone_login') === '1') {
  281. // return app('json')->fail('已开启强制绑定手机号功能');
  282. // }
  283. $data = ['phone' => $data['phone']];
  284. } else {
  285. $data = ['account' => $data['phone'], 'phone' => $data['phone']];
  286. }
  287. $this->repository->update($this->request->uid(), $data);
  288. return app('json')->success('绑定成功');
  289. }
  290. /**
  291. * 小程序获取手机号绑定
  292. * @author Qinii
  293. * @day 10/11/21
  294. */
  295. public function mpPhone()
  296. {
  297. $code = $this->request->param('code');
  298. $iv = $this->request->param('iv');
  299. $encryptedData = $this->request->param('encryptedData');
  300. $miniProgramService = MiniProgramService::create();
  301. $userInfoCong = $miniProgramService->getUserInfo($code);
  302. $session_key = $userInfoCong['session_key'];
  303. $data = $miniProgramService->encryptor($session_key, $iv, $encryptedData);
  304. $user = $this->repository->accountByUser($data['purePhoneNumber']);
  305. if ($user) {
  306. $data = ['phone' => $data['purePhoneNumber']];
  307. } else {
  308. $data = ['account' => $data['purePhoneNumber'], 'phone' => $data['purePhoneNumber']];
  309. }
  310. $this->repository->update($this->request->uid(), $data);
  311. return app('json')->success('绑定成功');
  312. }
  313. /**
  314. * 推广的用户列表
  315. * @return mixed
  316. * @throws DataNotFoundException
  317. * @throws DbException
  318. * @throws ModelNotFoundException
  319. * @author xaboy
  320. * @day 2020/6/22
  321. */
  322. public function spread_list()
  323. {
  324. $where = $this->request->params([ 'sort', 'keyword']);
  325. [$start,$stop]= $this->request->params(['start','stop'],true);
  326. $where['spread_time'] = $start&&$stop ? date('Y/m/d',$start).'-'.date('Y/m/d',$stop) : '';
  327. $level = $this->request->param('level');
  328. [$page, $limit] = $this->getPage();
  329. return app('json')->success($level == 2
  330. ? $this->repository->getTwoLevelList($this->request->uid(),$where, $page, $limit)
  331. : $this->repository->getOneLevelList($this->request->uid(),$where, $page, $limit));
  332. }
  333. /**
  334. * 推广人数排行
  335. * @return mixed
  336. * @author xaboy
  337. * @day 2020/6/22
  338. */
  339. public function spread_top()
  340. {
  341. [$page, $limit] = $this->getPage();
  342. $type = $this->request->param('type', 0);
  343. $func = $type == 1 ? 'spreadMonthTop' : 'spreadWeekTop';
  344. $data = $this->repository->{$func}($page, $limit);
  345. return app('json')->success($data);
  346. }
  347. /**
  348. * 推广佣金排行
  349. * @return mixed
  350. * @author xaboy
  351. * @day 2020/6/22
  352. */
  353. public function brokerage_top()
  354. {
  355. [$page, $limit] = $this->getPage();
  356. $type = $this->request->param('type', 'week');
  357. $uid = $this->request->uid();
  358. $func = $type == 'month' ? 'brokerageMonthTop' : 'brokerageWeekTop';
  359. $data = $this->repository->{$func}($uid, $page, $limit);
  360. return app('json')->success($data);
  361. }
  362. /**
  363. * 访问记录
  364. * @param UserVisitRepository $repository
  365. * @return \think\response\Json
  366. * @author wuhaotian
  367. * @email 442384644@qq.com
  368. * @date 2024/7/10
  369. */
  370. public function history(UserVisitRepository $repository)
  371. {
  372. $uid = $this->request->uid();
  373. [$page, $limit] = $this->getPage();
  374. return app('json')->success($repository->getHistory($uid, $page, $limit));
  375. }
  376. /**
  377. * 删除访问记录
  378. * @param $id
  379. * @param UserVisitRepository $repository
  380. * @return \think\response\Json
  381. * @throws DbException
  382. * @author wuhaotian
  383. * @email 442384644@qq.com
  384. * @date 2024/7/10
  385. */
  386. public function deleteHistory($id, UserVisitRepository $repository)
  387. {
  388. $uid = $this->request->uid();
  389. if (!$repository->getWhereCount(['user_visit_id' => $id, 'uid' => $uid]))
  390. return app('json')->fail('数据不存在');
  391. $repository->delete($id);
  392. return app('json')->success('删除成功');
  393. }
  394. /**
  395. * 批量删除访问记录
  396. * @param UserVisitRepository $repository
  397. * @return \think\response\Json
  398. * @author wuhaotian
  399. * @email 442384644@qq.com
  400. * @date 2024/7/10
  401. */
  402. public function deleteHistoryBatch(UserVisitRepository $repository)
  403. {
  404. $uid = $this->request->uid();
  405. $data = $this->request->param('ids');
  406. if (!empty($data) && is_array($data)) {
  407. foreach ($data as $id) {
  408. if (!$repository->getWhereCount(['user_visit_id' => $id, 'uid' => $uid]))
  409. return app('json')->fail('数据不存在');
  410. }
  411. $repository->batchDelete($data, null);
  412. }
  413. if ($data == 1)
  414. $repository->batchDelete(null, $uid);
  415. return app('json')->success('删除成功');
  416. }
  417. /**
  418. * 获取多账号信息
  419. * @return \think\response\Json
  420. * @author wuhaotian
  421. * @email 442384644@qq.com
  422. * @date 2024/7/10
  423. */
  424. public function account()
  425. {
  426. $user = $this->user;
  427. if (!$user->phone) return app('json')->fail('请绑定手机号');
  428. return app('json')->success($this->repository->selfUserList($user->phone));
  429. }
  430. /**
  431. * 切换账号
  432. * @return \think\response\Json
  433. * @author wuhaotian
  434. * @email 442384644@qq.com
  435. * @date 2024/7/10
  436. */
  437. public function switchUser()
  438. {
  439. $uid = (int)$this->request->param('uid');
  440. if (!$uid) return app('json')->fail('用户不存在');
  441. $userInfo = $this->user;
  442. if (!$userInfo->phone) return app('json')->fail('请绑定手机号');
  443. $user = $this->repository->switchUser($userInfo, $uid);
  444. $tokenInfo = $this->repository->createToken($user);
  445. $this->repository->loginAfter($user);
  446. return app('json')->success($this->repository->returnToken($user, $tokenInfo));
  447. }
  448. /**
  449. * 编辑用户信息
  450. * @return \think\response\Json
  451. * @throws DbException
  452. * @author wuhaotian
  453. * @email 442384644@qq.com
  454. * @date 2024/7/10
  455. */
  456. public function edit()
  457. {
  458. $data = $this->request->params(['avatar', 'nickname']);
  459. $uid = (int)$this->request->param('uid');
  460. if (!$uid) return app('json')->fail('用户不存在');
  461. if (empty($data['avatar'])) unset($data['avatar']);
  462. if (empty($data['nickname'])) unset($data['nickname']);
  463. if (empty($data)) return app('json')->fail('参数丢失');
  464. $this->repository->update($this->request->uid(), $data);
  465. return app('json')->success('修改成功');
  466. }
  467. /**
  468. * 修改密码
  469. * @return \think\response\Json
  470. * @throws DbException
  471. * @author wuhaotian
  472. * @email 442384644@qq.com
  473. * @date 2024/7/10
  474. */
  475. public function changePassword()
  476. {
  477. $data = $this->request->params(['repassword','password', 'sms_code']);
  478. if (!$this->user->phone)
  479. return app('json')->fail('请先绑定手机号');
  480. if (empty($data['repassword']) || empty($data['password']))
  481. return app('json')->fail('请输入密码');
  482. if ($data['repassword'] !== $data['password'])
  483. return app('json')->fail('两次密码不一致');
  484. $sms_code = app()->make(SmsService::class)->checkSmsCode($this->user->phone, $data['sms_code'], 'change_pwd');
  485. if (!$data['sms_code'] || !$sms_code)
  486. return app('json')->fail('验证码不正确');
  487. $password = $this->repository->encodePassword($data['password']);
  488. $this->repository->update($this->request->uid(), ['pwd' => $password]);
  489. return app('json')->success('绑定成功');
  490. }
  491. /**
  492. * 修改手机号
  493. * @return \think\response\Json
  494. * @throws DataNotFoundException
  495. * @throws DbException
  496. * @throws ModelNotFoundException
  497. * @author wuhaotian
  498. * @email 442384644@qq.com
  499. * @date 2024/7/10
  500. */
  501. public function changePhone()
  502. {
  503. $data = $this->request->params(['phone', 'sms_code']);
  504. $sms_code = app()->make(SmsService::class)->checkSmsCode($data['phone'], $data['sms_code'], 'change_phone');
  505. if (!$data['sms_code'] || !$sms_code)
  506. return app('json')->fail('验证码不正确');
  507. $user = $this->repository->accountByUser($data['phone']);
  508. $data['main_uid'] = 0;
  509. if ($user) {
  510. if ($this->request->userInfo()->account !== $data['phone']) {
  511. $data['account'] = $this->request->userInfo()->account.'_'.$this->request->uid();
  512. }
  513. } else {
  514. $data['account'] = $data['phone'];
  515. }
  516. unset($data['sms_code']);
  517. $this->repository->update($this->request->uid(), $data);
  518. return app('json')->success('修改成功');
  519. }
  520. /**
  521. * 获取协议
  522. * @param $key
  523. * @return \think\response\Json
  524. * @author wuhaotian
  525. * @email 442384644@qq.com
  526. * @date 2024/7/10
  527. */
  528. public function getAgree($key)
  529. {
  530. $make = app()->make(CacheRepository::class);
  531. $data = $make->getResult($key);
  532. return app('json')->success($data);
  533. }
  534. /**
  535. * 积分信息
  536. * @param UserBillRepository $make
  537. * @return \think\response\Json
  538. * @author wuhaotian
  539. * @email 442384644@qq.com
  540. * @date 2024/7/10
  541. */
  542. public function integralInfo(UserBillRepository $make)
  543. {
  544. if (!systemConfig('integral_status')) {
  545. return app('json')->fail('积分功能未开启');
  546. }
  547. $integral = $this->user->integral;
  548. $lockIntegral = $make->lockIntegral($this->user->uid);
  549. $deductionIntegral = $make->deductionIntegral($this->user->uid);
  550. $totalGainIntegral = $make->totalGainIntegral($this->user->uid);
  551. $make1 = app()->make(IntegralRepository::class);
  552. $nextClearDay = $make1->getTimeoutDay();
  553. $status = $nextClearDay < strtotime('+20 day');
  554. $invalidDay = $make1->getInvalidDay();
  555. if ($status && $integral > 0 && $invalidDay) {
  556. $validIntegral = $make->validIntegral($this->user->uid, date('Y-m-d H:i:s', $invalidDay), date('Y-m-d H:i:s', $nextClearDay));
  557. if ($integral > $validIntegral) {
  558. $nextClearIntegral = (int)bcsub($integral, $validIntegral, 0);
  559. } else {
  560. $nextClearIntegral = 0;
  561. }
  562. } else {
  563. $nextClearIntegral = 0;
  564. }
  565. $nextClearDay = date('m月d日', $nextClearDay);
  566. $clear = compact('nextClearDay', 'status', 'nextClearIntegral');
  567. return app('json')->success(compact('integral', 'lockIntegral', 'deductionIntegral', 'totalGainIntegral', 'clear'));
  568. }
  569. /**
  570. * 积分列表
  571. * @param UserBillRepository $repository
  572. * @return \think\response\Json
  573. * @author wuhaotian
  574. * @email 442384644@qq.com
  575. * @date 2024/7/10
  576. */
  577. public function integralList(UserBillRepository $repository)
  578. {
  579. if (!systemConfig('integral_status')) {
  580. return app('json')->fail('积分功能未开启');
  581. }
  582. [$page, $limit] = $this->getPage();
  583. $data = $repository->userList(['category' => 'integral'], $this->user->uid, $page, $limit);
  584. return app('json')->success($data);
  585. }
  586. /**
  587. * 客服列表
  588. * @return \think\response\Json
  589. * @author wuhaotian
  590. * @email 442384644@qq.com
  591. * @date 2024/7/10
  592. */
  593. public function services()
  594. {
  595. $uid = $this->user->uid;
  596. $where = $this->request->params(['is_verify', 'customer', 'is_goods', ['is_open',1]]);
  597. $is_sys = $this->request->param('is_sys');
  598. return app('json')->success(app()->make(StoreServiceRepository::class)->getServices($uid, $where,$is_sys));
  599. }
  600. /**
  601. * 会员信息
  602. * @return \think\response\Json
  603. * @author wuhaotian
  604. * @email 442384644@qq.com
  605. * @date 2024/7/10
  606. */
  607. public function memberInfo()
  608. {
  609. if (!systemConfig('member_status')) return app('json')->fail('未开启会员功能');
  610. $make = app()->make(UserBrokerageRepository::class);
  611. $data['uid'] = $this->user->uid;
  612. $data['avatar'] = $this->user->avatar;
  613. $data['nickname'] = $this->user->nickname;
  614. $data['member_value'] = $this->user->member_value;
  615. $data['member'] = $this->user->member;
  616. $next_level = $make->getNextLevel($this->user->member_level, 1);
  617. if (!$next_level && $data['member']) {
  618. $next_level = $this->user->member->toArray();
  619. $next_level['brokerage_rule']['value'] = 0;
  620. }
  621. $data['next_level'] = $next_level;
  622. $makeInteres = app()->make(MemberinterestsRepository::class);
  623. $data['interests'] = systemConfig('member_interests_status') ? $makeInteres->getInterestsByLevel($makeInteres::TYPE_FREE,$this->user->member_level) : [] ;
  624. $data['today'] = app()->make(UserBillRepository::class)->search([
  625. 'category' => 'sys_members',
  626. 'uid' => $this->user->uid,
  627. 'day' => date('Y-m-d', time()),
  628. 'pm' => 1,
  629. ])->sum('number');
  630. $config_key = ['member_pay_num', 'member_sign_num', 'member_reply_num', 'member_share_num'];
  631. if (systemConfig('community_status')) $config_key[] = 'member_community_num';
  632. $config= systemConfig($config_key);
  633. if ($this->user->is_svip > 0) {
  634. foreach ($config as $key => $item) {
  635. $data['config'][$key] = $item .' x' . $makeInteres->getSvipInterestVal($makeInteres::HAS_TYPE_MEMBER).' ';
  636. }
  637. } else {
  638. $data['config'] = $config;
  639. }
  640. return app('json')->success($data);
  641. }
  642. /**
  643. * 推广通知
  644. * @return \think\response\Json
  645. * @throws DataNotFoundException
  646. * @throws DbException
  647. * @throws ModelNotFoundException
  648. * @author wuhaotian
  649. * @email 442384644@qq.com
  650. * @date 2024/7/10
  651. */
  652. public function notice()
  653. {
  654. $type = $this->request->param('type',0);
  655. $arr = [
  656. '0' => 'brokerage_level',
  657. '1' => 'member_level',
  658. ];
  659. $filed = $arr[$type];
  660. if (!$this->user->$filed) {
  661. return app('json')->fail('无需通知');
  662. }
  663. $make = app()->make(CacheRepository::class);
  664. $key = 'notice_' . $filed . '_' . $this->user->uid;
  665. if ($ret = $make->getWhere(['key' => $key])) {
  666. $userBrokerageRepository = app()->make(UserBrokerageRepository::class);
  667. $level = app()->make(UserBrokerageRepository::class)->getWhere(
  668. ['brokerage_level' => $ret->result, 'type' => $type],
  669. 'brokerage_name,brokerage_icon,brokerage_rule'
  670. );
  671. $next_level = $userBrokerageRepository->getNextLevel($this->user->$filed, $type);
  672. $ret->delete();
  673. $type = $next_level ? 'level' : 'top';
  674. return app('json')->success(compact('type', 'level'));
  675. }
  676. return app('json')->fail('已通知');
  677. }
  678. /**
  679. * 修改基本信息
  680. * @param UserBaseInfoValidate $validate
  681. * @return \think\response\Json
  682. * @author wuhaotian
  683. * @email 442384644@qq.com
  684. * @date 2024/7/10
  685. */
  686. public function updateBaseInfo(UserBaseInfoValidate $validate)
  687. {
  688. if (systemConfig('open_update_info') != '1') {
  689. return app('json')->fail('不允许修改基本信息');
  690. }
  691. $nickname = $this->request->param('nickname');
  692. $avatar = $this->request->param('avatar');
  693. if (!$nickname && !$avatar)
  694. return app('json')->fail('未做任何修改');
  695. $user = $this->request->userInfo();
  696. if(!empty($nickname)) {
  697. $validate->check(['nickname' => $nickname]);
  698. $data['nickname'] = $nickname;
  699. MiniProgramService::create()->msgSecCheck($user, $data['nickname'],1,0);
  700. }
  701. if(!empty($avatar)) {
  702. $data['avatar'] = $avatar;
  703. }
  704. $this->repository->updateBaseInfo($data,$user);
  705. return app('json')->success('修改成功');
  706. }
  707. }