瀏覽代碼

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

hgw 3 年之前
父節點
當前提交
34154cff9d
共有 68 個文件被更改,包括 912 次插入493 次删除
  1. 1 4
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserDeviceController.java
  2. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStatisticsDao.java
  3. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  4. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  5. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java
  6. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java
  7. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  8. 13 13
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentStatisticsDao.java
  9. 18 7
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CloudStudyStudentDataDto.java
  10. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkStudentDetailDto.java
  11. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EduHomeworkCardDto.java
  12. 36 15
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/IndexCloudStudyListDto.java
  13. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentAttendanceViewDto.java
  14. 24 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentOrganDto.java
  15. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentStandardDto.java
  16. 37 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherExercisesServiceDto.java
  17. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/WebCourseHomeworkListDto.java
  18. 4 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercisesMessage.java
  19. 5 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercisesReply.java
  20. 13 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentAttendance.java
  21. 4 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomework.java
  22. 4 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomeworkReply.java
  23. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseScheduleRecordDto.java
  24. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java
  25. 33 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/StandardEnum.java
  26. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/ExtraExercilseQueryInfo.java
  27. 33 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentStatisticsQueryInfo.java
  28. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherServeHomeworkQueryInfo.java
  29. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  30. 11 10
      mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java
  31. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesReplyService.java
  32. 12 4
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentExtracurricularExercisesSituationService.java
  33. 32 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  34. 14 13
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  35. 6 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java
  36. 31 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  37. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  38. 96 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java
  39. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  40. 7 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java
  41. 8 13
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java
  42. 45 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  43. 9 24
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentStatisticsServiceImpl.java
  44. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  45. 1 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  46. 4 1
      mec-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml
  47. 3 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStatisticsMapper.xml
  48. 11 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  49. 13 4
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesMapper.xml
  50. 6 4
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml
  51. 39 17
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  52. 2 1
      mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  53. 3 13
      mec-biz/src/main/resources/config/mybatis/StudentBasicInfoMapper.xml
  54. 11 6
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  55. 22 0
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  56. 4 1
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  57. 11 0
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  58. 44 237
      mec-biz/src/main/resources/config/mybatis/StudentStatisticsMapper.xml
  59. 1 2
      mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml
  60. 9 12
      mec-student/src/main/java/com/ym/mec/student/interceptor/MDCInterceptor.java
  61. 1 1
      mec-student/src/main/resources/logback-spring.xml
  62. 13 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesController.java
  63. 10 0
      mec-teacher/src/main/java/com/ym/mec/teacher/interceptor/MDCInterceptor.java
  64. 1 1
      mec-teacher/src/main/resources/logback-spring.xml
  65. 12 15
      mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java
  66. 3 3
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  67. 0 9
      mec-web/src/main/java/com/ym/mec/web/controller/ExtracurricularExercisesController.java
  68. 42 2
      mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

+ 1 - 4
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserDeviceController.java

@@ -21,9 +21,6 @@ import com.yonge.log.model.AuditLogAnnotation;
 public class UserDeviceController extends BaseController {
 
 	@Autowired
-	private SysUserService sysUserService;
-	
-	@Autowired
 	private SysUserDeviceService sysUserDeviceService;
 
 	@ApiOperation(value = "分页查询用户信息")
@@ -34,7 +31,7 @@ public class UserDeviceController extends BaseController {
 
 	@ApiOperation(value = "设备号解除绑定")
 	@PostMapping(value = "/unbind")
-	@AuditLogAnnotation(operateName = "设备号解除绑定",interfaceURL = "userDevice/unbind")
+//	@AuditLogAnnotation(operateName = "设备号解除绑定",interfaceURL = "userDevice/unbind")
 	public Object unbind(Integer id) {
 		return succeed(sysUserDeviceService.deleteWithLogic(id));
 	}

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStatisticsDao.java

@@ -20,4 +20,7 @@ public interface CourseScheduleStatisticsDao extends BaseDAO<Long, CourseSchedul
     void batchInsert(@Param("scheduleStatisticsList") List<CourseScheduleStatistics> scheduleStatisticsList);
 
     void delWaitByCourseId(@Param("courseIdList") List<Long> courseIdList);
+
+    //更新服务指标
+    void updateCourseService(@Param("courseIds") String courseIds, @Param("serviceFlag") int serviceFlag);
 }

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment;
 import com.ym.mec.biz.dal.entity.CourseScheduleStudentPaymentDto;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.common.dal.BaseDAO;
+
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
@@ -599,4 +600,11 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     List<BaseNameDto> queryFirstNotStartTeacher(@Param("studentIds") List<Integer> studentIds, @Param("groupType") String groupType);
 
     List<ExportVipStudentCourseManageDto> queryVipStudentCourseManage(@Param("organId") String organId, @Param("tenantId") Integer tenantId);
+    
+    /**
+     * 查询有剩余课程学生列表
+     * @param organIds
+     * @return
+     */
+    List<StudentOrganDto> queryRemainCourseStudent(@Param("organIds") List<Integer> organIds);
 }

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

@@ -508,5 +508,8 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
     Integer countQuitNum(@Param("queryInfo") IndexDataQueryInfo queryInfo);
 
     //乐团统计数据导出
+    Integer countMusicGroupCourseList(@Param("queryInfo") ExportUserAccountQueryInfo queryInfo);
+
+    //乐团统计数据导出
     List<MusicGroupExportDto> exportMusicGroupCourseList(@Param("queryInfo") ExportUserAccountQueryInfo queryInfo);
 }

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java

@@ -358,5 +358,7 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
     * @author zx
     * @date 2022/3/1 16:03
     */
-    void updateQualified(@Param("courseScheduleId") Long courseScheduleId, @Param("studentIds") List<Integer> studentIds);
+    void updateQualified(@Param("courseScheduleId") Long courseScheduleId,
+                         @Param("studentIds") List<Integer> studentIds,
+                         @Param("qualifiedFlag") Integer qualifiedFlag);
 }

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java

@@ -38,6 +38,16 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
                        @Param("studentIds") List<Integer> studentIds);
 
     /**
+     * @describe 根据周一日期删除统计信息
+     * @author Joburgess
+     * @date 2020/4/10
+     * @param monday:
+     * @return int
+     */
+    List<StudentExtracurricularExercisesSituation> selectByMonday(@Param("monday") String monday,
+                       @Param("studentIds") List<Integer> studentIds);
+
+    /**
      * @describe 删除指定学员的服务指标
      * @author Joburgess
      * @date 2020.05.28
@@ -47,6 +57,16 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
     int deleteByStudent(@Param("studentId") Integer studentId,
                         @Param("monday") String monday);
 
+    /**
+     * @describe 删除指定学员的服务指标
+     * @author Joburgess
+     * @date 2020.05.28
+     * @param studentId: 学员编号
+     * @return int
+     */
+    List<StudentExtracurricularExercisesSituation> selectByStudent(@Param("studentId") Integer studentId,
+                        @Param("monday") String monday);
+
     List<StudentExercisesSituationDto> findExercisesSituations(Map<String, Object> params);
     int countExercisesSituations(Map<String, Object> params);
 
@@ -162,4 +182,6 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
     int countWaitCreateHomeworkNum1(Integer teacherId);
     
     List<TeacherServeDto> queryTeacherPerformanceIndicator(Map<String, Object> params);
+
+    void batchDelete(@Param("situationIds") List<Long> situationIds);
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java

@@ -21,6 +21,7 @@ import com.ym.mec.biz.dal.dto.StudentFeeDetailDto;
 import com.ym.mec.biz.dal.dto.StudentInfo;
 import com.ym.mec.biz.dal.dto.StudentMusicDetailDto;
 import com.ym.mec.biz.dal.dto.StudentMusicGroupDto;
+import com.ym.mec.biz.dal.dto.StudentOrganDto;
 import com.ym.mec.biz.dal.dto.StudentRegisterInstrumentsDetailDto;
 import com.ym.mec.biz.dal.dto.StudentRegisterPerDto;
 import com.ym.mec.biz.dal.dto.SubjectApplyDetailDto;
@@ -769,4 +770,6 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
     List<Map<Integer,String>> getLastMusicGroupName(@Param("userIds") List<Integer> userIds);
     
     List<StudentRegistration> queryServiceStudentByMusicGroupStatus(@Param("nextMonday") String nextMonday,@Param("tenantId") Integer tenantId);
+    
+    List<StudentOrganDto> queryEffectiveStudent(@Param("organIds") List<Integer> organIds);
 }

+ 13 - 13
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentStatisticsDao.java

@@ -1,9 +1,10 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.StudentOrganDto;
 import com.ym.mec.biz.dal.dto.StudentStatisticsDto;
 import com.ym.mec.biz.dal.dto.StudentStatisticsSumDto;
-import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.biz.dal.entity.StudentStatistics;
+import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -12,33 +13,30 @@ import java.util.Map;
 public interface StudentStatisticsDao extends BaseDAO<Integer, StudentStatistics> {
 
     //更新乐团主管、指导老师
-    List<StudentStatistics> queryStatisticsTeacherAndEdu();
-
-    //更新乐团主管、指导老师
-    List<StudentStatistics> queryStatisticsTeacherAndEdu2();
+    void updateTeacherAndEdu();
 
     //更新总课时数、已完成、剩余课时数、最近30天课耗
-    List<StudentStatistics> queryStatisticsCourseNum();
+    void updateCourseNum();
 
     //更新未排课总数
-    List<StudentStatistics> queryStatisticsNoCourseNum();
+    void updateNoCourseNum();
 
     //更新未开始价值
-    List<StudentStatistics> queryStatisticsNotStartCourseFee();
+    void updateNotStartCourseFee();
 
     //更新未排课课程价值
-    List<StudentStatistics> queryStatisticsNoCourseFee();
+    void updateNoCourseFee();
 
     //更新第一次课的时间\最近一次课时间
-    List<StudentStatistics> queryStatisticsFirstAndLastCourseTime();
+    void updateFirstAndLastCourseTime();
+
+    //更新进行中课程组数量
+    void updateNormalGroupNum();
 
     int countStatistics(Map<String, Object> params);
 
     List<StudentStatisticsDto> queryStatistics(Map<String, Object> params);
 
-    //更新进行中课程组数量
-    List<StudentStatistics> queryStatisticsNormalGroupNum();
-
     //汇总小课数据
     StudentStatisticsSumDto studentSmallClassStatisticsSum(@Param("groupType") String groupType, @Param("organIdList") List<Integer> organIdList);
 
@@ -63,4 +61,6 @@ public interface StudentStatisticsDao extends BaseDAO<Integer, StudentStatistics
     void clean();
 
     void batchUpdate(@Param("statisticsList") List<StudentStatistics> statisticsList);
+
+    List<StudentOrganDto> queryNoScheduleNumStudent(@Param("organIds") List<Integer> organIds);
 }

+ 18 - 7
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CloudStudyStudentDataDto.java

@@ -13,15 +13,18 @@ public class CloudStudyStudentDataDto {
     @ApiModelProperty("分部名称")
     private String organName;
 
-    @ApiModelProperty("学员总数")
+    @ApiModelProperty("注册学员总数")
     private int totalStudentNum;
+    
+    @ApiModelProperty("有效学员总数")
+    private int effectiveStudentNum; 
 
     @ApiModelProperty("付费会员数")
     private int vipStudentNum;
     
-	private Integer effectiveVipStudentNum;
+	private int effectiveVipStudentNum;
 	
-	private Integer waitActivateVipStudentNum;
+	private int waitActivateVipStudentNum;
 
     @ApiModelProperty("试用会员数")
     private int eVipStudentNum;
@@ -132,19 +135,27 @@ public class CloudStudyStudentDataDto {
         this.newCloudStudyStudentNum = newCloudStudyStudentNum;
     }
 
-	public Integer getEffectiveVipStudentNum() {
+	public int getEffectiveVipStudentNum() {
 		return effectiveVipStudentNum;
 	}
 
-	public void setEffectiveVipStudentNum(Integer effectiveVipStudentNum) {
+	public void setEffectiveVipStudentNum(int effectiveVipStudentNum) {
 		this.effectiveVipStudentNum = effectiveVipStudentNum;
 	}
 
-	public Integer getWaitActivateVipStudentNum() {
+	public int getWaitActivateVipStudentNum() {
 		return waitActivateVipStudentNum;
 	}
 
-	public void setWaitActivateVipStudentNum(Integer waitActivateVipStudentNum) {
+	public void setWaitActivateVipStudentNum(int waitActivateVipStudentNum) {
 		this.waitActivateVipStudentNum = waitActivateVipStudentNum;
 	}
+
+	public int getEffectiveStudentNum() {
+		return effectiveStudentNum;
+	}
+
+	public void setEffectiveStudentNum(int effectiveStudentNum) {
+		this.effectiveStudentNum = effectiveStudentNum;
+	}
 }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkStudentDetailDto.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.enums.StandardEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.util.Date;
@@ -53,6 +54,9 @@ public class CourseHomeworkStudentDetailDto {
     @ApiModelProperty(value = "是否已经回复",required = false)
     private YesOrNoEnum isReplied;
 
+    @ApiModelProperty(value = "作业评价评级",required = false)
+    private StandardEnum standardFlag;
+
     private Integer studentId;
 
     private String studentName;
@@ -79,6 +83,14 @@ public class CourseHomeworkStudentDetailDto {
     
     private MusicGroupTrainPlan musicGroupTrainPlan;
 
+    public StandardEnum getStandardFlag() {
+        return standardFlag;
+    }
+
+    public void setStandardFlag(StandardEnum standardFlag) {
+        this.standardFlag = standardFlag;
+    }
+
     public String getMusicScoreContent() {
         return musicScoreContent;
     }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EduHomeworkCardDto.java

@@ -36,6 +36,16 @@ public class EduHomeworkCardDto {
 
     private Date createTime;
 
+    private String musicScoreId;
+
+    public String getMusicScoreId() {
+        return musicScoreId;
+    }
+
+    public void setMusicScoreId(String musicScoreId) {
+        this.musicScoreId = musicScoreId;
+    }
+
     public String getTeacherAvatar() {
         return teacherAvatar;
     }

+ 36 - 15
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/IndexCloudStudyListDto.java

@@ -6,15 +6,19 @@ public class IndexCloudStudyListDto {
 	
 	private String organName;
 	
-	private Integer totalStudentNum;
+	private int totalStudentNum;
 	
-	private Integer vipStudentNum;
+	private int effectiveStudentNum;
 	
-	private Integer effectiveVipStudentNum;
+	private int vipStudentNum;
 	
-	private Integer waitActivateVipStudentNum;
+	private double vipStudentRate;
 	
-	private Integer activeStudentNum;
+	private int effectiveVipStudentNum;
+	
+	private int waitActivateVipStudentNum;
+	
+	private int activeStudentNum;
 
 	public Integer getOrganId() {
 		return organId;
@@ -32,43 +36,60 @@ public class IndexCloudStudyListDto {
 		this.organName = organName;
 	}
 
-	public Integer getTotalStudentNum() {
+	public int getTotalStudentNum() {
 		return totalStudentNum;
 	}
 
-	public void setTotalStudentNum(Integer totalStudentNum) {
+	public void setTotalStudentNum(int totalStudentNum) {
 		this.totalStudentNum = totalStudentNum;
 	}
 
-	public Integer getVipStudentNum() {
+	public int getEffectiveStudentNum() {
+		return effectiveStudentNum;
+	}
+
+	public void setEffectiveStudentNum(int effectiveStudentNum) {
+		this.effectiveStudentNum = effectiveStudentNum;
+	}
+
+	public int getVipStudentNum() {
 		return vipStudentNum;
 	}
 
-	public void setVipStudentNum(Integer vipStudentNum) {
+	public void setVipStudentNum(int vipStudentNum) {
 		this.vipStudentNum = vipStudentNum;
 	}
 
-	public Integer getEffectiveVipStudentNum() {
+	public double getVipStudentRate() {
+		return vipStudentRate;
+	}
+
+	public void setVipStudentRate(double vipStudentRate) {
+		this.vipStudentRate = vipStudentRate;
+	}
+
+	public int getEffectiveVipStudentNum() {
 		return effectiveVipStudentNum;
 	}
 
-	public void setEffectiveVipStudentNum(Integer effectiveVipStudentNum) {
+	public void setEffectiveVipStudentNum(int effectiveVipStudentNum) {
 		this.effectiveVipStudentNum = effectiveVipStudentNum;
 	}
 
-	public Integer getWaitActivateVipStudentNum() {
+	public int getWaitActivateVipStudentNum() {
 		return waitActivateVipStudentNum;
 	}
 
-	public void setWaitActivateVipStudentNum(Integer waitActivateVipStudentNum) {
+	public void setWaitActivateVipStudentNum(int waitActivateVipStudentNum) {
 		this.waitActivateVipStudentNum = waitActivateVipStudentNum;
 	}
 
-	public Integer getActiveStudentNum() {
+	public int getActiveStudentNum() {
 		return activeStudentNum;
 	}
 
-	public void setActiveStudentNum(Integer activeStudentNum) {
+	public void setActiveStudentNum(int activeStudentNum) {
 		this.activeStudentNum = activeStudentNum;
 	}
+
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentAttendanceViewDto.java

@@ -33,6 +33,9 @@ public class StudentAttendanceViewDto {
     @ApiModelProperty(value = "年级",required = false)
     private Integer currentGradeNum;
 
+    @ApiModelProperty(value = "班级",required = false)
+    private String currentClass;
+
     @ApiModelProperty(value = "学生姓名",required = false)
     private String userName;
 
@@ -53,6 +56,14 @@ public class StudentAttendanceViewDto {
     @ApiModelProperty(value = "是否有待审核的退团申请",required = false)
     private Integer quitFlag;
 
+    public String getCurrentClass() {
+        return currentClass;
+    }
+
+    public void setCurrentClass(String currentClass) {
+        this.currentClass = currentClass;
+    }
+
     public Integer getQuitFlag() {
         return quitFlag;
     }

+ 24 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentOrganDto.java

@@ -0,0 +1,24 @@
+package com.ym.mec.biz.dal.dto;
+
+public class StudentOrganDto {
+
+	private Integer userId;
+	
+	private Integer organId;
+
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	public Integer getOrganId() {
+		return organId;
+	}
+
+	public void setOrganId(Integer organId) {
+		this.organId = organId;
+	}
+}

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentStandardDto.java

@@ -17,7 +17,7 @@ public class StudentStandardDto {
 
     private String subjectName;
 
-    private Integer qualifiedFlag;
+    private Integer qualifiedFlag = 1;
 
     private String classDate;
 

+ 37 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherExercisesServiceDto.java

@@ -1,5 +1,7 @@
 package com.ym.mec.biz.dal.dto;
 
+import io.swagger.annotations.ApiModelProperty;
+
 /**
  * @Author Joburgess
  * @Date 2020/4/17
@@ -8,12 +10,45 @@ public class TeacherExercisesServiceDto {
 
     private Integer teacherId;
 
-    /** 预期训练次数 */
+    @ApiModelProperty(value = "预期训练次数")
     private Integer expectExercisesNum;
 
-    /** 实际训练次数 */
+    @ApiModelProperty(value = "实际训练次数")
     private Integer actualExercisesNum;
 
+    @ApiModelProperty(value = "作业布置率")
+    private String expectExercisesRate = "0%";
+
+    @ApiModelProperty(value = "作业提交率")
+    private String exercisesReplyRate = "0%";
+
+    @ApiModelProperty(value = "作业点评率")
+    private String exercisesMessageRate = "0%";
+
+    public String getExpectExercisesRate() {
+        return expectExercisesRate;
+    }
+
+    public void setExpectExercisesRate(String expectExercisesRate) {
+        this.expectExercisesRate = expectExercisesRate;
+    }
+
+    public String getExercisesReplyRate() {
+        return exercisesReplyRate;
+    }
+
+    public void setExercisesReplyRate(String exercisesReplyRate) {
+        this.exercisesReplyRate = exercisesReplyRate;
+    }
+
+    public String getExercisesMessageRate() {
+        return exercisesMessageRate;
+    }
+
+    public void setExercisesMessageRate(String exercisesMessageRate) {
+        this.exercisesMessageRate = exercisesMessageRate;
+    }
+
     public Integer getTeacherId() {
         return teacherId;
     }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/WebCourseHomeworkListDto.java

@@ -62,6 +62,17 @@ public class WebCourseHomeworkListDto {
     @ApiModelProperty(value = "已回复数",required = false)
     private Integer repliedNum = 0;
 
+    @ApiModelProperty(value = "伴奏编号",required = false)
+    private String musicScoreId;
+
+    public String getMusicScoreId() {
+        return musicScoreId;
+    }
+
+    public void setMusicScoreId(String musicScoreId) {
+        this.musicScoreId = musicScoreId;
+    }
+
     public String getClassDate() {
         return classDate;
     }

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercisesMessage.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.entity;
 
 import com.ym.mec.biz.dal.enums.ImSendTypeEnum;
+import com.ym.mec.biz.dal.enums.StandardEnum;
 import com.ym.mec.common.entity.BaseEntity;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -34,13 +35,13 @@ public class ExtracurricularExercisesMessage extends BaseEntity {
 	private ImSendTypeEnum msgType = ImSendTypeEnum.TXT;
 
 	//达标
-	private Integer standardFlag;
+	private StandardEnum standardFlag;
 
-	public Integer getStandardFlag() {
+	public StandardEnum getStandardFlag() {
 		return standardFlag;
 	}
 
-	public void setStandardFlag(Integer standardFlag) {
+	public void setStandardFlag(StandardEnum standardFlag) {
 		this.standardFlag = standardFlag;
 	}
 

+ 5 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercisesReply.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.enums.StandardEnum;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
@@ -67,14 +68,14 @@ public class ExtracurricularExercisesReply extends BaseEntity {
 	@ApiModelProperty(value="伴奏详情包含,曲目编号、分谱")
 	private String musicScoreContent;
 
-	@ApiModelProperty(value = "0未达标、1达标、2优秀",required = true)
-	private Integer standardFlag;
+	@ApiModelProperty(value = "作业评级",required = true)
+	private StandardEnum standardFlag;
 
-	public Integer getStandardFlag() {
+	public StandardEnum getStandardFlag() {
 		return standardFlag;
 	}
 
-	public void setStandardFlag(Integer standardFlag) {
+	public void setStandardFlag(StandardEnum standardFlag) {
 		this.standardFlag = standardFlag;
 	}
 

+ 13 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentAttendance.java

@@ -49,6 +49,10 @@ public class StudentAttendance extends BaseEntity {
 	private Integer currentGradeNum;
 
 	/**  */
+	@ApiModelProperty(value = "班级",required = false)
+	private String currentClass;
+
+	/**  */
 	@ApiModelProperty(value = "学生姓名",required = false)
 	private String username;
 
@@ -98,7 +102,15 @@ public class StudentAttendance extends BaseEntity {
 	private int normalRemind;
 
 	@ApiModelProperty(value = "是否达标1是0否")
-	private Integer qualifiedFlag = 0;
+	private Integer qualifiedFlag;
+
+	public String getCurrentClass() {
+		return currentClass;
+	}
+
+	public void setCurrentClass(String currentClass) {
+		this.currentClass = currentClass;
+	}
 
 	public Integer getQualifiedFlag() {
 		return qualifiedFlag;

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomework.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.entity;
 
 import com.ym.mec.biz.dal.enums.ImSendTypeEnum;
+import com.ym.mec.biz.dal.enums.StandardEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.common.entity.BaseEntity;
 
@@ -73,13 +74,13 @@ public class StudentCourseHomework extends BaseEntity {
 	private String musicScoreName;
 
 	@ApiModelProperty(value = "0未达标、1达标、2优秀",required = true)
-	private Integer standardFlag;
+	private StandardEnum standardFlag;
 
-	public Integer getStandardFlag() {
+	public StandardEnum getStandardFlag() {
 		return standardFlag;
 	}
 
-	public void setStandardFlag(Integer standardFlag) {
+	public void setStandardFlag(StandardEnum standardFlag) {
 		this.standardFlag = standardFlag;
 	}
 

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomeworkReply.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.entity;
 
 import com.ym.mec.biz.dal.enums.ImSendTypeEnum;
+import com.ym.mec.biz.dal.enums.StandardEnum;
 import com.ym.mec.common.entity.BaseEntity;
 
 import io.swagger.annotations.ApiModelProperty;
@@ -40,13 +41,13 @@ public class StudentCourseHomeworkReply extends BaseEntity {
 	private ImSendTypeEnum msgType = ImSendTypeEnum.TXT;
 
 	@ApiModelProperty(value = "0未达标、1达标、2优秀",required = true)
-	private Integer standardFlag;
+	private StandardEnum standardFlag;
 
-	public Integer getStandardFlag() {
+	public StandardEnum getStandardFlag() {
 		return standardFlag;
 	}
 
-	public void setStandardFlag(Integer standardFlag) {
+	public void setStandardFlag(StandardEnum standardFlag) {
 		this.standardFlag = standardFlag;
 	}
 

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseScheduleRecordDto.java

@@ -62,7 +62,7 @@ public class StudentCourseScheduleRecordDto {
     private String teachingAddress;
 
     @ApiModelProperty(value = "是否达标1是0否")
-    private Integer qualifiedFlag = 0;
+    private Integer qualifiedFlag = 1;
 
     public Integer getQualifiedFlag() {
         return qualifiedFlag;

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

@@ -10,7 +10,7 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
     ADD_STUDENT("ADD_STUDENT", "乐团报名"),
     RENEW("RENEW", "乐团续费"),
     SPORADIC("SPORADIC", "缴费"),
-    OTHER("OTHER", "其他"),
+    OTHER("OTHER", "其他订单"),
     SMALL_CLASS_TO_BUY("SMALL_CLASS_TO_BUY", "VIP课报名"),
     PRACTICE_GROUP_BUY("PRACTICE_GROUP_BUY", "网管课报名"),
     PRACTICE_GROUP_RENEW("PRACTICE_GROUP_RENEW", "网管课续费"),

+ 33 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/StandardEnum.java

@@ -0,0 +1,33 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+public enum StandardEnum implements BaseEnum<String, StandardEnum> {
+	NOT_STANDARD("NOT_STANDARD", "未达标"), STANDARD("STANDARD", "已达标"), EXCELLENT("EXCELLENT", "优秀");
+
+	private String code;
+
+	private String msg;
+
+	StandardEnum(String code, String msg) {
+		this.code = code;
+		this.msg = msg;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	@Override
+	public String getCode() {
+		return this.code;
+	}
+}

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/ExtraExercilseQueryInfo.java

@@ -10,6 +10,10 @@ import java.util.Date;
  */
 public class ExtraExercilseQueryInfo extends QueryInfo {
 
+	private String startTime;
+
+	private String endTime;
+
 	private String batchNo;// 批次号
 
 	private Integer teacherId;
@@ -26,6 +30,22 @@ public class ExtraExercilseQueryInfo extends QueryInfo {
 
 	private Date assignEndTime;// 布置作业的结束时间
 
+	public String getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(String startTime) {
+		this.startTime = startTime;
+	}
+
+	public String getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(String endTime) {
+		this.endTime = endTime;
+	}
+
 	public Integer getTeacherId() {
 		return teacherId;
 	}

+ 33 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentStatisticsQueryInfo.java

@@ -42,6 +42,15 @@ public class StudentStatisticsQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "是否查询课耗异常",required = false)
     private Boolean courseConsumerError;
 
+    @ApiModelProperty(value = "是否预警(未开始课时数+未排课课时数≤3为【是】)",required = false)
+    private Boolean wornFlag;
+
+    @ApiModelProperty(value = "剩余课时数(未开始课时数+未排课课时数 小于指定数量)",required = false)
+    private Integer subCourseMinNum;
+
+    @ApiModelProperty(value = "剩余课时数(未开始课时数+未排课课时数 大于指定数量)",required = false)
+    private Integer subCourseMaxNum;
+
     @ApiModelProperty(value = "第一次课开始时间(年月日)",required = false)
     private String firstCourseStartTime;
 
@@ -51,6 +60,30 @@ public class StudentStatisticsQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "分部编号列表",required = false)
     private String organId;
 
+    public Boolean getWornFlag() {
+        return wornFlag;
+    }
+
+    public void setWornFlag(Boolean wornFlag) {
+        this.wornFlag = wornFlag;
+    }
+
+    public Integer getSubCourseMinNum() {
+        return subCourseMinNum;
+    }
+
+    public void setSubCourseMinNum(Integer subCourseMinNum) {
+        this.subCourseMinNum = subCourseMinNum;
+    }
+
+    public Integer getSubCourseMaxNum() {
+        return subCourseMaxNum;
+    }
+
+    public void setSubCourseMaxNum(Integer subCourseMaxNum) {
+        this.subCourseMaxNum = subCourseMaxNum;
+    }
+
     public String getOrganId() {
         return organId;
     }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherServeHomeworkQueryInfo.java

@@ -10,6 +10,10 @@ import java.util.Date;
  */
 public class TeacherServeHomeworkQueryInfo extends QueryInfo {
 
+    private Date startTime;
+
+    private Date endTime;
+
     private Date monday;
 
     private Date sunday;
@@ -20,6 +24,22 @@ public class TeacherServeHomeworkQueryInfo extends QueryInfo {
 
     private String courseType;
 
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
     public Date getMonth() {
         return month;
     }

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java

@@ -12,6 +12,7 @@ import com.ym.mec.common.entity.ImUserModel;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
+import org.apache.ibatis.annotations.Param;
 
 import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
@@ -588,4 +589,17 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
     List<ClassGroup> queryStudentClassGroupsAndTeacher(String musicGroupId);
 
     CourseScheduleStatistics getMusicGroupCourseScheduleStatistics(queryMusicGroupCourseScheduleQueryInfo queryInfo);
+
+    //修改班级基本信息
+    int updateClassGroup(ClassGroup classGroup);
+
+    /**
+     * 根据班级编号冻结所选班级
+     *
+     * @param classGroupIds
+     * @param lockFlag
+     * @return
+     * @author zouxuan
+     */
+    int batchUpdateLockByClassGroupIds(List<Integer> classGroupIds,int lockFlag);
 }

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

@@ -6,6 +6,7 @@ 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.biz.dal.page.ExportUserAccountQueryInfo;
 import com.ym.mec.biz.dal.page.StudentStatisticsQueryInfo;
 import com.ym.mec.biz.dal.page.queryMusicGroupCourseScheduleQueryInfo;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -277,23 +278,23 @@ public interface ExportService {
     //保存下载记录
     ManagerDownload saveManagerDownload(ExportTypeEnum exportTypeEnum, Integer userId);
 
-    void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException;
+    void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception;
 
-    void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException;
+    void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception;
 
-    void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException;
+    void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception;
 
-    void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException;
+    void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception;
 
-    void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException;
+    void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws Exception;
 
-    void queryStudentCourseInfo(String organId, Integer tenantId, String vip, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException;
+    void queryStudentCourseInfo(String organId, Integer tenantId, String vip, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws Exception;
 
-    void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException;
+    void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws Exception;
 
-    void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException;
+    void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception;
 
-    void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException;
+    void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception;
 
-    void exportMusicGroupCourseList(ManagerDownload managerDownload, List<MusicGroupExportDto> exportDtoList) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, IOException;
+    void exportMusicGroupCourseList(ManagerDownload managerDownload, ExportUserAccountQueryInfo queryInfo) throws Exception;
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesReplyService.java

@@ -5,11 +5,13 @@ import com.ym.mec.biz.dal.dto.EduHomeworkCardDto;
 import com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
+import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
 import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
 import com.ym.mec.biz.dal.page.ExtraExercilseReplyQueryInfo;
 import com.ym.mec.biz.dal.page.StudentCourseHomeWorkQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 

+ 12 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/StudentExtracurricularExercisesSituationService.java

@@ -2,10 +2,7 @@ package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
-import com.ym.mec.biz.dal.page.StudentExercisesSituationQueryInfo;
-import com.ym.mec.biz.dal.page.StudentServiceDetailQueryInfo;
-import com.ym.mec.biz.dal.page.TeacherServeHomeworkQueryInfo;
-import com.ym.mec.biz.dal.page.TeacherServeQueryInfo;
+import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
@@ -71,4 +68,15 @@ public interface StudentExtracurricularExercisesSituationService extends BaseSer
      * @return
      */
     List<TeacherServeDto> queryTeacherPerformanceIndicator(TeacherServeQueryInfo queryInfo);
+
+    //批量新增
+    void batchInsert(List<StudentExtracurricularExercisesSituation> situations);
+
+    //删除指定学员服务指标
+    void deleteByMonday(String monday,List<Integer> studentIds);
+
+    //删除指定学员服务指标
+    void deleteByStudent(Integer studentId,String monday);
+
+    TeacherExercisesServiceDto getStatistics(ExtraExercilseQueryInfo queryInfo);
 }

+ 32 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -3412,6 +3412,32 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int updateClassGroup(ClassGroup classGroup) {
+        ClassGroup group = classGroupDao.get(classGroup.getId());
+        if(Objects.isNull(group)){
+            throw new BizException("班级信息不存在");
+        }
+        String groupName = classGroup.getName();
+        if(StringUtils.isEmpty(groupName)){
+            throw new BizException("请填写班级名称");
+        }
+        classGroupDao.update(classGroup);
+        ImGroup imGroup = imGroupService.get(classGroup.getId().longValue());
+        if(!Objects.isNull(imGroup)){
+            imGroup.setName(groupName);
+            imGroupService.update(imGroup);
+        }
+        return 1;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int batchUpdateLockByClassGroupIds(List<Integer> classGroupIds, int lockFlag) {
+        return classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds,lockFlag);
+    }
+
+    @Override
     public PageInfo<MusicGroupCourseScheduleDto> queryMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo) {
         PageInfo<MusicGroupCourseScheduleDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<>();
@@ -4640,13 +4666,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         } else {
             paymentCalenderDto.setStatus(NO);
         }
-
-        //将学员加入新乐团、扣除原乐团剩余课程余额、补充到现有乐团
-        Map<Integer, List<MusicGroupPaymentCalenderStudentDetail>> collect = calenderStudentDetails.stream().collect(Collectors.groupingBy(e -> e.getUserId()));
-        for (Map<Integer, String> classGroupStudent : classGroupStudents) {
-            Integer classGroupId = classGroupStudent.keySet().iterator().next();
-            studentRegistrationService.insertStudent(classGroupStudent.get(classGroupId), musicGroupDao.findByClassGroupId(classGroupId).getId(), musicGroup.getId(), collect);
-        }
         paymentCalenderDto.setPayUserType(MusicGroupPaymentCalender.PayUserType.STUDENT);
         paymentCalenderDto.setPaymentType(SPAN_GROUP_CLASS_ADJUST);
         //生成缴费项目
@@ -4692,6 +4711,12 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         httpResponseResult.setStatus(true);
         //没有需要审核的缴费项目
         if (paymentCalenderDto.getStatus() != AUDITING) {
+            //将学员加入新乐团、扣除原乐团剩余课程余额、补充到现有乐团
+            Map<Integer, List<MusicGroupPaymentCalenderStudentDetail>> collect = calenderStudentDetails.stream().collect(Collectors.groupingBy(e -> e.getUserId()));
+            for (Map<Integer, String> classGroupStudent : classGroupStudents) {
+                Integer classGroupId = classGroupStudent.keySet().iterator().next();
+                studentRegistrationService.insertStudent(classGroupStudent.get(classGroupId), musicGroupDao.findByClassGroupId(classGroupId).getId(), musicGroup.getId(), collect);
+            }
             List<Map> classGroupStudents1 = JSON.parseArray(musicGroupStudentClassAdjust.getClassGroupStudents(), Map.class);
             spanGroupClassAdjustPass(masterClassGroupId, studentIds, courseIds, classGroupStudents1, allLockCourseIds, paymentCalenderDto.getBatchNo(), masterTotalPrice);
             httpResponseResult.setMsg("操作成功:学员班级调整完成");

+ 14 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -1601,7 +1601,7 @@ public class ExportServiceImpl implements ExportService {
 
 
     @Override
-    public void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+    public void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception {
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentOrderService.ExportQueryPage(params);
         long i = 1;
         Map<Integer, String> cooperationOrganMap = new HashMap<>();
@@ -1933,7 +1933,7 @@ public class ExportServiceImpl implements ExportService {
                                 subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).
                                 subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()).
                                 subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()));
-                    } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
+                    } else if (row.getGroupType().equals(OrderTypeEnum.REPAIR)) {
                         row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
                     }else if (row.getGroupType() == GroupType.OUTORDER) {
                         //销售收入
@@ -2028,7 +2028,7 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    public void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+    public void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception{
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentOrderService.ExportQueryPage(params);
         //获取机构费率
         Integer tenantId = (Integer) params.get("tenantId");
@@ -2211,7 +2211,7 @@ public class ExportServiceImpl implements ExportService {
                                 subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).
                                 subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()).
                                 subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()));
-                    } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
+                    } else if (row.getGroupType().equals(OrderTypeEnum.REPAIR)) {
                         row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
                     }else if (row.getGroupType() == GroupType.OUTORDER) {
                         //销售收入
@@ -2291,7 +2291,7 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    public void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+    public void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception {
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.ExportQueryPage(params);
 
         Map<Integer, String> cooperationOrganMap = new HashMap<>();
@@ -2817,7 +2817,7 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    public void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
+    public void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception{
         List<CourseScheduleEndDto> rows = courseScheduleService.endFindCourseSchedules(queryInfo).getRows();
         for (CourseScheduleEndDto row : rows) {
             row.setIsComplaints(StringUtils.equals(row.getIsComplaints(), "1") ? "有" : "无");
@@ -2831,7 +2831,7 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    public void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+    public void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws Exception{
         List<StudentVipPracticeExportDto> studentVipPracticeExportDtos = courseScheduleStudentPaymentDao.exportStudentVipPractice(organId, tenantId);
         if(studentVipPracticeExportDtos != null && studentVipPracticeExportDtos.size() > 0){
             List<Integer> studentIds = studentVipPracticeExportDtos.stream().map(e -> e.getUserId()).distinct().collect(Collectors.toList());
@@ -2903,21 +2903,21 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    public void queryStudentCourseInfo(String organId, Integer tenantId, String groupType, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
+    public void queryStudentCourseInfo(String organId, Integer tenantId, String groupType, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws Exception {
         List<ExportStudentCourseInfoDto> rows = courseScheduleStudentPaymentDao.queryStudentCourseInfo(organId,tenantId,groupType);
         HSSFWorkbook workbook = getHSSFWorkbook(rows,headColumns,exportEnum);
         exportManagerDownload(workbook,managerDownload);
     }
 
     @Override
-    public void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
+    public void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws Exception{
         List<ExportVipStudentCourseManageDto> rows = courseScheduleStudentPaymentDao.queryVipStudentCourseManage(organId,tenantId);
         HSSFWorkbook workbook = getHSSFWorkbook(rows,headColumns,exportEnum);
         exportManagerDownload(workbook,managerDownload);
     }
 
     @Override
-    public void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
+    public void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception{
         List<StudentStatisticsDto> rows = studentStatisticsService.queryStatisticsPage(queryInfo).getRows();
         HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学生姓名", "学员编号","联系电话", "声部", "学校", "年级", "学员状态", "未排课时", "总课时", "已完成课时",
                         "剩余课时","预收金额","第一次课时间","最近上课时间","指导老师编号","指导老师","乐团主管编号","乐团主管","声部课老师编号","声部课老师","近30天课耗","回访次数",
@@ -2934,7 +2934,7 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    public void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
+    public void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception{
         List<MusicGroupCourseScheduleDto> rows = classGroupService.queryMusicGroupCourseScheduleDetail(queryInfo).getRows();
         HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"课程编号", "课程开始时间", "课程结束时间", "课程名称","课程类型", "课程状态", "老师签到", "老师签退", "指导老师",
                         "出勤率", "达标率", "是否服务", "是否布置课后作业", "作业提交率", "结算状态", "是否点名", "备注"},
@@ -2947,7 +2947,7 @@ public class ExportServiceImpl implements ExportService {
         exportManagerDownload(workbook,managerDownload);
     }
 
-    public HSSFWorkbook getHSSFWorkbook(List rows, List<String> headColumns, ExportEnum exportEnum) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, IOException {
+    public HSSFWorkbook getHSSFWorkbook(List rows, List<String> headColumns, ExportEnum exportEnum) throws Exception{
         Map<String, String> headMap = getExportMap(new ExportDto(exportEnum, headColumns));
         String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
         String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
@@ -2984,7 +2984,8 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    public void exportMusicGroupCourseList(ManagerDownload managerDownload, List<MusicGroupExportDto> rows) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, IOException {
+    public void exportMusicGroupCourseList(ManagerDownload managerDownload, ExportUserAccountQueryInfo queryInfo) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, IOException {
+        List<MusicGroupExportDto> rows = musicGroupDao.exportMusicGroupCourseList(queryInfo);
         HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "乐团编号", "乐团名称", "乐团主管","出勤率", "达标率", "作业提交率", "成团人数", "新增人数",
                         "退团人数", "在读人数","流失率"},
                 new String[]{"organName", "musicGroupId", "musicGroupName",

+ 6 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java

@@ -9,10 +9,7 @@ import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
 import com.ym.mec.biz.dal.page.ExtraExercilseReplyQueryInfo;
 import com.ym.mec.biz.dal.page.StudentCourseHomeWorkQueryInfo;
-import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
-import com.ym.mec.biz.service.StudentServeService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
@@ -21,7 +18,6 @@ import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
-
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -43,10 +39,10 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 	@Autowired
 	private ExtracurricularExercisesDao extracurricularExercisesDao;
 	@Autowired
-	private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
-	@Autowired
 	private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
 	@Autowired
+	private StudentExtracurricularExercisesSituationService studentExtracurricularExercisesSituationService;
+	@Autowired
 	private SysMessageService sysMessageService;
 	@Autowired
 	private TeacherDao teacherDao;
@@ -94,6 +90,7 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 			throw new BizException("找不到学生作业记录");
 		}
 		CourseHomeworkStudentDetailDto detail=new CourseHomeworkStudentDetailDto();
+		detail.setStandardFlag(extraExerciseReply.getStandardFlag());
 		detail.setCourseHomeworkId(extraExerciseReply.getId());
 		detail.setClassGroupName(extraExerciseReply.getTitle() + "•" + extraExerciseReply.getStudentName());
 		detail.setContent(extraExerciseReply.getContent());
@@ -315,7 +312,7 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 			results.add(studentExtracurricularExercisesSituation);
 		}
 
-		studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString(),null);
+		studentExtracurricularExercisesSituationService.deleteByMonday(monDayDate.toString(),null);
 
 		BigDecimal currentPage=BigDecimal.ONE,
                 pageSize=new BigDecimal(10000),
@@ -323,7 +320,7 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
                 totalPage=total.divide(pageSize, BigDecimal.ROUND_UP);
         while (currentPage.compareTo(totalPage)<=0){
             List<StudentExtracurricularExercisesSituation> rows=results.stream().skip(pageSize.multiply(currentPage.subtract(BigDecimal.ONE)).longValue()).limit(pageSize.longValue()).collect(Collectors.toList());
-            studentExtracurricularExercisesSituationDao.batchInsert(rows);
+			studentExtracurricularExercisesSituationService.batchInsert(rows);
             currentPage=currentPage.add(BigDecimal.ONE);
         }
 	}

+ 31 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -116,6 +116,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
     private StudentDao studentDao;
     @Autowired
     private ActivityUserMapperService activityUserMapperService;
+    @Autowired
+    private StudentRegistrationService studentRegistrationService;
 
     @Override
     public BaseDAO<Long, MusicGroupPaymentCalender> getDAO() {
@@ -1003,14 +1005,21 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 //                    autoClassGroupAdjust(musicGroupStudentClassAdjust);
 //                }
             } else if (calender.getPaymentType() == SPAN_GROUP_CLASS_ADJUST) {
-                //删除和解冻班级,课程信息
+                List<MusicGroupPaymentCalenderStudentDetail> calenderStudentDetails = musicGroupPaymentCalenderStudentDetailDao.findByBatchNo(batchNo);
+                //将学员加入新乐团、扣除原乐团剩余课程余额、补充到现有乐团
+                Map<Integer, List<MusicGroupPaymentCalenderStudentDetail>> collect = calenderStudentDetails.stream().collect(Collectors.groupingBy(e -> e.getUserId()));
                 MusicGroupStudentClassAdjust adjust = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo);
                 List<Map> classGroupStudents = JSON.parseArray(adjust.getClassGroupStudents(), Map.class);
+                for (Map<Integer, String> classGroupStudent : classGroupStudents) {
+                    Integer classGroupId = classGroupStudent.keySet().iterator().next();
+                    studentRegistrationService.insertStudent(classGroupStudent.get(classGroupId), musicGroupDao.findByClassGroupId(classGroupId).getId(), musicGroup.getId(), collect);
+                }
+                //删除和解冻班级,课程信息
                 List<Integer> studentIds = JSON.parseArray(adjust.getStudentIds(), Integer.class);
                 List<Long> courseIds = JSON.parseArray(adjust.getSubLockCourseIds(), Long.class);
                 List<Long> allLockCourseIds = JSON.parseArray(adjust.getAllLockCourseIds(), Long.class);
                 //如果是跨团班级合并,添加学员
-                musicGroupPaymentCalenderDetailService.batchAdd(calender, musicGroupPaymentCalenderStudentDetailDao.findByBatchNo(batchNo));
+                musicGroupPaymentCalenderDetailService.batchAdd(calender, calenderStudentDetails);
                 classGroupService.spanGroupClassAdjustPass(adjust.getMasterClassGroupId()
                         , studentIds, courseIds, classGroupStudents, allLockCourseIds, batchNo, adjust.getMasterTotalPrice());
             }
@@ -1091,7 +1100,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         Date date = new Date();
         calenders.forEach(e -> {
-            if (e.getPaymentType() == ADD_STUDENT || e.getPaymentType() == SPAN_GROUP_CLASS_ADJUST) {
+            if (e.getPaymentType() == ADD_STUDENT) {
                 throw new BizException("{} 的缴费项目不允许撤回", e.getStatus().getDesc());
             }
             if (e.getStatus() != AUDITING) {
@@ -1287,9 +1296,25 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         if (musicGroupPaymentCalenderDetailList != null && musicGroupPaymentCalenderDetailList.size() > 0) {
             throw new BizException("操作失败:缴费项目中已存在学员");
         }
-        MusicGroupStudentClassAdjust byBatchNo = musicGroupStudentClassAdjustDao.findByBatchNo(calender.getBatchNo());
-        if (byBatchNo != null) {
-            throw new BizException("操作失败:班级调整的缴费项目不支持");
+        MusicGroupStudentClassAdjust adjust = musicGroupStudentClassAdjustDao.findByBatchNo(calender.getBatchNo());
+        if (!Objects.isNull(adjust)) {
+//            throw new BizException("操作失败:班级调整的缴费项目不支持");
+            List<Map> classGroupStudents = JSON.parseArray(adjust.getClassGroupStudents(), Map.class);
+            //删除班级关联的学员
+            List<Integer> classGroupIds = new ArrayList<>();
+            if (classGroupStudents != null && classGroupStudents.size() > 0) {
+                for (Map<Integer, String> classGroupStudent : classGroupStudents) {
+                    classGroupIds.addAll(classGroupStudent.keySet());
+                }
+            }
+            List<Long> allLockCourseIds = JSON.parseArray(adjust.getAllLockCourseIds(), Long.class);
+            //解冻课程
+            courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 0,null);
+            //解冻班级
+            classGroupIds.add(adjust.getMasterClassGroupId());
+            classGroupService.batchUpdateLockByClassGroupIds(classGroupIds, 0);
+            musicGroupStudentClassAdjustDao.delete(adjust.getId());
+            musicGroupPaymentCalenderStudentDetailDao.delByBatchNo(calender.getBatchNo());
         }
 
         if (calender.getPaymentType() == PaymentType.MUSIC_APPLY) {

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

@@ -166,6 +166,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
                 Student student = new Student();
                 student.setUserId(studentAttendance.getUserId());
                 student.setCurrentGradeNum(studentAttendance.getCurrentGradeNum());
+                student.setCurrentClass(studentAttendance.getCurrentClass());
                 student.setTenantId(studentAttendance.getTenantId());
                 students.add(student);
             }

+ 96 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java

@@ -9,12 +9,10 @@ import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.TeacherRemindTypeEnum;
-import com.ym.mec.biz.dal.page.StudentExercisesSituationQueryInfo;
-import com.ym.mec.biz.dal.page.StudentServiceDetailQueryInfo;
-import com.ym.mec.biz.dal.page.TeacherServeHomeworkQueryInfo;
-import com.ym.mec.biz.dal.page.TeacherServeQueryInfo;
+import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.service.StudentExtracurricularExercisesSituationService;
 import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
@@ -30,6 +28,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
 import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -70,6 +69,8 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 	private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
+	@Autowired
+	private CourseScheduleStatisticsDao courseScheduleStatisticsDao;
 
 	@Override
 	public BaseDAO<Long, StudentExtracurricularExercisesSituation> getDAO() {
@@ -410,13 +411,20 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 
 	@Override
 	public PageInfo<TeacherServeHomeworkPojo> queryTeacherServeHomeworkDetail1(TeacherServeHomeworkQueryInfo queryInfo) {
-		if(Objects.isNull(queryInfo.getMonth())){
-			throw new BizException("请指定课程时间");
-		}
+//		if(Objects.isNull(queryInfo.getMonth())){
+//			throw new BizException("请指定课程时间");
+//		}
 		PageInfo<TeacherServeHomeworkPojo> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 		//获取时间段内有服务指标的课程(课后作业)
-		Date firstDayOfMonth = DateUtil.getFirstDayOfMonth(queryInfo.getMonth());
-		Date lastDayOfMonth = DateUtil.getLastDayOfMonth(queryInfo.getMonth());
+		Date firstDayOfMonth;
+		Date lastDayOfMonth;
+		if(Objects.isNull(queryInfo.getStartTime())){
+			firstDayOfMonth = DateUtil.getFirstDayOfMonth(queryInfo.getMonth());
+			lastDayOfMonth = DateUtil.getLastDayOfMonth(queryInfo.getMonth());
+		}else {
+			firstDayOfMonth = queryInfo.getStartTime();
+			lastDayOfMonth = queryInfo.getEndTime();
+		}
 		List<Long> courseIds = studentExtracurricularExercisesSituationDao.queryCourseIdByClassDate(firstDayOfMonth,lastDayOfMonth,queryInfo.getTeacherId());
 		if(courseIds == null || courseIds.size() == 0){
 			return pageInfo;
@@ -585,4 +593,83 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 		}
 		return dataList;
 	}
+
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void batchInsert(List<StudentExtracurricularExercisesSituation> situations) {
+		if (CollectionUtils.isEmpty(situations)){
+			return;
+		}
+		studentExtracurricularExercisesSituationDao.batchInsert(situations);
+		String collect = situations.stream().map(e -> e.getCourseIds()).filter(e -> StringUtils.isNotEmpty(e)).collect(Collectors.joining(","));
+		if(StringUtils.isNotEmpty(collect)){
+			//更新课程服务指标
+			courseScheduleStatisticsDao.updateCourseService(collect,1);
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void deleteByMonday(String monday,List<Integer> studentIds) {
+		this.delSituations(studentExtracurricularExercisesSituationDao.selectByMonday(monday, studentIds));
+		studentExtracurricularExercisesSituationDao.deleteByMonday(monday,studentIds);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void deleteByStudent(Integer studentId, String monday) {
+		this.delSituations(studentExtracurricularExercisesSituationDao.selectByStudent(studentId, monday));
+		studentExtracurricularExercisesSituationDao.deleteByStudent(studentId,monday);
+	}
+
+	@Override
+	public TeacherExercisesServiceDto getStatistics(ExtraExercilseQueryInfo queryInfo) {
+		TeacherExercisesServiceDto serviceDto = new TeacherExercisesServiceDto();
+		List<Integer> teacherIds = new ArrayList();
+		teacherIds.add(queryInfo.getTeacherId());
+		List<StudentExtracurricularExercisesSituation> teacherServeWithDate =
+				studentExtracurricularExercisesSituationDao.findTeacherServeWithDate(queryInfo.getStartTime(), queryInfo.getEndTime(), teacherIds, null);
+		if(!CollectionUtils.isEmpty(teacherServeWithDate)){
+			//预计训练次数
+			double expectExercisesNum = teacherServeWithDate.stream().mapToDouble(e -> e.getExpectExercisesNum()).sum();
+			//实际训练次数
+			double actualExercisesNum = teacherServeWithDate.stream().mapToInt(e -> e.getActualExercisesNum()).sum();
+			//布置率
+			BigDecimal oneHundred = new BigDecimal(100);
+			if(expectExercisesNum > 0d){
+				BigDecimal submitRate = new BigDecimal(actualExercisesNum).divide(new BigDecimal(expectExercisesNum), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP).multiply(oneHundred).setScale(0);
+				serviceDto.setExpectExercisesRate(submitRate + "%");
+			}
+			//训练提交次数
+			double exercisesReplyNum = teacherServeWithDate.stream().mapToInt(e -> e.getExercisesReplyNum()).sum();
+			//提交率
+			if(actualExercisesNum > 0d){
+				BigDecimal submitRate = new BigDecimal(exercisesReplyNum).divide(new BigDecimal(actualExercisesNum), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP).multiply(oneHundred).setScale(0);
+				serviceDto.setExercisesReplyRate(submitRate + "%");
+			}
+			//点评次数
+			double exercisesMessageNum = teacherServeWithDate.stream().mapToInt(e -> e.getExercisesMessageNum()).sum();
+			//点评率
+			if(actualExercisesNum > 0d){
+				BigDecimal submitRate = new BigDecimal(exercisesMessageNum).divide(new BigDecimal(exercisesReplyNum), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP).multiply(oneHundred).setScale(0);
+				serviceDto.setExercisesMessageRate(submitRate + "%");
+			}
+		}
+		return serviceDto;
+	}
+
+	@Transactional(rollbackFor = Exception.class)
+	public void delSituations(List<StudentExtracurricularExercisesSituation> situations){
+		if (CollectionUtils.isEmpty(situations)){
+			return;
+		}
+//		List<Long> collect1 = situations.stream().map(e -> e.getId()).collect(Collectors.toList());
+//		studentExtracurricularExercisesSituationDao.batchDelete(collect1);
+		String collect = situations.stream().map(e -> e.getCourseIds()).filter(e -> StringUtils.isNotEmpty(e)).collect(Collectors.joining(","));
+		if(StringUtils.isNotEmpty(collect)){
+			//更新课程服务指标
+			courseScheduleStatisticsDao.updateCourseService(collect,0);
+		}
+	}
 }

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

@@ -70,7 +70,7 @@ public class StudentManageServiceImpl implements StudentManageService {
     @Autowired
     private StudentDao studentDao;
     @Autowired
-    private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
+    private StudentExtracurricularExercisesSituationService studentExtracurricularExercisesSituationService;
     @Autowired
     private MusicGroupQuitDao musicGroupQuitDao;
     @Autowired
@@ -752,7 +752,7 @@ public class StudentManageServiceImpl implements StudentManageService {
         if (new Integer(2).equals(student.getServiceTag())) {
             LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
             LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
-            studentExtracurricularExercisesSituationDao.deleteByStudent(student.getId(), monDayDate.toString());
+            studentExtracurricularExercisesSituationService.deleteByStudent(student.getId(), monDayDate.toString());
         }
         webFeignService.updateNickName(userId,student.getUsername());
         imFeignService.update(new ImUserModel(userId.toString(),student.getUsername(),sysUser1 == null ? null:sysUser1.getAvatar()));

+ 7 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java

@@ -417,7 +417,13 @@ public class StudentPaymentRouteOrderServiceImpl extends BaseServiceImpl<Long, S
                             sb.append("第" + rowNum).append("行数据导入失败:订单类型不可为空;");
                             continue valueIsNull;
                         } else {
-                            objectMap.put("type", row.get(s));
+                            for (OrderTypeEnum orderTypeEnum : OrderTypeEnum.values()) {
+                                if (orderTypeEnum.getMsg().equals(row.get(s).toString())) {
+                                    objectMap.put(columnValue, orderTypeEnum);
+                                    break;
+                                }
+                            }
+                            continue;
                         }
                     }
                     if (columnValue.equals("transNo")) {

+ 8 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java

@@ -20,6 +20,7 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.service.StudentExtracurricularExercisesSituationService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -85,6 +86,8 @@ public class StudentServeServiceImpl implements StudentServeService {
     @Autowired
     private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
     @Autowired
+    private StudentExtracurricularExercisesSituationService studentExtracurricularExercisesSituationService;
+    @Autowired
     private StudentServeService studentServeService;
     @Autowired
     private SysTenantConfigService sysTenantConfigService;
@@ -322,7 +325,7 @@ public class StudentServeServiceImpl implements StudentServeService {
             currentPage=currentPage.add(BigDecimal.ONE);
         }
 
-        studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString(), null);
+        studentExtracurricularExercisesSituationService.deleteByMonday(monDayDate.toString(), null);
 
         BigDecimal currentPage1=BigDecimal.ONE,
                 pageSize1=new BigDecimal(10000),
@@ -331,7 +334,7 @@ public class StudentServeServiceImpl implements StudentServeService {
 
         while (currentPage1.compareTo(totalPage1)<=0){
             List<StudentExtracurricularExercisesSituation> rows=results.stream().skip(pageSize1.multiply(currentPage1.subtract(BigDecimal.ONE)).longValue()).limit(pageSize1.longValue()).collect(Collectors.toList());
-            studentExtracurricularExercisesSituationDao.batchInsert(rows);
+            studentExtracurricularExercisesSituationService.batchInsert(rows);
             currentPage1=currentPage1.add(BigDecimal.ONE);
         }
     }
@@ -389,7 +392,7 @@ public class StudentServeServiceImpl implements StudentServeService {
 
         //节假日不产生服务指标
         if(weekInHoliday){
-            studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString(), studentIds);
+            studentExtracurricularExercisesSituationService.deleteByMonday(monDayDate.toString(), studentIds);
             return;
         }
         
@@ -660,7 +663,7 @@ public class StudentServeServiceImpl implements StudentServeService {
                 }
             }
 
-            studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString(), null);
+            studentExtracurricularExercisesSituationService.deleteByMonday(monDayDate.toString(), null);
 
             BigDecimal currentPage1=BigDecimal.ONE,
                     pageSize1=new BigDecimal(10000),
@@ -670,7 +673,7 @@ public class StudentServeServiceImpl implements StudentServeService {
             while (currentPage1.compareTo(totalPage1)<=0){
                 List<StudentExtracurricularExercisesSituation> rows=results.stream().skip(pageSize1.multiply(currentPage1.subtract(BigDecimal.ONE)).longValue()).limit(pageSize1.longValue()).collect(Collectors.toList());
 
-                studentExtracurricularExercisesSituationDao.batchInsert(rows);
+                studentExtracurricularExercisesSituationService.batchInsert(rows);
 
                 currentPage1=currentPage1.add(BigDecimal.ONE);
             }
@@ -1090,12 +1093,4 @@ public class StudentServeServiceImpl implements StudentServeService {
         }
         return result;
     }
-    
-
-    
-	private Date LocalDateToUdate(LocalDate localDate) {
-		ZoneId zone = ZoneId.systemDefault();
-		Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
-		return Date.from(instant);
-	}
 }

+ 45 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -13,6 +13,7 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -41,6 +42,7 @@ import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.dao.PracticeGroupDao;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.StudentStatisticsDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.SysMusicCompareRecordDao;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
@@ -56,6 +58,7 @@ import com.ym.mec.biz.dal.dto.Mapper;
 import com.ym.mec.biz.dal.dto.StatDto;
 import com.ym.mec.biz.dal.dto.StudentClassInfoDto;
 import com.ym.mec.biz.dal.dto.StudentCourseTimesDto;
+import com.ym.mec.biz.dal.dto.StudentOrganDto;
 import com.ym.mec.biz.dal.dto.StudentTeacherCourseDto;
 import com.ym.mec.biz.dal.entity.BaseStudentDto;
 import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
@@ -105,6 +108,8 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     @Autowired
     private StudentRegistrationDao studentRegistrationDao;
     @Autowired
+    private StudentStatisticsDao studentStatisticsDao;
+    @Autowired
     private MusicGroupDao musicGroupDao;
     @Autowired
     private PracticeGroupDao practiceGroupDao;
@@ -1036,11 +1041,12 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     public CloudStudyStudentDataDto getCloudStudyStudentOverView(List<Integer> organIds) {
         CloudStudyStudentDataDto result = new CloudStudyStudentDataDto();
         
-        IndexCloudStudyListDto dto = studentDao.getOrgansCloudTeacherStudent(organIds);
+        /*IndexCloudStudyListDto dto = studentDao.getOrgansCloudTeacherStudent(organIds);
         result.setTotalStudentNum(dto.getTotalStudentNum());
         result.setEffectiveVipStudentNum(dto.getEffectiveVipStudentNum());
         result.setWaitActivateVipStudentNum(dto.getWaitActivateVipStudentNum());
-        result.setVipStudentNum(cloudTeacherDao.getOrgansTotalVipStudentNum(organIds));
+        
+        result.setVipStudentNum(cloudTeacherDao.getOrgansTotalVipStudentNum(organIds));*/
 //        result.seteVipStudentNum(studentDao.getOrgansTotalEVipStudentNum(organIds));
         result.setCloudStudyUseStudentNum(studentDao.getOrgansTotalCloudStudyStudentNum(organIds));
         result.setCloudStudyTodayUseStudentNum(studentDao.getOrgansTodayTotalCloudStudyStudentNum(organIds));
@@ -1056,8 +1062,8 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
         Date startTime = cal.getTime();
         
-        result.setCloudStudyLivelyStudentNum(studentDao.getOrganTotalCloudStudyLivelyStudentNum(organIds, startTime, endTime));
-        result.setNewCloudStudyStudentNum(sysMusicCompareRecordDao.getOrgansTotalNewCloudStudyNum(organIds));
+        //result.setCloudStudyLivelyStudentNum(studentDao.getOrganTotalCloudStudyLivelyStudentNum(organIds, startTime, endTime));
+        //result.setNewCloudStudyStudentNum(sysMusicCompareRecordDao.getOrgansTotalNewCloudStudyNum(organIds));
 //        if(result.getVipStudentNum()>0&&result.getTotalStudentNum()>0){
 //            result.setVipStudentDuty(new BigDecimal(result.getVipStudentNum()).divide(new BigDecimal(result.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
 //        }
@@ -1092,10 +1098,43 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         for(Mapper mapper : organCloudTeacherStudentNum){
         	organCloudTeacherStudentNumMap.put(Integer.parseInt(mapper.getKey().toString()), Integer.parseInt(mapper.getValue().toString()));
         }
+
+        List<StudentOrganDto> set1 = studentRegistrationDao.queryEffectiveStudent(organIds);
+        List<StudentOrganDto> set2 = courseScheduleStudentPaymentDao.queryRemainCourseStudent(organIds);
+        List<StudentOrganDto> set3 = studentStatisticsDao.queryNoScheduleNumStudent(organIds);
+        
+        Map<Integer,Set<Integer>> map1= set1.stream().collect(Collectors.groupingBy(StudentOrganDto :: getOrganId, Collectors.mapping(StudentOrganDto :: getUserId, Collectors.toSet())));
+        Map<Integer,Set<Integer>> map2= set2.stream().collect(Collectors.groupingBy(StudentOrganDto :: getOrganId, Collectors.mapping(StudentOrganDto :: getUserId, Collectors.toSet())));
+        Map<Integer,Set<Integer>> map3= set3.stream().collect(Collectors.groupingBy(StudentOrganDto :: getOrganId, Collectors.mapping(StudentOrganDto :: getUserId, Collectors.toSet())));
+        
+        Map<Integer,Set<Integer>> organStudentMap = new HashMap<Integer, Set<Integer>>(map1);
+        Set<Integer> temp = null;
+        for(Entry<Integer, Set<Integer>> entry : map2.entrySet()){
+        	temp = organStudentMap.get(entry.getKey());
+        	if(temp == null){
+        		organStudentMap.put(entry.getKey(), entry.getValue());
+        	}else{
+        		temp.addAll(entry.getValue());
+        		organStudentMap.put(entry.getKey(), temp);
+        	}
+        }
+        for(Entry<Integer, Set<Integer>> entry : map3.entrySet()){
+        	temp = organStudentMap.get(entry.getKey());
+        	if(temp == null){
+        		organStudentMap.put(entry.getKey(), entry.getValue());
+        	}else{
+        		temp.addAll(entry.getValue());
+        		organStudentMap.put(entry.getKey(), temp);
+        	}
+        }
         
         for(IndexCloudStudyListDto ics : list){
-        	ics.setActiveStudentNum(organActiveNum.get(ics.getOrganId()));
-        	ics.setVipStudentNum(organCloudTeacherStudentNumMap.get(ics.getOrganId()));
+        	ics.setActiveStudentNum(organActiveNum.get(ics.getOrganId()) == null ? 0 : organActiveNum.get(ics.getOrganId()));
+        	ics.setVipStudentNum(organCloudTeacherStudentNumMap.get(ics.getOrganId()) == null ? 0 : organCloudTeacherStudentNumMap.get(ics.getOrganId()));
+        	ics.setEffectiveStudentNum(organStudentMap.get(ics.getOrganId()) == null ? 0 : organStudentMap.get(ics.getOrganId()).size());
+        	if(ics.getEffectiveStudentNum() > 0){
+        		ics.setVipStudentRate(ics.getVipStudentNum() * 100d / ics.getEffectiveStudentNum());
+        	}
         }
         
 		return list;

+ 9 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentStatisticsServiceImpl.java

@@ -1,6 +1,5 @@
 package com.ym.mec.biz.service.impl;
 
-import com.google.common.collect.Lists;
 import com.ym.mec.biz.dal.dao.StudentBasicInfoDao;
 import com.ym.mec.biz.dal.dao.StudentStatisticsDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
@@ -18,12 +17,8 @@ import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
 @Service
@@ -43,32 +38,22 @@ public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, Stude
 
 	@Override
 	public void updateStudentStatistics() {
-		//获取声部班老师
+		//更新声部班老师
 		studentBasicInfoDao.updateSubjectTeacher();
-		List<StudentStatistics> statisticsList = new ArrayList<>();
 		//更新乐团主管、指导老师
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsTeacherAndEdu());
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsTeacherAndEdu2());
-		//更新总课时数、已完成、剩余课时数、最近30天课耗、最近1年课耗
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsCourseNum());
+		studentStatisticsDao.updateTeacherAndEdu();
 		//更新未排课总数
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsNoCourseNum());
+		studentStatisticsDao.updateNoCourseNum();
 		//更新未开始价值总和
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsNotStartCourseFee());
+		studentStatisticsDao.updateNotStartCourseFee();
 		//更新未排课价值
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsNoCourseFee());
+		studentStatisticsDao.updateNoCourseFee();
 		//更新第一次课的时间\最近一次课时间
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsFirstAndLastCourseTime());
+		studentStatisticsDao.updateFirstAndLastCourseTime();
 		//更新进行中课程组数量
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsNormalGroupNum());
-		statisticsList.removeAll(Collections.singleton(null));
-		if(CollectionUtils.isNotEmpty(statisticsList)){
-//			studentStatisticsDao.clean();
-			List<List<StudentStatistics>> partition = Lists.partition(statisticsList, 1000);
-			for (List<StudentStatistics> studentStatistics : partition) {
-				studentStatisticsDao.batchUpdate(studentStatistics);
-			}
-		}
+		studentStatisticsDao.updateNormalGroupNum();
+		//更新总课时数、已完成、剩余课时数、最近30天课耗、最近1年课耗
+		studentStatisticsDao.updateCourseNum();
 	}
 
 	@Override

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

@@ -92,12 +92,13 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		String courseDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.ISO_EXPANDED_DATE_FORMAT);
 		if(noQualified.size() > 0){
 			List<Integer> studentIds = noQualified.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+			studentAttendanceDao.updateQualified(courseScheduleId,studentIds,0);
 			this.sendMessage(studentIds,type,courseDate,MessageTypeEnum.SMS_STANDARD_NO_QUALIFIED);
 		}
 		List<StudentStandardDto> qualified = studentStandardDtos.stream().filter(e -> e.getQualifiedFlag() == 1).collect(Collectors.toList());
 		if(qualified.size() > 0){
 			List<Integer> studentIds = qualified.stream().map(e -> e.getUserId()).collect(Collectors.toList());
-			studentAttendanceDao.updateQualified(courseScheduleId,studentIds);
+			studentAttendanceDao.updateQualified(courseScheduleId,studentIds,1);
 			this.sendMessage(studentIds,type,courseDate,MessageTypeEnum.SMS_STANDARD_QUALIFIED);
 		}
 		//标记当前课程为已评价

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

@@ -203,6 +203,7 @@
             su.avatar_,
             cssp.be_merged_,
             st.current_grade_num_,
+            st.current_class_,
             IF(sa.status_ IS NULL,'TRUANT',sa.status_) status_
         FROM
             course_schedule_student_payment cssp

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

@@ -285,13 +285,15 @@
 		<result property="classDate" column="class_date_"/>
 		<result property="classStartDate" column="start_class_time_"/>
 		<result property="classEndDate" column="end_class_time_"/>
+		<result property="musicScoreId" column="music_score_id_"/>
 	</resultMap>
     <select id="queryHomePage" resultMap="WebCourseHomeworkListDtoMap">
 		SELECT ch.id_,cs.id_ course_schedule_id_,cs.name_ course_schedule_name_,
 		cs.class_date_,cs.start_class_time_,cs.end_class_time_,cs.organ_id_,o.name_ organ_name_,
 		mg.id_ group_id_,mg.name_ group_name_,ch.create_time_,cs.actual_teacher_id_,
-		su.real_name_ actual_teacher_name_,ch.completed_num_,ch.expect_num_,cs.group_type_
+		su.real_name_ actual_teacher_name_,ch.completed_num_,ch.expect_num_,cs.group_type_,sch.music_score_id_
 		FROM course_homework ch
+		LEFT JOIN student_course_homework sch ON ch.id_ = sch.course_homework_id_
 		LEFT JOIN course_schedule cs ON cs.id_ = ch.course_schedule_id_
 		LEFT JOIN organization o ON o.id_ = cs.organ_id_
 		<if test="groupType == 'MUSIC'">
@@ -305,6 +307,7 @@
 		</if>
 		LEFT JOIN sys_user su ON su.id_ = cs.actual_teacher_id_
 		<include refid="queryHomePageSql"/>
+		GROUP BY ch.id_
 		ORDER BY ch.create_time_ DESC,ch.id_ DESC
 		<include refid="global.limit"/>
 	</select>

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleStatisticsMapper.xml

@@ -118,6 +118,9 @@
 		</set> WHERE course_schedule_id_ = #{item.courseScheduleId}
 		</foreach>
 	</update>
+	<update id="updateCourseService">
+		UPDATE course_schedule_statistics SET service_flag_ = #{serviceFlag} WHERE FIND_IN_SET(course_schedule_id_,#{courseIds})
+	</update>
 
 	<!-- 根据主键删除一条记录 -->
 	<delete id="delete" >

+ 11 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -1071,4 +1071,15 @@
 		GROUP BY cssp.`user_id_` ,vg.`vip_group_category_id_`
 		) d on b.user_id_ = d.user_id_ and a.vip_group_category_id_ = d.vip_group_category_id_
 	</select>
+	
+	<select id="queryRemainCourseStudent" resultType="com.ym.mec.biz.dal.dto.StudentOrganDto">
+		SELECT cssp.user_id_ userId, u.organ_id_ organId FROM `course_schedule_student_payment` cssp LEFT JOIN `course_schedule` cs on cssp.`course_schedule_id_` = cs.`id_`
+		LEFT JOIN `sys_user` u on u.`id_` = cssp.`user_id_`
+		WHERE cs.`status_` = 'NOT_START'
+		AND u.organ_id_ IN
+        <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+        group by cssp.user_id_ , u.organ_id_
+	</select>
 </mapper>

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

@@ -22,6 +22,7 @@
 		<result column="update_time_" property="updateTime" />
 		<result column="organ_name_" property="organName" />
 		<result column="tenant_id_" property="tenantId" />
+		<result column="music_score_id_" property="musicScoreId" />
 	</resultMap>
 
 	<sql id="queryPageCondition">
@@ -108,11 +109,13 @@
 	
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="ExtracurricularExercises" parameterType="map">
-		SELECT ee.*,u.real_name_ username_,o.name_ organ_name_
-		FROM extracurricular_exercises ee left join sys_user u on ee.teacher_id_ = u.id_
-		left join teacher t on t.id_ = ee.teacher_id_
-		left join organization o on o.id_ = t.organ_id_
+		SELECT ee.*,u.real_name_ username_,o.name_ organ_name_,eer.music_score_id_
+		FROM extracurricular_exercises ee LEFT JOIN sys_user u ON ee.teacher_id_ = u.id_
+		LEFT JOIN teacher t ON t.id_ = ee.teacher_id_
+		LEFT JOIN organization o ON o.id_ = t.organ_id_
+		LEFT JOIN extracurricular_exercises_reply eer ON ee.id_ = eer.extracurricular_exercises_id_
 		<include refid="queryPageCondition"/>
+		GROUP BY ee.id_
 		ORDER BY id_ <include refid="global.limit"/>
 	</select>
 	
@@ -225,6 +228,9 @@
 			<if test="createTime!=null">
 				AND DATE_FORMAT(create_time_, '%Y-%m') = DATE_FORMAT(#{createTime}, '%Y-%m')
 			</if>
+			<if test="startTime != null and startTime != ''">
+				AND DATE_FORMAT(#{createTime}, '%Y-%m-%d') BETWEEN #{startTime} AND #{endTime}
+			</if>
 		</where>
 		UNION ALL
 		SELECT ch.id_,ch.create_time_,'HOMEWORK' type_ FROM course_homework ch
@@ -255,6 +261,9 @@
 			<if test="createTime!=null">
 				AND DATE_FORMAT(create_time_, '%Y-%m') = DATE_FORMAT(#{createTime}, '%Y-%m')
 			</if>
+			<if test="startTime != null and startTime != ''">
+				AND DATE_FORMAT(#{createTime}, '%Y-%m-%d') BETWEEN #{startTime} AND #{endTime}
+			</if>
 		</where>
 		UNION ALL
 		SELECT ch.id_,ch.create_time_,'HOMEWORK' type_ FROM course_homework ch

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

@@ -25,7 +25,7 @@
 		<result column="music_score_id_" property="musicScoreId" />
 		<result column="music_score_content_" property="musicScoreContent" />
 		<result column="tenant_id_" property="tenantId" />
-		<result column="standard_flag_" property="standardFlag" />
+		<result column="standard_flag_" property="standardFlag" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<association property="extracurricularExercises" columnPrefix="ee_" resultMap="com.ym.mec.biz.dal.dao.ExtracurricularExercisesDao.ExtracurricularExercises"/>
 	</resultMap>
 
@@ -108,7 +108,7 @@
 		<foreach collection="replies" item="reply" separator=",">
 			(#{reply.extracurricularExercisesId},#{reply.userId},#{reply.attachments},NOW(),NOW(),
 			 #{reply.remark},#{reply.status},#{reply.isReplied},#{reply.isView},#{reply.isRepliedTimely},
-			 #{reply.musicScoreId},#{reply.musicScoreContent},#{replay.tenantId},#{replay.standardFlag})
+			 #{reply.musicScoreId},#{reply.musicScoreContent},#{replay.tenantId},#{replay.standardFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
 		</foreach>
 	</insert>
 
@@ -117,7 +117,7 @@
 		UPDATE extracurricular_exercises_reply
 		<set>
 			<if test="standardFlag != null">
-				standard_flag_ = #{standardFlag},
+				standard_flag_ = #{standardFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 			</if>
 			<if test="musicScoreId != null">
 				music_score_id_ = #{musicScoreId},
@@ -217,6 +217,7 @@
 			ee.teacher_id_,
 			eer.music_score_id_,
 			eer.music_score_content_,
+			eer.standard_flag_,
 			su.username_ student_name_
 		FROM
 			extracurricular_exercises_reply eer
@@ -528,7 +529,8 @@
 			ee.create_time_ createTime,
 			COUNT( eer.user_id_ ) exceptStudentNum,
 			SUM( eer.status_ ) submitStudentNum,
-			SUM( eer.is_replied_ ) repliedStudentNum
+			SUM( eer.is_replied_ ) repliedStudentNum,
+			eer.music_score_id_ musicScoreId
 		FROM
 			extracurricular_exercises ee
 			LEFT JOIN sys_user su ON ee.teacher_id_ = su.id_

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

@@ -1096,32 +1096,44 @@
     </resultMap>
     <select id="exportMusicGroupCourseList" resultMap="MusicGroupExportDto">
         SELECT o.name_ organ_name_,mg.id_ music_group_id_,mg.name_ music_group_name_,su.real_name_ educational_teacher_name_,
-        CONCAT(TRUNCATE((SUM(css.attendance_num_) + SUM(css.late_num_)) / SUM(css.course_student_total_num_) * 100,2),'%') attendance_rate_,
-        CONCAT(TRUNCATE(SUM(css.standard_num_) / SUM(css.course_student_total_num_) * 100,2),'%') standard_rate_,
-        CONCAT(TRUNCATE(SUM(css.homework_commit_num_) / SUM(CASE WHEN css.homework_flag_ = 1 THEN css.course_student_total_num_ ELSE 0 END) * 100,2),'%') homework_commit_rate_,
-        mg.group_member_num_,
-        COUNT(DISTINCT CASE WHEN sr.original_flag_ = 0 AND sr.music_group_status_ = 'NORMAL' THEN sr.id_ ELSE NULL END) add_stu_num_,
-        COUNT(DISTINCT CASE WHEN mgq.status_ = 'APPROVED' AND sr1.music_group_status_ = 'QUIT' THEN mgq.apply_user_id_ ELSE NULL END) quit_stu_num_,
-        COUNT(DISTINCT CASE WHEN sr1.music_group_status_ = 'NORMAL' THEN sr1.id_ ELSE NULL END) normal_num_,
-        COUNT(DISTINCT CASE WHEN sr1.music_group_status_ != 'APPLY' THEN sr1.id_ ELSE NULL END) total_num_,
-        CONCAT(TRUNCATE(COUNT(DISTINCT CASE WHEN mgq.status_ = 'APPROVED' AND sr1.music_group_status_ = 'QUIT' THEN mgq.apply_user_id_ ELSE NULL END) /
-        COUNT(DISTINCT CASE WHEN sr1.music_group_status_ != 'APPLY' THEN sr1.id_ ELSE NULL END) * 100,2),'%') lost_rate_
+        CONCAT(TRUNCATE((css.attendance_num_ + css.late_num_) / css.course_student_total_num_ * 100,2),'%') attendance_rate_,
+        CONCAT(TRUNCATE(css.standard_num_ / css.course_student_total_num_ * 100,2),'%') standard_rate_,
+        CONCAT(TRUNCATE(css.homework_commit_num_ / css.homework_num_ * 100,2),'%') homework_commit_rate_,
+        mg.group_member_num_,sr3.add_stu_num_,sr1.quit_stu_num_,sr2.normal_num_,sr2.total_num_,
+        CONCAT(TRUNCATE(sr1.quit_stu_num_ /sr2.total_num_ * 100,2),'%') lost_rate_
         FROM music_group mg
-        LEFT JOIN course_schedule_statistics css ON mg.id_ = css.music_group_id_ AND css.course_status_ = 'OVER'
+        LEFT JOIN (SELECT music_group_id_,SUM(attendance_num_) attendance_num_,SUM(late_num_) late_num_,
+        SUM(course_student_total_num_) course_student_total_num_,SUM(standard_num_) standard_num_,SUM(homework_commit_num_) homework_commit_num_,
+        SUM(CASE WHEN homework_flag_ = 1 THEN course_student_total_num_ ELSE 0 END) homework_num_
+        FROM course_schedule_statistics
+        WHERE course_status_ = 'OVER'
         <if test="queryInfo.startTime != null and queryInfo.startTime != ''">
-            AND css.class_date_ BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
+            AND class_date_ BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
         </if>
+        GROUP BY music_group_id_) css ON css.music_group_id_ = mg.id_
         LEFT JOIN organization o ON o.id_ = mg.organ_id_
         LEFT JOIN sys_user su ON su.id_ = mg.educational_teacher_id_
-        LEFT JOIN student_registration sr1 ON sr1.music_group_id_ = mg.id_
-        LEFT JOIN student_registration sr ON sr.music_group_id_ = mg.id_
+        LEFT JOIN (SELECT sr.music_group_id_,COUNT(DISTINCT mgq.apply_user_id_) quit_stu_num_
+        FROM student_registration sr
+        LEFT JOIN music_group_quit mgq ON mgq.music_group_id_ = sr.music_group_id_
+        WHERE sr.music_group_status_ = 'QUIT' AND mgq.status_ = 'APPROVED'
         <if test="queryInfo.startTime != null and queryInfo.startTime != ''">
-            AND DATE_FORMAT(sr.create_time_,"%Y-%m-%d") BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
+            AND DATE_FORMAT(mgq.create_time_,"%Y-%m-%d") BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
         </if>
-        LEFT JOIN music_group_quit mgq ON mgq.music_group_id_ = mg.id_
+        GROUP BY sr.music_group_id_) sr1 ON sr1.music_group_id_ = mg.id_
+        LEFT JOIN (SELECT sr.music_group_id_,
+        COUNT(DISTINCT CASE WHEN sr.music_group_status_ = 'NORMAL' THEN sr.id_ ELSE NULL END) normal_num_,
+        COUNT(DISTINCT sr.id_) total_num_
+        FROM student_registration sr
+        WHERE sr.music_group_status_ != 'APPLY'
+        GROUP BY sr.music_group_id_)sr2 ON sr2.music_group_id_ = mg.id_
+        LEFT JOIN (SELECT music_group_id_,COUNT(DISTINCT CASE WHEN original_flag_ = 0 THEN id_ ELSE NULL END) add_stu_num_
+        FROM student_registration
+        WHERE music_group_status_ = 'NORMAL'
         <if test="queryInfo.startTime != null and queryInfo.startTime != ''">
-            AND DATE_FORMAT(mgq.create_time_,"%Y-%m-%d") BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
+            AND DATE_FORMAT(create_time_,"%Y-%m-%d") BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
         </if>
+        GROUP BY music_group_id_) sr3 ON sr3.music_group_id_ = mg.id_
         <where>
             mg.status_ = 'PROGRESS'
             <if test="queryInfo.organId != null and queryInfo.organId != ''">
@@ -1131,4 +1143,14 @@
         GROUP BY mg.id_
         ORDER BY o.id_
     </select>
+    <select id="countMusicGroupCourseList" resultType="Integer">
+        SELECT COUNT(DISTINCT mg.id_)
+        FROM music_group mg
+        <where>
+            mg.status_ = 'PROGRESS'
+            <if test="queryInfo.organId != null and queryInfo.organId != ''">
+                AND FIND_IN_SET(mg.organ_id_,#{queryInfo.organId})
+            </if>
+        </where>
+    </select>
 </mapper>

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

@@ -144,7 +144,7 @@
         UPDATE student_attendance SET leave_visit_flag_ = 1 WHERE user_id_ = #{userId} AND status_ = 'LEAVE'
     </update>
     <update id="updateQualified">
-        UPDATE student_attendance SET qualified_flag_ = 1 WHERE course_schedule_id_ = #{courseScheduleId} AND user_id_ IN
+        UPDATE student_attendance SET qualified_flag_ = #{qualifiedFlag} WHERE course_schedule_id_ = #{courseScheduleId} AND user_id_ IN
         <foreach collection="studentIds" separator="," item="userId" open="(" close=")">
             #{userId}
         </foreach>
@@ -187,6 +187,7 @@
         <result property="subjectId" column="subject_id_"/>
         <result property="subjectName" column="subject_name_"/>
         <result property="currentGradeNum" column="current_grade_num_"/>
+        <result property="currentClass" column="current_class_"/>
         <result property="avatar" column="avatar_"/>
         <result property="phone" column="phone_"/>
         <result property="beMerged" column="be_merged_"/>

+ 3 - 13
mec-biz/src/main/resources/config/mybatis/StudentBasicInfoMapper.xml

@@ -100,17 +100,7 @@
     <select id="getMaxId" resultType="java.lang.Integer">
 		SELECT MAX(id_) FROM student_basic_info
 	</select>
-	<select id="updateSubjectTeacher" resultType="int">
-		UPDATE (
-		SELECT cm.user_id_,cgtm.user_id_ teacher_id_ FROM class_group_teacher_mapper cgtm
-		LEFT JOIN (SELECT cgsm.user_id_,MAX(cgtm.id_) id_ FROM class_group cg
-		LEFT JOIN class_group_student_mapper cgsm ON cgsm.class_group_id_ = cg.id_
-		LEFT JOIN class_group_teacher_mapper cgtm ON cgtm.class_group_id_ = cg.id_
-		WHERE cg.type_ = 'NORMAL' AND cgsm.status_ = 'NORMAL' AND cg.del_flag_ = 0 AND cgtm.teacher_role_ = 'BISHOP'
-		GROUP BY cgsm.user_id_) cm ON cm.id_ = cgtm.id_
-		) st
-		LEFT JOIN student_basic_info sbi ON st.user_id_ = sbi.user_id_
-			LEFT JOIN sys_user su ON su.id_ = st.teacher_id_
-			SET sbi.subject_teacher_id_ = st.teacher_id_,sbi.subject_teacher_name_ = su.real_name_;
-	</select>
+	<update id="updateSubjectTeacher">
+		SELECT updateSubjectTeacher()
+	</update>
 </mapper>

+ 11 - 6
mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml

@@ -28,7 +28,7 @@
         <result column="music_score_id_" property="musicScoreId"/>
         <result column="music_score_content_" property="musicScoreContent"/>
         <result column="tenant_id_" property="tenantId"/>
-        <result column="standard_flag_" property="standardFlag"/>
+        <result column="standard_flag_" property="standardFlag" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
 
     <resultMap type="com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto" id="CourseHomeworkStudentDetailDto">
@@ -47,6 +47,7 @@
         <result column="music_score_content_" property="musicScoreContent"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="is_replied_" property="isReplied" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="standard_flag_" property="standardFlag" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
 
     <resultMap type="com.ym.mec.biz.dal.entity.StudentCourseHomework" id="StudentCourseHomeworkFull"
@@ -77,7 +78,8 @@
          remark_,status_,is_replied_,is_view_,is_replied_timely_,music_score_id_,music_score_content_,tenant_id_,standard_flag_)
         VALUES(#{userId},#{courseScheduleId},#{courseHomeworkId},#{attachments},#{score},now(),now(),#{remark},
                #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{isReplied,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-               #{isView,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{isRepliedTimely},#{musicScoreId},#{musicScoreContent},#{tenantId},#{standardFlag})
+               #{isView,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{isRepliedTimely},
+               #{musicScoreId},#{musicScoreContent},#{tenantId},#{standardFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
     </insert>
 
     <insert id="batchInsertStudentCourseHomeworkRecord" parameterType="java.util.List" useGeneratedKeys="true"
@@ -91,7 +93,8 @@
             #{homework.score},now(),now(),#{homework.remark},#{homework.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{homework.isReplied,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{homework.isView,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{homework.isRepliedTimely},
-            #{homework.musicScoreId},#{homework.musicScoreContent},#{homework.tenantId},#{homework.standardFlag})
+            #{homework.musicScoreId},#{homework.musicScoreContent},#{homework.tenantId},
+            #{homework.standardFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
         </foreach>
     </insert>
 
@@ -100,7 +103,7 @@
         UPDATE student_course_homework
         <set>
             <if test="standardFlag != null">
-                standard_flag_ = #{standardFlag},
+                standard_flag_ = #{standardFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
             <if test="musicScoreId != null">
                 music_score_id_ = #{musicScoreId},
@@ -242,7 +245,8 @@
                sch.score_,
                sch.status_,
                sch.is_replied_,
-               sch.course_schedule_id_
+               sch.course_schedule_id_,
+               sch.standard_flag_
         FROM course_homework ch
                  LEFT JOIN student_course_homework sch ON ch.id_ = sch.course_homework_id_
                  LEFT JOIN music_group mg ON ch.music_group_id_ = mg.id_
@@ -536,7 +540,8 @@
             su.avatar_ teacherAvatar,
             COUNT( sch.user_id_ ) exceptStudentNum,
             SUM( sch.status_ ) submitStudentNum,
-            SUM( sch.is_replied_ ) repliedStudentNum
+            SUM( sch.is_replied_ ) repliedStudentNum,
+            sch.music_score_id_ musicScoreId
         FROM
             course_homework ch
             LEFT JOIN music_group mg ON mg.id_ = ch.music_group_id_

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

@@ -199,12 +199,34 @@
 			</foreach>
 		</if>
 	</delete>
+	<select id="selectByMonday" resultMap="StudentExtracurricularExercisesSituation">
+		SELECT id_,course_ids_ FROM student_extracurricular_exercises_situation_ WHERE monday_ = #{monday}
+		<if test="studentIds!=null and studentIds.size()>0">
+			AND student_id_ IN
+			<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+				#{studentId}
+			</foreach>
+		</if>
+	</select>
 	<delete id="deleteByStudent">
 		DELETE FROM student_extracurricular_exercises_situation_ WHERE student_id_ = #{studentId}
 		<if test="monday!=null and monday!=''">
 			AND monday_=#{monday}
 		</if>
 	</delete>
+	<delete id="batchDelete">
+		DELETE FROM student_extracurricular_exercises_situation_ WHERE id_ IN
+		<foreach collection="situationIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+	</delete>
+
+	<select id="selectByStudent" resultMap="StudentExtracurricularExercisesSituation">
+		SELECT id_,course_ids_ FROM student_extracurricular_exercises_situation_ WHERE student_id_ = #{studentId}
+		<if test="monday!=null and monday!=''">
+			AND monday_=#{monday}
+		</if>
+	</select>
 
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="StudentExtracurricularExercisesSituation" parameterType="map">

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

@@ -254,6 +254,9 @@
                 <if test="item.currentGradeNum != null">
                     current_grade_num_=#{item.currentGradeNum},
                 </if>
+                <if test="item.currentClass != null and item.currentClass != ''">
+                    current_class_ = #{item.currentClass},
+                </if>
                 <if test="item.serviceTag != null">
                     service_tag_ = #{item.serviceTag},
                 </if>
@@ -935,7 +938,7 @@
         LEFT JOIN sys_user su ON smcr.user_id_=su.id_
         LEFT JOIN student stu ON smcr.user_id_=stu.user_id_
         WHERE su.del_flag_=0 AND stu.user_id_ IS NOT NULL
-        AND DATE(smcr.create_time_) = CURDATE()
+        AND smcr.create_time_ > date_sub(curdate(),INTERVAL 0 day)
             AND su.organ_id_ IN
             <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
                 #{organId}

+ 11 - 0
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -1822,4 +1822,15 @@
     	where s.service_tag_ = 1 AND (s.service_tag_update_time_ IS NULL OR s.service_tag_update_time_&lt;#{nextMonday})
     	and sr.music_group_status_ = 'NORMAL' AND mg.status_ = 'PROGRESS' and sr.tenant_id_ = #{tenantId}
     </select>
+    
+    <select id="queryEffectiveStudent" resultType="com.ym.mec.biz.dal.dto.StudentOrganDto">
+    	SELECT sr.user_id_ userId, u.organ_id_ organId FROM `student_registration` sr LEFT JOIN `music_group` mg on sr.`music_group_id_` = mg.`id_`
+		LEFT JOIN `sys_user` u on u.`id_` = sr.`user_id_`
+		WHERE mg.`status_` = 'PROGRESS' AND sr.`music_group_status_` = 'NORMAL'
+		AND u.organ_id_ IN
+        <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+        group by sr.user_id_ , u.organ_id_
+    </select>
 </mapper>

+ 44 - 237
mec-biz/src/main/resources/config/mybatis/StudentStatisticsMapper.xml

@@ -188,6 +188,27 @@
 	<select id="queryPage" resultMap="StudentStatistics" parameterType="map">
 		SELECT * FROM student_statistics ORDER BY id_ <include refid="global.limit"/>
 	</select>
+	<update id="updateTeacherAndEdu">
+		SELECT updateTeacherAndEdu()
+	</update>
+	<update id="updateCourseNum">
+		SELECT updateCourseNum()
+	</update>
+	<update id="updateNoCourseNum">
+		SELECT updateNoCourseNum()
+	</update>
+	<update id="updateNotStartCourseFee">
+		SELECT updateNotStartCourseFee()
+	</update>
+	<update id="updateNoCourseFee">
+		SELECT updateNoCourseFee()
+	</update>
+	<update id="updateFirstAndLastCourseTime">
+		SELECT updateFirstAndLastCourseTime()
+	</update>
+	<update id="updateNormalGroupNum">
+		SELECT updateNormalGroupNum()
+	</update>
 	
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
@@ -263,12 +284,24 @@
 			<if test="courseConsumerError != null and courseConsumerError == false">
 				AND ss.lately_course_consumer_ >= 4
 			</if>
+			<if test="wornFlag != null and wornFlag == true">
+				AND (ss.no_schedule_num_ + ss.sub_course_num_) &lt; 4
+			</if>
+			<if test="wornFlag != null and wornFlag == false">
+				AND (ss.no_schedule_num_ + ss.sub_course_num_) > 3
+			</if>
 			<if test="firstCourseStartTime != null">
 				AND ss.first_course_time_ >= #{firstCourseStartTime}
 			</if>
 			<if test="firstCourseEndTime != null">
 				AND ss.first_course_time_ &lt;= #{firstCourseEndTime}
 			</if>
+			<if test="subCourseMinNum != null">
+				AND (ss.no_schedule_num_ + ss.sub_course_num_) >= #{subCourseMinNum}
+			</if>
+			<if test="subCourseMaxNum != null">
+				AND (ss.no_schedule_num_ + ss.sub_course_num_) &lt;= #{subCourseMaxNum}
+			</if>
 			<if test="groupType != null and groupType != ''">
 				AND ss.group_type_ = #{groupType}
 			</if>
@@ -427,243 +460,6 @@
 	<select id="queryDirectorList" resultType="java.lang.Integer">
 		SELECT DISTINCT music_director_id_ FROM student_statistics WHERE group_type_ = #{groupType} AND music_director_id_ IS NOT NULL
 	</select>
-	<select id="queryStatisticsTeacherAndEdu" resultMap="com.ym.mec.biz.dal.dao.StudentStatisticsDao.StudentStatistics">
-		SELECT et.user_id_,et.actual_teacher_id_ teacher_id_,su.real_name_ teacher_name_,et.educational_teacher_id_ music_director_id_,su1.real_name_ music_director_name_,'PRACTICE' group_type_
-		FROM ( SELECT cs.actual_teacher_id_,ct.user_id_,pg.educational_teacher_id_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN (SELECT cssp.user_id_,MAX(cs.class_date_) class_date_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		WHERE cs.status_ = 'OVER' AND cssp.group_type_ = 'PRACTICE'
-		GROUP BY cssp.user_id_) ct ON ct.user_id_ = cssp.user_id_
-		LEFT JOIN practice_group pg ON pg.id_ = cssp.music_group_id_
-		WHERE cs.class_date_ = ct.class_date_ AND cs.status_ = 'OVER' AND cssp.group_type_ = 'PRACTICE'
-		GROUP BY ct.user_id_) et
-		LEFT JOIN sys_user su ON su.id_ = et.actual_teacher_id_
-		LEFT JOIN sys_user su1 ON su1.id_ = et.educational_teacher_id_
-		GROUP BY et.user_id_
-		UNION ALL
-		SELECT et.user_id_,et.actual_teacher_id_ teacher_id_,su.real_name_ teacher_name_,et.educational_teacher_id_ music_director_id_,su1.real_name_ music_director_name_,'THEORY' group_type_
-		FROM (SELECT cs.actual_teacher_id_,ct.user_id_,vg.educational_teacher_id_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN (SELECT cssp.user_id_,MAX(cs.class_date_) class_date_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ = '乐理课' AND cs.status_ = 'OVER' AND cssp.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_) ct ON ct.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ = '乐理课' AND cs.class_date_ = ct.class_date_ AND cs.status_ = 'OVER' AND cssp.group_type_ = 'VIP'
-		GROUP BY ct.user_id_) et
-		LEFT JOIN sys_user su ON su.id_ = et.actual_teacher_id_
-		LEFT JOIN sys_user su1 ON su1.id_ = et.educational_teacher_id_
-		GROUP BY et.user_id_
-		UNION ALL
-		SELECT et.user_id_,et.actual_teacher_id_ teacher_id_,su.real_name_ teacher_name_,et.educational_teacher_id_ music_director_id_,su1.real_name_ music_director_name_,'VIP' group_type_
-		FROM (SELECT cs.actual_teacher_id_,ct.user_id_,vg.educational_teacher_id_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN (SELECT cssp.user_id_,MAX(cs.class_date_) class_date_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ != '乐理课' AND cs.status_ = 'OVER' AND cssp.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_) ct ON ct.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ != '乐理课' AND cs.class_date_ = ct.class_date_ AND cs.status_ = 'OVER' AND cssp.group_type_ = 'VIP'
-		GROUP BY ct.user_id_) et
-		LEFT JOIN sys_user su ON su.id_ = et.actual_teacher_id_
-		LEFT JOIN sys_user su1 ON su1.id_ = et.educational_teacher_id_
-		GROUP BY et.user_id_
-	</select>
-	<select id="queryStatisticsTeacherAndEdu2" resultMap="StudentStatistics">
-		SELECT ss.user_id_,pg.user_id_ teacher_id_,su.real_name_ teacher_name_,'' music_director_id_,'' music_director_name_,'PRACTICE' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN practice_group pg ON pg.id_ = cssp.music_group_id_
-		LEFT JOIN sys_user su ON su.id_ = pg.user_id_
-		WHERE cssp.group_type_ = 'PRACTICE' AND pg.group_status_ = 'NORMAL' AND ss.teacher_id_ IS NULL
-		UNION ALL
-		SELECT ss.user_id_,'' teacher_id_,'' teacher_name_,pg.educational_teacher_id_ music_director_id_,su.real_name_ music_director_name_,'PRACTICE' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN practice_group pg ON pg.id_ = cssp.music_group_id_
-		LEFT JOIN sys_user su ON su.id_ = pg.educational_teacher_id_
-		WHERE cssp.group_type_ = 'PRACTICE' AND pg.group_status_ = 'NORMAL' AND ss.music_director_id_ IS NULL
-		UNION ALL
-		SELECT ss.user_id_,vg.user_id_ teacher_id_,su.real_name_ teacher_name_,'' music_director_id_,'' music_director_name_,'THEORY' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		LEFT JOIN sys_user su ON su.id_ = vg.user_id_
-		WHERE vgc.name_ = '乐理课' AND cssp.group_type_ = 'THEORY' AND vg.group_status_ = 2 AND ss.teacher_id_ IS NULL
-		UNION ALL
-		SELECT ss.user_id_,'' teacher_id_,'' teacher_name_,vg.educational_teacher_id_ music_director_id_,su.real_name_ music_director_name_,'THEORY' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		LEFT JOIN sys_user su ON su.id_ = vg.educational_teacher_id_
-		WHERE vgc.name_ = '乐理课' AND cssp.group_type_ = 'THEORY' AND vg.group_status_ = 2 AND ss.music_director_id_ IS NULL
-		UNION ALL
-		SELECT ss.user_id_,vg.user_id_ teacher_id_,su.real_name_ teacher_name_,'' music_director_id_,'' music_director_name_,'VIP' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		LEFT JOIN sys_user su ON su.id_ = vg.user_id_
-		WHERE vgc.name_ != '乐理课' AND cssp.group_type_ = 'VIP' AND vg.group_status_ = 2 AND ss.teacher_id_ IS NULL
-		UNION ALL
-		SELECT ss.user_id_,'' teacher_id_,'' teacher_name_,vg.educational_teacher_id_ music_director_id_,su.real_name_ music_director_name_,'VIP' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		LEFT JOIN sys_user su ON su.id_ = vg.educational_teacher_id_
-		WHERE vgc.name_ != '乐理课' AND cssp.group_type_ = 'VIP' AND vg.group_status_ = 2 AND ss.music_director_id_ IS NULL
-	</select>
-	<select id="queryStatisticsCourseNum" resultMap="StudentStatistics">
-		SELECT cssp.user_id_,COUNT(cssp.course_schedule_id_) total_course_num_,COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) sub_course_num_,
-		COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN NULL ELSE 1 END) over_course_num_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 30 DAY),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_course_consumer_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 YEAR),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_year_course_consumer_,'PRACTICE' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		WHERE cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cssp.group_type_ = 'PRACTICE'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,COUNT(cssp.course_schedule_id_) total_course_num_,COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) sub_course_num_,
-		COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN NULL ELSE 1 END) over_course_num_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 30 DAY),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_course_consumer_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 YEAR),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_year_course_consumer_,'THEORY' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ = '乐理课' AND cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,COUNT(cssp.course_schedule_id_) total_course_num_,COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) sub_course_num_,
-		COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN NULL ELSE 1 END) over_course_num_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 30 DAY),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_course_consumer_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 YEAR),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_year_course_consumer_,'VIP' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ != '乐理课' AND cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-	</select>
-	<select id="queryStatisticsNoCourseNum" resultMap="StudentStatistics">
-		SELECT aum.user_id_,SUM(CASE WHEN aum.practice_flag_ = 1 THEN vga.min_course_num_ ELSE 0 END +
-		CASE WHEN aum.give_practice_flag_ = 1 THEN vga.give_course_num_ ELSE 0 END) no_schedule_num_,'PRACTICE' group_type_ FROM activity_user_mapper aum
-		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
-		WHERE aum.return_fee_ = 0 AND (aum.practice_flag_ = 1 OR aum.give_practice_flag_ = 1)
-		GROUP BY aum.user_id_
-		UNION ALL
-		SELECT a.user_id_,SUM(a.no_schedule_num_) no_schedule_num_,'THEORY' group_type_ FROM (
-		SELECT aum.user_id_,SUM(CASE WHEN aum.vip_flag_ = 1 AND vgc.name_ = '乐理课' THEN vga.min_course_num_ ELSE 0 END +
-		CASE WHEN aum.give_vip_flag_ = 1 AND vgc1.name_ = '乐理课' THEN vga.give_course_num_ ELSE 0 END) no_schedule_num_ FROM activity_user_mapper aum
-		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vga.vip_group_category_id_list_
-		LEFT JOIN vip_group_category vgc1 ON vgc1.id_ = vga.give_category_id_
-		WHERE aum.return_fee_ = 0 AND ((aum.vip_flag_ = 1 AND vgc.name_ = '乐理课') OR (aum.give_vip_flag_ = 1 AND vgc1.name_ = '乐理课'))
-		GROUP BY aum.user_id_
-		UNION ALL
-		SELECT user_id_,10 no_schedule_num_ FROM student WHERE activity_course_detail_ LIKE CONCAT('%','"music_theory": 1','%')) a
-		GROUP BY a.user_id_
-		UNION ALL
-		SELECT a.user_id_,SUM(a.no_schedule_num_) no_schedule_num_,'VIP' group_type_ FROM (
-		SELECT aum.user_id_,SUM(CASE WHEN aum.vip_flag_ = 1 AND vgc.name_ != '乐理课' THEN vga.min_course_num_ ELSE 0 END +
-		CASE WHEN aum.give_vip_flag_ = 1  AND vgc1.name_ != '乐理课' THEN vga.give_course_num_ ELSE 0 END) no_schedule_num_ FROM activity_user_mapper aum
-		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vga.vip_group_category_id_list_
-		LEFT JOIN vip_group_category vgc1 ON vgc1.id_ = vga.give_category_id_
-		WHERE aum.return_fee_ = 0 AND ((aum.vip_flag_ = 1 AND vgc.name_ != '乐理课') OR (aum.give_vip_flag_ = 1 AND vgc1.name_ != '乐理课'))
-		GROUP BY aum.user_id_
-		UNION ALL
-		SELECT user_id_,12 no_schedule_num_ FROM student WHERE activity_course_detail_ LIKE CONCAT('%','"vip1": 1','%')
-		UNION ALL
-		SELECT user_id_,12 no_schedule_num_ FROM student WHERE activity_course_detail_ LIKE CONCAT('%','"vip2": 1','%')) a
-		GROUP BY a.user_id_
-	</select>
-	<select id="queryStatisticsNotStartCourseFee" resultMap="StudentStatistics">
-		SELECT cssp.user_id_,SUM(cssp.expect_price_) not_start_course_fee_,'PRACTICE' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		WHERE cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.group_type_ = 'PRACTICE' AND cs.status_ = 'NOT_START'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,SUM(cssp.expect_price_) not_start_course_fee_,'THEORY' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.group_type_ = 'VIP' AND cs.status_ = 'NOT_START' AND vgc.name_ = '乐理课'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,SUM(cssp.expect_price_) not_start_course_fee_,'VIP' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.group_type_ = 'VIP' AND cs.status_ = 'NOT_START' AND vgc.name_ != '乐理课'
-		GROUP BY cssp.user_id_
-	</select>
-	<select id="queryStatisticsNoCourseFee" resultMap="StudentStatistics">
-		SELECT aum.user_id_,SUM(aum.actual_price_) no_course_fee_,'PRACTICE' group_type_ FROM activity_user_mapper aum
-		WHERE aum.practice_flag_ = 1 AND return_fee_ = 0
-		GROUP BY aum.user_id_
-		UNION ALL
-		SELECT aum.user_id_,SUM(aum.actual_price_) no_course_fee_,'THEORY' group_type_ FROM activity_user_mapper aum
-		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vga.vip_group_category_id_list_
-		WHERE aum.vip_flag_ = 1 AND return_fee_ = 0 AND vgc.name_ = '乐理课'
-		GROUP BY aum.user_id_
-		UNION ALL
-		SELECT aum.user_id_,SUM(aum.actual_price_) no_course_fee_,'VIP' group_type_ FROM activity_user_mapper aum
-		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vga.vip_group_category_id_list_
-		WHERE aum.vip_flag_ = 1 AND return_fee_ = 0 AND vgc.name_ != '乐理课'
-		GROUP BY aum.user_id_
-	</select>
-	<select id="queryStatisticsFirstAndLastCourseTime"
-			resultMap="StudentStatistics">
-		SELECT cssp.user_id_,MIN(cs.class_date_) first_course_time_,MAX(cs.class_date_) last_course_time_,'PRACTICE' group_type_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		WHERE cs.status_ = 'OVER' AND cssp.group_type_ = 'PRACTICE'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,MIN(cs.class_date_) first_course_time_,MAX(cs.class_date_) last_course_time_,'THEORY' group_type_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ = '乐理课' AND cs.status_ = 'OVER' AND cs.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,MIN(cs.class_date_) first_course_time_,MAX(cs.class_date_) last_course_time_,'VIP' group_type_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ != '乐理课' AND cs.status_ = 'OVER' AND cs.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-	</select>
-	<select id="queryStatisticsNormalGroupNum" resultMap="StudentStatistics">
-		SELECT cssp.user_id_,COUNT(DISTINCT pg.id_) normal_group_num_,'PRACTICE' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN practice_group pg ON pg.id_ = cssp.music_group_id_
-		WHERE pg.group_status_ = 'NORMAL' AND cssp.group_type_ = 'PRACTICE'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,COUNT(DISTINCT vg.id_) normal_group_num_,'THEORY' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ = '乐理课' AND vg.group_status_ = 2 AND cssp.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,COUNT(DISTINCT vg.id_) normal_group_num_,'VIP' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ != '乐理课' AND vg.group_status_ = 2 AND cssp.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-	</select>
 	<sql id="dateTypeSql">
 		WHERE data_type_ =
 		<if test="groupType == 'VIP'">
@@ -676,4 +472,15 @@
 			'STUDENT_PRACTICE_ORDER_NUM'
 		</if>
 	</sql>
+	
+	<select id="queryNoScheduleNumStudent" resultType="com.ym.mec.biz.dal.dto.StudentOrganDto">
+		SELECT ss.`user_id_` userId,u.organ_id_ organId FROM `student_statistics` ss 
+		LEFT JOIN `sys_user` u on u.`id_` = ss.`user_id_`
+		WHERE ss.`no_schedule_num_` > 0
+		AND u.organ_id_ IN
+        <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+        group by ss.user_id_ , u.organ_id_
+	</select>
 </mapper>

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

@@ -187,11 +187,10 @@
 	<select id="getUserTrainOverView" resultType="com.ym.mec.biz.dal.dto.StudentTrainOverviewDto">
 		SELECT
 			COUNT(DISTINCT smcr.behavior_id_) trainNum,
-			COUNT(DISTINCT DAY(smcr.create_time_)) trainDays,
+			COUNT(DISTINCT DATE(smcr.create_time_)) trainDays,
 			SUM(smcr.play_time_) trainTime
 		FROM sys_music_compare_record smcr
 		WHERE smcr.user_id_=#{userId}
-		      AND EXISTS (SELECT user_id_ FROM student WHERE user_id_=smcr.user_id_)
 	</select>
 
 	<select id="getUserTrainChartData" resultType="com.ym.mec.biz.dal.dto.StudentTrainChartDto">

+ 9 - 12
mec-student/src/main/java/com/ym/mec/student/interceptor/MDCInterceptor.java

@@ -1,22 +1,19 @@
 package com.ym.mec.student.interceptor;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.common.filters.TenantIdThreadLocal;
-
-import org.apache.commons.lang3.StringUtils;
+import com.ym.mec.util.web.WebUtil;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Component;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
-import com.ym.mec.util.web.WebUtil;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.UUID;
 
 @Component
 public class MDCInterceptor extends HandlerInterceptorAdapter {
@@ -24,6 +21,8 @@ public class MDCInterceptor extends HandlerInterceptorAdapter {
 	private static final String IP = "ip";
 
 	private static final String USERNAME = "username";
+
+	private static final String REQ_ID = "reqId";
 	@Autowired
 	@Lazy
 	private SysUserFeignService sysUserFeignService;
@@ -39,13 +38,11 @@ public class MDCInterceptor extends HandlerInterceptorAdapter {
 			}else {
 				TenantIdThreadLocal.set(1);
 			}
+			// 存储userId以及IP
+			MDC.put(USERNAME, sysUser.getUsername() + "@" + sysUser.getId());
 		}
-		String username = "";
-		String userId = "";
-		// 存储userId以及IP
-		MDC.put(USERNAME, username + "@" + userId);
 		MDC.put(IP, WebUtil.getRemoteIp(request));
-
+		MDC.put(REQ_ID, UUID.randomUUID().toString());
 		return true;
 	}
 

+ 1 - 1
mec-student/src/main/resources/logback-spring.xml

@@ -3,7 +3,7 @@
 
 	<property name="LOG_HOME" value="/mdata/logs/student-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
-			  value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
+			  value="[%X{username} %X{reqId} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 
 	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
 		<encoder charset="UTF-8">

+ 13 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesController.java

@@ -12,6 +12,7 @@ import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
 import com.ym.mec.biz.dal.page.TeacherServeHomeworkQueryInfo;
+import com.ym.mec.biz.dal.page.TeacherServeQueryInfo;
 import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
 import com.ym.mec.biz.service.ExtracurricularExercisesService;
 import com.ym.mec.biz.service.StudentExtracurricularExercisesSituationService;
@@ -63,6 +64,18 @@ public class ExtracurricularExercisesController extends BaseController {
         return succeed(studentExtracurricularExercisesSituationService.queryTeacherServeHomeworkDetail1(queryInfo));
     }
 
+
+    @ApiOperation(value = "获取老师训练统计")
+    @GetMapping("/getStatistics")
+    public HttpResponseResult getStatistics(ExtraExercilseQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        queryInfo.setTeacherId(sysUser.getId());
+        return succeed(studentExtracurricularExercisesSituationService.getStatistics(queryInfo));
+    }
+
     @ApiOperation(value = "统计老师当前时间能布置作业的课程数量")
     @GetMapping("/countWaitCreateHomeworkNum")
     public HttpResponseResult countWaitCreateHomeworkNum() {

+ 10 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/interceptor/MDCInterceptor.java

@@ -6,6 +6,8 @@ import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.common.filters.TenantIdThreadLocal;
 
+import com.ym.mec.util.web.WebUtil;
+import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Lazy;
@@ -14,9 +16,13 @@ import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.UUID;
 
 @Component
 public class MDCInterceptor extends HandlerInterceptorAdapter {
+	private static final String IP = "ip";
+	private static final String USERNAME = "username";
+	private static final String REQ_ID = "reqId";
 	@Autowired
 	@Lazy
 	private SysUserFeignService sysUserFeignService;
@@ -37,7 +43,11 @@ public class MDCInterceptor extends HandlerInterceptorAdapter {
 					TenantIdThreadLocal.set(1);
 				}
 			}
+			// 存储userId以及IP
+			MDC.put(USERNAME, sysUser.getRealName() + "@" + sysUser.getId());
 		}
+		MDC.put(IP, WebUtil.getRemoteIp(request));
+		MDC.put(REQ_ID, UUID.randomUUID().toString());
 		return true;
 	}
 

+ 1 - 1
mec-teacher/src/main/resources/logback-spring.xml

@@ -3,7 +3,7 @@
 
 	<property name="LOG_HOME" value="/mdata/logs/teacher-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
-			  value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
+			  value="[%X{username} %X{reqId} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 
 	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
 		<encoder charset="UTF-8">

+ 12 - 15
mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java

@@ -4,9 +4,11 @@ import com.alibaba.fastjson.JSON;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.entity.ClassGroup;
+import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
+import com.ym.mec.biz.dal.entity.CourseScheduleStatistics;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderStudentDetail;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
-import com.ym.mec.biz.dal.enums.ExportTypeEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
 import com.ym.mec.biz.dal.page.ClassGroupQueryInfo;
@@ -17,7 +19,6 @@ import com.ym.mec.biz.service.ClassGroupTeacherMapperService;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.*;
@@ -30,9 +31,6 @@ import org.springframework.web.bind.annotation.*;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
 @RequestMapping("classGroup")
@@ -64,6 +62,14 @@ public class ClassGroupController extends BaseController {
         return succeed(classGroupService.create(classGroup));
     }
 
+    @ApiOperation(value = "班级基本信息修改")
+    @PostMapping("/update")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/update')")
+    public HttpResponseResult update(ClassGroup classGroup) throws Exception {
+        classGroup.setUpdateTime(new Date());
+        return succeed(classGroupService.updateClassGroup(classGroup));
+    }
+
     @ApiOperation(value = "新增单技班班级")
     @PostMapping("/add")
     @PreAuthorize("@pcs.hasPermissions('classGroup/add')")
@@ -107,15 +113,6 @@ public class ClassGroupController extends BaseController {
         return succeed();
     }
 
-    @ApiOperation(value = "修改班级")
-    @PostMapping("/update")
-    @PreAuthorize("@pcs.hasPermissions('classGroup/update')")
-    public Object update(ClassGroup classGroup) {
-        classGroup.setUpdateTime(new Date());
-        classGroupService.update(classGroup);
-        return succeed();
-    }
-
     @ApiOperation(value = "合奏班相关班级获取")
     @GetMapping("/findClassGroupAboutMix")
     @PreAuthorize("@pcs.hasPermissions('classGroup/findClassGroupAboutMix')")

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

@@ -189,15 +189,15 @@ public class ExportController extends BaseController {
     public HttpResponseResult exportMusicGroupCourseList(ExportUserAccountQueryInfo queryInfo) throws IOException {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganId(),sysUser.getIsSuperAdmin()));
-        List<MusicGroupExportDto> exportDtoList = musicGroupDao.exportMusicGroupCourseList(queryInfo);
-        if (CollectionUtils.isEmpty(exportDtoList)) {
+        Integer i = musicGroupDao.countMusicGroupCourseList(queryInfo);
+        if (Objects.isNull(i) || i <= 0) {
             throw new BizException("没有可导出的记录");
         }
         ManagerDownload managerDownload = exportService.saveManagerDownload(ExportTypeEnum.MUSIC_GROUP_DATA_EXPORT,sysUser.getId());
         ExecutorService executor = Executors.newCachedThreadPool();
         CompletableFuture.runAsync(()->{
             try {
-                exportService.exportMusicGroupCourseList(managerDownload,exportDtoList);
+                exportService.exportMusicGroupCourseList(managerDownload,queryInfo);
             } catch (Exception e) {
                 e.printStackTrace();
             }

+ 0 - 9
mec-web/src/main/java/com/ym/mec/web/controller/ExtracurricularExercisesController.java

@@ -1,16 +1,11 @@
 package com.ym.mec.web.controller;
 
-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.entity.Employee;
 import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
 import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
 import com.ym.mec.biz.service.ExtracurricularExercisesService;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,8 +13,6 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.Arrays;
-import java.util.List;
 import java.util.Objects;
 
 @Api(tags = "课外训练服务")
@@ -32,8 +25,6 @@ public class ExtracurricularExercisesController extends BaseController {
     @Autowired
     private ExtracurricularExercisesReplyService extracurricularExercisesReplyService;
     @Autowired
-    private SysUserFeignService sysUserFeignService;
-    @Autowired
     private OrganizationService organizationService;
 
     @ApiOperation(value = "获取课外训练列表")

+ 42 - 2
mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

@@ -8,7 +8,10 @@ import io.swagger.annotations.ApiParam;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -404,7 +407,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "云教练学员数据预览")
     @GetMapping("/getCloudStudyStudentOverView")
     @PreAuthorize("@pcs.hasPermissions('studentManage/getCloudStudyStudentOverView')")
-    public HttpResponseResult<CloudStudyStudentDataDto> getCloudStudyStudentOverView(String organIds) throws Exception {
+    public HttpResponseResult<Object> getCloudStudyStudentOverView(String organIds) throws Exception {
         List<Integer> organIdsList;
         if(StringUtils.isNotBlank(organIds)){
             organIdsList = Arrays.stream(organIds.split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
@@ -415,7 +418,43 @@ public class StudentManageController extends BaseController {
             }
             organIdsList = organizations.stream().map(Organization::getId).collect(Collectors.toList());
         }
-        return succeed(studentService.getCloudStudyStudentOverView(organIdsList));
+        
+        List<Integer> ingnoreOrganIdList = Arrays.asList(36,39,41,42,43,44,45,46,47,48,49,50,52,54,56);
+        
+        organIdsList.removeAll(ingnoreOrganIdList);
+        
+        Map<String,Object> result = new HashMap<String, Object>();
+        
+        List<IndexCloudStudyListDto> list = studentService.getCloudStudyStudentOverViewList(organIdsList);
+        Collections.sort(list, new Comparator<IndexCloudStudyListDto>() {
+
+			@Override
+			public int compare(IndexCloudStudyListDto o1, IndexCloudStudyListDto o2) {
+				if(o1.getVipStudentRate() == o2.getVipStudentRate()){
+					return 0;
+				}
+				if(o1.getVipStudentRate() > o2.getVipStudentRate()){
+					return -1;
+				}
+				return 1;
+			}
+        	
+		});
+        
+        result.put("list", list);
+        
+        CloudStudyStudentDataDto cloudStudyStudentDataDto = studentService.getCloudStudyStudentOverView(organIdsList);
+
+        cloudStudyStudentDataDto.setCloudStudyLivelyStudentNum(list.stream().collect(Collectors.summingInt(IndexCloudStudyListDto :: getActiveStudentNum)));
+        cloudStudyStudentDataDto.setTotalStudentNum(list.stream().collect(Collectors.summingInt(IndexCloudStudyListDto :: getTotalStudentNum)));
+        cloudStudyStudentDataDto.setEffectiveVipStudentNum(list.stream().collect(Collectors.summingInt(IndexCloudStudyListDto :: getEffectiveVipStudentNum)));
+        cloudStudyStudentDataDto.setWaitActivateVipStudentNum(list.stream().collect(Collectors.summingInt(IndexCloudStudyListDto :: getWaitActivateVipStudentNum)));
+        cloudStudyStudentDataDto.setEffectiveStudentNum(list.stream().collect(Collectors.summingInt(IndexCloudStudyListDto :: getEffectiveStudentNum)));
+        cloudStudyStudentDataDto.setVipStudentNum(list.stream().collect(Collectors.summingInt(IndexCloudStudyListDto :: getVipStudentNum)));
+
+        result.put("overView", cloudStudyStudentDataDto);
+        
+        return succeed(result);
     }
 
     @ApiOperation(value = "云教练学员数据预览列表")
@@ -432,6 +471,7 @@ public class StudentManageController extends BaseController {
             }
             organIdsList = organizations.stream().map(Organization::getId).collect(Collectors.toList());
         }
+        
         return succeed(studentService.getCloudStudyStudentOverViewList(organIdsList));
     }