Joburgess 5 years ago
parent
commit
d90349415c

+ 8 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRoomStudentRelationDao.java

@@ -68,6 +68,14 @@ public interface ExamRoomStudentRelationDao extends BaseDAO<Long, ExamRoomStuden
                                                                @Param("organIds") List<Integer> organIds);
 
     /**
+     * @describe 获取考试时间在指定日期的考场学生记录
+     * @author Joburgess
+     * @date 2020.07.22
+     * @return java.util.List<com.keao.edu.user.api.entity.ExamRoomStudentRelation>
+     */
+    List<ExamRoomStudentRelation> getTomorrowExamStudents(@Param("day") String day);
+
+    /**
      * 获取教室学员关联
      * @param basicId
      * @param roomId

+ 69 - 5
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java

@@ -40,6 +40,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.time.LocalDate;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -337,8 +338,8 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 		Set<Integer> locationIds = examRoomStudentWithOrgans.stream().filter(e -> Objects.nonNull(e.getExamLocationId())).map(ExamRoomStudentRelation::getExamLocationId).collect(Collectors.toSet());
 		Map<Integer, String> idLocationMap = this.getMap("exam_location", "id_", "name_", new ArrayList(locationIds), Integer.class, String.class);
 
-		Set<Integer> AllStudentIds = examRoomStudentWithOrgans.stream().map(ExamRoomStudentRelation::getStudentId).collect(Collectors.toSet());
-		Map<Integer, String> idPhoneMap = this.getMap("sys_user", "id_", "phone_", new ArrayList(AllStudentIds), Integer.class, String.class);
+		Set<Integer> allStudentIds = examRoomStudentWithOrgans.stream().map(ExamRoomStudentRelation::getStudentId).collect(Collectors.toSet());
+		Map<Integer, String> idPhoneMap = this.getMap("sys_user", "id_", "phone_", new ArrayList(allStudentIds), Integer.class, String.class);
 
 		Map<Long, List<ExamRoomStudentRelation>> examRoomStudentMap = examRoomStudentWithOrgans.stream().collect(Collectors.groupingBy(ExamRoomStudentRelation::getExamRoomId));
 
@@ -381,9 +382,9 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 
 			String examDayStr = DateUtil.dateToString(examRoom.getExamStartTime(), "MM月dd日");
 			StringBuffer examTimeStr = new StringBuffer();
-			examTimeStr.append(DateUtil.dateToString(examRoom.getExamStartTime(), "MM月dd日"));
+			examTimeStr.append(DateUtil.dateToString(examRoom.getExamStartTime(), "HH时mm分"));
 			examTimeStr.append("-");
-			examTimeStr.append(DateUtil.dateToString(examRoom.getExamEndTime(), "MM月dd日"));
+			examTimeStr.append(DateUtil.dateToString(examRoom.getExamEndTime(), "HH时mm分"));
 
 			String locationName = "网络考场";
 			if(ExamModeEnum.OFFLINE.equals(examRoom.getExamMode())){
@@ -399,7 +400,7 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 					examName, examDayStr, examTimeStr, locationName);
 		}
 
-		Map<Integer, String> idTeacherPhoneMap = this.getMap("sys_user", "id_", "real_name_", new ArrayList(teacherExamRoomsMap.keySet()), Integer.class, String.class);
+		Map<Integer, String> idTeacherPhoneMap = this.getMap("sys_user", "id_", "phone_", new ArrayList(teacherExamRoomsMap.keySet()), Integer.class, String.class);
 		for (Map.Entry<Integer, List<ExamRoom>> teacherRoomEntry : teacherExamRoomsMap.entrySet()) {
 			String teacherPhone = idTeacherPhoneMap.get(teacherRoomEntry.getKey());
 			Date examStartTime = teacherRoomEntry.getValue().stream().min(Comparator.comparing(ExamRoom::getExamStartTime)).get().getExamStartTime();
@@ -419,7 +420,70 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 
 	@Override
 	public void tomorrowExamPlanRemind() {
+		LocalDate tomorrowDate = LocalDate.now().plusDays(1);
+		List<ExamRoomStudentRelation> tomorrowExamStudents = examRoomStudentRelationDao.getTomorrowExamStudents(tomorrowDate.toString());
+		if(CollectionUtils.isEmpty(tomorrowExamStudents)){
+			return;
+		}
+
+		Set<Integer> allStudentIds = tomorrowExamStudents.stream().map(ExamRoomStudentRelation::getStudentId).collect(Collectors.toSet());
+		Map<Integer, String> idPhoneMap = this.getMap("sys_user", "id_", "phone_", new ArrayList(allStudentIds), Integer.class, String.class);
+
+		Map<Long, List<ExamRoomStudentRelation>> examRoomStudentMap = tomorrowExamStudents.stream().collect(Collectors.groupingBy(ExamRoomStudentRelation::getExamRoomId));
 
+		Map<Integer, List<ExamRoom>> teacherExamRoomsMap = new HashMap<>();
+
+		for (Map.Entry<Long, List<ExamRoomStudentRelation>> examRoomStudentEntry : examRoomStudentMap.entrySet()) {
+			List<ExamRoomStudentRelation> students = examRoomStudentEntry.getValue();
+			Set<Integer> studentIds = students.stream().map(ExamRoomStudentRelation::getStudentId).collect(Collectors.toSet());
+			if(CollectionUtils.isEmpty(studentIds)){
+				continue;
+			}
+			ExamRoom examRoom=students.get(0);
+			examRoom.setId(students.get(0).getExamRoomId());
+
+			if(!teacherExamRoomsMap.containsKey(examRoom.getMainTeacherUserId())){
+				teacherExamRoomsMap.put(examRoom.getMainTeacherUserId(), new ArrayList<>());
+			}
+			teacherExamRoomsMap.get(examRoom.getMainTeacherUserId()).add(examRoom);
+			if(StringUtils.isNotBlank(examRoom.getAssistantTeacherUserIdList())){
+				Set<Integer> ateacherIds = Arrays.stream(examRoom.getAssistantTeacherUserIdList().split(",")).map(e -> Integer.valueOf(e)).collect(Collectors.toSet());
+				for (Integer ateacherId : ateacherIds) {
+					if(!teacherExamRoomsMap.containsKey(ateacherId)){
+						teacherExamRoomsMap.put(ateacherId, new ArrayList<>());
+					}
+					teacherExamRoomsMap.get(ateacherId).add(examRoom);
+				}
+			}
+
+			Map<Integer, String> receiverMap = studentIds.stream().collect(Collectors.toMap(e->e, e->e.toString()));
+			Map<Integer, String> phoneMap = idPhoneMap.entrySet().stream().filter(e->studentIds.contains(e.getKey())).collect(Collectors.toMap(e->e.getKey(), e->e.getValue()));
+
+			String examDayStr = DateUtil.dateToString(examRoom.getExamStartTime(), "MM月dd日");
+			StringBuffer examTimeStr = new StringBuffer();
+			examTimeStr.append(DateUtil.dateToString(examRoom.getExamStartTime(), "HH时mm分"));
+
+
+			sysMessageService.batchSendMessage(MessageTypeEnum.BEFORE_EXAM_STUDENT_REMIND_PUSH,
+					receiverMap, null, 0, null, JiguangPushPlugin.PLUGIN_NAME,
+					examDayStr, examTimeStr.toString());
+			sysMessageService.batchSendMessage(MessageTypeEnum.BEFORE_EXAM_STUDENT_REMIND_SMS,
+					phoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
+					examDayStr, examTimeStr.toString());
+		}
+
+		Map<Integer, String> idTeacherPhoneMap = this.getMap("sys_user", "id_", "phone_", new ArrayList(teacherExamRoomsMap.keySet()), Integer.class, String.class);
+		for (Map.Entry<Integer, List<ExamRoom>> teacherRoomEntry : teacherExamRoomsMap.entrySet()) {
+			String teacherPhone = idTeacherPhoneMap.get(teacherRoomEntry.getKey());
+			Date examStartTime = teacherRoomEntry.getValue().stream().min(Comparator.comparing(ExamRoom::getExamStartTime)).get().getExamStartTime();
+			String examStartTimeStr = DateUtil.dateToString(examStartTime, "MM月dd日 HH时mm分");
+			int examRoomNum = teacherRoomEntry.getValue().size();
+			Map<Integer, String> phoneMap = new HashMap<>();
+			phoneMap.put(teacherRoomEntry.getKey(), teacherPhone);
+			sysMessageService.batchSendMessage(MessageTypeEnum.BEFORE_EXAM_TEACHER_REMIND_SMS,
+					phoneMap, null, 0, null, YimeiSmsPlugin.PLUGIN_NAME,
+					examStartTimeStr, examRoomNum);
+		}
 	}
 
 	@Override

+ 9 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRoomStudentRelationMapper.xml

@@ -265,4 +265,13 @@
 				</foreach>
 			</if>
 	</select>
+
+	<select id="getTomorrowExamStudents" resultMap="ExamRoomStudentRelation">
+		SELECT
+			*
+		FROM
+			exam_room_student_relation ersr
+			LEFT JOIN exam_room er ON ersr.exam_room_id_ = er.id_
+		WHERE DATE_FORMAT(er.exam_start_time_,'%Y-%m-%d') = #{day}
+	</select>
 </mapper>