瀏覽代碼

feat: 首页数据变更

Joburgess 4 年之前
父節點
當前提交
5e6b15dd0d

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java

@@ -21,6 +21,9 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
     int deleteWithMonthAndType(@Param("months") Collection months,
                                @Param("dataType")IndexDataType dataType);
 
+    IndexBaseMonthData getWithDayAndDataType(@Param("day") String day,
+                                             @Param("dataType")IndexDataType dataType);
+
     /**
      * @describe 获取首页统计数据
      * @author Joburgess

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java

@@ -460,4 +460,13 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return java.util.List<com.ym.mec.biz.dal.entity.MusicGroup>
      */
     List<MusicGroup> getStudentNormalMusicGroups(@Param("studentIds") Set<Integer> studentIds);
+
+    /**
+     * @describe 查询学员在读进行中乐团报名信息
+     * @author Joburgess
+     * @date 2021/2/25 0025
+     * @param studentIds:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.StudentRegistration>
+     */
+    List<StudentRegistration> getStudentNormalRegistration(@Param("studentIds") Set<Integer> studentIds);
 }

+ 78 - 2
mec-biz/src/main/java/com/ym/mec/biz/event/listener/GroupEventListener.java

@@ -1,11 +1,25 @@
 package com.ym.mec.biz.event.listener;
 
+import com.ym.mec.biz.dal.dao.IndexBaseMonthDataDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.enums.IndexDataType;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.event.MusicGroupStudentChangeEvent;
+import com.ym.mec.util.date.DateUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.event.EventListener;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
-import java.util.Objects;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Author Joburgess
@@ -14,13 +28,75 @@ import java.util.Objects;
 @Component
 public class GroupEventListener {
 
+    @Autowired
+    private MusicGroupDao musicGroupDao;
+    @Autowired
+    private StudentRegistrationDao studentRegistrationDao;
+    @Autowired
+    private IndexBaseMonthDataDao indexBaseMonthDataDao;
+
     @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(userGroupIdMap)&&!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.getWithDayAndDataType(dayStr, IndexDataType.NEWLY_STUDENT_NUM);
+                break;
+            case QUIT:
+                indexBaseMonthData = indexBaseMonthDataDao.getWithDayAndDataType(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);
+        }
     }
 
 }

+ 0 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -219,7 +219,6 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		saveData(null, dayStr, IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM);
 		saveData(indexBaseMonthDataDao.getOtherStudentData(dayStr), dayStr, IndexDataType.VIP_PRACTICE_STUDENT_NUM);
 		saveData(indexBaseMonthDataDao.getVipPracticeAddStudentData(dayStr), dayStr, IndexDataType.VIP_PRACTICE_ADD_STUDENT_NUM);
-
 	}
 
 	/**

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -19,6 +19,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.event.source.GroupEventSource;
 import com.ym.mec.biz.service.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -248,6 +249,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Autowired
     private StudentPreRegistrationDao studentPreRegistrationDao;
 
+    @Autowired
+    private GroupEventSource groupEventSource;
+
     private SimpleDateFormat sdf_ymd = new SimpleDateFormat("yyyy-MM-dd");
 
     private SimpleDateFormat sdf_hms = new SimpleDateFormat("HH:mm:ss");
@@ -1204,6 +1208,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         roleIds.add(SysUserRole.DEAN_OF_STUDIES);
 
         sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_ACTION_GROUP, "1", musicGroup.getName());
+
+        //统计变更学员数
+        groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.NORMAL, null);
     }
 
     private MusicGroup saveLog(String musicGroupId, MusicGroupStatusEnum statusEnum) throws Exception {
@@ -1554,6 +1561,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         //删除课表
         courseScheduleDao.logicDeleteCourseSchedulesByMusicGroupID(musicGroup.getId());
 
+        //统计变更学员数
+        groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, null);
+
         return true;
     }
 
@@ -1591,6 +1601,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         //恢复课表
         courseScheduleDao.resumeCourseScheduleByMusicGroupId(musicGroup.getId());
 
+        //统计变更学员数
+        groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.NORMAL, null);
+
         return true;
     }
 
@@ -1893,6 +1906,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
             }
 
+            //统计变更学员数
+            groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
+
             if (currentStudentMusicGroupStatus != StudentMusicGroupStatusEnum.NORMAL) {
                 return true;
             }
@@ -2068,6 +2084,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
         }
 
+        //统计变更学员数
+        groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
+
         if (currentStudentMusicGroupStatus != StudentMusicGroupStatusEnum.NORMAL) {
             return true;
         }
@@ -2924,6 +2943,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         //删除未上课表
         courseScheduleDao.logicDeleteCourseSchedulesByMusicGroupID(musicGroup.getId());
+
+        //统计变更学员数
+        groupEventSource.musicGroupStudentChangeEvent(closeMusicGroupDto.getMusicGroupId(), StudentMusicGroupStatusEnum.QUIT, null);
+
         return true;
     }
 

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -20,6 +20,8 @@ import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
+import com.ym.mec.biz.event.source.GroupEventSource;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -203,6 +205,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Autowired
     private CourseScheduleDao courseScheduleDao;
 
+    @Autowired
+    private GroupEventSource groupEventSource;
+
     @Override
     public BaseDAO<Long, StudentRegistration> getDAO() {
         return studentRegistrationDao;
@@ -803,6 +808,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             }
             studentRegistrationDao.updateCurrentClass(studentRegistration);
 
+            //统计变更学员数
+            groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.NORMAL, new ArrayList<>(Arrays.asList(userId)));
+
             return userId;
         }
     }

+ 30 - 24
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -28,6 +28,10 @@
 		SELECT * FROM index_base_month_data ORDER BY id_
 	</select>
 
+	<select id="getWithDayAndDataType" resultMap="IndexBaseMonthData">
+		SELECT * FROM index_base_month_data WHERE month_ = #{day} AND data_type_=#{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} ORDER BY month_ DESC LIMIT 1;
+	</select>
+
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.IndexBaseMonthData" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		<!--
@@ -59,30 +63,32 @@
 
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.IndexBaseMonthData">
-		UPDATE index_base_month_data <set>
-		<if test="organId != null">
-			organ_id_ = #{organId},
-		</if>
-		<if test="id != null">
-			id_ = #{id},
-		</if>
-		<if test="activateNum != null">
-			activate_num_ = #{activateNum},
-		</if>
-		<if test="totalNum != null">
-			total_num_ = #{totalNum},
-		</if>
-		<if test="percent != null">
-			percent_ = #{percent},
-		</if>
-		<if test="month != null">
-			month_ = #{month},
-		</if>
-		<if test="dataType != null">
-			data_type_ = #{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-		</if>
-		update_time_ = NOW()
-	</set> WHERE id_ = #{id}
+		UPDATE index_base_month_data
+		<set>
+			<if test="organId != null">
+				organ_id_ = #{organId},
+			</if>
+			<if test="id != null">
+				id_ = #{id},
+			</if>
+			<if test="activateNum != null">
+				activate_num_ = #{activateNum},
+			</if>
+			<if test="totalNum != null">
+				total_num_ = #{totalNum},
+			</if>
+			<if test="percent != null">
+				percent_ = #{percent},
+			</if>
+			<if test="month != null">
+				month_ = #{month},
+			</if>
+			<if test="dataType != null">
+				data_type_ = #{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+			</if>
+			update_time_ = NOW()
+		</set>
+		WHERE id_ = #{id}
 	</update>
 
 	<!-- 根据主键删除一条记录 -->

+ 15 - 0
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -778,6 +778,21 @@
             </foreach>
         ORDER BY mg.create_time_ DESC
     </select>
+    <select id="getStudentNormalRegistration" resultMap="StudentRegistration">
+        SELECT
+               sr.*
+        FROM
+            student_registration sr
+            LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
+        WHERE
+            mg.status_ = 'PROGRESS'
+            AND mg.del_flag_ = 0
+            AND sr.music_group_status_ = 'NORMAL'
+            AND sr.user_id_ IN
+            <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+                #{studentId}
+            </foreach>
+    </select>
     <!-- 批量删除信息 -->
     <delete id="batchDelete">
         DELETE FROM student_registration WHERE id_ IN