From 4d29fc5258ff9dd45af6d74bea7c7d6c227699ba Mon Sep 17 00:00:00 2001 From: 1748153932 <1748153932@qq.com> Date: Tue, 12 Dec 2023 16:55:05 +0800 Subject: [PATCH] 11 --- app/controller/api/brand/BrandInt.php | 532 ++++++++++++++++++++++++++ 1 file changed, 532 insertions(+) create mode 100644 app/controller/api/brand/BrandInt.php diff --git a/app/controller/api/brand/BrandInt.php b/app/controller/api/brand/BrandInt.php new file mode 100644 index 0000000..14684ca --- /dev/null +++ b/app/controller/api/brand/BrandInt.php @@ -0,0 +1,532 @@ + +// +---------------------------------------------------------------------- + + +namespace app\controller\api\brand; + + +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 BrandInt 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 add() + { + echo 4444;die; + $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',1]]); + $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('修改成功'); + } + +}