Browse Source

add:demo-data

caozixuan 3 năm trước cách đây
mục cha
commit
58d68d8e87
14 tập tin đã thay đổi với 1091 bổ sung428 xóa
  1. 43 5
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java
  2. 54 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/threadPool/AnalyzeThreadExecutorConfig.java
  3. 69 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/threadPool/VisiableThreadPoolTaskExecutor.java
  4. 131 0
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/ChangNamesService.java
  5. 10 2
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/CourseUnitOperateService.java
  6. 547 0
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/ChangNamesServiceImpl.java
  7. 40 394
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/CourseUnitOperateServiceImpl.java
  8. 26 2
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/TBExamStudentServiceImpl.java
  9. 21 0
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/templete/service/ComplicatedCalculateAsyncService.java
  10. 27 0
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/templete/service/impl/ComplicatedCalculateAsyncServiceImpl.java
  11. 93 0
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/utils/RandomNameUtil.java
  12. 12 0
      teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/BasicDatasourceController.java
  13. 4 0
      teachcloud-report/src/test/java/com/qmth/teachcloud/report/report/CourseReportTest.java
  14. 14 25
      teachcloud-report/src/test/java/com/qmth/teachcloud/report/report/CourseUnitOperateServiceTest.java

+ 43 - 5
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -5,9 +5,8 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 
 import java.io.File;
 import java.nio.charset.Charset;
-import java.util.Objects;
-import java.util.StringJoiner;
-import java.util.UUID;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 系统常量
@@ -252,19 +251,58 @@ public class SystemConstant {
 
     /**
      * String 类型的参数不为空
+     *
      * @param str 参数
      * @return true :不为空、false :为空
      */
-    public static boolean strNotNull(String str){
+    public static boolean strNotNull(String str) {
         return str != null && str.length() > 0 && !str.equals("null");
     }
 
     /**
      * Long 类型的参数不为空
+     *
      * @param x 参数
      * @return true:不为空、false:为空
      */
-    public static boolean longNotNull(Long x){
+    public static boolean longNotNull(Long x) {
         return x != null && x > 0;
     }
+
+    /**
+     * 跨步数组(将list集合按照数量拆分成多个集合)
+     *
+     * @param datasource 数据源(初始大数据集合)
+     * @param step       跨步(多少个元素一个集合)
+     * @param <T>        泛型
+     * @return 拆分好地集合的集合
+     */
+    public static <T> List<List<T>> getStepList(List<T> datasource, int step) {
+        List<List<T>> result = new ArrayList<>();
+        int size = datasource.size();
+        for (int i = 0; i < size; i = i + step) {
+            List<T> cell = datasource.stream().skip(i).limit(step).collect(Collectors.toList());
+            result.add(cell);
+        }
+        return result;
+    }
+
+    /**
+     * 跨步数组(将list集合按照cpu核心数量拆分成多个集合)
+     *
+     * @param datasource 数据源
+     * @param <T>        泛型
+     * @return 拆分好地集合的集合
+     */
+    public static <T> List<List<T>> getStepList(List<T> datasource) {
+        int cpuNum = Runtime.getRuntime().availableProcessors();
+        int step = datasource.size() / cpuNum + 1;
+        List<List<T>> result = new ArrayList<>();
+        int size = datasource.size();
+        for (int i = 0; i < size; i = i + step) {
+            List<T> cell = datasource.stream().skip(i).limit(step).collect(Collectors.toList());
+            result.add(cell);
+        }
+        return result;
+    }
 }

+ 54 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/threadPool/AnalyzeThreadExecutorConfig.java

@@ -0,0 +1,54 @@
+package com.qmth.teachcloud.common.threadPool;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * @Description: 计算线程池
+ * @Author: CaoZixuan
+ * @Date: 2022-03-10
+ */
+@Configuration
+@EnableAsync
+public class AnalyzeThreadExecutorConfig {
+    private final static Logger log = LoggerFactory.getLogger(AnalyzeThreadExecutorConfig.class);
+    private static final int cpuNum = Runtime.getRuntime().availableProcessors();
+
+    @Value("${sys.config.threadPoolCoreSize}")
+    Integer threadPoolCoreSize;
+
+    @Value("${sys.config.analyzeThreadPoolCoreSize}")
+    boolean customThreadPoolCoreSize;
+
+    @Bean
+    public Executor analyzeThreadPool(){
+        log.info("start analyzeThreadPool");
+        ThreadPoolTaskExecutor executor = new VisiableThreadPoolTaskExecutor();
+        // 配置线程数
+        if(! customThreadPoolCoreSize && cpuNum > 0){
+            executor.setCorePoolSize(cpuNum + 1);
+            executor.setMaxPoolSize(cpuNum * 2);
+        }else {
+            executor.setCorePoolSize(threadPoolCoreSize);
+            executor.setMaxPoolSize(threadPoolCoreSize * 2);
+        }
+        //配置队列大小
+        executor.setQueueCapacity(500);
+        //配置线程池中的线程的名称前缀
+        executor.setThreadNamePrefix("analyzeThreadPool-");
+        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
+        // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        //执行初始化
+        executor.initialize();
+        return executor;
+    }
+}

+ 69 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/threadPool/VisiableThreadPoolTaskExecutor.java

@@ -0,0 +1,69 @@
+package com.qmth.teachcloud.common.threadPool;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.util.concurrent.ListenableFuture;
+
+import javax.validation.constraints.NotNull;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Future;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * @Description: 线程池监控
+ * @Author: CaoZixuan
+ * @Date: 2022-03-10
+ */
+public class VisiableThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
+    private static final Logger logger = LoggerFactory.getLogger(VisiableThreadPoolTaskExecutor.class);
+
+    private void showThreadPoolInfo(String prefix){
+        ThreadPoolExecutor threadPoolExecutor = getThreadPoolExecutor();
+
+        logger.info("{}, {},taskCount [{}], completedTaskCount [{}], activeCount [{}], queueSize [{}]",
+                this.getThreadNamePrefix(),
+                prefix,
+                threadPoolExecutor.getTaskCount(),
+                threadPoolExecutor.getCompletedTaskCount(),
+                threadPoolExecutor.getActiveCount(),
+                threadPoolExecutor.getQueue().size());
+    }
+
+    @Override
+    public void execute(Runnable task) {
+        showThreadPoolInfo("1. do execute");
+        super.execute(task);
+    }
+
+    @Override
+    public void execute(@NotNull Runnable task, long startTimeout) {
+        showThreadPoolInfo("2. do execute");
+        super.execute(task, startTimeout);
+    }
+
+    @Override
+    public @NotNull
+    Future<?> submit(@NotNull Runnable task) {
+        showThreadPoolInfo("1. do submit");
+        return super.submit(task);
+    }
+
+    @Override
+    public <T> @NotNull Future<T> submit(@NotNull Callable<T> task) {
+        showThreadPoolInfo("2. do submit");
+        return super.submit(task);
+    }
+
+    @Override
+    public @NotNull ListenableFuture<?> submitListenable(@NotNull Runnable task) {
+        showThreadPoolInfo("1. do submitListenable");
+        return super.submitListenable(task);
+    }
+
+    @Override
+    public <T> @NotNull ListenableFuture<T> submitListenable(@NotNull Callable<T> task) {
+        showThreadPoolInfo("2. do submitListenable");
+        return super.submitListenable(task);
+    }
+}

+ 131 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/ChangNamesService.java

@@ -0,0 +1,131 @@
+package com.qmth.teachcloud.report.business.service;
+
+import org.springframework.scheduling.annotation.Async;
+
+/**
+ * @Description: 变更名称服务类()
+ * @Author: CaoZixuan
+ * @Date: 2022-03-10
+ */
+public interface ChangNamesService {
+
+    /**
+     * 更新基础表数据
+     */
+    @Async("analyzeThreadPool")
+    void changeBasicTables();
+
+    /**
+     * 更新表't_a_exam_course'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTAExamCourse() throws InterruptedException;
+
+    /**
+     * 更新表 't_a_exam_course_clazz'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTAExamCourseClazz();
+
+    /**
+     * 更新表 't_a_exam_course_college_inspect'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTAExamCourseCollegeInspect();
+
+    /**
+     * 更新表 't_a_exam_course_college_inspect_dio'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTaExamCourseCollegeInspectDio();
+
+    /**
+     * 更新表 't_a_exam_course_college_paper_struct'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTaExamCourseCollegePaperStruct();
+
+    /**
+     * 更新表 't_a_exam_course_college_teacher'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTaExamCourseCollegeTeacher();
+
+    /**
+     * 更新表 't_a_exam_course_difficult'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTaExamCourseDifficultService();
+
+    /**
+     * 更新表 't_a_exam_course_dio'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTaExamCourseDio();
+
+    /**
+     * 更新表 't_a_exam_course_record_dio'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTaExamCourseRecordDio();
+
+    /**
+     * 更新表 't_a_exam_course_record_mod'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTaExamCourseRecordMod();
+
+    /**
+     * 更新表 't_a_exam_course_teacher'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTaExamCourseTeacher();
+
+    /**
+     * 更新表 't_a_exam_course_teacher_college_difficult'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTaExamCourseTeacherCollegeDifficult();
+
+    /**
+     * 更新表 't_a_exam_course_teacher_college_dio'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTaExamCourseTeacherCollegeDio();
+
+    /**
+     * 更新表 't_a_exam_course_teacher_college_paper_struct'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTaExamCourseTeacherCollegePaperStruct();
+
+    /**
+     * 更新表 't_a_exam_course_teacher_difficult'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTaExamCourseTeacherDifficult();
+
+    /**
+     * 更新表 't_a_exam_course_teacher_dio'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTaExamCourseTeacherDio();
+
+    /**
+     * 更新表 't_a_exam_course_teacher_paper_struct'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTaExamCourseTeacherPaperStruct();
+
+    /**
+     * 更新表 't_a_exam_total'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTAExamTotal();
+
+    /**
+     * 更新表 't_a_paper_struct'
+     */
+    @Async("analyzeThreadPool")
+    void changeTableTAPaperStruct();
+}

+ 10 - 2
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/CourseUnitOperateService.java

@@ -3,6 +3,7 @@ package com.qmth.teachcloud.report.business.service;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.util.concurrent.ExecutionException;
 
 /**
  * @Description: 课程单元操作服务类(课程删除、以课程为单位的改名操作)
@@ -30,7 +31,7 @@ public interface CourseUnitOperateService {
     String changeSysOrg(MultipartFile file, Long schoolId) throws IOException, NoSuchFieldException;
 
     /**
-     * 演示用变更
+     * 演示用变更用户
      *
      * @param file     文件
      * @param schoolId 学校id(检测器)
@@ -38,8 +39,15 @@ public interface CourseUnitOperateService {
      */
     String changeSysUser(MultipartFile file, Long schoolId) throws IOException, NoSuchFieldException;
 
+    /**
+     * 演示用变更学生
+     *
+     * @param schoolId 学校id
+     */
+    void changeStudent(Long schoolId);
+
     /**
      * 制作真实数据
      */
-    void createDemoData();
+    void createDemoData() throws ExecutionException, InterruptedException;
 }

+ 547 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/ChangNamesServiceImpl.java

@@ -0,0 +1,547 @@
+package com.qmth.teachcloud.report.business.service.impl;
+
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicCourse;
+import com.qmth.teachcloud.common.entity.SysOrg;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.service.BasicCourseService;
+import com.qmth.teachcloud.common.service.SysOrgService;
+import com.qmth.teachcloud.common.service.SysUserService;
+import com.qmth.teachcloud.report.business.entity.TAExamCourse;
+import com.qmth.teachcloud.report.business.entity.TAExamCourseRecordDio;
+import com.qmth.teachcloud.report.business.entity.TAExamTotal;
+import com.qmth.teachcloud.report.business.entity.TBStudent;
+import com.qmth.teachcloud.report.business.service.*;
+import com.qmth.teachcloud.report.business.templete.service.ComplicatedCalculateAsyncService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 更改名称服务实现类
+ * @Author: CaoZixuan
+ * @Date: 2022-03-11
+ */
+@Service
+public class ChangNamesServiceImpl implements ChangNamesService {
+    @Resource
+    private BasicCourseService basicCourseService;
+    @Resource
+    private SysOrgService sysOrgService;
+    @Resource
+    private SysUserService sysUserService;
+    @Resource
+    private TBCommonLevelConfigService tbCommonLevelConfigService;
+    @Resource
+    private TBCommonRankLevelConfigService tbCommonRankLevelConfigService;
+    @Resource
+    private TBDimensionService tbDimensionService;
+    @Resource
+    private TBExamCourseService tbExamCourseService;
+    @Resource
+    private TBExamStudentService tbExamStudentService;
+    @Resource
+    private TBModuleConfigService tbModuleConfigService;
+    @Resource
+    private TBModuleProficiencyService tbModuleProficiencyService;
+    @Resource
+    private TBPaperService tbPaperService;
+    @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 TAExamCourseDioService taExamCourseDioService;
+    @Resource
+    private TAExamCourseRecordDioService taExamCourseRecordDioService;
+    @Resource
+    private TAExamCourseRecordModService taExamCourseRecordModService;
+    @Resource
+    private TAExamCourseTeacherService taExamCourseTeacherService;
+    @Resource
+    private TAExamCourseTeacherCollegeDifficultService taExamCourseTeacherCollegeDifficultService;
+    @Resource
+    private TAExamCourseTeacherCollegeDioService taExamCourseTeacherCollegeDioService;
+    @Resource
+    private TAExamCourseTeacherCollegePaperStructService taExamCourseTeacherCollegePaperStructService;
+    @Resource
+    private TAExamCourseTeacherDifficultService taExamCourseTeacherDifficultService;
+    @Resource
+    private TAExamCourseTeacherDioService taExamCourseTeacherDioService;
+    @Resource
+    private TAExamCourseTeacherPaperStructService taExamCourseTeacherPaperStructService;
+    @Resource
+    private TAExamTotalService taExamTotalService;
+    @Resource
+    private TAPaperStructService taPaperStructService;
+    @Resource
+    private TBStudentService tbStudentService;
+    @Resource
+    private ComplicatedCalculateAsyncService complicatedCalculateAsyncService;
+
+    private static final Logger log = LoggerFactory.getLogger(ChangNamesServiceImpl.class);
+
+
+    /**
+     * 查询 课程编号 - 课程名称 map
+     *
+     * @return map
+     */
+    private Map<String, String> findCourseMap() {
+        Map<String, String> map = new HashMap<>();
+        for (BasicCourse basicCourse : basicCourseService.list()) {
+            map.put(basicCourse.getCode(), basicCourse.getName());
+        }
+        return map;
+    }
+
+    /**
+     * 查询 机构id - 机构名称 map
+     *
+     * @return map
+     */
+    private Map<Long, String> findOrgMap() {
+        Map<Long, String> map = new HashMap<>();
+        for (SysOrg sysOrg : sysOrgService.list()) {
+            map.put(sysOrg.getId(), sysOrg.getName());
+        }
+        return map;
+    }
+
+    /**
+     * 查询 用户登录名(工号) - 用户真实名
+     *
+     * @return map
+     */
+    private Map<String, String> findUserCodeNameMap() {
+        Map<String, String> map = new HashMap<>();
+        for (SysUser sysUser : sysUserService.list()) {
+            map.put(sysUser.getLoginName(), sysUser.getRealName());
+        }
+        return map;
+    }
+
+    /**
+     * 查询 用户id - 用户真实名
+     *
+     * @return map
+     */
+    private Map<Long, String> findUserIdNameMap() {
+        Map<Long, String> map = new HashMap<>();
+        for (SysUser sysUser : sysUserService.list()) {
+            map.put(sysUser.getId(), sysUser.getRealName());
+        }
+        return map;
+    }
+
+    /**
+     * 查询 基础学生id - 基础学生名称
+     * @return map
+     */
+    private Map<Long,String> findStudentIdNameMap(){
+        Map<Long,String> map = new HashMap<>();
+        for (TBStudent tbStudent : tbStudentService.list()) {
+            map.put(tbStudent.getId(),tbStudent.getName());
+        }
+        return map;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeBasicTables() {
+        Map<String, String> courseMap = this.findCourseMap();
+        Map<Long, String> orgMap = this.findOrgMap();
+        Map<String, String> userMap = this.findUserCodeNameMap();
+        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
+        tbCommonRankLevelConfigService.updateBatchById(tbCommonRankLevelConfigService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
+        // t_b_dimension
+        tbDimensionService.updateBatchById(tbDimensionService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
+        // t_b_exam_course
+        tbExamCourseService.updateBatchById(tbExamCourseService.list().stream().peek(e -> {
+            if (courseMap.containsKey(e.getCourseCode())) {
+                e.setCourseName(courseMap.get(e.getCourseCode()));
+            }
+            if (orgMap.containsKey(e.getTeachCollegeId())) {
+                e.setTeachCollegeName(orgMap.get(e.getTeachCollegeId()));
+            }
+        }).collect(Collectors.toList()));
+        // t_b_exam_student
+        tbExamStudentService.updateBatchById(tbExamStudentService.list().stream()
+                .peek(e -> {
+                    e.setCourseName(courseMap.get(e.getCourseCode()));
+                    e.setName(studentMap.get(e.getStudentId()));
+                }).collect(Collectors.toList()));
+        // t_b_module_config
+        tbModuleConfigService.updateBatchById(tbModuleConfigService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
+        // t_b_module_proficiency
+        tbModuleProficiencyService.updateBatchById(tbModuleProficiencyService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
+        // t_b_paper
+        tbPaperService.updateBatchById(tbPaperService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
+        // t_b_teacher
+        tbTeacherService.updateBatchById(tbTeacherService.list().stream().filter(e -> userMap.containsKey(e.getTeacherCode())).peek(e -> e.setTeacherName(userMap.get(e.getTeacherCode()))).collect(Collectors.toList()));
+        log.info("基础表't_b'更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTAExamCourse() {
+        Map<String, String> courseMap = this.findCourseMap();
+        Map<Long, String> orgMap = this.findOrgMap();
+        List<SysOrg> sysOrgList = sysOrgService.list();
+
+        List<TAExamCourse> taExamCourseList = taExamCourseService.list();
+        for (TAExamCourse taExamCourse : taExamCourseList) {
+            Long schoolId = taExamCourse.getSchoolId();
+
+            if (courseMap.containsKey(taExamCourse.getCourseCode())) {
+                taExamCourse.setCourseName(courseMap.get(taExamCourse.getCourseCode()));
+            }
+            if (orgMap.containsKey(taExamCourse.getTeachCollegeId())) {
+                taExamCourse.setTeachCollegeName(orgMap.get(taExamCourse.getTeachCollegeId()));
+            }
+            String inspectCollegeNameStr = taExamCourse.getInspectCollegeNames();
+            List<String> newInspect = new ArrayList<>();
+            String[] inspectCollegeNameList = inspectCollegeNameStr.split("、");
+            for (String s : inspectCollegeNameList) {
+                List<SysOrg> cellList = sysOrgList.stream().filter(e -> e.getHistoricName().equals(s) && e.getSchoolId().equals(schoolId)).collect(Collectors.toList());
+                if (cellList.size() > 0) {
+                    if (cellList.size() > 1) {
+                        throw ExceptionResultEnum.ERROR.exception("数据异常");
+                    }
+                    SysOrg cell = cellList.get(0);
+                    newInspect.add(cell.getName());
+                }
+            }
+            if (newInspect.size() > 0) {
+                taExamCourse.setInspectCollegeNames(String.join("、", newInspect));
+            }
+        }
+        taExamCourseService.updateBatchById(taExamCourseList);
+        log.info("复杂表 't_a_exam_course' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTAExamCourseClazz() {
+        Map<String, String> courseMap = this.findCourseMap();
+        List<SysOrg> sysOrgList = sysOrgService.list();
+        taExamCourseClazzService.updateBatchById(taExamCourseClazzService.list().stream().peek(e -> {
+            if (courseMap.containsKey(e.getCourseCode())) {
+                e.setCourseName(courseMap.get(e.getCourseCode()));
+            }
+            List<SysOrg> cellList = sysOrgList.stream().filter(o -> o.getHistoricName().equals(e.getCollegeName()) && o.getSchoolId().equals(e.getSchoolId())).collect(Collectors.toList());
+            if (cellList.size() > 1) {
+                throw ExceptionResultEnum.ERROR.exception("数据异常");
+            }
+            if (cellList.size() == 1) {
+                e.setCollegeName(cellList.get(0).getName());
+            }
+        }).collect(Collectors.toList()));
+        log.info("表 't_a_exam_course_clazz' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTAExamCourseCollegeInspect() {
+        Map<String, String> courseMap = this.findCourseMap();
+        taExamCourseCollegeInspectService.updateBatchById(taExamCourseCollegeInspectService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
+        log.info("表 't_a_exam_course_college_inspect' 更新完成");
+    }
+
+    @Override
+    public void changeTableTaExamCourseCollegeInspectDio() {
+        Map<String, String> courseMap = this.findCourseMap();
+        Map<Long, String> orgMap = this.findOrgMap();
+        taExamCourseCollegeInspectDioService.updateBatchById(taExamCourseCollegeInspectDioService.list().stream().peek(e -> {
+            if (courseMap.containsKey(e.getCourseCode())) {
+                e.setCourseName(courseMap.get(e.getCourseCode()));
+            }
+            if (orgMap.containsKey(e.getInspectCollegeId())) {
+                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
+            }
+        }).collect(Collectors.toList()));
+        log.info("表 't_a_exam_course_college_inspect_dio' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTaExamCourseCollegePaperStruct() {
+        Map<String, String> courseMap = this.findCourseMap();
+        Map<Long, String> orgMap = this.findOrgMap();
+        taExamCourseCollegePaperStructService.updateBatchById(taExamCourseCollegePaperStructService.list().stream().peek(e -> {
+            if (courseMap.containsKey(e.getCourseCode())) {
+                e.setCourseName(courseMap.get(e.getCourseCode()));
+            }
+            if (orgMap.containsKey(e.getInspectCollegeId())) {
+                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
+            }
+        }).collect(Collectors.toList()));
+        log.info("表 't_a_exam_course_college_paper_struct' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTaExamCourseCollegeTeacher() {
+        Map<String, String> courseMap = this.findCourseMap();
+        Map<Long, String> orgMap = this.findOrgMap();
+        Map<Long, String> userMap = this.findUserIdNameMap();
+        taExamCourseCollegeTeacherService.updateBatchById(taExamCourseCollegeTeacherService.list().stream().peek(e -> {
+            if (courseMap.containsKey(e.getCourseCode())) {
+                e.setCourseName(courseMap.get(e.getCourseCode()));
+            }
+            if (orgMap.containsKey(e.getInspectCollegeId())) {
+                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
+            }
+            if (orgMap.containsKey(e.getTeachCollegeId())) {
+                e.setTeachCollegeName(orgMap.get(e.getTeachCollegeId()));
+            }
+            if (userMap.containsKey(e.getTeacherId())) {
+                e.setTeacherName(userMap.get(e.getTeacherId()));
+            }
+        }).collect(Collectors.toList()));
+        log.info("表 't_a_exam_course_college_teacher' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTaExamCourseDifficultService() {
+        Map<String, String> courseMap = this.findCourseMap();
+        taExamCourseDifficultService.updateBatchById(taExamCourseDifficultService.list().stream()
+                .filter(e -> courseMap.containsKey(e.getCourseCode()))
+                .peek(e -> e.setCourseName(courseMap.get(e.getCourseCode())))
+                .collect(Collectors.toList()));
+        log.info("表 't_a_exam_course_difficult' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTaExamCourseDio() {
+        Map<String, String> courseMap = this.findCourseMap();
+        taExamCourseDioService.updateBatchById(taExamCourseDioService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
+        log.info("表 't_a_exam_course_dio' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTaExamCourseRecordDio() {
+        Map<String, String> courseMap = this.findCourseMap();
+        Map<Long, String> orgMap = this.findOrgMap();
+        Map<Long, String> userMap = this.findUserIdNameMap();
+        List<TAExamCourseRecordDio> taExamCourseRecordDioList = taExamCourseRecordDioService.list().stream().peek(e -> {
+            if (courseMap.containsKey(e.getCourseCode())) {
+                e.setCourseName(courseMap.get(e.getCourseCode()));
+            }
+            if (orgMap.containsKey(e.getInspectCollegeId())) {
+                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
+            }
+            if (userMap.containsKey(e.getTeacherId())) {
+                e.setTeacherName(userMap.get(e.getTeacherId()));
+            }
+        }).collect(Collectors.toList());
+        List<List<TAExamCourseRecordDio>> stepList = SystemConstant.getStepList(taExamCourseRecordDioList);
+        stepList.forEach(e -> complicatedCalculateAsyncService.updateTableTaExamCourseRecordDioBatchById(e));
+//        log.info("表 't_a_exam_course_record_dio' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTaExamCourseRecordMod() {
+        Map<String, String> courseMap = this.findCourseMap();
+        Map<Long, String> orgMap = this.findOrgMap();
+        taExamCourseRecordModService.updateBatchById(taExamCourseRecordModService.list().stream().peek(e -> {
+            if (courseMap.containsKey(e.getCourseCode())) {
+                e.setCourseName(courseMap.get(e.getCourseCode()));
+            }
+            if (orgMap.containsKey(e.getInspectCollegeId())) {
+                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
+            }
+        }).collect(Collectors.toList()));
+        log.info("表 't_a_exam_course_record_mod' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTaExamCourseTeacher() {
+        Map<String, String> courseMap = this.findCourseMap();
+        Map<Long, String> userMap = this.findUserIdNameMap();
+        taExamCourseTeacherService.updateBatchById(taExamCourseTeacherService.list().stream().peek(e -> {
+            if (courseMap.containsKey(e.getCourseCode())) {
+                e.setCourseName(courseMap.get(e.getCourseCode()));
+            }
+            if (userMap.containsKey(e.getTeacherId())) {
+                e.setTeacherName(userMap.get(e.getTeacherId()));
+            }
+        }).collect(Collectors.toList()));
+        log.info("表 't_a_exam_course_teacher' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTaExamCourseTeacherCollegeDifficult() {
+        Map<String, String> courseMap = this.findCourseMap();
+        Map<Long, String> orgMap = this.findOrgMap();
+        Map<Long, String> userMap = this.findUserIdNameMap();
+        taExamCourseTeacherCollegeDifficultService.updateBatchById(taExamCourseTeacherCollegeDifficultService.list().stream().peek(e -> {
+            if (courseMap.containsKey(e.getCourseCode())) {
+                e.setCourseName(courseMap.get(e.getCourseCode()));
+            }
+            if (orgMap.containsKey(e.getInspectCollegeId())) {
+                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
+            }
+            if (userMap.containsKey(e.getTeacherId())) {
+                e.setTeacherName(userMap.get(e.getTeacherId()));
+            }
+        }).collect(Collectors.toList()));
+        log.info("表 't_a_exam_course_teacher_college_difficult' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTaExamCourseTeacherCollegeDio() {
+        Map<String, String> courseMap = this.findCourseMap();
+        Map<Long, String> orgMap = this.findOrgMap();
+        Map<Long, String> userMap = this.findUserIdNameMap();
+        taExamCourseTeacherCollegeDioService.updateBatchById(taExamCourseTeacherCollegeDioService.list().stream().peek(e -> {
+            if (courseMap.containsKey(e.getCourseCode())) {
+                e.setCourseName(courseMap.get(e.getCourseCode()));
+            }
+            if (orgMap.containsKey(e.getInspectCollegeId())) {
+                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
+            }
+            if (userMap.containsKey(e.getTeacherId())) {
+                e.setTeacherName(userMap.get(e.getTeacherId()));
+            }
+        }).collect(Collectors.toList()));
+        log.info("表 't_a_exam_course_teacher_college_dio' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTaExamCourseTeacherCollegePaperStruct() {
+        Map<String, String> courseMap = this.findCourseMap();
+        Map<Long, String> orgMap = this.findOrgMap();
+        Map<Long, String> userMap = this.findUserIdNameMap();
+        taExamCourseTeacherCollegePaperStructService.updateBatchById(taExamCourseTeacherCollegePaperStructService.list().stream().peek(e -> {
+            if (courseMap.containsKey(e.getCourseCode())) {
+                e.setCourseName(courseMap.get(e.getCourseCode()));
+            }
+            if (orgMap.containsKey(e.getInspectCollegeId())) {
+                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
+            }
+            if (userMap.containsKey(e.getTeacherId())) {
+                e.setTeacherName(userMap.get(e.getTeacherId()));
+            }
+        }).collect(Collectors.toList()));
+        log.info("表 't_a_exam_course_teacher_college_paper_struct' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTaExamCourseTeacherDifficult() {
+        Map<String, String> courseMap = this.findCourseMap();
+        Map<Long, String> userMap = this.findUserIdNameMap();
+        taExamCourseTeacherDifficultService.updateBatchById(taExamCourseTeacherDifficultService.list().stream().peek(e -> {
+            if (courseMap.containsKey(e.getCourseCode())) {
+                e.setCourseName(courseMap.get(e.getCourseCode()));
+            }
+            if (userMap.containsKey(e.getTeacherId())) {
+                e.setTeacherName(userMap.get(e.getTeacherId()));
+            }
+        }).collect(Collectors.toList()));
+        log.info("表 't_a_exam_course_teacher_difficult' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTaExamCourseTeacherDio() {
+        Map<String, String> courseMap = this.findCourseMap();
+        Map<Long, String> userMap = this.findUserIdNameMap();
+        taExamCourseTeacherDioService.updateBatchById(taExamCourseTeacherDioService.list().stream().peek(e -> {
+            if (courseMap.containsKey(e.getCourseCode())) {
+                e.setCourseName(courseMap.get(e.getCourseCode()));
+            }
+            if (userMap.containsKey(e.getTeacherId())) {
+                e.setTeacherName(userMap.get(e.getTeacherId()));
+            }
+        }).collect(Collectors.toList()));
+        log.info("表 't_a_exam_course_teacher_dio' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTaExamCourseTeacherPaperStruct() {
+        Map<String, String> courseMap = this.findCourseMap();
+        Map<Long, String> userMap = this.findUserIdNameMap();
+        taExamCourseTeacherPaperStructService.updateBatchById(taExamCourseTeacherPaperStructService.list().stream().peek(e -> {
+            if (courseMap.containsKey(e.getCourseCode())) {
+                e.setCourseName(courseMap.get(e.getCourseCode()));
+            }
+            if (userMap.containsKey(e.getTeacherId())) {
+                e.setTeacherName(userMap.get(e.getTeacherId()));
+            }
+        }).collect(Collectors.toList()));
+        log.info("表 't_a_exam_course_teacher_paper_struct' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTAExamTotal() {
+        List<SysOrg> sysOrgList = sysOrgService.list();
+        List<TAExamTotal> taExamTotalList = taExamTotalService.list();
+        for (TAExamTotal taExamTotal : taExamTotalList) {
+            String collegeNameStr = taExamTotal.getCollegeNames();
+            List<String> newCollegeList = new ArrayList<>();
+            String[] collegeNameList = collegeNameStr.split("、");
+            for (String s : collegeNameList) {
+                List<SysOrg> cellList = sysOrgList.stream().filter(e -> e.getHistoricName().equals(s) && e.getSchoolId().equals(taExamTotal.getSchoolId())).collect(Collectors.toList());
+                if (cellList.size() > 0) {
+                    if (cellList.size() > 1) {
+                        throw ExceptionResultEnum.ERROR.exception("数据异常");
+                    }
+                    SysOrg cell = cellList.get(0);
+                    newCollegeList.add(cell.getName());
+                }
+            }
+            if (newCollegeList.size() > 0) {
+                taExamTotal.setCollegeNames(String.join("、", newCollegeList));
+            }
+        }
+        log.info("表 't_a_exam_total' 更新完成");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeTableTAPaperStruct() {
+        Map<String, String> courseMap = this.findCourseMap();
+        taPaperStructService.updateBatchById(taPaperStructService.list().stream().peek(e -> {
+            if (courseMap.containsKey(e.getCourseCode())) {
+                e.setCourseName(courseMap.get(e.getCourseCode()));
+            }
+        }).collect(Collectors.toList()));
+        log.info("表 't_a_paper_struct' 更新完成");
+    }
+}

+ 40 - 394
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/CourseUnitOperateServiceImpl.java

@@ -15,10 +15,13 @@ 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.entity.TAExamCourse;
-import com.qmth.teachcloud.report.business.entity.TAExamTotal;
-import com.qmth.teachcloud.report.business.service.*;
-import org.springframework.scheduling.annotation.Async;
+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.utils.RandomNameUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.LinkedMultiValueMap;
@@ -43,61 +46,11 @@ public class CourseUnitOperateServiceImpl implements CourseUnitOperateService {
     @Resource
     private SysUserService sysUserService;
     @Resource
-    private TBCommonLevelConfigService tbCommonLevelConfigService;
+    private TBStudentService tbStudentService;
     @Resource
-    private TBCommonRankLevelConfigService tbCommonRankLevelConfigService;
-    @Resource
-    private TBDimensionService tbDimensionService;
-    @Resource
-    private TBExamCourseService tbExamCourseService;
-    @Resource
-    private TBExamStudentService tbExamStudentService;
-    @Resource
-    private TBModuleConfigService tbModuleConfigService;
-    @Resource
-    private TBModuleProficiencyService tbModuleProficiencyService;
-    @Resource
-    private TBPaperService tbPaperService;
-    @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 TAExamCourseDioService taExamCourseDioService;
-    @Resource
-    private TAExamCourseRecordDioService taExamCourseRecordDioService;
-    @Resource
-    private TAExamCourseRecordModService taExamCourseRecordModService;
-    @Resource
-    private TAExamCourseTeacherService taExamCourseTeacherService;
-    @Resource
-    private TAExamCourseTeacherCollegeDifficultService taExamCourseTeacherCollegeDifficultService;
-    @Resource
-    private TAExamCourseTeacherCollegeDioService taExamCourseTeacherCollegeDioService;
-    @Resource
-    private TAExamCourseTeacherCollegePaperStructService taExamCourseTeacherCollegePaperStructService;
-    @Resource
-    private TAExamCourseTeacherDifficultService taExamCourseTeacherDifficultService;
-    @Resource
-    private TAExamCourseTeacherDioService taExamCourseTeacherDioService;
-    @Resource
-    private TAExamCourseTeacherPaperStructService taExamCourseTeacherPaperStructService;
-    @Resource
-    private TAExamTotalService taExamTotalService;
-    @Resource
-    private TAPaperStructService taPaperStructService;
+    private ChangNamesService changNamesService;
+
+    private static final Logger log = LoggerFactory.getLogger(CourseUnitOperateServiceImpl.class);
 
 
     @Transactional(rollbackFor = Exception.class)
@@ -269,344 +222,37 @@ public class CourseUnitOperateServiceImpl implements CourseUnitOperateService {
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void createDemoData() {
-        this.changeBasicDataTable();
-        this.changeAnalyzeDataTable();
-    }
-
-    /**
-     * 查询 课程编号 - 课程名称 map
-     *
-     * @return map
-     */
-    private Map<String, String> findCourseMap() {
-        Map<String, String> map = new HashMap<>();
-        for (BasicCourse basicCourse : basicCourseService.list()) {
-            map.put(basicCourse.getCode(), basicCourse.getName());
+    public void changeStudent(Long schoolId) {
+        List<TBStudent> historicData = tbStudentService.list(new QueryWrapper<TBStudent>().lambda().eq(TBStudent::getSchoolId,schoolId));
+        for (TBStudent historicDatum : historicData) {
+            historicDatum.setName(RandomNameUtil.getName());
         }
-        return map;
+        tbStudentService.updateBatchById(historicData);
     }
 
-    /**
-     * 查询 机构id - 机构名称 map
-     *
-     * @return map
-     */
-    private Map<Long, String> findOrgMap() {
-        Map<Long, String> map = new HashMap<>();
-        for (SysOrg sysOrg : sysOrgService.list()) {
-            map.put(sysOrg.getId(), sysOrg.getName());
-        }
-        return map;
-    }
-
-    /**
-     * 查询 用户登录名(工号) - 用户真实名
-     *
-     * @return map
-     */
-    private Map<String, String> findUserCodeNameMap() {
-        Map<String, String> map = new HashMap<>();
-        for (SysUser sysUser : sysUserService.list()) {
-            map.put(sysUser.getLoginName(), sysUser.getRealName());
-        }
-        return map;
-    }
-
-    /**
-     * 查询 用户id - 用户真实名
-     *
-     * @return map
-     */
-    private Map<Long, String> findUserIdNameMap() {
-        Map<Long, String> map = new HashMap<>();
-        for (SysUser sysUser : sysUserService.list()) {
-            map.put(sysUser.getId(), sysUser.getRealName());
-        }
-        return map;
-    }
-
-
-    /**
-     * 更新基础数据表
-     */
-    private void changeBasicDataTable() {
-        Map<String, String> courseMap = this.findCourseMap();
-        Map<Long, String> orgMap = this.findOrgMap();
-        Map<String, String> userMap = this.findUserCodeNameMap();
-        // 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
-        tbCommonRankLevelConfigService.updateBatchById(tbCommonRankLevelConfigService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
-        // t_b_dimension
-        tbDimensionService.updateBatchById(tbDimensionService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
-        // t_b_exam_course
-        tbExamCourseService.updateBatchById(tbExamCourseService.list().stream().peek(e -> {
-            if (courseMap.containsKey(e.getCourseCode())) {
-                e.setCourseName(courseMap.get(e.getCourseCode()));
-            }
-            if (orgMap.containsKey(e.getTeachCollegeId())) {
-                e.setTeachCollegeName(orgMap.get(e.getTeachCollegeId()));
-            }
-        }).collect(Collectors.toList()));
-        // t_b_exam_student
-        tbExamStudentService.updateBatchById(tbExamStudentService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
-        // t_b_module_config
-        tbModuleConfigService.updateBatchById(tbModuleConfigService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
-        // t_b_module_proficiency
-        tbModuleProficiencyService.updateBatchById(tbModuleProficiencyService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
-        // t_b_paper
-        tbPaperService.updateBatchById(tbPaperService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
-        // t_b_teacher
-        tbTeacherService.updateBatchById(tbTeacherService.list().stream().filter(e -> userMap.containsKey(e.getTeacherCode())).peek(e -> e.setTeacherName(userMap.get(e.getTeacherCode()))).collect(Collectors.toList()));
-    }
-
-    /**
-     * 更新分析数据表
-     */
-    public void changeAnalyzeDataTable() {
-        Map<String, String> courseMap = this.findCourseMap();
-        Map<Long, String> orgMap = this.findOrgMap();
-        Map<Long, String> userMap = this.findUserIdNameMap();
-        List<SysOrg> sysOrgList = sysOrgService.list();
-
-        // t_a_exam_course
-        this.complicatedTableTAExamCourseChanged();
-
-        // t_a_exam_course_clazz
-        taExamCourseClazzService.updateBatchById(taExamCourseClazzService.list().stream().peek(e -> {
-            if (courseMap.containsKey(e.getCourseCode())) {
-                e.setCourseName(courseMap.get(e.getCourseCode()));
-            }
-            List<SysOrg> cellList = sysOrgList.stream().filter(o -> o.getHistoricName().equals(e.getCollegeName()) && o.getSchoolId().equals(e.getSchoolId())).collect(Collectors.toList());
-            if (cellList.size() > 1) {
-                throw ExceptionResultEnum.ERROR.exception("数据异常");
-            }
-            if (cellList.size() == 1) {
-                e.setCollegeName(cellList.get(0).getName());
-            }
-        }).collect(Collectors.toList()));
-
-        // t_a_exam_course_college_inspect
-        taExamCourseCollegeInspectService.updateBatchById(taExamCourseCollegeInspectService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
-
-        // t_a_exam_course_college_inspect_dio
-        taExamCourseCollegeInspectDioService.updateBatchById(taExamCourseCollegeInspectDioService.list().stream().peek(e -> {
-            if (courseMap.containsKey(e.getCourseCode())) {
-                e.setCourseName(courseMap.get(e.getCourseCode()));
-            }
-            if (orgMap.containsKey(e.getInspectCollegeId())) {
-                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
-            }
-        }).collect(Collectors.toList()));
-
-        // t_a_exam_course_college_paper_struct
-        taExamCourseCollegePaperStructService.updateBatchById(taExamCourseCollegePaperStructService.list().stream().peek(e -> {
-            if (courseMap.containsKey(e.getCourseCode())) {
-                e.setCourseName(courseMap.get(e.getCourseCode()));
-            }
-            if (orgMap.containsKey(e.getInspectCollegeId())) {
-                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
-            }
-        }).collect(Collectors.toList()));
-
-        // t_a_exam_course_college_teacher
-        taExamCourseCollegeTeacherService.updateBatchById(taExamCourseCollegeTeacherService.list().stream().peek(e -> {
-            if (courseMap.containsKey(e.getCourseCode())) {
-                e.setCourseName(courseMap.get(e.getCourseCode()));
-            }
-            if (orgMap.containsKey(e.getInspectCollegeId())) {
-                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
-            }
-            if (orgMap.containsKey(e.getTeachCollegeId())) {
-                e.setTeachCollegeName(orgMap.get(e.getTeachCollegeId()));
-            }
-            if (userMap.containsKey(e.getTeacherId())) {
-                e.setTeacherName(userMap.get(e.getTeacherId()));
-            }
-        }).collect(Collectors.toList()));
-
-        // t_a_exam_course_difficult
-        taExamCourseDifficultService.updateBatchById(taExamCourseDifficultService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
-
-        // t_a_exam_course_dio
-        taExamCourseDioService.updateBatchById(taExamCourseDioService.list().stream().filter(e -> courseMap.containsKey(e.getCourseCode())).peek(e -> e.setCourseName(courseMap.get(e.getCourseCode()))).collect(Collectors.toList()));
-
-        //t_a_exam_course_record_dio
-        taExamCourseRecordDioService.updateBatchById(taExamCourseRecordDioService.list().stream().peek(e -> {
-            if (courseMap.containsKey(e.getCourseCode())) {
-                e.setCourseName(courseMap.get(e.getCourseCode()));
-            }
-            if (orgMap.containsKey(e.getInspectCollegeId())) {
-                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
-            }
-            if (userMap.containsKey(e.getTeacherId())) {
-                e.setTeacherName(userMap.get(e.getTeacherId()));
-            }
-        }).collect(Collectors.toList()));
-
-        //t_a_exam_course_record_mod
-        taExamCourseRecordModService.updateBatchById(taExamCourseRecordModService.list().stream().peek(e -> {
-            if (courseMap.containsKey(e.getCourseCode())) {
-                e.setCourseName(courseMap.get(e.getCourseCode()));
-            }
-            if (orgMap.containsKey(e.getInspectCollegeId())) {
-                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
-            }
-        }).collect(Collectors.toList()));
-
-        //t_a_exam_course_teacher
-        taExamCourseTeacherService.updateBatchById(taExamCourseTeacherService.list().stream().peek(e -> {
-            if (courseMap.containsKey(e.getCourseCode())) {
-                e.setCourseName(courseMap.get(e.getCourseCode()));
-            }
-            if (userMap.containsKey(e.getTeacherId())) {
-                e.setTeacherName(userMap.get(e.getTeacherId()));
-            }
-        }).collect(Collectors.toList()));
-
-        //t_a_exam_course_teacher_college_difficult
-        taExamCourseTeacherCollegeDifficultService.updateBatchById(taExamCourseTeacherCollegeDifficultService.list().stream().peek(e -> {
-            if (courseMap.containsKey(e.getCourseCode())) {
-                e.setCourseName(courseMap.get(e.getCourseCode()));
-            }
-            if (orgMap.containsKey(e.getInspectCollegeId())) {
-                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
-            }
-            if (userMap.containsKey(e.getTeacherId())) {
-                e.setTeacherName(userMap.get(e.getTeacherId()));
-            }
-        }).collect(Collectors.toList()));
-
-        //t_a_exam_course_teacher_college_dio
-        taExamCourseTeacherCollegeDioService.updateBatchById(taExamCourseTeacherCollegeDioService.list().stream().peek(e -> {
-            if (courseMap.containsKey(e.getCourseCode())) {
-                e.setCourseName(courseMap.get(e.getCourseCode()));
-            }
-            if (orgMap.containsKey(e.getInspectCollegeId())) {
-                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
-            }
-            if (userMap.containsKey(e.getTeacherId())) {
-                e.setTeacherName(userMap.get(e.getTeacherId()));
-            }
-        }).collect(Collectors.toList()));
-
-        //t_a_exam_course_teacher_college_paper_struct
-        taExamCourseTeacherCollegePaperStructService.updateBatchById(taExamCourseTeacherCollegePaperStructService.list().stream().peek(e -> {
-            if (courseMap.containsKey(e.getCourseCode())) {
-                e.setCourseName(courseMap.get(e.getCourseCode()));
-            }
-            if (orgMap.containsKey(e.getInspectCollegeId())) {
-                e.setInspectCollegeName(orgMap.get(e.getInspectCollegeId()));
-            }
-            if (userMap.containsKey(e.getTeacherId())) {
-                e.setTeacherName(userMap.get(e.getTeacherId()));
-            }
-        }).collect(Collectors.toList()));
-
-        //t_a_exam_course_teacher_difficult
-        taExamCourseTeacherDifficultService.updateBatchById(taExamCourseTeacherDifficultService.list().stream().peek(e -> {
-            if (courseMap.containsKey(e.getCourseCode())) {
-                e.setCourseName(courseMap.get(e.getCourseCode()));
-            }
-            if (userMap.containsKey(e.getTeacherId())) {
-                e.setTeacherName(userMap.get(e.getTeacherId()));
-            }
-        }).collect(Collectors.toList()));
-
-        //t_a_exam_course_teacher_dio
-        taExamCourseTeacherDioService.updateBatchById(taExamCourseTeacherDioService.list().stream().peek(e -> {
-            if (courseMap.containsKey(e.getCourseCode())) {
-                e.setCourseName(courseMap.get(e.getCourseCode()));
-            }
-            if (userMap.containsKey(e.getTeacherId())) {
-                e.setTeacherName(userMap.get(e.getTeacherId()));
-            }
-        }).collect(Collectors.toList()));
-
-        //t_a_exam_course_teacher_paper_struct
-        taExamCourseTeacherPaperStructService.updateBatchById(taExamCourseTeacherPaperStructService.list().stream().peek(e -> {
-            if (courseMap.containsKey(e.getCourseCode())) {
-                e.setCourseName(courseMap.get(e.getCourseCode()));
-            }
-            if (userMap.containsKey(e.getTeacherId())) {
-                e.setTeacherName(userMap.get(e.getTeacherId()));
-            }
-        }).collect(Collectors.toList()));
-
-        //t_a_exam_total
-        this.complicatedTableTAExamTotalChanged();
-
-        //t_a_paper_struct
-        taPaperStructService.updateBatchById(taPaperStructService.list().stream().peek(e -> {
-            if (courseMap.containsKey(e.getCourseCode())) {
-                e.setCourseName(courseMap.get(e.getCourseCode()));
-            }
-        }).collect(Collectors.toList()));
-
-    }
-
-    /**
-     * 复杂表 't_a_exam_course' 创建
-     */
-    private void complicatedTableTAExamCourseChanged() {
-        Map<String, String> courseMap = this.findCourseMap();
-        Map<Long, String> orgMap = this.findOrgMap();
-        List<SysOrg> sysOrgList = sysOrgService.list();
-
-        List<TAExamCourse> taExamCourseList = taExamCourseService.list();
-        for (TAExamCourse taExamCourse : taExamCourseList) {
-            Long schoolId = taExamCourse.getSchoolId();
-
-            if (courseMap.containsKey(taExamCourse.getCourseCode())) {
-                taExamCourse.setCourseName(courseMap.get(taExamCourse.getCourseCode()));
-            }
-            if (orgMap.containsKey(taExamCourse.getTeachCollegeId())) {
-                taExamCourse.setTeachCollegeName(orgMap.get(taExamCourse.getTeachCollegeId()));
-            }
-            String inspectCollegeNameStr = taExamCourse.getInspectCollegeNames();
-            List<String> newInspect = new ArrayList<>();
-            String[] inspectCollegeNameList = inspectCollegeNameStr.split("、");
-            for (String s : inspectCollegeNameList) {
-                List<SysOrg> cellList = sysOrgList.stream().filter(e -> e.getHistoricName().equals(s) && e.getSchoolId().equals(schoolId)).collect(Collectors.toList());
-                if (cellList.size() > 0) {
-                    if (cellList.size() > 1) {
-                        throw ExceptionResultEnum.ERROR.exception("数据异常");
-                    }
-                    SysOrg cell = cellList.get(0);
-                    newInspect.add(cell.getName());
-                }
-            }
-            if (newInspect.size() > 0) {
-                taExamCourse.setInspectCollegeNames(String.join("、", newInspect));
-            }
-        }
-        taExamCourseService.updateBatchById(taExamCourseList);
-    }
-
-    /**
-     * 复杂表 't_a_exam_total' 创建
-     */
-    private void complicatedTableTAExamTotalChanged() {
-        List<SysOrg> sysOrgList = sysOrgService.list();
-        List<TAExamTotal> taExamTotalList = taExamTotalService.list();
-        for (TAExamTotal taExamTotal : taExamTotalList) {
-            String collegeNameStr = taExamTotal.getCollegeNames();
-            List<String> newCollegeList = new ArrayList<>();
-            String[] collegeNameList = collegeNameStr.split("、");
-            for (String s : collegeNameList) {
-                List<SysOrg> cellList = sysOrgList.stream().filter(e -> e.getHistoricName().equals(s) && e.getSchoolId().equals(taExamTotal.getSchoolId())).collect(Collectors.toList());
-                if (cellList.size() > 0) {
-                    if (cellList.size() > 1) {
-                        throw ExceptionResultEnum.ERROR.exception("数据异常");
-                    }
-                    SysOrg cell = cellList.get(0);
-                    newCollegeList.add(cell.getName());
-                }
-            }
-            if (newCollegeList.size() > 0) {
-                taExamTotal.setCollegeNames(String.join("、", newCollegeList));
-            }
-        }
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void createDemoData() throws InterruptedException {
+        log.info("该表线程开始执行");
+        changNamesService.changeBasicTables();
+        changNamesService.changeTableTAExamCourse();
+        changNamesService.changeTableTAExamCourseClazz();
+        changNamesService.changeTableTAExamCourseCollegeInspect();
+        changNamesService.changeTableTaExamCourseCollegeInspectDio();
+        changNamesService.changeTableTaExamCourseCollegePaperStruct();
+        changNamesService.changeTableTaExamCourseCollegeTeacher();
+        changNamesService.changeTableTaExamCourseDifficultService();
+        changNamesService.changeTableTaExamCourseDio();
+        changNamesService.changeTableTaExamCourseRecordDio();
+        changNamesService.changeTableTaExamCourseRecordMod();
+        changNamesService.changeTableTaExamCourseTeacher();
+        changNamesService.changeTableTaExamCourseTeacherCollegeDifficult();
+        changNamesService.changeTableTaExamCourseTeacherCollegeDio();
+        changNamesService.changeTableTaExamCourseTeacherCollegePaperStruct();
+        changNamesService.changeTableTaExamCourseTeacherDifficult();
+        changNamesService.changeTableTaExamCourseTeacherDio();
+        changNamesService.changeTableTaExamCourseTeacherPaperStruct();
+        changNamesService.changeTableTAExamTotal();
+        changNamesService.changeTableTAPaperStruct();
     }
 }

+ 26 - 2
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/TBExamStudentServiceImpl.java

@@ -29,10 +29,13 @@ import com.qmth.teachcloud.report.business.enums.OrderEnum;
 import com.qmth.teachcloud.report.business.enums.PublishStatusEnum;
 import com.qmth.teachcloud.report.business.enums.SemesterEnum;
 import com.qmth.teachcloud.report.business.mapper.*;
+import com.qmth.teachcloud.report.business.service.TAExamCourseRecordDioService;
 import com.qmth.teachcloud.report.business.service.TBExamStudentService;
 import com.qmth.teachcloud.report.business.utils.EncrypAES;
 import org.apache.commons.lang3.StringUtils;
 import org.checkerframework.checker.units.qual.A;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
@@ -93,6 +96,11 @@ public class TBExamStudentServiceImpl extends ServiceImpl<TBExamStudentMapper, T
     @Resource
     CacheService cacheService;
 
+    @Resource
+    TAExamCourseRecordDioService taExamCourseRecordDioService;
+
+    private final static Logger log = LoggerFactory.getLogger(TBExamStudentServiceImpl.class);
+
     /**
      * 查询开课学院列表
      *
@@ -358,10 +366,12 @@ public class TBExamStudentServiceImpl extends ServiceImpl<TBExamStudentMapper, T
         personalReportResult.setStudent(examStudentResult);
 
         // 学院信息
+        long s = System.currentTimeMillis();
         CollegeResult collegeResult = buildCollegeResult(schoolId, examId, studentCode, courseCode);
         if (Objects.isNull(collegeResult)) {
             throw ExceptionResultEnum.ERROR.exception("未找到考生的学院信息");
         }
+        log.info("学院信息耗时 : {}",System.currentTimeMillis() - s);
         personalReportResult.setCollege(collegeResult);
         return personalReportResult;
     }
@@ -377,11 +387,16 @@ public class TBExamStudentServiceImpl extends ServiceImpl<TBExamStudentMapper, T
 
         QueryWrapper<TAExamCourseRecord> examCourseRecordQueryWrapper = new QueryWrapper<>();
         examCourseRecordQueryWrapper.lambda().eq(TAExamCourseRecord::getSchoolId, schoolId).eq(TAExamCourseRecord::getExamId, examId).eq(TAExamCourseRecord::getStudentCode, studentCode).eq(TAExamCourseRecord::getCourseCode, courseCode);
+        long s1 = System.currentTimeMillis();
         List<TAExamCourseRecord> examCourseRecords = taExamCourseRecordMapper.selectList(examCourseRecordQueryWrapper);
+        log.info("s1 查询耗时{}",System.currentTimeMillis() - s1);
+
 
         QueryWrapper<TBPaper> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(TBPaper::getExamId, examId).eq(TBPaper::getCourseCode, courseCode);
+        long s2 = System.currentTimeMillis();
         List<TBPaper> papers = tbPaperMapper.selectList(queryWrapper);
+        log.info("s2 查询耗时{}",System.currentTimeMillis() - s2);
 
         if (examCourseRecords.size() != 1) {
             throw ExceptionResultEnum.ERROR.exception("获取数据异常,应该有且仅有一条数据");
@@ -400,8 +415,12 @@ public class TBExamStudentServiceImpl extends ServiceImpl<TBExamStudentMapper, T
         // 模块
         QueryWrapper<TAExamCourseRecordDio> examCourseRecordDioQueryWrapper = new QueryWrapper<>();
         examCourseRecordDioQueryWrapper.lambda().eq(TAExamCourseRecordDio::getSchoolId, schoolId).eq(TAExamCourseRecordDio::getExamId, examId).eq(TAExamCourseRecordDio::getCourseCode, courseCode);
-        List<TAExamCourseRecordDio> examCourseRecordDios = taExamCourseRecordDioMapper.selectList(examCourseRecordDioQueryWrapper);
-        Set<String> moduleNames = examCourseRecordDios.stream().map(m -> m.getDimensionType()).collect(Collectors.toSet());
+
+        long s3 = System.currentTimeMillis();
+        List<TAExamCourseRecordDio> examCourseRecordDios = taExamCourseRecordDioService.list(examCourseRecordDioQueryWrapper);
+        log.info("s3查询耗时{}",System.currentTimeMillis() - s3);
+
+        Set<String> moduleNames = examCourseRecordDios.stream().map(TAExamCourseRecordDio::getDimensionType).collect(Collectors.toSet());
         List<DiagnosisDetailResult> diagnosisDetailResults = new ArrayList<>();
         for (String moduleName : moduleNames) {
             DiagnosisDetailResult diagnosisDetailResult = new DiagnosisDetailResult();
@@ -444,7 +463,10 @@ public class TBExamStudentServiceImpl extends ServiceImpl<TBExamStudentMapper, T
             String info = tbModuleProficiency.get("moduleType").concat(":").concat(tbModuleProficiency.get("interpret"));
             moduleResult.setInfo(info);
 
+            long s4 = System.currentTimeMillis();
             List<ModuleDetailResult> dios = taExamCourseRecordDioMapper.listDiosBySchoolIdAndExamIdAndCourseCodeAndModuleName(schoolId, examId, courseCode, moduleName, studentCode);
+            log.info("s4耗时{}",System.currentTimeMillis() - s4);
+
             moduleResult.setDios(dios);
             diagnosisDetailResult.setModules(moduleResult);
 
@@ -453,7 +475,9 @@ public class TBExamStudentServiceImpl extends ServiceImpl<TBExamStudentMapper, T
             dimensionResult.setMasteryRate(taExamCourseRecordMod.getScoreRate().multiply(new BigDecimal("100")).setScale(1, BigDecimal.ROUND_HALF_UP));
             dimensionResult.setDioFullScore(taExamCourseRecordMod.getFullScore().setScale(1, BigDecimal.ROUND_HALF_UP));
 
+            long s5 = System.currentTimeMillis();
             List<DimensionDetailResult> subDios = taExamCourseRecordDioMapper.listSubDiosBySchoolIdAndExamIdAndStudentCodeAndCourseCodeAndModuleName(schoolId, examId, studentCode, courseCode, moduleName);
+            log.info("s5耗时{}",System.currentTimeMillis() - s5);
             // 按二级维度code排序
             Collections.sort(subDios, new Comparator<DimensionDetailResult>() {
                 @Override

+ 21 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/templete/service/ComplicatedCalculateAsyncService.java

@@ -0,0 +1,21 @@
+package com.qmth.teachcloud.report.business.templete.service;
+
+import com.qmth.teachcloud.report.business.entity.TAExamCourseRecordDio;
+import org.springframework.scheduling.annotation.Async;
+
+import java.util.List;
+
+/**
+ * @Description: 复杂计算异步服务类
+ * @Author: CaoZixuan
+ * @Date: 2022-03-15
+ */
+public interface ComplicatedCalculateAsyncService {
+
+    /**
+     * 多线程批量更新表't_a_exam_course_record_dio'
+     * @param taExamCourseRecordDioList taExamCourseRecordDioList
+     */
+    @Async("analyzeThreadPool")
+    void updateTableTaExamCourseRecordDioBatchById(List<TAExamCourseRecordDio> taExamCourseRecordDioList);
+}

+ 27 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/templete/service/impl/ComplicatedCalculateAsyncServiceImpl.java

@@ -0,0 +1,27 @@
+package com.qmth.teachcloud.report.business.templete.service.impl;
+
+import com.qmth.teachcloud.report.business.entity.TAExamCourseRecordDio;
+import com.qmth.teachcloud.report.business.service.TAExamCourseRecordDioService;
+import com.qmth.teachcloud.report.business.templete.service.ComplicatedCalculateAsyncService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Description: 复杂计算异步服务类实现类
+ * @Author: CaoZixuan
+ * @Date: 2022-03-15
+ */
+@Service
+public class ComplicatedCalculateAsyncServiceImpl implements ComplicatedCalculateAsyncService {
+    @Resource
+    private TAExamCourseRecordDioService taExamCourseRecordDioService;
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void updateTableTaExamCourseRecordDioBatchById(List<TAExamCourseRecordDio> taExamCourseRecordDioList) {
+        taExamCourseRecordDioService.updateBatchById(taExamCourseRecordDioList);
+    }
+}

+ 93 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/utils/RandomNameUtil.java

@@ -0,0 +1,93 @@
+package com.qmth.teachcloud.report.business.utils;
+
+import java.util.Arrays;
+import java.util.Random;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 随机名生成类
+ * @Author: CaoZixuan
+ * @Date: 2022-03-04
+ */
+public class RandomNameUtil {
+    private final static String delimiter = "-";
+
+    public static String getNameInfo() {
+        Random random = new Random();
+        String[] surname = {"赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫", "蒋", "沈", "韩", "杨", "朱", "秦", "尤", "许",
+                "何", "吕", "施", "张", "孔", "曹", "严", "华", "金", "魏", "陶", "姜", "戚", "谢", "邹", "喻", "柏", "水", "窦", "章", "云", "苏", "潘", "葛", "奚", "范", "彭", "郎",
+                "鲁", "韦", "昌", "马", "苗", "凤", "花", "方", "俞", "任", "袁", "柳", "酆", "鲍", "史", "唐", "费", "廉", "岑", "薛", "雷", "贺", "倪", "汤", "滕", "殷",
+                "罗", "毕", "郝", "邬", "安", "常", "乐", "于", "时", "傅", "皮", "卞", "齐", "康", "伍", "余", "元", "卜", "顾", "孟", "平", "黄", "和",
+                "穆", "萧", "尹", "姚", "邵", "湛", "汪", "祁", "毛", "禹", "狄", "米", "贝", "明", "臧", "计", "伏", "成", "戴", "谈", "宋", "茅", "庞", "熊", "纪", "舒",
+                "屈", "项", "祝", "董", "梁", "杜", "阮", "蓝", "闵", "席", "季"};
+        String girl = "秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽";
+        String boy = "伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达安岩中茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘";
+        int index = random.nextInt(surname.length - 1);
+        String name = surname[index]; //获得一个随机的姓氏
+
+        //设置男女比例为1:1
+        int i = random.nextInt(2);
+
+        //设置三字名和双字名比例为2:1
+        int j = random.nextInt(3);
+
+        if(i==1){
+            if (j == 1) {
+                name = "女" + delimiter + name + girl.charAt(random.nextInt(girl.length()));
+            } else {
+
+                name = "女" + delimiter + name + girl.charAt(random.nextInt(girl.length())) + girl.charAt(random.nextInt(girl.length()));
+            }
+
+        }
+        else{
+            if (j == 1) {
+                name = "男" + delimiter + name + boy.charAt(random.nextInt(boy.length()));
+            } else {
+                name = "男" + delimiter + name + boy.charAt(random.nextInt(boy.length())) + boy.charAt(random.nextInt(boy.length()));
+            }
+
+        }
+
+        return name;
+    }
+
+    /**
+     * 只获取名字
+     * @return 名字
+     */
+    public static String getName(){
+        return getNameInfo().split(delimiter)[1];
+    }
+
+    public static void main(String[] args) {
+        int man = 0;
+        int women = 0;
+
+        int three = 0;
+        int two = 0;
+        for (int i = 0; i < 100; i++) {
+            String x = getNameInfo();
+            System.out.println(x);
+            if (x.length() == 5){
+                three ++;
+            }else if (x.length() == 4){
+                two ++;
+            }
+
+            x = x.substring(0,1);
+            if (x.equals("男")){
+                man++;
+            }else {
+                women++;
+            }
+        }
+        System.out.println("男 : " + man);
+        System.out.println("女 : " + women);
+        System.out.println("男比例 :" + man / ((man + women) + 0.00));
+
+        System.out.println("三字名 : " + three);
+        System.out.println("双字名 : " + two);
+        System.out.println("三字名比例 :" + three / ((three + two) + 0.00));
+    }
+}

+ 12 - 0
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/BasicDatasourceController.java

@@ -44,6 +44,7 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
+import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -107,6 +108,8 @@ public class BasicDatasourceController {
     private TBExaminationRelationService tbExaminationRelationService;
     @Resource
     private TBTeacherService tbTeacherService;
+    @Resource
+    private CourseUnitOperateService courseUnitOperateService;
 
     @ApiOperation(value = "试卷数据导入")
     @RequestMapping(value = "/paper/import", method = RequestMethod.POST)
@@ -1445,6 +1448,15 @@ public class BasicDatasourceController {
         return ResultUtil.ok(result.size() == 0 ? count : result);
     }
 
+    @ApiOperation(value = "制作演示数据表")
+    @RequestMapping(value = "/build/demo_table", 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 buildDemoTable() throws ExecutionException, InterruptedException {
+        courseUnitOperateService.createDemoData();
+        return ResultUtil.ok();
+    }
 
     /**
      * 更新或新增专业信息

+ 4 - 0
teachcloud-report/src/test/java/com/qmth/teachcloud/report/report/CourseReportTest.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.report.report;
 
 import com.alibaba.fastjson.JSON;
 import com.qmth.teachcloud.report.TeachcloudReportApplication;
+import com.qmth.teachcloud.report.business.service.ChangNamesService;
 import com.qmth.teachcloud.report.business.service.CourseReportService;
 import com.qmth.teachcloud.report.business.service.TAExamCourseService;
 import org.junit.Test;
@@ -24,6 +25,8 @@ public class CourseReportTest {
     private CourseReportService courseReportService;
     @Resource
     private TAExamCourseService taExamCourseService;
+    @Resource
+    private ChangNamesService changNamesService;
 
     @Test
     public void inspectTotal(){
@@ -38,4 +41,5 @@ public class CourseReportTest {
         System.out.println(JSON.toJSONString(taExamCourseService.trialCalculate(examId,examCode,coefficient)));
     }
 
+
 }

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

@@ -1,5 +1,6 @@
 package com.qmth.teachcloud.report.report;
 
+import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.report.TeachcloudReportApplication;
 import com.qmth.teachcloud.report.business.service.CourseUnitOperateService;
 import org.apache.commons.io.IOUtils;
@@ -7,7 +8,6 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.mock.web.MockMultipartFile;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -15,6 +15,8 @@ import javax.annotation.Resource;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * @Description: 课程单元演示制作测试类
@@ -57,32 +59,19 @@ public class CourseUnitOperateServiceTest {
     }
 
     @Test
-    public void testCreateDemoData() {
-        courseUnitOperateService.createDemoData();
-    }
-
-    @Async
-    public void sout10() throws InterruptedException {
-        for (int i = 0; i < 10; i++) {
-            System.out.println(10);
-            Thread.sleep(10);
-        }
-    }
-
-    @Async
-    public void sout20() throws InterruptedException {
-        for (int i = 0; i < 10; i++) {
-            System.out.println(20);
-            Thread.sleep(10);
-        }
+    public void testChangeBasicStudent(){
+        Long schoolId = 2L;
+        courseUnitOperateService.changeStudent(schoolId);
     }
 
     @Test
-    public void soutTest() throws InterruptedException {
-        Long b = System.currentTimeMillis();
-        this.sout10();
-        this.sout20();
-        Long e = System.currentTimeMillis();
-        System.out.println(e - b);
+    public void testStep(){
+        List<Long> x = new ArrayList<>();
+        for (int i = 0; i < 20000; i++) {
+            x.add((long) i);
+        }
+        List<List<Long>> step = SystemConstant.getStepList(x);
+        System.out.println(step.size());
+        step.forEach(e -> System.out.println(e.size()));
     }
 }