Просмотр исходного кода

Merge branch 'music_score' of http://git.dayaedu.com/yonge/mec

zouxuan 4 лет назад
Родитель
Сommit
166d94c1af

+ 2 - 7
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.enums.GroupType;
@@ -354,11 +355,5 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
     List<Map<Integer, String>> getStudentSubjectMapList(@Param("studentIds") List<Integer> studentIds);
 
-    /**
-     * 获取新增人数占比(已上乐团课小于等于4)
-     * @return
-     */
-    List<BaseMapDto<Integer,Long>> getOrganCloudNewStudentNum(@Param("musicGroupIds") List<String> musicGroupIds, @Param("userIds") List<Integer> userIds);
-
-    List<Map<Long, Long>> groupOrganId(@Param("organIds") List<Integer> organIds, @Param("userIds") List<Integer> userIds);
+    List<IndexBaseMonthData> groupOrganId(@Param("organIds") List<Integer> organIds, @Param("userIds") List<Integer> userIds);
 }

+ 1 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java

@@ -677,10 +677,8 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
     List<Map<Integer, String>> queryStudentMusicGroupNamesMap(@Param("studentIds") List<Integer> studentIds);
 
     /**
-     * 获取在读并且进行中的乐团编号
+     * 获取进行中在读的学员列表
      * @return
      */
-    List<String> findMusicGroupIds();
-
     List<Integer> findStudentIds();
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkStudentDetailDto.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -66,6 +67,16 @@ public class CourseHomeworkStudentDetailDto {
 
     private Integer hasMember;
 
+    private SysMusicScore sysMusicScore;
+
+    public SysMusicScore getSysMusicScore() {
+        return sysMusicScore;
+    }
+
+    public void setSysMusicScore(SysMusicScore sysMusicScore) {
+        this.sysMusicScore = sysMusicScore;
+    }
+
     public Integer getHasMember() {
         return hasMember;
     }

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java

@@ -75,6 +75,7 @@ public enum IndexDataType implements BaseEnum<String, IndexDataType> {
     CLOUD_STUDY_LIVELY_STUDENT_NUM("CLOUD_STUDY_LIVELY_STUDENT_NUM", "活跃用户", false, false),
     CLOUD_STUDY_DAY_USE_STUDENT_NUM("CLOUD_STUDY_DAY_USE_STUDENT_NUM", "云教练使用用户", false, false),
     CLOUD_STUDY_NEW_STUDENT_NUM("CLOUD_STUDY_NEW_STUDENT_NUM", "云教练新增用户", false, false),
+    CLOUD_NEW_STUDENT_NUM("CLOUD_NEW_STUDENT_NUM", "云教练新用户人数", false, false),
     MEMBER_STUDENT_NUM("MEMBER_STUDENT_NUM", "会员数量", false, false),
     EXPERIENCE_MEMBER_STUDENT_NUM("EXPERIENCE_MEMBER_STUDENT_NUM", "试用会员数量", false, false),
     NEW_MEMBER_STUDENT_NUM("NEW_MEMBER_STUDENT_NUM", "新增会员数量", false, false),

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java

@@ -55,6 +55,8 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 	@Autowired
 	private CourseScheduleDao courseScheduleDao;
 	@Autowired
+	private SysMusicScoreDao sysMusicScoreDao;
+	@Autowired
 	private StudentServeService studentServeService;
 
 	@Override
@@ -103,6 +105,10 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 		detail.setStudentName(extraExerciseReply.getStudentName());
 		detail.setExpiryDate(extraExerciseReply.getExpireDate());
 		detail.setType("EXTRA");
+		if(extraExerciseReply.getMusicScoreId() != null){
+			detail.setSysMusicScore(sysMusicScoreDao.get(extraExerciseReply.getMusicScoreId()));
+		}
+
 		String configValue = sysConfigDao.findConfigValue(SysConfigService.HOMEWORK_OPEN_FLAG);
 		if(StringUtils.isEmpty(configValue)){
 			configValue = "0";

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

@@ -540,6 +540,12 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			saveData(indexBaseMonthDataDao.getCloudStudyNewStudentNumData(dayStr), dayStr, IndexDataType.CLOUD_STUDY_NEW_STUDENT_NUM);
 		}
 
+		//云教练新用户人数
+		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.CLOUD_NEW_STUDENT_NUM)) {
+			List<Integer> studentIdList = studentRegistrationDao.findStudentIds();
+			saveData(studentDao.groupOrganId(null,studentIdList),LocalDate.now().toString(),IndexDataType.CLOUD_NEW_STUDENT_NUM);
+		}
+
 	}
 
 	/**

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

@@ -36,7 +36,7 @@ import java.util.concurrent.ConcurrentHashMap;
 @Service
 public class SoundCheckHandler implements WebSocketEventHandler {
 
-    private static final double COMPARE_FREQUENCY = 442;
+    private static final double COMPARE_FREQUENCY = 525;
 
     /** 校音数据 */
     private Map<String, Integer> userSoundCheckInfo = new ConcurrentHashMap<>();

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java

@@ -74,6 +74,8 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
     private ExtracurricularExercisesReplyDao extracurricularExercisesReplyDao;
     @Autowired
     private SysConfigDao sysConfigDao;
+    @Autowired
+    private SysMusicScoreDao sysMusicScoreDao;
 
     @Override
     public BaseDAO<Long, StudentCourseHomework> getDAO() {
@@ -208,6 +210,9 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
                 courseHomeworkStudentDetail.setTeacherId(courseSchedule.getActualTeacherId());
                 courseHomeworkStudentDetail.setTeacherName(teacher.getRealName());
             }
+            if(courseHomeworkStudentDetail.getMusicScoreId() != null){
+                courseHomeworkStudentDetail.setSysMusicScore(sysMusicScoreDao.get(courseHomeworkStudentDetail.getMusicScoreId()));
+            }
         }
         courseHomeworkStudentDetail.setType("HOMEWORK");
         String configValue = sysConfigDao.findConfigValue(SysConfigService.HOMEWORK_OPEN_FLAG);

+ 50 - 29
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -27,10 +27,13 @@ import org.springframework.util.CollectionUtils;
 import sun.nio.cs.ext.Big5;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
+import static com.ym.mec.biz.dal.enums.IndexDataType.CLOUD_NEW_STUDENT_NUM;
+
 @Service
 public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implements StudentService {
 
@@ -68,6 +71,9 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     @Autowired
     private OrganizationDao organizationDao;
 
+    @Autowired
+    private IndexBaseMonthDataDao indexBaseMonthDataDao;
+
     @Override
     public BaseDAO<Integer, Student> getDAO() {
         return studentDao;
@@ -542,19 +548,24 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         if(!CollectionUtils.isEmpty(organsNewCloudStudyNumMapList)){
             organsNewCloudStudyNumMap = MapUtil.convertIntegerMap(organsNewCloudStudyNumMapList);
         }
-        //获取新增人数占比(已上乐团课小于等于4)
-        //获取有在读学员的乐团编号
-        //获取有在读学员的学员编号
-        List<String> musicGroupIds = studentRegistrationDao.findMusicGroupIds();
-        List<Integer> studentIdList = studentRegistrationDao.findStudentIds();
-        List<BaseMapDto<Integer, Long>> studentMusicCourseNum = studentDao.getOrganCloudNewStudentNum(musicGroupIds,studentIdList);
-        Map<String, Long> organsNewCloudNewStudentNumMap = new HashMap<>();
-        if(!CollectionUtils.isEmpty(studentMusicCourseNum)){
-            List<BaseMapDto<Integer, Long>> collect = studentMusicCourseNum.stream().filter(e -> e.getValue() < 5).collect(Collectors.toList());
-            List<Integer> userIdList = collect.stream().map(e -> e.getKey()).collect(Collectors.toList());
-            List<Map<Long, Long>> organsNewCloudNewStudentNumMapList = studentDao.groupOrganId(organIds,userIdList);
-            organsNewCloudNewStudentNumMap = MapUtil.convertIntegerMap(organsNewCloudNewStudentNumMapList);
-        }
+//        //获取新增人数占比(已上乐团课小于等于4)
+//        //获取有在读学员的乐团编号
+//        //获取有在读学员的学员编号
+//        List<String> musicGroupIds = studentRegistrationDao.findMusicGroupIds();
+//        List<Integer> studentIdList = studentRegistrationDao.findStudentIds();
+//        List<BaseMapDto<Integer, Long>> studentMusicCourseNum = studentDao.getOrganCloudNewStudentNum(musicGroupIds,studentIdList);
+//        //获取有乐团没排课的数据
+//        List<Integer> noCourseStudentIdList = studentRegistrationDao.findNoCourseStudentIds();
+//        List<Integer> userIdList = new ArrayList<>();
+//        if(!CollectionUtils.isEmpty(studentMusicCourseNum)){
+//            List<BaseMapDto<Integer, Long>> collect = studentMusicCourseNum.stream().filter(e -> e.getValue() < 5).collect(Collectors.toList());
+//            userIdList = collect.stream().map(e -> e.getKey()).collect(Collectors.toList());
+//        }
+//        userIdList.addAll(noCourseStudentIdList);
+//        List<Map<Long, Long>> organsNewCloudNewStudentNumMapList = studentDao.groupOrganId(organIds,userIdList);
+//        Map<String, Long> organsNewCloudNewStudentNumMap = MapUtil.convertIntegerMap(organsNewCloudNewStudentNumMapList);
+        List<IndexBaseMonthData> withDayAndDataType = indexBaseMonthDataDao.getWithDayAndDataType(LocalDate.now().toString(), CLOUD_NEW_STUDENT_NUM);
+        Map<Integer, Integer> organsNewCloudNewStudentNumMap = withDayAndDataType.stream().collect(Collectors.toMap(IndexBaseMonthData::getOrganId, e -> e.getActivateNum().intValue(), (e1, e2) -> e1));
 
         List<EduOrganStudentDataDto> result = new ArrayList<>();
 
@@ -586,9 +597,11 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
             if(organsNewCloudStudyNumMap.containsKey(organ.getId().toString())){
                 organStudentVipData.setNewCloudStudyStudentNum(organsNewCloudStudyNumMap.get(organ.getId().toString()).intValue());
             }
-            if(organsNewCloudNewStudentNumMap.containsKey(organ.getId().toString())){
-                organStudentVipData.setNewStudentNum(organsNewCloudNewStudentNumMap.get(organ.getId().toString()).intValue());
-                organStudentVipData.setNewStudentDuty(new BigDecimal(organStudentVipData.getNewStudentNum()).divide(new BigDecimal(organStudentVipData.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
+            if(organsNewCloudNewStudentNumMap.containsKey(organ.getId())){
+                organStudentVipData.setNewStudentNum(organsNewCloudNewStudentNumMap.get(organ.getId()));
+                if(organStudentVipData.getNewStudentNum() > 0 && organStudentVipData.getTotalStudentNum()>0){
+                    organStudentVipData.setNewStudentDuty(new BigDecimal(organStudentVipData.getNewStudentNum()).divide(new BigDecimal(organStudentVipData.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
+                }
             }
             result.add(organStudentVipData);
         }
@@ -644,16 +657,22 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         //获取新增人数占比(已上乐团课小于等于4)
         //获取有在读学员的乐团编号
         //获取有在读学员的学员编号
-        List<String> musicGroupIds = studentRegistrationDao.findMusicGroupIds();
-        List<Integer> studentIdList = studentRegistrationDao.findStudentIds();
-        List<BaseMapDto<Integer, Long>> studentMusicCourseNum = studentDao.getOrganCloudNewStudentNum(musicGroupIds,studentIdList);
-        Map<String, Long> organsNewCloudNewStudentNumMap = new HashMap<>();
-        if(!CollectionUtils.isEmpty(studentMusicCourseNum)){
-            List<BaseMapDto<Integer, Long>> collect = studentMusicCourseNum.stream().filter(e -> e.getValue() < 5).collect(Collectors.toList());
-            List<Integer> userIdList = collect.stream().map(e -> e.getKey()).collect(Collectors.toList());
-            List<Map<Long, Long>> organsNewCloudNewStudentNumMapList = studentDao.groupOrganId(organIds,userIdList);
-            organsNewCloudNewStudentNumMap = MapUtil.convertIntegerMap(organsNewCloudNewStudentNumMapList);
-        }
+//        List<String> musicGroupIds = studentRegistrationDao.findMusicGroupIds();
+//        List<Integer> studentIdList = studentRegistrationDao.findStudentIds();
+//        List<BaseMapDto<Integer, Long>> studentMusicCourseNum = studentDao.getOrganCloudNewStudentNum(musicGroupIds,studentIdList);
+//        //获取有乐团没排课的数据
+//        List<Integer> noCourseStudentIdList = studentRegistrationDao.findNoCourseStudentIds();
+//        List<Integer> userIdList = new ArrayList<>();
+//        if(!CollectionUtils.isEmpty(studentMusicCourseNum)){
+//            List<BaseMapDto<Integer, Long>> collect = studentMusicCourseNum.stream().filter(e -> e.getValue() < 5).collect(Collectors.toList());
+//            userIdList = collect.stream().map(e -> e.getKey()).collect(Collectors.toList());
+//        }
+//        userIdList.addAll(noCourseStudentIdList);
+//        List<Map<Long, Long>> organsNewCloudNewStudentNumMapList = studentDao.groupOrganId(organIds,userIdList);
+//        Map<String, Long> organsNewCloudNewStudentNumMap = MapUtil.convertIntegerMap(organsNewCloudNewStudentNumMapList);
+
+        List<IndexBaseMonthData> withDayAndDataType = indexBaseMonthDataDao.getWithDayAndDataType(LocalDate.now().toString(), CLOUD_NEW_STUDENT_NUM);
+        Map<Integer, Integer> organsNewCloudNewStudentNumMap = withDayAndDataType.stream().collect(Collectors.toMap(IndexBaseMonthData::getOrganId, e -> e.getActivateNum().intValue(), (e1, e2) -> e1));
 
         List<EduOrganStudentDataDto> result = new ArrayList<>();
 
@@ -685,9 +704,11 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
             if(organsNewCloudStudyNumMap.containsKey(organ.getId().toString())){
                 organStudentVipData.setNewCloudStudyStudentNum(organsNewCloudStudyNumMap.get(organ.getId().toString()).intValue());
             }
-            if(organsNewCloudNewStudentNumMap.containsKey(organ.getId().toString())){
-                organStudentVipData.setNewStudentNum(organsNewCloudNewStudentNumMap.get(organ.getId().toString()).intValue());
-                organStudentVipData.setNewStudentDuty(new BigDecimal(organStudentVipData.getNewStudentNum()).divide(new BigDecimal(organStudentVipData.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
+            if(organsNewCloudNewStudentNumMap.containsKey(organ.getId())){
+                organStudentVipData.setNewStudentNum(organsNewCloudNewStudentNumMap.get(organ.getId()));
+                if(organStudentVipData.getNewStudentNum() > 0 && organStudentVipData.getTotalStudentNum()>0){
+                    organStudentVipData.setNewStudentDuty(new BigDecimal(organStudentVipData.getNewStudentNum()).divide(new BigDecimal(organStudentVipData.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
+                }
             }
             result.add(organStudentVipData);
         }

+ 20 - 37
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -827,33 +827,30 @@
     </select>
 
     <select id="getOrgansStudentNum" resultType="map">
-        SELECT t.organ_id_ 'key',COUNT(DISTINCT user_id_) 'value'
-        FROM ((SELECT su.organ_id_,sr.user_id_
+        SELECT su.organ_id_ 'key',COUNT(DISTINCT user_id_) 'value'
+        FROM ((SELECT sr.user_id_
         FROM student_registration sr
         LEFT JOIN music_group mg ON sr.music_group_id_=mg.id_
-        LEFT JOIN sys_user su ON sr.user_id_=su.id_
-        WHERE su.del_flag_=0
-        AND mg.status_='PROGRESS'
+        WHERE mg.status_='PROGRESS'
         AND sr.music_group_status_='NORMAL')
         UNION ALL
         (SELECT
-        su.organ_id_,cssp.user_id_
+        cssp.user_id_
         FROM
         course_schedule_student_payment cssp
         LEFT JOIN course_schedule cs ON cssp.course_schedule_id_=cs.id_
-        LEFT JOIN sys_user su ON cssp.user_id_ = su.id_
         WHERE
         cssp.group_type_ IN ('VIP', 'PRACTICE')
-        AND cs.status_='NOT_START'
-        AND su.del_flag_ = 0)) t
-        WHERE 1=1
-        <if test="organIds!=null and organIds.size()>0">
-            AND t.organ_id_ IN
-            <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
-                #{organId}
-            </foreach>
-        </if>
-        GROUP BY t.organ_id_
+        AND cs.status_='NOT_START')) t
+        LEFT JOIN sys_user su ON t.user_id_=su.id_
+        WHERE su.del_flag_=0
+<!--        <if test="organIds!=null and organIds.size()>0">-->
+<!--            AND su.organ_id_ IN-->
+<!--            <foreach collection="organIds" item="organId" open="(" close=")" separator=",">-->
+<!--                #{organId}-->
+<!--            </foreach>-->
+<!--        </if>-->
+        GROUP BY su.organ_id_
     </select>
 
     <select id="getOrganTeacherStudentNum" resultType="map">
@@ -1189,26 +1186,12 @@
             #{studentId}
         </foreach>
     </select>
-    <select id="getOrganCloudNewStudentNum" resultType="com.ym.mec.biz.dal.dto.BaseMapDto">
-        SELECT cssp.`user_id_` 'key',count(cs.`id_`) 'value' FROM `course_schedule_student_payment` cssp
-        STRAIGHT_JOIN `course_schedule` cs on cssp.`course_schedule_id_` = cs.`id_`
-        WHERE cs.`status_` = 'OVER' AND cs.`group_type_` = 'MUSIC' AND cs.`del_flag_` = 0
-        <if test="musicGroupIds != null and musicGroupIds.size() > 0">
-            AND cs.music_group_id_ IN
-            <foreach collection="musicGroupIds" item="musicGroupId" open="(" close=")" separator=",">
-                #{musicGroupId}
-            </foreach>
-        </if>
-        <if test="userIds != null and userIds.size() > 0">
-            AND cssp.user_id_ IN
-            <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
-                #{userId}
-            </foreach>
-        </if>
-        GROUP BY cssp.`user_id_`
-    </select>
-    <select id="groupOrganId" resultType="java.util.Map">
-        SELECT su.organ_id_ 'key',COUNT(DISTINCT su.id_) 'value' FROM sys_user su
+    <select id="groupOrganId" resultMap="com.ym.mec.biz.dal.dao.IndexBaseMonthDataDao.IndexBaseMonthData">
+        SELECT su.organ_id_,CURDATE() month_,
+               COUNT(DISTINCT su.id_) total_num_ ,
+               COUNT(DISTINCT su.id_) activate_num_ ,
+               COUNT(DISTINCT su.id_) percent_
+        FROM sys_user su
         WHERE 1 = 1
         <if test="userIds!=null and userIds.size() > 0">
             AND su.id_ IN

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

@@ -1687,14 +1687,14 @@
         </if>
         GROUP BY sr.user_id_
     </select>
-    <select id="findMusicGroupIds" resultType="java.lang.String">
-        SELECT DISTINCT sr.music_group_id_ FROM student_registration sr
-        LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
-        WHERE sr.music_group_status_ = 'NORMAL' AND mg.status_ = 'PROGRESS'
-    </select>
     <select id="findStudentIds" resultType="java.lang.Integer">
         SELECT DISTINCT sr.user_id_ FROM student_registration sr
         LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
         WHERE sr.music_group_status_ = 'NORMAL' AND mg.status_ = 'PROGRESS'
+          AND sr.user_id_ NOT IN (SELECT DISTINCT(cssp.`user_id_`)  FROM `course_schedule_student_payment` cssp
+                                                 LEFT JOIN course_schedule cs on cssp.`course_schedule_id_` = cs.`id_`
+                                                 LEFT JOIN `music_group` mg on mg.`id_` = cssp.`music_group_id_`
+      WHERE cs.`group_type_` = 'MUSIC' AND cs.`status_` = 'OVER' AND mg.`status_` = 'PROGRESS'
+      GROUP BY cssp.`user_id_` HAVING COUNT(cs.`id_`) > 4) AND sr.user_id_ NOT IN (SELECT user_id_ FROM student WHERE subject_id_list_ REGEXP '21|25|26|27|28|29')
     </select>
 </mapper>