Browse Source

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

zouxuan 5 years ago
parent
commit
c29ffc2eb2

+ 9 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java

@@ -7,7 +7,6 @@ import com.ym.mec.biz.dal.entity.School;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupModel;
-import com.ym.mec.common.entity.ImUserModel;
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
@@ -182,6 +181,15 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
     MusicGroup findUserMusicGroup(@Param("userId") Integer userId);
 
     /**
+     * @describe 查询用户的乐团信息
+     * @author Joburgess
+     * @date 2020/2/4
+     * @param userId: 用户编号
+     * @return com.ym.mec.biz.dal.entity.MusicGroup
+     */
+    List<MusicGroup> findUserMusicGroups(@Param("userId") Integer userId);
+
+    /**
      * 获取乐团信息
      *
      * @param list

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java

@@ -26,6 +26,15 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
 	 */
 	Integer searchTeacherId(PracticeGroup practiceGroup);
 
+	/**
+	 * @describe 给广州分部的学生指派老师
+	 * @author Joburgess
+	 * @date 2020/2/4
+	 * @param practiceGroup:
+	 * @return java.lang.Integer
+	 */
+	Integer searchTeacherIdForGuangZhou(PracticeGroup practiceGroup);
+
     /**
      * @describe 获取陪练课预约参数
      * @author Joburgess

+ 137 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -64,6 +64,56 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     private TeacherDao teacherDao;
     @Autowired
     private SysMessageService sysMessageService;
+    @Autowired
+    private MusicGroupDao musicGroupDao;
+
+    private static Map<Integer,Map<Integer,List<Integer>>> schoolSubjectTeachersMap;
+
+    private static final Set<Integer> GUANGZHOU_SUBJECTIDS=new HashSet<Integer>(Arrays.asList(new Integer[]{2,4,5,12,13,15,23}));
+    //广州分部编号
+    private static final Integer GUANGZHOU_ORGAN_ID=3;
+
+    static{
+        schoolSubjectTeachersMap=new HashMap<>();
+        Map<Integer,List<Integer>> subjectTeachersMap1=new HashMap<>();
+        subjectTeachersMap1.put(2,Arrays.asList(new Integer[]{100887,100353,100854,102227}));
+        subjectTeachersMap1.put(4,Arrays.asList(new Integer[]{102209,101110,102084,102141,100753}));
+        subjectTeachersMap1.put(5,Arrays.asList(new Integer[]{102140,100368,100354}));
+        subjectTeachersMap1.put(12,Arrays.asList(new Integer[]{101088,100360,100366}));
+        subjectTeachersMap1.put(13,Arrays.asList(new Integer[]{100363,100873}));
+        subjectTeachersMap1.put(15,Arrays.asList(new Integer[]{100361,100358,102127,100736}));
+        subjectTeachersMap1.put(23,Arrays.asList(new Integer[]{100966,102143,101161}));
+        Integer[] schoolIds1=new Integer[]{258,271,780,408,262,240,270,274,242,259,508,507,241,739,272,248,427,847,991};
+        for (Integer schoolId : schoolIds1) {
+            schoolSubjectTeachersMap.put(schoolId,subjectTeachersMap1);
+        }
+
+        Map<Integer,List<Integer>> subjectTeachersMap2=new HashMap<>();
+        subjectTeachersMap2.put(2,Arrays.asList(new Integer[]{100812,100401,101683,100362,102147}));
+        subjectTeachersMap2.put(4,Arrays.asList(new Integer[]{102096,102145,101386}));
+        subjectTeachersMap2.put(5,Arrays.asList(new Integer[]{100939,101797,101809,102121}));
+        subjectTeachersMap2.put(12,Arrays.asList(new Integer[]{100375,102210,100698}));
+        subjectTeachersMap2.put(13,Arrays.asList(new Integer[]{100873,100876}));
+        subjectTeachersMap2.put(15,Arrays.asList(new Integer[]{102294,102081,101111}));
+        subjectTeachersMap2.put(23,Arrays.asList(new Integer[]{102142,102122,101188}));
+        Integer[] schoolIds2=new Integer[]{928,1044,243,269,250,932,502,943,954,846,266,428,819,961,492};
+        for (Integer schoolId : schoolIds2) {
+            schoolSubjectTeachersMap.put(schoolId,subjectTeachersMap2);
+        }
+
+        Map<Integer,List<Integer>> subjectTeachersMap3=new HashMap<>();
+        subjectTeachersMap3.put(2,Arrays.asList(new Integer[]{102139,101650}));
+        subjectTeachersMap3.put(4,Arrays.asList(new Integer[]{101796,101387}));
+        subjectTeachersMap3.put(5,Arrays.asList(new Integer[]{102229,101388}));
+        subjectTeachersMap3.put(12,Arrays.asList(new Integer[]{100806,101950}));
+        subjectTeachersMap3.put(13,Arrays.asList(new Integer[]{100806,101950}));
+        subjectTeachersMap3.put(15,Arrays.asList(new Integer[]{102203,100640}));
+        subjectTeachersMap3.put(23,Arrays.asList(new Integer[]{101915}));
+        Integer[] schoolIds3=new Integer[]{852,267,245,848,845,862,863,854,781,864,861,931,875};
+        for (Integer schoolId : schoolIds3) {
+            schoolSubjectTeachersMap.put(schoolId,subjectTeachersMap3);
+        }
+    }
 
     @Override
     public BaseDAO<Long, PracticeGroup> getDAO() {
@@ -87,6 +137,15 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if (Objects.isNull(sysUser.getOrganId())) {
             throw new BizException("未找到用户分部属性");
         }
+
+        //如果是广州分部的,并且声部满足条件的需要特殊处理
+        if(sysUser.getOrganId().equals(GUANGZHOU_ORGAN_ID)&&GUANGZHOU_SUBJECTIDS.contains(practiceGroup.getSubjectId())){
+            Integer teacherId=searchTeacherIdForGuangZhou(practiceGroup);
+            if(Objects.nonNull(teacherId)){
+                return teacherId;
+            }
+        }
+
         List<TeacherBasicDto> organAndSubjectTeachers = teacherDao.findTeaTeachersByOrganAndSubject(sysUser.getOrganId(), practiceGroup.getSubjectId());
         if (CollectionUtils.isEmpty(organAndSubjectTeachers)) {
             throw new BizException("未找到合适教师");
@@ -171,6 +230,80 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     }
 
     @Override
+    public Integer searchTeacherIdForGuangZhou(PracticeGroup practiceGroup) {
+        List<MusicGroup>  userMusicGroups=musicGroupDao.findUserMusicGroups(practiceGroup.getStudentId());
+        if(CollectionUtils.isEmpty(userMusicGroups)){
+            return null;
+        }
+        Collections.shuffle(userMusicGroups);
+        Integer schoolId = userMusicGroups.get(0).getSchoolId();
+        if(!schoolSubjectTeachersMap.containsKey(schoolId)){
+            return null;
+        }
+        List<Integer> teacherIds = schoolSubjectTeachersMap.get(schoolId).get(practiceGroup.getSubjectId());
+        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        Integer practiceCourseMinutes=practiceCourseMinutesConfig.getParanValue(Integer.class);
+        Date now = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(now);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.add(Calendar.DATE,1);
+        Date applyStartDay = calendar.getTime();
+        calendar.add(Calendar.DATE,7);
+        Date applyEndDay = calendar.getTime();
+        List<CourseSchedule> allTeacherCourses = courseScheduleDao.findTeachersCoursesWithDateRange(teacherIds, applyStartDay, applyEndDay);
+        List<Integer> includeTeacherIds=new ArrayList<>();
+
+        Date firstClassEndTime = DateUtil.addMinutes(practiceGroup.getFirstCourseTime(), practiceCourseMinutes);
+        Date secondClassEndTime = DateUtil.addMinutes(practiceGroup.getSecondCourseTime(), practiceCourseMinutes);
+
+        Map<Integer, List<CourseSchedule>> teacherCoursesMap = allTeacherCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getActualTeacherId));
+        for (Integer teacherId : teacherIds) {
+            List<CourseSchedule> teacherCourses = teacherCoursesMap.get(teacherId);
+            if(CollectionUtils.isEmpty(teacherCourses)){
+                includeTeacherIds.add(teacherId);
+                continue;
+            }
+            teacherCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
+            boolean enableCreateFirstCourse=true;
+            boolean enableCreateSecondCourse=true;
+            for (int i=0;i<teacherCourses.size()-1;i++) {
+                CourseSchedule preCourseSchedule = teacherCourses.get(i);
+
+                if(practiceGroup.getFirstCourseTime().before(preCourseSchedule.getEndClassTime())
+                        &&firstClassEndTime.after(preCourseSchedule.getStartClassTime())){
+                    enableCreateFirstCourse=false;
+                }
+
+                if(practiceGroup.getSecondCourseTime().before(preCourseSchedule.getEndClassTime())
+                        &&secondClassEndTime.after(preCourseSchedule.getStartClassTime())){
+                    enableCreateSecondCourse=false;
+                }
+            }
+            if (enableCreateFirstCourse&&enableCreateSecondCourse){
+                includeTeacherIds.add(teacherId);
+            }
+        }
+        if(CollectionUtils.isEmpty(includeTeacherIds)){
+            return null;
+        }
+        List<Map<Integer, Integer>> teacherCourseNumMaps = courseScheduleTeacherSalaryDao.countTeacherCourses(includeTeacherIds, GroupType.PRACTICE);
+        HashMap<Integer,Integer> teacherCourseNumMap= (HashMap<Integer, Integer>) MapUtil.convertIntegerMap(teacherCourseNumMaps);
+        for (Integer includeTeacherId : includeTeacherIds) {
+            if(!teacherCourseNumMap.containsKey(includeTeacherId)){
+                teacherCourseNumMap.put(includeTeacherId,0);
+            }
+        }
+        List<Integer> temp=new ArrayList<>();
+        teacherCourseNumMap.entrySet().stream()
+                .sorted((r1,r2)->r1.getValue().compareTo(r2.getValue()))
+                .forEach(result->temp.add(result.getKey()));
+        return temp.get(0);
+    }
+
+    @Override
     public Map getPracticeApplyParams(Integer userId) {
         Map result = new HashMap();
         SysConfig practiceSubjectIdListConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_SUBJECT_ID_LIST);
@@ -354,12 +487,11 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         allCourseDates.add(DateUtil.addDays(practiceGroup.getSecondCourseTime(),7));
         allCourseDates.sort(Comparator.comparing(Date::getTime));
 
-        Integer applyTimes = 0;
-        applyTimes = practiceGroupDao.countUserPracticeApplyRecord(practiceGroup.getStudentId());
+        Integer applyTimes = practiceGroupDao.countUserPracticeApplyRecord(practiceGroup.getStudentId());
 
-        if (applyTimes >= 1) {
-            throw new BizException("您的预约次数已经达到限制");
-        }
+//        if (applyTimes >= 1) {
+//            throw new BizException("您的预约次数已经达到限制");
+//        }
         applyTimes += 1;
 
         practiceGroup.setCoursesStartDate(allCourseDates.get(0));

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

@@ -388,6 +388,12 @@
 		WHERE sr.user_id_ = #{userId} ORDER BY sr.id_ ASC LIMIT 1
 	</select>
 
+	<select id="findUserMusicGroups" resultMap="MusicGroup">
+		SELECT mg.* FROM music_group mg
+		LEFT JOIN student_registration sr on sr.music_group_id_ = mg.id_
+		WHERE sr.user_id_ = #{userId}
+	</select>
+
     <select id="findMusicGroup" resultMap="MusicGroup">
 		SELECT mg.* FROM student_registration sr
 		LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_