zouxuan 3 tahun lalu
induk
melakukan
bb40b2bf06

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

@@ -63,4 +63,6 @@ public interface StudentStatisticsDao extends BaseDAO<Integer, StudentStatistics
     void batchUpdate(@Param("statisticsList") List<StudentStatistics> statisticsList);
 
     List<StudentOrganDto> queryNoScheduleNumStudent(@Param("organIds") List<Integer> organIds);
+
+    void updateFirstOrderTime();
 }

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

@@ -10,6 +10,7 @@ import com.ym.mec.biz.dal.entity.StudentStatistics;
 import com.ym.mec.biz.dal.page.StudentStatisticsQueryInfo;
 import com.ym.mec.biz.service.StudentStatisticsService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
@@ -54,6 +55,8 @@ public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, Stude
 		studentStatisticsDao.updateNormalGroupNum();
 		//更新总课时数、已完成、剩余课时数、最近30天课耗、最近1年课耗
 		studentStatisticsDao.updateCourseNum();
+		//更新第一次付费时间
+		studentStatisticsDao.updateFirstOrderTime();
 	}
 
 	@Override
@@ -90,6 +93,9 @@ public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, Stude
 
     @Override
     public StudentStatisticsSumForDateDto studentSmallClassStatisticsSumForDate(String groupType, String startDate, String endDate,String organId) {
+		if(StringUtils.isEmpty(startDate) || StringUtils.isEmpty(endDate)){
+			throw new BizException("请选择时间节点");
+		}
 		StudentStatisticsSumForDateDto sumForDateDto = new StudentStatisticsSumForDateDto();
 		List<Integer> organIdList = new ArrayList<>();
 		if(StringUtils.isNotEmpty(organId)){

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

@@ -88,7 +88,7 @@
             #{inspectionItemPlanConclusion.teacherId},
             #{inspectionItemPlanConclusion.checkItem},
             #{inspectionItemPlanConclusion.checkConclusion}, #{inspectionItemPlanConclusion.createTime},
-            #{inspectionItemPlanConclusion.updateTime},#{inspectionItemPlanConclusion.tenantId},#{questionType})
+            #{inspectionItemPlanConclusion.updateTime},#{inspectionItemPlanConclusion.tenantId},#{inspectionItemPlanConclusion.questionType})
         </foreach>
     </insert>
 

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

@@ -932,9 +932,10 @@
         GROUP BY sees.student_id_,sees.music_group_id_) sees
         LEFT JOIN (
         SELECT sees.student_id_,sbi.organ_id_,sees.music_group_id_,sbi.user_name_,mg.name_ music_group_name_,sbi.organ_name_,
-        COUNT(CASE WHEN sa.qualified_flag_ = 1 THEN 1 END) qualified_num_,COUNT(cs.id_) course_num_,COUNT(CASE WHEN cs.type_ = 'SINGLE' THEN 1 END) single_num_,
-        COUNT(CASE WHEN cs.type_ = 'MIX' THEN 1 END) mix_num_,COUNT(sa.id_) sign_num_,
-        COUNT(CASE WHEN sa.id_ IS NULL AND cs.status_ = 'OVER' THEN 1 END) not_sign_num_,
+        COUNT(DISTINCT CASE WHEN sa.qualified_flag_ = 1 THEN cs.id_ END) qualified_num_,COUNT(DISTINCT cs.id_) course_num_,
+        COUNT(DISTINCT CASE WHEN cs.type_ = 'SINGLE' THEN cs.id_ END) single_num_,
+        COUNT(DISTINCT CASE WHEN cs.type_ = 'MIX' THEN cs.id_ END) mix_num_,COUNT(DISTINCT sa.id_) sign_num_,
+        COUNT(DISTINCT CASE WHEN sa.id_ IS NULL AND cs.status_ = 'OVER' THEN cs.id_ END) not_sign_num_,
         GROUP_CONCAT(DISTINCT CASE WHEN sa.id_ IS NULL AND cs.status_ = 'OVER' THEN cs.class_date_ END) not_sign_date_
         FROM student_extracurricular_exercises_situation_ sees
         LEFT JOIN student_basic_info sbi ON sbi.user_id_ = sees.student_id_

+ 29 - 34
mec-biz/src/main/resources/config/mybatis/StudentStatisticsMapper.xml

@@ -209,7 +209,10 @@
 	<update id="updateNormalGroupNum">
 		SELECT updateNormalGroupNum()
 	</update>
-	
+	<update id="updateFirstOrderTime">
+		SELECT updateFirstOrderTime()
+	</update>
+
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM student_statistics
@@ -376,48 +379,40 @@
 		</if>
 	</select>
     <select id="countAddStudentNum" resultType="java.lang.Integer">
-		SELECT COUNT(extend_info_) FROM (
-		SELECT extend_info_ FROM index_base_month_data
-		WHERE data_type_ =
-		<if test="groupType == 'VIP'">
-			'STUDENT_VIP_ORDER_NUM'
-		</if>
-		<if test="groupType == 'THEORY'">
-			'STUDENT_THEORY_ORDER_NUM'
-		</if>
-		<if test="groupType == 'PRACTICE'">
-			'STUDENT_PRACTICE_ORDER_NUM'
-		</if>
-		AND extend_info_ IS NOT NULL
+		SELECT COUNT(DISTINCT ss.user_id_) FROM student_statistics ss
+		LEFT JOIN student_basic_info sbi ON sbi.user_id_ = ss.user_id_
+		WHERE ss.group_type_ = #{groupType} AND ss.first_order_time_ BETWEEN #{startDate} AND #{endDate}
 		<if test="organIdList != null and organIdList.size > 0">
-			AND organ_id_ IN
+			AND sbi.organ_id_ IN
 			<foreach collection="organIdList" item="organId" open="(" close=")" separator=",">
 				#{organId}
 			</foreach>
 		</if>
-		GROUP BY extend_info_
-		<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
-			HAVING COUNT(CASE WHEN month_ &lt; #{startDate} THEN 1 ELSE NULL END) &lt; 1
-			AND COUNT(CASE WHEN month_ BETWEEN #{startDate} AND #{endDate} THEN 1 ELSE NULL END) > 0
-		</if>
-		)a
 	</select>
 	<select id="countRenewStudentNum" resultType="java.lang.Integer">
-		SELECT COUNT(extend_info_) FROM (
-		SELECT extend_info_ FROM index_base_month_data
-		<include refid="dateTypeSql"/>
-			AND extend_info_ IS NOT NULL
-		<if test="endDate != null and endDate != ''">
-			AND month_ &lt;= #{endDate}
+		SELECT COUNT(cssp.user_id_) FROM (
+		<if test="groupType == 'VIP'">
+			SELECT cssp.user_id_,MIN(vg.create_time_) first_order_time_ FROM course_schedule_student_payment cssp
+			LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
+			LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
+			WHERE cssp.actual_price_ > 0 AND cssp.group_type_ = 'VIP' AND vgc.music_theory_ = 0 AND vg.create_time_ BETWEEN #{startDate} AND #{endDate}
+			GROUP BY cssp.user_id_
 		</if>
-		<if test="organIdList != null and organIdList.size > 0">
-			AND organ_id_ IN
-			<foreach collection="organIdList" item="organId" open="(" close=")" separator=",">
-				#{organId}
-			</foreach>
+		<if test="groupType == 'THEORY'">
+			SELECT cssp.user_id_,MIN(vg.create_time_) first_order_time_ FROM course_schedule_student_payment cssp
+			LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
+			LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
+			WHERE cssp.actual_price_ > 0 AND cssp.group_type_ = 'VIP' AND vgc.music_theory_ AND vg.create_time_ BETWEEN #{startDate} AND #{endDate}
+			GROUP BY cssp.user_id_
 		</if>
-		GROUP BY extend_info_
-		HAVING SUM(total_num_) > 1)a
+		<if test="groupType == 'PRACTICE'">
+			SELECT cssp.user_id_,MIN(pg.create_time_) first_order_time_ FROM course_schedule_student_payment cssp
+			LEFT JOIN practice_group pg ON pg.id_ = cssp.music_group_id_
+			WHERE cssp.actual_price_ > 0 AND cssp.group_type_ = 'PRACTICE' AND pg.create_time_ BETWEEN #{startDate} AND #{endDate}
+			GROUP BY cssp.user_id_
+		</if> ) cssp
+		LEFT JOIN student_statistics ss ON cssp.user_id_ = ss.user_id_
+		WHERE ss.group_type_ = #{groupType} AND cssp.first_order_time_ != ss.first_order_time_ AND ss.first_order_time_ IS NOT NULL;
 	</select>
 	<select id="countVisitNum" resultType="java.lang.Integer">
 		SELECT COUNT(DISTINCT student_id_) FROM student_visit