浏览代码

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

zouxuan 3 年之前
父节点
当前提交
14965dd28c
共有 21 个文件被更改,包括 619 次插入45 次删除
  1. 3 3
      codegen/src/main/resources/generateConfigration.xml
  2. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  3. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStatisticsDao.java
  4. 28 12
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupCourseScheduleDto.java
  5. 157 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleStatistics.java
  6. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentAttendance.java
  7. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportTypeEnum.java
  8. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/queryMusicGroupCourseScheduleQueryInfo.java
  9. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  10. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleStatisticsService.java
  11. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java
  12. 9 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  13. 7 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java
  14. 49 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStatisticsServiceImpl.java
  15. 40 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  16. 46 8
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  17. 160 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStatisticsMapper.xml
  18. 2 2
      mec-biz/src/main/resources/config/mybatis/StudentBasicInfoMapper.xml
  19. 15 8
      mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java
  20. 25 0
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  21. 4 0
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

+ 3 - 3
codegen/src/main/resources/generateConfigration.xml

@@ -2,11 +2,11 @@
 <GenerateConfiguration>
 <GenerateConfiguration>
 	<dbConfiguration>
 	<dbConfiguration>
 		<driverClass>com.mysql.jdbc.Driver</driverClass>
 		<driverClass>com.mysql.jdbc.Driver</driverClass>
-		<url>jdbc:mysql://47.114.1.200:3306/mec_dev</url>
+		<url>jdbc:mysql://47.114.176.40:3306/mec_test</url>
 		<username>mec_dev</username>
 		<username>mec_dev</username>
 		<password>dayaDataOnline@2019</password>
 		<password>dayaDataOnline@2019</password>
-		<catalog>mec_dev</catalog>
-		<schema>mec_dev</schema>
+		<catalog>mec_test</catalog>
+		<schema>mec_test</schema>
 	</dbConfiguration>
 	</dbConfiguration>
 	<srcBase>/Users/chenxiaoyu/Documents/javabean</srcBase>
 	<srcBase>/Users/chenxiaoyu/Documents/javabean</srcBase>
 	<pojoPackageName>com.ym.mec.biz.dal.entity</pojoPackageName>
 	<pojoPackageName>com.ym.mec.biz.dal.entity</pojoPackageName>

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Set;
 import java.util.Set;
 
 
+import com.ym.mec.biz.dal.entity.CourseScheduleStatistics;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
 import com.ym.mec.biz.dal.dto.ClassGroupTeachersDto;
 import com.ym.mec.biz.dal.dto.ClassGroupTeachersDto;
@@ -432,6 +433,14 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     List<MusicGroupCourseScheduleDto> queryMusicGroupCourseScheduleDetail(Map<String, Object> params);
     List<MusicGroupCourseScheduleDto> queryMusicGroupCourseScheduleDetail(Map<String, Object> params);
 
 
     /**
     /**
+     * 获取乐团详情---课表详情列表
+     *
+     * @param params
+     * @return
+     */
+    CourseScheduleStatistics getMusicGroupCourseScheduleStatistics(Map<String, Object> params);
+
+    /**
      * COUNT乐团详情---课表详情列表
      * COUNT乐团详情---课表详情列表
      *
      *
      * @param params
      * @param params

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

@@ -0,0 +1,23 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.biz.dal.entity.CourseScheduleStatistics;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface CourseScheduleStatisticsDao extends BaseDAO<Long, CourseScheduleStatistics> {
+
+
+    //获取需要更新的课程统计信息
+    List<CourseScheduleStatistics> queryUpdateCourseScheduleStatistics();
+
+    //获取需要新增的课程统计信息
+    List<CourseScheduleStatistics> queryInsertCourseScheduleStatistics();
+
+    void batchUpdate(@Param("scheduleStatisticsList") List<CourseScheduleStatistics> scheduleStatisticsList);
+
+    void batchInsert(@Param("scheduleStatisticsList") List<CourseScheduleStatistics> scheduleStatisticsList);
+
+    void delWaitByCourseId(@Param("courseIdList") List<Long> courseIdList);
+}

+ 28 - 12
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupCourseScheduleDto.java

@@ -1,6 +1,11 @@
 package com.ym.mec.biz.dal.dto;
 package com.ym.mec.biz.dal.dto;
 
 
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.CourseScheduleStatistics;
 import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
 import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
+import com.ym.mec.biz.dal.enums.SignInStatusEnum;
+import com.ym.mec.biz.dal.enums.SignOutStatusEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 
 
@@ -44,22 +49,22 @@ public class MusicGroupCourseScheduleDto {
     private String classGroupName;
     private String classGroupName;
 
 
     @ApiModelProperty(value = "课程类型",required = false)
     @ApiModelProperty(value = "课程类型",required = false)
-    private String courseScheduleType;
+    private CourseSchedule.CourseScheduleType courseScheduleType;
 
 
     @ApiModelProperty(value = "课程状态",required = false)
     @ApiModelProperty(value = "课程状态",required = false)
-    private String courseScheduleStatus;
+    private CourseStatusEnum courseScheduleStatus;
 
 
     @ApiModelProperty(value = "签到时间")
     @ApiModelProperty(value = "签到时间")
     private Date signInTime;
     private Date signInTime;
 
 
     @ApiModelProperty(value = "签到状态",required = false)
     @ApiModelProperty(value = "签到状态",required = false)
-    private String signInStatus;
+    private SignInStatusEnum signInStatus;
 
 
     @ApiModelProperty(value = "签退时间")
     @ApiModelProperty(value = "签退时间")
     private Date signOutTime;
     private Date signOutTime;
 
 
     @ApiModelProperty(value = "签退状态",required = false)
     @ApiModelProperty(value = "签退状态",required = false)
-    private String signOutStatus;
+    private SignOutStatusEnum signOutStatus;
 
 
     @ApiModelProperty(value = "结算时间",required = false)
     @ApiModelProperty(value = "结算时间",required = false)
     private Date settlementTime;
     private Date settlementTime;
@@ -83,6 +88,17 @@ public class MusicGroupCourseScheduleDto {
     
     
     private Integer schoolId;
     private Integer schoolId;
 
 
+    @ApiModelProperty(value = "课程相关统计数据")
+    private CourseScheduleStatistics courseScheduleStatistics;
+
+    public CourseScheduleStatistics getCourseScheduleStatistics() {
+        return courseScheduleStatistics;
+    }
+
+    public void setCourseScheduleStatistics(CourseScheduleStatistics courseScheduleStatistics) {
+        this.courseScheduleStatistics = courseScheduleStatistics;
+    }
+
     public YesOrNoEnum getIsCallNames() {
     public YesOrNoEnum getIsCallNames() {
         return isCallNames;
         return isCallNames;
     }
     }
@@ -227,35 +243,35 @@ public class MusicGroupCourseScheduleDto {
         this.classGroupName = classGroupName;
         this.classGroupName = classGroupName;
     }
     }
 
 
-    public String getCourseScheduleType() {
+    public CourseSchedule.CourseScheduleType getCourseScheduleType() {
         return courseScheduleType;
         return courseScheduleType;
     }
     }
 
 
-    public void setCourseScheduleType(String courseScheduleType) {
+    public void setCourseScheduleType(CourseSchedule.CourseScheduleType courseScheduleType) {
         this.courseScheduleType = courseScheduleType;
         this.courseScheduleType = courseScheduleType;
     }
     }
 
 
-    public String getCourseScheduleStatus() {
+    public CourseStatusEnum getCourseScheduleStatus() {
         return courseScheduleStatus;
         return courseScheduleStatus;
     }
     }
 
 
-    public void setCourseScheduleStatus(String courseScheduleStatus) {
+    public void setCourseScheduleStatus(CourseStatusEnum courseScheduleStatus) {
         this.courseScheduleStatus = courseScheduleStatus;
         this.courseScheduleStatus = courseScheduleStatus;
     }
     }
 
 
-    public String getSignInStatus() {
+    public SignInStatusEnum getSignInStatus() {
         return signInStatus;
         return signInStatus;
     }
     }
 
 
-    public void setSignInStatus(String signInStatus) {
+    public void setSignInStatus(SignInStatusEnum signInStatus) {
         this.signInStatus = signInStatus;
         this.signInStatus = signInStatus;
     }
     }
 
 
-    public String getSignOutStatus() {
+    public SignOutStatusEnum getSignOutStatus() {
         return signOutStatus;
         return signOutStatus;
     }
     }
 
 
-    public void setSignOutStatus(String signOutStatus) {
+    public void setSignOutStatus(SignOutStatusEnum signOutStatus) {
         this.signOutStatus = signOutStatus;
         this.signOutStatus = signOutStatus;
     }
     }
 
 

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

@@ -0,0 +1,157 @@
+package com.ym.mec.biz.dal.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(course_schedule_statistics):
+ */
+public class CourseScheduleStatistics {
+
+	/** 课程编号 */
+	@ApiModelProperty(value = "课程编号")
+	private Long courseScheduleId;
+	
+	/** 乐团编号 */
+	@ApiModelProperty(value = "乐团编号")
+	private String musicGroupId;
+	
+	/** 学员总数 */
+	@ApiModelProperty(value = "学员总数")
+	private Integer courseStudentTotalNum;
+	
+	/** 考勤正常人数 */
+	@ApiModelProperty(value = "考勤正常人数")
+	private Integer attendanceNum;
+	
+	/** 迟到人数 */
+	@ApiModelProperty(value = "迟到人数")
+	private Integer lateNum;
+	
+	/** 达标人数 */
+	@ApiModelProperty(value = "达标人数")
+	private Integer standardNum;
+	
+	/** 是否布置作业 */
+	@ApiModelProperty(value = "是否布置作业")
+	private boolean homeworkFlag;
+	
+	/** 提交作业人数 */
+	@ApiModelProperty(value = "提交作业人数")
+	private Integer homeworkCommitNum;
+	
+	/** 是否服务 */
+	@ApiModelProperty(value = "是否服务")
+	private boolean serviceFlag;
+
+	@ApiModelProperty(value = "出勤率")
+	private String attendanceRate;
+
+	@ApiModelProperty(value = "达标率")
+	private String standardRate;
+
+	@ApiModelProperty(value = "作业提交率")
+	private String homeworkCommitRate;
+
+	public String getAttendanceRate() {
+		return attendanceRate;
+	}
+
+	public void setAttendanceRate(String attendanceRate) {
+		this.attendanceRate = attendanceRate;
+	}
+
+	public String getStandardRate() {
+		return standardRate;
+	}
+
+	public void setStandardRate(String standardRate) {
+		this.standardRate = standardRate;
+	}
+
+	public String getHomeworkCommitRate() {
+		return homeworkCommitRate;
+	}
+
+	public void setHomeworkCommitRate(String homeworkCommitRate) {
+		this.homeworkCommitRate = homeworkCommitRate;
+	}
+
+	public void setCourseScheduleId(Long courseScheduleId){
+		this.courseScheduleId = courseScheduleId;
+	}
+	
+	public Long getCourseScheduleId(){
+		return this.courseScheduleId;
+	}
+			
+	public void setMusicGroupId(String musicGroupId){
+		this.musicGroupId = musicGroupId;
+	}
+	
+	public String getMusicGroupId(){
+		return this.musicGroupId;
+	}
+			
+	public void setCourseStudentTotalNum(Integer courseStudentTotalNum){
+		this.courseStudentTotalNum = courseStudentTotalNum;
+	}
+	
+	public Integer getCourseStudentTotalNum(){
+		return this.courseStudentTotalNum;
+	}
+			
+	public void setAttendanceNum(Integer attendanceNum){
+		this.attendanceNum = attendanceNum;
+	}
+	
+	public Integer getAttendanceNum(){
+		return this.attendanceNum;
+	}
+			
+	public void setLateNum(Integer lateNum){
+		this.lateNum = lateNum;
+	}
+	
+	public Integer getLateNum(){
+		return this.lateNum;
+	}
+			
+	public void setStandardNum(Integer standardNum){
+		this.standardNum = standardNum;
+	}
+	
+	public Integer getStandardNum(){
+		return this.standardNum;
+	}
+			
+	public void setHomeworkFlag(boolean homeworkFlag){
+		this.homeworkFlag = homeworkFlag;
+	}
+	
+	public boolean isHomeworkFlag(){
+		return this.homeworkFlag;
+	}
+			
+	public void setHomeworkCommitNum(Integer homeworkCommitNum){
+		this.homeworkCommitNum = homeworkCommitNum;
+	}
+	
+	public Integer getHomeworkCommitNum(){
+		return this.homeworkCommitNum;
+	}
+			
+	public void setServiceFlag(boolean serviceFlag){
+		this.serviceFlag = serviceFlag;
+	}
+	
+	public boolean isServiceFlag(){
+		return this.serviceFlag;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

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

@@ -98,7 +98,7 @@ public class StudentAttendance extends BaseEntity {
 	private int normalRemind;
 	private int normalRemind;
 
 
 	@ApiModelProperty(value = "是否达标1是0否")
 	@ApiModelProperty(value = "是否达标1是0否")
-	private Integer qualifiedFlag = 1;
+	private Integer qualifiedFlag = 0;
 
 
 	public Integer getQualifiedFlag() {
 	public Integer getQualifiedFlag() {
 		return qualifiedFlag;
 		return qualifiedFlag;

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

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

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/queryMusicGroupCourseScheduleQueryInfo.java

@@ -26,6 +26,28 @@ public class queryMusicGroupCourseScheduleQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "是否结算",required = false)
     @ApiModelProperty(value = "是否结算",required = false)
     private Integer isSettlement;
     private Integer isSettlement;
 
 
+    @ApiModelProperty(value = "是否服务",required = false)
+    private Boolean serviceFlag;
+
+    @ApiModelProperty(value = "是否布置作业",required = false)
+    private Boolean homeworkFlag;
+
+    public Boolean getServiceFlag() {
+        return serviceFlag;
+    }
+
+    public void setServiceFlag(Boolean serviceFlag) {
+        this.serviceFlag = serviceFlag;
+    }
+
+    public Boolean getHomeworkFlag() {
+        return homeworkFlag;
+    }
+
+    public void setHomeworkFlag(Boolean homeworkFlag) {
+        this.homeworkFlag = homeworkFlag;
+    }
+
     public Integer getIsSettlement() {
     public Integer getIsSettlement() {
         return isSettlement;
         return isSettlement;
     }
     }

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

@@ -586,4 +586,6 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
     void cancelPreCourseSchedule(Integer musicGroupSchoolTermCourseDetailId, Integer classGroupId);
     void cancelPreCourseSchedule(Integer musicGroupSchoolTermCourseDetailId, Integer classGroupId);
 
 
     List<ClassGroup> queryStudentClassGroupsAndTeacher(String musicGroupId);
     List<ClassGroup> queryStudentClassGroupsAndTeacher(String musicGroupId);
+
+    CourseScheduleStatistics getMusicGroupCourseScheduleStatistics(queryMusicGroupCourseScheduleQueryInfo queryInfo);
 }
 }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleStatisticsService.java

@@ -0,0 +1,12 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.CourseScheduleStatistics;
+import com.ym.mec.common.service.BaseService;
+
+import java.util.List;
+
+public interface CourseScheduleStatisticsService extends BaseService<Long, CourseScheduleStatistics> {
+
+    //更新乐团课统计信息
+    void courseScheduleStatistics();
+}

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.enums.ExportEnum;
 import com.ym.mec.biz.dal.enums.ExportTypeEnum;
 import com.ym.mec.biz.dal.enums.ExportTypeEnum;
 import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentStatisticsQueryInfo;
 import com.ym.mec.biz.dal.page.StudentStatisticsQueryInfo;
+import com.ym.mec.biz.dal.page.queryMusicGroupCourseScheduleQueryInfo;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.HttpResponseResult;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Async;
 
 
@@ -289,4 +290,6 @@ public interface ExportService {
     void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws FileNotFoundException;
     void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws FileNotFoundException;
 
 
     void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException;
     void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException;
+
+    void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException;
 }
 }

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

@@ -160,7 +160,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     @Autowired
     @Autowired
     private MusicGroupSchoolTermCourseDetailDao musicGroupSchoolTermCourseDetailDao;
     private MusicGroupSchoolTermCourseDetailDao musicGroupSchoolTermCourseDetailDao;
     @Autowired
     @Autowired
-    private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao;
+    private CourseScheduleStatisticsService courseScheduleStatisticsService;
 
 
     @Override
     @Override
     public BaseDAO<Integer, ClassGroup> getDAO() {
     public BaseDAO<Integer, ClassGroup> getDAO() {
@@ -603,7 +603,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             classGroupTeacherMapperService.classGroupTeachersInsert(classGroupTeacherMapperList);
             classGroupTeacherMapperService.classGroupTeachersInsert(classGroupTeacherMapperList);
             // 检测新排课冲突
             // 检测新排课冲突
             courseScheduleService.checkNewCourseSchedules(courseScheduleList, false, false);
             courseScheduleService.checkNewCourseSchedules(courseScheduleList, false, false);
-            courseScheduleDao.batchAddCourseSchedules(courseScheduleList);
+            courseScheduleService.batchAddCourseSchedule(courseScheduleList);
         } finally {
         } finally {
             redisCache.releaseLocked(key, value);
             redisCache.releaseLocked(key, value);
         }
         }
@@ -3405,6 +3405,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     }
     }
 
 
     @Override
     @Override
+    public CourseScheduleStatistics getMusicGroupCourseScheduleStatistics(queryMusicGroupCourseScheduleQueryInfo queryInfo) {
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+        return classGroupDao.getMusicGroupCourseScheduleStatistics(params);
+    }
+
+    @Override
     public PageInfo<MusicGroupCourseScheduleDto> queryMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo) {
     public PageInfo<MusicGroupCourseScheduleDto> queryMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo) {
         PageInfo<MusicGroupCourseScheduleDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         PageInfo<MusicGroupCourseScheduleDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<>();
         Map<String, Object> params = new HashMap<>();

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

@@ -181,13 +181,13 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
         organList.put("91420106333619290A", "2,武汉长乐长风乐器销售有限公司");
         organList.put("91420106333619290A", "2,武汉长乐长风乐器销售有限公司");
         organList.put("91440300326364429H", "1,深圳大雅乐盟网络教育股份有限公司");
         organList.put("91440300326364429H", "1,深圳大雅乐盟网络教育股份有限公司");
 
 
-        organList.forEach((code, name) -> {
-            SysUserTsign sysUserTsign = sysUserTsignService.queryByCardNo(code);
-            if (Objects.isNull(sysUserTsign)) {
-                String[] nameSplit = name.split(",");
-                addTsign(Integer.parseInt(nameSplit[0]), code, nameSplit[1], 1);
-            }
-        });
+//        organList.forEach((code, name) -> {
+//            SysUserTsign sysUserTsign = sysUserTsignService.queryByCardNo(code);
+//            if (Objects.isNull(sysUserTsign)) {
+//                String[] nameSplit = name.split(",");
+//                addTsign(Integer.parseInt(nameSplit[0]), code, nameSplit[1], 1);
+//            }
+//        });
     }
     }
 
 
     /**
     /**

+ 49 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStatisticsServiceImpl.java

@@ -0,0 +1,49 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.CourseScheduleStatisticsDao;
+import com.ym.mec.biz.dal.entity.CourseScheduleStatistics;
+import com.ym.mec.biz.service.CourseScheduleStatisticsService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class CourseScheduleStatisticsServiceImpl extends BaseServiceImpl<Long, CourseScheduleStatistics>  implements CourseScheduleStatisticsService {
+	
+	@Autowired
+	private CourseScheduleStatisticsDao courseScheduleStatisticsDao;
+
+	@Override
+	public BaseDAO<Long, CourseScheduleStatistics> getDAO() {
+		return courseScheduleStatisticsDao;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void courseScheduleStatistics() {
+		List<Long> delCourseId = new ArrayList<>();
+		List<CourseScheduleStatistics> updateCourseScheduleStatisticsList = courseScheduleStatisticsDao.queryUpdateCourseScheduleStatistics();
+		if(CollectionUtils.isNotEmpty(updateCourseScheduleStatisticsList)){
+			courseScheduleStatisticsDao.batchUpdate(updateCourseScheduleStatisticsList);
+			delCourseId.addAll(updateCourseScheduleStatisticsList.stream().map(e -> e.getCourseScheduleId()).collect(Collectors.toList()));
+		}
+//		List<CourseScheduleStatistics> insertCourseScheduleStatisticsList = courseScheduleStatisticsDao.queryInsertCourseScheduleStatistics();
+//		if(CollectionUtils.isNotEmpty(insertCourseScheduleStatisticsList)){
+//			courseScheduleStatisticsDao.batchInsert(insertCourseScheduleStatisticsList);
+//			delCourseId.addAll(insertCourseScheduleStatisticsList.stream().map(e -> e.getCourseScheduleId()).collect(Collectors.toList()));
+//		}
+		delCourseId.removeAll(Collections.singleton(null));
+		if(CollectionUtils.isNotEmpty(delCourseId)){
+			courseScheduleStatisticsDao.delWaitByCourseId(delCourseId);
+		}
+	}
+}

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

@@ -347,7 +347,6 @@ public class ExportServiceImpl implements ExportService {
         exportManageFuncMap.put(ExportEnum.STUDENT_VIP_COURSE_INFO, (info,headColumns) -> exportStudentVipCourseInfo(info,headColumns));
         exportManageFuncMap.put(ExportEnum.STUDENT_VIP_COURSE_INFO, (info,headColumns) -> exportStudentVipCourseInfo(info,headColumns));
         exportManageFuncMap.put(ExportEnum.STUDENT_MUSIC_THEORY_COURSE_INFO, (info,headColumns) -> exportStudentMusicTheoryCourseInfo(info,headColumns));
         exportManageFuncMap.put(ExportEnum.STUDENT_MUSIC_THEORY_COURSE_INFO, (info,headColumns) -> exportStudentMusicTheoryCourseInfo(info,headColumns));
         exportManageFuncMap.put(ExportEnum.VIP_STUDENT_COURSE_MANAGE, (info,headColumns) -> exportVipStudentCourseManage(info,headColumns));
         exportManageFuncMap.put(ExportEnum.VIP_STUDENT_COURSE_MANAGE, (info,headColumns) -> exportVipStudentCourseManage(info,headColumns));
-
     }
     }
 
 
     //导出对账单
     //导出对账单
@@ -3159,4 +3158,44 @@ public class ExportServiceImpl implements ExportService {
             }
             }
         }
         }
     }
     }
+
+    @Override
+    public void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException {
+        List<MusicGroupCourseScheduleDto> rows = classGroupService.queryMusicGroupCourseScheduleDetail(queryInfo).getRows();
+        String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
+        File file = new File(basePath + "/" + managerDownload.getName());
+        FileOutputStream fileOutputStream = new FileOutputStream(file);
+        OutputStream ouputStream = null;
+        try {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"课程编号", "课程开始时间", "课程结束时间", "课程名称","课程类型", "课程状态", "老师签到", "老师签退", "指导老师",
+                            "出勤率", "达标率", "是否服务", "是否布置课后作业", "作业提交率", "结算状态", "是否点名", "备注"},
+                    new String[]{"courseScheduleId", "classDate + ' ' + startClassTime", "classDate + ' ' + endClassTime",
+                            "courseScheduleName","courseScheduleType.msg", "courseScheduleStatus.msg", "signInStatus.msg",
+                            "signOutStatus.msg","masterTeacherName",
+                            "courseScheduleStatistics.attendanceRate","courseScheduleStatistics.standardRate",
+                            "courseScheduleStatistics.serviceFlag == false ? '否':'是'","courseScheduleStatistics.homeworkFlag == false ? '否':'是'","courseScheduleStatistics.homeworkCommitRate",
+                            "settlementTime == null?'未结算':'已结算'", "isCallNames.msg", "remark"}, rows);
+
+            workbook.write(fileOutputStream);
+            fileOutputStream.getFD().sync();
+            fileOutputStream.close();
+
+            String folder = "download/" + UploadUtil.getFileFloder();
+            String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, folder, file);
+            //把记录插入下载表
+            managerDownload.setFileUrl(url);
+            managerDownload.setStatus(1);
+            managerDownloadDao.update(managerDownload);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (ouputStream != null) {
+                try {
+                    ouputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
 }
 }

+ 46 - 8
mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml

@@ -883,10 +883,10 @@
                 AND cs.class_date_ &lt;= #{endTime}
                 AND cs.class_date_ &lt;= #{endTime}
             </if>
             </if>
             <if test="musicGroupId != null">
             <if test="musicGroupId != null">
-                AND cg.music_group_id_ = #{musicGroupId}
+                AND cs.music_group_id_ = #{musicGroupId}
             </if>
             </if>
             <if test="classGroupId != null">
             <if test="classGroupId != null">
-                AND cg.id_ = #{classGroupId}
+                AND cs.class_group_id_ = #{classGroupId}
             </if>
             </if>
             <if test="isSettlement == 0">
             <if test="isSettlement == 0">
                 AND csts.settlement_time_ IS NULL
                 AND csts.settlement_time_ IS NULL
@@ -895,7 +895,13 @@
                 AND csts.settlement_time_ IS NOT NULL
                 AND csts.settlement_time_ IS NOT NULL
             </if>
             </if>
             <if test="tenantId != null">
             <if test="tenantId != null">
-                AND cg.tenant_id_ = #{tenantId}
+                AND cs.tenant_id_ = #{tenantId}
+            </if>
+            <if test="serviceFlag != null">
+                AND css.service_flag_ = #{serviceFlag}
+            </if>
+            <if test="homeworkFlag != null">
+                AND css.homework_flag_ = #{homeworkFlag}
             </if>
             </if>
         </where>
         </where>
     </sql>
     </sql>
@@ -909,16 +915,30 @@
         <result property="endClassTimeStr" column="end_class_time_"/>
         <result property="endClassTimeStr" column="end_class_time_"/>
         <result property="classGroupId" column="class_group_id_"/>
         <result property="classGroupId" column="class_group_id_"/>
         <result property="mixClassGroupId" column="mix_class_group_id_"/>
         <result property="mixClassGroupId" column="mix_class_group_id_"/>
-        <result property="courseScheduleType" column="course_schedule_type_"/>
-        <result property="courseScheduleStatus" column="course_schedule_status_"/>
+        <result property="courseScheduleType" column="course_schedule_type_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="courseScheduleStatus" column="course_schedule_status_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result property="signInTime" column="sign_in_time_"/>
         <result property="signInTime" column="sign_in_time_"/>
-        <result property="signInStatus" column="sign_in_status_"/>
+        <result property="signInStatus" column="sign_in_status_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result property="signOutTime" column="sign_out_time_"/>
         <result property="signOutTime" column="sign_out_time_"/>
-        <result property="signOutStatus" column="sign_out_status_"/>
+        <result property="signOutStatus" column="sign_out_status_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result property="settlementTime" column="settlement_time_"/>
         <result property="settlementTime" column="settlement_time_"/>
         <result property="remark" column="remark_"/>
         <result property="remark" column="remark_"/>
         <result property="courseScheduleName" column="course_schedule_name_"/>
         <result property="courseScheduleName" column="course_schedule_name_"/>
         <result property="schoolId" column="school_id_"/>
         <result property="schoolId" column="school_id_"/>
+        <association property="courseScheduleStatistics" javaType="com.ym.mec.biz.dal.entity.CourseScheduleStatistics">
+            <result column="course_schedule_id_" property="courseScheduleId" />
+            <result column="music_group_id_" property="musicGroupId" />
+            <result column="course_student_total_num_" property="courseStudentTotalNum" />
+            <result column="attendance_num_" property="attendanceNum" />
+            <result column="late_num_" property="lateNum" />
+            <result column="standard_num_" property="standardNum" />
+            <result column="homework_flag_" property="homeworkFlag" />
+            <result column="homework_commit_num_" property="homeworkCommitNum" />
+            <result column="service_flag_" property="serviceFlag" />
+            <result column="attendance_rate_" property="attendanceRate" />
+            <result column="standard_rate_" property="standardRate" />
+            <result column="homework_commit_rate_" property="homeworkCommitRate" />
+        </association>
     </resultMap>
     </resultMap>
     <select id="queryMusicGroupCourseSchedule" resultMap="MusicGroupCourseScheduleDto">
     <select id="queryMusicGroupCourseSchedule" resultMap="MusicGroupCourseScheduleDto">
         SELECT cs.id_ course_schedule_id_,cs.class_date_,cs.start_class_time_,cs.end_class_time_,cs.class_group_id_,
         SELECT cs.id_ course_schedule_id_,cs.class_date_,cs.start_class_time_,cs.end_class_time_,cs.class_group_id_,
@@ -952,10 +972,14 @@
         ta.sign_in_time_,
         ta.sign_in_time_,
         ta.sign_out_time_,
         ta.sign_out_time_,
         ta.remark_,
         ta.remark_,
-        cs.schoole_id_ school_id_
+        cs.schoole_id_ school_id_,
+        css.*,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_
         FROM course_schedule cs
         FROM course_schedule cs
         LEFT JOIN class_group cg ON cg.id_ = cs.class_group_id_
         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 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'
         LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_ AND csts.teacher_role_ = 'BISHOP'
         <include refid="queryMusicGroupCourseScheduleDetailSql"/>
         <include refid="queryMusicGroupCourseScheduleDetailSql"/>
         ORDER BY cs.class_date_ ,cs.start_class_time_ ,cg.name_
         ORDER BY cs.class_date_ ,cs.start_class_time_ ,cg.name_
@@ -967,8 +991,22 @@
         FROM course_schedule cs
         FROM course_schedule cs
         LEFT JOIN class_group cg ON cg.id_ = cs.class_group_id_
         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 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"/>
+    </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_
+        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'
         LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_ AND csts.teacher_role_ = 'BISHOP'
         <include refid="queryMusicGroupCourseScheduleDetailSql"/>
         <include refid="queryMusicGroupCourseScheduleDetailSql"/>
+        GROUP BY cs.music_group_id_
     </select>
     </select>
 
 
     <select id="findNameById" resultType="java.util.Map">
     <select id="findNameById" resultType="java.util.Map">

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

@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.ym.mec.biz.dal.dao.CourseScheduleStatisticsDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.CourseScheduleStatistics" id="CourseScheduleStatistics">
+		<result column="course_schedule_id_" property="courseScheduleId" />
+		<result column="music_group_id_" property="musicGroupId" />
+		<result column="course_student_total_num_" property="courseStudentTotalNum" />
+		<result column="attendance_num_" property="attendanceNum" />
+		<result column="late_num_" property="lateNum" />
+		<result column="standard_num_" property="standardNum" />
+		<result column="homework_flag_" property="homeworkFlag" />
+		<result column="homework_commit_num_" property="homeworkCommitNum" />
+		<result column="service_flag_" property="serviceFlag" />
+		<result column="attendance_rate_" property="attendanceRate" />
+		<result column="standard_rate_" property="standardRate" />
+		<result column="homework_commit_rate_" property="homeworkCommitRate" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="CourseScheduleStatistics" >
+		SELECT * FROM course_schedule_statistics WHERE course_schedule_id_ = #{courseScheduleId}
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="CourseScheduleStatistics">
+		SELECT * FROM course_schedule_statistics
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<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_)
+		                                        VALUES(#{courseScheduleId},#{musicGroupId},#{courseStudentTotalNum},#{attendanceNum},
+		                                               #{lateNum},#{standardNum},#{homeworkFlag},#{homeworkCommitNum},#{serviceFlag})
+	</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_) 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})
+		</foreach>
+	</insert>
+
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleStatistics">
+		UPDATE course_schedule_statistics <set>
+		<if test="homeworkFlag != null">
+		homework_flag_ = #{homeworkFlag},
+		</if>
+		<if test="attendanceNum != null">
+		attendance_num_ = #{attendanceNum},
+		</if>
+		<if test="serviceFlag != null">
+		service_flag_ = #{serviceFlag},
+		</if>
+		<if test="standardNum != null">
+		standard_num_ = #{standardNum},
+		</if>
+		<if test="homeworkCommitNum != null">
+		homework_commit_num_ = #{homeworkCommitNum},
+		</if>
+		<if test="courseStudentTotalNum != null">
+		course_student_total_num_ = #{courseStudentTotalNum},
+		</if>
+		<if test="lateNum != null">
+		late_num_ = #{lateNum},
+		</if>
+		<if test="musicGroupId != null">
+		music_group_id_ = #{musicGroupId},
+		</if>
+		</set> WHERE course_schedule_id_ = #{courseScheduleId}
+	</update>
+	<update id="batchUpdate">
+		<foreach collection="scheduleStatisticsList" item="item" index="index" open="" close="" separator=";">
+			UPDATE course_schedule_statistics
+			<set>
+			<if test="item.homeworkFlag != null">
+				homework_flag_ = #{item.homeworkFlag},
+			</if>
+			<if test="item.attendanceNum != null">
+				attendance_num_ = #{item.attendanceNum},
+			</if>
+			<if test="item.serviceFlag != null">
+				service_flag_ = #{item.serviceFlag},
+			</if>
+			<if test="item.standardNum != null">
+				standard_num_ = #{item.standardNum},
+			</if>
+			<if test="item.homeworkCommitNum != null">
+				homework_commit_num_ = #{item.homeworkCommitNum},
+			</if>
+			<if test="item.courseStudentTotalNum != null">
+				course_student_total_num_ = #{item.courseStudentTotalNum},
+			</if>
+			<if test="item.lateNum != null">
+				late_num_ = #{item.lateNum},
+			</if>
+		</set> WHERE course_schedule_id_ = #{item.courseScheduleId}
+		</foreach>
+	</update>
+
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM course_schedule_statistics WHERE course_schedule_id_ = #{courseScheduleId}
+	</delete>
+	<delete id="delWaitByCourseId">
+		DELETE FROM course_schedule_statistics_wait WHERE course_schedule_id_ IN
+		<foreach collection="courseIdList" item="courseId" separator="," open="(" close=")">
+			#{courseId}
+		</foreach>
+	</delete>
+
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="CourseScheduleStatistics" parameterType="map">
+		SELECT * FROM course_schedule_statistics <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		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_
+		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_
+				 LEFT JOIN course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cssw.course_schedule_id_
+				 LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cssw.course_schedule_id_
+				 LEFT JOIN student_course_homework sch ON sch.course_schedule_id_ = cssw.course_schedule_id_
+				 LEFT JOIN (SELECT DISTINCT course_ids_ FROM student_extracurricular_exercises_situation_ WHERE course_ids_ IS NOT NULL) sees ON FIND_IN_SET(cssw.course_schedule_id_,sees.course_ids_)
+		WHERE cs.group_type_ = 'MUSIC' AND css.course_schedule_id_ IS NOT NULL
+		GROUP BY cssw.course_schedule_id_;
+	</select>
+    <select id="queryInsertCourseScheduleStatistics" 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_
+		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_
+				 LEFT JOIN course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cssw.course_schedule_id_
+				 LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cssw.course_schedule_id_
+				 LEFT JOIN student_course_homework sch ON sch.course_schedule_id_ = cssw.course_schedule_id_
+				 LEFT JOIN (SELECT DISTINCT course_ids_ FROM student_extracurricular_exercises_situation_ WHERE course_ids_ IS NOT NULL) sees ON FIND_IN_SET(cssw.course_schedule_id_,sees.course_ids_)
+		WHERE cs.group_type_ = 'MUSIC' AND css.course_schedule_id_ IS NULL
+		GROUP BY cssw.course_schedule_id_;
+	</select>
+</mapper>

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

@@ -85,9 +85,9 @@
 
 
 	<!-- 根据主键删除一条记录 -->
 	<!-- 根据主键删除一条记录 -->
 	<delete id="delete" >
 	<delete id="delete" >
-		DELETE FROM student_basic_info WHERE user_id_ = #{userId} 
+		DELETE FROM student_basic_info WHERE user_id_ = #{userId}
 	</delete>
 	</delete>
-	
+
 	<!-- 分页查询 -->
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="StudentBasicInfo" parameterType="map">
 	<select id="queryPage" resultMap="StudentBasicInfo" parameterType="map">
 		SELECT * FROM student_basic_info ORDER BY user_id_ <include refid="global.limit"/>
 		SELECT * FROM student_basic_info ORDER BY user_id_ <include refid="global.limit"/>

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

@@ -3,14 +3,10 @@ package com.ym.mec.web.controller;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dto.ClassGroup4MixDto;
-import com.ym.mec.biz.dal.dto.HighClassGroupDto;
-import com.ym.mec.biz.dal.dto.MergeClassSplitClassAffirmDto;
-import com.ym.mec.biz.dal.dto.TestDto;
-import com.ym.mec.biz.dal.entity.ClassGroup;
-import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderStudentDetail;
+import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 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.GroupType;
 import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
 import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
 import com.ym.mec.biz.dal.page.ClassGroupQueryInfo;
 import com.ym.mec.biz.dal.page.ClassGroupQueryInfo;
@@ -21,6 +17,7 @@ import com.ym.mec.biz.service.ClassGroupTeacherMapperService;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 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.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.*;
 import io.swagger.annotations.*;
@@ -33,6 +30,9 @@ import org.springframework.web.bind.annotation.*;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 @RequestMapping("classGroup")
 @RequestMapping("classGroup")
@@ -169,10 +169,17 @@ public class ClassGroupController extends BaseController {
     @ApiOperation(value = "乐团详情--课表详情列表(课表详情)")
     @ApiOperation(value = "乐团详情--课表详情列表(课表详情)")
     @GetMapping("/queryMusicGroupCourseScheduleDetail")
     @GetMapping("/queryMusicGroupCourseScheduleDetail")
     @PreAuthorize("@pcs.hasPermissions('classGroup/queryMusicGroupCourseScheduleDetail')")
     @PreAuthorize("@pcs.hasPermissions('classGroup/queryMusicGroupCourseScheduleDetail')")
-    public HttpResponseResult queryMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo) {
+    public HttpResponseResult<PageInfo<MusicGroupCourseScheduleDto>> queryMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo) {
         return succeed(classGroupService.queryMusicGroupCourseScheduleDetail(queryInfo));
         return succeed(classGroupService.queryMusicGroupCourseScheduleDetail(queryInfo));
     }
     }
 
 
+    @ApiOperation(value = "乐团详情--课表详情列表(达标率统计数据)")
+    @GetMapping("/getMusicGroupCourseScheduleStatistics")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/getMusicGroupCourseScheduleStatistics')")
+    public HttpResponseResult<CourseScheduleStatistics> getMusicGroupCourseScheduleStatistics(queryMusicGroupCourseScheduleQueryInfo queryInfo) {
+        return succeed(classGroupService.getMusicGroupCourseScheduleStatistics(queryInfo));
+    }
+
     @ApiOperation(value = "乐团班级老师设置")
     @ApiOperation(value = "乐团班级老师设置")
     @PostMapping("/addClassGroupTeacher")
     @PostMapping("/addClassGroupTeacher")
     @ApiParam(value = "乐团班级老师json", required = true)
     @ApiParam(value = "乐团班级老师json", required = true)

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

@@ -182,6 +182,31 @@ public class ExportController extends BaseController {
         return exportService.getExportManageFuncMap().get(exportDto.getExportEnum()).apply(queryInfo,exportDto.getHeadColumns());
         return exportService.getExportManageFuncMap().get(exportDto.getExportEnum()).apply(queryInfo,exportDto.getHeadColumns());
     }
     }
 
 
+    @ApiOperation(value = "乐团详情--课表详情列表(课表详情)导出")
+    @GetMapping("export/exportMusicGroupCourseScheduleDetail")
+    @PreAuthorize("@pcs.hasPermissions('export/exportMusicGroupCourseScheduleDetail')")
+    public HttpResponseResult exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo) {
+        PageInfo<MusicGroupCourseScheduleDto> pageList = classGroupService.queryMusicGroupCourseScheduleDetail(queryInfo);
+        if (pageList.getTotal() <= 0) {
+            throw new BizException("没有可导出的记录");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        ManagerDownload managerDownload = exportService.saveManagerDownload(ExportTypeEnum.MUSIC_GROUP_COURSE_LIST,sysUser.getId());
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CompletableFuture.runAsync(()->{
+            try {
+                queryInfo.setPage(1);
+                queryInfo.setRows(65535);
+                exportService.exportMusicGroupCourseScheduleDetail(queryInfo, managerDownload);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        },executor);
+        HttpResponseResult<Object> succeed = succeed();
+        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
+        return succeed;
+    }
+
     @ApiOperation(value = "乐团列表导出")
     @ApiOperation(value = "乐团列表导出")
     @PostMapping("export/musicGroup")
     @PostMapping("export/musicGroup")
     @PreAuthorize("@pcs.hasPermissions('export/musicGroup')")
     @PreAuthorize("@pcs.hasPermissions('export/musicGroup')")

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

@@ -87,6 +87,8 @@ public class TaskController extends BaseController {
 	@Autowired
 	@Autowired
 	private CourseEventSource courseEventSource;
 	private CourseEventSource courseEventSource;
 	@Autowired
 	@Autowired
+	private CourseScheduleStatisticsService courseScheduleStatisticsService;
+	@Autowired
 	private RedisCache<String, Object> redisCache;
 	private RedisCache<String, Object> redisCache;
 	@Autowired
 	@Autowired
 	private IndexBaseMonthDataService indexBaseMonthDataService;
 	private IndexBaseMonthDataService indexBaseMonthDataService;
@@ -236,6 +238,8 @@ public class TaskController extends BaseController {
 		courseEventSource.courseStatusChange(courseIds);
 		courseEventSource.courseStatusChange(courseIds);
 		courseIds = courseScheduleService.updateCourseScheduleToUnderway();
 		courseIds = courseScheduleService.updateCourseScheduleToUnderway();
 		courseEventSource.courseStatusChange(courseIds);
 		courseEventSource.courseStatusChange(courseIds);
+		//更新乐团课统计信息
+		courseScheduleStatisticsService.courseScheduleStatistics();
 	}
 	}
 
 
 	@GetMapping("/updateVipGroupToFinishedStatus")
 	@GetMapping("/updateVipGroupToFinishedStatus")