| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- <?php
- // +----------------------------------------------------------------------
- // | likeadmin快速开发前后端分离管理后台(PHP版)
- // +----------------------------------------------------------------------
- // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
- // | 开源版本可自由商用,可去除界面版权logo
- // | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
- // | github下载:https://github.com/likeshop-github/likeadmin
- // | 访问官网:https://www.likeadmin.cn
- // | likeadmin团队 版权所有 拥有最终解释权
- // +----------------------------------------------------------------------
- // | author: likeadminTeam
- // +----------------------------------------------------------------------
- namespace app\api\logic;
- use app\common\{enum\notice\NoticeEnum,
- enum\user\UserTerminalEnum,
- enum\YesNoEnum,
- logic\BaseLogic,
- model\user\User,
- model\user\UserAuth,
- service\FileService,
- service\sms\SmsDriver,
- service\wechat\WeChatMnpService};
- use think\facade\Config;
- /**
- * 会员逻辑层
- * Class UserLogic
- * @package app\shopapi\logic
- */
- class UserLogic extends BaseLogic
- {
- /**
- * @notes 个人中心
- * @param array $userInfo
- * @return array
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- * @author 段誉
- * @date 2022/9/16 18:04
- */
- public static function center(array $userInfo): array
- {
- $user = User::where(['id' => $userInfo['user_id']])
- ->field('id,sn,sex,account,nickname,real_name,avatar,mobile,create_time,is_new_user,user_money,password')
- ->findOrEmpty();
- if (in_array($userInfo['terminal'], [UserTerminalEnum::WECHAT_MMP, UserTerminalEnum::WECHAT_OA])) {
- $auth = UserAuth::where(['user_id' => $userInfo['user_id'], 'terminal' => $userInfo['terminal']])->find();
- $user['is_auth'] = $auth ? YesNoEnum::YES : YesNoEnum::NO;
- }
- $user['has_password'] = !empty($user['password']);
- $user->hidden(['password']);
- return $user->toArray();
- }
- /**
- * @notes 个人信息
- * @param $userId
- * @return array
- * @author 段誉
- * @date 2022/9/20 19:45
- */
- public static function info(int $userId)
- {
- $user = User::where(['id' => $userId])
- ->field('id,sn,sex,account,password,nickname,real_name,avatar,mobile,create_time,user_money')
- ->findOrEmpty();
- $user['has_password'] = !empty($user['password']);
- $user['has_auth'] = self::hasWechatAuth($userId);
- $user['version'] = config('project.version');
- $user->hidden(['password']);
- return $user->toArray();
- }
- /**
- * @notes 设置用户信息
- * @param int $userId
- * @param array $params
- * @return User|false
- * @author 段誉
- * @date 2022/9/21 16:53
- */
- public static function setInfo(int $userId, array $params)
- {
- try {
- if ($params['field'] == "avatar") {
- $params['value'] = FileService::setFileUrl($params['value']);
- }
- return User::update([
- 'id' => $userId,
- $params['field'] => $params['value']]
- );
- } catch (\Exception $e) {
- self::$error = $e->getMessage();
- return false;
- }
- }
- /**
- * @notes 是否有微信授权信息
- * @param $userId
- * @return bool
- * @author 段誉
- * @date 2022/9/20 19:36
- */
- public static function hasWechatAuth(int $userId)
- {
- //是否有微信授权登录
- $terminal = [UserTerminalEnum::WECHAT_MMP, UserTerminalEnum::WECHAT_OA,UserTerminalEnum::PC];
- $auth = UserAuth::where(['user_id' => $userId])
- ->whereIn('terminal', $terminal)
- ->findOrEmpty();
- return !$auth->isEmpty();
- }
- /**
- * @notes 重置登录密码
- * @param $params
- * @return bool
- * @author 段誉
- * @date 2022/9/16 18:06
- */
- public static function resetPassword(array $params)
- {
- try {
- // 校验验证码
- $smsDriver = new SmsDriver();
- if (!$smsDriver->verify($params['mobile'], $params['code'], NoticeEnum::FIND_LOGIN_PASSWORD_CAPTCHA)) {
- throw new \Exception('验证码错误');
- }
- // 重置密码
- $passwordSalt = Config::get('project.unique_identification');
- $password = create_password($params['password'], $passwordSalt);
- // 更新
- User::where('mobile', $params['mobile'])->update([
- 'password' => $password
- ]);
- return true;
- } catch (\Exception $e) {
- self::setError($e->getMessage());
- return false;
- }
- }
- /**
- * @notes 修稿密码
- * @param $params
- * @param $userId
- * @return bool
- * @author 段誉
- * @date 2022/9/20 19:13
- */
- public static function changePassword(array $params, int $userId)
- {
- try {
- $user = User::findOrEmpty($userId);
- if ($user->isEmpty()) {
- throw new \Exception('用户不存在');
- }
- // 密码盐
- $passwordSalt = Config::get('project.unique_identification');
- if (!empty($user['password'])) {
- if (empty($params['old_password'])) {
- throw new \Exception('请填写旧密码');
- }
- $oldPassword = create_password($params['old_password'], $passwordSalt);
- if ($oldPassword != $user['password']) {
- throw new \Exception('原密码不正确');
- }
- }
- // 保存密码
- $password = create_password($params['password'], $passwordSalt);
- $user->password = $password;
- $user->save();
- return true;
- } catch (\Exception $e) {
- self::setError($e->getMessage());
- return false;
- }
- }
- /**
- * @notes 获取小程序手机号
- * @param array $params
- * @return bool
- * @throws \Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface
- * @author 段誉
- * @date 2023/2/27 11:49
- */
- public static function getMobileByMnp(array $params)
- {
- try {
- $response = (new WeChatMnpService())->getUserPhoneNumber($params['code']);
- $phoneNumber = $response['phone_info']['purePhoneNumber'] ?? '';
- if (empty($phoneNumber)) {
- throw new \Exception('获取手机号码失败');
- }
- $user = User::where([
- ['mobile', '=', $phoneNumber],
- ['id', '<>', $params['user_id']]
- ])->findOrEmpty();
- if (!$user->isEmpty()) {
- throw new \Exception('手机号已被其他账号绑定');
- }
- // 绑定手机号
- User::update([
- 'id' => $params['user_id'],
- 'mobile' => $phoneNumber
- ]);
- return true;
- } catch (\Exception $e) {
- self::setError($e->getMessage());
- return false;
- }
- }
- /**
- * @notes 绑定手机号
- * @param $params
- * @return bool
- * @author 段誉
- * @date 2022/9/21 17:28
- */
- public static function bindMobile(array $params)
- {
- try {
- // 变更手机号场景
- $sceneId = NoticeEnum::CHANGE_MOBILE_CAPTCHA;
- $where = [
- ['id', '=', $params['user_id']],
- ['mobile', '=', $params['mobile']]
- ];
- // 绑定手机号场景
- if ($params['type'] == 'bind') {
- $sceneId = NoticeEnum::BIND_MOBILE_CAPTCHA;
- $where = [
- ['mobile', '=', $params['mobile']]
- ];
- }
- // 校验短信
- $checkSmsCode = (new SmsDriver())->verify($params['mobile'], $params['code'], $sceneId);
- if (!$checkSmsCode) {
- throw new \Exception('验证码错误');
- }
- $user = User::where($where)->findOrEmpty();
- if (!$user->isEmpty()) {
- throw new \Exception('该手机号已被使用');
- }
- User::update([
- 'id' => $params['user_id'],
- 'mobile' => $params['mobile'],
- ]);
- return true;
- } catch (\Exception $e) {
- self::setError($e->getMessage());
- return false;
- }
- }
- }
|