ソースを参照

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

zouxuan 5 年 前
コミット
9ff6212f02

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -1046,6 +1046,11 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
                                                           @Param("startTime") Date startTime,
                                                           @Param("endTime") Date endTime);
 
+
+    int countTeacherPracticeCourse(@Param("userId") Integer userId,
+                                                          @Param("startTime") Date startTime,
+                                                          @Param("endTime") Date endTime);
+
     /**
      * @describe 获取教师在指定时间段内的课程
      * @author Joburgess

+ 78 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -700,20 +700,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             throw new BizException("未找到用户分部属性");
         }
 
-        //如果是广州分部的,并且声部满足条件的需要特殊处理
-        if (sysUser.getOrganId().equals(GUANGZHOU_ORGAN_ID) && GUANGZHOU_SUBJECTIDS.contains(subjectId)) {
-            List<MusicGroup> userMusicGroups = musicGroupDao.findUserMusicGroups(userId);
-            if (!CollectionUtils.isEmpty(userMusicGroups)) {
-                Collections.shuffle(userMusicGroups);
-                Integer schoolId = userMusicGroups.get(0).getSchoolId();
-                if (schoolSubjectTeachersMap.containsKey(schoolId)) {
-                    List<Integer> teacherIds = schoolSubjectTeachersMap.get(schoolId).get(subjectId);
-                    if (!CollectionUtils.isEmpty(teacherIds)) {
-                        return teacherDao.findSimpleTeachers(teacherIds);
-                    }
-                }
-            }
-        } else if (sysUser.getOrganId().equals(DALIAN_ORGAN_ID)) {
+        if (sysUser.getOrganId().equals(DALIAN_ORGAN_ID)) {
             sysUser.setOrganId(SHENYANG_ORGAN_ID);
         }
 
@@ -1808,10 +1795,83 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
         Subject subject = subjectDao.get(practiceGroup.getSubjectId());
         if (Objects.isNull(subject)) {
-            result.put("status", "DISABLE_SUBJECT");
+            result.put("status", "TEACHER_PRACTICE_REPEAT");
             result.put("info", "预约失败,声部选择错误,请重试。");
             return result;
         }
+
+        Date monday1 = DateUtil.getWeekDayWithDate(allCourseDates.get(0), Calendar.MONDAY);
+        Date sunday1 = DateUtil.getWeekDayWithDate(allCourseDates.get(0), Calendar.SUNDAY);
+        int tp1 = courseScheduleDao.countTeacherPracticeCourse(practiceGroup.getUserId(), monday1, sunday1);
+        if(tp1>=80){
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            result.put("status", "TEACHER_PRACTICE_REPEAT");
+            result.put("info", "抱歉啦,当前所选时段组合,「" + teacher.getRealName() +"」老师已被预约,请重新选择时段或更换老师后重试。");
+            return result;
+        }
+
+        Date monday2 = DateUtil.getWeekDayWithDate(allCourseDates.get(1), Calendar.MONDAY);
+        Date sunday2 = DateUtil.getWeekDayWithDate(allCourseDates.get(1), Calendar.SUNDAY);
+        int tp2 = courseScheduleDao.countTeacherPracticeCourse(practiceGroup.getUserId(), monday2, sunday2);
+        if(tp2>=80){
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            result.put("status", "TEACHER_PRACTICE_REPEAT");
+            result.put("info", "抱歉啦,当前所选时段组合,「" + teacher.getRealName() +"」老师已被预约,请重新选择时段或更换老师后重试。");
+            return result;
+        }
+
+        Date monday3 = DateUtil.getWeekDayWithDate(allCourseDates.get(2), Calendar.MONDAY);
+        Date sunday3 = DateUtil.getWeekDayWithDate(allCourseDates.get(2), Calendar.SUNDAY);
+        int tp3 = courseScheduleDao.countTeacherPracticeCourse(practiceGroup.getUserId(), monday3, sunday3);
+        if(tp3>=80){
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            result.put("status", "TEACHER_PRACTICE_REPEAT");
+            result.put("info", "抱歉啦,当前所选时段组合,「" + teacher.getRealName() +"」老师已被预约,请重新选择时段或更换老师后重试。");
+            return result;
+        }
+
+        Date monday4 = DateUtil.getWeekDayWithDate(allCourseDates.get(3), Calendar.MONDAY);
+        Date sunday4 = DateUtil.getWeekDayWithDate(allCourseDates.get(3), Calendar.SUNDAY);
+        int tp4 = courseScheduleDao.countTeacherPracticeCourse(practiceGroup.getUserId(), monday4, sunday4);
+        if(tp4>=80){
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            result.put("status", "TEACHER_PRACTICE_REPEAT");
+            result.put("info", "抱歉啦,当前所选时段组合,「" + teacher.getRealName() +"」老师已被预约,请重新选择时段或更换老师后重试。");
+            return result;
+        }
+
+        List<CourseSchedule> courseSchedules6 = courseScheduleDao.findTeacherCoursesWithIncludeDateRange(practiceGroup.getUserId(), allCourseDates.get(0), DateUtil.addMinutes(allCourseDates.get(0), practiceCourseMinutes));
+        List<CourseSchedule> courseSchedules7 = courseScheduleDao.findTeacherCoursesWithIncludeDateRange(practiceGroup.getUserId(), allCourseDates.get(1), DateUtil.addMinutes(allCourseDates.get(1), practiceCourseMinutes));
+        List<CourseSchedule> courseSchedules8 = courseScheduleDao.findTeacherCoursesWithIncludeDateRange(practiceGroup.getUserId(), allCourseDates.get(2), DateUtil.addMinutes(allCourseDates.get(2), practiceCourseMinutes));
+        List<CourseSchedule> courseSchedules9 = courseScheduleDao.findTeacherCoursesWithIncludeDateRange(practiceGroup.getUserId(), allCourseDates.get(3), DateUtil.addMinutes(allCourseDates.get(3), practiceCourseMinutes));
+
+        if (!CollectionUtils.isEmpty(courseSchedules6) || !CollectionUtils.isEmpty(courseSchedules7)
+                ||!CollectionUtils.isEmpty(courseSchedules8) || !CollectionUtils.isEmpty(courseSchedules9)) {
+            if (courseSchedules6 == null) {
+                courseSchedules6 = new ArrayList<>();
+            }
+            if (courseSchedules7 == null) {
+                courseSchedules7 = new ArrayList<>();
+            }
+            if (courseSchedules7 == null) {
+                courseSchedules7 = new ArrayList<>();
+            }
+            if (courseSchedules8 == null) {
+                courseSchedules8 = new ArrayList<>();
+            }
+            courseSchedules6.addAll(courseSchedules7);
+            courseSchedules6.addAll(courseSchedules8);
+            courseSchedules6.addAll(courseSchedules9);
+            for (int i = 0; i < courseSchedules6.size(); i++) {
+                if (courseSchedules6.get(i).getGroupType().equals(GroupType.PRACTICE)) {
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    result.put("status", "TEACHER_PRACTICE_REPEAT");
+                    result.put("info", "抱歉啦,当前所选时段组合,「" + teacher.getRealName() +"」老师已被预约,请选择其他时段或更换老师后重试。");
+                    return result;
+                }
+            }
+        }
+
         practiceGroup.setName(subject.getName() + "•" + sysUser.getUsername());
         practiceGroup.setSingleClassMinutes(practiceCourseMinutes);
         practiceGroupDao.insert(practiceGroup);
@@ -1946,21 +2006,21 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             studentDao.update(student);
         }
 
-        List<CourseSchedule> studentRepeatCourse1 = courseScheduleDao.findStudentCoursesWithIncludeDateRange(practiceGroup.getStudentId(), allCourseDates.get(0), DateUtil.addMinutes(allCourseDates.get(2), practiceCourseMinutes));
+        List<CourseSchedule> studentRepeatCourse1 = courseScheduleDao.findStudentCoursesWithIncludeDateRange(practiceGroup.getStudentId(), allCourseDates.get(0), DateUtil.addMinutes(allCourseDates.get(0), practiceCourseMinutes));
         if (!CollectionUtils.isEmpty(studentRepeatCourse1)) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             result.put("status", "STUDENT_COURSE_REPEAT");
             result.put("info", "抱歉啦,当前所选时段组合,与您现有课程「"+studentRepeatCourse1.get(0).getName()+"」时段冲突,请选择其他时段重试。");
             return result;
         }
-        List<CourseSchedule> studentRepeatCourse2 = courseScheduleDao.findStudentCoursesWithIncludeDateRange(practiceGroup.getStudentId(), allCourseDates.get(1), DateUtil.addMinutes(allCourseDates.get(3), practiceCourseMinutes));
+        List<CourseSchedule> studentRepeatCourse2 = courseScheduleDao.findStudentCoursesWithIncludeDateRange(practiceGroup.getStudentId(), allCourseDates.get(1), DateUtil.addMinutes(allCourseDates.get(1), practiceCourseMinutes));
         if (!CollectionUtils.isEmpty(studentRepeatCourse2)) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             result.put("status", "STUDENT_COURSE_REPEAT");
             result.put("info", "抱歉啦,当前所选时段组合,与您现有课程「"+studentRepeatCourse2.get(0).getName()+"」时段冲突,请选择其他时段重试。");
             return result;
         }
-        List<CourseSchedule> studentRepeatCourse3 = courseScheduleDao.findStudentCoursesWithIncludeDateRange(practiceGroup.getStudentId(), allCourseDates.get(2), DateUtil.addMinutes(allCourseDates.get(3), practiceCourseMinutes));
+        List<CourseSchedule> studentRepeatCourse3 = courseScheduleDao.findStudentCoursesWithIncludeDateRange(practiceGroup.getStudentId(), allCourseDates.get(2), DateUtil.addMinutes(allCourseDates.get(2), practiceCourseMinutes));
         if (!CollectionUtils.isEmpty(studentRepeatCourse3)) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             result.put("status", "STUDENT_COURSE_REPEAT");

+ 30 - 23
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -2124,6 +2124,18 @@
             #{userId}
         </foreach>
     </select>
+    <select id="countTeacherPracticeCourse" resultType="int">
+        SELECT
+            COUNT(1)
+        FROM
+        course_schedule_teacher_salary csts
+        LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
+        WHERE
+        (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
+        AND cs.group_type_='PRACTICE'
+        AND cs.class_date_ BETWEEN DATE_FORMAT(#{startTime},"%Y-%m-%d") AND DATE_FORMAT(#{endTime},"%Y-%m-%d")
+        AND csts.user_id_ =#{userId}
+    </select>
     <select id="findTeacherCoursesWithDateRange" resultMap="CourseSchedule">
         SELECT
         cs.id_,
@@ -2257,30 +2269,25 @@
     <select id="findUserCourses" resultMap="CourseSchedule">
         SELECT
             cs.id_,
-            cs.class_group_id_,
-            cs.group_type_,
-            cs.music_group_id_,
-            cs.status_,
-            CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
-            CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
-            cs.teacher_id_,
-            cs.teach_mode_,
-            cs.type_
-        FROM
-          course_schedule_student_payment cssp
-          LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-          LEFT JOIN class_group cg ON cg.id_ = cssp.class_group_id_
-          LEFT JOIN class_group_student_mapper cgsm ON cgsm.user_id_ = cssp.user_id_
-          AND cssp.class_group_id_ = cgsm.class_group_id_
+            cs.`type_`,
+            cgtm.`user_id_` teacher_id_
+        FROM
+          `class_group_student_mapper` cgsm
+            LEFT JOIN `class_group` cg ON cgsm.`class_group_id_` = cg.`id_`
+            LEFT JOIN `class_group_teacher_mapper` cgtm ON cgtm.`class_group_id_` = cg.`id_`
+            AND cgtm.`teacher_role_` = 'BISHOP'
+            LEFT JOIN `course_schedule` cs ON cs.`class_group_id_` = cg.`id_`
         WHERE
-          ( cs.del_flag_ != 1 OR cs.del_flag_ IS NULL )
-          AND cssp.user_id_ = #{userId}
-          AND cgsm.status_ = 'NORMAL'
-          AND cg.type_ IN ('NORMAL','HIGH','VIP')
-          AND cs.teacher_id_ IN
-          <foreach collection="teacherIds" item="teacherId" open="(" close=")" separator=",">
-              #{teacherId}
-          </foreach>
+            cgtm.user_id_=#{userId}
+            AND cgtm.teacher_role_='BISHOP'
+            AND cgsm.status_ = 'NORMAL'
+            AND cg.`type_` IN ( 'NORMAL', 'HIGH', 'VIP' )
+            AND cs.`id_` IS NOT NULL
+            AND cgtm.user_id_ IN
+            <foreach collection="teacherIds" item="teacherId" open="(" close=")" separator=",">
+                #{teacherId}
+            </foreach>
+            AND ( cs.del_flag_ != 1 OR cs.del_flag_ IS NULL )
     </select>
 
     <select id="queryTeacherName" resultType="java.util.Map">