Przeglądaj źródła

fix:学院合并

caozixuan 3 lat temu
rodzic
commit
0d3162b103

+ 3 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/OrgCenterDataDisposeServiceImpl.java

@@ -1,12 +1,9 @@
 package com.qmth.teachcloud.common.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicSchool;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
-import com.qmth.teachcloud.common.enums.OrgCenterTypeEnum;
 import com.qmth.teachcloud.common.service.BasicSchoolService;
 import com.qmth.teachcloud.common.service.CallApiOrgCenterService;
 import com.qmth.teachcloud.common.service.OrgCenterDataDisposeService;
@@ -15,7 +12,9 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.io.IOException;
-import java.util.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -636,7 +636,7 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
         String token = SystemConstant.getUuid();
         cacheService.userCache(sysUser.getId());
         //添加用户会话缓存
-        Set<RoleTypeEnum> roleType = authBean.getRoleList().stream().map(s -> s.getType()).collect(Collectors.toSet());
+        Set<RoleTypeEnum> roleType = authBean.getRoleList().stream().map(SysRole::getType).collect(Collectors.toSet());
         String sessionId = SessionUtil.digest(sysUser.getId(), Math.abs(roleType.toString().hashCode()), platform.name());
         //TODO 测试用
 //        String test = SignatureEntityTest.build(SignatureType.TOKEN, sessionId, token);

+ 43 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/bean/params/CollegeCombineParams.java

@@ -0,0 +1,43 @@
+package com.qmth.teachcloud.report.business.bean.params;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description: 学院替换参数(用某个学院替换另一个学院 eg。用开课学院公共物理教学替换掉考察学院)
+ * @Author: CaoZixuan
+ * @Date: 2022-04-01
+ */
+public class CollegeCombineParams {
+    @ApiModelProperty("考察学院id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotNull(message = "请选择考察学院id")
+    @Range(min = 1L, message = "请选择考察学院id")
+    private Long inspectCollegeId;
+
+    @ApiModelProperty("开课学院id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotNull(message = "请选择开课学院id")
+    @Range(min = 1L, message = "请选择开课学院id")
+    private Long teachCollegeId;
+
+    public Long getInspectCollegeId() {
+        return inspectCollegeId;
+    }
+
+    public void setInspectCollegeId(Long inspectCollegeId) {
+        this.inspectCollegeId = inspectCollegeId;
+    }
+
+    public Long getTeachCollegeId() {
+        return teachCollegeId;
+    }
+
+    public void setTeachCollegeId(Long teachCollegeId) {
+        this.teachCollegeId = teachCollegeId;
+    }
+}

+ 11 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/CourseUnitOperateService.java

@@ -1,8 +1,10 @@
 package com.qmth.teachcloud.report.business.service;
 
+import com.qmth.teachcloud.report.business.bean.params.CollegeCombineParams;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.util.List;
 import java.util.concurrent.ExecutionException;
 
 /**
@@ -50,4 +52,13 @@ public interface CourseUnitOperateService {
      * 制作真实数据
      */
     void createDemoData() throws ExecutionException, InterruptedException;
+
+
+    /**
+     * 将考察学院id合并到开课学院id
+     *
+     * @param schoolId                 学校id
+     * @param collegeCombineParamsList 学院合并参数集合
+     */
+    void combineCollegeInspectToTeach(Long schoolId, List<CollegeCombineParams> collegeCombineParamsList);
 }

+ 145 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/InsteadOrgService.java

@@ -0,0 +1,145 @@
+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);
+}

+ 11 - 4
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/ChangNamesServiceImpl.java

@@ -157,12 +157,13 @@ public class ChangNamesServiceImpl implements ChangNamesService {
 
     /**
      * 查询 基础学生id - 基础学生名称
+     *
      * @return map
      */
-    private Map<Long,String> findStudentIdNameMap(){
-        Map<Long,String> map = new HashMap<>();
+    private Map<Long, String> findStudentIdNameMap() {
+        Map<Long, String> map = new HashMap<>();
         for (TBStudent tbStudent : tbStudentService.list()) {
-            map.put(tbStudent.getId(),tbStudent.getName());
+            map.put(tbStudent.getId(), tbStudent.getName());
         }
         return map;
     }
@@ -173,7 +174,7 @@ public class ChangNamesServiceImpl implements ChangNamesService {
         Map<String, String> courseMap = this.findCourseMap();
         Map<Long, String> orgMap = this.findOrgMap();
         Map<String, String> userMap = this.findUserCodeNameMap();
-        Map<Long,String> studentMap = this.findStudentIdNameMap();
+        Map<Long, String> studentMap = this.findStudentIdNameMap();
         // t_b_common_level_config
         tbCommonLevelConfigService.updateBatchById(tbCommonLevelConfigService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
         // t_b_common_rank_level_config
@@ -234,6 +235,9 @@ public class ChangNamesServiceImpl implements ChangNamesService {
                     }
                     SysOrg cell = cellList.get(0);
                     newInspect.add(cell.getName());
+                } else {
+                    // 如果没有匹配到的话就按照原来的学院名称(因为演示方法可能多次执行,但执行完成一次后机构表的历史数据记录不会替换,下次执行就可能导致由于历史名称和机构名称组不匹配引发丢失机构)
+                    newInspect.add(s);
                 }
             }
             if (newInspect.size() > 0) {
@@ -524,6 +528,9 @@ public class ChangNamesServiceImpl implements ChangNamesService {
                     }
                     SysOrg cell = cellList.get(0);
                     newCollegeList.add(cell.getName());
+                } else {
+                    // 如果没有匹配到的话就按照原来的学院名称(因为演示方法可能多次执行,但执行完成一次后机构表的历史数据记录不会替换,下次执行就可能导致由于历史名称和机构名称组不匹配引发丢失机构)
+                    newCollegeList.add(s);
                 }
             }
             if (newCollegeList.size() > 0) {

+ 63 - 3
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/CourseUnitOperateServiceImpl.java

@@ -15,10 +15,10 @@ import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.report.business.bean.dto.excel.BasicCourseChangeDto;
 import com.qmth.teachcloud.report.business.bean.dto.excel.SysOrgChangeDto;
 import com.qmth.teachcloud.report.business.bean.dto.excel.SysUserChangeDto;
+import com.qmth.teachcloud.report.business.bean.params.CollegeCombineParams;
+import com.qmth.teachcloud.report.business.entity.TAExamCourseRecord;
 import com.qmth.teachcloud.report.business.entity.TBStudent;
-import com.qmth.teachcloud.report.business.service.ChangNamesService;
-import com.qmth.teachcloud.report.business.service.CourseUnitOperateService;
-import com.qmth.teachcloud.report.business.service.TBStudentService;
+import com.qmth.teachcloud.report.business.service.*;
 import com.qmth.teachcloud.report.business.utils.RandomNameUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -49,6 +49,10 @@ public class CourseUnitOperateServiceImpl implements CourseUnitOperateService {
     private TBStudentService tbStudentService;
     @Resource
     private ChangNamesService changNamesService;
+    @Resource
+    private TAExamCourseRecordService taExamCourseRecordService;
+    @Resource
+    private InsteadOrgService insteadOrgService;
 
     private static final Logger log = LoggerFactory.getLogger(CourseUnitOperateServiceImpl.class);
 
@@ -201,6 +205,7 @@ public class CourseUnitOperateServiceImpl implements CourseUnitOperateService {
                             List<SysOrg> sysOrgList = sysOrgDatasource.stream().filter(e -> e.getHistoricName().equals(historicName)).collect(Collectors.toList());
                             if (sysOrgList.size() == 1) {
                                 sysUser.setRealName(sysOrgList.get(0).getName());
+                                sysUser.setLoginName(sysOrgList.get(0).getName());
                             } else {
                                 // 数据校验
                                 if (!sysUser.getSchoolId().equals(excelSchoolId) || !sysUser.getRealName().equals(historicName)) {
@@ -208,6 +213,7 @@ public class CourseUnitOperateServiceImpl implements CourseUnitOperateService {
                                 }
                                 // 基础数据替换
                                 sysUser.setRealName(newName);
+                                sysUser.setLoginName(newName);
                             }
                             sysUser.setHistoricName(historicName);
                             updateData.add(sysUser);
@@ -255,4 +261,58 @@ public class CourseUnitOperateServiceImpl implements CourseUnitOperateService {
         changNamesService.changeTableTAExamTotal();
         changNamesService.changeTableTAPaperStruct();
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void combineCollegeInspectToTeach(Long schoolId, List<CollegeCombineParams> collegeCombineParamsList) {
+        // 构建被替换学院id - 替换学院id 键值对
+        Map<Long, Long> orgIdMap = new HashMap<>();
+        // 构建被替换学院名称 - 替换学院名称 键值对
+        Map<String, String> orgNameMap = new HashMap<>();
+
+        for (CollegeCombineParams collegeCombineParams : collegeCombineParamsList) {
+            Long inspectCollegeId = collegeCombineParams.getInspectCollegeId();
+            Long teachCollegeId = collegeCombineParams.getTeachCollegeId();
+
+            // 考察学院判断
+            SysOrg inspectCollege = sysOrgService.getById(inspectCollegeId);
+            if (Objects.isNull(inspectCollege)) {
+                throw ExceptionResultEnum.ERROR.exception("考察学院不存在 id = " + inspectCollegeId);
+            }
+            if (taExamCourseRecordService.count(new QueryWrapper<TAExamCourseRecord>().lambda().eq(TAExamCourseRecord::getSchoolId, schoolId).eq(TAExamCourseRecord::getInspectCollegeId, inspectCollegeId)) == 0) {
+                throw ExceptionResultEnum.ERROR.exception("考察学院【" + inspectCollege.getName() + "】不存在数据");
+            }
+
+            // 开课学院判断
+            SysOrg teachCollege = sysOrgService.getById(teachCollegeId);
+            if (Objects.isNull(teachCollege)) {
+                throw ExceptionResultEnum.ERROR.exception("开课学院不存在 id= " + teachCollegeId);
+            }
+            if (taExamCourseRecordService.count(new QueryWrapper<TAExamCourseRecord>().lambda().eq(TAExamCourseRecord::getSchoolId, schoolId).eq(TAExamCourseRecord::getTeachCollegeId, teachCollegeId)) == 0) {
+                throw ExceptionResultEnum.ERROR.exception("开课学院【" + teachCollege.getName() + "】不存在数据");
+            }
+
+            if (!Objects.equals(inspectCollege.getParentId(), teachCollege.getParentId())) {
+                throw ExceptionResultEnum.ERROR.exception("考察学院【" + inspectCollege.getName() + "】和开课学院【" + teachCollege.getName() + "】不在同一个父机构下");
+            }
+
+            orgIdMap.put(inspectCollegeId, teachCollegeId);
+            orgNameMap.put(inspectCollege.getName(), teachCollege.getName());
+        }
+        insteadOrgService.insteadOrgBasicTable(schoolId, orgIdMap);
+        insteadOrgService.insteadOrgTAExamCourse(schoolId, orgNameMap);
+        insteadOrgService.insteadOrgTAExamCourseClazz(schoolId, orgNameMap);
+        insteadOrgService.insteadOrgTAExamCourseCollegeInspect(schoolId, orgIdMap);
+        insteadOrgService.insteadOrgTAExamCourseCollegeInspectDio(schoolId, orgIdMap, orgNameMap);
+        insteadOrgService.insteadOrgTAExamCourseCollegePaperStruct(schoolId, orgIdMap, orgNameMap);
+        insteadOrgService.insteadOrgTAExamCourseCollegeTeacher(schoolId, orgIdMap, orgNameMap);
+        insteadOrgService.insteadOrgTAExamCourseDifficult(schoolId, orgIdMap);
+        insteadOrgService.insteadOrgTAExamCourseRecord(schoolId, orgIdMap);
+        insteadOrgService.insteadOrgTAExamCourseRecordDio(schoolId, orgIdMap, orgNameMap);
+        insteadOrgService.insteadOrgTAExamCourseRecordMod(schoolId, orgIdMap, orgNameMap);
+        insteadOrgService.insteadOrgTAExamCourseTeacherCollegeDifficult(schoolId, orgIdMap, orgNameMap);
+        insteadOrgService.insteadOrgTAExamCourseTeacherCollegeDio(schoolId, orgIdMap, orgNameMap);
+        insteadOrgService.insteadOrgTAExamCourseTeacherCollegePaperStruct(schoolId, orgIdMap, orgNameMap);
+        insteadOrgService.insteadOrgTAExamTotal(schoolId, orgNameMap);
+    }
 }

+ 325 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/InsteadOrgServiceImpl.java

@@ -0,0 +1,325 @@
+package com.qmth.teachcloud.report.business.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.teachcloud.report.business.entity.*;
+import com.qmth.teachcloud.report.business.service.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 机构替换服务实现类
+ * @Author: CaoZixuan
+ * @Date: 2022-04-01
+ */
+@Service
+public class InsteadOrgServiceImpl implements InsteadOrgService {
+    @Resource
+    private TBExamStudentService tbExamStudentService;
+    @Resource
+    private TBTeacherService tbTeacherService;
+    @Resource
+    private TAExamCourseService taExamCourseService;
+    @Resource
+    private TAExamCourseClazzService taExamCourseClazzService;
+    @Resource
+    private TAExamCourseCollegeInspectService taExamCourseCollegeInspectService;
+    @Resource
+    private TAExamCourseCollegeInspectDioService taExamCourseCollegeInspectDioService;
+    @Resource
+    private TAExamCourseCollegePaperStructService taExamCourseCollegePaperStructService;
+    @Resource
+    private TAExamCourseCollegeTeacherService taExamCourseCollegeTeacherService;
+    @Resource
+    private TAExamCourseDifficultService taExamCourseDifficultService;
+    @Resource
+    private TAExamCourseRecordDioService taExamCourseRecordDioService;
+    @Resource
+    private TAExamCourseRecordModService taExamCourseRecordModService;
+    @Resource
+    private TAExamCourseTeacherCollegeDifficultService taExamCourseTeacherCollegeDifficultService;
+    @Resource
+    private TAExamCourseTeacherCollegeDioService taExamCourseTeacherCollegeDioService;
+    @Resource
+    private TAExamCourseTeacherCollegePaperStructService taExamCourseTeacherCollegePaperStructService;
+    @Resource
+    private TAExamTotalService taExamTotalService;
+    @Resource
+    private TAExamCourseRecordService taExamCourseRecordService;
+
+    private static final Logger log = LoggerFactory.getLogger(InsteadOrgServiceImpl.class);
+
+    @Override
+    public void insteadOrgBasicTable(Long schoolId, Map<Long, Long> orgIdMap) {
+        Set<Long> orgIdSet = orgIdMap.keySet();
+        // 更新表 't_b_exam_student' 考察机构id
+        tbExamStudentService.updateBatchById(tbExamStudentService.list(new QueryWrapper<TBExamStudent>()
+                        .lambda()
+                        .eq(TBExamStudent::getSchoolId, schoolId)
+                        .in(TBExamStudent::getInspectCollegeId, orgIdSet))
+                .stream().peek(e -> {
+                    if (orgIdMap.containsKey(e.getInspectCollegeId())) {
+                        e.setInspectCollegeId(orgIdMap.get(e.getInspectCollegeId()));
+                    }
+                }).collect(Collectors.toSet()));
+        log.info("'t_b_exam_student' 表更新成功");
+
+        // 更新表 't_b_teacher' 机构id 把原考察机构换成开课机构(大抵教师都帮在开课学院下的)
+        tbTeacherService.updateBatchById(tbTeacherService.list(new QueryWrapper<TBTeacher>()
+                        .lambda()
+                        .eq(TBTeacher::getSchoolId, schoolId)
+                        .in(TBTeacher::getOrgId, orgIdSet))
+                .stream().peek(e -> {
+                    if (orgIdMap.containsKey(e.getOrgId())) {
+                        e.setOrgId(orgIdMap.get(e.getOrgId()));
+                    }
+                }).collect(Collectors.toSet()));
+        log.info("'t_b_teacher' 表更新成功");
+    }
+
+    @Override
+    public void insteadOrgTAExamCourse(Long schoolId, Map<String, String> orgNameMap) {
+        List<TAExamCourse> taExamCourseList = taExamCourseService.list(new QueryWrapper<TAExamCourse>().lambda().eq(TAExamCourse::getSchoolId, schoolId));
+        taExamCourseService.updateBatchById(taExamCourseList.stream().peek(e -> {
+            final String separator = "、";
+            StringBuilder newStr = new StringBuilder();
+            String inspectCollegeStr = e.getInspectCollegeNames();
+            String[] inspectCollegeArr = inspectCollegeStr.split(separator);
+            for (String s : inspectCollegeArr) {
+                if (orgNameMap.containsKey(s)) {
+                    s = orgNameMap.get(s);
+                }
+                newStr.append(s).append(separator);
+            }
+            e.setInspectCollegeNames(newStr.substring(0, newStr.length() - separator.length()));
+        }).collect(Collectors.toSet()));
+        log.info("'t_a_exam_course' 表更新成功");
+    }
+
+    @Override
+    public void insteadOrgTAExamCourseClazz(Long schoolId, Map<String, String> orgNameMap) {
+        taExamCourseClazzService.updateBatchById(taExamCourseClazzService.list(new QueryWrapper<TAExamCourseClazz>()
+                        .lambda()
+                        .eq(TAExamCourseClazz::getSchoolId, schoolId))
+                .stream().peek(e -> {
+                    if (orgNameMap.containsKey(e.getCollegeName())) {
+                        e.setCollegeName(orgNameMap.get(e.getCollegeName()));
+                    }
+                }).collect(Collectors.toSet()));
+        log.info("'t_a_exam_course_clazz' 表更新成功");
+    }
+
+    @Override
+    public void insteadOrgTAExamCourseCollegeInspect(Long schoolId, Map<Long, Long> orgIdMap) {
+        taExamCourseCollegeInspectService.updateBatchById(taExamCourseCollegeInspectService.list(new QueryWrapper<TAExamCourseCollegeInspect>()
+                        .lambda()
+                        .eq(TAExamCourseCollegeInspect::getSchoolId, schoolId)
+                        .in(TAExamCourseCollegeInspect::getCollegeId, orgIdMap.keySet()))
+                .stream().peek(e -> {
+                    if (orgIdMap.containsKey(e.getCollegeId())) {
+                        e.setCollegeId(orgIdMap.get(e.getCollegeId()));
+                    }
+                }).collect(Collectors.toSet()));
+        log.info("'t_a_exam_course_college_inspect' 表更新成功");
+    }
+
+    @Override
+    public void insteadOrgTAExamCourseCollegeInspectDio(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap) {
+        taExamCourseCollegeInspectDioService.updateBatchById(taExamCourseCollegeInspectDioService.list(new QueryWrapper<TAExamCourseCollegeInspectDio>()
+                        .lambda()
+                        .eq(TAExamCourseCollegeInspectDio::getSchoolId, schoolId)
+                        .in(TAExamCourseCollegeInspectDio::getInspectCollegeId, orgIdMap.keySet()))
+                .stream()
+                .peek(e -> {
+                    if (orgIdMap.containsKey(e.getInspectCollegeId())) {
+                        e.setInspectCollegeId(orgIdMap.get(e.getInspectCollegeId()));
+                    }
+                    if (orgNameMap.containsKey(e.getInspectCollegeName())) {
+                        e.setInspectCollegeName(orgNameMap.get(e.getInspectCollegeName()));
+                    }
+                }).collect(Collectors.toSet()));
+        log.info("'t_a_exam_course_college_inspect_dio' 表更新成功");
+    }
+
+    @Override
+    public void insteadOrgTAExamCourseCollegePaperStruct(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap) {
+        taExamCourseCollegePaperStructService.updateBatchById(taExamCourseCollegePaperStructService.list(new QueryWrapper<TAExamCourseCollegePaperStruct>()
+                        .lambda()
+                        .eq(TAExamCourseCollegePaperStruct::getSchoolId, schoolId)
+                        .in(TAExamCourseCollegePaperStruct::getInspectCollegeId, orgIdMap.keySet()))
+                .stream()
+                .peek(e -> {
+                    if (orgIdMap.containsKey(e.getInspectCollegeId())) {
+                        e.setInspectCollegeId(orgIdMap.get(e.getInspectCollegeId()));
+                    }
+                    if (orgNameMap.containsKey(e.getInspectCollegeName())) {
+                        e.setInspectCollegeName(orgNameMap.get(e.getInspectCollegeName()));
+                    }
+                }).collect(Collectors.toSet()));
+        log.info("'t_a_exam_course_college_paper_struct' 表更新成功");
+    }
+
+    @Override
+    public void insteadOrgTAExamCourseCollegeTeacher(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap) {
+        taExamCourseCollegeTeacherService.updateBatchById(taExamCourseCollegeTeacherService.list(new QueryWrapper<TAExamCourseCollegeTeacher>()
+                        .lambda()
+                        .eq(TAExamCourseCollegeTeacher::getSchoolId, schoolId)
+                        .in(TAExamCourseCollegeTeacher::getInspectCollegeId, orgIdMap.keySet()))
+                .stream()
+                .peek(e -> {
+                    if (orgIdMap.containsKey(e.getInspectCollegeId())) {
+                        e.setInspectCollegeId(orgIdMap.get(e.getInspectCollegeId()));
+                    }
+                    if (orgNameMap.containsKey(e.getInspectCollegeName())) {
+                        e.setInspectCollegeName(orgNameMap.get(e.getInspectCollegeName()));
+                    }
+                }).collect(Collectors.toSet()));
+        log.info("'t_a_exam_course_college_teacher' 表更新成功");
+    }
+
+    @Override
+    public void insteadOrgTAExamCourseDifficult(Long schoolId, Map<Long, Long> orgIdMap) {
+        taExamCourseDifficultService.updateBatchById(taExamCourseDifficultService.list(new QueryWrapper<TAExamCourseDifficult>()
+                        .lambda()
+                        .eq(TAExamCourseDifficult::getSchoolId, schoolId)
+                        .in(TAExamCourseDifficult::getCollegeId, orgIdMap.keySet()))
+                .stream()
+                .peek(e -> {
+                    if (orgIdMap.containsKey(e.getCollegeId())) {
+                        e.setCollegeId(orgIdMap.get(e.getCollegeId()));
+                    }
+                }).collect(Collectors.toSet()));
+        log.info("'t_a_exam_course_difficult' 表更新成功");
+    }
+
+    @Override
+    public void insteadOrgTAExamCourseRecord(Long schoolId, Map<Long, Long> orgIdMap) {
+        taExamCourseRecordService.updateBatchById(taExamCourseRecordService.list(new QueryWrapper<TAExamCourseRecord>()
+                        .lambda()
+                        .eq(TAExamCourseRecord::getSchoolId, schoolId)
+                        .in(TAExamCourseRecord::getInspectCollegeId, orgIdMap.keySet()))
+                .stream()
+                .peek(e -> {
+                    if (orgIdMap.containsKey(e.getInspectCollegeId())) {
+                        e.setInspectCollegeId(orgIdMap.get(e.getInspectCollegeId()));
+                    }
+                }).collect(Collectors.toSet()));
+        log.info("'t_a_exam_course_record' 表更新成功");
+    }
+
+    @Override
+    public void insteadOrgTAExamCourseRecordDio(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap) {
+        taExamCourseRecordDioService.updateBatchById(taExamCourseRecordDioService.list(new QueryWrapper<TAExamCourseRecordDio>()
+                        .lambda()
+                        .eq(TAExamCourseRecordDio::getSchoolId, schoolId)
+                        .in(TAExamCourseRecordDio::getInspectCollegeId, orgIdMap.keySet()))
+                .stream()
+                .peek(e -> {
+                    if (orgIdMap.containsKey(e.getInspectCollegeId())) {
+                        e.setInspectCollegeId(orgIdMap.get(e.getInspectCollegeId()));
+                    }
+                    if (orgNameMap.containsKey(e.getInspectCollegeName())) {
+                        e.setInspectCollegeName(orgNameMap.get(e.getInspectCollegeName()));
+                    }
+                }).collect(Collectors.toSet()));
+        log.info("'t_a_exam_course_record_dio' 表更新成功");
+    }
+
+    @Override
+    public void insteadOrgTAExamCourseRecordMod(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap) {
+        taExamCourseRecordModService.updateBatchById(taExamCourseRecordModService.list(new QueryWrapper<TAExamCourseRecordMod>()
+                        .lambda()
+                        .eq(TAExamCourseRecordMod::getSchoolId, schoolId)
+                        .in(TAExamCourseRecordMod::getInspectCollegeId, orgIdMap.keySet()))
+                .stream()
+                .peek(e -> {
+                    if (orgIdMap.containsKey(e.getInspectCollegeId())) {
+                        e.setInspectCollegeId(orgIdMap.get(e.getInspectCollegeId()));
+                    }
+                    if (orgNameMap.containsKey(e.getInspectCollegeName())) {
+                        e.setInspectCollegeName(orgNameMap.get(e.getInspectCollegeName()));
+                    }
+                }).collect(Collectors.toSet()));
+        log.info("'t_a_exam_course_record_mod' 表更新成功");
+    }
+
+
+    @Override
+    public void insteadOrgTAExamCourseTeacherCollegeDifficult(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap) {
+        taExamCourseTeacherCollegeDifficultService.updateBatchById(taExamCourseTeacherCollegeDifficultService.list(new QueryWrapper<TAExamCourseTeacherCollegeDifficult>()
+                        .lambda()
+                        .eq(TAExamCourseTeacherCollegeDifficult::getSchoolId, schoolId)
+                        .in(TAExamCourseTeacherCollegeDifficult::getInspectCollegeId, orgIdMap.keySet()))
+                .stream()
+                .peek(e -> {
+                    if (orgIdMap.containsKey(e.getInspectCollegeId())) {
+                        e.setInspectCollegeId(orgIdMap.get(e.getInspectCollegeId()));
+                    }
+                    if (orgNameMap.containsKey(e.getInspectCollegeName())) {
+                        e.setInspectCollegeName(orgNameMap.get(e.getInspectCollegeName()));
+                    }
+                }).collect(Collectors.toSet()));
+        log.info("'t_a_exam_course_teacher_college_difficult' 表更新成功");
+    }
+
+    @Override
+    public void insteadOrgTAExamCourseTeacherCollegeDio(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap) {
+        taExamCourseTeacherCollegeDioService.updateBatchById(taExamCourseTeacherCollegeDioService.list(new QueryWrapper<TAExamCourseTeacherCollegeDio>()
+                        .lambda()
+                        .eq(TAExamCourseTeacherCollegeDio::getSchoolId, schoolId)
+                        .in(TAExamCourseTeacherCollegeDio::getInspectCollegeId, orgIdMap.keySet()))
+                .stream()
+                .peek(e -> {
+                    if (orgIdMap.containsKey(e.getInspectCollegeId())) {
+                        e.setInspectCollegeId(orgIdMap.get(e.getInspectCollegeId()));
+                    }
+                    if (orgNameMap.containsKey(e.getInspectCollegeName())) {
+                        e.setInspectCollegeName(orgNameMap.get(e.getInspectCollegeName()));
+                    }
+                }).collect(Collectors.toSet()));
+        log.info("'t_a_exam_course_teacher_college_dio' 表更新成功");
+    }
+
+    @Override
+    public void insteadOrgTAExamCourseTeacherCollegePaperStruct(Long schoolId, Map<Long, Long> orgIdMap, Map<String, String> orgNameMap) {
+        taExamCourseTeacherCollegePaperStructService.updateBatchById(taExamCourseTeacherCollegePaperStructService.list(new QueryWrapper<TAExamCourseTeacherCollegePaperStruct>()
+                        .lambda()
+                        .eq(TAExamCourseTeacherCollegePaperStruct::getSchoolId, schoolId)
+                        .in(TAExamCourseTeacherCollegePaperStruct::getInspectCollegeId, orgIdMap.keySet()))
+                .stream()
+                .peek(e -> {
+                    if (orgIdMap.containsKey(e.getInspectCollegeId())) {
+                        e.setInspectCollegeId(orgIdMap.get(e.getInspectCollegeId()));
+                    }
+                    if (orgNameMap.containsKey(e.getInspectCollegeName())) {
+                        e.setInspectCollegeName(orgNameMap.get(e.getInspectCollegeName()));
+                    }
+                }).collect(Collectors.toSet()));
+        log.info("'t_a_exam_course_teacher_college_paper_struct' 表更新成功");
+    }
+
+    @Override
+    public void insteadOrgTAExamTotal(Long schoolId, Map<String, String> orgNameMap) {
+        List<TAExamTotal> taExamTotalList = taExamTotalService.list(new QueryWrapper<TAExamTotal>().lambda().eq(TAExamTotal::getSchoolId, schoolId));
+        taExamTotalService.updateBatchById(taExamTotalList.stream().peek(e -> {
+            final String separator = "、";
+            StringBuilder newStr = new StringBuilder();
+            String inspectCollegeStr = e.getCollegeNames();
+            String[] inspectCollegeArr = inspectCollegeStr.split(separator);
+            for (String s : inspectCollegeArr) {
+                if (orgNameMap.containsKey(s)) {
+                    s = orgNameMap.get(s);
+                }
+                newStr.append(s).append(separator);
+            }
+            e.setCollegeNames(newStr.substring(0, newStr.length() - separator.length()));
+        }).collect(Collectors.toSet()));
+        log.info("'t_a_exam_total' 表更新成功");
+    }
+}

+ 18 - 4
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/BasicDatasourceController.java

@@ -19,13 +19,11 @@ import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.service.SysOrgService;
 import com.qmth.teachcloud.common.service.SysRoleService;
 import com.qmth.teachcloud.common.service.SysUserService;
-import com.qmth.teachcloud.common.util.ExcelUtil;
-import com.qmth.teachcloud.common.util.JacksonUtil;
-import com.qmth.teachcloud.common.util.Result;
-import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.*;
 import com.qmth.teachcloud.report.business.bean.dto.CombineDto;
 import com.qmth.teachcloud.report.business.bean.dto.excel.*;
 import com.qmth.teachcloud.report.business.bean.dto.query.*;
+import com.qmth.teachcloud.report.business.bean.params.CollegeCombineParams;
 import com.qmth.teachcloud.report.business.entity.*;
 import com.qmth.teachcloud.report.business.enums.AssignEnum;
 import com.qmth.teachcloud.report.business.enums.ExamCloudDataEnum;
@@ -36,10 +34,12 @@ import io.swagger.annotations.*;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.validation.Valid;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -1458,6 +1458,20 @@ public class BasicDatasourceController {
         return ResultUtil.ok();
     }
 
+    @ApiOperation(value = "将考察学院数据迁移至开课学院")
+    @RequestMapping(value = "/build/migrate_org", method = RequestMethod.POST)
+    @Transactional(rollbackFor = Exception.class)
+    @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
+    @Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
+    public Result migrateOrg(@Valid @RequestBody List<CollegeCombineParams> collegeCombineParamsListList, BindingResult bindingResult){
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        Long schoolId = SystemConstant.convertIdToLong(String.valueOf(ServletUtil.getRequestHeaderSchoolId()));
+        courseUnitOperateService.combineCollegeInspectToTeach(schoolId,collegeCombineParamsListList);
+        return ResultUtil.ok();
+    }
+
     /**
      * 更新或新增专业信息
      *

+ 1 - 1
teachcloud-report/src/test/java/com/qmth/teachcloud/report/report/CourseUnitOperateServiceTest.java

@@ -52,7 +52,7 @@ public class CourseUnitOperateServiceTest {
 
     @Test
     public void testChangeSysUser() throws IOException, NoSuchFieldException {
-        File file = new File("C:\\Users\\ASUS\\Desktop\\教研分析演示文件\\用户文件.xlsx");
+        File file = new File("C:\\Users\\ASUS\\Desktop\\教研分析演示文件\\用户变更.xlsx");
         MultipartFile m = this.transferFtoM(file);
         Long schoolId = 2L;
         System.out.println(courseUnitOperateService.changeSysUser(m, schoolId));