소스 검색

Merge branch 'zx_2022-11-22' of http://git.dayaedu.com/yonge/mec into master_saas

zouxuan 2 년 전
부모
커밋
77950e2295

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

@@ -735,6 +735,15 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
     * @date 2022/3/16 14:10
     */
     List<Map<Integer,String>> getLastMusicGroupName(@Param("userIds") List<Integer> userIds);
+
+    /**
+    * @description: 获取学员最近加入的一个乐团主管名称
+     * @param userIds
+    * @return java.lang.String
+    * @author zx
+    * @date 2022/3/16 14:10
+    */
+    List<Map<Integer,String>> getLastEducationName(@Param("userIds") List<Integer> userIds);
     
     List<StudentRegistration> queryServiceStudentByMusicGroupStatus(@Param("nextMonday") String nextMonday,@Param("tenantId") Integer tenantId);
     

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentErrorLeaveDto.java

@@ -16,6 +16,26 @@ public class StudentErrorLeaveDto {
 
     private Integer currentNum;
 
+    private String musicGroupName;
+
+    private String eduName;
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public String getEduName() {
+        return eduName;
+    }
+
+    public void setEduName(String eduName) {
+        this.eduName = eduName;
+    }
+
     public String getPhone() {
         return phone;
     }

+ 0 - 19
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -1336,23 +1336,6 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 				flag4 = true;
 			}
 		}
-		//服务指标只用于大雅
-		/*if(tenantId == 1 && !flag4){
-			Map<String, Object> params = new HashMap<>();
-			LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
-			LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue()).plusDays(-7);
-			LocalDate sunDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.SUNDAY.getValue()).plusDays(-7);
-			params.put("organIds", organIds);
-			params.put("monday",monDayDate.toString());
-			params.put("sunday",sunDayDate.toString());
-			params.put("jobNature", JobNatureEnum.FULL_TIME);
-			params.put("unDone",1);
-			params.put("reminded",0);
-			int serveErrTeacherNum = studentExtracurricularExercisesSituationDao.countTeacherServeInfo(params);
-			if(serveErrTeacherNum > 0){
-				flag4 = true;
-			}
-		}*/
 		resultMap.put("attendanceServe",flag4);
 
 		boolean flag5 = false;
@@ -1431,8 +1414,6 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 
 		Map<Integer, Integer> organsVipStudentNumMap = indexBaseDatas.stream().filter(i->MEMBER_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
 
-//		Map<Integer, Integer> organsEVipStudentNumMap = indexBaseDatas.stream().filter(i->EXPERIENCE_MEMBER_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
-
 		Map<Integer, Integer> organCloudStudyLivelyStudentNumMap =indexBaseDatas.stream().filter(i->CLOUD_STUDY_LIVELY_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
 
 		Map<Integer, Integer> organsNewMemberStudentNumMap = indexBaseDatas.stream().filter(i->NEW_MEMBER_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));

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

@@ -60,10 +60,10 @@ public class StudentCourseConsumerServiceImpl implements StudentCourseConsumerSe
         for (StudentCourseConsumerSumDto consumerDto : consumerDtos) {
             BigDecimal courseConsumerNum = consumerDto.getNormalNum().multiply(monthsBetween);
             if(courseConsumerNum.compareTo(BigDecimal.ZERO) != 0){
-                consumerDto.setCourseConsumerRate(consumerDto.getCourseSum().divide(courseConsumerNum,BigDecimal.ROUND_HALF_UP).multiply(bigDecimal).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN));
+                consumerDto.setCourseConsumerRate(consumerDto.getCourseSum().divide(courseConsumerNum,2,BigDecimal.ROUND_DOWN).multiply(bigDecimal));
             }
             if(consumerDto.getNormalNum().compareTo(BigDecimal.ZERO) != 0){
-                consumerDto.setStandRate(consumerDto.getNum6().divide(consumerDto.getNormalNum(),BigDecimal.ROUND_HALF_UP).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN));
+                consumerDto.setStandRate(consumerDto.getNum6().divide(consumerDto.getNormalNum(),2,BigDecimal.ROUND_DOWN));
             }
             consumerDto.setCourseConsumerNum(courseConsumerNum);
         }

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

@@ -991,8 +991,14 @@ public class StudentManageServiceImpl implements StudentManageService {
             Map<Integer, BigDecimal> leaveNumMap = MapUtil.convertIntegerMap(indexBaseMonthDataDao.getStudentErrorLeaveNumMap(params));
             pageInfo.setTotal(count);
             dataList = indexBaseMonthDataDao.queryStudentErrorLeave(params);
+            List<Integer> studentIds = dataList.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+            //获取学员关联的乐团名称、乐团主管
+            Map<Integer, String> userLastMusicNameMap = MapUtil.convertMybatisMap(studentRegistrationDao.getLastMusicGroupName(studentIds));
+            Map<Integer, String> userLastEduNameMap = MapUtil.convertMybatisMap(studentRegistrationDao.getLastEducationName(studentIds));
             for (StudentErrorLeaveDto studentErrorLeaveDto : dataList) {
                 studentErrorLeaveDto.setTotalNum(leaveNumMap.get(studentErrorLeaveDto.getUserId()).intValue());
+                studentErrorLeaveDto.setMusicGroupName(userLastMusicNameMap.get(studentErrorLeaveDto.getUserId()));
+                studentErrorLeaveDto.setEduName(userLastEduNameMap.get(studentErrorLeaveDto.getUserId()));
             }
         }
         pageInfo.setRows(dataList);

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

@@ -2456,7 +2456,7 @@
         COUNT(DISTINCT cs.id_)
         FROM
         course_schedule cs
-        <if test="searchType == 'TEACHER_ERR_ATTENDANCE' or searchType == 'STUDENT_ERR_ATTENDANCE'">
+        <if test="studentId != null or searchType == 'TEACHER_ERR_ATTENDANCE' or searchType == 'STUDENT_ERR_ATTENDANCE'">
             LEFT JOIN course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cs.id_
         </if>
         LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_

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

@@ -1805,7 +1805,8 @@
 			AND (sa.user_id_ = #{search} OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%'))
 		</if>
 		GROUP BY sa.user_id_,DATE_FORMAT(cs.class_date_,'%Y-%m')
-		HAVING COUNT(distinct DATE_FORMAT(cs.class_date_,'%Y-%m-%d')) >= #{studentErrorLeaveNum} AND COUNT(distinct DATE_FORMAT(cs.class_date_,'%Y-%m-%d')) > SUM(sa.leave_visit_flag_)) c
+		HAVING COUNT(distinct DATE_FORMAT(cs.class_date_,'%Y-%m-%d')) >= #{studentErrorLeaveNum}
+		   AND COUNT(distinct DATE_FORMAT(cs.class_date_,'%Y-%m-%d')) > SUM(sa.leave_visit_flag_)) c
 	</select>
 	<resultMap id="StudentErrorLeaveDto" type="com.ym.mec.biz.dal.dto.StudentErrorLeaveDto">
 		<result property="currentNum" column="current_num_"/>
@@ -1837,7 +1838,9 @@
 		<if test="search != null and search != ''">
 			AND (sa.user_id_ = #{search} OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%'))
 		</if>
-		GROUP BY sa.user_id_,DATE_FORMAT(cs.class_date_,'%Y-%m') HAVING COUNT(sa.id_) >= #{studentErrorLeaveNum} AND COUNT(sa.id_) > SUM(sa.leave_visit_flag_) ORDER BY cs.class_date_ DESC)c
+		GROUP BY sa.user_id_,DATE_FORMAT(cs.class_date_,'%Y-%m')
+		HAVING COUNT(distinct DATE_FORMAT(cs.class_date_,'%Y-%m-%d')) >= #{studentErrorLeaveNum}
+		AND COUNT(distinct DATE_FORMAT(cs.class_date_,'%Y-%m-%d')) > SUM(sa.leave_visit_flag_) ORDER BY cs.class_date_ DESC)c
 		GROUP BY c.user_id_
 		<include refid="global.limit"/>
 	</select>

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

@@ -1800,6 +1800,18 @@
         </foreach>
         GROUP BY sr.user_id_)
     </select>
+    <select id="getLastMusicGroupName" resultType="java.util.Map">
+        SELECT sr.user_id_ 'key',su.real_name_ 'value' FROM student_registration sr
+        LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
+        left join sys_user su ON su.id_ = mg.educational_teacher_id_
+        WHERE sr.id_ IN (SELECT MAX(sr.id_) FROM student_registration sr
+        LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
+        WHERE sr.music_group_status_ = 'NORMAL' AND mg.status_ IN ('PROGRESS','PAUSE') AND sr.user_id_ IN
+        <foreach collection="userIds" separator="," item="id" open="(" close=")">
+            #{id}
+        </foreach>
+        GROUP BY sr.user_id_)
+    </select>
     
     <select id="queryServiceStudentByMusicGroupStatus" resultMap="StudentRegistration">
     	select sr.* from student_registration sr 

+ 58 - 49
mec-biz/src/main/resources/config/mybatis/StudentStatisticsMapper.xml

@@ -548,42 +548,44 @@
 		<result property="num0" column="course_sum_"/>
 	</resultMap>
 	<select id="queryCourseConsumer" resultMap="StudentCourseConsumerDto">
-		select o.id_ organ_id_,o.name_ organName,count(CASE WHEN (ss.no_schedule_num_ > 0 OR ss.sub_course_num_) AND ss.lately_year_course_consumer_ > 0 THEN 1 END) normalNum,
+		select o.id_ organ_id_,o.name_ organName,count(ss.user_id_) normalNum,
 		COUNT(CASE WHEN cs.course_num_ > 4 THEN 1 END) num5
 		,COUNT(CASE WHEN cs.course_num_ = 4 THEN 1 END) num4,COUNT(CASE WHEN cs.course_num_ = 3 THEN 1 END) num3
 		,COUNT(CASE WHEN cs.course_num_ = 2 THEN 1 END) num2,COUNT(CASE WHEN cs.course_num_ = 1 THEN 1 END) num1,
-		COUNT(CASE WHEN cs.course_num_ = 0 THEN 1 END) num0
+		count(ss.user_id_) - COUNT(cs.user_id_) num0
 		from student_statistics ss
-		left join (select cs.organ_id_,cssp.user_id_,COUNT(distinct cssp.course_schedule_id_) course_num_ from course_schedule cs
+		left join (select cssp.user_id_,COUNT(distinct cssp.course_schedule_id_) course_num_ from course_schedule cs
 		left join course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cs.id_
-		where DATE_FORMAT(cs.class_date_,'%Y-%m') = #{queryInfo.month}
-		<if test="queryInfo.organId != null and queryInfo.organId != ''">
-			AND FIND_IN_SET(cs.organ_id_,#{queryInfo.organId})
-		</if>
+		where DATE_FORMAT(cs.class_date_,'%Y-%m') = #{queryInfo.month} AND cs.type_ = 'VIP'
 		<include refid="com.ym.mec.biz.dal.dao.CourseScheduleDao.courseIgnore"/>
 		group by cssp.user_id_) cs ON cs.user_id_ = ss.user_id_
-		left join organization o ON o.id_ = cs.organ_id_
-		where ss.group_type_ = 'VIP' AND cs.organ_id_ IS NOT NULL
-		group by cs.organ_id_
+		left join sys_user su ON su.id_ = ss.user_id_
+		left join organization o ON o.id_ = su.organ_id_
+		where ss.group_type_ = 'VIP' AND (ss.no_schedule_num_ > 0 OR ss.sub_course_num_) AND ss.lately_year_course_consumer_ > 0
+		<if test="queryInfo.organId != null and queryInfo.organId != ''">
+			AND FIND_IN_SET(su.organ_id_,#{queryInfo.organId})
+		</if>
+		group by su.organ_id_
 	</select>
 	<select id="queryPreCourseConsumer" resultMap="StudentCourseConsumerDto">
-		select o.id_ organ_id_,o.name_ organName,count(CASE WHEN (ss.no_schedule_num_ > 0 OR ss.sub_course_num_) AND ss.lately_year_course_consumer_ > 0 THEN 1 END) normalNum,
+		select o.id_ organ_id_,o.name_ organName,count(ss.user_id_) normalNum,
 		COUNT(CASE WHEN cs.course_num_ > 4 THEN 1 END) num5
 		,COUNT(CASE WHEN cs.course_num_ = 4 THEN 1 END) num4,COUNT(CASE WHEN cs.course_num_ = 3 THEN 1 END) num3
 		,COUNT(CASE WHEN cs.course_num_ = 2 THEN 1 END) num2,COUNT(CASE WHEN cs.course_num_ = 1 THEN 1 END) num1,
-		COUNT(CASE WHEN cs.course_num_ = 0 THEN 1 END) num0
+		count(ss.user_id_) - COUNT(cs.user_id_) num0
 		from student_statistics ss
-		left join (select cs.organ_id_,cssp.user_id_,COUNT(distinct cssp.course_schedule_id_) course_num_ from course_schedule cs
+		left join (select cssp.user_id_,COUNT(distinct cssp.course_schedule_id_) course_num_ from course_schedule cs
 		left join course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cs.id_
-		where DATE_FORMAT(cs.class_date_,'%Y-%m') BETWEEN #{queryInfo.startDate} AND #{queryInfo.endDate}
-		<if test="queryInfo.organId != null and queryInfo.organId != ''">
-			AND FIND_IN_SET(cs.organ_id_,#{queryInfo.organId})
-		</if>
+		where DATE_FORMAT(cs.class_date_,'%Y-%m') BETWEEN #{queryInfo.startDate} AND #{queryInfo.endDate} AND cs.type_ = 'VIP'
 		<include refid="com.ym.mec.biz.dal.dao.CourseScheduleDao.courseIgnore"/>
 		group by cssp.user_id_) cs ON cs.user_id_ = ss.user_id_
-		left join organization o ON o.id_ = cs.organ_id_
-		where ss.group_type_ = 'VIP' AND cs.organ_id_ IS NOT NULL
-		group by cs.organ_id_
+		left join sys_user su ON su.id_ = ss.user_id_
+		left join organization o ON o.id_ = su.organ_id_
+		where ss.group_type_ = 'VIP' AND (ss.no_schedule_num_ > 0 OR ss.sub_course_num_) AND ss.lately_year_course_consumer_ > 0
+		<if test="queryInfo.organId != null and queryInfo.organId != ''">
+			AND FIND_IN_SET(su.organ_id_,#{queryInfo.organId})
+		</if>
+		group by su.organ_id_
 	</select>
 
 	<resultMap id="StudentCourseConsumerSumDto" type="com.ym.mec.biz.dal.dto.StudentCourseConsumerSumDto" extends="StudentCourseConsumerDto">
@@ -591,24 +593,25 @@
 		<result property="num6" column="num6"/>
 	</resultMap>
 	<select id="queryCourseConsumerSum" resultMap="StudentCourseConsumerSumDto">
-		select o.id_ organ_id_,o.name_ organName,SUM(cs.course_sum_) course_sum_,count(CASE WHEN (ss.no_schedule_num_ > 0 OR ss.sub_course_num_) AND ss.lately_year_course_consumer_ > 0 THEN 1 END) normalNum,
+		select o.id_ organ_id_,o.name_ organName,SUM(cs.course_sum_) course_sum_,count(ss.user_id_) normalNum,
 		COUNT(CASE WHEN cs.course_num_ > 4 THEN 1 END) num5,
 		COUNT(CASE WHEN cs.course_num_ > 3 THEN 1 END) num6
 		,COUNT(CASE WHEN cs.course_num_ = 4 THEN 1 END) num4,COUNT(CASE WHEN cs.course_num_ = 3 THEN 1 END) num3
 		,COUNT(CASE WHEN cs.course_num_ = 2 THEN 1 END) num2,COUNT(CASE WHEN cs.course_num_ = 1 THEN 1 END) num1,
-		COUNT(CASE WHEN cs.course_num_ = 0 THEN 1 END) num0
+		count(ss.user_id_) - COUNT(cs.user_id_) num0
 		from student_statistics ss
-		left join (select cs.organ_id_,COUNT(cssp.id_) course_sum_,cssp.user_id_,COUNT(distinct cssp.course_schedule_id_) course_num_ from course_schedule cs
+		left join (select COUNT(cssp.id_) course_sum_,cssp.user_id_,COUNT(distinct cssp.course_schedule_id_) course_num_ from course_schedule cs
 		left join course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cs.id_
-		where DATE_FORMAT(cs.class_date_,'%Y-%m-%d') BETWEEN #{queryInfo.startDate} AND #{queryInfo.endDate} AND cs.status_ = 'OVER'
-		<if test="queryInfo.organId != null and queryInfo.organId != ''">
-			AND FIND_IN_SET(cs.organ_id_,#{queryInfo.organId})
-		</if>
+		where DATE_FORMAT(cs.class_date_,'%Y-%m-%d') BETWEEN #{queryInfo.startDate} AND #{queryInfo.endDate} AND cs.status_ = 'OVER' AND cs.type_ = 'VIP'
 		<include refid="com.ym.mec.biz.dal.dao.CourseScheduleDao.courseIgnore"/>
 		group by cssp.user_id_) cs ON cs.user_id_ = ss.user_id_
-		left join organization o ON o.id_ = cs.organ_id_
-		where ss.group_type_ = 'VIP' AND cs.organ_id_ IS NOT NULL
-		group by cs.organ_id_
+		left join sys_user su ON su.id_ = ss.user_id_
+		left join organization o ON o.id_ = su.organ_id_
+		where ss.group_type_ = 'VIP' AND (ss.no_schedule_num_ > 0 OR ss.sub_course_num_) AND ss.lately_year_course_consumer_ > 0
+		<if test="queryInfo.organId != null and queryInfo.organId != ''">
+			AND FIND_IN_SET(su.organ_id_,#{queryInfo.organId})
+		</if>
+		group by su.organ_id_
 	</select>
 	<resultMap id="StudentCourseConsumerDetailDto" type="com.ym.mec.biz.dal.dto.StudentCourseConsumerDetailDto">
 		<result property="organName" column="organName"/>
@@ -620,34 +623,40 @@
 		<result property="courseNum" column="course_num_"/>
 	</resultMap>
 	<select id="queryCourseConsumerDetail" resultMap="StudentCourseConsumerDetailDto">
-		select o.name_ organName,su.username_,su.phone_,cssp.user_id_,COUNT(distinct cssp.course_schedule_id_) consumerNum,4 preConsumerNum
-		from course_schedule cs
+		select o.name_ organName,su.username_,su.phone_,ss.user_id_,
+		CASE WHEN cs.consumerNum IS NULL THEN 0 ELSE cs.consumerNum END consumerNum,4 preConsumerNum
+		from student_statistics ss
+		left join (select cssp.user_id_,COUNT(distinct cssp.course_schedule_id_) consumerNum from course_schedule cs
 		left join course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cs.id_
-		left join organization o ON o.id_ = cs.organ_id_
-		left join sys_user su ON su.id_ = cssp.user_id_
-		where DATE_FORMAT(cs.class_date_,'%Y-%m') = #{queryInfo.month} AND cs.status_ = 'OVER'
+		where DATE_FORMAT(cs.class_date_,'%Y-%m') = #{queryInfo.month} AND cs.status_ = 'OVER' AND cs.type_ = 'VIP'
+		<include refid="com.ym.mec.biz.dal.dao.CourseScheduleDao.courseIgnore"/>
+		group by cssp.user_id_) cs ON cs.user_id_ = ss.user_id_
+		left join sys_user su ON su.id_ = ss.user_id_
+		left join organization o ON o.id_ = su.organ_id_
+		where ss.group_type_ = 'VIP' AND (ss.no_schedule_num_ > 0 OR ss.sub_course_num_) AND ss.lately_year_course_consumer_ > 0
 		<if test="queryInfo.organId != null and queryInfo.organId != ''">
-			AND FIND_IN_SET(cs.organ_id_,#{queryInfo.organId})
+			AND FIND_IN_SET(su.organ_id_,#{queryInfo.organId})
 		</if>
-		<include refid="com.ym.mec.biz.dal.dao.CourseScheduleDao.courseIgnore"/>
-		group by cssp.user_id_ order by cs.organ_id_;
+		group by ss.user_id_ order by su.organ_id_;
 	</select>
 	<select id="queryPreCourseConsumerDetail" resultMap="StudentCourseConsumerDetailDto">
-		select cs.name_ organName,cs.username_,cs.user_id_,cs.phone_,
-		       CASE WHEN ss.no_schedule_num_ + cs.course_num_ > 3 THEN 4 ELSE ss.no_schedule_num_ + cs.course_num_ END preConsumerNum,
-			   cs.course_num_
+		select o.name_ organName,su.username_,ss.user_id_,su.phone_,
+		CASE WHEN ss.no_schedule_num_ + CASE WHEN cs.course_num_ IS NULL THEN 0 ELSE cs.course_num_ END > 3
+		THEN 4 ELSE ss.no_schedule_num_ + CASE WHEN cs.course_num_ IS NULL THEN 0 ELSE cs.course_num_ END END preConsumerNum,
+		CASE WHEN cs.course_num_ IS NULL THEN 0 ELSE cs.course_num_ END course_num_
 		from student_statistics ss
 		left join (
-		select cs.organ_id_,o.name_,su.username_,su.phone_,cssp.user_id_,COUNT(distinct cssp.course_schedule_id_) course_num_ from course_schedule cs
+		select cssp.user_id_,COUNT(distinct cssp.course_schedule_id_) course_num_ from course_schedule cs
 		left join course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cs.id_
-		left join organization o ON o.id_ = cs.organ_id_
-		left join sys_user su ON su.id_ = cssp.user_id_
-		where DATE_FORMAT(cs.class_date_,'%Y-%m') BETWEEN #{queryInfo.startDate} AND #{queryInfo.endDate}
-		<if test="queryInfo.organId != null and queryInfo.organId != ''">
-			AND FIND_IN_SET(cs.organ_id_,#{queryInfo.organId})
-		</if>
+		where DATE_FORMAT(cs.class_date_,'%Y-%m') BETWEEN #{queryInfo.startDate} AND #{queryInfo.endDate} AND cs.type_ = 'VIP'
 		<include refid="com.ym.mec.biz.dal.dao.CourseScheduleDao.courseIgnore"/>
 		group by cssp.user_id_) cs ON ss.user_id_ = cs.user_id_
-		where ss.group_type_ = 'VIP' AND ss.user_id_ = cs.user_id_
+		left join sys_user su ON su.id_ = ss.user_id_
+		left join organization o ON o.id_ = su.organ_id_
+		where ss.group_type_ = 'VIP' AND (ss.no_schedule_num_ > 0 OR ss.sub_course_num_) AND ss.lately_year_course_consumer_ > 0
+		<if test="queryInfo.organId != null and queryInfo.organId != ''">
+			AND FIND_IN_SET(su.organ_id_,#{queryInfo.organId})
+		</if>
+		ORDER BY su.organ_id_
 	</select>
 </mapper>

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

@@ -2890,7 +2890,7 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学生编号",
-                    "学生姓名", "手机号", "近两个月请假次数", "本月请假数"}, new String[]{
+                    "学生姓名", "手机号", "近两个月请假次数", "本月请假数"}, new String[]{
                     "organName", "userId", "studentName", "phone", "totalNum", "currentNum"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +

+ 2 - 2
mec-web/src/main/resources/exportColumnMapper.ini

@@ -243,8 +243,8 @@ headColumns = ["排名", "分部", "学员总数", "活跃人数", "活跃人数
 fieldColumns = ["index", "organName", "totalStudentNum", "cloudStudyLivelyStudentNum", "cloudStudyLivelyStudentDuty+'%'", "cloudStudyUseStudentNum", "newCloudStudyStudentNum", "cloudStudyUseStudentDuty+'%'", "vipStudentNum", "vipStudentDuty+'%'", "newMemberStudentNum"]
 
 [分部云教练学员训练数据导出]
-headColumns = ["学员编号", "学员","年级","班级", "手机号", "是否新用户", "是否激活", "训练总时长", "连续训练天数", "乐团", "乐团主管", "所属学校", "声部", "是否有小课","训练次数", "训练天数", "训练平均时长", "会员有效期", "是否服务", "是否运营", "是否云教练活动目标学员", "活动消费金额", "关心包", "加油包", "未上课数", "vip课剩余课时", "网管课剩余课时"]
-fieldColumns = ["studentId", "studentName","currentGradeNum","currentClass", "phone", "newUser?'是':'否'", "enable?'是':'否'", "cloudStudyUseTime+'分钟'", "cloudStudyRunningDays+'天'", "musicGroupNames", "educationName", "schoolNames","subjectName", "hasVipGroup>0?'是':'否'", "cloudStudyUseNum+'次'", "cloudStudyUseDays+'天'",         "cloudStudyUseAvgTime+'分钟'", "membershipEndTime", "serviceTag>0?'是':'否'", "operatingTag>0?'是':'否'","countFlag == null?'否':countFlag == 1?'是':'否'","activeAmount",         "carePackage>0?carePackage>1?'已使用':'可用':'不可用'", "comeOnPackage>0?comeOnPackage>1?'已使用':'可用':'不可用'",         "notStartCourseNum", "notStartVipCourseNum", "notStartPracticeCourseNum"]
+headColumns = ["学员编号", "学员","年级","班级", "手机号", "是否新用户", "是否激活", "训练总时长", "连续训练天数", "乐团", "乐团主管", "所属学校", "声部",  "声部老师", "是否有小课","训练次数", "训练天数", "训练平均时长", "会员有效期", "是否服务", "是否运营", "是否云教练活动目标学员", "活动消费金额", "关心包", "加油包", "未上课数", "vip课剩余课时", "网管课剩余课时"]
+fieldColumns = ["studentId", "studentName","currentGradeNum","currentClass", "phone", "newUser?'是':'否'", "enable?'是':'否'", "cloudStudyUseTime+'分钟'", "cloudStudyRunningDays+'天'", "musicGroupNames", "educationName", "schoolNames","subjectName", "subjectTeacherName", "hasVipGroup>0?'是':'否'", "cloudStudyUseNum+'次'", "cloudStudyUseDays+'天'",         "cloudStudyUseAvgTime+'分钟'", "membershipEndTime", "serviceTag>0?'是':'否'", "operatingTag>0?'是':'否'","countFlag == null?'否':countFlag == 1?'是':'否'","activeAmount",         "carePackage>0?carePackage>1?'已使用':'可用':'不可用'", "comeOnPackage>0?comeOnPackage>1?'已使用':'可用':'不可用'",         "notStartCourseNum", "notStartVipCourseNum", "notStartPracticeCourseNum"]
 
 [分部云教练活动统计数据导出]
 headColumns = ["分部", "购买人数", "购买金额", "目标金额", "人均购买金额", "目标人数", "目标达成率"]