Browse Source

Merge remote-tracking branch 'origin/master_saas' into master_saas

hgw 3 years ago
parent
commit
2bf6a71bc6

+ 4 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -571,7 +571,10 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     List<BaseNameDto> queryLastOverTeacher(@Param("studentIds") List<Integer> studentIds, @Param("groupType") String groupType);
 
-	List<Mapper> queryUserMusicGroupCourseNumByClassTime(@Param("groupType") GroupType groupType, @Param("musicGroupIds") Set<String> musicGroupIds,
+    List<Mapper> queryUserMusicGroupCourseNumByClassTime(@Param("groupType") GroupType groupType, @Param("musicGroupIds") Set<String> musicGroupIds,
 			@Param("userId") Integer userId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
 
+	Boolean hasStudentMusicTheoryCourseInfo(@Param("organId") String organId, @Param("tenantId") Integer tenantId, @Param("groupType") String groupType);
+
+    List<ExportStudentCourseInfoDto> queryStudentCourseInfo(@Param("organId") String organId, @Param("tenantId") Integer tenantId, @Param("groupType") String groupType);
 }

+ 135 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportStudentCourseInfoDto.java

@@ -0,0 +1,135 @@
+package com.ym.mec.biz.dal.dto;
+
+public class ExportStudentCourseInfoDto {
+    //分部
+    private String organName;
+
+    //学员
+    private String username;
+
+    //学员编号
+    private Integer userId;
+
+    //老师
+    private String teacherName;
+
+    //老师编号
+    private Integer teacherId;
+
+    //教务
+    private String eduName;
+
+    //教务编号
+    private Integer eduId;
+
+    //总课次
+    private Integer totalClassNum;
+
+    //已进行课时
+    private Integer startClassNum;
+
+    //剩余课时
+    private Integer subClassNum;
+
+    //上次课时
+    private String beforeClassNum;
+
+    //年纪
+    private Integer grade;
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getEduName() {
+        return eduName;
+    }
+
+    public void setEduName(String eduName) {
+        this.eduName = eduName;
+    }
+
+    public Integer getEduId() {
+        return eduId;
+    }
+
+    public void setEduId(Integer eduId) {
+        this.eduId = eduId;
+    }
+
+    public Integer getTotalClassNum() {
+        return totalClassNum;
+    }
+
+    public void setTotalClassNum(Integer totalClassNum) {
+        this.totalClassNum = totalClassNum;
+    }
+
+    public Integer getStartClassNum() {
+        return startClassNum;
+    }
+
+    public void setStartClassNum(Integer startClassNum) {
+        this.startClassNum = startClassNum;
+    }
+
+    public Integer getSubClassNum() {
+        return subClassNum;
+    }
+
+    public void setSubClassNum(Integer subClassNum) {
+        this.subClassNum = subClassNum;
+    }
+
+    public String getBeforeClassNum() {
+        return beforeClassNum;
+    }
+
+    public void setBeforeClassNum(String beforeClassNum) {
+        this.beforeClassNum = beforeClassNum;
+    }
+
+    public Integer getGrade() {
+        return grade;
+    }
+
+    public void setGrade(Integer grade) {
+        this.grade = grade;
+    }
+}

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportEnum.java

@@ -70,6 +70,8 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     STUDENT_INSTRUMENT("STUDENT_INSTRUMENT", "乐保导出"),
     EXPORT_BILL("EXPORT_BILL", "对账单导出"),
     QUESTIONNAIRE_USER_RESULT("QUESTIONNAIRE_USER_RESULT", "问卷调查导出"),
+    STUDENT_VIP_COURSE_INFO("STUDENT_VIP_COURSE_INFO", "VIP课学员课程信息导出"),
+    STUDENT_MUSIC_THEORY_COURSE_INFO("STUDENT_MUSIC_THEORY_COURSE_INFO", "乐理课学员课程信息导出"),
     EXERCISES_SITUATION("EXERCISES_SITUATION", "服务指标导出");
 
     private String code;

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

@@ -6,7 +6,9 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 	ORDER(0, "订单列表"),
 	COURSE_SCHEDULE(1, "课表列表"),
 	ROUTE_ORDER(2, "财务管理"),
-	STUDENT_VIP_PRACTICE(3, "学员小课记录");
+	STUDENT_VIP_PRACTICE(3, "学员小课记录"),
+	STUDENT_MUSIC_THEORY_COURSE_INFO(4, "网管课学员课程信息导出"),
+	STUDENT_VIP_COURSE_INFO(5, "VIP课学员课程信息导出");
 
 	private Integer code;
 

+ 11 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java

@@ -255,6 +255,12 @@ public interface ExportService {
     //学员小课记录导出
     HttpResponseResult exportStudentVipPractice(Map<String, Object> info,List<String> headColumns);
 
+    //学员小课记录导出
+    HttpResponseResult exportStudentVipCourseInfo(Map<String, Object> info, List<String> headColumns);
+
+    //学员小课记录导出
+    HttpResponseResult exportStudentMusicTheoryCourseInfo(Map<String, Object> info, List<String> headColumns);
+
     //订单列表导出
     HttpResponseResult orderList(Map<String, Object> info,List<String> headColumns);
 
@@ -264,16 +270,13 @@ public interface ExportService {
     //保存下载记录
     ManagerDownload saveManagerDownload(ExportTypeEnum exportTypeEnum, Integer userId);
 
-    @Async
-    abstract void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws FileNotFoundException;
+    void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws FileNotFoundException;
 
+    void routeOrderList(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;
+    void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException;
 
-    @Async
-    abstract void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException;
+    void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws FileNotFoundException;
 
-    @Async
-    abstract void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws FileNotFoundException;
+    void queryStudentCourseInfo(String organId, Integer tenantId, String vip, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws FileNotFoundException;
 }

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java

@@ -156,10 +156,10 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
      * @param userId       用户id
      */
     private void addUserTenant(List<Integer> tenantIds, Integer userTenantId, Integer userId) {
-        if (CollectionUtils.isEmpty(tenantIds)) {
-            throw new BizException("平台账号必须指定一个机构");
-        }
         if (Objects.nonNull(userTenantId) && userTenantId == -1) {
+            if (CollectionUtils.isEmpty(tenantIds)) {
+                throw new BizException("平台账号必须指定一个机构!");
+            }
             Date now = new Date();
             tenantIds.forEach(t -> {
                 SysUserTenant userTenant = new SysUserTenant();

+ 119 - 29
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -215,7 +215,7 @@ public class ExportServiceImpl implements ExportService {
                 exportEnum = ExportEnum.ORDER_LIST2;
             }
         }else if(exportEnum == ExportEnum.ROUTE_ORDER_LIST1 || exportEnum == ExportEnum.ROUTE_ORDER_LIST2){
-            if(sysUser.getTenantId() <= 0){
+            if(sysUser.getTenantId() <= 1){
                 exportEnum = ExportEnum.ROUTE_ORDER_LIST1;
             }else {
                 exportEnum = ExportEnum.ROUTE_ORDER_LIST2;
@@ -344,6 +344,8 @@ public class ExportServiceImpl implements ExportService {
         exportManageFuncMap.put(ExportEnum.ORDER_LIST1, (info,headColumns) -> orderList(info,headColumns));
         exportManageFuncMap.put(ExportEnum.ORDER_LIST2, (info,headColumns) -> orderList(info,headColumns));
         exportManageFuncMap.put(ExportEnum.STUDENT_VIP_PRACTICE, (info,headColumns) -> exportStudentVipPractice(info,headColumns));
+        exportManageFuncMap.put(ExportEnum.STUDENT_VIP_COURSE_INFO, (info,headColumns) -> exportStudentVipCourseInfo(info,headColumns));
+        exportManageFuncMap.put(ExportEnum.STUDENT_MUSIC_THEORY_COURSE_INFO, (info,headColumns) -> exportStudentMusicTheoryCourseInfo(info,headColumns));
 
     }
 
@@ -1389,11 +1391,14 @@ public class ExportServiceImpl implements ExportService {
         }
         queryInfo.setRoutingOrganId(null);
         ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.ROUTE_ORDER,sysUser.getId());
-        try {
-            this.routeOrderList(params, managerDownload, headColumns);
-        } catch (FileNotFoundException e) {
-            return BaseController.failed(e.getMessage());
-        }
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CompletableFuture.runAsync(()->{
+            try {
+                this.routeOrderList(params, managerDownload, headColumns);
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            }
+        },executor);
         HttpResponseResult<Object> succeed = BaseController.succeed();
         succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
         return succeed;
@@ -1410,11 +1415,62 @@ public class ExportServiceImpl implements ExportService {
         Integer tenantId = TenantContextHolder.getTenantId();
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.STUDENT_VIP_PRACTICE,sysUser.getId());
-        try {
-            this.studentVipPractice(organId, managerDownload, tenantId,headColumns);
-        } catch (FileNotFoundException e) {
-            return BaseController.failed(e.getMessage());
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CompletableFuture.runAsync(()->{
+            try {
+                this.studentVipPractice(organId, managerDownload, tenantId,headColumns);
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            }
+        },executor);
+        HttpResponseResult<Object> succeed = BaseController.succeed();
+        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
+        return succeed;
+    }
+
+    //学员小课记录导出
+    @Override
+    public HttpResponseResult exportStudentVipCourseInfo(Map<String, Object> info, List<String> headColumns){
+        String organId = getParam(info, "organId", String.class);
+        Integer tenantId = TenantContextHolder.getTenantId();
+        Boolean hasCourse = courseScheduleStudentPaymentDao.hasStudentMusicTheoryCourseInfo(organId, tenantId,"VIP");
+        if (hasCourse == null || !hasCourse) {
+            return BaseController.failed("没有可导出的数据");
         }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.STUDENT_VIP_COURSE_INFO,sysUser.getId());
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CompletableFuture.runAsync(()->{
+            try {
+                this.queryStudentCourseInfo(organId, tenantId,"VIP", managerDownload,headColumns,ExportEnum.STUDENT_VIP_COURSE_INFO);
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            }
+        },executor);
+        HttpResponseResult<Object> succeed = BaseController.succeed();
+        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
+        return succeed;
+    }
+
+    //学员小课记录导出
+    @Override
+    public HttpResponseResult exportStudentMusicTheoryCourseInfo(Map<String, Object> info, List<String> headColumns){
+        String organId = getParam(info, "organId", String.class);
+        Integer tenantId = TenantContextHolder.getTenantId();
+        Boolean hasCourse = courseScheduleStudentPaymentDao.hasStudentMusicTheoryCourseInfo(organId, tenantId,"THEORY");
+        if (hasCourse == null || !hasCourse) {
+            return BaseController.failed("没有可导出的数据");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.STUDENT_MUSIC_THEORY_COURSE_INFO,sysUser.getId());
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CompletableFuture.runAsync(()->{
+            try {
+                this.queryStudentCourseInfo(organId, tenantId,"THEORY", managerDownload,headColumns,ExportEnum.STUDENT_MUSIC_THEORY_COURSE_INFO);
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            }
+        },executor);
         HttpResponseResult<Object> succeed = BaseController.succeed();
         succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
         return succeed;
@@ -1447,11 +1503,14 @@ public class ExportServiceImpl implements ExportService {
             return BaseController.failed("数据集太大,不能导出.最大数据集不能超过50000");
         }
         ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.ORDER,sysUser.getId());
-        try {
-            this.orderList(params, managerDownload, headColumns);
-        } catch (FileNotFoundException e) {
-            return BaseController.failed(e.getMessage());
-        }
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CompletableFuture.runAsync(()->{
+            try {
+                this.orderList(params, managerDownload, headColumns);
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            }
+        },executor);
         HttpResponseResult<Object> succeed = BaseController.succeed();
         succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
         return succeed;
@@ -1476,11 +1535,14 @@ public class ExportServiceImpl implements ExportService {
             return BaseController.failed("数据集太大,不能导出.最大数据集不能超过50000");
         }
         ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.COURSE_SCHEDULE,sysUser.getId());
-        try {
-            this.superFindCourseSchedules(queryInfo, managerDownload);
-        } catch (FileNotFoundException e) {
-            return BaseController.failed(e.getMessage());
-        }
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CompletableFuture.runAsync(()->{
+            try {
+                this.superFindCourseSchedules(queryInfo, managerDownload);
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            }
+        },executor);
         HttpResponseResult<Object> succeed = BaseController.succeed();
         succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
         return succeed;
@@ -1497,7 +1559,7 @@ public class ExportServiceImpl implements ExportService {
                 .append(DateUtil.getDate(nowDate))
                 .append(".xls").toString();
         ManagerDownload managerDownload = new ManagerDownload();
-        managerDownload.setType(ExportTypeEnum.COURSE_SCHEDULE);
+        managerDownload.setType(exportTypeEnum);
         managerDownload.setUserId(userId);
         managerDownload.setName(fileName);
         managerDownload.setFileUrl("");
@@ -1509,7 +1571,6 @@ public class ExportServiceImpl implements ExportService {
 
 
     @Override
-    @Async
     public void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws FileNotFoundException {
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentOrderService.ExportQueryPage(params);
         long i = 1;
@@ -1826,7 +1887,6 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    @Async
     public void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws FileNotFoundException {
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.ExportQueryPage(params);
 
@@ -2339,7 +2399,6 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    @Async
     public void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException {
         List<CourseScheduleEndDto> rows = courseScheduleService.endFindCourseSchedules(queryInfo).getRows();
         for (CourseScheduleEndDto row : rows) {
@@ -2380,7 +2439,6 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    @Async
     public void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws FileNotFoundException {
         List<StudentVipPracticeExportDto> studentVipPracticeExportDtos = courseScheduleStudentPaymentDao.exportStudentVipPractice(organId, tenantId);
         if(studentVipPracticeExportDtos != null && studentVipPracticeExportDtos.size() > 0){
@@ -2418,10 +2476,6 @@ public class ExportServiceImpl implements ExportService {
 
         HSSFWorkbook workbook = null;
         try {
-            /*String[] header = {"分部", "学员编号", "学生姓名", "课程余额", "声部", "VIP已结束课时数", "VIP未开始课时数", "已结束VIP上课老师编号", "已结束VIP上课老师",
-                    "网管课已结束课时数", "网管课未开始课时数", "已结束网管课上课老师编号", "已结束网管课上课老师", "指导老师编号", "指导老师"};
-            String[] body = {"organName","userId", "username","courseBalance", "subjectName", "vipOverNum", "vipNotStartNum", "vipOverTeacherId", "vipOverTeacherName"
-                    , "practiceOverNum", "practiceNotStartNum", "practiceOverTeacherId", "practiceOverTeacherName","teacherId","teacherName"};*/
             Map<String, String> headMap = getExportMap(new ExportDto(ExportEnum.STUDENT_VIP_PRACTICE, headColumns));
             String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
             String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
@@ -2448,4 +2502,40 @@ public class ExportServiceImpl implements ExportService {
             }
         }
     }
+
+    @Override
+    public void queryStudentCourseInfo(String organId, Integer tenantId, String groupType, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws FileNotFoundException {
+        List<ExportStudentCourseInfoDto> studentCourseInfoDtos = courseScheduleStudentPaymentDao.queryStudentCourseInfo(organId,tenantId,groupType);
+        String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
+        File file = new File(basePath + "/" + managerDownload.getName());
+        FileOutputStream fileOutputStream = new FileOutputStream(file);
+
+        HSSFWorkbook workbook = null;
+        try {
+            Map<String, String> headMap = getExportMap(new ExportDto(exportEnum, headColumns));
+            String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
+            String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
+            workbook = POIUtil.exportExcel(header, body, studentCourseInfoDtos);
+            workbook.write(fileOutputStream);
+            fileOutputStream.getFD().sync();
+            fileOutputStream.close();
+
+            String folder = "download/" + UploadUtil.getFileFloder();
+            String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, folder, file);
+            //把记录插入下载表
+            managerDownload.setFileUrl(url);
+            managerDownload.setStatus(1);
+            managerDownloadDao.update(managerDownload);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                fileOutputStream.close();
+                workbook.close();
+                file.delete();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
 }

+ 4 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -321,10 +321,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		LocalDate nowDate = LocalDate.now();
 		
 		List<Organization> allOrgans = organizationService.findAllOrgans(tenantId);
-		if(CollectionUtils.isEmpty(this.organIds.get())){
-			this.organIds.get().clear();
-			this.organIds.get().addAll(allOrgans.stream().map(Organization::getId).collect(Collectors.toSet()));
-		}
+		this.organIds.get().clear();
+		this.organIds.get().addAll(allOrgans.stream().map(Organization::getId).collect(Collectors.toSet()));
 
 		if(StringUtils.isBlank(dayStr)){
 			dayStr = nowDate.plusDays(-1).toString();
@@ -580,7 +578,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		boolean specialType = IndexDataType.NEWLY_STUDENT_NUM.equals(indexDataType)||IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM.equals(indexDataType);
 		Set<Integer> ignoreOrganIds = new HashSet<>();
 		if(specialType){
-			List<IndexBaseMonthData> indexBaseDatas = indexBaseMonthDataDao.getWithDayAndDataType(dayStr, indexDataType,TenantContextHolder.getTenantId());
+			List<IndexBaseMonthData> indexBaseDatas = indexBaseMonthDataDao.getWithDayAndDataType(dayStr, indexDataType, tenantId);
 			if(!CollectionUtils.isEmpty(indexBaseDatas)) {
 				ignoreOrganIds = indexBaseDatas.stream().map(IndexBaseMonthData::getOrganId).collect(Collectors.toSet());
 			}
@@ -753,6 +751,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 				params.put("jobNature", JobNatureEnum.FULL_TIME);
 				params.put("unDone",1);
 				params.put("reminded",0);
+				params.put("tenantId",tenantId);
 				int serveErrTeacherNum = studentExtracurricularExercisesSituationDao.countTeacherServeInfo(params);
 				fourChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_SERVE_ERROR, IndexErrorType.TEACHER_SERVE_ERROR.getMsg(), serveErrTeacherNum, null));
 			}

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -768,6 +768,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 studentPaymentOrder.setClassGroupId(206);
             }
             studentPaymentOrderService.update(studentPaymentOrder);
+            studentPaymentOrder.setVersion(studentPaymentOrder.getVersion() + 1);
         }
         return studentPaymentOrder;
     }

+ 0 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java

@@ -402,10 +402,6 @@ public class StudentServeServiceImpl implements StudentServeService {
             	}
             }
             
-            if(userId == 2163133){
-            	System.out.println("********************");
-            }
-            
             //有未上的单技课
             if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.SINGLE) && isServiceWithMusicGroup){
                 
@@ -603,10 +599,6 @@ public class StudentServeServiceImpl implements StudentServeService {
                 continue;
             }
             
-            if(noCourseServeStudentId == 2163133){
-            	System.out.println("********************");
-            }
-        	
             Map<Integer, Integer> teacherNumMap = new HashMap<>();
             for (String groupId : musicGroupIds) {
             	
@@ -674,7 +666,6 @@ public class StudentServeServiceImpl implements StudentServeService {
                         .collect(Collectors.groupingBy(StudentServeCourseHomeworkDto::getUserId));
             }
 
-
             List<ExtracurricularExercisesReply> allStudentExercises = extracurricularExercisesReplyDao.getStudentExercisesWithTimeZone(monDayDate.toString(), sunDayDate.toString(), new ArrayList<>(allStudentIds), TenantContextHolder.getTenantId());
             if(!CollectionUtils.isEmpty(allStudentExercises)){
                 studentExercisesMap = allStudentExercises.stream().collect(Collectors.groupingBy(ExtracurricularExercisesReply::getUserId));

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

@@ -3153,7 +3153,7 @@
           AND music_group_id_ = #{groupId}
     </update>
     <update id="resetStudentNum">
-        UPDATE course_schedule cs SET cs.student_num_ = 0 WHERE cs.id_ IN
+        UPDATE course_schedule cs SET cs.student_num_ = 0,cs.evaluate_flag_ = 0 WHERE cs.id_ IN
         <foreach collection="courseScheduleId" separator="," open="(" close=")" item="id">
             #{id}
         </foreach>

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

@@ -879,10 +879,66 @@
 		LEFT JOIN sys_user su ON su.id_ = cs.actual_teacher_id_
 		WHERE cssp.user_id_ = c.user_id_ AND CONCAT(cs.class_date_,' ',cs.start_class_time_) = c.class_date_ AND cssp.group_type_ = #{groupType}
 	</select>
-	
+    <select id="hasStudentMusicTheoryCourseInfo" resultType="java.lang.Boolean">
+		SELECT CASE WHEN cssp.user_id_ = NULL THEN 0 ELSE 1 END hasCourse
+		FROM `course_schedule_student_payment` cssp
+				 LEFT JOIN `course_schedule` cs on cssp.`course_schedule_id_` = cs.`id_`
+				 LEFT JOIN `vip_group` vg on vg.`id_` = cssp.`music_group_id_` AND cssp.`group_type_` = 'VIP'
+				 LEFT JOIN `sys_user` u on u.`id_` = cssp.`user_id_`
+		<include refid="hasStudentMusicTheoryCourseInfo"/>
+		LIMIT 1
+	</select>
+	<resultMap id="ExportStudentCourseInfoDto" type="com.ym.mec.biz.dal.dto.ExportStudentCourseInfoDto">
+		<result property="username" column="username_"/>
+		<result property="userId" column="user_id_"/>
+		<result property="organName" column="organ_name_"/>
+		<result property="teacherId" column="teacher_id_"/>
+		<result property="teacherName" column="teacher_name_"/>
+		<result property="beforeClassNum" column="before_class_num_"/>
+		<result property="eduId" column="edu_id_"/>
+		<result property="eduName" column="edu_name_"/>
+		<result property="grade" column="current_grade_num_"/>
+		<result property="startClassNum" column="start_class_num_"/>
+		<result property="subClassNum" column="sub_class_num_"/>
+		<result property="totalClassNum" column="total_class_num_"/>
+	</resultMap>
+	<select id="queryStudentCourseInfo" resultMap="ExportStudentCourseInfoDto">
+		SELECT o.`name_` organ_name_,u.`username_`,u.`id_` user_id_,tu.`real_name_` teacher_name_,
+		       tu.`id_` teacher_id_,edu.`real_name_` edu_name_ ,edu.`id_` edu_id_ ,
+			   count(vg.`online_classes_num_` + vg.`offline_classes_num_` )  total_class_num_,
+			   sum(case when cs.`status_` != 'NOT_START' then 1 else 0 end) start_class_num_,
+			   sum(case when cs.`status_` = 'NOT_START' then 1 else 0 end) sub_class_num_,
+			   max(case when cs.`status_` != 'NOT_START' then cs.`class_date_` end) before_class_num_,s.`current_grade_num_`
+		FROM `course_schedule_student_payment` cssp
+				 LEFT JOIN `course_schedule` cs on cssp.`course_schedule_id_` = cs.`id_`
+				 LEFT JOIN `vip_group` vg on vg.`id_` = cssp.`music_group_id_` AND cssp.`group_type_` = 'VIP'
+				 LEFT JOIN `sys_user` u on u.`id_` = cssp.`user_id_`
+				 LEFT JOIN `student` s on s.`user_id_` = cssp.`user_id_`
+				 LEFT JOIN `sys_user` tu on tu.`id_` = s.`teacher_id_`
+				 LEFT JOIN `sys_user` edu on edu.`id_` = vg.`educational_teacher_id_`
+				 LEFT JOIN `organization` o on o.`id_` = u.`organ_id_`
+		<include refid="hasStudentMusicTheoryCourseInfo"/>
+		GROUP BY cssp.`user_id_` ;
+	</select>
+	<sql id="hasStudentMusicTheoryCourseInfo">
+		<where>
+			cssp.`group_type_` = 'VIP' AND cs.`del_flag_` != 1 AND cs.`is_lock_` != 1
+			AND u.`organ_id_` NOT IN (38,43,56,36) AND vg.`group_status_` IN (2,4)
+			<if test="groupType == 'VIP'">
+				AND vg.`vip_group_category_id_` != 16
+			</if>
+			<if test="groupType != 'VIP'">
+				AND vg.`vip_group_category_id_` = 16
+			</if>
+			<if test="organId != null and organId != ''">
+				AND FIND_IN_SET(u.organ_id_,#{organId})
+			</if>
+		</where>
+	</sql>
+
 	<select id="queryUserMusicGroupCourseNumByClassTime" resultMap="Mapper" parameterType="map">
 		select cssp.music_group_id_ key_,count(cssp.id_) value_ from course_schedule_student_payment cssp left join course_schedule cs on cssp.course_schedule_id_ = cs.id_
-		where cssp.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} and 
+		where cssp.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} and
 		cssp.music_group_id_ IN
                 <foreach collection="musicGroupIds" separator="," item="musicGroupId" open="(" close=")">
                     #{musicGroupId}

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

@@ -536,7 +536,7 @@
 
 	<sql id="queryTeacherServeInfoCondition">
 		<where>
-			sees.tenant_id_ = #{tenantId} AND tea.job_nature_= 'FULL_TIME'
+			sees.tenant_id_ = #{tenantId} 
 			<if test="organIds != null and organIds.size()>0">
 				AND tea.organ_id_ IN
 				<foreach collection="organIds" item="organId" open="(" close=")" separator=",">

+ 0 - 2
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -428,9 +428,7 @@ public class TaskController extends BaseController {
 		List<TenantInfo> tenantInfos = tenantInfoService.list(new QueryWrapper<TenantInfo>().eq("state_",1));
 		if(tenantInfos != null && tenantInfos.size() > 0){
 			for (TenantInfo tenantInfo : tenantInfos) {
-				TenantContextHolder.setTenantId(tenantInfo.getId());
 				indexBaseMonthDataService.indexBaseDataTask(tenantInfo.getId(), month, dataTypeSet);
-				TenantContextHolder.clearTenantId();
 			}
 		}
 	}

+ 8 - 0
mec-web/src/main/resources/exportColumnMapper.ini

@@ -262,6 +262,14 @@ fieldColumns = ["userName","phone","currentGrade","currentClass","subjectName ==
 headColumns = ["交易流水号", "订单号", "订单日期", "分部", "学员姓名", "学员编号", "所属乐团", "学员状态", "维修技师", "乐器名称", "具体型号", "乐保类型"]
 fieldColumns = ["transNo", "orderNo", "createTime", "organName", "studentName", "studentId", "musicGroupName", "studentStatus.msg", "repairerName", "goodsName", "specification", "type == '0' ? '新增' : '续费'"]
 
+[VIP课学员课程信息导出]
+headColumns = ["分部", "学员姓名", "学员编号", "指导老师", "指导老师编号", "教务老师", "教务老师编号", "总课次", "已进行课次", "剩余课次", "上次课时间", "年级"]
+fieldColumns = ["organName", "username", "userId", "teacherName", "teacherId", "eduName", "eduId", "totalClassNum", "startClassNum", "subClassNum", "beforeClassNum", "grade"]
+
+[乐理课学员课程信息导出]
+headColumns = ["分部", "学员姓名", "学员编号", "指导老师", "指导老师编号", "教务老师", "教务老师编号", "总课次", "已进行课次", "剩余课次", "上次课时间", "年级"]
+fieldColumns = ["organName", "username", "userId", "teacherName", "teacherId", "eduName", "eduId", "totalClassNum", "startClassNum", "subClassNum", "beforeClassNum", "grade"]
+
 [服务指标导出]
 headColumns = ["分部","老师编号","老师姓名","预计安排(人次)","实际安排(人次)","布置率(%)","提交人数","点评次数","点评率(%)","及时点评次数","及时点评率(%)"]
 fieldColumns = ["organName","teacherId","teacherName","expectExercisesNum","actualExercisesNum", "100 * actualExercisesNum / expectExercisesNum","exercisesReplyNum","exercisesMessageNum", "100 * exercisesMessageNum / exercisesReplyNum", "exercisesMessageTimelyNum","100 * exercisesMessageTimelyNum / exercisesReplyNum"]