123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531 |
- <?php
- // +----------------------------------------------------------------------
- // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
- // +----------------------------------------------------------------------
- // | Author: CRMEB Team <admin@crmeb.com>
- // +----------------------------------------------------------------------
- namespace app\controller\api\user;
- use app\common\repositories\store\IntegralRepository;
- use app\common\repositories\store\service\StoreServiceRepository;
- use app\common\repositories\system\CacheRepository;
- use app\common\repositories\user\MemberinterestsRepository;
- use app\common\repositories\user\UserBillRepository;
- use app\common\repositories\user\UserBrokerageRepository;
- use app\common\repositories\user\UserRepository;
- use app\common\repositories\user\UserVisitRepository;
- use app\validate\api\UserBaseInfoValidate;
- use crmeb\basic\BaseController;
- use crmeb\services\MiniProgramService;
- use crmeb\services\SmsService;
- use think\App;
- use think\db\exception\DataNotFoundException;
- use think\db\exception\DbException;
- use think\db\exception\ModelNotFoundException;
- class User extends BaseController
- {
- protected $repository;
- protected $user;
- public function __construct(App $app, UserRepository $repository)
- {
- parent::__construct($app);
- $this->repository = $repository;
- $this->user = $this->request->userInfo();
- }
- /**
- * @return mixed
- * @author xaboy
- * @day 2020/6/22
- */
- public function spread_image()
- {
- $type = $this->request->param('type');
- $res = $type == 'routine'
- ? $this->repository->routineSpreadImage($this->user)
- : $this->repository->wxSpreadImage($this->user);
- return app('json')->success($res);
- }
- public function spread_image_v2()
- {
- $type = $this->request->param('type');
- $user = $this->user;
- $siteName = systemConfig('site_name');
- $qrcode = $type == 'routine'
- ? $this->repository->mpQrcode($user)
- : $this->repository->wxQrcode($user);
- $poster = systemGroupData('spread_banner');
- $nickname = $user['nickname'];
- $mark = '邀请您加入' . $siteName;
- return app('json')->success(compact('qrcode', 'poster', 'nickname', 'mark'));
- }
- public function spread_info()
- {
- $user = $this->user;
- $make = app()->make(UserBrokerageRepository::class);
- $user->append(['one_level_count', 'lock_brokerage', 'two_level_count', 'spread_total', 'yesterday_brokerage', 'total_extract', 'total_brokerage', 'total_brokerage_price']);
- $show_brokerage = (bool)$make->search(['type' => 0])->count();
- $data = [
- 'total_brokerage_price' => $user->total_brokerage_price,
- 'lock_brokerage' => $user->lock_brokerage,
- 'one_level_count' => $user->one_level_count,
- 'two_level_count' => $user->two_level_count,
- 'spread_total' => $user->spread_total,
- 'yesterday_brokerage' => $user->yesterday_brokerage,
- 'total_extract' => $user->total_extract,
- 'total_brokerage' => $user->total_brokerage,
- 'brokerage_price' => $user->brokerage_price,
- 'show_brokerage' => $show_brokerage,
- 'brokerage' => $show_brokerage ? ($user->brokerage ?: ['brokerage_level' => 0, 'brokerage_name' => '普通分销员']) : null,
- 'now_money' => $user->now_money,
- 'broken_day' => (int)systemConfig('lock_brokerage_timer'),
- 'user_extract_min' => (int)systemConfig('user_extract_min'),
- ];
- return app('json')->success($data);
- }
- public function brokerage_all()
- {
- return app('json')->success(app()->make(UserBrokerageRepository::class)->all(0));
- }
- public function brokerage_info()
- {
- $make = app()->make(UserBrokerageRepository::class);
- $user = $this->user;
- $brokerage = $user->brokerage;
- $next_brokerage = $make->getNextLevel($user->brokerage_level) ?: $brokerage;
- $brokerage_rate = null;
- if ($next_brokerage || $brokerage) {
- $brokerage_rate = $make->getLevelRate($user, $next_brokerage);
- }
- $down_brokerage = null;
- if ($next_brokerage) {
- $down_brokerage = $make->getNextLevel($next_brokerage->brokerage_level);
- }
- $brokerage = $brokerage ?: ['brokerage_level' => 0, 'brokerage_name' => '普通分销员'];
- return app('json')->success(compact('brokerage', 'next_brokerage', 'brokerage_rate', 'down_brokerage'));
- }
- public function brokerage_notice()
- {
- $user = $this->user;
- if (!$user->brokerage_level) {
- return app('json')->fail('无需通知');
- }
- $make = app()->make(CacheRepository::class);
- $key = 'notice_' . $user->uid . '_' . $user->brokerage_level;
- if ($make->getResult($key)) {
- return app('json')->fail('已通知');
- }
- $make->create(['key' => $key, 'result' => 1, 'expire_time' => 0]);
- $userBrokerageRepository = app()->make(UserBrokerageRepository::class);
- return app('json')->success(['type' => $userBrokerageRepository->getNextLevel($user->brokerage_level) ? 'level' : 'top']);
- }
- /**
- * @param UserBillRepository $billRepository
- * @return mixed
- * @author xaboy
- * @day 2020/6/22
- */
- public function bill(UserBillRepository $billRepository)
- {
- [$page, $limit] = $this->getPage();
- return app('json')->success($billRepository->userList([
- 'now_money' => $this->request->param('type', 0),
- 'status' => 1,
- ], $this->request->uid(), $page, $limit));
- }
- /**
- * @param UserBillRepository $billRepository
- * @return mixed
- * @author xaboy
- * @day 2020/6/22
- */
- public function brokerage_list(UserBillRepository $billRepository)
- {
- [$page, $limit] = $this->getPage();
- return app('json')->success($billRepository->userList([
- 'category' => 'brokerage',
- ], $this->request->uid(), $page, $limit));
- }
- /**
- * @return mixed
- * @throws DataNotFoundException
- * @throws DbException
- * @throws ModelNotFoundException
- * @author xaboy
- * @day 2020/6/22
- */
- public function spread_order()
- {
- [$page, $limit] = $this->getPage();
- return app('json')->success($this->repository->subOrder($this->request->uid(), $page, $limit));
- }
- /**
- * TODO
- * @return mixed
- * @author Qinii
- * @day 2020-06-18
- */
- public function binding()
- {
- $data = $this->request->params(['phone', 'sms_code']);
- $sms_code = app()->make(SmsService::class)->checkSmsCode($data['phone'], $data['sms_code'], 'binding');
- if (!$data['sms_code'] || !$sms_code)
- return app('json')->fail('验证码不正确');
- $user = $this->repository->accountByUser($data['phone']);
- if ($user) {
- if (systemConfig('is_phone_login') === '1') {
- return app('json')->fail('手机号已被绑定');
- }
- $data = ['phone' => $data['phone']];
- } else {
- $data = ['account' => $data['phone'], 'phone' => $data['phone']];
- }
- $this->repository->update($this->request->uid(), $data);
- return app('json')->success('绑定成功');
- }
- /**
- * TODO 小程序获取手机号绑定
- * @author Qinii
- * @day 10/11/21
- */
- public function mpPhone()
- {
- $code = $this->request->param('code');
- $iv = $this->request->param('iv');
- $encryptedData = $this->request->param('encryptedData');
- $miniProgramService = MiniProgramService::create();
- $userInfoCong = $miniProgramService->getUserInfo($code);
- $session_key = $userInfoCong['session_key'];
- $data = $miniProgramService->encryptor($session_key, $iv, $encryptedData);
- $user = $this->repository->accountByUser($data['purePhoneNumber']);
- if ($user) {
- $data = ['phone' => $data['purePhoneNumber']];
- } else {
- $data = ['account' => $data['purePhoneNumber'], 'phone' => $data['purePhoneNumber']];
- }
- $this->repository->update($this->request->uid(), $data);
- return app('json')->success('绑定成功');
- }
- /**
- * @return mixed
- * @throws DataNotFoundException
- * @throws DbException
- * @throws ModelNotFoundException
- * @author xaboy
- * @day 2020/6/22
- */
- public function spread_list()
- {
- [$level, $sort, $nickname] = $this->request->params(['level', 'sort', 'keyword'], true);
- $uid = $this->request->uid();
- [$page, $limit] = $this->getPage();
- return app('json')->success($level == 2
- ? $this->repository->getTwoLevelList($uid, $nickname, $sort, $page, $limit)
- : $this->repository->getOneLevelList($uid, $nickname, $sort, $page, $limit));
- }
- /**
- * @return mixed
- * @author xaboy
- * @day 2020/6/22
- */
- public function spread_top()
- {
- [$page, $limit] = $this->getPage();
- $type = $this->request->param('type', 0);
- $func = $type == 1 ? 'spreadMonthTop' : 'spreadWeekTop';
- $data = $this->repository->{$func}($page, $limit);
- return app('json')->success($data);
- }
- /**
- * @return mixed
- * @author xaboy
- * @day 2020/6/22
- */
- public function brokerage_top()
- {
- [$page, $limit] = $this->getPage();
- $type = $this->request->param('type', 'week');
- $uid = $this->request->uid();
- $func = $type == 'month' ? 'brokerageMonthTop' : 'brokerageWeekTop';
- $data = $this->repository->{$func}($uid, $page, $limit);
- return app('json')->success($data);
- }
- public function history(UserVisitRepository $repository)
- {
- $uid = $this->request->uid();
- [$page, $limit] = $this->getPage();
- return app('json')->success($repository->getHistory($uid, $page, $limit));
- }
- public function deleteHistory($id, UserVisitRepository $repository)
- {
- $uid = $this->request->uid();
- if (!$repository->getWhereCount(['user_visit_id' => $id, 'uid' => $uid]))
- return app('json')->fail('数据不存在');
- $repository->delete($id);
- return app('json')->success('删除成功');
- }
- public function deleteHistoryBatch(UserVisitRepository $repository)
- {
- $uid = $this->request->uid();
- $data = $this->request->param('ids');
- if (!empty($data) && is_array($data)) {
- foreach ($data as $id) {
- if (!$repository->getWhereCount(['user_visit_id' => $id, 'uid' => $uid]))
- return app('json')->fail('数据不存在');
- }
- $repository->batchDelete($data, null);
- }
- if ($data == 1)
- $repository->batchDelete(null, $uid);
- return app('json')->success('删除成功');
- }
- public function account()
- {
- $user = $this->user;
- if (!$user->phone) return app('json')->fail('请绑定手机号');
- return app('json')->success($this->repository->selfUserList($user->phone));
- }
- public function switchUser()
- {
- $uid = (int)$this->request->param('uid');
- if (!$uid) return app('json')->fail('用户不存在');
- $userInfo = $this->user;
- if (!$userInfo->phone) return app('json')->fail('请绑定手机号');
- $user = $this->repository->switchUser($userInfo, $uid);
- $tokenInfo = $this->repository->createToken($user);
- $this->repository->loginAfter($user);
- return app('json')->success($this->repository->returnToken($user, $tokenInfo));
- }
- public function edit()
- {
- $data = $this->request->params(['avatar', 'nickname']);
- $uid = (int)$this->request->param('uid');
- if (!$uid) return app('json')->fail('用户不存在');
- if (empty($data['avatar'])) unset($data['avatar']);
- if (empty($data['nickname'])) unset($data['nickname']);
- if (empty($data)) return app('json')->fail('参数丢失');
- $this->repository->update($this->request->uid(), $data);
- return app('json')->success('修改成功');
- }
- public function changePassword()
- {
- $data = $this->request->params(['repassword','password', 'sms_code']);
- if (!$this->user->phone)
- return app('json')->fail('请先绑定手机号');
- if (empty($data['repassword']) || empty($data['password']))
- return app('json')->fail('请输入密码');
- if ($data['repassword'] !== $data['password'])
- return app('json')->fail('两次密码不一致');
- $sms_code = app()->make(SmsService::class)->checkSmsCode($this->user->phone, $data['sms_code'], 'change_pwd');
- if (!$data['sms_code'] || !$sms_code)
- return app('json')->fail('验证码不正确');
- $password = $this->repository->encodePassword($data['password']);
- $this->repository->update($this->request->uid(), ['pwd' => $password]);
- return app('json')->success('绑定成功');
- }
- public function changePhone()
- {
- $data = $this->request->params(['phone', 'sms_code']);
- $sms_code = app()->make(SmsService::class)->checkSmsCode($data['phone'], $data['sms_code'], 'change_phone');
- if (!$data['sms_code'] || !$sms_code)
- return app('json')->fail('验证码不正确');
- $user = $this->repository->accountByUser($data['phone']);
- $data['main_uid'] = 0;
- if ($user) {
- if ($this->request->userInfo()->account !== $data['phone']) {
- $data['account'] = $this->request->userInfo()->account.'_'.$this->request->uid();
- }
- } else {
- $data['account'] = $data['phone'];
- }
- unset($data['sms_code']);
- $this->repository->update($this->request->uid(), $data);
- return app('json')->success('修改成功');
- }
- public function getAgree($key)
- {
- $make = app()->make(CacheRepository::class);
- $data = $make->getResult($key);
- return app('json')->success($data);
- }
- public function integralInfo(UserBillRepository $make)
- {
- if (!systemConfig('integral_status')) {
- return app('json')->fail('红包米功能未开启');
- }
- $integral = $this->user->integral;
- $lockIntegral = $make->lockIntegral($this->user->uid);
- $deductionIntegral = $make->deductionIntegral($this->user->uid);
- $totalGainIntegral = $make->totalGainIntegral($this->user->uid);
- $make1 = app()->make(IntegralRepository::class);
- $nextClearDay = $make1->getTimeoutDay();
- $status = $nextClearDay < strtotime('+20 day');
- $invalidDay = $make1->getInvalidDay();
- if ($status && $integral > 0 && $invalidDay) {
- $validIntegral = $make->validIntegral($this->user->uid, date('Y-m-d H:i:s', $invalidDay), date('Y-m-d H:i:s', $nextClearDay));
- if ($integral > $validIntegral) {
- $nextClearIntegral = (int)bcsub($integral, $validIntegral, 0);
- } else {
- $nextClearIntegral = 0;
- }
- } else {
- $nextClearIntegral = 0;
- }
- $nextClearDay = date('m月d日', $nextClearDay);
- $clear = compact('nextClearDay', 'status', 'nextClearIntegral');
- return app('json')->success(compact('integral', 'lockIntegral', 'deductionIntegral', 'totalGainIntegral', 'clear'));
- }
- public function integralList(UserBillRepository $repository)
- {
- if (!systemConfig('integral_status')) {
- return app('json')->fail('红包米功能未开启');
- }
- [$page, $limit] = $this->getPage();
- $data = $repository->userList(['category' => 'integral'], $this->user->uid, $page, $limit);
- return app('json')->success($data);
- }
- public function services()
- {
- $uid = $this->user->uid;
- $where = $this->request->params(['is_verify', 'customer', 'is_goods', 'is_open']);
- $is_sys = $this->request->param('is_sys');
- return app('json')->success(app()->make(StoreServiceRepository::class)->getServices($uid, $where,$is_sys));
- }
- public function memberInfo()
- {
- if (!systemConfig('member_status')) return app('json')->fail('未开启会员功能');
- $make = app()->make(UserBrokerageRepository::class);
- $data['uid'] = $this->user->uid;
- $data['avatar'] = $this->user->avatar;
- $data['nickname'] = $this->user->nickname;
- $data['member_value'] = $this->user->member_value;
- $data['member'] = $this->user->member;
- $next_level = $make->getNextLevel($this->user->member_level, 1);
- if (!$next_level && $data['member']) {
- $next_level = $this->user->member->toArray();
- $next_level['brokerage_rule']['value'] = 0;
- }
- $data['next_level'] = $next_level;
- $makeInteres = app()->make(MemberinterestsRepository::class);
- $data['interests'] = systemConfig('member_interests_status') ? $makeInteres->getInterestsByLevel($makeInteres::TYPE_FREE,$this->user->member_level) : [] ;
- $data['today'] = app()->make(UserBillRepository::class)->search([
- 'category' => 'sys_members',
- 'uid' => $this->user->uid,
- 'day' => date('Y-m-d', time())
- ])->sum('number');
- $config_key = ['member_pay_num', 'member_sign_num', 'member_reply_num', 'member_share_num'];
- if (systemConfig('community_status')) $config_key[] = 'member_community_num';
- $config= systemConfig($config_key);
- if ($this->user->is_svip > 0) {
- foreach ($config as $key => $item) {
- $data['config'][$key] = $item .' x' . $makeInteres->getSvipInterestVal($makeInteres::HAS_TYPE_MEMBER).' ';
- }
- } else {
- $data['config'] = $config;
- }
- return app('json')->success($data);
- }
- public function notice()
- {
- $type = $this->request->param('type',0);
- $arr = [
- '0' => 'brokerage_level',
- '1' => 'member_level',
- ];
- $filed = $arr[$type];
- if (!$this->user->$filed) {
- return app('json')->fail('无需通知');
- }
- $make = app()->make(CacheRepository::class);
- $key = 'notice_' . $filed . '_' . $this->user->uid;
- if ($ret = $make->getWhere(['key' => $key])) {
- $userBrokerageRepository = app()->make(UserBrokerageRepository::class);
- $level = app()->make(UserBrokerageRepository::class)->getWhere(
- ['brokerage_level' => $ret->result, 'type' => $type],
- 'brokerage_name,brokerage_icon,brokerage_rule'
- );
- $next_level = $userBrokerageRepository->getNextLevel($this->user->$filed, $type);
- $ret->delete();
- $type = $next_level ? 'level' : 'top';
- return app('json')->success(compact('type', 'level'));
- }
- return app('json')->fail('已通知');
- }
- public function updateBaseInfo(UserBaseInfoValidate $validate)
- {
- if (systemConfig('open_update_info') != '1') {
- return app('json')->fail('不允许修改基本信息');
- }
- $nickname = $this->request->param('nickname');
- $avatar = $this->request->param('avatar');
- if (!$nickname && !$avatar)
- return app('json')->fail('未做任何修改');
- $user = $this->request->userInfo();
- if(!empty($nickname)) {
- $validate->check(['nickname' => $nickname]);
- $data['nickname'] = $nickname;
- }
- if(!empty($avatar)) {
- $data['avatar'] = $avatar;
- }
- $this->repository->updateBaseInfo($data,$user);
- return app('json')->success('修改成功');
- }
- }
|