zouxuan před 3 roky
rodič
revize
aa9ed6a4ba

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentBasicInfoDao.java

@@ -0,0 +1,14 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.biz.dal.entity.StudentBasicInfo;
+import org.apache.ibatis.annotations.Param;
+
+public interface StudentBasicInfoDao extends BaseDAO<Integer, StudentBasicInfo> {
+
+
+    Integer getMaxId();
+
+    //更新声部班老师
+    void updateSubjectTeacher();
+}

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

@@ -0,0 +1,16 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.biz.dal.entity.StudentStatistics;
+
+public interface StudentStatisticsDao extends BaseDAO<Integer, StudentStatistics> {
+
+    //获取声部班老师
+    void querySubjectTeacher();
+
+    //更新乐团主管、指导老师
+    void updateTeacherAndEdu();
+
+    //更新总课时数、已完成、剩余课时数、最近30天课耗
+    void updateCourseNum();
+}

+ 147 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentBasicInfo.java

@@ -0,0 +1,147 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(student_basic_info):
+ */
+public class StudentBasicInfo {
+
+	/** 学员编号 */
+	private Integer userId;
+	
+	/** 学员姓名 */
+	private String userName;
+	
+	/** 手机号 */
+	private String phone;
+	
+	/** 声部编号 */
+	private Integer subjectId;
+	
+	/** 声部 */
+	private String subjectName;
+	
+	/** 年级 */
+	private String grade;
+	
+	/** 分部编号 */
+	private Integer organId;
+	
+	/** 分部名称 */
+	private String organName;
+	
+	/** 学校编号 */
+	private Integer cooperationOrganId;
+	
+	/** 学校名称 */
+	private String cooperationOrganName;
+	
+	/** 声部课老师(学员所在乐团声部班老师,如果有多个,取id最大的) */
+	private Integer subjectTeacherId;
+	
+	/** 声部课老师(学员所在乐团声部班老师) */
+	private String subjectTeacherName;
+	
+	public void setUserId(Integer userId){
+		this.userId = userId;
+	}
+	
+	public Integer getUserId(){
+		return this.userId;
+	}
+			
+	public void setUserName(String userName){
+		this.userName = userName;
+	}
+	
+	public String getUserName(){
+		return this.userName;
+	}
+			
+	public void setPhone(String phone){
+		this.phone = phone;
+	}
+	
+	public String getPhone(){
+		return this.phone;
+	}
+			
+	public void setSubjectId(Integer subjectId){
+		this.subjectId = subjectId;
+	}
+	
+	public Integer getSubjectId(){
+		return this.subjectId;
+	}
+			
+	public void setSubjectName(String subjectName){
+		this.subjectName = subjectName;
+	}
+	
+	public String getSubjectName(){
+		return this.subjectName;
+	}
+			
+	public void setGrade(String grade){
+		this.grade = grade;
+	}
+	
+	public String getGrade(){
+		return this.grade;
+	}
+			
+	public void setOrganId(Integer organId){
+		this.organId = organId;
+	}
+	
+	public Integer getOrganId(){
+		return this.organId;
+	}
+			
+	public void setOrganName(String organName){
+		this.organName = organName;
+	}
+	
+	public String getOrganName(){
+		return this.organName;
+	}
+			
+	public void setCooperationOrganId(Integer cooperationOrganId){
+		this.cooperationOrganId = cooperationOrganId;
+	}
+	
+	public Integer getCooperationOrganId(){
+		return this.cooperationOrganId;
+	}
+			
+	public void setCooperationOrganName(String cooperationOrganName){
+		this.cooperationOrganName = cooperationOrganName;
+	}
+	
+	public String getCooperationOrganName(){
+		return this.cooperationOrganName;
+	}
+			
+	public void setSubjectTeacherId(Integer subjectTeacherId){
+		this.subjectTeacherId = subjectTeacherId;
+	}
+	
+	public Integer getSubjectTeacherId(){
+		return this.subjectTeacherId;
+	}
+			
+	public void setSubjectTeacherName(String subjectTeacherName){
+		this.subjectTeacherName = subjectTeacherName;
+	}
+	
+	public String getSubjectTeacherName(){
+		return this.subjectTeacherName;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 270 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentStatistics.java

@@ -0,0 +1,270 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import java.math.BigDecimal;
+
+/**
+ * 对应数据库表(student_statistics):
+ */
+public class StudentStatistics {
+
+	/** 主键 */
+	private Integer id;
+	
+	/** 学员编号 */
+	private Integer userId;
+	
+	/** 指导老师编号(最近一节已结束课程上的老师) */
+	private Integer teacherId;
+	
+	/** 指导老师(最近一节已结束课程上的老师) */
+	private String teacherName;
+	
+	/** 乐团主管(最近一节已结束课程的课程组老师) */
+	private Integer musicDirectorId;
+	
+	/** 乐团主管(最近一节已结束课程的课程组老师) */
+	private String musicDirectorName;
+	
+	/** 总课时(课时总数) */
+	private Integer totalCourseNum;
+	
+	/** 已完成课时(已结束课时数) */
+	private Integer overCourseNum;
+	
+	/** 剩余课时(未开始课时数) */
+	private Integer subCourseNum;
+	
+	/** 未排课时(未排课时总数) */
+	private Integer noScheduleNum;
+	
+	/** 第一次课时间 */
+	private String firstCourseTime;
+	
+	/** 最近一次上课时间 */
+	private String lastCourseTime;
+	
+	/** 最近30天课耗(已结束的课程数量) */
+	private Integer latelyCourseConsumer;
+	
+	/** 回访次数 */
+	private Integer visitNum;
+	
+	/** 最近一次回访状态 */
+	private String lastVisitStatus;
+	
+	/** 最近一次回访原因 */
+	private String visitReason;
+	
+	/** 最近一次回访时间 */
+	private String lastVisitTime;
+	
+	/** 预收款(未开始课程价值总和) */
+	private java.math.BigDecimal notStartCourseFee;
+
+	/** 预收款(未排课 价值总和) */
+	private java.math.BigDecimal noCourseFee;
+	
+	/** 首次付费订单时间 */
+	private String firstOrderTime;
+	
+	/** 最近一次付费订单时间 */
+	private String lastOrderTime;
+	
+	/** 付费订单总数 */
+	private Integer orderNum;
+	
+	/** 课程组类型(VIP乐理网管) */
+	private String groupType;
+	
+	public void setId(Integer id){
+		this.id = id;
+	}
+	
+	public Integer getId(){
+		return this.id;
+	}
+			
+	public void setUserId(Integer userId){
+		this.userId = userId;
+	}
+	
+	public Integer getUserId(){
+		return this.userId;
+	}
+			
+	public void setTeacherId(Integer teacherId){
+		this.teacherId = teacherId;
+	}
+	
+	public Integer getTeacherId(){
+		return this.teacherId;
+	}
+			
+	public void setTeacherName(String teacherName){
+		this.teacherName = teacherName;
+	}
+	
+	public String getTeacherName(){
+		return this.teacherName;
+	}
+			
+	public void setMusicDirectorId(Integer musicDirectorId){
+		this.musicDirectorId = musicDirectorId;
+	}
+	
+	public Integer getMusicDirectorId(){
+		return this.musicDirectorId;
+	}
+			
+	public void setMusicDirectorName(String musicDirectorName){
+		this.musicDirectorName = musicDirectorName;
+	}
+	
+	public String getMusicDirectorName(){
+		return this.musicDirectorName;
+	}
+			
+	public void setTotalCourseNum(Integer totalCourseNum){
+		this.totalCourseNum = totalCourseNum;
+	}
+	
+	public Integer getTotalCourseNum(){
+		return this.totalCourseNum;
+	}
+			
+	public void setOverCourseNum(Integer overCourseNum){
+		this.overCourseNum = overCourseNum;
+	}
+	
+	public Integer getOverCourseNum(){
+		return this.overCourseNum;
+	}
+			
+	public void setSubCourseNum(Integer subCourseNum){
+		this.subCourseNum = subCourseNum;
+	}
+	
+	public Integer getSubCourseNum(){
+		return this.subCourseNum;
+	}
+			
+	public void setNoScheduleNum(Integer noScheduleNum){
+		this.noScheduleNum = noScheduleNum;
+	}
+	
+	public Integer getNoScheduleNum(){
+		return this.noScheduleNum;
+	}
+			
+	public void setFirstCourseTime(String firstCourseTime){
+		this.firstCourseTime = firstCourseTime;
+	}
+	
+	public String getFirstCourseTime(){
+		return this.firstCourseTime;
+	}
+			
+	public void setLastCourseTime(String lastCourseTime){
+		this.lastCourseTime = lastCourseTime;
+	}
+	
+	public String getLastCourseTime(){
+		return this.lastCourseTime;
+	}
+			
+	public void setLatelyCourseConsumer(Integer latelyCourseConsumer){
+		this.latelyCourseConsumer = latelyCourseConsumer;
+	}
+	
+	public Integer getLatelyCourseConsumer(){
+		return this.latelyCourseConsumer;
+	}
+			
+	public void setVisitNum(Integer visitNum){
+		this.visitNum = visitNum;
+	}
+	
+	public Integer getVisitNum(){
+		return this.visitNum;
+	}
+			
+	public void setLastVisitStatus(String lastVisitStatus){
+		this.lastVisitStatus = lastVisitStatus;
+	}
+	
+	public String getLastVisitStatus(){
+		return this.lastVisitStatus;
+	}
+			
+	public void setVisitReason(String visitReason){
+		this.visitReason = visitReason;
+	}
+	
+	public String getVisitReason(){
+		return this.visitReason;
+	}
+			
+	public void setLastVisitTime(String lastVisitTime){
+		this.lastVisitTime = lastVisitTime;
+	}
+	
+	public String getLastVisitTime(){
+		return this.lastVisitTime;
+	}
+
+	public BigDecimal getNotStartCourseFee() {
+		return notStartCourseFee;
+	}
+
+	public void setNotStartCourseFee(BigDecimal notStartCourseFee) {
+		this.notStartCourseFee = notStartCourseFee;
+	}
+
+	public BigDecimal getNoCourseFee() {
+		return noCourseFee;
+	}
+
+	public void setNoCourseFee(BigDecimal noCourseFee) {
+		this.noCourseFee = noCourseFee;
+	}
+
+	public void setFirstOrderTime(String firstOrderTime){
+		this.firstOrderTime = firstOrderTime;
+	}
+	
+	public String getFirstOrderTime(){
+		return this.firstOrderTime;
+	}
+			
+	public void setLastOrderTime(String lastOrderTime){
+		this.lastOrderTime = lastOrderTime;
+	}
+	
+	public String getLastOrderTime(){
+		return this.lastOrderTime;
+	}
+			
+	public void setOrderNum(Integer orderNum){
+		this.orderNum = orderNum;
+	}
+	
+	public Integer getOrderNum(){
+		return this.orderNum;
+	}
+			
+	public void setGroupType(String groupType){
+		this.groupType = groupType;
+	}
+	
+	public String getGroupType(){
+		return this.groupType;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 24 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentStatisticsService.java

@@ -0,0 +1,24 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.StudentStatistics;
+import com.ym.mec.common.service.BaseService;
+
+public interface StudentStatisticsService extends BaseService<Integer, StudentStatistics> {
+
+    void updateStudentStatistics();
+
+    /**
+     * 指导老师
+     * 乐团主管
+     * 总课时
+     * 剩余课时
+     * 未排课时
+     * 第一次上课时间
+     * 最近一次上课时间
+     * 最近30天课耗
+     * 回访次数
+     * 预收款
+     *
+    */
+
+}

+ 52 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentStatisticsServiceImpl.java

@@ -0,0 +1,52 @@
+package com.ym.mec.biz.service.impl;
+
+import com.google.common.collect.Lists;
+import com.ym.mec.biz.dal.dao.StudentBasicInfoDao;
+import com.ym.mec.biz.dal.dao.StudentStatisticsDao;
+import com.ym.mec.biz.dal.entity.StudentBasicInfo;
+import com.ym.mec.biz.dal.entity.StudentStatistics;
+import com.ym.mec.biz.service.StudentStatisticsService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, StudentStatistics>  implements StudentStatisticsService {
+	
+	@Autowired
+	private StudentStatisticsDao studentStatisticsDao;
+	@Autowired
+	private StudentBasicInfoDao studentBasicInfoDao;
+
+	@Override
+	public BaseDAO<Integer, StudentStatistics> getDAO() {
+		return studentStatisticsDao;
+	}
+
+	@Override
+	public void updateStudentStatistics() {
+		//更新声部班老师
+		studentBasicInfoDao.updateSubjectTeacher();
+		//更新乐团主管、指导老师
+		studentStatisticsDao.updateTeacherAndEdu();
+		//更新总课时数、已完成、剩余课时数、最近30天课耗
+		studentStatisticsDao.updateCourseNum();
+		//更新未排课总数
+
+
+		//获取学员列表
+		List<StudentBasicInfo> allStudentBasicInfoList = studentBasicInfoDao.findAll(new HashMap<>());
+		//切割学员列表
+		List<List<StudentBasicInfo>> partition = Lists.partition(allStudentBasicInfoList, 2000);
+		for (List<StudentBasicInfo> studentBasicInfoList : partition) {
+			List<Integer> studentIds = studentBasicInfoList.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+			//获取声部班老师
+//			studentStatisticsDao.querySubjectTeacher(studentIds);
+		}
+	}
+}

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

@@ -0,0 +1,114 @@
+<?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.StudentBasicInfoDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.StudentBasicInfo" id="StudentBasicInfo">
+		<result column="user_id_" property="userId" />
+		<result column="user_name_" property="userName" />
+		<result column="phone_" property="phone" />
+		<result column="subject_id_" property="subjectId" />
+		<result column="subject_name_" property="subjectName" />
+		<result column="grade_" property="grade" />
+		<result column="organ_id_" property="organId" />
+		<result column="organ_name_" property="organName" />
+		<result column="cooperation_organ_id_" property="cooperationOrganId" />
+		<result column="cooperation_organ_name_" property="cooperationOrganName" />
+		<result column="subject_teacher_id_" property="subjectTeacherId" />
+		<result column="subject_teacher_name_" property="subjectTeacherName" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="StudentBasicInfo" >
+		SELECT * FROM student_basic_info WHERE user_id_ = #{userId} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="StudentBasicInfo">
+		SELECT * FROM student_basic_info ORDER BY user_id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentBasicInfo" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO student_basic_info (user_id_,user_name_,phone_,subject_id_,subject_name_,grade_,organ_id_,organ_name_,cooperation_organ_id_,cooperation_organ_name_,subject_teacher_id_,subject_teacher_name_) VALUES(#{userId},#{userName},#{phone},#{subjectId},#{subjectName},#{grade},#{organId},#{organName},#{cooperationOrganId},#{cooperationOrganName},#{subjectTeacherId},#{subjectTeacherName})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentBasicInfo">
+		UPDATE student_basic_info <set>
+			<if test="subjectId != null">
+			subject_id_ = #{subjectId},
+			</if>
+			<if test="subjectName != null">
+			subject_name_ = #{subjectName},
+			</if>
+			<if test="userId != null">
+			user_id_ = #{userId},
+			</if>
+			<if test="organId != null">
+			organ_id_ = #{organId},
+			</if>
+			<if test="subjectTeacherId != null">
+			subject_teacher_id_ = #{subjectTeacherId},
+			</if>
+			<if test="userName != null">
+			user_name_ = #{userName},
+			</if>
+			<if test="cooperationOrganId != null">
+			cooperation_organ_id_ = #{cooperationOrganId},
+			</if>
+			<if test="organName != null">
+			organ_name_ = #{organName},
+			</if>
+			<if test="phone != null">
+			phone_ = #{phone},
+			</if>
+			<if test="cooperationOrganName != null">
+			cooperation_organ_name_ = #{cooperationOrganName},
+			</if>
+			<if test="grade != null">
+			grade_ = #{grade},
+			</if>
+			<if test="subjectTeacherName != null">
+			subject_teacher_name_ = #{subjectTeacherName},
+			</if>
+		</set> WHERE user_id_ = #{userId}
+	</update>
+	<update id="updateSubjectTeacher">
+		UPDATE (
+		SELECT cgsm.user_id_,cgtm.user_id_ teacher_id_ FROM class_group cg
+		LEFT JOIN class_group_student_mapper cgsm ON cgsm.class_group_id_ = cg.id_
+		LEFT JOIN class_group_teacher_mapper cgtm ON cgtm.class_group_id_ = cg.id_
+		WHERE cg.type_ = 'NORMAL' AND cgsm.status_ = 'NORMAL' AND cg.del_flag_ = 0 AND cgtm.teacher_role_ = 'BISHOP'
+		GROUP BY cgsm.user_id_) st
+		LEFT JOIN student_basic_info sbi ON st.user_id_ = sbi.user_id_
+		LEFT JOIN sys_user su ON su.id_ = st.user_id_
+		SET sbi.subject_teacher_id_ = st.teacher_id_,sbi.subject_teacher_name_ = su.real_name_
+	</update>
+
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM student_basic_info WHERE user_id_ = #{userId} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="StudentBasicInfo" parameterType="map">
+		SELECT * FROM student_basic_info ORDER BY user_id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM student_basic_info
+	</select>
+    <select id="getMaxId" resultType="java.lang.Integer">
+		SELECT MAX(id_) FROM student_basic_info
+	</select>
+</mapper>

+ 153 - 0
mec-biz/src/main/resources/config/mybatis/StudentStatisticsMapper.xml

@@ -0,0 +1,153 @@
+<?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.StudentStatisticsDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.StudentStatistics" id="StudentStatistics">
+		<result column="id_" property="id" />
+		<result column="user_id_" property="userId" />
+		<result column="teacher_id_" property="teacherId" />
+		<result column="teacher_name_" property="teacherName" />
+		<result column="music_director_id_" property="musicDirectorId" />
+		<result column="music_director_name_" property="musicDirectorName" />
+		<result column="total_course_num_" property="totalCourseNum" />
+		<result column="over_course_num_" property="overCourseNum" />
+		<result column="sub_course_num_" property="subCourseNum" />
+		<result column="no_schedule_num_" property="noScheduleNum" />
+		<result column="first_course_time_" property="firstCourseTime" />
+		<result column="last_course_time_" property="lastCourseTime" />
+		<result column="lately_course_consumer_" property="latelyCourseConsumer" />
+		<result column="visit_num_" property="visitNum" />
+		<result column="last_visit_status_" property="lastVisitStatus" />
+		<result column="visit_reason_" property="visitReason" />
+		<result column="last_visit_time_" property="lastVisitTime" />
+		<result column="pre_fee_" property="preFee" />
+		<result column="first_order_time_" property="firstOrderTime" />
+		<result column="last_order_time_" property="lastOrderTime" />
+		<result column="order_num_" property="orderNum" />
+		<result column="group_type_" property="groupType" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="StudentStatistics" >
+		SELECT * FROM student_statistics WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="StudentStatistics">
+		SELECT * FROM student_statistics ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentStatistics" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO student_statistics (id_,user_id_,teacher_id_,teacher_name_,music_director_id_,music_director_name_,total_course_num_,over_course_num_,sub_course_num_,no_schedule_num_,first_course_time_,last_course_time_,lately_course_consumer_,visit_num_,last_visit_status_,visit_reason_,last_visit_time_,pre_fee_,first_order_time_,last_order_time_,order_num_,group_type_) VALUES(#{id},#{userId},#{teacherId},#{teacherName},#{musicDirectorId},#{musicDirectorName},#{totalCourseNum},#{overCourseNum},#{subCourseNum},#{noScheduleNum},#{firstCourseTime},#{lastCourseTime},#{latelyCourseConsumer},#{visitNum},#{lastVisitStatus},#{visitReason},#{lastVisitTime},#{preFee},#{firstOrderTime},#{lastOrderTime},#{orderNum},#{groupType})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentStatistics">
+		UPDATE student_statistics <set>
+<if test="overCourseNum != null">
+over_course_num_ = #{overCourseNum},
+</if>
+<if test="latelyCourseConsumer != null">
+lately_course_consumer_ = #{latelyCourseConsumer},
+</if>
+<if test="id != null">
+id_ = #{id},
+</if>
+<if test="lastCourseTime != null">
+last_course_time_ = #{lastCourseTime},
+</if>
+<if test="totalCourseNum != null">
+total_course_num_ = #{totalCourseNum},
+</if>
+<if test="musicDirectorName != null">
+music_director_name_ = #{musicDirectorName},
+</if>
+<if test="visitNum != null">
+visit_num_ = #{visitNum},
+</if>
+<if test="teacherName != null">
+teacher_name_ = #{teacherName},
+</if>
+<if test="userId != null">
+user_id_ = #{userId},
+</if>
+<if test="subCourseNum != null">
+sub_course_num_ = #{subCourseNum},
+</if>
+<if test="lastVisitStatus != null">
+last_visit_status_ = #{lastVisitStatus},
+</if>
+<if test="lastVisitTime != null">
+last_visit_time_ = #{lastVisitTime},
+</if>
+<if test="teacherId != null">
+teacher_id_ = #{teacherId},
+</if>
+<if test="musicDirectorId != null">
+music_director_id_ = #{musicDirectorId},
+</if>
+<if test="lastOrderTime != null">
+last_order_time_ = #{lastOrderTime},
+</if>
+<if test="firstOrderTime != null">
+first_order_time_ = #{firstOrderTime},
+</if>
+<if test="orderNum != null">
+order_num_ = #{orderNum},
+</if>
+<if test="groupType != null">
+group_type_ = #{groupType},
+</if>
+<if test="visitReason != null">
+visit_reason_ = #{visitReason},
+</if>
+<if test="preFee != null">
+pre_fee_ = #{preFee},
+</if>
+<if test="noScheduleNum != null">
+no_schedule_num_ = #{noScheduleNum},
+</if>
+<if test="firstCourseTime != null">
+first_course_time_ = #{firstCourseTime},
+</if>
+</set> WHERE id_ = #{id} 
+	</update>
+	<update id="updateTeacherAndEdu">
+		SELECT updateTeacherAndEdu()
+	</update>
+	<update id="updateCourseNum">
+		SELECT updateCourseNum()
+	</update>
+
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM student_statistics WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="StudentStatistics" parameterType="map">
+		SELECT * FROM student_statistics ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM student_statistics
+	</select>
+    <select id="querySubjectTeacher">
+		SELECT cgsm.user_id_ student_id_,cgtm.user_id_ teacher_id_ FROM class_group cg
+		LEFT JOIN class_group_student_mapper cgsm ON cgsm.class_group_id_ = cg.id_
+		LEFT JOIN class_group_teacher_mapper cgtm ON cgtm.class_group_id_ = cg.id_
+		WHERE cg.type_ = 'NORMAL' AND cgsm.status_ = 'NORMAL' AND cg.del_flag_ = 0
+		GROUP BY cgsm.user_id_
+	</select>
+</mapper>