Browse Source

学员列表新增是否有剩余课时查询

zouxuan 4 years ago
parent
commit
b9ca80b9dd

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentStudentCourseDetailDao.java

@@ -109,4 +109,20 @@ public interface MusicGroupPaymentStudentCourseDetailDao extends BaseDAO<Long, M
      * @return
      */
     List<Map<Integer, Integer>> queryStudentSubTotalCourseTimes(@Param("userId") Integer userId, @Param("musicGroupId") String musicGroupId);
+
+    /**
+     * 获取有可用时长的学员列表
+     *
+     * @param musicGroupId
+     * @return
+     */
+    List<Integer> queryHasSubTotalCourseTimeStudentIds(@Param("musicGroupId") String musicGroupId, @Param("hasSubCourseTime") Boolean hasSubCourseTime);
+
+    /**
+     * 获取没有可用时长的学员列表
+     *
+     * @param musicGroupId
+     * @return
+     */
+    List<Integer> queryNoSubTotalCourseTimeStudentIds(@Param("musicGroupId") String musicGroupId, @Param("hasSubCourseTime") Boolean hasSubCourseTime);
 }

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

@@ -146,6 +146,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     BACKSTAGE_STUDENT_OK_QUIT_COURSE("BACKSTAGE_STUDENT_OK_QUIT_COURSE", "学员确认退课"),
     BACKSTAGE_STUDENT_APPEAL("BACKSTAGE_STUDENT_APPEAL", "学员申述"),
     BACKSTAGE_STUDENT_APPLY_QUIT_GROUP("BACKSTAGE_STUDENT_APPLY_QUIT_GROUP", "学员申请退团"),
+    PUSH_STUDENT_COMMIT_QUIT_MUSIC_APPLY("PUSH_STUDENT_COMMIT_QUIT_MUSIC_APPLY", "学员申请退团"),
     BACKSTAGE_STUDENT_APPLY_QUIT_COURSE("BACKSTAGE_STUDENT_APPLY_QUIT_COURSE", "学员申请退课"),
     BACKSTAGE_STUDENT_APPLY_WITHDRAW("BACKSTAGE_STUDENT_APPLY_WITHDRAW", "学员申请提现"),
     PUSH_STUDY_REPORT("PUSH_STUDY_REPORT", "陪练报告"),

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupStudentQueryInfo.java

@@ -31,6 +31,17 @@ public class MusicGroupStudentQueryInfo extends QueryInfo {
 
   private boolean isExport = false;
 
+  @ApiModelProperty(value = "是否有剩余课时")
+  private Boolean hasSubCourseTime;
+
+  public Boolean getHasSubCourseTime() {
+    return hasSubCourseTime;
+  }
+
+  public void setHasSubCourseTime(Boolean hasSubCourseTime) {
+    this.hasSubCourseTime = hasSubCourseTime;
+  }
+
   public boolean getIsExport() {
     return isExport;
   }

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

@@ -1536,7 +1536,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         memo.put("Id", musicGroupQuit.getId());
         memo.put("type", "MUSICGROUP");
 
-        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_STUDENT_APPLY_QUIT_GROUP, JSONObject.toJSONString(memo), sysUser.getUsername());
+        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()),
+                MessageTypeEnum.BACKSTAGE_STUDENT_APPLY_QUIT_GROUP, JSONObject.toJSONString(memo), sysUser.getUsername());
+        Map<Integer, String> receivers = new HashMap<>(1);
+        receivers.put(musicGroup.getEducationalTeacherId(),musicGroup.getEducationalTeacherId().toString());
+        sysMessageService.batchSendMessage(MessageSender.JIGUANG,MessageTypeEnum.PUSH_STUDENT_COMMIT_QUIT_MUSIC_APPLY,
+                receivers,null,0,null,"SYSTEM",musicGroup.getName(),sysUser.getUsername());
         return true;
     }
 

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java

@@ -417,6 +417,19 @@ public class StudentManageServiceImpl implements StudentManageService {
         MapUtil.populateMap(params, queryInfo);
         List<MusicGroupStudentsDto> dataList = null;
         String musicGroupId = queryInfo.getMusicGroupId();
+        //是否有剩余课时
+        if(queryInfo.getHasSubCourseTime() != null){
+            List<Integer> students = new ArrayList<>();
+            if(queryInfo.getHasSubCourseTime()){
+                students = musicGroupPaymentStudentCourseDetailDao.queryHasSubTotalCourseTimeStudentIds(musicGroupId,queryInfo.getHasSubCourseTime());
+            }else {
+                students = musicGroupPaymentStudentCourseDetailDao.queryNoSubTotalCourseTimeStudentIds(musicGroupId,queryInfo.getHasSubCourseTime());
+            }
+            if (students.size() == 0){
+                return pageInfo;
+            }
+            params.put("studentIds", students);
+        }
         int count = studentManageDao.countMusicGroupStudent(params);
         if (queryInfo.getIsExport() && count > 50000) {
             throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -412,6 +412,9 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 							null,0,"6?sealClassId=" + courseScheduleId + "&subjectName=" + name ,"STUDENT",courseSchedule.getName());
 				}
 			}
+		}else if(StringUtils.isNotEmpty(teacherAttendance.getSignInDeviceNo())){
+			teacherAttendance.setSignInDeviceNo(deviceNum);
+			teacherAttendanceDao.update(teacherAttendance);
 		}
 	}
 

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

@@ -173,6 +173,9 @@
 	            <if test="item.memo != null">
 	                memo_ = #{item.memo},
 	            </if>
+	            <if test="item.auditMemo != null">
+	                audit_memo_ = #{item.auditMemo},
+	            </if>
 	            <if test="item.startPaymentDate != null">
 	                start_payment_date_ = #{item.startPaymentDate},
 	            </if>

+ 24 - 4
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentStudentCourseDetailMapper.xml

@@ -230,10 +230,13 @@
         SELECT mgpscd.user_id_ 'key',SUM(CASE WHEN mgpscd.used_course_minutes_ = 0 THEN mgpscd.total_course_minutes_ ELSE 0 END) 'value'
         FROM music_group_payment_student_course_detail mgpscd
         LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpscd.music_group_payment_calender_id_
-        WHERE mgpc.music_group_id_ = #{musicGroupId} AND mgpscd.user_id_ IN
-        <foreach collection="studentIds" open="(" close=")" item="item" separator=",">
-            #{item}
-        </foreach>
+        WHERE mgpc.music_group_id_ = #{musicGroupId}
+        <if test="studentIds != null">
+            AND mgpscd.user_id_ IN
+            <foreach collection="studentIds" open="(" close=")" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
         GROUP BY mgpscd.user_id_
     </select>
 
@@ -244,4 +247,21 @@
         WHERE mgpc.music_group_id_ = #{musicGroupId} AND mgpscd.user_id_ = #{userId}
         GROUP BY mgpscd.course_type_
     </select>
+
+    <select id="queryHasSubTotalCourseTimeStudentIds" resultType="java.lang.Integer">
+        SELECT DISTINCT mgpscd.user_id_
+        FROM music_group_payment_student_course_detail mgpscd
+        LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpscd.music_group_payment_calender_id_
+        WHERE mgpc.music_group_id_ = #{musicGroupId} AND mgpscd.used_course_minutes_ = 0
+    </select>
+
+    <select id="queryNoSubTotalCourseTimeStudentIds" resultType="java.lang.Integer">
+        SELECT DISTINCT mgpscd.user_id_ FROM music_group_payment_student_course_detail mgpscd
+        LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpscd.music_group_payment_calender_id_
+        WHERE mgpc.music_group_id_ = #{musicGroupId} AND mgpscd.user_id_ NOT IN (
+                SELECT DISTINCT mgpscd1.user_id_
+                FROM music_group_payment_student_course_detail mgpscd1
+                LEFT JOIN music_group_payment_calender mgpc1 ON mgpc1.id_ = mgpscd1.music_group_payment_calender_id_
+                WHERE mgpc1.music_group_id_ = #{musicGroupId} AND mgpscd1.used_course_minutes_ = 0)
+    </select>
 </mapper>

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -418,6 +418,12 @@
 
     <sql id="queryMusicGroupStudentSql">
         <where>
+            <if test="studentIds != null">
+                AND su.id_ IN
+                <foreach collection="studentIds" open="(" close=")" separator="," item="item">
+                    #{item}
+                </foreach>
+            </if>
             <if test="search != null and search != ''">
                 AND (su.id_ = #{search} OR su.username_ LIKE CONCAT("%",#{search},"%") OR su.phone_ LIKE CONCAT("%",#{search},"%"))
             </if>

+ 35 - 26
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -276,18 +276,22 @@ public class RoomServiceImpl implements RoomService {
         if(roomMember == null){
             return ;
         }
-//        String joinSuccessKey = "joinRoomSuccess"+ roomId + userId;
-//        if(redisTemplate.hasKey(joinSuccessKey)){
-//            //兼容旧版本,防止重复调用
-//            redisTemplate.delete(joinSuccessKey);
-//            return;
-//        }
-//        String leaveSuccessKey = "leaveRoomSuccess"+ roomId + userId;
-//        if(redisTemplate.hasKey(leaveSuccessKey)){
-//            redisTemplate.delete(leaveSuccessKey);
-//        }
-//        redisTemplate.opsForValue().setIfAbsent(joinSuccessKey,roomId,2l,TimeUnit.SECONDS);
-//        log.info("joinRoomSuccess : roomId={}, userId={}", roomId, userId);
+        String joinSuccessKey = "joinRoomSuccess"+ roomId + userId;
+        if(redisTemplate.hasKey(joinSuccessKey)){
+            //兼容旧版本,防止重复调用
+            redisTemplate.delete(joinSuccessKey);
+            RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
+            if(roleEnum == RoleTeacher && StringUtils.isNotEmpty(deviceNum)){
+                signInSuccess(roomMember,deviceNum);
+            }
+            return;
+        }
+        String leaveSuccessKey = "leaveRoomSuccess"+ roomId + userId;
+        if(redisTemplate.hasKey(leaveSuccessKey)){
+            redisTemplate.delete(leaveSuccessKey);
+        }
+        redisTemplate.opsForValue().setIfAbsent(joinSuccessKey,roomId,2l,TimeUnit.SECONDS);
+        log.info("joinRoomSuccess : roomId={}, userId={}", roomId, userId);
 
         RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
         CourseSchedule schedule = courseScheduleDao.getLock(Long.parseLong(roomId.substring(1)));
@@ -410,21 +414,26 @@ public class RoomServiceImpl implements RoomService {
         if(roomMember == null){
             return ;
         }
-//        String leaveSuccessKey = "leaveRoomSuccess"+ roomId + userId;
-//        if(redisTemplate.hasKey(leaveSuccessKey)){
-//            redisTemplate.delete(leaveSuccessKey);
-//            //如果设备号不为空,更新设备号
-//            return;
-//        }
-//        String joinSuccessKey = "joinRoomSuccess"+ roomId + userId;
-//        if(redisTemplate.hasKey(joinSuccessKey)){
-//            redisTemplate.delete(joinSuccessKey);
-//        }
-//        redisTemplate.opsForValue().setIfAbsent(leaveSuccessKey,roomId,2,TimeUnit.SECONDS);
-//        //记录
-//        log.info("leaveRoomSuccess: roomId={}, userId={}", roomId,userId);
-        RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
+        String leaveSuccessKey = "leaveRoomSuccess"+ roomId + userId;
         Integer firstCourseId = Integer.parseInt(roomId.substring(1));
+        if(redisTemplate.hasKey(leaveSuccessKey)){
+            redisTemplate.delete(leaveSuccessKey);
+            //如果设备号不为空,更新设备号
+            RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
+            if(roleEnum == RoleTeacher && StringUtils.isNotEmpty(deviceNum)){
+                signInSuccess(roomMember,deviceNum);
+                teacherAttendanceService.addTeacherAttendanceSignOut(firstCourseId.longValue(),Integer.parseInt(userId),deviceNum);
+            }
+            return;
+        }
+        String joinSuccessKey = "joinRoomSuccess"+ roomId + userId;
+        if(redisTemplate.hasKey(joinSuccessKey)){
+            redisTemplate.delete(joinSuccessKey);
+        }
+        redisTemplate.opsForValue().setIfAbsent(leaveSuccessKey,roomId,2,TimeUnit.SECONDS);
+        //记录
+        log.info("leaveRoomSuccess: roomId={}, userId={}", roomId,userId);
+        RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
 
         if(roleEnum == RoleTeacher){
             courseScheduleStudentPaymentDao.adjustPlayMidi(firstCourseId,null,null);