yonge 3 سال پیش
والد
کامیت
1022ef0434

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -570,4 +570,8 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     List<StudentVipPracticeExportDto> exportStudentVipPractice(@Param("organId") String organId, @Param("tenantId") Integer tenantId);
 
     List<BaseNameDto> queryLastOverTeacher(@Param("studentIds") List<Integer> studentIds, @Param("groupType") String groupType);
+
+	List<Mapper> queryUserMusicGroupCourseNumByClassTime(@Param("groupType") GroupType groupType, @Param("musicGroupIds") Set<String> musicGroupIds,
+			@Param("userId") Integer userId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
+
 }

+ 43 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java

@@ -21,8 +21,10 @@ import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.time.DayOfWeek;
+import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.ZoneId;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -341,15 +343,20 @@ public class StudentServeServiceImpl implements StudentServeService {
 //            return;
 //        }
 
+        //查询需要生成服务指标的学员
         List<StudentServeCourseDto> studentFutureCourseInfo = studentDao.getStudentFutureCourseInfo(monDayDate.toString(), DateUtil.dateToString(nextMonday, "yyyy-MM-dd"), studentIds, tenantId);
         if(CollectionUtils.isEmpty(studentFutureCourseInfo)){
             return;
         }
         Map<Integer, List<StudentServeCourseDto>> studentCourseMap = studentFutureCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getStudentId));
+        //有单技课或合奏课,且需要服务的学员
         Set<Integer> musicCourseStudentIds = studentFutureCourseInfo.stream().filter(s -> CourseSchedule.CourseScheduleType.SINGLE.equals(s.getType()) || CourseSchedule.CourseScheduleType.MIX.equals(s.getType())).map(StudentServeCourseDto::getStudentId).collect(Collectors.toSet());
 
+        //有课且被服务的学生
         Set<Integer> haveCourseBeServeStudentIds = studentCourseMap.keySet();
+        //查询所有开启了服务状态的学员
         List<Integer> allServeStudentIds = studentDao.getServeStudentIds(tenantId);
+        //没课但需要服务的学员
         Set<Integer> noCourseServeStudentIds = allServeStudentIds.stream().filter(id -> !haveCourseBeServeStudentIds.contains(id)).collect(Collectors.toSet());
 
         Set<Integer> musicStudentIds = new HashSet<>();
@@ -361,6 +368,7 @@ public class StudentServeServiceImpl implements StudentServeService {
         }
         List<StudentServeCourseDto> noCourseBeServeStudentInfo = new ArrayList<>();
         if(!CollectionUtils.isEmpty(musicStudentIds)){
+        	//查询进行中的乐团,且需要服务的学生、老师、乐团信息
             noCourseBeServeStudentInfo = studentDao.getNoCourseBeServeStudentInfo(new ArrayList<>(musicStudentIds), tenantId);
         }
 
@@ -371,13 +379,19 @@ public class StudentServeServiceImpl implements StudentServeService {
 
         for (Map.Entry<Integer, List<StudentServeCourseDto>> studentCourseMapEntry : studentCourseMap.entrySet()) {
             Map<CourseSchedule.CourseScheduleType, List<StudentServeCourseDto>> typeCourseMap = studentCourseMapEntry.getValue().stream().collect(Collectors.groupingBy(StudentServeCourseDto::getType));
+            
+            Integer userId = studentCourseMapEntry.getKey();
 
+            //有未上的单技课
             if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.SINGLE)){
                 Set<String> musicGroupIds = noCourseStudentMusicIdsMap.get(studentCourseMapEntry.getKey());
                 if(Objects.isNull(musicGroupIds)){
                     musicGroupIds = new HashSet<>();
                 }
-
+                
+                List<Mapper> mapperList = courseScheduleStudentPaymentDao.queryUserMusicGroupCourseNumByClassTime(GroupType.MUSIC, musicGroupIds, userId, new Date(2019, 1, 1), LocalDateToUdate(monDayDate));
+                Map<Object, Object> map = mapperList.stream().collect(Collectors.toMap(Mapper :: getKey, Mapper :: getValue));
+                
                 List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.SINGLE).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
                 if(!CollectionUtils.isEmpty(weekCourseInfo)){
                     Map<String, List<StudentServeCourseDto>> groupCourseInfo = weekCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getMusicGroupId));
@@ -387,6 +401,12 @@ public class StudentServeServiceImpl implements StudentServeService {
                         if(musicGroupIds.contains(groupCourseInfoEntry.getKey())) {
                             musicGroupIds.remove(groupCourseInfoEntry.getKey());
                         }
+                        
+                        //学生在当前乐团没有上过课,就不需要生成服务指标
+                        if(map.get(groupCourseInfoEntry.getKey()) != null && (int)map.get(groupCourseInfoEntry.getKey()) == 0){
+                        	continue;
+                        }
+                        
                         StudentServeCourseDto courseInfo = groupCourseInfoEntry.getValue().stream().min(Comparator.comparing(StudentServeCourseDto::getCourseStartTime)).get();
                         if(!teacherServiceCourseIdMap.containsKey(courseInfo.getActualTeacherId())){
                             teacherServiceCourseIdMap.put(courseInfo.getActualTeacherId(), new HashSet<>());
@@ -443,7 +463,7 @@ public class StudentServeServiceImpl implements StudentServeService {
                     studentExtracurricularExercisesSituation.setExpectExercisesNum(teacherNumMapEntry.getValue());
                     results.add(studentExtracurricularExercisesSituation);
                 }
-            }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.VIP)){
+            }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.VIP)){ //有未上的VIP
                 List<StudentServeCourseDto> futureCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.VIP);
                 List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.VIP).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
                 if(CollectionUtils.isEmpty(weekCourseInfo)){
@@ -478,13 +498,24 @@ public class StudentServeServiceImpl implements StudentServeService {
                         results.add(studentExtracurricularExercisesSituation);
                     }
                 }
-            }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.MIX)){
+            }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.MIX)){//有未上的合奏课
                 Set<String> musicGroupIds = noCourseStudentMusicIdsMap.get(studentCourseMapEntry.getKey());
                 if(CollectionUtils.isEmpty(musicGroupIds)){
                     continue;
                 }
+                
+                List<Mapper> mapperList = courseScheduleStudentPaymentDao.queryUserMusicGroupCourseNumByClassTime(GroupType.MUSIC, musicGroupIds, userId, new Date(2019, 1, 1), LocalDateToUdate(monDayDate));
+                Map<Object, Object> map = mapperList.stream().collect(Collectors.toMap(Mapper :: getKey, Mapper :: getValue));
+                
+                
                 Map<Integer, Integer> teacherNumMap = new HashMap<>();
                 for (String groupId : musicGroupIds) {
+                	
+                    //学生在当前乐团没有上过课,就不需要生成服务指标
+                    if(map.get(groupId) != null && (int)map.get(groupId) == 0){
+                    	continue;
+                    }
+                    
                     Integer teacherId = null;
                     List<BaseMapDto<Integer, Integer>> studentTeacherIdList = classGroupStudentMapperDao.getStudentClassGroupBishopTeacherMap(Arrays.asList(studentCourseMapEntry.getKey()), groupId);
                     if(!CollectionUtils.isEmpty(studentTeacherIdList)){
@@ -512,7 +543,7 @@ public class StudentServeServiceImpl implements StudentServeService {
                     studentExtracurricularExercisesSituation.setExpectExercisesNum(teacherNumMapEntry.getValue());
                     results.add(studentExtracurricularExercisesSituation);
                 }
-            }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.PRACTICE)){
+            }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.PRACTICE)){//有未上的陪练课
                 List<StudentServeCourseDto> futureCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.PRACTICE);
                 List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.PRACTICE).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
                 if(CollectionUtils.isEmpty(weekCourseInfo)){
@@ -1182,4 +1213,12 @@ public class StudentServeServiceImpl implements StudentServeService {
         }
         return result;
     }
+    
+
+    
+	private Date LocalDateToUdate(LocalDate localDate) {
+		ZoneId zone = ZoneId.systemDefault();
+		Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
+		return Date.from(instant);
+	}
 }

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

@@ -36,6 +36,11 @@
 		<result column="course_status_" property="courseStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result column="course_start_time_" property="courseStartTime"/>
 	</resultMap>
+	
+	<resultMap type="com.ym.mec.biz.dal.dto.Mapper" id="Mapper">
+		<result column="key_" property="key" />
+		<result column="value_" property="value" />
+	</resultMap>
 
 	<!-- 根据主键查询一条记录 -->
 	<select id="get" resultMap="CourseScheduleStudentPayment" >
@@ -874,4 +879,11 @@
 		LEFT JOIN sys_user su ON su.id_ = cs.actual_teacher_id_
 		WHERE cssp.user_id_ = c.user_id_ AND CONCAT(cs.class_date_,' ',cs.start_class_time_) = c.class_date_ AND cssp.group_type_ = #{groupType}
 	</select>
+	
+	<select id="queryUserCourseByClassTime" resultMap="Mapper" parameterType="map">
+		select cssp.music_group_id_ key_,count(cssp.id_) value_ from course_schedule_student_payment cssp left join course_schedule cs on cssp.course_schedule_id_ = cs.id_
+		where cssp.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} and find_in_set(cssp.music_group_id_ , #{musicGroupIds}) and cssp.user_id_ = #{userId}
+		and cs.class_date_ between #{startDate} and #{endDate}
+		group by cssp.music_group_id_
+	</select>
 </mapper>

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

@@ -536,7 +536,7 @@
 
 	<sql id="queryTeacherServeInfoCondition">
 		<where>
-			sees.tenant_id_ = #{tenantId}
+			sees.tenant_id_ = #{tenantId} AND tea.job_nature_= 'FULL_TIME'
 			<if test="organIds != null and organIds.size()>0">
 				AND tea.organ_id_ IN
 				<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
@@ -558,9 +558,9 @@
 			<if test="operatorId!=null">
 				AND EXISTS (SELECT id_ FROM teacher_remind WHERE operator_id_=#{operatorId} AND teacher_id_=sees.teacher_id_ AND monday_ = sees.monday_ AND type_='SERVICE')
 			</if>
-			<if test="jobNature!=null">
+			<!-- <if test="jobNature!=null">
 				AND tea.job_nature_=#{jobNature,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
-			</if>
+			</if> -->
 		</where>
 	</sql>