浏览代码

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

hgw 3 年之前
父节点
当前提交
36913bda63
共有 24 个文件被更改,包括 404 次插入111 次删除
  1. 19 8
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  2. 54 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/IndexCloudStudyListDto.java
  3. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupExportDto.java
  4. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleStatistics.java
  5. 10 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercisesMessage.java
  6. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercisesReply.java
  7. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomework.java
  8. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomeworkReply.java
  9. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java
  10. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesMessageServiceImpl.java
  11. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkReplyServiceImpl.java
  12. 60 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  14. 4 3
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  15. 7 4
      mec-biz/src/main/resources/config/mybatis/CloudTeacherMapper.xml
  16. 22 11
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStatisticsMapper.xml
  17. 9 4
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml
  18. 15 13
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  19. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  20. 8 4
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  21. 46 32
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  22. 1 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseHomeworkReplyController.java
  23. 64 15
      mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java
  24. 19 0
      mec-web/src/main/java/com/ym/mec/web/controller/StudentStatisticsController.java

+ 19 - 8
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -1,17 +1,24 @@
 package com.ym.mec.biz.dal.dao;
 
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.ibatis.annotations.Param;
+
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.dto.EduOrganStudentListDto;
+import com.ym.mec.biz.dal.dto.IndexCloudStudyListDto;
+import com.ym.mec.biz.dal.dto.Mapper;
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
+import com.ym.mec.biz.dal.dto.Student4operating;
+import com.ym.mec.biz.dal.dto.StudentServeCourseDto;
+import com.ym.mec.biz.dal.dto.StudentServeDto;
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.enums.GroupType;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Student> {
 	
@@ -288,8 +295,12 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
 
     int getCloudStudyLivelyStudentNum(@Param("organId") Integer organId);
-    int getOrganTotalCloudStudyLivelyStudentNum(@Param("organIds") List<Integer> organIds);
+    int getOrganTotalCloudStudyLivelyStudentNum(@Param("organIds") List<Integer> organIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
     List<Map<Integer, Integer>> getOrganCloudStudyLivelyStudentNum(@Param("organIds") List<Integer> organIds);
+    
+    List<IndexCloudStudyListDto> getCloudStudyStudentOverViewList(@Param("organIds") List<Integer> organIds);
+    
+    List<Mapper> getOrganActiveCloudStudyStudentNum(@Param("organIds") List<Integer> organIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
 
     /**
      * @describe 查询云教练学员列表数据

+ 54 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/IndexCloudStudyListDto.java

@@ -0,0 +1,54 @@
+package com.ym.mec.biz.dal.dto;
+
+public class IndexCloudStudyListDto {
+
+	private Integer organId;
+	
+	private String organName;
+	
+	private Integer totalStudentNum;
+	
+	private Integer vipStudentNum;
+	
+	private Integer activeStudentNum;
+
+	public Integer getOrganId() {
+		return organId;
+	}
+
+	public void setOrganId(Integer organId) {
+		this.organId = organId;
+	}
+
+	public String getOrganName() {
+		return organName;
+	}
+
+	public void setOrganName(String organName) {
+		this.organName = organName;
+	}
+
+	public Integer getTotalStudentNum() {
+		return totalStudentNum;
+	}
+
+	public void setTotalStudentNum(Integer totalStudentNum) {
+		this.totalStudentNum = totalStudentNum;
+	}
+
+	public Integer getVipStudentNum() {
+		return vipStudentNum;
+	}
+
+	public void setVipStudentNum(Integer vipStudentNum) {
+		this.vipStudentNum = vipStudentNum;
+	}
+
+	public Integer getActiveStudentNum() {
+		return activeStudentNum;
+	}
+
+	public void setActiveStudentNum(Integer activeStudentNum) {
+		this.activeStudentNum = activeStudentNum;
+	}
+}

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

@@ -18,13 +18,13 @@ public class MusicGroupExportDto extends BaseEntity {
     private String eduName;
 
     @ApiModelProperty(value = "出勤率")
-    private String attendanceRate;
+    private String attendanceRate = "0.00%";
 
     @ApiModelProperty(value = "达标率")
-    private String standardRate;
+    private String standardRate = "0.00%";
 
     @ApiModelProperty(value = "作业提交率")
-    private String homeworkCommitRate;
+    private String homeworkCommitRate = "0.00%";
 
     @ApiModelProperty(value = "成团人数")
     private int groupMemberNum;
@@ -42,7 +42,7 @@ public class MusicGroupExportDto extends BaseEntity {
     private int totalNum;
 
     @ApiModelProperty(value = "流失率")
-    private String lostRate;
+    private String lostRate = "0.00%";
 
     public String getLostRate() {
         return lostRate;

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

@@ -56,6 +56,17 @@ public class CourseScheduleStatistics {
 	@ApiModelProperty(value = "课程时间")
 	private String classDate;
 
+	@ApiModelProperty(value = "课程状态")
+	private String courseStatus;
+
+	public String getCourseStatus() {
+		return courseStatus;
+	}
+
+	public void setCourseStatus(String courseStatus) {
+		this.courseStatus = courseStatus;
+	}
+
 	public String getClassDate() {
 		return classDate;
 	}

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

@@ -33,7 +33,16 @@ public class ExtracurricularExercisesMessage extends BaseEntity {
 
 	private ImSendTypeEnum msgType = ImSendTypeEnum.TXT;
 
-	private Integer musicScoreId;
+	//达标
+	private Integer standardFlag;
+
+	public Integer getStandardFlag() {
+		return standardFlag;
+	}
+
+	public void setStandardFlag(Integer standardFlag) {
+		this.standardFlag = standardFlag;
+	}
 
 	public ImSendTypeEnum getMsgType() {
 		return msgType;

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

@@ -67,6 +67,17 @@ public class ExtracurricularExercisesReply extends BaseEntity {
 	@ApiModelProperty(value="伴奏详情包含,曲目编号、分谱")
 	private String musicScoreContent;
 
+	@ApiModelProperty(value = "0未达标、1达标、2优秀",required = true)
+	private Integer standardFlag;
+
+	public Integer getStandardFlag() {
+		return standardFlag;
+	}
+
+	public void setStandardFlag(Integer standardFlag) {
+		this.standardFlag = standardFlag;
+	}
+
 	public String getMusicScoreContent() {
 		return musicScoreContent;
 	}

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

@@ -72,6 +72,17 @@ public class StudentCourseHomework extends BaseEntity {
 	@ApiModelProperty(value="伴奏名称")
 	private String musicScoreName;
 
+	@ApiModelProperty(value = "0未达标、1达标、2优秀",required = true)
+	private Integer standardFlag;
+
+	public Integer getStandardFlag() {
+		return standardFlag;
+	}
+
+	public void setStandardFlag(Integer standardFlag) {
+		this.standardFlag = standardFlag;
+	}
+
 	public String getMusicScoreContent() {
 		return musicScoreContent;
 	}

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

@@ -39,6 +39,17 @@ public class StudentCourseHomeworkReply extends BaseEntity {
 	//false  文本,true其他需要跳转
 	private ImSendTypeEnum msgType = ImSendTypeEnum.TXT;
 
+	@ApiModelProperty(value = "0未达标、1达标、2优秀",required = true)
+	private Integer standardFlag;
+
+	public Integer getStandardFlag() {
+		return standardFlag;
+	}
+
+	public void setStandardFlag(Integer standardFlag) {
+		this.standardFlag = standardFlag;
+	}
+
 	public ImSendTypeEnum getMsgType() {
 		return msgType;
 	}

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

@@ -9,8 +9,13 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.CloudStudyStudentDataDto;
 import com.ym.mec.biz.dal.dto.CloudTeacherActiveTargetDetailDto;
 import com.ym.mec.biz.dal.dto.EduOrganStudentDataDto;
+import com.ym.mec.biz.dal.dto.IndexCloudStudyListDto;
 import com.ym.mec.biz.dal.dto.StatDto;
-import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.entity.BaseStudentDto;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
+import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.StudentPreRegistration;
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.biz.dal.page.CloudTeacherActiveQueryInfo;
@@ -131,6 +136,8 @@ public interface StudentService extends BaseService<Integer, Student> {
     PageInfo<EduOrganStudentDataDto> queryOrganStudentOverView(List<Integer> organIds, OrganCloudStudyStudentDataQueryInfo queryInfo);
 
     CloudStudyStudentDataDto getCloudStudyStudentOverView(List<Integer> organIds);
+    
+    List<IndexCloudStudyListDto> getCloudStudyStudentOverViewList(List<Integer> organIds);
 
     /**
      * @describe 清理学员云教练连续使用天数

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesMessageServiceImpl.java

@@ -65,6 +65,10 @@ public class ExtracurricularExercisesMessageServiceImpl extends BaseServiceImpl<
 		if(Objects.isNull(extracurricularExercisesReply)){
 			throw new BizException("课外训练不存在");
 		}
+		if(extracurricularExercisesMessage.getStandardFlag() != null && extracurricularExercisesReply.getStandardFlag() == null){
+			extracurricularExercisesReply.setStandardFlag(extracurricularExercisesMessage.getStandardFlag());
+			extracurricularExercisesReplyDao.update(extracurricularExercisesReply);
+		}
 		ExtracurricularExercises extracurricularExercises = extracurricularExercisesDao.get(extracurricularExercisesReply.getExtracurricularExercisesId());
 		if("TEACHER".equals(extracurricularExercisesMessage.getRole())){
 			if(Objects.nonNull(extracurricularExercisesReply.getAttachments())){

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkReplyServiceImpl.java

@@ -83,6 +83,10 @@ public class StudentCourseHomeworkReplyServiceImpl extends BaseServiceImpl<Long,
 		if(Objects.isNull(studentCourseHomework)){
 			throw new BizException("请指定需要回复的作业");
 		}
+		if(bean.getStandardFlag() != null && studentCourseHomework.getStandardFlag() == null){
+			studentCourseHomework.setStandardFlag(bean.getStandardFlag());
+			studentCourseHomeworkService.update(studentCourseHomework);
+		}
 		if(Objects.nonNull(studentCourseHomework.getAttachments())){
 			studentCourseHomeworkService.updateReplyStatus(bean.getUserId(),
 					studentCourseHomework.getCourseHomeworkId(),

+ 60 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -6,6 +6,7 @@ import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Calendar;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Date;
@@ -20,20 +21,14 @@ import java.util.stream.Collectors;
 
 import javax.annotation.PostConstruct;
 
-import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.common.entity.ImResult;
-import com.ym.mec.common.entity.ImUserModel;
-import com.ym.mec.im.ImFeignService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import com.alibaba.fastjson.JSONArray;
-import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.CloudTeacherDao;
 import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
@@ -56,10 +51,22 @@ import com.ym.mec.biz.dal.dto.CloudTeacherActiveTargetDto;
 import com.ym.mec.biz.dal.dto.EduOrganStudentDataDto;
 import com.ym.mec.biz.dal.dto.EduOrganStudentListDto;
 import com.ym.mec.biz.dal.dto.EduOrganStudentListExportDto;
+import com.ym.mec.biz.dal.dto.IndexCloudStudyListDto;
+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.StudentTeacherCourseDto;
+import com.ym.mec.biz.dal.entity.BaseStudentDto;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
+import com.ym.mec.biz.dal.entity.MemberRankSetting;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.StudentPreRegistration;
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.enums.FivePlusGradeEnum;
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
@@ -75,11 +82,13 @@ import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.biz.service.SysTenantConfigService;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
-import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.entity.ImResult;
+import com.ym.mec.common.entity.ImUserModel;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.tenant.TenantContextHolder;
+import com.ym.mec.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
@@ -1026,12 +1035,24 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     @Override
     public CloudStudyStudentDataDto getCloudStudyStudentOverView(List<Integer> organIds) {
         CloudStudyStudentDataDto result = new CloudStudyStudentDataDto();
-//        result.setTotalStudentNum(studentDao.getOrgansTotalStudentNum(organIds));
+        result.setTotalStudentNum(studentDao.getOrgansTotalStudentNum(organIds));
         result.setVipStudentNum(cloudTeacherDao.getOrgansTotalVipStudentNum(organIds));
 //        result.seteVipStudentNum(studentDao.getOrgansTotalEVipStudentNum(organIds));
         result.setCloudStudyUseStudentNum(studentDao.getOrgansTotalCloudStudyStudentNum(organIds));
         result.setCloudStudyTodayUseStudentNum(studentDao.getOrgansTodayTotalCloudStudyStudentNum(organIds));
-        result.setCloudStudyLivelyStudentNum(studentDao.getOrganTotalCloudStudyLivelyStudentNum(organIds));
+        
+        Calendar cal = Calendar.getInstance();    
+        cal.setTime(new Date());    
+        cal.add(Calendar.WEEK_OF_YEAR, -1);// 一周    
+        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
+        Date endTime = cal.getTime();
+        
+        cal.setTime(new Date());    
+        cal.add(Calendar.WEEK_OF_YEAR, -4);// 一周    
+        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
+        Date startTime = cal.getTime();
+        
+        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());
@@ -1040,6 +1061,36 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     }
 
     @Override
+	public List<IndexCloudStudyListDto> getCloudStudyStudentOverViewList(List<Integer> organIds) {
+    	
+    	List<IndexCloudStudyListDto> list = studentDao.getCloudStudyStudentOverViewList(organIds);
+    	
+    	Calendar cal = Calendar.getInstance();    
+        cal.setTime(new Date());    
+        cal.add(Calendar.WEEK_OF_YEAR, -1);// 一周    
+        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
+        Date endTime = cal.getTime();
+        
+        cal.setTime(new Date());    
+        cal.add(Calendar.WEEK_OF_YEAR, -4);// 一周    
+        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
+        Date startTime = cal.getTime();
+        
+        List<Mapper> mapperList = studentDao.getOrganActiveCloudStudyStudentNum(organIds, startTime, endTime);
+        
+        Map<Integer, Integer> organActiveNum = new HashMap<Integer, Integer>();
+        for(Mapper mapper : mapperList){
+        	organActiveNum.put((Integer)mapper.getKey(), (Integer)mapper.getValue());
+        }
+        
+        for(IndexCloudStudyListDto ics : list){
+        	ics.setActiveStudentNum(organActiveNum.get(ics.getOrganId()));
+        }
+        
+		return list;
+	}
+
+	@Override
     public void cleanStudentCloudStudySequenceDays() {
         studentDao.cleanStudentCloudStudySequenceDays();
     }

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

@@ -92,12 +92,12 @@ 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);
 			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);
 			this.sendMessage(studentIds,type,courseDate,MessageTypeEnum.SMS_STANDARD_QUALIFIED);
 		}
 		//标记当前课程为已评价

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

@@ -997,15 +997,16 @@
     </select>
 
     <select id="getMusicGroupCourseScheduleStatistics" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleStatisticsDao.CourseScheduleStatistics">
-        SELECT CONCAT(TRUNCATE((css.attendance_num_ + css.late_num_) / css.course_student_total_num_ * 100,2),'%') attendance_rate_,
-        CONCAT(TRUNCATE(css.standard_num_ / css.course_student_total_num_ * 100,2),'%') standard_rate_,
-        CONCAT(TRUNCATE(css.homework_commit_num_ / css.course_student_total_num_ * 100,2),'%') homework_commit_rate_
+        SELECT 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_
         FROM course_schedule cs
         LEFT JOIN class_group cg ON cg.id_ = cs.class_group_id_
         LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
         LEFT JOIN course_schedule_statistics css ON css.course_schedule_id_ = cs.id_
         LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_ AND csts.teacher_role_ = 'BISHOP'
         <include refid="queryMusicGroupCourseScheduleDetailSql"/>
+        AND css.course_status_ = 'OVER'
         GROUP BY cs.music_group_id_
     </select>
 

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

@@ -89,10 +89,13 @@
     </select>
 
     <select id="getOrgansTotalVipStudentNum" resultType="int">
-        SELECT COUNT(DISTINCT cto.student_id_)
-        FROM cloud_teacher_order cto
-                 LEFT JOIN sys_user su ON cto.student_id_=su.id_
-        WHERE su.del_flag_=0 AND cto.status_ IN (1,2)
+        SELECT count(distinct a.user_id_) FROM 
+		(
+		SELECT s.`user_id_`  FROM `student` s WHERE s.`membership_end_time_` &gt; now()
+		union
+		SELECT cto.`student_id_`  FROM `cloud_teacher_order` cto WHERE cto.`status_` = 1
+		) a LEFT JOIN sys_user su ON a.user_id_=su.id_
+        WHERE su.del_flag_=0 
         <if test="organIds!=null and organIds.size()>0">
             AND su.organ_id_ IN
             <foreach collection="organIds" item="organId" open="(" close=")" separator=",">

+ 22 - 11
mec-biz/src/main/resources/config/mybatis/CourseScheduleStatisticsMapper.xml

@@ -20,6 +20,7 @@
 		<result column="standard_rate_" property="standardRate" />
 		<result column="homework_commit_rate_" property="homeworkCommitRate" />
 		<result column="class_date_" property="classDate" />
+		<result column="course_status_" property="courseStatus" />
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -35,16 +36,16 @@
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleStatistics" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO course_schedule_statistics (course_schedule_id_,music_group_id_,course_student_total_num_,
-		                                        attendance_num_,late_num_,standard_num_,homework_flag_,homework_commit_num_,service_flag_,class_date_)
+		                                        attendance_num_,late_num_,standard_num_,homework_flag_,homework_commit_num_,service_flag_,class_date_,course_status_)
 		                                        VALUES(#{courseScheduleId},#{musicGroupId},#{courseStudentTotalNum},#{attendanceNum},
-		                                               #{lateNum},#{standardNum},#{homeworkFlag},#{homeworkCommitNum},#{serviceFlag},#{classDate})
+		                                               #{lateNum},#{standardNum},#{homeworkFlag},#{homeworkCommitNum},#{serviceFlag},#{classDate},#{courseStatus})
 	</insert>
 	<insert id="batchInsert">
 		INSERT INTO course_schedule_statistics (course_schedule_id_,music_group_id_,course_student_total_num_,
-												attendance_num_,late_num_,standard_num_,homework_flag_,homework_commit_num_,service_flag_,class_date_) VALUES
+												attendance_num_,late_num_,standard_num_,homework_flag_,homework_commit_num_,service_flag_,class_date_,course_status_) VALUES
 		<foreach collection="scheduleStatisticsList" separator="," item="item">
 			(#{item.courseScheduleId},#{item.musicGroupId},#{item.courseStudentTotalNum},#{item.attendanceNum},
-			#{item.lateNum},#{item.standardNum},#{item.homeworkFlag},#{item.homeworkCommitNum},#{item.serviceFlag},#{classDate})
+			#{item.lateNum},#{item.standardNum},#{item.homeworkFlag},#{item.homeworkCommitNum},#{item.serviceFlag},#{classDate},#{courseStatus})
 		</foreach>
 	</insert>
 
@@ -54,6 +55,9 @@
 		<if test="classDate != null and classDate != ''">
 			class_date_ = #{classDate},
 		</if>
+		<if test="courseStatus != null and courseStatus != ''">
+			course_status_ = #{courseStatus},
+		</if>
 		<if test="homeworkFlag != null">
 		homework_flag_ = #{homeworkFlag},
 		</if>
@@ -84,6 +88,9 @@
 		<foreach collection="scheduleStatisticsList" item="item" index="index" open="" close="" separator=";">
 			UPDATE course_schedule_statistics
 			<set>
+			<if test="item.courseStatus != null and item.courseStatus != ''">
+				course_status_ = #{item.courseStatus},
+			</if>
 			<if test="item.classDate != null and item.classDate != ''">
 				class_date_ = #{item.classDate},
 			</if>
@@ -133,11 +140,14 @@
 		SELECT COUNT(*) FROM course_schedule_statistics
 	</select>
     <select id="queryUpdateCourseScheduleStatistics" resultMap="CourseScheduleStatistics">
-		SELECT cssw.course_schedule_id_,cs.music_group_id_,COUNT(cssp.id_) course_student_total_num_,
-			   COUNT(CASE WHEN sa.status_ = 'NORMAL' THEN 1 ELSE NULL END) attendance_num_,
-			   COUNT(CASE WHEN sa.status_ = 'LATE' THEN 1 ELSE NULL END) late_num_,COUNT(CASE WHEN sa.qualified_flag_ = 1 THEN 1 ELSE NULL END) standard_num_,
-			   CASE WHEN sch.id_ IS NOT NULL THEN 1 ELSE 0 END homework_flag_,COUNT(CASE WHEN sch.status_ = 1 THEN 1 ELSE NULL END) homework_commit_num_,
-			   CASE WHEN sees.course_ids_ IS NOT NULL THEN 1 ELSE 0 END service_flag_,cs.class_date_
+		SELECT cssw.course_schedule_id_,cs.music_group_id_,
+			   COUNT(DISTINCT cssp.id_) course_student_total_num_,
+			   COUNT(DISTINCT CASE WHEN sa.status_ = 'NORMAL' THEN sa.id_ ELSE NULL END) attendance_num_,
+			   COUNT(DISTINCT CASE WHEN sa.status_ = 'LATE' THEN sa.id_ ELSE NULL END) late_num_,
+			   COUNT(DISTINCT CASE WHEN sa.qualified_flag_ = 1 THEN sa.id_ ELSE NULL END) standard_num_,
+			   CASE WHEN sch.id_ IS NOT NULL THEN 1 ELSE 0 END homework_flag_,
+			   COUNT(DISTINCT CASE WHEN sch.status_ = 1 THEN sch.id_ ELSE NULL END) homework_commit_num_,
+			   CASE WHEN sees.course_ids_ IS NOT NULL THEN 1 ELSE 0 END service_flag_,cs.class_date_,cs.status_ course_status_
 		FROM course_schedule_statistics_wait cssw
 				 LEFT JOIN course_schedule_statistics css ON css.course_schedule_id_ = cssw.course_schedule_id_
 				 LEFT JOIN course_schedule cs ON cs.id_ = cssw.course_schedule_id_
@@ -152,8 +162,9 @@
 		SELECT cssw.course_schedule_id_,cs.music_group_id_,COUNT(cssp.id_) course_student_total_num_,
 			   COUNT(CASE WHEN sa.status_ = 'NORMAL' THEN 1 ELSE NULL END) attendance_num_,
 			   COUNT(CASE WHEN sa.status_ = 'LATE' THEN 1 ELSE NULL END) late_num_,COUNT(CASE WHEN sa.qualified_flag_ = 1 THEN 1 ELSE NULL END) standard_num_,
-			   CASE WHEN sch.id_ IS NOT NULL THEN 1 ELSE 0 END homework_flag_,COUNT(CASE WHEN sch.status_ = 1 THEN 1 ELSE NULL END) homework_commit_num_,
-			   CASE WHEN sees.course_ids_ IS NOT NULL THEN 1 ELSE 0 END service_flag_
+			   CASE WHEN sch.id_ IS NOT NULL THEN 1 ELSE 0 END homework_flag_,
+			   COUNT(DISTINCT CASE WHEN sch.status_ = 1 THEN sch.id_ ELSE NULL END) homework_commit_num_,
+			   CASE WHEN sees.course_ids_ IS NOT NULL THEN 1 ELSE 0 END service_flag_,cs.class_date_,cs.status_ course_status_
 		FROM course_schedule_statistics_wait cssw
 				 LEFT JOIN course_schedule_statistics css ON css.course_schedule_id_ = cssw.course_schedule_id_
 				 LEFT JOIN course_schedule cs ON cs.id_ = cssw.course_schedule_id_

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

@@ -25,6 +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" />
 		<association property="extracurricularExercises" columnPrefix="ee_" resultMap="com.ym.mec.biz.dal.dao.ExtracurricularExercisesDao.ExtracurricularExercises"/>
 	</resultMap>
 
@@ -93,20 +94,21 @@
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO extracurricular_exercises_reply (extracurricular_exercises_id_,user_id_,attachments_,create_time_,
-		                                             update_time_,remark_,status_,is_replied_,is_view_,is_replied_timely_,music_score_id_,music_score_content_,tenant_id_)
+		                                             update_time_,remark_,status_,is_replied_,is_view_,is_replied_timely_,
+		                                             music_score_id_,music_score_content_,tenant_id_,standard_flag_)
 		VALUES(#{extracurricularExercisesId},#{userId},#{attachments},NOW(),NOW(),#{remark},#{status},#{isReplied},#{isView},
-		       #{isRepliedTimely},#{musicScoreId},#{musicScoreContent},#{tenantId})
+		       #{isRepliedTimely},#{musicScoreId},#{musicScoreContent},#{tenantId},#{standardFlag})
 	</insert>
 
 	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO extracurricular_exercises_reply (extracurricular_exercises_id_,user_id_,attachments_,
 		                                             create_time_,update_time_,remark_,status_,is_replied_,is_view_,
-		                                             is_replied_timely_,music_score_id_,music_score_content_,tenant_id_)
+		                                             is_replied_timely_,music_score_id_,music_score_content_,tenant_id_,standard_flag_)
 		VALUES
 		<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})
+			 #{reply.musicScoreId},#{reply.musicScoreContent},#{replay.tenantId},#{replay.standardFlag})
 		</foreach>
 	</insert>
 
@@ -114,6 +116,9 @@
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply">
 		UPDATE extracurricular_exercises_reply
 		<set>
+			<if test="standardFlag != null">
+				standard_flag_ = #{standardFlag},
+			</if>
 			<if test="musicScoreId != null">
 				music_score_id_ = #{musicScoreId},
 			</if>

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

@@ -1095,30 +1095,32 @@
         <result property="lostRate" column="lost_rate_"/>
     </resultMap>
     <select id="exportMusicGroupCourseList" resultMap="MusicGroupExportDto">
-        SELECT o.name_ organ_name_,css.music_group_id_,mg.name_ music_group_name_,su.real_name_ educational_teacher_name_,
-        CONCAT(TRUNCATE((css.attendance_num_ + css.late_num_) / css.course_student_total_num_ * 100,2),'%') attendance_rate_,
-        CONCAT(TRUNCATE(css.standard_num_ / css.course_student_total_num_ * 100,2),'%') standard_rate_,
-        CONCAT(TRUNCATE(css.homework_commit_num_ / css.course_student_total_num_ * 100,2),'%') homework_commit_rate_,
-        mg.group_member_num_,COUNT(DISTINCT CASE WHEN sr.original_flag_ = 0 AND sr.music_group_status_ = 'NORMAL' THEN sr.user_id_ ELSE NULL END) add_stu_num_,
-        COUNT(DISTINCT CASE WHEN mgq.status_ = 'APPROVED' THEN mgq.apply_user_id_ ELSE NULL END) quit_stu_num_,
-        COUNT(CASE WHEN sr.music_group_status_ = 'NORMAL' THEN 1 ELSE NULL END) normal_num_,
-        COUNT(CASE WHEN sr.music_group_status_ != 'APPLY' THEN 1 ELSE NULL END) total_num_,
-        CONCAT(TRUNCATE(COUNT(DISTINCT CASE WHEN mgq.status_ = 'APPROVED' THEN mgq.apply_user_id_ ELSE NULL END) /
-               COUNT(CASE WHEN sr.music_group_status_ != 'APPLY' THEN 1 ELSE NULL END) * 100,2),'%') lost_rate_
+        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_
         FROM music_group mg
-        LEFT JOIN course_schedule_statistics css ON mg.id_ = css.music_group_id_
+        LEFT JOIN course_schedule_statistics css ON mg.id_ = css.music_group_id_ AND css.course_status_ = 'OVER'
         <if test="queryInfo.startTime != null and queryInfo.startTime != ''">
             AND css.class_date_ BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
         </if>
         LEFT JOIN organization o ON o.id_ = mg.organ_id_
         LEFT JOIN sys_user su ON su.id_ = mg.educational_teacher_id_
+        LEFT JOIN student_registration sr1 ON sr1.music_group_id_ = mg.id_
         LEFT JOIN student_registration sr ON sr.music_group_id_ = mg.id_
         <if test="queryInfo.startTime != null and queryInfo.startTime != ''">
-            AND sr.create_time_ BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
+            AND DATE_FORMAT(sr.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_
         <if test="queryInfo.startTime != null and queryInfo.startTime != ''">
-            AND mgq.create_time_ BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
+            AND DATE_FORMAT(mgq.create_time_,"%Y-%m-%d") BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
         </if>
         <where>
             mg.status_ = 'PROGRESS'

+ 1 - 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_ = 0 WHERE course_schedule_id_ = #{courseScheduleId} AND user_id_ IN
+        UPDATE student_attendance SET qualified_flag_ = 1 WHERE course_schedule_id_ = #{courseScheduleId} AND user_id_ IN
         <foreach collection="studentIds" separator="," item="userId" open="(" close=")">
             #{userId}
         </foreach>

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

@@ -28,6 +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"/>
     </resultMap>
 
     <resultMap type="com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto" id="CourseHomeworkStudentDetailDto">
@@ -73,24 +74,24 @@
             keyColumn="id" keyProperty="id">
         INSERT INTO student_course_homework
         (user_id_,course_schedule_id_,course_homework_id_,attachments_,score_,create_time_,update_time_,
-         remark_,status_,is_replied_,is_view_,is_replied_timely_,music_score_id_,music_score_content_,tenant_id_)
+         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})
+               #{isView,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{isRepliedTimely},#{musicScoreId},#{musicScoreContent},#{tenantId},#{standardFlag})
     </insert>
 
     <insert id="batchInsertStudentCourseHomeworkRecord" parameterType="java.util.List" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
         INSERT INTO student_course_homework
         (user_id_,course_schedule_id_,course_homework_id_,attachments_,score_,create_time_,
-         update_time_,remark_,status_,is_replied_,is_view_,is_replied_timely_,music_score_id_,music_score_content_,tenant_id_)
+         update_time_,remark_,status_,is_replied_,is_view_,is_replied_timely_,music_score_id_,music_score_content_,tenant_id_,standard_flag_)
         VALUE
         <foreach collection="list" item="homework" separator=",">
             (#{homework.userId},#{homework.courseScheduleId},#{homework.courseHomeworkId},#{homework.attachments},
             #{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.musicScoreId},#{homework.musicScoreContent},#{homework.tenantId},#{homework.standardFlag})
         </foreach>
     </insert>
 
@@ -98,6 +99,9 @@
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentCourseHomework">
         UPDATE student_course_homework
         <set>
+            <if test="standardFlag != null">
+                standard_flag_ = #{standardFlag},
+            </if>
             <if test="musicScoreId != null">
                 music_score_id_ = #{musicScoreId},
             </if>

+ 46 - 32
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -813,25 +813,10 @@
     </select>
 
     <select id="getOrgansTotalStudentNum" resultType="int">
-        SELECT COUNT(DISTINCT user_id_)
-        FROM ((SELECT sr.user_id_
-               FROM student_registration sr
-                    LEFT JOIN music_group mg ON sr.music_group_id_=mg.id_
-               WHERE mg.status_='PROGRESS'
-                AND sr.music_group_status_='NORMAL')
-              UNION ALL
-              (SELECT
-                   cssp.user_id_
-               FROM
-                   course_schedule_student_payment cssp
-                       LEFT JOIN course_schedule cs ON cssp.course_schedule_id_=cs.id_
-                       LEFT JOIN sys_user su ON cssp.user_id_ = su.id_
-               WHERE
-                   cssp.group_type_ IN ('VIP', 'PRACTICE')
-                 AND cs.status_='NOT_START')) t
-        LEFT JOIN sys_user su ON t.user_id_=su.id_
-        WHERE su.del_flag_=0
-            AND su.organ_id_ IN
+        SELECT count(s.`user_id_`)  FROM student s 
+		LEFT JOIN `sys_user` u on s.`user_id_` = u.`id_`
+		WHERE u.`del_flag_` = 0 
+            AND u.organ_id_ IN
             <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
                 #{organId}
             </foreach>
@@ -982,19 +967,48 @@
     </select>
 
     <select id="getOrganTotalCloudStudyLivelyStudentNum" resultType="int">
-        SELECT COUNT(user_id_)
-        FROM (SELECT
-                  smcr.user_id_,
-                  COUNT(DISTINCT(CASE WHEN DATEDIFF(NOW(), smcr.create_time_)&lt;=15 THEN DATE_FORMAT(smcr.create_time_, '%Y-%m-%d') ELSE NULL END)) days
-              FROM sys_music_compare_record smcr
-                       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 su.organ_id_ IN
-                    <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
-                        #{organId}
-                    </foreach>
-              GROUP BY smcr.user_id_) t WHERE t.days>=5
+        SELECT count(a.user_id_) FROM 
+		(
+		SELECT wd.`user_id_` FROM `sys_music_compare_week_data` wd  
+		WHERE wd.`train_time_` >= 3600 AND wd.`monday_` BETWEEN date(#{startTime}) and date(#{endTime})  GROUP BY `user_id_` HAVING count(*) >= 3
+		    ) a 
+		LEFT JOIN `student` s on a.`user_id_` = s.`user_id_`
+		LEFT JOIN `sys_user` u on u.`id_` = s.`user_id_` 
+		WHERE u.`del_flag_` = 0 AND u.`organ_id_` IN
+        <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+    </select>
+
+    <select id="getOrganActiveCloudStudyStudentNum" resultType="com.ym.mec.biz.dal.dto.Mapper">
+        SELECT u.`organ_id_` `key`,count(a.user_id_) `value` FROM 
+		(
+		SELECT wd.`user_id_` FROM `sys_music_compare_week_data` wd  
+		WHERE wd.`train_time_` >= 3600 AND wd.`monday_` BETWEEN date(#{startTime}) and date(#{endTime})  GROUP BY `user_id_` HAVING count(*) >= 3
+		    ) a 
+		LEFT JOIN `student` s on a.`user_id_` = s.`user_id_`
+		LEFT JOIN `sys_user` u on u.`id_` = s.`user_id_` 
+		WHERE u.`del_flag_` = 0 AND u.`organ_id_` IN
+        <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+		GROUP BY u.`organ_id_` 
+    </select>
+
+    <select id="getCloudStudyStudentOverViewList" resultType="com.ym.mec.biz.dal.dto.IndexCloudStudyListDto">
+        SELECT o.`name_` organName,o.`id_` organId,count(s.`user_id_`) totalStudentNum,sum(case when a.user_id_ IS NULL then 0 else 1 end) vipStudentNum  FROM student s 
+		LEFT JOIN (
+		SELECT s.`user_id_`  FROM `student` s WHERE s.`membership_end_time_` > now()
+		union
+		SELECT cto.`student_id_`  FROM `cloud_teacher_order` cto WHERE cto.`status_` = 1
+		) a on a.user_id_ = s.`user_id_` 
+		LEFT JOIN `sys_user` u on s.`user_id_` = u.`id_`
+		LEFT JOIN `organization` o on o.`id_` = u.`organ_id_` 
+		WHERE u.`del_flag_` = 0 AND u.`organ_id_` IN
+        <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+		GROUP BY u.`organ_id_` 
     </select>
 
     <select id="getOrganCloudStudyLivelyStudentNum" resultType="map">

+ 1 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseHomeworkReplyController.java

@@ -68,6 +68,7 @@ public class TeacherCourseHomeworkReplyController extends BaseController {
             extracurricularExercisesMessage.setMsgType(studentCourseHomeworkReply.getMsgType());
             extracurricularExercisesMessage.setUserId(user.getId());
             extracurricularExercisesMessage.setRole("TEACHER");
+            extracurricularExercisesMessage.setStandardFlag(studentCourseHomeworkReply.getStandardFlag());
             extracurricularExercisesMessageService.addStudentExtraExerciseComment(extracurricularExercisesMessage);
         }
         return succeed();

+ 64 - 15
mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

@@ -1,18 +1,18 @@
 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.dto.*;
-import com.ym.mec.biz.dal.entity.Organization;
-import com.ym.mec.biz.dal.entity.Student;
-import com.ym.mec.biz.dal.page.*;
-import com.ym.mec.biz.service.*;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.exception.BizException;
-import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.common.page.QueryInfo;
-import io.swagger.annotations.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -24,8 +24,40 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.*;
-import java.util.stream.Collectors;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.ActivityCourseDetailDto;
+import com.ym.mec.biz.dal.dto.CloudStudyStudentDataDto;
+import com.ym.mec.biz.dal.dto.EduOrganStudentDataDto;
+import com.ym.mec.biz.dal.dto.IndexCloudStudyListDto;
+import com.ym.mec.biz.dal.dto.StatDto;
+import com.ym.mec.biz.dal.dto.UpdateStudentFeeDto;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.page.CloudTeacherActiveQueryInfo;
+import com.ym.mec.biz.dal.page.MusicGroupStudentQueryInfo;
+import com.ym.mec.biz.dal.page.OrganCloudStudyStudentDataQueryInfo;
+import com.ym.mec.biz.dal.page.StudentActivityQueryInfo;
+import com.ym.mec.biz.dal.page.StudentErrorLeaveQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageAttendanceQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageCourseQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageVipClassQueryInfo;
+import com.ym.mec.biz.dal.page.StudentOperatingQueryInfo;
+import com.ym.mec.biz.dal.page.StudentQueryInfo;
+import com.ym.mec.biz.dal.page.StudentSignQueryInfo;
+import com.ym.mec.biz.dal.page.TeacherPaymentRecordInfo;
+import com.ym.mec.biz.service.MusicGroupStudentFeeService;
+import com.ym.mec.biz.service.OrganizationService;
+import com.ym.mec.biz.service.StudentCourseHomeworkService;
+import com.ym.mec.biz.service.StudentManageService;
+import com.ym.mec.biz.service.StudentRegistrationService;
+import com.ym.mec.biz.service.StudentService;
+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;
 
 @Api(tags = "学生管理")
 @RestController
@@ -386,6 +418,23 @@ public class StudentManageController extends BaseController {
         return succeed(studentService.getCloudStudyStudentOverView(organIdsList));
     }
 
+    @ApiOperation(value = "云教练学员数据预览列表")
+    @GetMapping("/getCloudStudyStudentOverViewList")
+    //@PreAuthorize("@pcs.hasPermissions('studentManage/getCloudStudyStudentOverViewList')")
+    public HttpResponseResult<List<IndexCloudStudyListDto>> getCloudStudyStudentOverViewList(String organIds) throws Exception {
+        List<Integer> organIdsList;
+        if(StringUtils.isNotBlank(organIds)){
+            organIdsList = Arrays.stream(organIds.split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
+        }else{
+            List<Organization> organizations = organizationService.queryEmployeeOrgan();
+            if(CollectionUtils.isEmpty(organizations)){
+                return succeed();
+            }
+            organIdsList = organizations.stream().map(Organization::getId).collect(Collectors.toList());
+        }
+        return succeed(studentService.getCloudStudyStudentOverViewList(organIdsList));
+    }
+
     @ApiOperation(value = "分部云教练学员数据预览")
     @GetMapping("/organStudentOverView")
     @PreAuthorize("@pcs.hasPermissions('studentManage/organStudentOverView')")

+ 19 - 0
mec-web/src/main/java/com/ym/mec/web/controller/StudentStatisticsController.java

@@ -15,6 +15,8 @@ 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.service.IdGeneratorService;
+import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -27,8 +29,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.io.IOException;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -46,6 +50,8 @@ public class StudentStatisticsController extends BaseController {
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private ExportService exportService;
+    @Autowired
+    private IdGeneratorService idGeneratorService;
 
     @ApiOperation(value = "分页查询收费类型列表")
     @PostMapping("/queryPage")
@@ -102,6 +108,19 @@ public class StudentStatisticsController extends BaseController {
             throw new BizException("没有可导出的记录");
         }
         ManagerDownload managerDownload = exportService.saveManagerDownload(ExportTypeEnum.STUDENT_SMALL_CLASS_STATISTICS,sysUser.getId());
+        String name = "网管课学员统计";
+        if(Objects.equals(queryInfo.getGroupType(),"VIP")){
+            name = "VIP课学员统计";
+        }else if(Objects.equals(queryInfo.getGroupType(),"THEORY")){
+            name = "乐理课学员统计";
+        }
+        String fileName = new StringBuffer(name)
+                .append("-")
+                .append(idGeneratorService.generatorId("download"))
+                .append("-")
+                .append(DateUtil.getDate(new Date()))
+                .append(".xls").toString();
+        managerDownload.setName(fileName);
         ExecutorService executor = Executors.newCachedThreadPool();
         CompletableFuture.runAsync(()->{
             try {