소스 검색

乐团课程统计

zouxuan 3 년 전
부모
커밋
b9066b412c

+ 15 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStatisticsDao.java

@@ -2,8 +2,22 @@ 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);
 }

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

@@ -5,10 +5,16 @@ 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 {
@@ -22,7 +28,22 @@ public class CourseScheduleStatisticsServiceImpl extends BaseServiceImpl<Long, C
 	}
 
 	@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);
+		}
 	}
 }

+ 110 - 45
mec-biz/src/main/resources/config/mybatis/CourseScheduleStatisticsMapper.xml

@@ -7,7 +7,6 @@
 <mapper namespace="com.ym.mec.biz.dal.dao.CourseScheduleStatisticsDao">
 	
 	<resultMap type="com.ym.mec.biz.dal.entity.CourseScheduleStatistics" id="CourseScheduleStatistics">
-		<result column="id_" property="id" />
 		<result column="course_schedule_id_" property="courseScheduleId" />
 		<result column="music_group_id_" property="musicGroupId" />
 		<result column="course_student_total_num_" property="courseStudentTotalNum" />
@@ -21,72 +20,138 @@
 	
 	<!-- 根据主键查询一条记录 -->
 	<select id="get" resultMap="CourseScheduleStatistics" >
-		SELECT * FROM course_schedule_statistics WHERE id_ = #{id} 
+		SELECT * FROM course_schedule_statistics WHERE course_schedule_id_ = #{courseScheduleId}
 	</select>
 	
 	<!-- 全查询 -->
 	<select id="findAll" resultMap="CourseScheduleStatistics">
-		SELECT * FROM course_schedule_statistics ORDER BY id_
+		SELECT * FROM course_schedule_statistics
 	</select>
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleStatistics" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		<!--
-		<selectKey resultClass="int" keyProperty="id" > 
-		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
-		</selectKey>
-		-->
-		INSERT INTO course_schedule_statistics (id_,course_schedule_id_,music_group_id_,course_student_total_num_,attendance_num_,late_num_,standard_num_,homework_flag_,homework_commit_num_,service_flag_) VALUES(#{id},#{courseScheduleId},#{musicGroupId},#{courseStudentTotalNum},#{attendanceNum},#{lateNum},#{standardNum},#{homeworkFlag},#{homeworkCommitNum},#{serviceFlag})
+		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="id != null">
-id_ = #{id},
-</if>
-<if test="courseStudentTotalNum != null">
-course_student_total_num_ = #{courseStudentTotalNum},
-</if>
-<if test="courseScheduleId != null">
-course_schedule_id_ = #{courseScheduleId},
-</if>
-<if test="lateNum != null">
-late_num_ = #{lateNum},
-</if>
-<if test="musicGroupId != null">
-music_group_id_ = #{musicGroupId},
-</if>
-</set> WHERE id_ = #{id} 
+		<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 id_ = #{id} 
+		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 ORDER BY id_ <include refid="global.limit"/>
+		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>