package com.qmth.teachcloud.report.business.service;

import org.springframework.scheduling.annotation.Async;

import java.util.Map;

/**
 * @Description: 考察学院数据迁移到开课学院 -> 把一个开课学院作为（开课学院 + 考察学院）
 * !** 必须保证机构名称在全校唯一
 * @Author: CaoZixuan
 * @Date: 2022-04-01
 */
@Async("analyzeThreadPool")
public interface InsteadOrgService {
    // -- 考察学院数据迁移到开课学院 -> 把一个开课学院作为（开课学院 + 考察学院）

    /**
     * 替换机构 更新基础表 't_b_'
     *
     * @param schoolId   学校主键
     * @param orgIdMap   机构id键值对
     */
    void insteadOrgBasicTable(Long schoolId, Map<Long, Long> orgIdMap);

    /**
     * 替换机构 更新表 't_a_exam_course' -> 考察机构名称长字符串中对应的考察机构名称替换为新的开课机构
     *
     * @param schoolId   学校主键
     * @param orgNameMap 机构名称键值对
     */
    void insteadOrgTAExamCourse(Long schoolId, Map<String, String> orgNameMap);

    /**
     * 替换机构 更新表 't_a_exam_course_clazz' -> 机构名称
     *
     * @param schoolId   学校主键
     * @param orgNameMap 机构名称键值对
     */
    void insteadOrgTAExamCourseClazz(Long schoolId, Map<String, String> orgNameMap);

    /**
     * 替换机构 更新表 't_a_exam_course_college_inspect' -> (考察)机构id
     *
     * @param schoolId 学校主键
     * @param orgIdMap 机构id键值对
     */
    void insteadOrgTAExamCourseCollegeInspect(Long schoolId, Map<Long, Long> orgIdMap);

    /**
     * 替换机构 更新表 't_a_exam_course_college_inspect_dio' -> 考察学院id和名称
     *
     * @param schoolId   学校主键
     * @param orgIdMap   机构id键值对
     * @param orgNameMap 机构名称键值对
     */
    void insteadOrgTAExamCourseCollegeInspectDio(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap);

    /**
     * 替换机构 更新表 't_a_exam_course_college_paper_struct' -> 考察学院id和名称
     *
     * @param schoolId   学校主键
     * @param orgIdMap   机构id键值对
     * @param orgNameMap 机构名称键值对
     */
    void insteadOrgTAExamCourseCollegePaperStruct(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap);

    /**
     * 替换机构 更新表 't_a_exam_course_college_teacher' -> 考察学院id和名称
     *
     * @param schoolId   学校主键
     * @param orgIdMap   机构id键值对
     * @param orgNameMap 机构名称键值对
     */
    void insteadOrgTAExamCourseCollegeTeacher(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap);

    /**
     * 替换机构 更新表 't_a_exam_course_difficult' -> （考察）学院id
     *
     * @param schoolId 学校主键
     * @param orgIdMap 机构id键值对
     */
    void insteadOrgTAExamCourseDifficult(Long schoolId, Map<Long, Long> orgIdMap);

    /**
     * 替换机构 更新表 't_a_exam_course_record' -> 考察学院id
     *
     * @param schoolId 学校主键
     * @param orgIdMap 机构id键值对
     */
    void insteadOrgTAExamCourseRecord(Long schoolId, Map<Long, Long> orgIdMap);

    /**
     * 替换机构 更新表 't_a_exam_course_record_dio' -> 考察学院id和名称
     *
     * @param schoolId   学校主键
     * @param orgIdMap   机构id键值对
     * @param orgNameMap 机构名称键值对
     */
    void insteadOrgTAExamCourseRecordDio(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap);

    /**
     * 替换机构 更新表 't_a_exam_course_record_mod' -> 考察学院id和名称
     *
     * @param schoolId   学校主键
     * @param orgIdMap   机构id键值对
     * @param orgNameMap 机构名称键值对
     */
    void insteadOrgTAExamCourseRecordMod(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap);


    /**
     * 替换机构 更新表 't_a_exam_course_teacher_college_difficult' -> 考察学院id和名称
     *
     * @param schoolId   学校主键
     * @param orgIdMap   机构id键值对
     * @param orgNameMap 机构名称键值对
     */
    void insteadOrgTAExamCourseTeacherCollegeDifficult(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap);

    /**
     * 替换机构 更新表 't_a_exam_course_teacher_college_dio' -> 考察学院id和名称
     *
     * @param schoolId   学校主键
     * @param orgIdMap   机构id键值对
     * @param orgNameMap 机构名称键值对
     */
    void insteadOrgTAExamCourseTeacherCollegeDio(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap);

    /**
     * 替换机构 更新表 't_a_exam_course_teacher_college_paper_struct' -> 考察学院id和名称
     *
     * @param schoolId   学校主键
     * @param orgIdMap   机构id键值对
     * @param orgNameMap 机构名称键值对
     */
    void insteadOrgTAExamCourseTeacherCollegePaperStruct(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap);

    /**
     * 替换机构 更新表 't_a_exam_total'
     *
     * @param schoolId   学校主键
     * @param orgNameMap 机构名称键值对
     */
    void insteadOrgTAExamTotal(Long schoolId, Map<String, String> orgNameMap);
}
