Explorar el Código

乐团课程统计

zouxuan hace 3 años
padre
commit
2df2e9813f

+ 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.Set;
 
+import com.ym.mec.biz.dal.entity.CourseScheduleStatistics;
 import org.apache.ibatis.annotations.Param;
 
 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);
 
     /**
+     * 获取乐团详情---课表详情列表
+     *
+     * @param params
+     * @return
+     */
+    CourseScheduleStatistics getMusicGroupCourseScheduleStatistics(Map<String, Object> params);
+
+    /**
      * COUNT乐团详情---课表详情列表
      *
      * @param params

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

+ 42 - 10
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleStatistics.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 /**
@@ -7,44 +8,75 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
  */
 public class CourseScheduleStatistics {
 
-	/**  */
-	private Long id;
-	
 	/** 课程编号 */
+	@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;
-	
-	public void setId(Long id){
-		this.id = id;
+
+	@ApiModelProperty(value = "出勤率")
+	private String attendanceRate;
+
+	@ApiModelProperty(value = "达标率")
+	private String standardRate;
+
+	@ApiModelProperty(value = "作业提交率")
+	private String homeworkCommitRate;
+
+	public String getAttendanceRate() {
+		return attendanceRate;
 	}
-	
-	public Long getId(){
-		return this.id;
+
+	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;
 	}

+ 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课学员课程信息导出"),
 	VIP_STUDENT_COURSE_MANAGE(6, "vip学员课程管理"),
 	STUDENT_SMALL_CLASS_STATISTICS(7, "学员小课数据统计"),
-	ORDER_LIST_SUM(8, "订单汇总");
+	ORDER_LIST_SUM(8, "订单汇总"),
+	MUSIC_GROUP_COURSE_LIST(9, "乐团课表详情导出");
 
 	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)
     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() {
         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);
 
     List<ClassGroup> queryStudentClassGroupsAndTeacher(String musicGroupId);
+
+    CourseScheduleStatistics getMusicGroupCourseScheduleStatistics(queryMusicGroupCourseScheduleQueryInfo queryInfo);
 }

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

@@ -7,6 +7,6 @@ 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.page.EndCourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentStatisticsQueryInfo;
+import com.ym.mec.biz.dal.page.queryMusicGroupCourseScheduleQueryInfo;
 import com.ym.mec.common.entity.HttpResponseResult;
 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 exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException;
+
+    void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException;
 }

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

@@ -3405,6 +3405,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     }
 
     @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) {
         PageInfo<MusicGroupCourseScheduleDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<>();

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

@@ -36,11 +36,11 @@ public class CourseScheduleStatisticsServiceImpl extends BaseServiceImpl<Long, C
 			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()));
-		}
+//		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_MUSIC_THEORY_COURSE_INFO, (info,headColumns) -> exportStudentMusicTheoryCourseInfo(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}
             </if>
             <if test="musicGroupId != null">
-                AND cg.music_group_id_ = #{musicGroupId}
+                AND cs.music_group_id_ = #{musicGroupId}
             </if>
             <if test="classGroupId != null">
-                AND cg.id_ = #{classGroupId}
+                AND cs.class_group_id_ = #{classGroupId}
             </if>
             <if test="isSettlement == 0">
                 AND csts.settlement_time_ IS NULL
@@ -895,7 +895,13 @@
                 AND csts.settlement_time_ IS NOT NULL
             </if>
             <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>
         </where>
     </sql>
@@ -909,16 +915,30 @@
         <result property="endClassTimeStr" column="end_class_time_"/>
         <result property="classGroupId" column="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="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="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="remark" column="remark_"/>
         <result property="courseScheduleName" column="course_schedule_name_"/>
         <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>
     <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_,
@@ -952,10 +972,14 @@
         ta.sign_in_time_,
         ta.sign_out_time_,
         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
         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"/>
         ORDER BY cs.class_date_ ,cs.start_class_time_ ,cg.name_
@@ -967,8 +991,22 @@
         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"/>
+    </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'
         <include refid="queryMusicGroupCourseScheduleDetailSql"/>
+        GROUP BY cs.music_group_id_
     </select>
 
     <select id="findNameById" resultType="java.util.Map">

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

@@ -16,6 +16,9 @@
 		<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>
 	
 	<!-- 根据主键查询一条记录 -->

+ 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.ym.mec.auth.api.client.SysUserFeignService;
 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.ExportTypeEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
 import com.ym.mec.biz.dal.page.ClassGroupQueryInfo;
@@ -21,6 +17,7 @@ import com.ym.mec.biz.service.ClassGroupTeacherMapperService;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.*;
@@ -33,6 +30,9 @@ import org.springframework.web.bind.annotation.*;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
 @RequestMapping("classGroup")
@@ -169,10 +169,17 @@ public class ClassGroupController extends BaseController {
     @ApiOperation(value = "乐团详情--课表详情列表(课表详情)")
     @GetMapping("/queryMusicGroupCourseScheduleDetail")
     @PreAuthorize("@pcs.hasPermissions('classGroup/queryMusicGroupCourseScheduleDetail')")
-    public HttpResponseResult queryMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo) {
+    public HttpResponseResult<PageInfo<MusicGroupCourseScheduleDto>> queryMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo 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 = "乐团班级老师设置")
     @PostMapping("/addClassGroupTeacher")
     @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());
     }
 
+    @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 = "乐团列表导出")
     @PostMapping("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
 	private CourseEventSource courseEventSource;
 	@Autowired
+	private CourseScheduleStatisticsService courseScheduleStatisticsService;
+	@Autowired
 	private RedisCache<String, Object> redisCache;
 	@Autowired
 	private IndexBaseMonthDataService indexBaseMonthDataService;
@@ -236,6 +238,8 @@ public class TaskController extends BaseController {
 		courseEventSource.courseStatusChange(courseIds);
 		courseIds = courseScheduleService.updateCourseScheduleToUnderway();
 		courseEventSource.courseStatusChange(courseIds);
+		//更新乐团课统计信息
+		courseScheduleStatisticsService.courseScheduleStatistics();
 	}
 
 	@GetMapping("/updateVipGroupToFinishedStatus")