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

max_support_length = graduation_subitems.map { |item| item.ec_course_supports.size }.max
last_column_index = 2 + max_support_length

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, bg_color: '90EE90', alignment: { horizontal: :center }, border: { style: :thin, color: '000000' })
  content_style = style.add_style(sz: 11, height: 16, border: { style: :thin, color: '000000' })
  tip_style = style.add_style(sz: 11, height: 16, color: 'FFA07A')

  wb.add_worksheet(:name => '课程体系对毕业要求的支撑') do |sheet|
    sheet.add_row '课程体系VS毕业要求', style: title_style
    sheet.merge_cells wb.rows.first.cells[(1..(3 + max_support_length - 1))]

    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 ['注:有对应关系的课程名称下方为其权重系数,一个指标点的权重系数之和必须等于1'], style: tip_style
    sheet.add_row ['注:“★” 表示关联度高']
    sheet.merge_cells wb.rows[5].cells[(1..(3 + max_support_length - 1))]
    sheet.merge_cells wb.rows[6].cells[(1..(3 + max_support_length - 1))]

    sheet.add_row []

    data = ['毕业要求', '', '课程名称']
    data[last_column_index] = '课程数量'
    sheet.add_row data, style: label_style
    course_columns = max_support_length.times.map { |i| "课程#{i + 1}" }
    sheet.add_row %w('一级 二级') + course_columns + ['∑目标值'], style: label_style
    sheet.merge_cells("A9:B9")
    sheet.merge_cells wb.rows[8].cells[(3..(3 + max_support_length - 1))]

    current_row = 11
    graduation_subitems.group_by(&:ec_graduation_requirement).each do |requirement, items|
      position = requirement.position
      start_row = current_row

      items.each do |item|
        course_data = [position, "#{position}.#{item.position}"]
        weight_data = ['', '']

        total_weight = item.ec_course_supports.sum do |support|
          course_data << support.ec_course.name.to_s
          weight_data << support.weight.to_s

          support.weight.to_f
        end

        course_data[last_column_index] = item.ec_course_supports.size
        weight_data[last_column_index] = total_weight.to_s

        styles = [label_style, label_style,].concat([content_style] * max_support_length)
        sheet.add_row course_data, style: styles
        sheet.add_row weight_data, style: styles

        sheet.merge_cells("B#{current_row - 1}:B#{current_row}")
        current_row += 2
      end

      sheet.merge_cells("A#{start_row - 1}:B#{current_row - 1}")
    end
  end
end