Merge branch 'dev_aliyun' of https://bdgit.educoder.net/Hjqreturn/educoder into dev_aliyun
commit
6424235cd9
@ -0,0 +1,39 @@
|
|||||||
|
class Users::AuthAttachmentsController < Users::BaseAccountController
|
||||||
|
before_action :private_user_resources!
|
||||||
|
before_action :convert_image!, only: [:update]
|
||||||
|
|
||||||
|
def update
|
||||||
|
image_temp_path = auth_image_path + 'temp' # 上传文件保存至临时文件,提交申请时再移到正常目录
|
||||||
|
|
||||||
|
File.delete(image_temp_path) if File.exist?(image_temp_path) # 删除之前的临时文件
|
||||||
|
|
||||||
|
Util.write_file(@image, image_temp_path)
|
||||||
|
|
||||||
|
render_ok
|
||||||
|
rescue StandardError => ex
|
||||||
|
logger_error(ex)
|
||||||
|
render_error('上传失败')
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def convert_image!
|
||||||
|
max_size = EduSetting.get('upload_avatar_max_size') || 10 * 1024 * 1024 # 10M
|
||||||
|
if params[:image].class == ActionDispatch::Http::UploadedFile
|
||||||
|
@image = params[:image]
|
||||||
|
render_error('请上传文件') if @image.size.zero?
|
||||||
|
render_error('文件大小超过限制') if @image.size > max_size
|
||||||
|
else
|
||||||
|
image = params[:image].to_s.strip
|
||||||
|
return render_error('请上传正确的图片') if image.blank?
|
||||||
|
@image = Util.convert_base64_image(image, max_size: max_size)
|
||||||
|
end
|
||||||
|
rescue Base64ImageConverter::Error => ex
|
||||||
|
render_error(ex.message)
|
||||||
|
end
|
||||||
|
|
||||||
|
def auth_image_path
|
||||||
|
url_method = params[:type] == 'professional' ? :disk_professional_auth_filename : :disk_real_name_auth_filename
|
||||||
|
ApplicationController.helpers.send(url_method, observed_user.id)
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,16 @@
|
|||||||
|
class Users::AuthenticationAppliesController < Users::BaseAccountController
|
||||||
|
before_action :private_user_resources!
|
||||||
|
|
||||||
|
def create
|
||||||
|
Users::ApplyAuthenticationService.call(observed_user, create_params)
|
||||||
|
render_ok
|
||||||
|
rescue Users::ApplyAuthenticationService::Error => ex
|
||||||
|
render_error(ex.message)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def create_params
|
||||||
|
params.permit(:name, :id_number, :upload_image)
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,16 @@
|
|||||||
|
class Users::ProfessionalAuthAppliesController < Users::BaseAccountController
|
||||||
|
before_action :private_user_resources!
|
||||||
|
|
||||||
|
def create
|
||||||
|
Users::ApplyProfessionalAuthService.call(observed_user, create_params)
|
||||||
|
render_ok
|
||||||
|
rescue Users::ApplyProfessionalAuthService::Error => ex
|
||||||
|
render_error(ex.message)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def create_params
|
||||||
|
params.permit(:school_id, :department_id, :identity, :extra, :upload_image)
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,8 @@
|
|||||||
|
class Users::ApplyAuthenticationForm
|
||||||
|
include ActiveModel::Model
|
||||||
|
|
||||||
|
attr_accessor :name, :id_number, :upload_image
|
||||||
|
|
||||||
|
validates :name, presence: true
|
||||||
|
validates :id_number, presence: true
|
||||||
|
end
|
@ -0,0 +1,10 @@
|
|||||||
|
class Users::ApplyProfessionalAuthForm
|
||||||
|
include ActiveModel::Model
|
||||||
|
|
||||||
|
attr_accessor :school_id, :department_id, :identity, :extra, :upload_image
|
||||||
|
|
||||||
|
validates :school_id, presence: true, numericality: { only_integer: true, greater_than: 0 }
|
||||||
|
validates :department_id, numericality: { only_integer: true, greater_than: 0 }, allow_blank: true
|
||||||
|
validates :identity, presence: true, inclusion: { in: %w(student teacher professional) }
|
||||||
|
validates :extra, presence: true
|
||||||
|
end
|
@ -0,0 +1,52 @@
|
|||||||
|
class Users::ApplyAuthenticationService < ApplicationService
|
||||||
|
Error = Class.new(StandardError)
|
||||||
|
|
||||||
|
attr_reader :user, :params
|
||||||
|
|
||||||
|
def initialize(user, params)
|
||||||
|
@user = user
|
||||||
|
@params = params
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
Users::ApplyAuthenticationForm.new(params).validate!
|
||||||
|
raise Error, '您已经申请过实名认证了' if ApplyUserAuthentication.real_name_auth.processing.exists?(user_id: user.id)
|
||||||
|
|
||||||
|
user.lastname = params[:name].to_s.strip
|
||||||
|
user.firstname = ''
|
||||||
|
user.ID_number = params[:id_number].to_s.strip.presence
|
||||||
|
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
user.authentication = false
|
||||||
|
user.save!
|
||||||
|
|
||||||
|
user.apply_user_authentication.create!(auth_type: 1, status: 0)
|
||||||
|
|
||||||
|
move_image_file! unless params[:upload_image].to_s == 'false'
|
||||||
|
|
||||||
|
sms_notify_admin
|
||||||
|
end
|
||||||
|
|
||||||
|
user
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def move_image_file!
|
||||||
|
image_url = ApplicationController.helpers.disk_real_name_auth_filename(user.id)
|
||||||
|
temp_image_url = image_url + 'temp'
|
||||||
|
|
||||||
|
FileUtils.mv(temp_image_url, image_url, force: true) if File.exist?(temp_image_url)
|
||||||
|
rescue RuntimeError => ex
|
||||||
|
Util.logger_error(ex)
|
||||||
|
raise Error, '申请失败'
|
||||||
|
ensure
|
||||||
|
File.delete(temp_image_url) if File.exist?(temp_image_url)
|
||||||
|
end
|
||||||
|
|
||||||
|
def sms_notify_admin
|
||||||
|
Educoder::Sms.notify_admin(send_type: 'apply_auth')
|
||||||
|
rescue => ex
|
||||||
|
Util.logger_error(ex)
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,62 @@
|
|||||||
|
class Users::ApplyProfessionalAuthService < ApplicationService
|
||||||
|
Error = Class.new(StandardError)
|
||||||
|
|
||||||
|
attr_reader :user, :params
|
||||||
|
|
||||||
|
def initialize(user, params)
|
||||||
|
@user = user
|
||||||
|
@params = params
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
Users::ApplyProfessionalAuthForm.new(params).validate!
|
||||||
|
raise Error, '您已经申请过职业认证了' if ApplyUserAuthentication.professional_auth.processing.exists?(user_id: user.id)
|
||||||
|
|
||||||
|
user.professional_certification = false
|
||||||
|
|
||||||
|
extension = user.user_extension
|
||||||
|
extension.school_id = params[:school_id]
|
||||||
|
extension.department_id = params[:department_id]
|
||||||
|
extension.identity = params[:identity]
|
||||||
|
|
||||||
|
extra = params[:extra].to_s.strip.presence
|
||||||
|
if extension.identity.to_s == 'student'
|
||||||
|
extension.technical_title = nil
|
||||||
|
extension.student_id = extra
|
||||||
|
else
|
||||||
|
extension.technical_title = extra
|
||||||
|
extension.student_id = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
user.save!
|
||||||
|
extension.save!
|
||||||
|
|
||||||
|
user.apply_user_authentication.create!(auth_type: 2, status: 0)
|
||||||
|
|
||||||
|
move_image_file! unless params[:upload_image].to_s == 'false'
|
||||||
|
|
||||||
|
sms_notify_admin
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def move_image_file!
|
||||||
|
image_url = ApplicationController.helpers.disk_professional_auth_filename(user.id)
|
||||||
|
temp_image_url = image_url + 'temp'
|
||||||
|
|
||||||
|
FileUtils.mv(temp_image_url, image_url, force: true) if File.exist?(temp_image_url)
|
||||||
|
rescue RuntimeError => ex
|
||||||
|
Util.logger_error(ex)
|
||||||
|
raise Error, '申请失败'
|
||||||
|
ensure
|
||||||
|
File.delete(temp_image_url) if File.exist?(temp_image_url)
|
||||||
|
end
|
||||||
|
|
||||||
|
def sms_notify_admin
|
||||||
|
Educoder::Sms.notify_admin(send_type: 'apply_pro_certification')
|
||||||
|
rescue => ex
|
||||||
|
Util.logger_error(ex)
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,7 @@
|
|||||||
|
'zh-CN':
|
||||||
|
activemodel:
|
||||||
|
attributes:
|
||||||
|
users/apply_authentication_form:
|
||||||
|
name: 姓名
|
||||||
|
id_number: 身份证号
|
||||||
|
|
@ -0,0 +1,9 @@
|
|||||||
|
'zh-CN':
|
||||||
|
activemodel:
|
||||||
|
attributes:
|
||||||
|
users/apply_professional_auth_form:
|
||||||
|
school_id: 学校/单位
|
||||||
|
department_id: 学院/部门
|
||||||
|
identity: 职业
|
||||||
|
extra: 职称/学号
|
||||||
|
|
Loading…
Reference in new issue