$userInfo['user_id']]) ->field('id,sn,sex,account,nickname,real_name,avatar,mobile,create_time,is_new_user,user_money,user_type') ->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['coupon_count'] = UserCoupon::where(['user_id' => $userInfo['user_id'] , 'voucher_status'=>0])->where('expire_time','>',time())->where('voucher_count','>',0)->count(); $user['equity_count'] = UserEquity::where(['user_id' => $userInfo['user_id']])->where('number','>',0)->where('end_time','>=',time())->count(); $user['effective_count'] = OrderEffectiveLog::where(['user_id' => $userInfo['user_id']])->where('end_effective_time','>',time())->where('effective_num','>',0)->count(); $user['return_work_count'] = ReturnWork::where(['user_id' => $userInfo['user_id']])->where('return_work_status','<>',2)->count(); 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,user_type') ->findOrEmpty(); if(!$user->isEmpty() && $user->user_type === YesNoEnum::YES){ $user->firmRegister = FirmRegister::where(['user_id'=>$userId,'status'=>YesNoEnum::YES])->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; } } public static function saveFirmUserInfo(array $params,int $userId) { Db::startTrans(); try { $user = User::findOrEmpty($userId); if ($user->isEmpty()) { throw new \Exception('用户不存在'); } if (!empty($params['password'])) { // 密码盐 $passwordSalt = Config::get('project.unique_identification'); if (empty($params['old_password'])) { throw new \Exception('请填写旧密码'); } $oldPassword = create_password($params['old_password'], $passwordSalt); if ($oldPassword != $user['password']) { throw new \Exception('原密码不正确'); } if($params['password'] !== $params['password_confirm']){ throw new \Exception('输入的确认密码不一致'); } // 保存密码 $password = create_password($params['password'], $passwordSalt); $user->password = $password; } $user->avatar = $params['avatar']; $user->real_name = $params['real_name']; $user->nickname = $params['nickname']; $user->sex = $params['sex']; $user->save(); if(!empty($params['firmRegister'])){ $firmRegisterModer = FirmRegister::where(['user_id'=>$userId,'status'=>YesNoEnum::YES])->findOrEmpty(); if($firmRegisterModer->isEmpty()){ throw new \Exception('公司信息不存在'); } $firmRegisterModer->firm_name = $params['firmRegister']['firm_name']; $firmRegisterModer->user_name = $params['firmRegister']['user_name']; $firmRegisterModer->mobile = $params['firmRegister']['mobile']; $firmRegisterModer->address = $params['firmRegister']['address']; $firmRegisterModer->cooperate_description = $params['firmRegister']['cooperate_description']; } Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } }