Browse Source

Merge branch 'teacher_record_sum' of http://git.dayaedu.com/yonge/mec into online1

zouxuan 3 years ago
parent
commit
c9c29fb5ab

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java

@@ -469,4 +469,11 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
 	 * @return java.util.List<java.lang.String>
 	 */
     List<TeacherMusicStudentOverViewDto> queryTeacherMusicStudentOverView(@Param("musicGroupIds") List<String> musicGroupIds);
+
+    /**
+     * 获取在读,进行中的乐团名称
+     * @param studentIds
+     * @return
+     */
+    List<Map<Integer, String>> queryNormalGroupName(@Param("studentIds") List<Integer> studentIds);
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentVisitDao.java

@@ -64,4 +64,15 @@ public interface StudentVisitDao extends BaseDAO<Integer, StudentVisit> {
      * @return
      */
     List<TeacherVisitDto> getTeacherVisitCount(@Param("teacherIds") List<Integer> teacherIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    /**
+     * 时间段内是否有训练统计的回访
+     * @param teacherId
+     * @param addDays1
+     * @param addDays3
+     * @return
+     */
+    List<Integer> queryRecordVisitStudentIds(@Param("teacherId") Integer teacherId,
+                                             @Param("addDays1") Date addDays1,
+                                             @Param("addDays3") Date addDays3);
 }

+ 0 - 7
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicCompareRecordDao.java

@@ -66,13 +66,6 @@ public interface SysMusicCompareRecordDao extends BaseDAO<Long, SysMusicCompareR
      * @param params
      * @return
      */
-    int countStudentTrain(Map<String, Object> params);
-
-    /**
-     * 老师端首页学员训练统计
-     * @param params
-     * @return
-     */
     List<CountStudentTrainDataDto> queryStudentTrain(Map<String, Object> params);
 
     /**

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CountStudentTrainDataDto.java

@@ -23,6 +23,16 @@ public class CountStudentTrainDataDto {
 
     private String musicGroupName;
 
+    private Integer visitFlag;
+
+    public Integer getVisitFlag() {
+        return visitFlag;
+    }
+
+    public void setVisitFlag(Integer visitFlag) {
+        this.visitFlag = visitFlag;
+    }
+
     public String getMusicGroupName() {
         return musicGroupName;
     }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysMusicCompareRecordQueryInfo.java

@@ -31,6 +31,16 @@ public class SysMusicCompareRecordQueryInfo extends QueryInfo {
 
     private HeardLevelEnum heardLevel;
 
+    private Boolean visitFlag;
+
+    public Boolean getVisitFlag() {
+        return visitFlag;
+    }
+
+    public void setVisitFlag(Boolean visitFlag) {
+        this.visitFlag = visitFlag;
+    }
+
     public FeatureType getFeatureType() {
         return featureType;
     }

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicCompareRecordService.java

@@ -1,13 +1,14 @@
 package com.ym.mec.biz.service;
 
-import com.alibaba.fastjson.JSONObject;
-import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.dto.CountStudentTrainDataDto;
+import com.ym.mec.biz.dal.dto.MusicCompareRankingDto;
+import com.ym.mec.biz.dal.dto.SoundCompareHelper;
+import com.ym.mec.biz.dal.dto.StatDto;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.dal.page.SysMusicCompareRecordQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
-import java.util.List;
 import java.util.Map;
 
 public interface SysMusicCompareRecordService extends BaseService<Long, SysMusicCompareRecord> {

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

@@ -15,6 +15,7 @@ import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.biz.service.SysMusicCompareRecordService;
 import com.ym.mec.biz.service.SysMusicCompareWeekDataService;
 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.thirdparty.message.MessageSenderPluginContext;
@@ -48,11 +49,16 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 	@Autowired
 	private StudentDao studentDao;
 	@Autowired
+	private StudentVisitDao studentVisitDao;
+	@Autowired
 	private SysMessageService sysMessageService;
 
 	@Autowired
 	private SysConfigDao sysConfigDao;
 
+	@Autowired
+	private MusicGroupDao musicGroupDao;
+
 	@Override
 	public BaseDAO<Long, SysMusicCompareRecord> getDAO() {
 		return sysMusicCompareRecordDao;
@@ -327,16 +333,49 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 
     @Override
     public PageInfo<CountStudentTrainDataDto> countStudentTrain(SysMusicCompareRecordQueryInfo queryInfo) {
+		if(queryInfo.getStartTime() == null || queryInfo.getEndTime() == null){
+			throw new BizException("请选择训练时间");
+		}
 		PageInfo<CountStudentTrainDataDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 		Map<String, Object> params = new HashMap<String, Object>();
+		String sort = queryInfo.getSort();
+		if(StringUtils.isNotEmpty(sort)){
+			queryInfo.setSort(sort.equals("trainNum")?"train_num_":sort.equals("totalPlayTime")?"total_play_time_":sort.equals("recordNum")?"record_num_":"train_day_");
+		}
 		MapUtil.populateMap(params, queryInfo);
-
+		Integer visitFlag = 0;
+		if(queryInfo.getVisitFlag() != null && queryInfo.getVisitFlag()){
+			//获取所选时间段下一周的日期
+			Date addDays1 = DateUtil.addDays(DateUtil.toDate(queryInfo.getEndTime()), 1);
+			Date addDays3 = DateUtil.addDays(DateUtil.toDate(queryInfo.getEndTime()), 5);
+			//有回访过的学员列表
+			List<Integer> studentIds = studentVisitDao.queryRecordVisitStudentIds(queryInfo.getTeacherId(),addDays1,addDays3);
+			if(studentIds != null && studentIds.size() > 0){
+				params.put("visitStudents",studentIds);
+			}
+			Date date = DateUtil.toDate(DateUtil.format(new Date(),DateUtil.ISO_EXPANDED_DATE_FORMAT));
+			int daysBetween = DateUtil.daysBetween(addDays1, date);
+			//每周只有前三天可以回访
+			if(daysBetween >= 0 && daysBetween <= 4){
+				visitFlag = 1;
+			}
+			params.put("having",1);
+		}
+		int count = sysMusicCompareRecordDao.queryStudentTrain(params).size();
 		List<CountStudentTrainDataDto> dataList = new ArrayList<>();
-		int count = sysMusicCompareRecordDao.countStudentTrain(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
+		if(count > 0){
 			params.put("offset", pageInfo.getOffset());
-			dataList =sysMusicCompareRecordDao.queryStudentTrain(params);
+			dataList = sysMusicCompareRecordDao.queryStudentTrain(params);
+			List<Integer> studentIds = dataList.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+			//获取学员在读,进行中的乐团名称
+			Map<Integer,String> groupNameMap = MapUtil.convertMybatisMap(musicGroupDao.queryNormalGroupName(studentIds));
+			pageInfo.setTotal(count);
+			for (CountStudentTrainDataDto e : dataList) {
+				e.setMusicGroupName(groupNameMap.get(e.getUserId()));
+				if(visitFlag == 1){
+					e.setVisitFlag(visitFlag);
+				}
+			}
 		}
 		pageInfo.setRows(dataList);
 		return pageInfo;

+ 10 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -964,4 +964,14 @@
         GROUP BY sr.music_group_id_
         ORDER BY mg.create_time_ DESC, mg.id_
     </select>
+    <select id="queryNormalGroupName" resultType="java.util.Map">
+        SELECT sr.user_id_ 'key',GROUP_CONCAT(mg.name_) 'value' FROM student_registration sr
+        LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
+        WHERE mg.status_ = 'PROGRESS' AND sr.music_group_status_ = 'NORMAL'
+        AND sr.user_id_ IN
+        <foreach collection="studentIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+        GROUP BY sr.user_id_
+    </select>
 </mapper>

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/StudentVisitMapper.xml

@@ -195,4 +195,10 @@
         <![CDATA[ AND visit_time_ <= #{endTime} ]]>
         GROUP BY teacher_id_,date_format(visit_time_, '%Y-%m')
     </select>
+    <select id="queryRecordVisitStudentIds" resultType="java.lang.Integer">
+        SELECT DISTINCT st.user_id_ FROM student st
+        LEFT JOIN student_visit sv ON st.user_id_ = sv.student_id_
+        WHERE sv.type_ = '云教练' AND st.teacher_id_ = #{teacherId}
+        AND sv.visit_time_ BETWEEN DATE_FORMAT(#{addDays1}, '%Y%m%d') AND DATE_FORMAT(#{addDays3}, '%Y%m%d')
+    </select>
 </mapper>

+ 21 - 27
mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -40,11 +40,6 @@
 
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysMusicCompareRecord" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		<!--
-		<selectKey resultClass="int" keyProperty="id" > 
-		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
-		</selectKey>
-		-->
 		INSERT INTO sys_music_compare_record (id_,user_id_,sys_music_score_id_,heard_level_,behavior_id_,score_data_,score_,intonation_,cadence_,integrity_,
 		                                      record_file_path_,device_type_,client_id_,play_time_,monday_,
 											feature_,create_time_)
@@ -250,23 +245,6 @@
 		GROUP BY
 			user_id_
 	</select>
-    <select id="countStudentTrain" resultType="java.lang.Integer">
-		SELECT COUNT(DISTINCT s.user_id_)
-		FROM teacher t
-				 LEFT JOIN student s ON t.id_ = s.teacher_id_
-				 LEFT JOIN sys_user su ON su.id_ = s.user_id_
-				 LEFT JOIN sys_music_compare_record mcr ON mcr.user_id_ = s.user_id_
-		<if test="startTime != null and startTime != ''">
-			AND (DATE_FORMAT(mcr.create_time_, '%Y-%m-%d') >= #{startTime} OR mcr.id_ IS NULL)
-		</if>
-		<if test="endTime != null and endTime != ''">
-			AND (DATE_FORMAT(mcr.create_time_, '%Y-%m-%d') &lt;= #{endTime} OR mcr.id_ IS NULL)
-		</if>
-		WHERE s.teacher_id_ = #{teacherId}
-		<if test="search != null and search != ''">
-			AND (su.phone_ LIKE CONCAT('%',#{search},'%') OR su.username_ LIKE CONCAT('%',#{search},'%'))
-		</if>
-	</select>
 	<resultMap id="CountStudentTrainDataDto" type="com.ym.mec.biz.dal.dto.CountStudentTrainDataDto">
 		<result property="trainNum" column="train_num_"/>
 		<result property="recordNum" column="record_num_"/>
@@ -276,17 +254,14 @@
 		<result property="phone" column="phone_"/>
 		<result property="totalPlayTime" column="total_play_time_"/>
 		<result property="trainDay" column="train_day_"/>
-		<result property="musicGroupName" column="music_group_name_"/>
 	</resultMap>
 	<select id="queryStudentTrain" resultMap="CountStudentTrainDataDto">
 		SELECT s.user_id_,su.avatar_,su.phone_,su.username_,ROUND(SUM(mcr.play_time_) / 60) total_play_time_,
 			   COUNT(DISTINCT DATE_FORMAT(mcr.create_time_,"%Y-%m-%d")) train_day_,
 			   COUNT(DISTINCT mcr.behavior_id_) train_num_,
-		COUNT(CASE WHEN mcr.feature_ = 'CLOUD_STUDY_EVALUATION' THEN mcr.behavior_id_ ELSE NULL END) record_num_,GROUP_CONCAT(DISTINCT mg.name_) music_group_name_
+		COUNT(CASE WHEN mcr.feature_ = 'CLOUD_STUDY_EVALUATION' THEN mcr.behavior_id_ ELSE NULL END) record_num_
 		FROM teacher t
 				 LEFT JOIN student s ON t.id_ = s.teacher_id_
-				 LEFT JOIN student_registration sr ON sr.user_id_ = s.user_id_ AND sr.music_group_status_ = 'NORMAL'
-				 LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_ AND mg.status_ = 'PROGRESS'
 				 LEFT JOIN sys_user su ON su.id_ = s.user_id_
 				 LEFT JOIN sys_music_compare_record mcr ON mcr.user_id_ = s.user_id_
 		<if test="startTime != null and startTime != ''">
@@ -299,8 +274,27 @@
 		<if test="search != null and search != ''">
 			AND (su.phone_ LIKE CONCAT('%',#{search},'%') OR su.username_ LIKE CONCAT('%',#{search},'%'))
 		</if>
+		<if test="visitStudents != null and visitStudents.size > 0">
+			AND s.user_id_ NOT IN
+			<foreach collection="visitStudents" open="(" close=")" item="userId" separator=",">
+				#{userId}
+			</foreach>
+		</if>
 		GROUP BY s.user_id_
-		ORDER BY total_play_time_ DESC
+		<if test="having == 1">
+			HAVING total_play_time_ &lt; 80 OR train_num_ &lt; 4
+		</if>
+		ORDER BY
+		<if test="sort != null and sort != ''">
+			${sort}
+			<if test="order != null and order != ''">
+				${order}
+			</if>
+		</if>
+		<if test="sort == null or sort == ''">
+			total_play_time_ DESC
+		</if>
+		,s.user_id_
 		<include refid="global.limit"/>
 	</select>
 

+ 2 - 2
mec-common/common-core/src/main/java/com/ym/mec/common/page/QueryInfo.java

@@ -22,11 +22,11 @@ public class QueryInfo {
 	/**
 	 * 默认排序列
 	 */
-	private String sort = "create_time_";
+	private String sort;
 	/**
 	 * 默认排序方向
 	 */
-	private String order = "desc";
+	private String order = "DESC";
 	
 	private String search;