Browse Source

导出优化

zouxuan 3 years ago
parent
commit
e67f5e8d56

+ 2 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/ExportFunction.java

@@ -1,11 +1,7 @@
 package com.ym.mec.biz.service;
 
-import java.util.List;
-import java.util.Map;
-import java.util.function.Function;
-
 @FunctionalInterface
-public interface ExportFunction {
+public interface ExportFunction<R> {
 
-    List getRows(Map<String, Object> info, Function<Object,List> func,Class clazz,Boolean searchOrgan);
+    void exportManagerDownload(R r);
 }

+ 12 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java

@@ -278,23 +278,25 @@ public interface ExportService {
     //保存下载记录
     ManagerDownload saveManagerDownload(ExportTypeEnum exportTypeEnum, Integer userId);
 
-    void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception;
+    void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns);
 
-    void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception;
+    void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns);
 
-    void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception;
+    void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns);
 
-    void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception;
+    void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload);
 
-    void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws Exception;
+    void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns);
 
-    void queryStudentCourseInfo(String organId, Integer tenantId, String vip, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws Exception;
+    void queryStudentCourseInfo(String organId, Integer tenantId, String vip, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum);
 
-    void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws Exception;
+    void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum);
 
-    void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception;
+    void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload);
 
-    void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception;
+    void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload);
 
-    void exportMusicGroupCourseList(ManagerDownload managerDownload, ExportUserAccountQueryInfo queryInfo) throws Exception;
+    void exportMusicGroupCourseList(ManagerDownload managerDownload, ExportUserAccountQueryInfo queryInfo);
+
+    HttpResponseResult asyncExport(Runnable runnable,String excelName);
 }

+ 99 - 138
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -26,7 +26,6 @@ import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.excel.POIUtil;
 import com.ym.mec.util.ini.IniFileUtil;
 import com.ym.mec.util.upload.UploadUtil;
-
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,9 +38,7 @@ import org.springframework.util.CollectionUtils;
 
 import javax.annotation.PostConstruct;
 import javax.servlet.http.HttpServletResponse;
-
 import java.io.*;
-import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
@@ -52,6 +49,7 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import static com.ym.mec.biz.dal.enums.OrderTypeEnum.OUTORDER;
+import static com.ym.mec.common.controller.BaseController.succeed;
 
 @Service
 public class ExportServiceImpl implements ExportService {
@@ -107,8 +105,6 @@ public class ExportServiceImpl implements ExportService {
     @Autowired
     private PracticeGroupService practiceGroupService;
     @Autowired
-    private CourseScheduleService scheduleService;
-    @Autowired
     private SporadicChargeInfoService sporadicChargeInfoService;
     @Autowired
     private CourseReviewService courseReviewService;
@@ -178,6 +174,7 @@ public class ExportServiceImpl implements ExportService {
     private SysUserCashAccountLogService sysUserCashAccountLogService;
     @Autowired
     private StudentStatisticsService studentStatisticsService;
+    private static final ExecutorService exportExecutorService = Executors.newFixedThreadPool(10);
 
     @Value("${spring.profiles.active:dev}")
     private String profiles;
@@ -1393,17 +1390,8 @@ public class ExportServiceImpl implements ExportService {
         }
 //        queryInfo.setRoutingOrganId(null);
         ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.ROUTE_ORDER,sysUser.getId());
-        ExecutorService executor = Executors.newCachedThreadPool();
-        CompletableFuture.runAsync(()->{
-            try {
-                this.routeOrderList(params, managerDownload, headColumns);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }, executor);
-        HttpResponseResult<Object> succeed = BaseController.succeed();
-        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
-        return succeed;
+        return this.asyncExport(() -> this.routeOrderList(params, managerDownload, headColumns),
+                managerDownload.getName());
     }
 
     //学员小课记录导出
@@ -1417,17 +1405,8 @@ public class ExportServiceImpl implements ExportService {
         Integer tenantId = TenantContextHolder.getTenantId();
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.STUDENT_VIP_PRACTICE,sysUser.getId());
-        ExecutorService executor = Executors.newCachedThreadPool();
-        CompletableFuture.runAsync(()->{
-            try {
-                this.studentVipPractice(organId, managerDownload, tenantId,headColumns);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        },executor);
-        HttpResponseResult<Object> succeed = BaseController.succeed();
-        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
-        return succeed;
+        return this.asyncExport(() -> this.studentVipPractice(organId, managerDownload, tenantId,headColumns),
+                managerDownload.getName());
     }
 
     //学员小课记录导出
@@ -1441,17 +1420,8 @@ public class ExportServiceImpl implements ExportService {
         }
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.STUDENT_VIP_COURSE_INFO,sysUser.getId());
-        ExecutorService executor = Executors.newCachedThreadPool();
-        CompletableFuture.runAsync(()->{
-            try {
-                this.queryStudentCourseInfo(organId, tenantId,"VIP", managerDownload,headColumns,ExportEnum.STUDENT_VIP_COURSE_INFO);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        },executor);
-        HttpResponseResult<Object> succeed = BaseController.succeed();
-        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
-        return succeed;
+        return this.asyncExport(() -> this.queryStudentCourseInfo(organId, tenantId,"VIP", managerDownload,headColumns,ExportEnum.STUDENT_VIP_COURSE_INFO),
+                managerDownload.getName());
     }
 
     //vip学员课程管理
@@ -1461,17 +1431,8 @@ public class ExportServiceImpl implements ExportService {
         String organId = organizationService.getEmployeeOrgan(sysUser.getId(),getParam(info, "organId", String.class),sysUser.getIsSuperAdmin());
         ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.VIP_STUDENT_COURSE_MANAGE,sysUser.getId());
         Integer tenantId = TenantContextHolder.getTenantId();
-        ExecutorService executor = Executors.newCachedThreadPool();
-        CompletableFuture.runAsync(()->{
-            try {
-                this.queryVipStudentCourseManage(organId, tenantId,managerDownload,headColumns,ExportEnum.VIP_STUDENT_COURSE_MANAGE);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        },executor);
-        HttpResponseResult<Object> succeed = BaseController.succeed();
-        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
-        return succeed;
+        return this.asyncExport(() -> this.queryVipStudentCourseManage(organId, tenantId,managerDownload,headColumns,ExportEnum.VIP_STUDENT_COURSE_MANAGE),
+                managerDownload.getName());
     }
 
     //学员小课记录导出
@@ -1485,17 +1446,8 @@ public class ExportServiceImpl implements ExportService {
         }
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.STUDENT_MUSIC_THEORY_COURSE_INFO,sysUser.getId());
-        ExecutorService executor = Executors.newCachedThreadPool();
-        CompletableFuture.runAsync(()->{
-            try {
-                this.queryStudentCourseInfo(organId, tenantId,"THEORY", managerDownload,headColumns,ExportEnum.STUDENT_MUSIC_THEORY_COURSE_INFO);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        },executor);
-        HttpResponseResult<Object> succeed = BaseController.succeed();
-        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
-        return succeed;
+        return this.asyncExport(() -> this.queryStudentCourseInfo(organId, tenantId,"THEORY", managerDownload,headColumns,ExportEnum.STUDENT_MUSIC_THEORY_COURSE_INFO),
+                managerDownload.getName());
     }
 
     //订单列表导出
@@ -1525,17 +1477,8 @@ public class ExportServiceImpl implements ExportService {
             return BaseController.failed("数据集太大,不能导出.最大数据集不能超过50000");
         }
         ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.ORDER,sysUser.getId());
-        ExecutorService executor = Executors.newCachedThreadPool();
-        CompletableFuture.runAsync(()->{
-            try {
-                this.orderList(params, managerDownload, headColumns);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        },executor);
-        HttpResponseResult<Object> succeed = BaseController.succeed();
-        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
-        return succeed;
+        return this.asyncExport(() -> this.orderList(params, managerDownload, headColumns),
+                managerDownload.getName());
     }
 
     //订单列表导出
@@ -1565,17 +1508,8 @@ public class ExportServiceImpl implements ExportService {
             return BaseController.failed("数据集太大,不能导出.最大数据集不能超过50000");
         }
         ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.ORDER_LIST_SUM,sysUser.getId());
-        ExecutorService executor = Executors.newCachedThreadPool();
-        CompletableFuture.runAsync(()->{
-            try {
-                this.orderListSum(params, managerDownload, headColumns);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        },executor);
-        HttpResponseResult<Object> succeed = BaseController.succeed();
-        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
-        return succeed;
+        return this.asyncExport(() -> this.orderListSum(params, managerDownload, headColumns),
+                managerDownload.getName());
     }
 
     //保存下载记录
@@ -1601,7 +1535,7 @@ public class ExportServiceImpl implements ExportService {
 
 
     @Override
-    public void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception {
+    public void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns){
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentOrderService.ExportQueryPage(params);
         long i = 1;
         Map<Integer, String> cooperationOrganMap = new HashMap<>();
@@ -2043,7 +1977,7 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    public void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception{
+    public void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns){
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentOrderService.ExportQueryPage(params);
         //获取机构费率
         Integer tenantId = (Integer) params.get("tenantId");
@@ -2309,7 +2243,7 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    public void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception {
+    public void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns){
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.ExportQueryPage(params);
         Map<Integer, String> cooperationOrganMap = new HashMap<>();
         List<Integer> cooperationOrganIds = studentPaymentOrderExportDtos.stream()
@@ -2873,21 +2807,25 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    public void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception{
-        List<CourseScheduleEndDto> rows = courseScheduleService.endFindCourseSchedules(queryInfo).getRows();
-        for (CourseScheduleEndDto row : rows) {
-            row.setIsComplaints(StringUtils.equals(row.getIsComplaints(), "1") ? "有" : "无");
-        }
-        HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部名称", "乐团主管", "课程编号", "开始时间", "结束时间",
-                "班级名称", "班级声部", "课程名称", "课程类型", "教学模式",
-                "教学点", "课程状态", "指导老师", "学员编号", "是否点名", "是否有考勤申诉", "预计上课人数","合作单位"}, new String[]{
-                "organName", "educationTeacherName", "id", "startClassTime", "endClassTime", "classGroupName", "subjectName", "name",
-                "groupType.desc", "teachMode.msg", "schoolName", "status.msg", "teacherName", "studentId", "isCallNames.msg", "isComplaints", "studentNum","cooperationOrgan"}, rows);
-        exportManagerDownload(workbook,managerDownload);
+    public void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload){
+        try {
+            List<CourseScheduleEndDto> rows = courseScheduleService.endFindCourseSchedules(queryInfo).getRows();
+            for (CourseScheduleEndDto row : rows) {
+                row.setIsComplaints(StringUtils.equals(row.getIsComplaints(), "1") ? "有" : "无");
+            }
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部名称", "乐团主管", "课程编号", "开始时间", "结束时间",
+                    "班级名称", "班级声部", "课程名称", "课程类型", "教学模式",
+                    "教学点", "课程状态", "指导老师", "学员编号", "是否点名", "是否有考勤申诉", "预计上课人数","合作单位"}, new String[]{
+                    "organName", "educationTeacherName", "id", "startClassTime", "endClassTime", "classGroupName", "subjectName", "name",
+                    "groupType.desc", "teachMode.msg", "schoolName", "status.msg", "teacherName", "studentId", "isCallNames.msg", "isComplaints", "studentNum","cooperationOrgan"}, rows);
+            exportManagerDownload(workbook,managerDownload);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
     }
 
     @Override
-    public void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws Exception{
+    public void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns){
         List<StudentVipPracticeExportDto> studentVipPracticeExportDtos = courseScheduleStudentPaymentDao.exportStudentVipPractice(organId, tenantId);
         if(studentVipPracticeExportDtos != null && studentVipPracticeExportDtos.size() > 0){
             List<Integer> studentIds = studentVipPracticeExportDtos.stream().map(e -> e.getUserId()).distinct().collect(Collectors.toList());
@@ -2959,63 +2897,74 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    public void queryStudentCourseInfo(String organId, Integer tenantId, String groupType, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws Exception {
+    public void queryStudentCourseInfo(String organId, Integer tenantId, String groupType, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum){
         List<ExportStudentCourseInfoDto> rows = courseScheduleStudentPaymentDao.queryStudentCourseInfo(organId,tenantId,groupType);
         HSSFWorkbook workbook = getHSSFWorkbook(rows,headColumns,exportEnum);
         exportManagerDownload(workbook,managerDownload);
     }
 
     @Override
-    public void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws Exception{
+    public void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum){
         List<ExportVipStudentCourseManageDto> rows = courseScheduleStudentPaymentDao.queryVipStudentCourseManage(organId,tenantId);
-        HSSFWorkbook workbook = getHSSFWorkbook(rows,headColumns,exportEnum);
-        exportManagerDownload(workbook,managerDownload);
+        exportManagerDownload(getHSSFWorkbook(rows,headColumns,exportEnum),managerDownload);
     }
 
     @Override
-    public void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception{
+    public void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload){
         List<StudentStatisticsDto> rows = studentStatisticsService.queryStatisticsPage(queryInfo).getRows();
-        HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学生姓名", "学员编号","联系电话", "声部", "学校", "年级", "学员状态", "未排课时", "总课时", "已完成课时",
-                        "剩余课时","预收金额","第一次课时间","最近上课时间","指导老师编号","指导老师","乐团主管编号","乐团主管","声部课老师编号","声部课老师","近30天课耗","回访次数",
-                        "回访状态","原因","回访日期"},
-                new String[]{"studentBasicInfo.organName", "studentBasicInfo.userName", "studentBasicInfo.userId",
-                        "studentBasicInfo.phone","studentBasicInfo.subjectName", "studentBasicInfo.cooperationOrganName", "studentBasicInfo.grade",
-                        "studentBasicInfo.studentStatus",
-                        "noScheduleNum","totalCourseNum", "overCourseNum", "subCourseNum","preCourseFee","firstCourseTime","lastCourseTime","teacherId","teacherName","musicDirectorId","musicDirectorName",
-                        "studentBasicInfo.subjectTeacherId","studentBasicInfo.subjectTeacherName","latelyCourseConsumer","visitNum",
-                        "lastVisitStatus == null?'':lastVisitStatus == 'LOST' ? '流失':lastVisitStatus == 'THINKING' ? '考虑中':" +
-                                "lastVisitStatus == 'PENDING_PAYMENT' ? '确认缴费待缴费':lastVisitStatus == 'PAUSE' ? '暂停':lastVisitStatus == 'OTHER' ? '其他':''"
-                        ,"visitReason","lastVisitTime"}, rows);
-        exportManagerDownload(workbook,managerDownload);
+        try {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学生姓名", "学员编号","联系电话", "声部", "学校", "年级", "学员状态", "未排课时", "总课时", "已完成课时",
+                            "剩余课时","预收金额","第一次课时间","最近上课时间","指导老师编号","指导老师","乐团主管编号","乐团主管","声部课老师编号","声部课老师","近30天课耗","回访次数",
+                            "回访状态","原因","回访日期"},
+                    new String[]{"studentBasicInfo.organName", "studentBasicInfo.userName", "studentBasicInfo.userId",
+                            "studentBasicInfo.phone","studentBasicInfo.subjectName", "studentBasicInfo.cooperationOrganName", "studentBasicInfo.grade",
+                            "studentBasicInfo.studentStatus",
+                            "noScheduleNum","totalCourseNum", "overCourseNum", "subCourseNum","preCourseFee","firstCourseTime","lastCourseTime","teacherId","teacherName","musicDirectorId","musicDirectorName",
+                            "studentBasicInfo.subjectTeacherId","studentBasicInfo.subjectTeacherName","latelyCourseConsumer","visitNum",
+                            "lastVisitStatus == null?'':lastVisitStatus == 'LOST' ? '流失':lastVisitStatus == 'THINKING' ? '考虑中':" +
+                                    "lastVisitStatus == 'PENDING_PAYMENT' ? '确认缴费待缴费':lastVisitStatus == 'PAUSE' ? '暂停':lastVisitStatus == 'OTHER' ? '其他':''"
+                            ,"visitReason","lastVisitTime"}, rows);
+            exportManagerDownload(workbook,managerDownload);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
     }
 
     @Override
-    public void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception{
+    public void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) {
         List<MusicGroupCourseScheduleDto> rows = classGroupService.queryMusicGroupCourseScheduleDetail(queryInfo).getRows();
-        HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"课程编号", "课程开始时间", "课程结束时间", "课程名称","课程类型", "课程状态", "老师签到", "老师签退", "指导老师",
-                        "出勤率", "达标率", "是否服务", "是否布置课后作业", "作业提交率", "结算状态", "是否点名", "备注"},
-                new String[]{"courseScheduleId", "classDate + ' ' + startClassTime", "classDate + ' ' + endClassTime",
-                        "courseScheduleName","courseScheduleType.msg", "courseScheduleStatus.msg", "signInStatus.msg",
-                        "signOutStatus.msg","masterTeacherName",
-                        "courseScheduleStatistics.attendanceRate","courseScheduleStatistics.standardRate",
-                        "courseScheduleStatistics.serviceFlag == false ? '否':'是'","courseScheduleStatistics.homeworkFlag == false ? '否':'是'","courseScheduleStatistics.homeworkCommitRate",
-                        "settlementTime == null?'未结算':'已结算'", "isCallNames.msg", "remark"}, rows);
-        exportManagerDownload(workbook,managerDownload);
+        try {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"课程编号", "课程开始时间", "课程结束时间", "课程名称","课程类型", "课程状态", "老师签到", "老师签退", "指导老师",
+                            "出勤率", "达标率", "是否服务", "是否布置课后作业", "作业提交率", "结算状态", "是否点名", "备注"},
+                    new String[]{"courseScheduleId", "classDate + ' ' + startClassTime", "classDate + ' ' + endClassTime",
+                            "courseScheduleName","courseScheduleType.msg", "courseScheduleStatus.msg", "signInStatus.msg",
+                            "signOutStatus.msg","masterTeacherName",
+                            "courseScheduleStatistics.attendanceRate","courseScheduleStatistics.standardRate",
+                            "courseScheduleStatistics.serviceFlag == false ? '否':'是'","courseScheduleStatistics.homeworkFlag == false ? '否':'是'","courseScheduleStatistics.homeworkCommitRate",
+                            "settlementTime == null?'未结算':'已结算'", "isCallNames.msg", "remark"}, rows);
+            exportManagerDownload(workbook,managerDownload);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
     }
 
-    public HSSFWorkbook getHSSFWorkbook(List rows, List<String> headColumns, ExportEnum exportEnum) throws Exception{
-        Map<String, String> headMap = getExportMap(new ExportDto(exportEnum, headColumns));
-        String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
-        String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
-        return POIUtil.exportExcel(header, body, rows);
+    public HSSFWorkbook getHSSFWorkbook(List rows, List<String> headColumns, ExportEnum exportEnum){
+        try {
+            Map<String, String> headMap = getExportMap(new ExportDto(exportEnum, headColumns));
+            String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
+            String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
+            return POIUtil.exportExcel(header, body, rows);
+        } catch (Exception e) {
+            throw new BizException(e);
+        }
     }
 
-    public void exportManagerDownload(HSSFWorkbook workbook, ManagerDownload managerDownload) throws FileNotFoundException {
+    public void exportManagerDownload(HSSFWorkbook workbook, ManagerDownload managerDownload){
         String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
         File file = new File(basePath + "/" + managerDownload.getName());
-        FileOutputStream fileOutputStream = new FileOutputStream(file);
         OutputStream ouputStream = null;
         try {
+            FileOutputStream fileOutputStream = new FileOutputStream(file);
             workbook.write(fileOutputStream);
             fileOutputStream.getFD().sync();
             fileOutputStream.close();
@@ -3040,13 +2989,25 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    public void exportMusicGroupCourseList(ManagerDownload managerDownload, ExportUserAccountQueryInfo queryInfo) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, IOException {
+    public void exportMusicGroupCourseList(ManagerDownload managerDownload, ExportUserAccountQueryInfo queryInfo){
         List<MusicGroupExportDto> rows = musicGroupDao.exportMusicGroupCourseList(queryInfo);
-        HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "乐团编号", "乐团名称", "乐团主管","出勤率", "达标率", "作业提交率", "成团人数", "新增人数",
-                        "退团人数", "在读人数","流失率"},
-                new String[]{"organName", "musicGroupId", "musicGroupName",
-                        "eduName","attendanceRate", "standardRate", "homeworkCommitRate",
-                        "groupMemberNum","addStuNum","quitStuNum","normalNum","lostRate"}, rows);
-        exportManagerDownload(workbook,managerDownload);
+        try {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "乐团编号", "乐团名称", "乐团主管","出勤率", "达标率", "作业提交率", "成团人数", "新增人数",
+                            "退团人数", "在读人数","流失率"},
+                    new String[]{"organName", "musicGroupId", "musicGroupName",
+                            "eduName","attendanceRate", "standardRate", "homeworkCommitRate",
+                            "groupMemberNum","addStuNum","quitStuNum","normalNum","lostRate"}, rows);
+            exportManagerDownload(workbook,managerDownload);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public HttpResponseResult asyncExport(Runnable runnable,String excelName) {
+        CompletableFuture.runAsync(runnable,exportExecutorService);
+        HttpResponseResult<Object> succeed = succeed();
+        succeed.setMsg(excelName + "导出申请已提交,请到【报表中心-下载列表查看】");
+        return succeed;
     }
 }

+ 11 - 41
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -187,7 +187,7 @@ public class ExportController extends BaseController {
     @ApiOperation(value = "导出乐团课列表详情")
     @PostMapping("export/exportMusicGroupCourseList")
     @PreAuthorize("@pcs.hasPermissions('export/exportMusicGroupCourseList')")
-    public HttpResponseResult exportMusicGroupCourseList(ExportUserAccountQueryInfo queryInfo) throws IOException {
+    public HttpResponseResult exportMusicGroupCourseList(ExportUserAccountQueryInfo queryInfo){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganId(),sysUser.getIsSuperAdmin()));
         Integer i = musicGroupDao.countMusicGroupCourseList(queryInfo);
@@ -195,17 +195,7 @@ public class ExportController extends BaseController {
             throw new BizException("没有可导出的记录");
         }
         ManagerDownload managerDownload = exportService.saveManagerDownload(ExportTypeEnum.MUSIC_GROUP_DATA_EXPORT,sysUser.getId());
-        ExecutorService executor = Executors.newCachedThreadPool();
-        CompletableFuture.runAsync(()->{
-            try {
-                exportService.exportMusicGroupCourseList(managerDownload,queryInfo);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        },executor);
-        HttpResponseResult<Object> succeed = succeed();
-        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
-        return succeed;
+        return exportService.asyncExport(() -> exportService.exportMusicGroupCourseList(managerDownload,queryInfo),managerDownload.getName());
     }
 
     @ApiOperation(value = "乐团详情--课表详情列表(课表详情)导出")
@@ -216,21 +206,11 @@ public class ExportController extends BaseController {
         if (pageList.getTotal() <= 0) {
             throw new BizException("没有可导出的记录");
         }
+        queryInfo.setPage(1);
+        queryInfo.setRows(65535);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         ManagerDownload managerDownload = exportService.saveManagerDownload(ExportTypeEnum.MUSIC_GROUP_COURSE_LIST,sysUser.getId());
-        ExecutorService executor = Executors.newCachedThreadPool();
-        CompletableFuture.runAsync(()->{
-            try {
-                queryInfo.setPage(1);
-                queryInfo.setRows(65535);
-                exportService.exportMusicGroupCourseScheduleDetail(queryInfo, managerDownload);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        },executor);
-        HttpResponseResult<Object> succeed = succeed();
-        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
-        return succeed;
+        return exportService.asyncExport(() -> exportService.exportMusicGroupCourseScheduleDetail(queryInfo, managerDownload),managerDownload.getName());
     }
 
     @ApiOperation(value = "乐团列表导出")
@@ -2041,23 +2021,13 @@ public class ExportController extends BaseController {
         if (count > 50000) {
             return failed("数据集太大,不能导出.最大数据集不能超过50000");
         }
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
+        queryInfo.setIsExport(true);
         ManagerDownload managerDownload = exportService.saveManagerDownload(ExportTypeEnum.COURSE_SCHEDULE,sysUser.getId());
-        ExecutorService executor = Executors.newCachedThreadPool();
-        CompletableFuture.runAsync(()->{
-            try {
-                TenantContextHolder.setTenantId(tenantId);
-                queryInfo.setPage(1);
-                queryInfo.setRows(49999);
-                queryInfo.setIsExport(true);
-                exportService.superFindCourseSchedules(queryInfo, managerDownload);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }finally {
-                TenantContextHolder.clearTenantId();
-            }
-        },executor);
-        HttpResponseResult<Object> succeed = succeed();
-        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
+        TenantContextHolder.setTenantId(tenantId);
+        HttpResponseResult succeed = exportService.asyncExport(() -> exportService.superFindCourseSchedules(queryInfo, managerDownload),managerDownload.getName());
+        TenantContextHolder.clearTenantId();
         return succeed;
     }
 

+ 3 - 13
mec-web/src/main/java/com/ym/mec/web/controller/StudentStatisticsController.java

@@ -125,18 +125,8 @@ public class StudentStatisticsController extends BaseController {
                 .append(DateUtil.getDate(new Date()))
                 .append(".xls").toString();
         managerDownload.setName(fileName);
-        ExecutorService executor = Executors.newCachedThreadPool();
-        CompletableFuture.runAsync(()->{
-            try {
-                queryInfo.setPage(1);
-                queryInfo.setRows(65535);
-                exportService.exportStudentSmallClassStatisticsSum(queryInfo, managerDownload);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        },executor);
-        HttpResponseResult<Object> succeed = succeed();
-        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
-        return succeed;
+        queryInfo.setPage(1);
+        queryInfo.setRows(65535);
+        return exportService.asyncExport(() -> exportService.exportStudentSmallClassStatisticsSum(queryInfo, managerDownload),managerDownload.getName());
     }
 }