54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
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 |