Преглед на файлове

Merge branch 'saas_zouxuan_04_24_course' of http://git.dayaedu.com/yonge/mec into master_saas

zouxuan преди 3 години
родител
ревизия
619e1e42cf

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java

@@ -9,6 +9,7 @@ import com.ym.mec.biz.dal.entity.School;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
+import com.ym.mec.biz.dal.page.ExportUserAccountQueryInfo;
 import com.ym.mec.biz.dal.page.IndexDataQueryInfo;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupModel;
@@ -505,4 +506,7 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
     * @date 2022/3/17 16:20
     */
     Integer countQuitNum(@Param("queryInfo") IndexDataQueryInfo queryInfo);
+
+    //乐团统计数据导出
+    List<MusicGroupExportDto> exportMusicGroupCourseList(@Param("queryInfo") ExportUserAccountQueryInfo queryInfo);
 }

+ 150 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupExportDto.java

@@ -0,0 +1,150 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+
+public class MusicGroupExportDto extends BaseEntity {
+
+    @ApiModelProperty(value = "分部")
+    private String organName;
+
+    @ApiModelProperty(value = "乐团")
+    private String musicGroupId;
+
+    @ApiModelProperty(value = "乐团")
+    private String musicGroupName;
+
+    @ApiModelProperty(value = "乐团主管")
+    private String eduName;
+
+    @ApiModelProperty(value = "出勤率")
+    private String attendanceRate;
+
+    @ApiModelProperty(value = "达标率")
+    private String standardRate;
+
+    @ApiModelProperty(value = "作业提交率")
+    private String homeworkCommitRate;
+
+    @ApiModelProperty(value = "成团人数")
+    private int groupMemberNum;
+
+    @ApiModelProperty(value = "新增人数")
+    private int addStuNum;
+
+    @ApiModelProperty(value = "退团人数")
+    private int quitStuNum;
+
+    @ApiModelProperty(value = "在读人数")
+    private int normalNum;
+
+    @ApiModelProperty(value = "乐团总人数")
+    private int totalNum;
+
+    @ApiModelProperty(value = "流失率")
+    private String lostRate;
+
+    public String getLostRate() {
+        return lostRate;
+    }
+
+    public void setLostRate(String lostRate) {
+        this.lostRate = lostRate;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public String getEduName() {
+        return eduName;
+    }
+
+    public void setEduName(String eduName) {
+        this.eduName = eduName;
+    }
+
+    public String getAttendanceRate() {
+        return attendanceRate;
+    }
+
+    public void setAttendanceRate(String attendanceRate) {
+        this.attendanceRate = attendanceRate;
+    }
+
+    public String getStandardRate() {
+        return standardRate;
+    }
+
+    public void setStandardRate(String standardRate) {
+        this.standardRate = standardRate;
+    }
+
+    public String getHomeworkCommitRate() {
+        return homeworkCommitRate;
+    }
+
+    public void setHomeworkCommitRate(String homeworkCommitRate) {
+        this.homeworkCommitRate = homeworkCommitRate;
+    }
+
+    public int getGroupMemberNum() {
+        return groupMemberNum;
+    }
+
+    public void setGroupMemberNum(int groupMemberNum) {
+        this.groupMemberNum = groupMemberNum;
+    }
+
+    public int getAddStuNum() {
+        return addStuNum;
+    }
+
+    public void setAddStuNum(int addStuNum) {
+        this.addStuNum = addStuNum;
+    }
+
+    public int getQuitStuNum() {
+        return quitStuNum;
+    }
+
+    public void setQuitStuNum(int quitStuNum) {
+        this.quitStuNum = quitStuNum;
+    }
+
+    public int getNormalNum() {
+        return normalNum;
+    }
+
+    public void setNormalNum(int normalNum) {
+        this.normalNum = normalNum;
+    }
+
+    public int getTotalNum() {
+        return totalNum;
+    }
+
+    public void setTotalNum(int totalNum) {
+        this.totalNum = totalNum;
+    }
+}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentRegistration.java

@@ -144,6 +144,17 @@ public class StudentRegistration extends BaseEntity {
     
     private Long musicGroupPaymentCalenderId;
 
+    @ApiModelProperty(value = "是否成团学员",required = true)
+    private boolean originalFlag;
+
+    public boolean isOriginalFlag() {
+        return originalFlag;
+    }
+
+    public void setOriginalFlag(boolean originalFlag) {
+        this.originalFlag = originalFlag;
+    }
+
     public Date getMembershipEndTime() {
         return membershipEndTime;
     }

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportTypeEnum.java

@@ -12,7 +12,8 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 	VIP_STUDENT_COURSE_MANAGE(6, "vip学员课程管理"),
 	STUDENT_SMALL_CLASS_STATISTICS(7, "学员小课数据统计"),
 	ORDER_LIST_SUM(8, "订单汇总"),
-	MUSIC_GROUP_COURSE_LIST(9, "乐团课表详情导出");
+	MUSIC_GROUP_COURSE_LIST(9, "乐团课表详情导出"),
+	MUSIC_GROUP_DATA_EXPORT(10, "乐团数据导出");
 
 	private Integer code;
 

+ 13 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.ExportDto;
+import com.ym.mec.biz.dal.dto.MusicGroupExportDto;
 import com.ym.mec.biz.dal.entity.ManagerDownload;
 import com.ym.mec.biz.dal.enums.ExportEnum;
 import com.ym.mec.biz.dal.enums.ExportTypeEnum;
@@ -13,6 +14,7 @@ import org.springframework.scheduling.annotation.Async;
 import javax.servlet.http.HttpServletResponse;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.util.List;
 import java.util.Map;
 import java.util.function.BiFunction;
@@ -275,21 +277,23 @@ public interface ExportService {
     //保存下载记录
     ManagerDownload saveManagerDownload(ExportTypeEnum exportTypeEnum, Integer userId);
 
-    void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws FileNotFoundException;
+    void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException;
 
-    void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws FileNotFoundException;
+    void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException;
 
-    void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws FileNotFoundException;
+    void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException;
 
-    void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException;
+    void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException;
 
-    void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws FileNotFoundException;
+    void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException;
 
-    void queryStudentCourseInfo(String organId, Integer tenantId, String vip, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws FileNotFoundException;
+    void queryStudentCourseInfo(String organId, Integer tenantId, String vip, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException;
 
-    void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws FileNotFoundException;
+    void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException;
 
-    void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException;
+    void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException;
 
-    void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException;
+    void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException;
+
+    void exportMusicGroupCourseList(ManagerDownload managerDownload, List<MusicGroupExportDto> exportDtoList) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, IOException;
 }

+ 72 - 278
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -28,6 +28,7 @@ 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.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.system.ApplicationHome;
@@ -39,6 +40,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;
@@ -1599,7 +1601,7 @@ public class ExportServiceImpl implements ExportService {
 
 
     @Override
-    public void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws FileNotFoundException {
+    public void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentOrderService.ExportQueryPage(params);
         long i = 1;
         Map<Integer, String> cooperationOrganMap = new HashMap<>();
@@ -2021,42 +2023,12 @@ public class ExportServiceImpl implements ExportService {
             row.setOrderAmount(row.getExpectAmount().add(row.getCouponRemitFee()));
             i++;
         }
-
-        String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
-        File file = new File(basePath + "/" + managerDownload.getName());
-        FileOutputStream fileOutputStream = new FileOutputStream(file);
-
-        HSSFWorkbook workbook = null;
-        try {
-            Map<String, String> headMap = getExportMap(new ExportDto(ExportEnum.ORDER_LIST1, headColumns));
-            String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
-            String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
-            workbook = POIUtil.exportExcel(header, body, studentPaymentOrderExportDtos);
-            workbook.write(fileOutputStream);
-            fileOutputStream.getFD().sync();
-            fileOutputStream.close();
-
-            String folder = "download/" + UploadUtil.getFileFloder();
-            String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, folder, file);
-            //把记录插入下载表
-            managerDownload.setFileUrl(url);
-            managerDownload.setStatus(1);
-            managerDownloadDao.update(managerDownload);
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            try {
-                fileOutputStream.close();
-                workbook.close();
-                file.delete();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
+        HSSFWorkbook workbook = getHSSFWorkbook(studentPaymentOrderExportDtos,headColumns,ExportEnum.ORDER_LIST1);
+        exportManagerDownload(workbook,managerDownload);
     }
 
     @Override
-    public void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws FileNotFoundException {
+    public void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentOrderService.ExportQueryPage(params);
         //获取机构费率
         Integer tenantId = (Integer) params.get("tenantId");
@@ -2314,41 +2286,12 @@ public class ExportServiceImpl implements ExportService {
             exportDtoList.add(exportDto);
         }
 
-        String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
-        File file = new File(basePath + "/" + managerDownload.getName());
-        FileOutputStream fileOutputStream = new FileOutputStream(file);
-
-        HSSFWorkbook workbook = null;
-        try {
-            Map<String, String> headMap = getExportMap(new ExportDto(ExportEnum.ORDER_LIST_SUM, headColumns));
-            String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
-            String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
-            workbook = POIUtil.exportExcel(header, body, exportDtoList);
-            workbook.write(fileOutputStream);
-            fileOutputStream.getFD().sync();
-            fileOutputStream.close();
-
-            String folder = "download/" + UploadUtil.getFileFloder();
-            String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, folder, file);
-            //把记录插入下载表
-            managerDownload.setFileUrl(url);
-            managerDownload.setStatus(1);
-            managerDownloadDao.update(managerDownload);
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            try {
-                fileOutputStream.close();
-                workbook.close();
-                file.delete();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
+        HSSFWorkbook workbook = getHSSFWorkbook(exportDtoList,headColumns,ExportEnum.ORDER_LIST_SUM);
+        exportManagerDownload(workbook,managerDownload);
     }
 
     @Override
-    public void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws FileNotFoundException {
+    public void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.ExportQueryPage(params);
 
         Map<Integer, String> cooperationOrganMap = new HashMap<>();
@@ -2869,82 +2812,26 @@ public class ExportServiceImpl implements ExportService {
             List<String> organIds = Arrays.asList(organIdArr);
             studentPaymentOrderExportDtos.removeIf(order -> !organIds.contains(order.getOrganId().toString()));
         }
-
-        String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
-        File file = new File(basePath + "/" + managerDownload.getName());
-        FileOutputStream fileOutputStream = new FileOutputStream(file);
-
-        HSSFWorkbook workbook = null;
-        try {
-            Map<String, String> headMap = getExportMap(new ExportDto(ExportEnum.ROUTE_ORDER_LIST1, headColumns));
-            String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
-            String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
-            workbook = POIUtil.exportExcel(header, body, studentPaymentOrderExportDtos);
-            workbook.write(fileOutputStream);
-            fileOutputStream.getFD().sync();
-            fileOutputStream.close();
-
-            String folder = "download/" + UploadUtil.getFileFloder();
-            String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, folder, file);
-            //把记录插入下载表
-            managerDownload.setFileUrl(url);
-            managerDownload.setStatus(1);
-            managerDownloadDao.update(managerDownload);
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            try {
-                fileOutputStream.close();
-                workbook.close();
-                file.delete();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
+        HSSFWorkbook workbook = getHSSFWorkbook(studentPaymentOrderExportDtos,headColumns,ExportEnum.ROUTE_ORDER_LIST1);
+        exportManagerDownload(workbook,managerDownload);
     }
 
     @Override
-    public void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException {
+    public void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
         List<CourseScheduleEndDto> rows = courseScheduleService.endFindCourseSchedules(queryInfo).getRows();
         for (CourseScheduleEndDto row : rows) {
             row.setIsComplaints(StringUtils.equals(row.getIsComplaints(), "1") ? "有" : "无");
         }
-        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 {
-            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"}, rows);
-
-            workbook.write(fileOutputStream);
-            fileOutputStream.getFD().sync();
-            fileOutputStream.close();
-
-            String folder = "download/" + UploadUtil.getFileFloder();
-            String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, folder, file);
-            //把记录插入下载表
-            managerDownload.setFileUrl(url);
-            managerDownload.setStatus(1);
-            managerDownloadDao.update(managerDownload);
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            if (ouputStream != null) {
-                try {
-                    ouputStream.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
+        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"}, rows);
+        exportManagerDownload(workbook,managerDownload);
     }
 
     @Override
-    public void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws FileNotFoundException {
+    public void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
         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());
@@ -3011,171 +2898,68 @@ public class ExportServiceImpl implements ExportService {
                 }
             }
         }
-        String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
-        File file = new File(basePath + "/" + managerDownload.getName());
-        FileOutputStream fileOutputStream = new FileOutputStream(file);
-
-        HSSFWorkbook workbook = null;
-        try {
-            Map<String, String> headMap = getExportMap(new ExportDto(ExportEnum.STUDENT_VIP_PRACTICE, headColumns));
-            String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
-            String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
-            workbook = POIUtil.exportExcel(header, body, studentVipPracticeExportDtos);
-            workbook.write(fileOutputStream);
-            fileOutputStream.getFD().sync();
-            fileOutputStream.close();
-
-            String folder = "download/" + UploadUtil.getFileFloder();
-            String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, folder, file);
-            //把记录插入下载表
-            managerDownload.setFileUrl(url);
-            managerDownload.setStatus(1);
-            managerDownloadDao.update(managerDownload);
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            try {
-                fileOutputStream.close();
-                workbook.close();
-                file.delete();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
+        HSSFWorkbook workbook = getHSSFWorkbook(studentVipPracticeExportDtos,headColumns,ExportEnum.STUDENT_VIP_PRACTICE);
+        exportManagerDownload(workbook,managerDownload);
     }
 
     @Override
-    public void queryStudentCourseInfo(String organId, Integer tenantId, String groupType, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws FileNotFoundException {
-        List<ExportStudentCourseInfoDto> studentCourseInfoDtos = courseScheduleStudentPaymentDao.queryStudentCourseInfo(organId,tenantId,groupType);
-        String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
-        File file = new File(basePath + "/" + managerDownload.getName());
-        FileOutputStream fileOutputStream = new FileOutputStream(file);
-
-        HSSFWorkbook workbook = null;
-        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()]);
-            workbook = POIUtil.exportExcel(header, body, studentCourseInfoDtos);
-            workbook.write(fileOutputStream);
-            fileOutputStream.getFD().sync();
-            fileOutputStream.close();
-
-            String folder = "download/" + UploadUtil.getFileFloder();
-            String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, folder, file);
-            //把记录插入下载表
-            managerDownload.setFileUrl(url);
-            managerDownload.setStatus(1);
-            managerDownloadDao.update(managerDownload);
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            try {
-                fileOutputStream.close();
-                workbook.close();
-                file.delete();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
+    public void queryStudentCourseInfo(String organId, Integer tenantId, String groupType, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
+        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 FileNotFoundException {
-        List<ExportVipStudentCourseManageDto> studentCourseInfoDtos = courseScheduleStudentPaymentDao.queryVipStudentCourseManage(organId,tenantId);
-        String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
-        File file = new File(basePath + "/" + managerDownload.getName());
-        FileOutputStream fileOutputStream = new FileOutputStream(file);
-
-        HSSFWorkbook workbook = null;
-        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()]);
-            workbook = POIUtil.exportExcel(header, body, studentCourseInfoDtos);
-            workbook.write(fileOutputStream);
-            fileOutputStream.getFD().sync();
-            fileOutputStream.close();
-
-            String folder = "download/" + UploadUtil.getFileFloder();
-            String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, folder, file);
-            //把记录插入下载表
-            managerDownload.setFileUrl(url);
-            managerDownload.setStatus(1);
-            managerDownloadDao.update(managerDownload);
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            try {
-                fileOutputStream.close();
-                workbook.close();
-                file.delete();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
+    public void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
+        List<ExportVipStudentCourseManageDto> rows = courseScheduleStudentPaymentDao.queryVipStudentCourseManage(organId,tenantId);
+        HSSFWorkbook workbook = getHSSFWorkbook(rows,headColumns,exportEnum);
+        exportManagerDownload(workbook,managerDownload);
     }
 
     @Override
-    public void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException {
+    public void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
         List<StudentStatisticsDto> rows = studentStatisticsService.queryStatisticsPage(queryInfo).getRows();
-        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 {
-            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);
-
-            workbook.write(fileOutputStream);
-            fileOutputStream.getFD().sync();
-            fileOutputStream.close();
-
-            String folder = "download/" + UploadUtil.getFileFloder();
-            String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, folder, file);
-            //把记录插入下载表
-            managerDownload.setFileUrl(url);
-            managerDownload.setStatus(1);
-            managerDownloadDao.update(managerDownload);
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            if (ouputStream != null) {
-                try {
-                    ouputStream.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
+        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);
     }
 
     @Override
-    public void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException {
+    public void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
         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);
+    }
+
+    public HSSFWorkbook getHSSFWorkbook(List rows, List<String> headColumns, ExportEnum exportEnum) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, IOException {
+        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 void exportManagerDownload(HSSFWorkbook workbook, ManagerDownload managerDownload) throws FileNotFoundException {
         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 {
-            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);
-
             workbook.write(fileOutputStream);
             fileOutputStream.getFD().sync();
             fileOutputStream.close();
@@ -3198,4 +2982,14 @@ public class ExportServiceImpl implements ExportService {
             }
         }
     }
+
+    @Override
+    public void exportMusicGroupCourseList(ManagerDownload managerDownload, List<MusicGroupExportDto> rows) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, IOException {
+        HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "乐团编号", "乐团名称", "乐团主管","出勤率", "达标率", "作业提交率", "成团人数", "新增人数",
+                        "退团人数", "在读人数","流失率"},
+                new String[]{"organName", "musicGroupId", "musicGroupName",
+                        "eduName","attendanceRate", "standardRate", "homeworkCommitRate",
+                        "groupMemberNum","addStuNum","quitStuNum","normalNum","lostRate"}, rows);
+        exportManagerDownload(workbook,managerDownload);
+    }
 }

+ 50 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -1079,4 +1079,54 @@
             AND DATE_FORMAT(mgq.create_time_,'%Y-%m-%d') &lt;= DATE_FORMAT(#{queryInfo.endDate}, '%Y-%m-%d' )
         </if>
     </select>
+    <resultMap id="MusicGroupExportDto" type="com.ym.mec.biz.dal.dto.MusicGroupExportDto">
+        <result property="organName" column="organ_name_"/>
+        <result property="musicGroupId" column="music_group_id_"/>
+        <result property="musicGroupName" column="music_group_name_"/>
+        <result property="eduName" column="educational_teacher_name_"/>
+        <result property="attendanceRate" column="attendance_rate_"/>
+        <result property="standardRate" column="standard_rate_"/>
+        <result property="homeworkCommitRate" column="homework_commit_rate_"/>
+        <result property="groupMemberNum" column="group_member_num_"/>
+        <result property="addStuNum" column="add_stu_num_"/>
+        <result property="quitStuNum" column="quit_stu_num_"/>
+        <result property="normalNum" column="normal_num_"/>
+        <result property="totalNum" column="total_num_"/>
+        <result property="lostRate" column="lost_rate_"/>
+    </resultMap>
+    <select id="exportMusicGroupCourseList" resultMap="MusicGroupExportDto">
+        SELECT o.name_ organ_name_,css.music_group_id_,mg.name_ music_group_name_,su.real_name_ educational_teacher_name_,
+        CONCAT(TRUNCATE((css.attendance_num_ + css.late_num_) / css.course_student_total_num_ * 100,2),'%') attendance_rate_,
+        CONCAT(TRUNCATE(css.standard_num_ / css.course_student_total_num_ * 100,2),'%') standard_rate_,
+        CONCAT(TRUNCATE(css.homework_commit_num_ / css.course_student_total_num_ * 100,2),'%') homework_commit_rate_,
+        mg.group_member_num_,COUNT(DISTINCT CASE WHEN sr.original_flag_ = 0 AND sr.music_group_status_ = 'NORMAL' THEN sr.user_id_ ELSE NULL END) add_stu_num_,
+        COUNT(DISTINCT CASE WHEN mgq.status_ = 'APPROVED' THEN mgq.apply_user_id_ ELSE NULL END) quit_stu_num_,
+        COUNT(CASE WHEN sr.music_group_status_ = 'NORMAL' THEN 1 ELSE NULL END) normal_num_,
+        COUNT(CASE WHEN sr.music_group_status_ != 'APPLY' THEN 1 ELSE NULL END) total_num_,
+        CONCAT(TRUNCATE(COUNT(DISTINCT CASE WHEN mgq.status_ = 'APPROVED' THEN mgq.apply_user_id_ ELSE NULL END) /
+               COUNT(CASE WHEN sr.music_group_status_ != 'APPLY' THEN 1 ELSE NULL END) * 100,2),'%') lost_rate_
+        FROM music_group mg
+        LEFT JOIN course_schedule_statistics css ON mg.id_ = css.music_group_id_
+        <if test="queryInfo.startTime != null and queryInfo.startTime != ''">
+            AND css.class_date_ BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
+        </if>
+        LEFT JOIN organization o ON o.id_ = mg.organ_id_
+        LEFT JOIN sys_user su ON su.id_ = mg.educational_teacher_id_
+        LEFT JOIN student_registration sr ON sr.music_group_id_ = mg.id_
+        <if test="queryInfo.startTime != null and queryInfo.startTime != ''">
+            AND sr.create_time_ BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
+        </if>
+        LEFT JOIN music_group_quit mgq ON mgq.music_group_id_ = mg.id_
+        <if test="queryInfo.startTime != null and queryInfo.startTime != ''">
+            AND mgq.create_time_ BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
+        </if>
+        <where>
+            mg.status_ = 'PROGRESS'
+            <if test="queryInfo.organId != null and queryInfo.organId != ''">
+                AND FIND_IN_SET(mg.organ_id_,#{queryInfo.organId})
+            </if>
+        </where>
+        GROUP BY mg.id_
+        ORDER BY o.id_
+    </select>
 </mapper>

+ 25 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -182,6 +182,31 @@ public class ExportController extends BaseController {
         return exportService.getExportManageFuncMap().get(exportDto.getExportEnum()).apply(queryInfo,exportDto.getHeadColumns());
     }
 
+
+    @ApiOperation(value = "导出乐团课列表详情")
+    @PostMapping("export/exportMusicGroupCourseList")
+    @PreAuthorize("@pcs.hasPermissions('export/exportMusicGroupCourseList')")
+    public HttpResponseResult exportMusicGroupCourseList(ExportUserAccountQueryInfo queryInfo) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganId(),sysUser.getIsSuperAdmin()));
+        List<MusicGroupExportDto> exportDtoList = musicGroupDao.exportMusicGroupCourseList(queryInfo);
+        if (CollectionUtils.isEmpty(exportDtoList)) {
+            throw new BizException("没有可导出的记录");
+        }
+        ManagerDownload managerDownload = exportService.saveManagerDownload(ExportTypeEnum.MUSIC_GROUP_DATA_EXPORT,sysUser.getId());
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CompletableFuture.runAsync(()->{
+            try {
+                exportService.exportMusicGroupCourseList(managerDownload,exportDtoList);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        },executor);
+        HttpResponseResult<Object> succeed = succeed();
+        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
+        return succeed;
+    }
+
     @ApiOperation(value = "乐团详情--课表详情列表(课表详情)导出")
     @GetMapping("export/exportMusicGroupCourseScheduleDetail")
     @PreAuthorize("@pcs.hasPermissions('export/exportMusicGroupCourseScheduleDetail')")