parent
398cdcd29a
commit
2d80cfe6e2
@ -1,79 +0,0 @@
|
|||||||
class ProjectPackages::SaveService < ApplicationService
|
|
||||||
Error = Class.new(StandardError)
|
|
||||||
|
|
||||||
attr_reader :package, :params
|
|
||||||
|
|
||||||
def initialize(package, params)
|
|
||||||
@package = package
|
|
||||||
@params = params
|
|
||||||
end
|
|
||||||
|
|
||||||
def call
|
|
||||||
ProjectPackages::SaveForm.new(params).validate!
|
|
||||||
|
|
||||||
check_code_valid! if need_check_code?
|
|
||||||
|
|
||||||
is_create = package.new_record?
|
|
||||||
raise Error, '类型不存在' unless ProjectPackageCategory.where(id: params[:category_id]).exists?
|
|
||||||
params[:project_package_category_id] = params[:category_id].to_i
|
|
||||||
|
|
||||||
raise Error, '竞标截止时间不能小于当前时间' if params[:deadline_at].present? && params[:deadline_at].to_time < Time.now
|
|
||||||
|
|
||||||
if params[:min_price].blank? && params[:max_price].present?
|
|
||||||
params[:min_price] = params[:max_price]
|
|
||||||
params[:max_price] = nil
|
|
||||||
end
|
|
||||||
|
|
||||||
ActiveRecord::Base.transaction do
|
|
||||||
package.assign_attributes(params)
|
|
||||||
package.save!
|
|
||||||
|
|
||||||
# 处理附件
|
|
||||||
deal_attachments
|
|
||||||
|
|
||||||
send_create_notify! if is_create
|
|
||||||
|
|
||||||
ProjectPackages::ApplyPublishService.call(package) if with_publish?
|
|
||||||
end
|
|
||||||
|
|
||||||
package
|
|
||||||
rescue ProjectPackages::ApplyPublishService::Error => ex
|
|
||||||
raise Error, ex.message
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def need_check_code?
|
|
||||||
(package.new_record? && params[:contact_phone] != package.creator.phone) ||
|
|
||||||
(!package.new_record? && package.contact_phone != params[:contact_phone])
|
|
||||||
end
|
|
||||||
|
|
||||||
def check_code_valid!
|
|
||||||
raise Error, '验证码不能为空' if params[:code].blank?
|
|
||||||
|
|
||||||
code = VerificationCode.where(phone: params[:contact_phone], code_type: 9, code: params[:code]).last
|
|
||||||
raise Error, '无效的验证码' if code.blank? || !code.valid_code?
|
|
||||||
end
|
|
||||||
|
|
||||||
def deal_attachments
|
|
||||||
attachment_ids = Array.wrap(params[:attachment_ids]).compact.map(&:to_i) || []
|
|
||||||
old_attachment_ids = package.attachments.pluck(:id)
|
|
||||||
|
|
||||||
destroy_ids = old_attachment_ids - attachment_ids
|
|
||||||
package.attachments.where(id: destroy_ids).delete_all
|
|
||||||
|
|
||||||
new_ids = attachment_ids - old_attachment_ids
|
|
||||||
if new_ids.present?
|
|
||||||
Attachment.where(id: new_ids, container_id: nil).update_all(container_id: package.id, container_type: 'ProjectPackage')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def send_create_notify!
|
|
||||||
Tiding.create!(user_id: package.creator_id, trigger_user_id: 1,
|
|
||||||
container_id: package.id, container_type: 'ProjectPackage', tiding_type: 'Created')
|
|
||||||
end
|
|
||||||
|
|
||||||
def with_publish?
|
|
||||||
params[:publish].to_s == 'true'
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in new issue