|
@@ -38,7 +38,65 @@ public class GroupEventListener {
|
|
|
@Async
|
|
|
@EventListener
|
|
|
public void musicGroupStudentChangeMonitor(MusicGroupStudentChangeEvent musicGroupStatusChangeEvent){
|
|
|
-
|
|
|
+ if(Objects.isNull(musicGroupStatusChangeEvent.getMusicGroupId())||Objects.isNull(musicGroupStatusChangeEvent.getStudentMusicGroupStatus())){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ MusicGroup musicGroup = musicGroupDao.get(musicGroupStatusChangeEvent.getMusicGroupId());
|
|
|
+ if(Objects.isNull(musicGroup)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<Integer> studentIds = musicGroupStatusChangeEvent.getStudentIds();
|
|
|
+ if(CollectionUtils.isEmpty(studentIds)) {
|
|
|
+ List<StudentRegistration> studentRegistrations = studentRegistrationDao.queryStudentByMusicGroupId(musicGroupStatusChangeEvent.getMusicGroupId());
|
|
|
+ studentIds = studentRegistrations.stream().map(StudentRegistration::getUserId).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ if(CollectionUtils.isEmpty(studentIds)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<StudentRegistration> studentNormalRegistration = studentRegistrationDao.getStudentNormalRegistration(new HashSet<>(studentIds));
|
|
|
+ Map<Integer, Set<String>> userGroupIdMap = studentNormalRegistration.stream().collect(Collectors.groupingBy(StudentRegistration::getUserId, Collectors.mapping(StudentRegistration::getMusicGroupId, Collectors.toSet())));
|
|
|
+ int updateNum = 0;
|
|
|
+ for (Integer studentId : studentIds) {
|
|
|
+ if(userGroupIdMap.containsKey(studentId)&&userGroupIdMap.get(studentId).size()>1){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if(userGroupIdMap.containsKey(studentId)&&!userGroupIdMap.get(studentId).contains(musicGroupStatusChangeEvent.getMusicGroupId())){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ updateNum+=1;
|
|
|
+ }
|
|
|
+ LocalDate nowDate = LocalDate.now();
|
|
|
+ String dayStr = nowDate.plusDays(-1).toString();
|
|
|
+ IndexBaseMonthData indexBaseMonthData = null;
|
|
|
+ switch (musicGroupStatusChangeEvent.getStudentMusicGroupStatus()){
|
|
|
+ case NORMAL:
|
|
|
+ indexBaseMonthData = indexBaseMonthDataDao.getOrganDataWithDayAndDataType(musicGroup.getOrganId(), dayStr, IndexDataType.NEWLY_STUDENT_NUM);
|
|
|
+ break;
|
|
|
+ case QUIT:
|
|
|
+ indexBaseMonthData = indexBaseMonthDataDao.getOrganDataWithDayAndDataType(musicGroup.getOrganId(), dayStr, IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(Objects.isNull(indexBaseMonthData)){
|
|
|
+ indexBaseMonthData = new IndexBaseMonthData();
|
|
|
+ Date date = DateUtil.stringToDate(dayStr, "yyyy-MM-dd");
|
|
|
+ BigDecimal zero = new BigDecimal(0);
|
|
|
+ indexBaseMonthData.setMonth(date);
|
|
|
+ indexBaseMonthData.setOrganId(musicGroup.getOrganId());
|
|
|
+ indexBaseMonthData.setDataType(StudentMusicGroupStatusEnum.NORMAL.equals(musicGroupStatusChangeEvent.getStudentMusicGroupStatus())?IndexDataType.NEWLY_STUDENT_NUM:IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM);
|
|
|
+ indexBaseMonthData.setTotalNum(zero);
|
|
|
+ indexBaseMonthData.setActivateNum(zero);
|
|
|
+ indexBaseMonthData.setPercent(zero);
|
|
|
+ }
|
|
|
+ indexBaseMonthData.setTotalNum(indexBaseMonthData.getTotalNum().add(new BigDecimal(updateNum)));
|
|
|
+ indexBaseMonthData.setActivateNum(indexBaseMonthData.getActivateNum().add(new BigDecimal(updateNum)));
|
|
|
+ indexBaseMonthData.setPercent(indexBaseMonthData.getPercent().add(new BigDecimal(updateNum)));
|
|
|
+ if(Objects.isNull(indexBaseMonthData.getId())){
|
|
|
+ indexBaseMonthDataDao.insert(indexBaseMonthData);
|
|
|
+ }else{
|
|
|
+ indexBaseMonthDataDao.update(indexBaseMonthData);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}
|