class CreateBindUserService < ApplicationService attr_reader :user, :params def initialize(user, params) @user = user @params = params end def call raise Error, '系统错误' if open_user.blank? raise Error, '系统错误' unless can_bind_user? if params[:not_bind].to_s == 'true' clear_can_bind_user_flag return user end bind_user = User.try_to_login(params[:username], params[:password]) raise Error, '用户名或者密码错误' if bind_user.blank? raise Error, '用户名或者密码错误' unless bind_user.check_password?(params[:password].to_s) raise Error, '该账号已被绑定,请更换其他账号进行绑定' if bind_user.bind_open_user?(params[:type].to_s) ActiveRecord::Base.transaction do open_user.user_id = bind_user.id open_user.save! user.user_extension.delete user.delete end clear_can_bind_user_flag bind_user end private def open_user @_open_user ||= begin case params[:type].to_s when 'wechat' then user.wechat_open_user when 'qq' then user.qq_open_user end end end def can_bind_user? Rails.cache.read(open_user.can_bind_cache_key).present? end def clear_can_bind_user_flag Rails.cache.delete(open_user.can_bind_cache_key) end end