|
- class Admins::ImportDisciplineService < ApplicationService
- Error = Class.new(StandardError)
-
- attr_reader :file, :result
-
- def initialize(file)
- @file = file
- @result = { success: 0, fail: [] }
- end
-
- def call
- raise Error, '文件不存在' if file.blank?
-
- excel = Admins::ImportDisciplineExcel.new(file)
- excel.read_each(&method(:save_discipline))
-
- result
- rescue ApplicationImport::Error => ex
- raise Error, ex.message
- end
-
- private
-
- def save_discipline(data)
- count = 0
- discipline_name = data.discipline_name.to_s.strip
- sub_discipline_name = data.sub_discipline_name.to_s.strip
-
- return unless discipline_name.present?
- discipline = Discipline.find_by(name: discipline_name)
- if discipline.blank?
- discipline = Discipline.create!(name: discipline_name, position: Discipline.all.pluck(:position).max + 1)
- count += 1
- end
-
- if sub_discipline_name.present?
- sub_discipline = SubDiscipline.find_by(name: discipline_name, discipline: discipline)
- if sub_discipline.blank?
- SubDiscipline.create!(name: sub_discipline_name, discipline: discipline, position: discipline.sub_disciplines.pluck(:position).max + 1)
- count += 1
- end
- end
-
- result[:success] += count
- rescue Exception => ex
- fail_data = data.as_json
- fail_data[:data] = fail_data.values.join(',')
- fail_data[:message] = ex.message
-
- result[:fail] << fail_data
- end
- end
|