Ver código fonte

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

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
zouxuan 5 anos atrás
pai
commit
e2638564d3

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

@@ -125,7 +125,7 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     /**
      * @describe 教师请假数据
      */
-    String TEACHER_LEAVE_DATAS = "teacher_leave_datas";
+    String TEACHER_LEAVE_DATA = "teacher_leave_data";
     
     /**
      * 十分钟内最大可发送的短信次数

+ 246 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -14,7 +14,6 @@ import com.ym.mec.biz.service.PracticeGroupService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.biz.service.TeacherService;
-import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupMember;
 import com.ym.mec.common.entity.ImGroupModel;
@@ -42,8 +41,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     @Autowired
     private PracticeGroupDao practiceGroupDao;
     @Autowired
-    private VipGroupDao vipGroupDao;
-    @Autowired
     private SysConfigService sysConfigService;
     @Autowired
     private SubjectDao subjectDao;
@@ -189,6 +186,18 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if (CollectionUtils.isEmpty(organAndSubjectTeachers)) {
             return null;
         }
+
+        boolean checkTeacherLeaveDate = true;
+        SysConfig allTeacherLeaveDataConfig = sysConfigService.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
+        JSONObject allTeacherLeaveData = JSONObject.parseObject(allTeacherLeaveDataConfig.getParanValue());
+        JSONObject organTeacherLeaveData = null;
+        if(Objects.nonNull(allTeacherLeaveData)){
+            organTeacherLeaveData = allTeacherLeaveData.getJSONObject(sysUser.getOrganId().toString());
+        }
+        if(Objects.isNull(organTeacherLeaveData)){
+            checkTeacherLeaveDate=false;
+        }
+
         SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         List<Integer> teacherIds = organAndSubjectTeachers.stream().map(TeacherBasicDto::getId).collect(Collectors.toList());
@@ -231,6 +240,83 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
             Map<Integer, List<CourseSchedule>> teacherCoursesMap = allTeacherCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getActualTeacherId));
             for (Integer teacherId : teacherIds) {
+                if(Objects.nonNull(organTeacherLeaveData)){
+                    checkTeacherLeaveDate=true;
+                }
+                JSONObject teacherLeaveData=null;
+                if(checkTeacherLeaveDate){
+                    teacherLeaveData=organTeacherLeaveData.getJSONObject(teacherId.toString());
+                }
+                if(Objects.isNull(teacherLeaveData)){
+                    checkTeacherLeaveDate=false;
+                }
+
+                if(teacherId==100473){
+                    checkTeacherLeaveDate=false;
+                    Calendar tempCalendar=Calendar.getInstance();
+                    tempCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+                    tempCalendar.setTime(practiceGroup.getFirstCourseTime());
+                    if(tempCalendar.get(Calendar.DAY_OF_WEEK)==Calendar.MONDAY
+                        ||tempCalendar.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
+                        String date_str=DateUtil.dateToString(practiceGroup.getFirstCourseTime(),"yyyy-MM-dd");
+                        Date date1=DateUtil.stringToDate(date_str+" 11:30:00");
+                        Date date2=DateUtil.stringToDate(date_str+" 14:30:00");
+                        Date date3=DateUtil.stringToDate(date_str+" 20:30:00");
+                        if(practiceGroup.getFirstCourseTime().before(date2)
+                                && firstClassEndTime.after(date1)){
+                            continue;
+                        }
+                        if(date3.before(firstClassEndTime)){
+                            continue;
+                        }
+                    }
+                    if(tempCalendar.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY){
+                        continue;
+                    }
+
+                    tempCalendar.setTime(practiceGroup.getSecondCourseTime());
+                    if(tempCalendar.get(Calendar.DAY_OF_WEEK)==Calendar.MONDAY
+                            ||tempCalendar.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
+                        String date_str=DateUtil.dateToString(practiceGroup.getSecondCourseTime(),"yyyy-MM-dd");
+                        Date date1=DateUtil.stringToDate(date_str+" 11:30:00");
+                        Date date2=DateUtil.stringToDate(date_str+" 14:30:00");
+                        Date date3=DateUtil.stringToDate(date_str+" 20:30:00");
+                        if(practiceGroup.getSecondCourseTime().before(date2)
+                                && firstClassEndTime.after(date1)){
+                            continue;
+                        }
+                        if(date3.before(secondClassEndTime)){
+                            continue;
+                        }
+                    }
+                    if(tempCalendar.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY){
+                        continue;
+                    }
+                }
+
+                if(checkTeacherLeaveDate){
+                    String dateStr=DateUtil.dateToString(practiceGroup.getFirstCourseTime(),"yyyy-MM-dd");
+                    JSONObject leaveDateData=teacherLeaveData.getJSONObject(dateStr);
+                    if(Objects.nonNull(leaveDateData)){
+                        Date leaveStartTime=leaveDateData.getDate("leave_start_time");
+                        Date leaveEndTime=leaveDateData.getDate("leave_end_time");
+                        if(practiceGroup.getFirstCourseTime().before(leaveEndTime)
+                                && firstClassEndTime.after(leaveStartTime)){
+                            continue;
+                        }
+                    }
+                    String dateStr2=DateUtil.dateToString(practiceGroup.getSecondCourseTime(),"yyyy-MM-dd");
+                    JSONObject leaveDateData2=teacherLeaveData.getJSONObject(dateStr2);
+                    if(Objects.nonNull(leaveDateData2)){
+                        Date leaveStartTime=leaveDateData2.getDate("leave_start_time");
+                        Date leaveEndTime=leaveDateData2.getDate("leave_end_time");
+                        if(practiceGroup.getSecondCourseTime().before(leaveEndTime)
+                                && secondClassEndTime.after(leaveStartTime)){
+                            continue;
+                        }
+                    }
+                }
+
                 List<CourseSchedule> teacherCourses = teacherCoursesMap.get(teacherId);
                 if (CollectionUtils.isEmpty(teacherCourses)) {
                     if (!excludeFirstTime) {
@@ -298,7 +384,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                         || practiceGroup.getSecondCourseTime().after(enableApplyEndDate)) {
                     enableCreateSecondCourse = false;
                 }
-                for (int i = 0; i < applyDateRangeCourses.size() - 1; i++) {
+                for (int i = 0; i < applyDateRangeCourses.size(); i++) {
                     CourseSchedule preCourseSchedule = applyDateRangeCourses.get(i);
 
                     if (practiceGroup.getFirstCourseTime().before(preCourseSchedule.getEndClassTime())
@@ -382,6 +468,18 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
         List<Integer> teacherIds = schoolSubjectTeachersMap.get(schoolId).get(practiceGroup.getSubjectId());
         teacherDao.lockTeachers(teacherIds);
+
+        boolean checkTeacherLeaveDate = true;
+        SysConfig allTeacherLeaveDataConfig = sysConfigService.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
+        JSONObject allTeacherLeaveData = JSONObject.parseObject(allTeacherLeaveDataConfig.getParanValue());
+        JSONObject organTeacherLeaveData = null;
+        if(Objects.nonNull(allTeacherLeaveData)){
+            organTeacherLeaveData = allTeacherLeaveData.getJSONObject(GUANGZHOU_ORGAN_ID.toString());
+        }
+        if(Objects.isNull(organTeacherLeaveData)){
+            checkTeacherLeaveDate=false;
+        }
+
         SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         Date now = new Date();
@@ -421,6 +519,40 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
             Map<Integer, List<CourseSchedule>> teacherCoursesMap = allTeacherCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getActualTeacherId));
             for (Integer teacherId : teacherIds) {
+                if(Objects.nonNull(organTeacherLeaveData)){
+                    checkTeacherLeaveDate=true;
+                }
+                JSONObject teacherLeaveData=null;
+                if(checkTeacherLeaveDate){
+                    teacherLeaveData=organTeacherLeaveData.getJSONObject(teacherId.toString());
+                }
+                if(Objects.isNull(teacherLeaveData)){
+                    checkTeacherLeaveDate=false;
+                }
+
+                if(checkTeacherLeaveDate){
+                    String dateStr=DateUtil.dateToString(practiceGroup.getFirstCourseTime(),"yyyy-MM-dd");
+                    JSONObject leaveDateData=teacherLeaveData.getJSONObject(dateStr);
+                    if(Objects.nonNull(leaveDateData)){
+                        Date leaveStartTime=leaveDateData.getDate("leave_start_time");
+                        Date leaveEndTime=leaveDateData.getDate("leave_end_time");
+                        if(practiceGroup.getFirstCourseTime().before(leaveEndTime)
+                                && firstClassEndTime.after(leaveStartTime)){
+                            continue;
+                        }
+                    }
+                    String dateStr2=DateUtil.dateToString(practiceGroup.getSecondCourseTime(),"yyyy-MM-dd");
+                    JSONObject leaveDateData2=teacherLeaveData.getJSONObject(dateStr2);
+                    if(Objects.nonNull(leaveDateData2)){
+                        Date leaveStartTime=leaveDateData2.getDate("leave_start_time");
+                        Date leaveEndTime=leaveDateData2.getDate("leave_end_time");
+                        if(practiceGroup.getSecondCourseTime().before(leaveEndTime)
+                                && secondClassEndTime.after(leaveStartTime)){
+                            continue;
+                        }
+                    }
+                }
+
                 List<CourseSchedule> teacherCourses = teacherCoursesMap.get(teacherId);
                 if (CollectionUtils.isEmpty(teacherCourses)) {
                     if (!excludeFirstTime) {
@@ -489,7 +621,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                     enableCreateSecondCourse = false;
                 }
 
-                for (int i = 0; i < applyDateRangeCourses.size() - 1; i++) {
+                for (int i = 0; i < applyDateRangeCourses.size(); i++) {
                     CourseSchedule preCourseSchedule = applyDateRangeCourses.get(i);
 
                     if (practiceGroup.getFirstCourseTime().before(preCourseSchedule.getEndClassTime())
@@ -609,6 +741,17 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         }
         teacherDao.lockTeachers(teacherIds);
 
+        boolean checkTeacherLeaveDate = true;
+        SysConfig allTeacherLeaveDataConfig = sysConfigService.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
+        JSONObject allTeacherLeaveData = JSONObject.parseObject(allTeacherLeaveDataConfig.getParanValue());
+        JSONObject organTeacherLeaveData = null;
+        if(Objects.nonNull(allTeacherLeaveData)){
+            organTeacherLeaveData = allTeacherLeaveData.getJSONObject(sysUser.getOrganId().toString());
+        }
+        if(Objects.isNull(organTeacherLeaveData)){
+            checkTeacherLeaveDate=false;
+        }
+
         Date now = new Date();
         if (now.before(applyStartDay)) {
             now = applyStartDay;
@@ -648,9 +791,61 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 if (excludeTeacherIds.contains(teacherId)) {
                     continue;
                 }
+                if(Objects.nonNull(organTeacherLeaveData)){
+                    checkTeacherLeaveDate=true;
+                }
+                JSONObject teacherLeaveData=null;
+                if(checkTeacherLeaveDate){
+                    teacherLeaveData=organTeacherLeaveData.getJSONObject(teacherId.toString());
+                }
+
+                if(Objects.isNull(teacherLeaveData)){
+                    checkTeacherLeaveDate=false;
+                }
                 List<CourseSchedule> teacherCourses = teacherCoursesMap.get(teacherId);
                 if (CollectionUtils.isEmpty(teacherCourses)) {
-                    allTeacherFreeDates = new HashSet<>(enableApplyDates);
+                    for (Date enableApplyDate : enableApplyDates) {
+                        if (Objects.nonNull(firstClassTime) && DateUtil.isSameDay(enableApplyDate, firstClassTime)) {
+                            continue;
+                        }
+                        Date enableApplyDateCourseEndTime = DateUtil.addMinutes(enableApplyDate, practiceCourseMinutes);
+                        if(teacherId==100473){
+                            checkTeacherLeaveDate=false;
+                            Calendar tempCalendar=Calendar.getInstance();
+                            tempCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+                            tempCalendar.setTime(enableApplyDate);
+                            if(tempCalendar.get(Calendar.DAY_OF_WEEK)==Calendar.MONDAY
+                                    ||tempCalendar.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
+                                String date_str=DateUtil.dateToString(enableApplyDate,"yyyy-MM-dd");
+                                Date date1=DateUtil.stringToDate(date_str+" 11:30:00");
+                                Date date2=DateUtil.stringToDate(date_str+" 14:30:00");
+                                Date date3=DateUtil.stringToDate(date_str+" 20:30:00");
+                                if(enableApplyDate.before(date2)
+                                        && enableApplyDateCourseEndTime.after(date1)){
+                                    continue;
+                                }
+                                if(date3.before(enableApplyDateCourseEndTime)){
+                                    continue;
+                                }
+                            }
+                            if(tempCalendar.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY){
+                                continue;
+                            }
+                        }
+                        if (checkTeacherLeaveDate) {
+                            String dateStr=DateUtil.dateToString(enableApplyDate,"yyyy-MM-dd");
+                            JSONObject leaveDateData=teacherLeaveData.getJSONObject(dateStr);
+                            if(Objects.nonNull(leaveDateData)){
+                                Date leaveStartTime=leaveDateData.getDate("leave_start_time");
+                                Date leaveEndTime=leaveDateData.getDate("leave_end_time");
+                                if(enableApplyDateCourseEndTime.after(leaveStartTime)
+                                        &&enableApplyDate.before(leaveEndTime)){
+                                    continue;
+                                }
+                            }
+                        }
+                        allTeacherFreeDates.add(enableApplyDate);
+                    }
                     break;
                 }
 
@@ -679,7 +874,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                     }
                 }
 
-                if (!CollectionUtils.isEmpty(firstWeekCourses)) {
+                if (!CollectionUtils.isEmpty(secondWeekCourses)) {
                     Map<GroupType, Long> groupTypeCountSecondMap = secondWeekCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getGroupType, Collectors.counting()));
                     if (Objects.nonNull(groupTypeCountSecondMap.get(GroupType.PRACTICE)) && groupTypeCountSecondMap.get(GroupType.PRACTICE) >= 80) {
                         secondWeekEnableApply = false;
@@ -701,7 +896,43 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
                 List<Date> tempEnableApplyDates = new ArrayList<>();
                 for (Date enableApplyDate : enableApplyDates) {
-                    if (!enableApplyDate.before(enableApplyStartDate)) {
+                    Date enableApplyDateCourseEndTime = DateUtil.addMinutes(enableApplyDate, practiceCourseMinutes);
+                    if(teacherId==100473){
+                        checkTeacherLeaveDate=false;
+                        Calendar tempCalendar=Calendar.getInstance();
+                        tempCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+                        tempCalendar.setTime(enableApplyDate);
+                        if(tempCalendar.get(Calendar.DAY_OF_WEEK)==Calendar.MONDAY
+                                ||tempCalendar.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
+                            String date_str=DateUtil.dateToString(enableApplyDate,"yyyy-MM-dd");
+                            Date date1=DateUtil.stringToDate(date_str+" 11:30:00");
+                            Date date2=DateUtil.stringToDate(date_str+" 14:30:00");
+                            Date date3=DateUtil.stringToDate(date_str+" 20:30:00");
+                            if(enableApplyDate.before(date2)
+                                    && enableApplyDateCourseEndTime.after(date1)){
+                                continue;
+                            }
+                            if(date3.before(enableApplyDateCourseEndTime)){
+                                continue;
+                            }
+                        }
+                        if(tempCalendar.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY){
+                            continue;
+                        }
+                    }
+                    if (checkTeacherLeaveDate) {
+                        String dateStr=DateUtil.dateToString(enableApplyDate,"yyyy-MM-dd");
+                        JSONObject leaveDateData=teacherLeaveData.getJSONObject(dateStr);
+                        if(Objects.nonNull(leaveDateData)){
+                            Date leaveStartTime=leaveDateData.getDate("leave_start_time");
+                            Date leaveEndTime=leaveDateData.getDate("leave_end_time");
+                            if(enableApplyDateCourseEndTime.after(leaveStartTime)
+                                    &&enableApplyDate.before(leaveEndTime)){
+                                continue;
+                            }
+                        }
+                    }
+                    if (!enableApplyDate.before(enableApplyStartDate)&&!enableApplyEndDate.before(enableApplyDate)) {
                         tempEnableApplyDates.add(enableApplyDate);
                     }
                 }
@@ -712,9 +943,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 }
 
                 applyDateRangeCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
-                for (int j = 0; j < applyDateRangeCourses.size() - 1; j++) {
+                for (int j = 0; j < applyDateRangeCourses.size(); j++) {
                     CourseSchedule preCourseSchedule = applyDateRangeCourses.get(j);
-                    CourseSchedule backCourseSchedule = applyDateRangeCourses.get(j + 1);
+                    CourseSchedule backCourseSchedule = j>=applyDateRangeCourses.size()-1?preCourseSchedule:applyDateRangeCourses.get(j + 1);
                     if (preCourseSchedule.getEndClassTime().after(backCourseSchedule.getEndClassTime())) {
                         backCourseSchedule.setEndClassTime(preCourseSchedule.getEndClassTime());
                     }
@@ -729,7 +960,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                             }
                         }
                     }
-                    if (j == applyDateRangeCourses.size() - 2) {
+                    if (j == applyDateRangeCourses.size() - 1) {
                         for (Date enableApplyDate : tempEnableApplyDates) {
                             if (Objects.nonNull(firstClassTime) && DateUtil.isSameDay(enableApplyDate, firstClassTime)) {
                                 continue;
@@ -739,6 +970,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                             }
                         }
                     }
+                    if(j>=applyDateRangeCourses.size()-1){
+                        break;
+                    }
                     for (Date enableApplyDate : tempEnableApplyDates) {
                         if (Objects.nonNull(firstClassTime) && DateUtil.isSameDay(enableApplyDate, firstClassTime)) {
                             continue;
@@ -892,7 +1126,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             return result;
         }
         SysUser sysUser = sysUserFeignService.queryUserById(practiceGroup.getStudentId());
-        practiceGroup.setName("陪练课•" + sysUser.getUsername());
+        practiceGroup.setName(subject.getName() + "•" + sysUser.getUsername());
         practiceGroup.setSingleClassMinutes(practiceCourseMinutes);
         practiceGroupDao.insert(practiceGroup);
 
@@ -1105,7 +1339,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         result.put("status", "SUCCESS");
         return result;
     }
-
     @Override
     public PageInfo<PracticeGroupDto> findPracticeGroups(PracticeGroupQueryInfo queryInfo) {
         PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());

+ 2 - 0
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -304,6 +304,8 @@
             AND (t.organ_id_=#{organId} OR FIND_IN_SET(#{organId},t.flow_organ_range_))
             AND t.job_nature_='FULL_TIME'
             AND su.del_flag_=0 AND su.lock_flag_=0
+            AND t.organ_id_!=36 AND t.organ_id_!=38
+            AND t.organ_id_!=7 AND t.organ_id_!=37
     </select>
     <select id="findTeacherByOrganAndSubject" resultMap="TeacherBasicDto">
         SELECT

+ 5 - 1
mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java

@@ -15,7 +15,10 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @Author Joburgess
@@ -30,6 +33,7 @@ public class PracticeGroupController extends BaseController {
     private PracticeGroupService practiceGroupService;
     @Autowired
     private SysUserFeignService sysUserFeignService;
+    List<Integer> excludeOrganIds=new ArrayList<>(Arrays.asList(new Integer[]{7,36,37,38}));
 
     @ApiOperation("获取学生的陪练课")
     @GetMapping(value = "/findUserPracticeCourses")
@@ -68,7 +72,7 @@ public class PracticeGroupController extends BaseController {
         if (sysUser == null) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        if(36==sysUser.getOrganId()){
+        if(excludeOrganIds.contains(sysUser.getOrganId())){
             throw new BizException("请联系老师确认您的所属分部");
         }
         practiceGroup.setStudentId(sysUser.getId());