浏览代码

导出优化

zouxuan 3 年之前
父节点
当前提交
852d6199fd
共有 24 个文件被更改,包括 1864 次插入639 次删除
  1. 25 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportDto.java
  2. 34 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OrganDoubleEleven2021StatisDto.java
  3. 0 14
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/AccountLogQueryInfo.java
  4. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/ArrearageStudentsQueryInfo.java
  5. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseSalaryQueryInfo4Web.java
  6. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentExercisesSituationQueryInfo.java
  7. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ExportFunction.java
  8. 245 21
      mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java
  9. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/OrganizationService.java
  10. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupActivityService.java
  11. 1299 46
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  12. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrganizationServiceImpl.java
  13. 4 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java
  14. 2 2
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  15. 1 1
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  16. 2 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml
  17. 4 4
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  18. 183 453
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  19. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderDetailController.java
  20. 1 4
      mec-web/src/main/java/com/ym/mec/web/controller/StudentExtracurricularExercisesSituationController.java
  21. 3 2
      mec-web/src/main/java/com/ym/mec/web/controller/VipGroupActivityController.java
  22. 2 2
      mec-web/src/main/java/com/ym/mec/web/controller/education/ActivityController.java
  23. 3 44
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduStudentExtracurricularExercisesSituationController.java
  24. 18 18
      mec-web/src/main/resources/exportColumnMapper.ini

+ 25 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportDto.java

@@ -2,10 +2,32 @@ package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.enums.ExportEnum;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 public class ExportDto {
+    public ExportDto() {
+    }
+
+    public ExportDto(ExportEnum exportEnum, List<String> headColumns) {
+        this.exportEnum = exportEnum;
+        this.headColumns = headColumns;
+    }
+
     private ExportEnum exportEnum;
 
-    private String[] headColumns;
+    private List<String> headColumns;
+
+    private Map<String,Object> queryInfo = new HashMap<>();
+
+    public Map<String, Object> getQueryInfo() {
+        return queryInfo;
+    }
+
+    public void setQueryInfo(Map<String, Object> queryInfo) {
+        this.queryInfo = queryInfo;
+    }
 
     public ExportEnum getExportEnum() {
         return exportEnum;
@@ -15,11 +37,11 @@ public class ExportDto {
         this.exportEnum = exportEnum;
     }
 
-    public String[] getHeadColumns() {
+    public List<String> getHeadColumns() {
         return headColumns;
     }
 
-    public void setHeadColumns(String[] headColumns) {
+    public void setHeadColumns(List<String> headColumns) {
         this.headColumns = headColumns;
     }
 }

+ 34 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OrganDoubleEleven2021StatisDto.java

@@ -0,0 +1,34 @@
+package com.ym.mec.biz.dal.dto;
+
+public class OrganDoubleEleven2021StatisDto{
+
+    private Integer organId;
+
+    private String order = "DESC";
+
+    private String sort = "totalBuyAmount";
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public String getOrder() {
+        return order;
+    }
+
+    public void setOrder(String order) {
+        this.order = order;
+    }
+
+    public String getSort() {
+        return sort;
+    }
+
+    public void setSort(String sort) {
+        this.sort = sort;
+    }
+}

+ 0 - 14
mec-biz/src/main/java/com/ym/mec/biz/dal/page/AccountLogQueryInfo.java

@@ -1,9 +1,6 @@
 package com.ym.mec.biz.dal.page;
 
 import com.ym.mec.common.page.QueryInfo;
-import io.swagger.annotations.ApiModelProperty;
-
-import java.util.Date;
 
 /**
 * @author zx
@@ -27,17 +24,6 @@ public class AccountLogQueryInfo extends QueryInfo {
 
     private Boolean returnFeeFlag;
 
-    //需要导出的列
-    private String[] headColumns;
-
-    public String[] getHeadColumns() {
-        return headColumns;
-    }
-
-    public void setHeadColumns(String[] headColumns) {
-        this.headColumns = headColumns;
-    }
-
     public Boolean getReturnFeeFlag() {
         return returnFeeFlag;
     }

+ 5 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/page/ArrearageStudentsQueryInfo.java

@@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty;
  */
 public class ArrearageStudentsQueryInfo extends QueryInfo {
 
-    private String organIds;
+    private String organId;
 
     private String musicGroupId;
 
@@ -31,12 +31,12 @@ public class ArrearageStudentsQueryInfo extends QueryInfo {
         this.courseViewType = courseViewType;
     }
 
-    public String getOrganIds() {
-        return organIds;
+    public String getOrganId() {
+        return organId;
     }
 
-    public void setOrganIds(String organIds) {
-        this.organIds = organIds;
+    public void setOrganId(String organId) {
+        this.organId = organId;
     }
 
     public String getMusicGroupId() {

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseSalaryQueryInfo4Web.java

@@ -13,6 +13,8 @@ public class CourseSalaryQueryInfo4Web extends QueryInfo {
 
     private String month;
 
+    private String organId;
+
     private String organIdList;
 
     private GroupType groupType;
@@ -58,6 +60,16 @@ public class CourseSalaryQueryInfo4Web extends QueryInfo {
     }
 
     public void setOrganIdList(String organIdList) {
+        this.organId = organIdList;
+        this.organIdList = organIdList;
+    }
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organIdList;
         this.organIdList = organIdList;
     }
 

+ 5 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentExercisesSituationQueryInfo.java

@@ -11,7 +11,7 @@ import java.util.Date;
  */
 public class StudentExercisesSituationQueryInfo extends QueryInfo {
 
-    private String organIdList;
+    private String organId;
 
     @ApiModelProperty(value = "周一日期")
     private java.util.Date monday;
@@ -99,12 +99,12 @@ public class StudentExercisesSituationQueryInfo extends QueryInfo {
         this.teacherId = teacherId;
     }
 
-    public String getOrganIdList() {
-        return organIdList;
+    public String getOrganId() {
+        return organId;
     }
 
-    public void setOrganIdList(String organIdList) {
-        this.organIdList = organIdList;
+    public void setOrganId(String organId) {
+        this.organId = organId;
     }
 
     public Date getMonday() {

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ExportFunction.java

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

+ 245 - 21
mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java

@@ -1,44 +1,268 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.ExportDto;
 import com.ym.mec.biz.dal.entity.ManagerDownload;
+import com.ym.mec.biz.dal.enums.ExportEnum;
+import com.ym.mec.biz.dal.enums.ExportTypeEnum;
 import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
+import com.ym.mec.common.entity.HttpResponseResult;
+import org.springframework.scheduling.annotation.Async;
 
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletResponse;
 import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.List;
 import java.util.Map;
+import java.util.function.BiFunction;
+import java.util.function.Function;
 
 
 public interface ExportService {
 
+    Map<String,String> getExportMap(ExportDto exportDto) throws IOException;
+
+    List<String> getExportFields(ExportEnum exportEnum) throws IOException;
+
+    <T> void export(HttpServletResponse response, List<T> rows, ExportDto exportDto) throws IOException;
+
+    Map<ExportEnum, BiFunction<Map<String, Object>,List<String>, HttpResponseResult>> getExportManageFuncMap();
+
+    Map<ExportEnum, Function<Map<String, Object>, List>> getExportFuncMap();
+
     /**
-     * 订单列表导出
-     * @param params
-     * @throws Exception
-     */
-    void orderList(Map<String, Object> params, ManagerDownload managerDownload, boolean isPlatformUser) throws Exception;
+    * @description: 班级列表导出
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 12:18
+    */
+    List exportClassGroup(Map<String, Object> info);
 
+    /**
+    * @description: 导出老师结转奖励
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 12:19
+    */
+    List teacherCourseReward(Map<String, Object> info);
 
     /**
-     * 财务管理下载
-     * @param params
-     * @param managerDownload
-     * @throws Exception
-     */
-    void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload, boolean isPlatformUser) throws Exception;
+    * @description: 导出陪练课列表
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 12:19
+    */
+    List practiceGroupList(Map<String, Object> info);
+
+    /**
+    * @description: 乐团【报名中、缴费中】 学生详情列表导出
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 12:19
+    */
+    List queryStudentApplyDetailExport(Map<String, Object> info);
 
     /**
-     * 课表列表导出
-     * @param queryInfo
-     * @param managerDownload
+    * @description: 评论列表导出
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 13:32
+    */
+    List courseReviews(Map<String, Object> info);
+
+    /**
+     * @description: 乐团管理--乐团详情-导出学员列表
+     * @param info
+     * @return java.util.List
+     * @author zx
+     * @date 2022/2/10 13:32
      */
-    void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException;
+    List queryMusicGroupStudent(Map<String, Object> info);
+
+    /**
+    * @description: 网管课管理导出
+     * @param
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 13:32
+    */
+    List practiceGroup();
+
+    /**
+    * @description: vip管理导出
+     * @param
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 13:33
+    */
+    List vipGroup();
+
+    /**
+    * @description: 学生课外训练记录导出
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 13:33
+    */
+    List extraExercisesReplys(Map<String, Object> info);
+
+    /**
+    * @description: 教师课酬导出
+     * @param info
+    * @return
+    * @author zx
+    * @date 2022/2/10 13:33
+    */
+    List isSettlementCourseSalarys(Map<String, Object> info);
+
+    /**
+    * @description: 运营指标管理导出
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 13:33
+    */
+    List operatingStudents(Map<String, Object> info);
+
+    /**
+    * @description: vip评论列表导出
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 13:33
+    */
+    List vipCourseReviews(Map<String, Object> info);
+
+    /**
+    * @description: 考级报名导出
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 13:33
+    */
+    List degreeRegistration(Map<String, Object> info);
+
+    /**
+    * @description: 回款统计
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 13:34
+    */
+    List studentOrder(Map<String, Object> info);
+
+    /**
+    * @description: 销售列表导出
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 13:34
+    */
+    List exportSellOrders(Map<String, Object> info);
+
+    /**
+    * @description: 服务指标明细导出
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 13:34
+    */
+    List teacherServeInfo(Map<String, Object> info);
+
+    /**
+    * @description: 首页异常统计导出
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 13:34
+    */
+    List exportIndexErrData(Map<String, Object> info);
+
+    /**
+    * @description: 分部云教练学员数据预览导出
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 13:34
+    */
+    List organStudentOverView(Map<String, Object> info);
+
+    /**
+    * @description: 分部云教练学员训练数据导出
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 13:34
+    */
+    List cloudStudyStudentTrainData(Map<String, Object> info);
+
+    /**
+    * @description: 分部云教练学员数据详情导出
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 13:34
+    */
+    List cloudStudyStudentOverView(Map<String, Object> info);
+
+    //乐团声部在读人数导出
+    void musicGroupNormalStudentNum(HttpServletResponse response, ExportDto exportDto) throws IOException;
+
+    /**
+    * @description: 分部云教练活动统计数据导出
+     * @param info
+    * @return java.util.List
+    * @author zx
+    * @date 2022/2/10 13:34
+    */
+    List countCloudTeacherActive(Map<String, Object> info);
 
     /**
-    * @description:  报表中心学员小课记录导出
-     * @param organId
-     * @param managerDownload
-    * @return void
+    * @description: 云教练活动统计详情
+     * @param info
+    * @return java.util.List
     * @author zx
-    * @date 2021/11/5 11:38 
+    * @date 2022/2/10 13:35
     */
-    void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId) throws FileNotFoundException;
+    List countCloudTeacherActiveDetail(Map<String, Object> info);
+
+    <T> T getQueryInfo(Map<String, Object> info, Class<T> clazz, Boolean organFlag);
+
+    <T> T getParam(Map<String, Object> info, String key, Class<T> clazz);
+
+    //报名中缴费中乐团缴费情况导出
+    void musicGroupRegister(HttpServletResponse response, ExportDto exportDto) throws IOException;
+
+    //财务管理导出
+    HttpResponseResult routeOrderList(Map<String, Object> info,List<String> headColumns);
+
+    //学员小课记录导出
+    HttpResponseResult exportStudentVipPractice(Map<String, Object> info,List<String> headColumns);
+
+    //订单列表导出
+    HttpResponseResult orderList(Map<String, Object> info,List<String> headColumns);
+
+    //终课表列表导出
+    HttpResponseResult superFindCourseSchedules(Map<String, Object> info);
+
+    //保存下载记录
+    ManagerDownload saveManagerDownload(ExportTypeEnum exportTypeEnum, Integer userId);
+
+    @Async
+    abstract void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws FileNotFoundException;
+
+
+    @Async
+    abstract void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws FileNotFoundException;
+
+    @Async
+    abstract void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException;
+
+    @Async
+    abstract void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws FileNotFoundException;
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/OrganizationService.java

@@ -53,7 +53,7 @@ public interface OrganizationService extends BaseService<Integer, Organization>
     * @author zx
     * @date 2022/1/5 12:44
     */
-    String getEmployeeOrgan(String organIds);
+    String getEmployeeOrgan(Object organIds);
 
     /**
     * @description: 获取老师所在分部列表(包含流动分部)

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupActivityService.java

@@ -77,7 +77,7 @@ public interface VipGroupActivityService extends BaseService<Integer, VipGroupAc
     * @author zx
     * @date 2021/10/25 12:07
     */
-    List<DoubleEleven2021Dto> organDoubleEleven2021Statis(String order,String sort,Integer organId);
+    List<DoubleEleven2021Dto> organDoubleEleven2021Statis(OrganDoubleEleven2021StatisDto queryInfo);
 
     /**
     * @description: 双11活动统计

文件差异内容过多而无法显示
+ 1299 - 46
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java


+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrganizationServiceImpl.java

@@ -123,12 +123,12 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 	}
 
 	@Override
-	public String getEmployeeOrgan(String organIds) {
+	public String getEmployeeOrgan(Object organIds) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser == null) {
 			throw new BizException("用户信息获取失败");
 		}
-		return this.getEmployeeOrgan(sysUser.getId(),organIds,sysUser.getIsSuperAdmin());
+		return this.getEmployeeOrgan(sysUser.getId(),organIds == null?"":organIds.toString(),sysUser.getIsSuperAdmin());
 	}
 
 	@Override

+ 4 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java

@@ -213,14 +213,10 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 	}
 
     @Override
-    public List<DoubleEleven2021Dto> organDoubleEleven2021Statis(String order,String sort,Integer organId) {
-		if(StringUtils.isEmpty(order)){
-			order = "DESC";
-		}
-		if(StringUtils.isEmpty(sort)){
-			sort = "totalBuyAmount";
-		}
-		List<DoubleEleven2021Dto> doubleEleven2021Dtos = vipGroupActivityDao.countOrganDoubleEleven2021Statis(organId);
+    public List<DoubleEleven2021Dto> organDoubleEleven2021Statis(OrganDoubleEleven2021StatisDto statisDto) {
+		String order = statisDto.getOrder();
+		String sort = statisDto.getSort();
+		List<DoubleEleven2021Dto> doubleEleven2021Dtos = vipGroupActivityDao.countOrganDoubleEleven2021Statis(statisDto.getOrganId());
 		if(doubleEleven2021Dtos != null && doubleEleven2021Dtos.size() > 0){
 			List<Integer> organIdList = doubleEleven2021Dtos.stream().map(e -> e.getOrganId()).collect(Collectors.toList());
 			List<DoubleEleven2021ActivityDto> activityDtoList = vipGroupActivityDao.countOrganActivityStatis(organIdList);

+ 2 - 2
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -928,8 +928,8 @@
 			<if test="month!=null">
 				AND DATE_FORMAT(cs.class_date_, '%Y-%m') = #{month}
 			</if>
-			<if test="organIdList">
-				AND FIND_IN_SET(t.organ_id_,#{organIdList})
+			<if test="organId != null and organId != ''">
+				AND FIND_IN_SET(t.organ_id_,#{organId})
 			</if>
 			<if test="search!=null">
 				AND (csts.course_schedule_id_=#{search} OR cs.name_ LIKE CONCAT('%', #{search}, '%'))

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

@@ -622,7 +622,7 @@
                     #{musicGroupStatus}
                 </foreach>
             </if>
-            <if test="organIds != null">
+            <if test="organIds != null and organIds != ''">
                 AND FIND_IN_SET (mg.organ_id_,#{organIds})
             </if>
             AND (mg.del_flag_ IS NULL OR mg.del_flag_=0)

+ 2 - 2
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml

@@ -447,8 +447,8 @@
 			</if>
 			AND mgpcd.payment_status_ = 'NON_PAYMENT' AND mgpc.batch_no_ IS NOT NULL AND mgpc.pay_user_type_ = 'STUDENT'
 			AND mgpc.current_total_amount_ > 0
-			<if test="organIds != null and organIds != ''">
-				AND FIND_IN_SET(mg.organ_id_,#{organIds})
+			<if test="organId != null and organId != ''">
+				AND FIND_IN_SET(mg.organ_id_,#{organId})
 			</if>
 			<if test="musicGroupId!=null and musicGroupId!=''">
 				AND mgpc.music_group_id_ = #{musicGroupId}

+ 4 - 4
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -256,8 +256,8 @@
 		<if test="search!=null">
 			AND (stu.id_=#{search} OR stu.username_ LIKE CONCAT('%', #{search}, '%'))
 		</if>
-		<if test="organIdList != null">
-			AND FIND_IN_SET(t.organ_id_,#{organIdList})
+		<if test="organId != null and organId != ''">
+			AND FIND_IN_SET(t.organ_id_,#{organId})
 		</if>
 		<if test="existVipCourse!=null and existVipCourse==1">
 			AND EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='VIP' AND class_date_ BETWEEN #{monday} AND #{sunday})
@@ -350,8 +350,8 @@
 		<if test="search!=null">
 			AND (stu.id_=#{search} OR stu.username_ LIKE CONCAT('%', #{search}, '%'))
 		</if>
-		<if test="organIdList != null">
-			AND FIND_IN_SET(t.organ_id_, #{organIdList})
+		<if test="organId != null and organId != ''">
+			AND FIND_IN_SET(t.organ_id_, #{organId})
 		</if>
 		<if test="existVipCourse!=null and existVipCourse==1">
 			AND EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='VIP' AND class_date_ BETWEEN #{monday} AND #{sunday})

+ 183 - 453
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -18,24 +18,18 @@ import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.excel.POIUtil;
-import com.ym.mec.util.ini.IniFileUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.io.ClassPathResource;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.OutputStream;
 import java.math.BigDecimal;
 import java.util.*;
@@ -105,8 +99,6 @@ public class ExportController extends BaseController {
     @Autowired
     private TeacherService teacherService;
     @Autowired
-    private MusicGroupBuildLogDao musicGroupBuildLogDao;
-    @Autowired
     private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
     @Autowired
     private SellOrderService sellOrderService;
@@ -146,88 +138,46 @@ public class ExportController extends BaseController {
     private MusicEnlightenmentQuestionnaireService musicEnlightenmentQuestionnaireService;
     @Autowired
     private MusicGroupService musicGroupService;
-    @Autowired
-    private SysUserCashAccountLogService sysUserCashAccountLogService;
 
-    public static void main(String[] args) throws IOException {
-        InputStream inputStream = new ClassPathResource("exportColumnMapper.ini").getInputStream();
-        Map<String, String> columns = IniFileUtil.readIniFile(inputStream, ExportEnum.USER_CASH_ACCOUNT_LOG.getMsg());
+    @ApiOperation(value = "获取可导出字段")
+    @RequestMapping("export/getFields")
+    @PreAuthorize("@pcs.hasPermissions('export/getFields')")
+    public HttpResponseResult export(ExportEnum exportEnum) throws IOException {
+        return succeed(exportService.getExportFields(exportEnum));
     }
 
-    public <T> void export(HttpServletResponse response,List<T> rows,ExportDto exportDto) throws IOException {
-        if(rows == null || rows.size() == 0){
-            throw new BizException("没有可导出数据");
-        }
-        String[] headColumns = exportDto.getHeadColumns();
-        if(headColumns == null || headColumns.length == 0){
-            throw new BizException("请选择导出字段");
-        }
-        if(exportDto.getExportEnum() == null){
-            throw new BizException("请选择导出类型");
-        }
-        InputStream inputStream = new ClassPathResource("columnMapper.ini").getInputStream();
-        Map<String, String> columns = IniFileUtil.readIniFile(inputStream, exportDto.getExportEnum().getMsg());
-        OutputStream outputStream = response.getOutputStream();
-        try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"退费编号", "学员编号", "学员姓名","分部", "课程组编号", "课程组类型",
-                    "退费金额","退费类型","退费时间","交易流水号", "打款时间"}, new String[]{
-                    "id", "userId","username", "organName", "groupId","groupType.desc",
-                    "amount", "returnFeeType.msg", "createTime", "transNo","payTime"}, rows);
-            response.setContentType("application/octet-stream");
-            response.setHeader("Content-Disposition", "attac:wq" +
-                    "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
-
-            outputStream = response.getOutputStream();
-            workbook.write(outputStream);
-            outputStream.flush();
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            if (outputStream != null) {
-                try {
-                    outputStream.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
+    @ApiOperation(value = "导出")
+    @RequestMapping("export/now")
+    @PreAuthorize("@pcs.hasPermissions('export/now')")
+    public void export(HttpServletResponse response, @RequestBody ExportDto exportDto) throws Exception {
+        if(exportDto.getExportEnum() == ExportEnum.MUSIC_GROUP_REGISTER){
+            exportService.musicGroupRegister(response,exportDto);
+        }else if(exportDto.getExportEnum() == ExportEnum.MUSIC_GROUP_NORMAL_STUDENT_NUM){
+            exportService.musicGroupNormalStudentNum(response,exportDto);
+        }else {
+            Map<String, Object> queryInfo = exportDto.getQueryInfo();
+            if(queryInfo == null){
+                queryInfo = new HashMap<>(10);
             }
+            queryInfo.put("page",1);
+            queryInfo.put("rows",49999);
+            queryInfo.put("isExport",true);
+            exportService.export(response,exportService.getExportFuncMap().get(exportDto.getExportEnum()).apply(queryInfo),exportDto);
         }
     }
 
-    @ApiOperation(value = "退费记录导出")
-    @RequestMapping("export/userCashAccountLog")
-    @PreAuthorize("@pcs.hasPermissions('export/userCashAccountLog')")
-    public void exportUserCashAccountLog(HttpServletResponse response, AccountLogQueryInfo queryInfo) throws IOException {
-        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
-        queryInfo.setPage(1);
-        queryInfo.setRows(49999);
-        List<SysUserCashAccountLog> rows = sysUserCashAccountLogService.queryPage(queryInfo).getRows();
-        if(rows.size() < 1){
-            throw new BizException("没有可导出数据");
-        }
-        OutputStream outputStream = response.getOutputStream();
-        try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"退费编号", "学员编号", "学员姓名","分部", "课程组编号", "课程组类型",
-                    "退费金额","退费类型","退费时间","交易流水号", "打款时间"}, new String[]{
-                    "id", "userId","username", "organName", "groupId","groupType.desc",
-                    "amount", "returnFeeType.msg", "createTime", "transNo","payTime"}, rows);
-            response.setContentType("application/octet-stream");
-            response.setHeader("Content-Disposition", "attac:wq" +
-                    "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
-            
-            outputStream = response.getOutputStream();
-            workbook.write(outputStream);
-            outputStream.flush();
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            if (outputStream != null) {
-                try {
-                    outputStream.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
+    @ApiOperation(value = "导出到报表中心")
+    @PostMapping("export/managerDownload")
+    @PreAuthorize("@pcs.hasPermissions('export/managerDownload')")
+    public HttpResponseResult managerDownload(@RequestBody ExportDto exportDto){
+        Map<String, Object> queryInfo = exportDto.getQueryInfo();
+        if(queryInfo == null){
+            queryInfo = new HashMap<>(10);
         }
+        queryInfo.put("page",1);
+        queryInfo.put("rows",49999);
+        queryInfo.put("isExport",true);
+        return exportService.getExportManageFuncMap().get(exportDto.getExportEnum()).apply(queryInfo,exportDto.getHeadColumns());
     }
 
     @ApiOperation(value = "乐团列表导出")
@@ -251,7 +201,7 @@ public class ExportController extends BaseController {
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
-            
+
             outputStream = response.getOutputStream();
             workbook.write(outputStream);
             outputStream.flush();
@@ -288,7 +238,7 @@ public class ExportController extends BaseController {
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
-            
+
             outputStream = response.getOutputStream();
             workbook.write(outputStream);
             outputStream.flush();
@@ -324,7 +274,7 @@ public class ExportController extends BaseController {
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
-            
+
             outputStream = response.getOutputStream();
             workbook.write(outputStream);
             outputStream.flush();
@@ -344,8 +294,8 @@ public class ExportController extends BaseController {
     @ApiOperation(value = "分部2021双11活动统计导出")
     @RequestMapping("export/organDoubleEleven2021Statis")
     @PreAuthorize("@pcs.hasPermissions('export/organDoubleEleven2021Statis')")
-    public void organDoubleEleven2021Statis(HttpServletResponse response,Integer organId,String order, String sort) throws IOException {
-        List<DoubleEleven2021Dto> rows = vipGroupActivityService.organDoubleEleven2021Statis(order, sort,organId);
+    public void organDoubleEleven2021Statis(HttpServletResponse response,OrganDoubleEleven2021StatisDto statisDto) throws IOException {
+        List<DoubleEleven2021Dto> rows = vipGroupActivityService.organDoubleEleven2021Statis(statisDto);
         if(rows.size() < 1){
             throw new BizException("没有可导出数据");
         }
@@ -360,7 +310,7 @@ public class ExportController extends BaseController {
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
-            
+
             outputStream = response.getOutputStream();
             workbook.write(outputStream);
             outputStream.flush();
@@ -398,7 +348,7 @@ public class ExportController extends BaseController {
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
-            
+
             outputStream = response.getOutputStream();
             workbook.write(outputStream);
             outputStream.flush();
@@ -436,7 +386,7 @@ public class ExportController extends BaseController {
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
-            
+
             outputStream = response.getOutputStream();
             workbook.write(outputStream);
             outputStream.flush();
@@ -484,7 +434,7 @@ public class ExportController extends BaseController {
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
-            
+
             outputStream = response.getOutputStream();
             workbook.write(outputStream);
             outputStream.flush();
@@ -520,7 +470,7 @@ public class ExportController extends BaseController {
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=goods-" + DateUtil.getDate(new Date()) + ".xls");
-            
+
             outputStream = response.getOutputStream();
             workbook.write(outputStream);
             outputStream.flush();
@@ -555,7 +505,7 @@ public class ExportController extends BaseController {
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=vipGroupActivity-" + DateUtil.getDate(new Date()) + ".xls");
-            
+
             outputStream = response.getOutputStream();
             workbook.write(outputStream);
             outputStream.flush();
@@ -590,7 +540,7 @@ public class ExportController extends BaseController {
                     , "educationalTeacherName", "educationalTeacherId", "actualTeacherName", "actualTeacherId", "studentAttendanceStatus.msg"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=studentAttendance-" + DateUtil.getDate(new Date()) + ".xls");
-            
+
             outputStream = response.getOutputStream();
             workbook.write(outputStream);
             outputStream.flush();
@@ -986,16 +936,16 @@ public class ExportController extends BaseController {
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         List<VipGroup> rows = vipGroupService.findVipGroups(queryInfo).getRows();
         OutputStream outputStream = response.getOutputStream();
-        if (rows != null && rows.size() > 0) {
-            for (VipGroup e : rows) {
-                e.setSubClassTimes(e.getTotalClassTimes() == null ? 0 : e.getTotalClassTimes() - (e.getCurrentClassTimes() == null ? 0 : e.getCurrentClassTimes()));
-            }
-        }
+//        if (rows != null && rows.size() > 0) {
+//            for (VipGroup e : rows) {
+//                e.setSubClassTimes(e.getTotalClassTimes() == null ? 0 : e.getTotalClassTimes() - (e.getCurrentClassTimes() == null ? 0 : e.getCurrentClassTimes()));
+//            }
+//        }
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"VIP编号", "课程名称", "课程状态", "指导老师", "教务老师", "班级人数", "课程单价",
                     "活动方案", "当前课次", "总课次", "剩余课次", "月消耗", "上次课时间", "开课时间", "结束时间", "申请时间", "学生姓名", "课程形式", "备注"}, new String[]{
                     "id", "name", "status.msg", "userName", "educationalTeacherName", "studentNum", "courseUnitPrice",
-                    "vipGroupActivityName", "currentClassTimes", "totalClassTimes", "subClassTimes", "monthConsumeRate", "lastOverTime",
+                    "vipGroupActivityName", "currentClassTimes", "totalClassTimes", "totalClassTimes == null ? 0 : totalClassTimes - (currentClassTimes == null ? 0 : currentClassTimes)", "monthConsumeRate", "lastOverTime",
                     "courseStartDate", "coursesExpireDate", "registrationStartTime", "userInfo", "vipGroupCategoryName", "stopReason"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
@@ -1016,45 +966,6 @@ public class ExportController extends BaseController {
         }
     }
 
-    @ApiOperation(value = "终课表列表导出")
-    @GetMapping("export/superFindCourseSchedules")
-    @PreAuthorize("@pcs.hasPermissions('export/superFindCourseSchedules')")
-    public Object superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo) throws IOException {
-        queryInfo.setPage(1);
-        queryInfo.setRows(49999);
-        queryInfo.setIsExport(true);
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
-        queryInfo.setOrganIdList(organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganIdList(),sysUser.getIsSuperAdmin()));
-        Map<String, Object> params = new HashMap<>();
-        MapUtil.populateMap(params, queryInfo);
-        int count = scheduleService.endCountCourseSchedules(params);
-        if (count <= 0) {
-            return failed("没有可导出的数据");
-        }
-
-        if (count > 50000) {
-            return failed("数据集太大,不能导出.最大数据集不能超过50000");
-        }
-        Date nowDate = new Date();
-        String no = idGeneratorService.generatorId("download") + "";
-        String fileName = "课表列表-" + no + "-" + DateUtil.getDate(nowDate) + ".xls";
-        ManagerDownload managerDownload = new ManagerDownload();
-        managerDownload.setType(ExportTypeEnum.COURSE_SCHEDULE);
-        managerDownload.setUserId(sysUser.getId());
-        managerDownload.setName(fileName);
-        managerDownload.setFileUrl("");
-        managerDownload.setCreateTime(nowDate);
-        managerDownload.setUpdateTime(nowDate);
-        managerDownloadDao.insert(managerDownload);
-        exportService.superFindCourseSchedules(queryInfo, managerDownload);
-        HttpResponseResult<Object> succeed = succeed();
-        succeed.setMsg(fileName + "导出申请已提交,请到【报表中心-下载列表查看】");
-        return succeed;
-    }
-
 
     @ApiOperation(value = "导出零星收费列表")
     @GetMapping("export/sporadicChargeInfo")
@@ -1065,14 +976,14 @@ public class ExportController extends BaseController {
         queryInfo.setIsExport(true);
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         List<SporadicChargeInfo> rows = sporadicChargeInfoService.queryDetailPage(queryInfo).getRows();
-        for (SporadicChargeInfo row : rows) {
-            row.setOpenFlagStr(row.getOpenFlag().equals(0) ? "开启" : "关闭");
-            row.setOrderType(row.getUserId() == null ? "公用" : "个人");
-        }
+//        for (SporadicChargeInfo row : rows) {
+//            row.setOpenFlagStr(row.getOpenFlag().equals(0) ? "开启" : "关闭");
+//            row.setOrderType(row.getUserId() == null ? "公用" : "个人");
+//        }
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "收费类型", "标题", "收费状态", "金额", "时间", "学生姓名", "订单类型", "创建人"}, new String[]{
-                    "organName", "chargeType.msg", "title", "openFlagStr", "amount", "createTime", "userName", "orderType", "operatorName"}, rows);
+                    "organName", "chargeType.msg", "title", "openFlag == 0?'开启':'关闭'", "amount", "createTime", "userName", "userId == null?'公用':'个人'", "operatorName"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             
@@ -1252,81 +1163,6 @@ public class ExportController extends BaseController {
         }
     }
 
-    @ApiOperation(value = "订单列表导出")
-    @RequestMapping("export/orderList")
-    @PreAuthorize("@pcs.hasPermissions('export/orderList')")
-    public HttpResponseResult orderList(StudentPaymentOrderQueryInfo queryInfo) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null || sysUser.getId() == null){
-        	return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        queryInfo.setOrganId(organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganId(),sysUser.getIsSuperAdmin()));
-        if (StringUtils.isNotBlank(queryInfo.getSearch())) {
-            List<BasicUserDto> users = studentPaymentOrderDao.getUsers(queryInfo.getSearch());
-            List<Integer> userIds = users.stream().map(BasicUserDto::getUserId).collect(Collectors.toList());
-            if (userIds.size() <= 0) {
-                userIds.add(0);
-            }
-            queryInfo.setUserIds(userIds);
-        }
-        queryInfo.setPage(1);
-        queryInfo.setRows(50000);
-        queryInfo.setIsExport(true);
-        Map<String, Object> params = new HashMap<>();
-        MapUtil.populateMap(params, queryInfo);
-        int count = studentPaymentOrderDao.queryCount(params);
-        if (count <= 0) {
-            return failed("没有可导出的数据");
-        }
-
-        if (count > 50000) {
-            return failed("数据集太大,不能导出.最大数据集不能超过50000");
-        }
-        Date nowDate = new Date();
-        String no = idGeneratorService.generatorId("download") + "";
-        String fileName = "orderList-" + no + "-" + DateUtil.getDate(nowDate) + ".xls";
-        ManagerDownload managerDownload = new ManagerDownload();
-        managerDownload.setType(ExportTypeEnum.ORDER);
-        managerDownload.setUserId(sysUser.getId());
-        managerDownload.setName(fileName);
-        managerDownload.setFileUrl("");
-        managerDownload.setCreateTime(nowDate);
-        managerDownload.setUpdateTime(nowDate);
-        managerDownloadDao.insert(managerDownload);
-        exportService.orderList(params, managerDownload, sysUser.getTenantId() <= 0);
-        HttpResponseResult<Object> succeed = succeed();
-        succeed.setMsg(fileName + "导出申请已提交,请到【报表中心-下载列表查看】");
-        return succeed;
-    }
-
-
-    @ApiOperation(value = "学员小课记录导出")
-    @RequestMapping("export/studentVipPractice")
-    @PreAuthorize("@pcs.hasPermissions('export/studentVipPractice')")
-    public HttpResponseResult exportStudentVipPractice(String organId) throws IOException {
-        Boolean hasCourse = courseScheduleStudentPaymentDao.hasCourse(organId, TenantContextHolder.getTenantId());
-        if (hasCourse == null || !hasCourse) {
-            return failed("没有可导出的数据");
-        }
-        Integer tenantId = TenantContextHolder.getTenantId();
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        Date nowDate = new Date();
-        String no = idGeneratorService.generatorId("download") + "";
-        String fileName = "studentVipPractice-" + no + "-" + DateUtil.getDate(nowDate) + ".xls";
-        ManagerDownload managerDownload = new ManagerDownload();
-        managerDownload.setType(ExportTypeEnum.STUDENT_VIP_PRACTICE);
-        managerDownload.setUserId(sysUser.getId());
-        managerDownload.setName(fileName);
-        managerDownload.setFileUrl("");
-        managerDownload.setCreateTime(nowDate);
-        managerDownload.setUpdateTime(nowDate);
-        managerDownloadDao.insert(managerDownload);
-        exportService.studentVipPractice(organId, managerDownload, tenantId);
-        HttpResponseResult<Object> succeed = succeed();
-        succeed.setMsg(fileName + "导出申请已提交,请到【报表中心-下载列表查看】");
-        return succeed;
-    }
-
 
     @ApiOperation(value = "乐团管理--乐团详情-导出学员列表")
     @RequestMapping("export/musicGroupStudent")
@@ -1381,10 +1217,10 @@ public class ExportController extends BaseController {
                     "VIP/网管是否有课","关心包","加油包", "欠费金额(元)", "退团原因", "会员截止时间", "会员剩余天数"};
             String[] body = {"userId", "realName", "gender", "phone","registerTime", "currentGrade", "currentClass", "subjectName", "studentStatus", "paymentStatus.desc"
                     ,"courseFee", "activeName", "hasCourse ? '是' : '否'"
-                    ,"carePackage == null || carePackage == 0 ? \"不可用\" : carePackage == 1 ? \"可用\" : \"已使用\""
-                    ,"comeOnPackage == null || comeOnPackage == 0 ? \"不可用\" : comeOnPackage == 1 ? \"可用\" : \"已使用\""
+                    ,"carePackage == null || carePackage == 0 ? '不可用' : carePackage == 1 ? '可用' : '已使用'"
+                    ,"comeOnPackage == null || comeOnPackage == 0 ? '不可用'' : comeOnPackage == 1 ? '可用' : '已使用'"
                     ,"noPaymentAmount == null ? 0 : noPaymentAmount", "quitReason",
-                    "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? \"未生效\" : \"未购买\" : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? \"未生效\" : \"会员已过期\""};
+                    "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? '未生效' : '未购买' : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? '未生效' : '会员已过期'"};
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, musicGroupStudentsDtoPageInfo.getRows());
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
@@ -1413,7 +1249,6 @@ public class ExportController extends BaseController {
         queryInfo.setIsExport(1);
         queryInfo.setPage(1);
         queryInfo.setRows(49999);
-        // PageInfo<CourseReviewDto> practiceGroupReviews = courseReviewService.findPracticeGroupReviews(queryInfo);
         PageInfo<CourseReviewDto> practiceGroupReviews = courseReviewService.getVipCourseReviews(queryInfo);
         if (practiceGroupReviews.getTotal() <= 0) {
             throw new BizException("没有可导出的记录");
@@ -1673,7 +1508,7 @@ public class ExportController extends BaseController {
     public void exercisesSituations(StudentExercisesSituationQueryInfo queryInfo, HttpServletResponse response) throws IOException {
         queryInfo.setPage(1);
         queryInfo.setRows(49999);
-        queryInfo.setOrganIdList(organizationService.getEmployeeOrgan(queryInfo.getOrganIdList()));
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         List<StudentExercisesSituationDto> rows = studentExtracurricularExercisesSituationService.findStudentExtracurricularExercisesSituations(queryInfo).getRows();
         if (CollectionUtils.isEmpty(rows)) {
             throw new BizException("没有可导出的记录");
@@ -1931,22 +1766,22 @@ public class ExportController extends BaseController {
         }
         OutputStream outputStream = response.getOutputStream();
         try {
-            for (DegreeRegistration row : pageList.getRows()) {
-                if (row.getGender().equals("1")) {
-                    row.setGender("男");
-                } else {
-                    row.setGender("女");
-                }
-                if (row.getStatus().equals(2)) {
-                    row.setStatusStr("已缴费");
-                } else {
-                    row.setStatusStr("未缴费");
-                }
-            }
+//            for (DegreeRegistration row : pageList.getRows()) {
+//                if (row.getGender().equals("1")) {
+//                    row.setGender("男");
+//                } else {
+//                    row.setGender("女");
+//                }
+//                if (row.getStatus().equals(2)) {
+//                    row.setStatusStr("已缴费");
+//                } else {
+//                    row.setStatusStr("未缴费");
+//                }
+//            }
 
             String[] header = {"姓名", "性别", "身份证号", "城市", "学校", "报考乐器", "报考级别", "乐理级别", "乐理级别证书", "家长联系电话", "考级费用", "乐理费用", "备注", "缴费状态", "订单编号", "商户订单号", "报名时间"};
-            String[] body = {"name", "gender", "idcard", "city", "school", "subject", "level", "theoryLevel",
-                    "theoryCert", "mobile", "money", "theoryMoney", "memo", "statusStr", "orderNo", "transNo", "createTime"};
+            String[] body = {"name", "gender == 1?'男':'女'", "idcard", "city", "school", "subject", "level", "theoryLevel",
+                    "theoryCert", "mobile", "money", "theoryMoney", "memo", "status == 2?'已缴费':'未缴费'", "orderNo", "transNo", "createTime"};
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, pageList.getRows());
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
@@ -2003,125 +1838,7 @@ public class ExportController extends BaseController {
         }
     }
 
-    @ApiOperation(value = "报名中缴费中乐团缴费情况导出")
-    @RequestMapping("export/musicGroupRegister")
-    @PreAuthorize("@pcs.hasPermissions('export/musicGroupRegister')")
-    public void musicGroupRegister(String organIds, HttpServletResponse response) throws IOException {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        organIds = organizationService.getEmployeeOrgan(sysUser.getId(),organIds,sysUser.getIsSuperAdmin());
-        List<MusicGroupStatusEnum> musicGroupStatusList = new ArrayList<>();
-        musicGroupStatusList.add(MusicGroupStatusEnum.APPLY);
-        musicGroupStatusList.add(MusicGroupStatusEnum.PAY);
-
-        List<MusicGroupRegisterDto> musicGroupRegisters = musicGroupDao.getMusicGroupRegister(musicGroupStatusList, organIds, TenantContextHolder.getTenantId());
-
-        if (musicGroupRegisters.size() <= 0) {
-            throw new BizException("没有可导出的记录");
-        }
-        List<String> musicGroupIds = musicGroupRegisters.stream().map(MusicGroupRegisterDto::getMusicGroupId).collect(Collectors.toList());
-
-        List<RegisterSubjectDto> registerSubjects = musicGroupDao.getRegisterSubjectNum(musicGroupIds, null, 2);
-        List<MusicGroupRegisterDto> musicGroupRegisterOrders = musicGroupDao.getMusicGroupRegisterOrder(musicGroupIds);
-        List<MusicGroupRegisterDto> musicGroupRegisterTotalMoneys = musicGroupDao.getMusicGroupRegisterTotalMoney(musicGroupIds);
-
-        List<MusicGroupBuildLog> musicGroupAuditSuccess = musicGroupBuildLogDao.getMusicGroupAuditSuccess(musicGroupIds);
-
-        HashSet<Integer> added = new HashSet<>();
-        List<String> header = new ArrayList<>();
-        header.add("分部");
-        header.add("乐团名称");
-        header.add("乐团状态");
-        header.add("审核通过时间");
-        header.add("报名总数");
-        List<String> body = new ArrayList<>();
-        body.add("organName");
-        body.add("musicGroupName");
-        body.add("musicGroupStatus");
-        body.add("auditSuccessTime");
-        body.add("registerNum");
-        for (RegisterSubjectDto registerSubject : registerSubjects) {
-            if (!added.contains(registerSubject.getSubjectId())) {
-                added.add(registerSubject.getSubjectId());
-                header.add(registerSubject.getSubjectName());
-                body.add("subject" + registerSubject.getSubjectId());
-            }
-        }
-        header.add("团购数");
-        header.add("缴费总数");
-        header.add("回款总金额");
-
-        body.add("groupBuyMusicalNum");
-        body.add("registerPayNum");
-        body.add("totalMoney");
-
-
-        List<Map<String, Object>> data = new ArrayList<>();
-        for (MusicGroupRegisterDto musicGroupRegister : musicGroupRegisters) {
-            added.clear();
-            HashMap<String, Object> musicGroupRegisterMap = new HashMap<>();
-            int registerPayNum = 0;
-            musicGroupRegisterMap.put("organName", musicGroupRegister.getOrganName());
-            musicGroupRegisterMap.put("musicGroupName", musicGroupRegister.getMusicGroupName());
-            musicGroupRegisterMap.put("musicGroupStatus", musicGroupRegister.getMusicGroupStatus().getMsg());
-            musicGroupRegisterMap.put("registerNum", musicGroupRegister.getRegisterNum());
-            for (MusicGroupRegisterDto musicGroupRegisterOrder : musicGroupRegisterOrders) {
-                if (musicGroupRegisterOrder.getMusicGroupId().equals(musicGroupRegister.getMusicGroupId())) {
-                    musicGroupRegister.setGroupBuyMusicalNum(musicGroupRegisterOrder.getGroupBuyMusicalNum());
-                }
-            }
-            for (MusicGroupRegisterDto musicGroupRegisterTotalMoney : musicGroupRegisterTotalMoneys) {
-                if (musicGroupRegisterTotalMoney.getMusicGroupId().equals(musicGroupRegister.getMusicGroupId())) {
-                    musicGroupRegister.setTotalMoney(musicGroupRegisterTotalMoney.getTotalMoney());
-                }
-            }
-
-            for (RegisterSubjectDto registerSubject : registerSubjects) {
-                if (registerSubject.getMusicGroupId().equals(musicGroupRegister.getMusicGroupId())) {
-                    added.add(registerSubject.getSubjectId());
-                    musicGroupRegisterMap.put("subject" + registerSubject.getSubjectId(), registerSubject.getNum());
-                    registerPayNum += registerSubject.getNum();
-                }
-                if (!added.contains(registerSubject.getSubjectId())) {
-                    musicGroupRegisterMap.put("subject" + registerSubject.getSubjectId(), 0);
-                }
-            }
-            for (MusicGroupBuildLog groupAuditSuccess : musicGroupAuditSuccess) {
-                if (!groupAuditSuccess.getMusicGroupId().equals(musicGroupRegister.getMusicGroupId())) continue;
-                musicGroupRegisterMap.put("auditSuccessTime", groupAuditSuccess.getCreateTime());
-            }
-            musicGroupRegisterMap.put("groupBuyMusicalNum", musicGroupRegister.getGroupBuyMusicalNum());
-            musicGroupRegisterMap.put("registerPayNum", registerPayNum);
-            musicGroupRegisterMap.put("totalMoney", musicGroupRegister.getTotalMoney());
-            data.add(musicGroupRegisterMap);
-        }
-
-        OutputStream outputStream = response.getOutputStream();
-        try {
-            String[] headerStr = header.toArray(new String[header.size()]);
-            String[] bodyStr = body.toArray(new String[body.size()]);
-
-            HSSFWorkbook workbook = POIUtil.exportExcel(headerStr, bodyStr, data);
-            response.setContentType("application/octet-stream");
-            response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
-            
-            outputStream = response.getOutputStream();
-            workbook.write(outputStream);
-            outputStream.flush();
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            if (outputStream != null) {
-                try {
-                    outputStream.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-    }
-
-
-    @ApiOperation(value = "财务管理导出")
+/*    @ApiOperation(value = "财务管理导出")
     @RequestMapping("export/routeOrderList")
     @PreAuthorize("@pcs.hasPermissions('export/routeOrderList')")
     public HttpResponseResult routeOrderList(StudentPaymentOrderQueryInfo queryInfo) throws Exception {
@@ -2172,6 +1889,107 @@ public class ExportController extends BaseController {
         return succeed;
     }
 
+    @ApiOperation(value = "学员小课记录导出")
+    @RequestMapping("export/studentVipPractice")
+    @PreAuthorize("@pcs.hasPermissions('export/studentVipPractice')")
+    public HttpResponseResult exportStudentVipPractice(String organId) throws IOException {
+        Boolean hasCourse = courseScheduleStudentPaymentDao.hasCourse(organId, TenantContextHolder.getTenantId());
+        if (hasCourse == null || !hasCourse) {
+            return failed("没有可导出的数据");
+        }
+        Integer tenantId = TenantContextHolder.getTenantId();
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Date nowDate = new Date();
+        String no = idGeneratorService.generatorId("download") + "";
+        String fileName = "studentVipPractice-" + no + "-" + DateUtil.getDate(nowDate) + ".xls";
+        ManagerDownload managerDownload = new ManagerDownload();
+        managerDownload.setType(ExportTypeEnum.STUDENT_VIP_PRACTICE);
+        managerDownload.setUserId(sysUser.getId());
+        managerDownload.setName(fileName);
+        managerDownload.setFileUrl("");
+        managerDownload.setCreateTime(nowDate);
+        managerDownload.setUpdateTime(nowDate);
+        managerDownloadDao.insert(managerDownload);
+        exportService.studentVipPractice(organId, managerDownload, tenantId);
+        HttpResponseResult<Object> succeed = succeed();
+        succeed.setMsg(fileName + "导出申请已提交,请到【报表中心-下载列表查看】");
+        return succeed;
+    }
+
+    @ApiOperation(value = "订单列表导出")
+    @RequestMapping("export/orderList")
+    @PreAuthorize("@pcs.hasPermissions('export/orderList')")
+    public HttpResponseResult orderList(StudentPaymentOrderQueryInfo queryInfo) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null || sysUser.getId() == null){
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganId(),sysUser.getIsSuperAdmin()));
+        if (StringUtils.isNotBlank(queryInfo.getSearch())) {
+            List<BasicUserDto> users = studentPaymentOrderDao.getUsers(queryInfo.getSearch());
+            List<Integer> userIds = users.stream().map(BasicUserDto::getUserId).collect(Collectors.toList());
+            if (userIds.size() <= 0) {
+                userIds.add(0);
+            }
+            queryInfo.setUserIds(userIds);
+        }
+        queryInfo.setPage(1);
+        queryInfo.setRows(50000);
+        queryInfo.setIsExport(true);
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+        int count = studentPaymentOrderDao.queryCount(params);
+        if (count <= 0) {
+            return failed("没有可导出的数据");
+        }
+
+        if (count > 50000) {
+            return failed("数据集太大,不能导出.最大数据集不能超过50000");
+        }
+        Date nowDate = new Date();
+        String no = idGeneratorService.generatorId("download") + "";
+        String fileName = "orderList-" + no + "-" + DateUtil.getDate(nowDate) + ".xls";
+        ManagerDownload managerDownload = new ManagerDownload();
+        managerDownload.setType(ExportTypeEnum.ORDER);
+        managerDownload.setUserId(sysUser.getId());
+        managerDownload.setName(fileName);
+        managerDownload.setFileUrl("");
+        managerDownload.setCreateTime(nowDate);
+        managerDownload.setUpdateTime(nowDate);
+        managerDownloadDao.insert(managerDownload);
+        exportService.orderList(params, managerDownload, sysUser.getTenantId() <= 0);
+        HttpResponseResult<Object> succeed = succeed();
+        succeed.setMsg(fileName + "导出申请已提交,请到【报表中心-下载列表查看】");
+        return succeed;
+    }*/
+
+    @ApiOperation(value = "终课表列表导出")
+    @GetMapping("export/superFindCourseSchedules")
+    @PreAuthorize("@pcs.hasPermissions('export/superFindCourseSchedules')")
+    public HttpResponseResult superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo) throws IOException {
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
+        queryInfo.setIsExport(true);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        queryInfo.setOrganIdList(organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganIdList(),sysUser.getIsSuperAdmin()));
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+        int count = scheduleService.endCountCourseSchedules(params);
+        if (count <= 0) {
+            return failed("没有可导出的数据");
+        }
+        if (count > 50000) {
+            return failed("数据集太大,不能导出.最大数据集不能超过50000");
+        }
+        ManagerDownload managerDownload = exportService.saveManagerDownload(ExportTypeEnum.COURSE_SCHEDULE,sysUser.getId());
+        exportService.superFindCourseSchedules(queryInfo, managerDownload);
+        HttpResponseResult<Object> succeed = succeed();
+        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
+        return succeed;
+    }
 
     @ApiOperation(value = "老师默认课酬导出")
     @RequestMapping("export/teacherDefaultSalary")
@@ -2217,94 +2035,6 @@ public class ExportController extends BaseController {
         }
     }
 
-
-    @ApiOperation(value = "乐团声部在读人数导出")
-    @RequestMapping("export/musicGroupNormalStudentNum")
-    @PreAuthorize("@pcs.hasPermissions('export/musicGroupNormalStudentNum')")
-    public void musicGroupNormalStudentNum(String organIds, HttpServletResponse response) throws IOException {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        organIds = organizationService.getEmployeeOrgan(sysUser.getId(),organIds,sysUser.getIsSuperAdmin());
-
-        List<MusicGroupStatusEnum> musicGroupStatusList = new ArrayList<>();
-        musicGroupStatusList.add(MusicGroupStatusEnum.PAY);
-        musicGroupStatusList.add(MusicGroupStatusEnum.PREPARE);
-        musicGroupStatusList.add(MusicGroupStatusEnum.PROGRESS);
-        musicGroupStatusList.add(MusicGroupStatusEnum.PAUSE);
-        List<MusicGroupRegisterDto> musicGroupRegisters = musicGroupDao.getMusicGroupRegister(musicGroupStatusList, organIds, TenantContextHolder.getTenantId());
-
-        if (musicGroupRegisters.size() <= 0) {
-            throw new BizException("没有可导出的记录");
-        }
-        List<String> musicGroupIds = musicGroupRegisters.stream().map(MusicGroupRegisterDto::getMusicGroupId).collect(Collectors.toList());
-
-        List<RegisterSubjectDto> registerSubjects = musicGroupDao.getRegisterSubjectNum(musicGroupIds, StudentMusicGroupStatusEnum.NORMAL, null);
-
-        HashSet<Integer> added = new HashSet<>();
-        List<String> header = new ArrayList<>();
-        header.add("分部");
-        header.add("乐团名称");
-        header.add("乐团状态");
-        header.add("在读总人数");
-        List<String> body = new ArrayList<>();
-        body.add("organName");
-        body.add("musicGroupName");
-        body.add("musicGroupStatus");
-        body.add("normalNum");
-        for (RegisterSubjectDto registerSubject : registerSubjects) {
-            if (!added.contains(registerSubject.getSubjectId())) {
-                added.add(registerSubject.getSubjectId());
-                header.add(registerSubject.getSubjectName());
-                body.add("subject" + registerSubject.getSubjectId());
-            }
-        }
-
-        List<Map<String, Object>> data = new ArrayList<>();
-        for (MusicGroupRegisterDto musicGroupRegister : musicGroupRegisters) {
-            added.clear();
-            HashMap<String, Object> musicGroupRegisterMap = new HashMap<>();
-
-            musicGroupRegisterMap.put("organName", musicGroupRegister.getOrganName());
-            musicGroupRegisterMap.put("musicGroupName", musicGroupRegister.getMusicGroupName());
-            musicGroupRegisterMap.put("musicGroupStatus", musicGroupRegister.getMusicGroupStatus().getMsg());
-            musicGroupRegisterMap.put("normalNum", musicGroupRegister.getNormalNum());
-
-            for (RegisterSubjectDto registerSubject : registerSubjects) {
-                if (registerSubject.getMusicGroupId().equals(musicGroupRegister.getMusicGroupId())) {
-                    added.add(registerSubject.getSubjectId());
-                    musicGroupRegisterMap.put("subject" + registerSubject.getSubjectId(), registerSubject.getNum());
-                }
-                if (!added.contains(registerSubject.getSubjectId())) {
-                    musicGroupRegisterMap.put("subject" + registerSubject.getSubjectId(), 0);
-                }
-            }
-            data.add(musicGroupRegisterMap);
-        }
-
-        OutputStream outputStream = response.getOutputStream();
-        try {
-            String[] headerStr = header.toArray(new String[header.size()]);
-            String[] bodyStr = body.toArray(new String[body.size()]);
-
-            HSSFWorkbook workbook = POIUtil.exportExcel(headerStr, bodyStr, data);
-            response.setContentType("application/octet-stream");
-            response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
-            
-            outputStream = response.getOutputStream();
-            workbook.write(outputStream);
-            outputStream.flush();
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            if (outputStream != null) {
-                try {
-                    outputStream.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-    }
-
     @ApiOperation(value = "回款统计")
     @RequestMapping("export/studentOrder")
     @PreAuthorize("@pcs.hasPermissions('export/studentOrder')")
@@ -2456,7 +2186,7 @@ public class ExportController extends BaseController {
         if (sysUser == null) {
             throw new BizException("用户信息获取失败");
         }
-        queryInfo.setOrganIds(organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganIds(),sysUser.getIsSuperAdmin()));
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganId(),sysUser.getIsSuperAdmin()));
         queryInfo.setPage(1);
         queryInfo.setRows(49999);
         PageInfo<MusicArrearageStudentDto> result = musicGroupPaymentCalenderDetailService.queryArrearageStudents(queryInfo);
@@ -3080,13 +2810,13 @@ public class ExportController extends BaseController {
         }
         OutputStream outputStream = response.getOutputStream();
         try {
-            for (MusicEnlightenmentQuestionnaire row : practiceGroupReviews.getRows()) {
-                if(Objects.isNull(row.getSubjectName())){
-                    row.setSubjectName("无");
-                }
-            }
+//            for (MusicEnlightenmentQuestionnaire row : practiceGroupReviews.getRows()) {
+//                if(Objects.isNull(row.getSubjectName())){
+//                    row.setSubjectName("无");
+//                }
+//            }
             String[] header = {"学员姓名","联系电话","年级","班级","老师推荐专业","是否在学习某件乐器","目前所学乐器","报名参加管乐团家长会了解相关情况","备注"};
-            String[] body = {"userName","phone","currentGrade","currentClass","subjectName","musicalInstrumentsLearning?'是':'否'",
+            String[] body = {"userName","phone","currentGrade","currentClass","subjectName == null?'无':subjectName","musicalInstrumentsLearning?'是':'否'",
                     "musicalInstrumentsName","joinParentMeeting?'是':'否'","remark"};
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, practiceGroupReviews.getRows());
             response.setContentType("application/octet-stream");

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderDetailController.java

@@ -97,7 +97,7 @@ public class MusicGroupPaymentCalenderDetailController extends BaseController {
     @GetMapping("/queryArrearageStudents")
     @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalenderDetail/queryArrearageStudents')")
     public HttpResponseResult<PageInfo<MusicArrearageStudentDto>> queryArrearageStudents(ArrearageStudentsQueryInfo queryInfo){
-        queryInfo.setOrganIds(organizationService.getEmployeeOrgan(queryInfo.getOrganIds()));
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         return succeed(musicGroupPaymentCalenderDetailService.queryArrearageStudents(queryInfo));
     }
 

+ 1 - 4
mec-web/src/main/java/com/ym/mec/web/controller/StudentExtracurricularExercisesSituationController.java

@@ -52,14 +52,11 @@ public class StudentExtracurricularExercisesSituationController extends BaseCont
     @Autowired
     private OrganizationService organizationService;
 
-    @Autowired
-    private EmployeeService employeeService;
-
     @ApiOperation(value = "课外训练-教学")
     @GetMapping("/findStudentExtracurricularExercisesSituations")
     @PreAuthorize("@pcs.hasPermissions('exercisesSituation/findStudentExtracurricularExercisesSituations')")
     public HttpResponseResult findStudentExtracurricularExercisesSituations(StudentExercisesSituationQueryInfo queryInfo){
-        queryInfo.setOrganIdList(organizationService.getEmployeeOrgan(queryInfo.getOrganIdList()));
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         return succeed(studentExtracurricularExercisesSituationService.findStudentExtracurricularExercisesSituations(queryInfo));
     }
 

+ 3 - 2
mec-web/src/main/java/com/ym/mec/web/controller/VipGroupActivityController.java

@@ -5,6 +5,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dto.ActivityQueryDto;
+import com.ym.mec.biz.dal.dto.OrganDoubleEleven2021StatisDto;
 import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
@@ -51,8 +52,8 @@ public class VipGroupActivityController extends BaseController {
     @ApiOperation(value = "分部双11活动统计")
     @GetMapping("/organDoubleEleven2021Statis")
     @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/organDoubleEleven2021Statis')")
-    public HttpResponseResult organDoubleEleven2021Statis(String order, String sort,Integer organId){
-        return succeed(vipGroupActivityService.organDoubleEleven2021Statis(order,sort,organId));
+    public HttpResponseResult organDoubleEleven2021Statis(OrganDoubleEleven2021StatisDto queryInfo){
+        return succeed(vipGroupActivityService.organDoubleEleven2021Statis(queryInfo));
     }
 
     @ApiOperation(value = "分部2021双11活动学员列表")

+ 2 - 2
mec-web/src/main/java/com/ym/mec/web/controller/education/ActivityController.java

@@ -162,8 +162,8 @@ public class ActivityController extends BaseController {
 
     @ApiOperation(value = "分部双11活动统计")
     @GetMapping("/organDoubleEleven2021Statis")
-    public HttpResponseResult organDoubleEleven2021Statis(String order,String sort,Integer organId){
-        return succeed(vipGroupActivityService.organDoubleEleven2021Statis(order,sort,organId));
+    public HttpResponseResult organDoubleEleven2021Statis(OrganDoubleEleven2021StatisDto queryInfo){
+        return succeed(vipGroupActivityService.organDoubleEleven2021Statis(queryInfo));
     }
 
     @ApiOperation(value = "双11活动统计")

+ 3 - 44
mec-web/src/main/java/com/ym/mec/web/controller/education/EduStudentExtracurricularExercisesSituationController.java

@@ -2,26 +2,21 @@ package com.ym.mec.web.controller.education;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.dto.TeacherServeDto;
-import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.util.date.DateUtil;
-
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.time.DayOfWeek;
 import java.time.LocalDate;
-import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -35,43 +30,21 @@ public class EduStudentExtracurricularExercisesSituationController extends BaseC
 
     @Autowired
     private StudentExtracurricularExercisesSituationService studentExtracurricularExercisesSituationService;
-
     @Autowired
     private SysUserFeignService sysUserFeignService;
-
     @Autowired
     private ExtracurricularExercisesMessageService extracurricularExercisesMessageService;
-
     @Autowired
     private StudentCourseHomeworkReplyService studentCourseHomeworkReplyService;
-
     @Autowired
     private StudentServeService studentServeService;
-
-    @Autowired
-    private EmployeeDao employeeDao;
-
     @Autowired
-    private EmployeeService employeeService;
+    private OrganizationService organizationService;
 
     @ApiOperation(value = "课外训练-教学")
     @GetMapping("/findStudentExtracurricularExercisesSituations")
     public HttpResponseResult findStudentExtracurricularExercisesSituations(StudentExercisesSituationQueryInfo queryInfo){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed("用户信息获取失败");
-        }
-        Employee employee = employeeDao.get(sysUser.getId());
-        if (StringUtils.isEmpty(queryInfo.getOrganIdList())) {
-            queryInfo.setOrganIdList(employee.getOrganIdList());
-        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
-            return failed("用户所在分部异常");
-        }else {
-            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
-            if(!list.containsAll(Arrays.asList(queryInfo.getOrganIdList().split(",")))){
-                return failed("非法请求");
-            }
-        }
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         return succeed(studentExtracurricularExercisesSituationService.findStudentExtracurricularExercisesSituations(queryInfo));
     }
 
@@ -84,21 +57,7 @@ public class EduStudentExtracurricularExercisesSituationController extends BaseC
     @ApiOperation(value = "教师服务指标明细")
     @GetMapping("/queryTeacherServeInfo")
     public HttpResponseResult queryTeacherServeInfo(TeacherServeQueryInfo queryInfo) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed("用户信息获取失败");
-        }
-        Employee employee = employeeService.get(sysUser.getId());
-        if (StringUtils.isBlank(queryInfo.getOrganId())) {
-            queryInfo.setOrganId(employee.getOrganIdList());
-        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
-            return failed("用户所在分部异常");
-        }else {
-            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
-            if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
-                return failed("非法请求");
-            }
-        }
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         return succeed(studentExtracurricularExercisesSituationService.queryTeacherServeInfo(queryInfo));
     }
 

+ 18 - 18
mec-web/src/main/resources/exportColumnMapper.ini

@@ -76,7 +76,7 @@ fieldColumns = ["musicGroupId", "courseGroupName", "organName", "teacherName", "
 
 [导出学员列表]
 headColumns = ["分部", "学员编号", "学员姓名", "性别", "家长姓名","家长联系电话", "是否激活", "是否有课", "是否有网管课","网管课剩余课时","VIP课剩余课时", "课程余额(元)", "账户余额(元)","所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议", "是否使用团练宝", "会员截止日期", "会员剩余天数", "会员试用结束日期", "会员试用剩余天数"]
-fieldColumns = ["organName", "userId", "username", "gender.description", "parentsName", "parentsPhone", "isActive.msg", "hasCourse.msg", "hasPracticeCourse.msg","noStartPracticeCourseNum","noStartVipCourseNum", "courseBalance", "balance", "musicGroupName", "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg", "teacherName", "isSignedContract ? '是' : '否'", "recordUserId == null ? '否' : '是'", "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? \"未生效\" : \"未购买\" : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? \"未生效\" : \"会员已过期\"", "experienceMembershipEndTime","membershipEndTime == null ? \"未试用\" : membershipDay >= 0 ? membershipDay : \"已失效\""]
+fieldColumns = ["organName", "userId", "username", "gender.description", "parentsName", "parentsPhone", "isActive.msg", "hasCourse.msg", "hasPracticeCourse.msg","noStartPracticeCourseNum","noStartVipCourseNum", "courseBalance", "balance", "musicGroupName", "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg", "teacherName", "isSignedContract ? '是' : '否'", "recordUserId == null ? '否' : '是'", "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? '未生效' : '未购买' : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? '未生效' : '会员已过期'", "experienceMembershipEndTime","membershipEndTime == null ? '未试用' : membershipDay >= 0 ? membershipDay : '已失效'"]
 
 [导出陪练课列表]
 headColumns = ["课程组编号", "课程组名称", "课程组类型", "分部", "教务老师", "指导老师", "班级人数","当前课次", "总课次", "剩余课次", "开课时间", "结束时间", "课程组状态", "是否续费", "备注"]
@@ -84,7 +84,7 @@ fieldColumns = ["id", "name", "type.msg", "organName", "educationalTeacherName",
 
 [导出VIP课管理]
 headColumns = ["VIP编号", "课程名称", "课程状态", "指导老师", "教务老师", "班级人数", "课程单价","活动方案", "当前课次", "总课次", "剩余课次", "月消耗", "上次课时间", "开课时间", "结束时间", "申请时间", "学生姓名", "课程形式", "备注"]
-fieldColumns = ["id", "name", "status.msg", "userName", "educationalTeacherName", "studentNum", "courseUnitPrice", "vipGroupActivityName", "currentClassTimes", "totalClassTimes", "subClassTimes", "monthConsumeRate", "lastOverTime", "courseStartDate", "coursesExpireDate", "registrationStartTime", "userInfo", "vipGroupCategoryName", "stopReason"]
+fieldColumns = ["id", "name", "status.msg", "userName", "educationalTeacherName", "studentNum", "courseUnitPrice", "vipGroupActivityName", "currentClassTimes", "totalClassTimes", "totalClassTimes == null ? 0 : totalClassTimes - (currentClassTimes == null ? 0 : currentClassTimes)", "monthConsumeRate", "lastOverTime", "courseStartDate", "coursesExpireDate", "registrationStartTime", "userInfo", "vipGroupCategoryName", "stopReason"]
 
 [终课表列表导出]
 headColumns = ["分部名称", "乐团主管", "课程编号", "开始时间", "结束时间","班级名称", "班级声部", "课程名称", "课程类型", "教学模式","教学点", "课程状态", "指导老师", "学员编号", "是否点名", "是否有考勤申诉", "预计上课人数"]
@@ -92,7 +92,7 @@ fieldColumns = ["organName", "educationTeacherName", "id", "startClassTime", "en
 
 [导出零星收费列表]
 headColumns = ["分部", "收费类型", "标题", "收费状态", "金额", "时间", "学生姓名", "订单类型", "创建人"]
-fieldColumns = ["organName", "chargeType.msg", "title", "openFlagStr", "amount", "createTime", "userName", "orderType", "operatorName"]
+fieldColumns = ["organName", "chargeType.msg", "title", "openFlag == 0?'开启':'关闭'", "amount", "createTime", "userName", "userId == null?'公用':'个人'", "operatorName"]
 
 [导出乐器采购清单]
 headColumns = ["分部", "乐团", "商品类型", "商品名称", "型号", "数量"]
@@ -124,7 +124,7 @@ fieldColumns = ["organName","userId", "username","courseBalance", "subjectName",
 
 [乐团导出学员列表]
 headColumns = ["学员编号", "学员姓名", "性别", "联系电话","入团时间", "年级", "班级", "入团专业", "学员状态", "报名缴费", "缴费金额", "是否激活","VIP/网管是否有课","关心包","加油包", "欠费金额(元)", "退团原因", "会员截止时间", "会员剩余天数"]
-fieldColumns = ["userId", "realName", "gender", "phone","registerTime", "currentGrade", "currentClass", "subjectName", "studentStatus", "paymentStatus.desc" ,"courseFee", "activeName", "hasCourse ? '是' : '否'" ,"carePackage == null || carePackage == 0 ? \"不可用\" : carePackage == 1 ? \"可用\" : \"已使用\"" ,"comeOnPackage == null || comeOnPackage == 0 ? \"不可用\" : comeOnPackage == 1 ? \"可用\" : \"已使用\"" ,"noPaymentAmount == null ? 0 : noPaymentAmount", "quitReason", "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? \"未生效\" : \"未购买\" : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? \"未生效\" : \"会员已过期\""]
+fieldColumns = ["userId", "realName", "gender", "phone","registerTime", "currentGrade", "currentClass", "subjectName", "studentStatus", "paymentStatus.desc" ,"courseFee", "activeName", "hasCourse ? '是' : '否'" ,"carePackage == null || carePackage == 0 ? '不可用' : carePackage == 1 ? '可用' : '已使用'" ,"comeOnPackage == null || comeOnPackage == 0 ? '不可用' : comeOnPackage == 1 ? '可用' : '已使用'" ,"noPaymentAmount == null ? 0 : noPaymentAmount", "quitReason", "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? '未生效' : '未购买' : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? '未生效' : '会员已过期'"]
 
 [评论列表导出]
 headColumns = ["分部", "上课日期", "学生编号", "课程编号", "学员是否到课", "课程班名称", "老师", "教材内容", "发音", "节奏", "乐理", "曲目", "评价备注", "回访日期(布置训练)", "完成app双向沟通", "学员评分", "是否布置训练", "是否提交训练", "是否回复训练", "教务老师", "教务评价"]
@@ -160,31 +160,31 @@ fieldColumns = ["organName", "classDateStr", "id", "courseName", "teacherName",
 
 [考级报名导出]
 headColumns = ["姓名", "性别", "身份证号", "城市", "学校", "报考乐器", "报考级别", "乐理级别", "乐理级别证书", "家长联系电话", "考级费用", "乐理费用", "备注", "缴费状态", "订单编号", "商户订单号", "报名时间"]
-fieldColumns = ["name", "gender", "idcard", "city", "school", "subject", "level", "theoryLevel",  "theoryCert", "mobile", "money", "theoryMoney", "memo", "statusStr", "orderNo", "transNo", "createTime"]
+fieldColumns = ["name", "gender == 1?'男':'女'", "idcard", "city", "school", "subject", "level", "theoryLevel",  "theoryCert", "mobile", "money", "theoryMoney", "memo", "status == 2?'已缴费':'未缴费'", "orderNo", "transNo", "createTime"]
 
 [合作单位导出]
 headColumns = ["分部", "单位编号", "单位名称", "是否启用","乐团主管","状态栏"]
 fieldColumns = ["organization.name", "id", "name", "isEnable == true ? '是':'否'", "realName", "isEnable == true ? '开启' : '未开启'"]
 
 [财务管理导出1]
-headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额",    "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课",    "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "汇付手续费", "平台手续费", "到账时间",    "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
-fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount"     , "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee",     "rechargeFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId",     "groupType.desc", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
+headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "汇付手续费", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId", "groupType.desc", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [财务管理导出2]
-headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额",    "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课",    "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "平台手续费", "到账时间",    "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
-fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount"     , "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee",     "rechargeFee", "otherFee", "platformFee", "payTime", "musicGroupId",     "groupType.desc", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
+headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount" , "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "platformFee", "payTime", "musicGroupId", "groupType.desc", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [老师默认课酬导出]
 headColumns = ["老师编号", "姓名", "分部", "工作类型", "在职状态", "老师状态", "1v1", "1v2", "1v3", "1v4", "1v5", "1v6", "1v7","网管课", "单技课2.0(主教)", "合奏课2.0(主教)", "综合课2.0(主教)", "集训单技课2.0(主教)", "集训合奏课2.0(主教)","基础技能课2.0(主教)", "课堂课(主教)", "单技课3.0(主教)", "合奏课3.0(主教)", "综合课3.0(主教)", "集训单技课3.0(主教)", "集训合奏课3.0(主教)","基础技能课3.0(主教)", "单技课2.0(助教)", "合奏课2.0(助教)", "综合课2.0(助教)", "集训单技课2.0(助教)", "集训合奏课2.0(助教)","基础技能课2.0(助教)", "课堂课(助教)", "单技课3.0(助教)", "合奏课3.0(助教)", "综合课3.0(助教)", "集训单技课3.0(助教)", "集训合奏课3.0(助教)","基础技能课3.0(助教)", "网络基础训练课1v3", "网络基础训练课1v4", "网络基础训练课1v5", "乐团网管课1v1"]
 fieldColumns = ["userId", "realName", "organName", "jobNature", "demissionStatus", "status", "vip1", "vip2", "vip3", "vip4", "vip5", "vip6", "vip7", "practiceSalary", "mainSingleSalary2", "mainMixSalary2", "mainComprehensiveSalary2", "mainTraningSigleSalary2", "mainTraningMixSalary2", "mainHighSalary2", "mainClassroomSalary2", "mainSingleSalary", "mainMixSalary", "mainComprehensiveSalary", "mainTraningSigleSalary", "mainTraningMixSalary", "mainHighSalary", "assistantSingleSalary2", "assistantMixSalary2", "assistantComprehensiveSalary2", "assistantTraningSigleSalary2", "assistantTraningMixSalary2", "assistantHighSalary2", "assistantClassroomSalary2", "assistantSingleSalary", "assistantMixSalary", "assistantComprehensiveSalary", "assistantTraningSigleSalary", "assistantTraningMixSalary", "assistantHighSalary", "highOnline3Salary", "highOnline4Salary", "highOnline5Salary", "musicNetwork1Salary"]
 
 [报名中缴费中乐团缴费情况导出]
-headColumns = []
-fieldColumns = []
+headColumns = ["分部","乐团名称","乐团状态","审核通过时间","报名总数","团购数","缴费总数","回款总金额"]
+fieldColumns = ["organName","musicGroupName","musicGroupStatus","auditSuccessTime","registerNum","groupBuyMusicalNum","registerPayNum","totalMoney"]
 
 [乐团声部在读人数导出]
-headColumns = []
-fieldColumns = []
+headColumns = ["分部","乐团名称","乐团状态","在读总人数"]
+fieldColumns = ["organName","musicGroupName","musicGroupStatus","normalNum"]
 
 [回款统计]
 headColumns = ["学员编号", "学员姓名", "指导老师", "教务老师", "订单日期", "交易类型", "实际金额"]
@@ -228,19 +228,19 @@ fieldColumns = ["id", "realName", "mobileNo", "wechatNo", "subjectName", "liveCi
 
 [分部下教师关联的会员数据导出]
 headColumns = ["老师编号", "老师姓名", "学员总数", "使用人数", "使用人数比", "付费学员数量", "会员占比"]
-fieldColumns = ["teacherId", "teacherName", "totalStudentNum", "cloudStudyUseStudentNum", "cloudStudyUseStudentDuty+\"%\"", "vipStudentNum", "vipStudentDuty+\"%\""]
+fieldColumns = ["teacherId", "teacherName", "totalStudentNum", "cloudStudyUseStudentNum", "cloudStudyUseStudentDuty+'%'", "vipStudentNum", "vipStudentDuty+'%'"]
 
 [分部云教练学员数据预览导出]
 headColumns = ["排名", "分部", "学员总数", "目标人数", "活跃人数", "使用人数", "新增使用人数", "使用比例", "付费会员数", "付费会员占比"]
-fieldColumns = ["index","organName", "totalStudentNum", "targetNum", "cloudStudyLivelyStudentNum", "cloudStudyUseStudentNum", "newCloudStudyStudentNum", "cloudStudyUseStudentDuty+\"%\"", "vipStudentNum", "vipStudentDuty+\"%\""]
+fieldColumns = ["index","organName", "totalStudentNum", "targetNum", "cloudStudyLivelyStudentNum", "cloudStudyUseStudentNum", "newCloudStudyStudentNum", "cloudStudyUseStudentDuty+'%'", "vipStudentNum", "vipStudentDuty+'%'"]
 
 [分部云教练学员数据详情导出]
 headColumns = ["排名", "分部", "学员总数", "活跃人数", "活跃人数比", "当日使用人数", "当日新增使用人数", "使用人数占比", "付费会员数量","付费会员占比", "新增付费会员"]
-fieldColumns = ["index", "organName", "totalStudentNum", "cloudStudyLivelyStudentNum", "cloudStudyLivelyStudentDuty+\"%\"", "cloudStudyUseStudentNum", "newCloudStudyStudentNum", "cloudStudyUseStudentDuty+\"%\"", "vipStudentNum", "vipStudentDuty+\"%\"", "newMemberStudentNum"]
+fieldColumns = ["index", "organName", "totalStudentNum", "cloudStudyLivelyStudentNum", "cloudStudyLivelyStudentDuty+'%'", "cloudStudyUseStudentNum", "newCloudStudyStudentNum", "cloudStudyUseStudentDuty+'%'", "vipStudentNum", "vipStudentDuty+'%'", "newMemberStudentNum"]
 
 [分部云教练学员训练数据导出]
 headColumns = ["学员编号", "学员","年级","班级", "手机号", "是否新用户", "是否激活", "训练总时长", "连续训练天数", "乐团", "乐团主管", "所属学校", "指导老师", "声部", "是否有小课","训练次数", "训练天数", "训练平均时长", "会员有效期", "是否服务", "是否运营", "是否团练宝活动目标学员", "活动消费金额", "关心包", "加油包", "未上课数", "vip课剩余课时", "网管课剩余课时"]
-fieldColumns = ["studentId", "studentName","currentGradeNum","currentClass", "phone", "newUser?\"是\":\"否\"", "enable?\"是\":\"否\"",         "cloudStudyUseTime+\"分钟\"", "cloudStudyRunningDays+\"天\"", "musicGroupNames", "educationName", "schoolNames",         "teacherName", "subjectName", "hasVipGroup>0?\"是\":\"否\"", "cloudStudyUseNum+\"次\"", "cloudStudyUseDays+\"天\"",         "cloudStudyUseAvgTime+\"分钟\"", "membershipEndTime", "serviceTag>0?\"是\":\"否\"", "operatingTag>0?\"是\":\"否\"","countFlag == null?'否':countFlag == 1?'是':'否'","activeAmount",         "carePackage>0?carePackage>1?\"已使用\":\"可用\":\"不可用\"", "comeOnPackage>0?comeOnPackage>1?\"已使用\":\"可用\":\"不可用\"",         "notStartCourseNum", "notStartVipCourseNum", "notStartPracticeCourseNum"]
+fieldColumns = ["studentId", "studentName","currentGradeNum","currentClass", "phone", "newUser?'是':'否'", "enable?'是':'否'",         "cloudStudyUseTime+'分钟'", "cloudStudyRunningDays+'天'", "musicGroupNames", "educationName", "schoolNames",         "teacherName", "subjectName", "hasVipGroup>0?'是':'否'", "cloudStudyUseNum+'次'", "cloudStudyUseDays+'天'",         "cloudStudyUseAvgTime+'分钟'", "membershipEndTime", "serviceTag>0?'是':'否'", "operatingTag>0?'是':'否'","countFlag == null?'否':countFlag == 1?'是':'否'","activeAmount",         "carePackage>0?carePackage>1?'已使用':'可用':'不可用'", "comeOnPackage>0?comeOnPackage>1?'已使用':'可用':'不可用'",         "notStartCourseNum", "notStartVipCourseNum", "notStartPracticeCourseNum"]
 
 [分部云教练活动统计数据导出]
 headColumns = ["分部", "购买人数", "购买金额", "目标金额", "人均购买金额", "目标人数", "目标达成率"]
@@ -252,7 +252,7 @@ fieldColumns = ["userId", "username", "cooperationName", "musicGroupName", "char
 
 [启蒙课问卷导出]
 headColumns = ["学员姓名","联系电话","年级","班级","老师推荐专业","是否在学习某件乐器","目前所学乐器","报名参加管乐团家长会了解相关情况","备注"]
-fieldColumns = ["userName","phone","currentGrade","currentClass","subjectName","musicalInstrumentsLearning?'是':'否'", "musicalInstrumentsName","joinParentMeeting?'是':'否'","remark"]
+fieldColumns = ["userName","phone","currentGrade","currentClass","subjectName == null?'无':subjectName","musicalInstrumentsLearning?'是':'否'", "musicalInstrumentsName","joinParentMeeting?'是':'否'","remark"]
 
 [服务指标导出]
 headColumns = ["分部","老师编号","老师姓名","预计安排(人次)","实际安排(人次)","布置率(%)","提交人数","点评次数","点评率(%)","及时点评次数","及时点评率(%)"]

部分文件因为文件数量过多而无法显示