graduation_requirements = @graduation_requirements
ec_year = @_current_year
major = ec_year.ec_major_school.ec_major

wb = xlsx_package.workbook
wb.styles do |style|
  title_style = style.add_style(sz: 16, height: 20, b: true)
  ec_year_style = style.add_style(sz: 10, height: 14)
  label_style = style.add_style(sz: 11, b: true, alignment: { horizontal: :center })
  content_style = style.add_style(sz: 11, height: 16, border: { style: :thin, color: '000000' })

  wb.add_worksheet(name: '达成度-毕业要求综合评价报表') do |sheet|
    sheet.add_row '培养目标及目标分解', style: title_style
    sheet.merge_cells("A1:D1")

    sheet.add_row []

    sheet.add_row ['专业代码', major.code], style: ec_year_style
    sheet.add_row ['专业名称', major.name], style: ec_year_style
    sheet.add_row ['学年', "#{ec_year.year}学年"], style: ec_year_style

    sheet.add_row []

    sheet.add_row ['毕业要求', '', '课程数量 ∑合格标准', '评价结果'], style: label_style
    sheet.add_row ['一级', '二级', '∑达成值', ''], style: label_style
    sheet.merge_cells("A7:B7")
    sheet.merge_cells("D7:D8")

    index = 9

    graduation_requirements.each do |requirement|
      start_index = index

      requirement.ec_graduation_subitems.each do |item|
        reach_criteria, actually_reach = 0.0, 0.0

        item.ec_course_supports.each do |support|
          reach_criteria += support.weights.to_f * ec_year.calculation_value.to_f
          actually_reach += support.ec_graduation_requirement_calculation&.real_value.to_f
        end

        size   = item.ec_course_supports.size
        status = actually_reach >= reach_criteria ? '已达成' : '未达成'

        base_arr = [requirement.position.to_s, "#{requirement.position}-#{item.position}", status]
        sheet.add_row base_arr.dup.insert(-2, size), style: content_style
        sheet.add_row base_arr.dup.insert(-2, format('%.03f', reach_criteria)), style: content_style
        sheet.add_row base_arr.dup.insert(-2, format('%.03f', actually_reach)), style: content_style

        sheet.merge_cells("B#{index}:B#{index + 2}")
        sheet.merge_cells("D#{index}:D#{index + 2}")

        index += 3
      end

      sheet.merge_cells("A#{start_index}:B#{index - 1}")
    end
  end
end