|  | @@ -1,6 +1,10 @@
 | 
											
												
													
														|  |  package com.ym.mec.biz.service.impl;
 |  |  package com.ym.mec.biz.service.impl;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +import com.ym.mec.auth.api.client.SysUserFeignService;
 | 
											
												
													
														|  | 
 |  | +import com.ym.mec.auth.api.entity.SysUser;
 | 
											
												
													
														|  |  import com.ym.mec.biz.dal.dao.*;
 |  |  import com.ym.mec.biz.dal.dao.*;
 | 
											
												
													
														|  | 
 |  | +import com.ym.mec.biz.dal.dto.CourseScheduleDto;
 | 
											
												
													
														|  | 
 |  | +import com.ym.mec.biz.dal.dto.TeacherBasicDto;
 | 
											
												
													
														|  |  import com.ym.mec.biz.dal.entity.*;
 |  |  import com.ym.mec.biz.dal.entity.*;
 | 
											
												
													
														|  |  import com.ym.mec.biz.dal.enums.*;
 |  |  import com.ym.mec.biz.dal.enums.*;
 | 
											
												
													
														|  |  import com.ym.mec.biz.service.PracticeGroupService;
 |  |  import com.ym.mec.biz.service.PracticeGroupService;
 | 
											
										
											
												
													
														|  | @@ -9,6 +13,7 @@ import com.ym.mec.biz.service.TeacherService;
 | 
											
												
													
														|  |  import com.ym.mec.common.dal.BaseDAO;
 |  |  import com.ym.mec.common.dal.BaseDAO;
 | 
											
												
													
														|  |  import com.ym.mec.common.exception.BizException;
 |  |  import com.ym.mec.common.exception.BizException;
 | 
											
												
													
														|  |  import com.ym.mec.common.service.impl.BaseServiceImpl;
 |  |  import com.ym.mec.common.service.impl.BaseServiceImpl;
 | 
											
												
													
														|  | 
 |  | +import com.ym.mec.util.collection.MapUtil;
 | 
											
												
													
														|  |  import com.ym.mec.util.date.DateUtil;
 |  |  import com.ym.mec.util.date.DateUtil;
 | 
											
												
													
														|  |  import org.apache.commons.lang3.StringUtils;
 |  |  import org.apache.commons.lang3.StringUtils;
 | 
											
												
													
														|  |  import org.springframework.beans.factory.annotation.Autowired;
 |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
											
										
											
												
													
														|  | @@ -18,122 +23,375 @@ import org.springframework.util.CollectionUtils;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  import java.math.BigDecimal;
 |  |  import java.math.BigDecimal;
 | 
											
												
													
														|  |  import java.util.*;
 |  |  import java.util.*;
 | 
											
												
													
														|  | 
 |  | +import java.util.stream.Collectors;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  @Service
 |  |  @Service
 | 
											
												
													
														|  | -public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGroup> implements PracticeGroupService{
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	@Autowired
 |  | 
 | 
											
												
													
														|  | -	private PracticeGroupDao practiceGroupDao;
 |  | 
 | 
											
												
													
														|  | -	@Autowired
 |  | 
 | 
											
												
													
														|  | -	private SysConfigService sysConfigService;
 |  | 
 | 
											
												
													
														|  | -	@Autowired
 |  | 
 | 
											
												
													
														|  | -	private SubjectDao subjectDao;
 |  | 
 | 
											
												
													
														|  | -	@Autowired
 |  | 
 | 
											
												
													
														|  | 
 |  | +public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGroup> implements PracticeGroupService {
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  | 
 |  | +    private PracticeGroupDao practiceGroupDao;
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  | 
 |  | +    private SysConfigService sysConfigService;
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  | 
 |  | +    private SubjectDao subjectDao;
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  |      private TeacherService teacherService;
 |  |      private TeacherService teacherService;
 | 
											
												
													
														|  | -	@Autowired
 |  | 
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  |      private EmployeeDao employeeDao;
 |  |      private EmployeeDao employeeDao;
 | 
											
												
													
														|  | -	@Autowired
 |  | 
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  |      private ClassGroupDao classGroupDao;
 |  |      private ClassGroupDao classGroupDao;
 | 
											
												
													
														|  | -	@Autowired
 |  | 
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  |      private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
 |  |      private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
 | 
											
												
													
														|  | -	@Autowired
 |  | 
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  |      private ClassGroupTeacherSalaryDao classGroupTeacherSalaryDao;
 |  |      private ClassGroupTeacherSalaryDao classGroupTeacherSalaryDao;
 | 
											
												
													
														|  | -	@Autowired
 |  | 
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  |      private CourseScheduleDao courseScheduleDao;
 |  |      private CourseScheduleDao courseScheduleDao;
 | 
											
												
													
														|  | -	@Autowired
 |  | 
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  |      private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
 |  |      private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
 | 
											
												
													
														|  | -	@Autowired
 |  | 
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  |      private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
 |  |      private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
 | 
											
												
													
														|  | -	@Autowired
 |  | 
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  |      private TeacherAttendanceDao teacherAttendanceDao;
 |  |      private TeacherAttendanceDao teacherAttendanceDao;
 | 
											
												
													
														|  | -	@Autowired
 |  | 
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  |      private StudentDao studentDao;
 |  |      private StudentDao studentDao;
 | 
											
												
													
														|  | -	@Autowired
 |  | 
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  |      private ClassGroupStudentMapperDao classGroupStudentMapperDao;
 |  |      private ClassGroupStudentMapperDao classGroupStudentMapperDao;
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  | 
 |  | +    private SysUserFeignService sysUserFeignService;
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  | 
 |  | +    private TeacherDao teacherDao;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    @Override
 | 
											
												
													
														|  | 
 |  | +    public BaseDAO<Long, PracticeGroup> getDAO() {
 | 
											
												
													
														|  | 
 |  | +        return practiceGroupDao;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    @Override
 | 
											
												
													
														|  | 
 |  | +    public List<CourseScheduleDto> findUserPracticeCourses(Integer userId) {
 | 
											
												
													
														|  | 
 |  | +        return courseScheduleDao.findStudentPracticeCourses(userId);
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    @Override
 | 
											
												
													
														|  | 
 |  | +    public Integer searchTeacherId(PracticeGroup practiceGroup) {
 | 
											
												
													
														|  | 
 |  | +        if (Objects.isNull(practiceGroup.getSubjectId())) {
 | 
											
												
													
														|  | 
 |  | +            throw new BizException("请选择声部");
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        SysUser sysUser = sysUserFeignService.queryUserById(practiceGroup.getStudentId());
 | 
											
												
													
														|  | 
 |  | +        if (Objects.isNull(sysUser)) {
 | 
											
												
													
														|  | 
 |  | +            throw new BizException("用户不存在");
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        if (Objects.isNull(sysUser.getOrganId())) {
 | 
											
												
													
														|  | 
 |  | +            throw new BizException("未找到用户分部属性");
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        List<TeacherBasicDto> organAndSubjectTeachers = teacherDao.findTeaTeachersByOrganAndSubject(sysUser.getOrganId(), practiceGroup.getSubjectId());
 | 
											
												
													
														|  | 
 |  | +        if (CollectionUtils.isEmpty(organAndSubjectTeachers)) {
 | 
											
												
													
														|  | 
 |  | +            throw new BizException("未找到合适教师");
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        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());
 | 
											
												
													
														|  | 
 |  | +        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);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -	@Override
 |  | 
 | 
											
												
													
														|  | -	public BaseDAO<Long, PracticeGroup> getDAO() {
 |  | 
 | 
											
												
													
														|  | -		return practiceGroupDao;
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | 
 |  | +        Map<Integer, List<CourseSchedule>> teacherCoursesMap = allTeacherCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getActualTeacherId));
 | 
											
												
													
														|  | 
 |  | +        for (Map.Entry<Integer, List<CourseSchedule>> integerListEntry : teacherCoursesMap.entrySet()) {
 | 
											
												
													
														|  | 
 |  | +            List<CourseSchedule> teacherCourses = integerListEntry.getValue();
 | 
											
												
													
														|  | 
 |  | +            teacherCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
 | 
											
												
													
														|  | 
 |  | +            boolean enableCreateFirstCourse=false;
 | 
											
												
													
														|  | 
 |  | +            boolean enableCreateSecondCourse=false;
 | 
											
												
													
														|  | 
 |  | +            for (int i=0;i<teacherCourses.size()-1;i++) {
 | 
											
												
													
														|  | 
 |  | +                CourseSchedule preCourseSchedule = teacherCourses.get(i);
 | 
											
												
													
														|  | 
 |  | +                CourseSchedule backCourseSchedule = teacherCourses.get(i+1);
 | 
											
												
													
														|  | 
 |  | +                if(i==0){
 | 
											
												
													
														|  | 
 |  | +                    if (!firstClassEndTime.after(preCourseSchedule.getStartClassTime())){
 | 
											
												
													
														|  | 
 |  | +                        enableCreateFirstCourse=true;
 | 
											
												
													
														|  | 
 |  | +                    }
 | 
											
												
													
														|  | 
 |  | +                    if (!secondClassEndTime.after(preCourseSchedule.getStartClassTime())){
 | 
											
												
													
														|  | 
 |  | +                        enableCreateSecondCourse=true;
 | 
											
												
													
														|  | 
 |  | +                    }
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +                if (i==teacherCourses.size()-1){
 | 
											
												
													
														|  | 
 |  | +                    if(!practiceGroup.getFirstCourseTime().before(backCourseSchedule.getEndClassTime())){
 | 
											
												
													
														|  | 
 |  | +                        enableCreateFirstCourse=true;
 | 
											
												
													
														|  | 
 |  | +                    }
 | 
											
												
													
														|  | 
 |  | +                    if(!practiceGroup.getSecondCourseTime().before(backCourseSchedule.getEndClassTime())){
 | 
											
												
													
														|  | 
 |  | +                        enableCreateSecondCourse=true;
 | 
											
												
													
														|  | 
 |  | +                    }
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -	@Override
 |  | 
 | 
											
												
													
														|  | -	public Integer searchTeacherId(Integer userId, Integer subjectId, Date startTime, Date endTime) {
 |  | 
 | 
											
												
													
														|  | -		// TODO Auto-generated method stub
 |  | 
 | 
											
												
													
														|  | -		return null;
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | 
 |  | +                if(!practiceGroup.getFirstCourseTime().before(preCourseSchedule.getEndClassTime())
 | 
											
												
													
														|  | 
 |  | +                        &&!firstClassEndTime.after(backCourseSchedule.getStartClassTime())){
 | 
											
												
													
														|  | 
 |  | +                    enableCreateFirstCourse=true;
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +                if(!practiceGroup.getSecondCourseTime().before(preCourseSchedule.getEndClassTime())
 | 
											
												
													
														|  | 
 |  | +                        &&!secondClassEndTime.after(backCourseSchedule.getStartClassTime())){
 | 
											
												
													
														|  | 
 |  | +                    enableCreateFirstCourse=true;
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +                if (enableCreateFirstCourse&&enableCreateSecondCourse){
 | 
											
												
													
														|  | 
 |  | +                    includeTeacherIds.add(integerListEntry.getKey());
 | 
											
												
													
														|  | 
 |  | +                    break;
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        if(CollectionUtils.isEmpty(includeTeacherIds)){
 | 
											
												
													
														|  | 
 |  | +            throw new BizException("未找到符合条件的教师");
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        List<CourseScheduleTeacherSalary> studentRelateTeachers = courseScheduleTeacherSalaryDao.findStudentRelateTeachers(practiceGroup.getStudentId(), includeTeacherIds);
 | 
											
												
													
														|  | 
 |  | +        Random random=new Random();
 | 
											
												
													
														|  | 
 |  | +        if(!CollectionUtils.isEmpty(studentRelateTeachers)){
 | 
											
												
													
														|  | 
 |  | +            Map<GroupType, List<CourseScheduleTeacherSalary>> groupTypeTeachersMap = studentRelateTeachers.stream().collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getGroupType));
 | 
											
												
													
														|  | 
 |  | +            List<CourseScheduleTeacherSalary> vipGroupTeachers = groupTypeTeachersMap.get(GroupType.VIP);
 | 
											
												
													
														|  | 
 |  | +            if(!CollectionUtils.isEmpty(vipGroupTeachers)){
 | 
											
												
													
														|  | 
 |  | +                int randomIndex = random.nextInt(vipGroupTeachers.size());
 | 
											
												
													
														|  | 
 |  | +                return vipGroupTeachers.get(randomIndex).getUserId();
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +            List<CourseScheduleTeacherSalary> musicGroupTeachers = groupTypeTeachersMap.get(GroupType.MUSIC);
 | 
											
												
													
														|  | 
 |  | +            if(!CollectionUtils.isEmpty(musicGroupTeachers)){
 | 
											
												
													
														|  | 
 |  | +                int randomIndex = random.nextInt(musicGroupTeachers.size());
 | 
											
												
													
														|  | 
 |  | +                return musicGroupTeachers.get(randomIndex).getUserId();
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +        List<Map<Integer, Integer>> teacherCourseNumMaps = courseScheduleTeacherSalaryDao.countTeacherCourses(teacherIds, GroupType.PRACTICE);
 | 
											
												
													
														|  | 
 |  | +        Map<Integer,Integer> teacherCourseNumMap=MapUtil.convertIntegerMap(teacherCourseNumMaps);
 | 
											
												
													
														|  | 
 |  | +        Map<Integer,Integer> temp=new HashMap<>();
 | 
											
												
													
														|  | 
 |  | +        teacherCourseNumMap.entrySet().stream()
 | 
											
												
													
														|  | 
 |  | +                .sorted()
 | 
											
												
													
														|  | 
 |  | +                .forEach(result->temp.put(result.getKey(),result.getValue()));
 | 
											
												
													
														|  | 
 |  | +        return temp.get(0);
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -	@Override
 |  | 
 | 
											
												
													
														|  | -	public Map getPracticeApplyParams(Integer userId) {
 |  | 
 | 
											
												
													
														|  | -		Map result=new HashMap();
 |  | 
 | 
											
												
													
														|  | -		SysConfig practiceSubjectIdListConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_SUBJECT_ID_LIST);
 |  | 
 | 
											
												
													
														|  | -		SysConfig practiceApplyStartTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_START_TIME);
 |  | 
 | 
											
												
													
														|  | -		SysConfig practiceApplyEndTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_END_TIME);
 |  | 
 | 
											
												
													
														|  | 
 |  | +    @Override
 | 
											
												
													
														|  | 
 |  | +    public Map getPracticeApplyParams(Integer userId) {
 | 
											
												
													
														|  | 
 |  | +        Map result = new HashMap();
 | 
											
												
													
														|  | 
 |  | +        SysConfig practiceSubjectIdListConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_SUBJECT_ID_LIST);
 | 
											
												
													
														|  | 
 |  | +        SysConfig practiceApplyStartTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_START_TIME);
 | 
											
												
													
														|  | 
 |  | +        SysConfig practiceApplyEndTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_END_TIME);
 | 
											
												
													
														|  | 
 |  | +        SysConfig practiceApplyIntervalTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_INTERVAL_TIME);
 | 
											
												
													
														|  | 
 |  | +        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
 | 
											
												
													
														|  |          Student student = studentDao.get(userId);
 |  |          Student student = studentDao.get(userId);
 | 
											
												
													
														|  |          List<Subject> subjects = subjectDao.findBySubjectByIdList(practiceSubjectIdListConfig.getParanValue());
 |  |          List<Subject> subjects = subjectDao.findBySubjectByIdList(practiceSubjectIdListConfig.getParanValue());
 | 
											
												
													
														|  | -		result.put("subjects", subjects);
 |  | 
 | 
											
												
													
														|  | -		result.put("practiceApplyStartTime",practiceApplyStartTimeConfig.getParanValue());
 |  | 
 | 
											
												
													
														|  | -		result.put("practiceApplyEndTime",practiceApplyEndTimeConfig.getParanValue());
 |  | 
 | 
											
												
													
														|  | -		result.put("userDefaultSubjectIds",Objects.isNull(student)?null:student.getSubjectIdList());
 |  | 
 | 
											
												
													
														|  | -		return result;
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	@Override
 |  | 
 | 
											
												
													
														|  | 
 |  | +        List<Integer> subjectIds = Arrays.asList(practiceSubjectIdListConfig.getParanValue().split(",")).stream().mapToInt(idStr -> Integer.valueOf(idStr)).boxed().collect(Collectors.toList());
 | 
											
												
													
														|  | 
 |  | +        List<Integer> userDefaultSubjectIds=Objects.isNull(student) ? null : Arrays.asList(student.getSubjectIdList().split(",")).stream().mapToInt(idStr -> Integer.valueOf(idStr)).boxed().collect(Collectors.toList());
 | 
											
												
													
														|  | 
 |  | +        if(!CollectionUtils.isEmpty(userDefaultSubjectIds)){
 | 
											
												
													
														|  | 
 |  | +            userDefaultSubjectIds=userDefaultSubjectIds.stream().filter(userDefaultSubjectId -> subjectIds.contains(userDefaultSubjectId)).collect(Collectors.toList());
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        result.put("subjects", subjects);
 | 
											
												
													
														|  | 
 |  | +        result.put("practiceApplyStartTime", practiceApplyStartTimeConfig.getParanValue());
 | 
											
												
													
														|  | 
 |  | +        result.put("practiceApplyEndTime", practiceApplyEndTimeConfig.getParanValue());
 | 
											
												
													
														|  | 
 |  | +        result.put("userDefaultSubjectIds", StringUtils.join(userDefaultSubjectIds.toArray(),","));
 | 
											
												
													
														|  | 
 |  | +        result.put("practiceApplyIntervalMinutes", practiceApplyIntervalTimeConfig.getParanValue(Integer.class));
 | 
											
												
													
														|  | 
 |  | +        result.put("practiceCourseMinutes", practiceCourseMinutesConfig.getParanValue(Integer.class));
 | 
											
												
													
														|  | 
 |  | +        return result;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    @Override
 | 
											
												
													
														|  | 
 |  | +    public Map getTeacherFreeTimes(Integer userId, Integer subjectId, Date firstClassTime) {
 | 
											
												
													
														|  | 
 |  | +        if (Objects.isNull(subjectId)) {
 | 
											
												
													
														|  | 
 |  | +            throw new BizException("请选择声部");
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        SysUser sysUser = sysUserFeignService.queryUserById(userId);
 | 
											
												
													
														|  | 
 |  | +        if (Objects.isNull(sysUser)) {
 | 
											
												
													
														|  | 
 |  | +            throw new BizException("用户不存在");
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        if (Objects.isNull(sysUser.getOrganId())) {
 | 
											
												
													
														|  | 
 |  | +            throw new BizException("未找到用户分部属性");
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        List<TeacherBasicDto> organAndSubjectTeachers = teacherDao.findTeaTeachersByOrganAndSubject(sysUser.getOrganId(), subjectId);
 | 
											
												
													
														|  | 
 |  | +        if (CollectionUtils.isEmpty(organAndSubjectTeachers)) {
 | 
											
												
													
														|  | 
 |  | +            throw new BizException("未找到合适教师");
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        Map result = new HashMap();
 | 
											
												
													
														|  | 
 |  | +        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());
 | 
											
												
													
														|  | 
 |  | +        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<Date> enableApplyDates = getEnableApplyDates(7);
 | 
											
												
													
														|  | 
 |  | +        List<CourseSchedule> allTeacherCourses = courseScheduleDao.findTeachersCoursesWithDateRange(teacherIds, applyStartDay, applyEndDay);
 | 
											
												
													
														|  | 
 |  | +        HashSet<Integer> excludeTeacherIds=new HashSet<>();
 | 
											
												
													
														|  | 
 |  | +        if(Objects.nonNull(firstClassTime)){
 | 
											
												
													
														|  | 
 |  | +            Date firstClassEndTime = DateUtil.addMinutes(firstClassTime, practiceCourseMinutes);
 | 
											
												
													
														|  | 
 |  | +            for (CourseSchedule teacherCourse : allTeacherCourses) {
 | 
											
												
													
														|  | 
 |  | +                if((!teacherCourse.getStartClassTime().before(firstClassTime)&&!teacherCourse.getStartClassTime().after(firstClassEndTime))
 | 
											
												
													
														|  | 
 |  | +                    ||(!teacherCourse.getEndClassTime().before(firstClassTime)&&!teacherCourse.getEndClassTime().after(firstClassEndTime))){
 | 
											
												
													
														|  | 
 |  | +                    excludeTeacherIds.add(teacherCourse.getActualTeacherId());
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        Map<Integer, List<CourseSchedule>> teacherCoursesMap = allTeacherCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getActualTeacherId));
 | 
											
												
													
														|  | 
 |  | +        Set<Date> allTeacherFreeDates=new HashSet<>();
 | 
											
												
													
														|  | 
 |  | +        for (Map.Entry<Integer, List<CourseSchedule>> integerListEntry : teacherCoursesMap.entrySet()) {
 | 
											
												
													
														|  | 
 |  | +            if(excludeTeacherIds.contains(integerListEntry.getKey())){
 | 
											
												
													
														|  | 
 |  | +                continue;
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +            List<CourseSchedule> teacherCourses = integerListEntry.getValue();
 | 
											
												
													
														|  | 
 |  | +            teacherCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
 | 
											
												
													
														|  | 
 |  | +            for (int i=0;i<teacherCourses.size()-1;i++) {
 | 
											
												
													
														|  | 
 |  | +                CourseSchedule preCourseSchedule = teacherCourses.get(i);
 | 
											
												
													
														|  | 
 |  | +                CourseSchedule backCourseSchedule = teacherCourses.get(i+1);
 | 
											
												
													
														|  | 
 |  | +                if(i==0){
 | 
											
												
													
														|  | 
 |  | +                    for (Date enableApplyDate : enableApplyDates) {
 | 
											
												
													
														|  | 
 |  | +                        Date enableApplyDateCourseEndTime = DateUtil.addMinutes(enableApplyDate, practiceCourseMinutes);
 | 
											
												
													
														|  | 
 |  | +                        if(!enableApplyDateCourseEndTime.after(preCourseSchedule.getStartClassTime())){
 | 
											
												
													
														|  | 
 |  | +                            allTeacherFreeDates.add(enableApplyDate);
 | 
											
												
													
														|  | 
 |  | +                        }
 | 
											
												
													
														|  | 
 |  | +                    }
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +                if (i==teacherCourses.size()-1){
 | 
											
												
													
														|  | 
 |  | +                    for (Date enableApplyDate : enableApplyDates) {
 | 
											
												
													
														|  | 
 |  | +                        if(!enableApplyDate.before(backCourseSchedule.getEndClassTime())){
 | 
											
												
													
														|  | 
 |  | +                            allTeacherFreeDates.add(enableApplyDate);
 | 
											
												
													
														|  | 
 |  | +                        }
 | 
											
												
													
														|  | 
 |  | +                    }
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +                for (Date enableApplyDate : enableApplyDates) {
 | 
											
												
													
														|  | 
 |  | +                    Date enableApplyDateCourseEndTime = DateUtil.addMinutes(enableApplyDate, practiceCourseMinutes);
 | 
											
												
													
														|  | 
 |  | +                    if(!enableApplyDate.before(preCourseSchedule.getEndClassTime())
 | 
											
												
													
														|  | 
 |  | +                        &&!enableApplyDateCourseEndTime.after(backCourseSchedule.getStartClassTime())){
 | 
											
												
													
														|  | 
 |  | +                        allTeacherFreeDates.add(enableApplyDate);
 | 
											
												
													
														|  | 
 |  | +                    }
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        result.put("teacherFreeDates",allTeacherFreeDates);
 | 
											
												
													
														|  | 
 |  | +        return result;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    @Override
 | 
											
												
													
														|  | 
 |  | +    public List<Date> getEnableApplyDates(Integer days) {
 | 
											
												
													
														|  | 
 |  | +        List<Date> result=new ArrayList<>();
 | 
											
												
													
														|  | 
 |  | +        Calendar calendar = Calendar.getInstance();
 | 
											
												
													
														|  | 
 |  | +        Date now = new Date();
 | 
											
												
													
														|  | 
 |  | +        calendar.setTime(now);
 | 
											
												
													
														|  | 
 |  | +        calendar.set(Calendar.SECOND, 0);
 | 
											
												
													
														|  | 
 |  | +        SysConfig practiceApplyStartTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_START_TIME);
 | 
											
												
													
														|  | 
 |  | +        SysConfig practiceApplyEndTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_END_TIME);
 | 
											
												
													
														|  | 
 |  | +        SysConfig practiceApplyIntervalTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_INTERVAL_TIME);
 | 
											
												
													
														|  | 
 |  | +        String enableStartTimeStr = practiceApplyStartTimeConfig.getParanValue();
 | 
											
												
													
														|  | 
 |  | +        String enableEndTimeStr = practiceApplyEndTimeConfig.getParanValue();
 | 
											
												
													
														|  | 
 |  | +        Integer practiceApplyIntervalMinutes=practiceApplyIntervalTimeConfig.getParanValue(Integer.class);
 | 
											
												
													
														|  | 
 |  | +        for (int i = 0; i < days; i++) {
 | 
											
												
													
														|  | 
 |  | +            calendar.add(Calendar.DATE, 1);
 | 
											
												
													
														|  | 
 |  | +            calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(enableStartTimeStr.split(":")[0]));
 | 
											
												
													
														|  | 
 |  | +            calendar.set(Calendar.MINUTE, Integer.valueOf(enableStartTimeStr.split(":")[1]));
 | 
											
												
													
														|  | 
 |  | +            Date enableApplyDayStartTime=calendar.getTime();
 | 
											
												
													
														|  | 
 |  | +            calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(enableEndTimeStr.split(":")[0]));
 | 
											
												
													
														|  | 
 |  | +            calendar.set(Calendar.MINUTE, Integer.valueOf(enableEndTimeStr.split(":")[1]));
 | 
											
												
													
														|  | 
 |  | +            Date enableApplyDayEndTime=calendar.getTime();
 | 
											
												
													
														|  | 
 |  | +            result.add(enableApplyDayStartTime);
 | 
											
												
													
														|  | 
 |  | +            Calendar applyStartCalendar=Calendar.getInstance();
 | 
											
												
													
														|  | 
 |  | +            applyStartCalendar.setTime(enableApplyDayStartTime);
 | 
											
												
													
														|  | 
 |  | +            while (true){
 | 
											
												
													
														|  | 
 |  | +                applyStartCalendar.add(Calendar.MINUTE,practiceApplyIntervalMinutes);
 | 
											
												
													
														|  | 
 |  | +                if(applyStartCalendar.getTime().after(enableApplyDayEndTime)){
 | 
											
												
													
														|  | 
 |  | +                    break;
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +                result.add(applyStartCalendar.getTime());
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        return result;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    @Override
 | 
											
												
													
														|  |      @Transactional(rollbackFor = Exception.class)
 |  |      @Transactional(rollbackFor = Exception.class)
 | 
											
												
													
														|  | -	public Map practiceApply(PracticeGroup practiceGroup) {
 |  | 
 | 
											
												
													
														|  | -		Integer practiceCourseMinutes=25;
 |  | 
 | 
											
												
													
														|  | -		SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
 |  | 
 | 
											
												
													
														|  | -		if(Objects.nonNull(practiceCourseMinutesConfig)){
 |  | 
 | 
											
												
													
														|  | -			practiceCourseMinutes=practiceCourseMinutesConfig.getParanValue(Integer.class);
 |  | 
 | 
											
												
													
														|  | -		}
 |  | 
 | 
											
												
													
														|  | 
 |  | +    public Map practiceApply(PracticeGroup practiceGroup) {
 | 
											
												
													
														|  | 
 |  | +        Integer practiceCourseMinutes = 25;
 | 
											
												
													
														|  | 
 |  | +        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
 | 
											
												
													
														|  | 
 |  | +        if (Objects.nonNull(practiceCourseMinutesConfig)) {
 | 
											
												
													
														|  | 
 |  | +            practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |          SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
 |  |          SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
 | 
											
												
													
														|  | -		Date now=new Date();
 |  | 
 | 
											
												
													
														|  | -		Date nextWeekMonday = DateUtil.getNextWeekMonday(now);
 |  | 
 | 
											
												
													
														|  | -		Date nextWeekFriday = DateUtil.getNextWeekDay(now,11);
 |  | 
 | 
											
												
													
														|  | -		if(practiceGroup.getCoursesStartDate().before(nextWeekMonday)
 |  | 
 | 
											
												
													
														|  | -			||(practiceGroup.getCoursesStartDate().after(nextWeekFriday)
 |  | 
 | 
											
												
													
														|  | -				&&!DateUtil.isSameDay(practiceGroup.getCoursesStartDate(),nextWeekFriday))){
 |  | 
 | 
											
												
													
														|  | -			throw new BizException("预约时间超过范围");
 |  | 
 | 
											
												
													
														|  | -		}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -		Integer applyTimes=0;
 |  | 
 | 
											
												
													
														|  | -        List<PracticeGroup> userPracticeCoursesWithDateRange = practiceGroupDao.getUserPracticeCoursesWithDateRange(practiceGroup.getUserId(), nextWeekMonday, nextWeekFriday);
 |  | 
 | 
											
												
													
														|  | -        if(!CollectionUtils.isEmpty(userPracticeCoursesWithDateRange)){
 |  | 
 | 
											
												
													
														|  | -            applyTimes=userPracticeCoursesWithDateRange.size();
 |  | 
 | 
											
												
													
														|  | 
 |  | +        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,8);
 | 
											
												
													
														|  | 
 |  | +        Date applyEndDay = calendar.getTime();
 | 
											
												
													
														|  | 
 |  | +        if (practiceGroup.getFirstCourseTime().before(applyStartDay)
 | 
											
												
													
														|  | 
 |  | +                || (practiceGroup.getFirstCourseTime().after(applyEndDay)
 | 
											
												
													
														|  | 
 |  | +                && !DateUtil.isSameDay(practiceGroup.getFirstCourseTime(), applyStartDay))) {
 | 
											
												
													
														|  | 
 |  | +            throw new BizException("预约时间超过范围");
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        if (practiceGroup.getSecondCourseTime().before(applyStartDay)
 | 
											
												
													
														|  | 
 |  | +                || (practiceGroup.getSecondCourseTime().after(applyEndDay)
 | 
											
												
													
														|  | 
 |  | +                && !DateUtil.isSameDay(practiceGroup.getSecondCourseTime(), applyStartDay))) {
 | 
											
												
													
														|  | 
 |  | +            throw new BizException("预约时间超过范围");
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        if(applyTimes>=2){
 |  | 
 | 
											
												
													
														|  | -            throw new BizException("您的预约次数已经达到限制");
 |  | 
 | 
											
												
													
														|  | 
 |  | +        List<Date> allCourseDates=new ArrayList<>();
 | 
											
												
													
														|  | 
 |  | +        allCourseDates.add(practiceGroup.getFirstCourseTime());
 | 
											
												
													
														|  | 
 |  | +        allCourseDates.add(practiceGroup.getSecondCourseTime());
 | 
											
												
													
														|  | 
 |  | +        allCourseDates.add(DateUtil.addDays(practiceGroup.getFirstCourseTime(),7));
 | 
											
												
													
														|  | 
 |  | +        allCourseDates.add(DateUtil.addDays(practiceGroup.getSecondCourseTime(),7));
 | 
											
												
													
														|  | 
 |  | +        allCourseDates.sort(Comparator.comparing(Date::getTime));
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        Integer applyTimes = 0;
 | 
											
												
													
														|  | 
 |  | +        List<PracticeGroup> userPracticeCoursesWithDateRange = practiceGroupDao.getUserPracticeApplyRecord(practiceGroup.getStudentId());
 | 
											
												
													
														|  | 
 |  | +        if (!CollectionUtils.isEmpty(userPracticeCoursesWithDateRange)) {
 | 
											
												
													
														|  | 
 |  | +            applyTimes = userPracticeCoursesWithDateRange.size();
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | -        applyTimes+=1;
 |  | 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        practiceGroup.setCoursesExpireDate(DateUtil.addMinutes(practiceGroup.getCoursesStartDate(),practiceCourseMinutes));
 |  | 
 | 
											
												
													
														|  | -		Integer teacherId = searchTeacherId(practiceGroup.getUserId(),practiceGroup.getSubjectId(),practiceGroup.getCoursesStartDate(),practiceGroup.getCoursesExpireDate());
 |  | 
 | 
											
												
													
														|  | -        if(Objects.isNull(teacherId)){
 |  | 
 | 
											
												
													
														|  | -//            throw new BizException("教师指派错误");
 |  | 
 | 
											
												
													
														|  | -            teacherId=100001;
 |  | 
 | 
											
												
													
														|  | 
 |  | +//        if (applyTimes >= 1) {
 | 
											
												
													
														|  | 
 |  | +//            throw new BizException("您的预约次数已经达到限制");
 | 
											
												
													
														|  | 
 |  | +//        }
 | 
											
												
													
														|  | 
 |  | +        applyTimes += 1;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        practiceGroup.setCoursesStartDate(allCourseDates.get(0));
 | 
											
												
													
														|  | 
 |  | +        practiceGroup.setCoursesExpireDate(DateUtil.addMinutes(allCourseDates.get(3),practiceCourseMinutes));
 | 
											
												
													
														|  | 
 |  | +        Integer teacherId = searchTeacherId(practiceGroup);
 | 
											
												
													
														|  | 
 |  | +        if (Objects.isNull(teacherId)) {
 | 
											
												
													
														|  | 
 |  | +            throw new BizException("教师指派错误");
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | -		Teacher teacher = teacherService.getDetail(teacherId);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        practiceGroup.setUserId(teacherId);
 | 
											
												
													
														|  | 
 |  | +        Teacher teacher = teacherService.getDetail(teacherId);
 | 
											
												
													
														|  |          Employee employee = employeeDao.get(teacherId);
 |  |          Employee employee = employeeDao.get(teacherId);
 | 
											
												
													
														|  | -        if(StringUtils.isEmpty(employee.getOrganIdList()) || employee.getOrganIdList().contains(",")){
 |  | 
 | 
											
												
													
														|  | 
 |  | +        if (Objects.isNull(employee) || StringUtils.isEmpty(employee.getOrganIdList()) || employee.getOrganIdList().contains(",")) {
 | 
											
												
													
														|  |              practiceGroup.setOrganId(teacher.getTeacherOrganId());
 |  |              practiceGroup.setOrganId(teacher.getTeacherOrganId());
 | 
											
												
													
														|  | -        }else {
 |  | 
 | 
											
												
													
														|  | 
 |  | +        } else {
 | 
											
												
													
														|  |              practiceGroup.setOrganId(Integer.parseInt(employee.getOrganIdList()));
 |  |              practiceGroup.setOrganId(Integer.parseInt(employee.getOrganIdList()));
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | -        Subject subject=subjectDao.get(practiceGroup.getSubjectId());
 |  | 
 | 
											
												
													
														|  | -        if(Objects.isNull(subject)){
 |  | 
 | 
											
												
													
														|  | 
 |  | +        Subject subject = subjectDao.get(practiceGroup.getSubjectId());
 | 
											
												
													
														|  | 
 |  | +        if (Objects.isNull(subject)) {
 | 
											
												
													
														|  |              throw new BizException("声部不存在");
 |  |              throw new BizException("声部不存在");
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | -        practiceGroup.setName(subject.getName()+"•陪练课");
 |  | 
 | 
											
												
													
														|  | 
 |  | +        practiceGroup.setName(subject.getName() + "•陪练课");
 | 
											
												
													
														|  |          practiceGroup.setSingleClassMinutes(practiceCourseMinutes);
 |  |          practiceGroup.setSingleClassMinutes(practiceCourseMinutes);
 | 
											
												
													
														|  |          practiceGroupDao.insert(practiceGroup);
 |  |          practiceGroupDao.insert(practiceGroup);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          //创建班级信息
 |  |          //创建班级信息
 | 
											
												
													
														|  | -        ClassGroup classGroup=new ClassGroup();
 |  | 
 | 
											
												
													
														|  | 
 |  | +        ClassGroup classGroup = new ClassGroup();
 | 
											
												
													
														|  |          classGroup.setSubjectIdList(practiceGroup.getSubjectId().toString());
 |  |          classGroup.setSubjectIdList(practiceGroup.getSubjectId().toString());
 | 
											
												
													
														|  |          classGroup.setExpectStudentNum(1);
 |  |          classGroup.setExpectStudentNum(1);
 | 
											
												
													
														|  | 
 |  | +        classGroup.setStudentNum(1);
 | 
											
												
													
														|  |          classGroup.setName(practiceGroup.getName());
 |  |          classGroup.setName(practiceGroup.getName());
 | 
											
												
													
														|  | -        classGroup.setTotalClassTimes(1);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        classGroup.setTotalClassTimes(4);
 | 
											
												
													
														|  |          classGroup.setType(ClassGroupTypeEnum.PRACTICE);
 |  |          classGroup.setType(ClassGroupTypeEnum.PRACTICE);
 | 
											
												
													
														|  |          classGroup.setDelFlag(0);
 |  |          classGroup.setDelFlag(0);
 | 
											
												
													
														|  |          classGroup.setGroupType(GroupType.PRACTICE);
 |  |          classGroup.setGroupType(GroupType.PRACTICE);
 | 
											
										
											
												
													
														|  | @@ -143,7 +401,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 | 
											
												
													
														|  |          classGroupDao.insert(classGroup);
 |  |          classGroupDao.insert(classGroup);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          //创建班级老师关联记录
 |  |          //创建班级老师关联记录
 | 
											
												
													
														|  | -        ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper();
 |  | 
 | 
											
												
													
														|  | 
 |  | +        ClassGroupTeacherMapper classGroupTeacherMapper = new ClassGroupTeacherMapper();
 | 
											
												
													
														|  |          classGroupTeacherMapper.setMusicGroupId(practiceGroup.getId().toString());
 |  |          classGroupTeacherMapper.setMusicGroupId(practiceGroup.getId().toString());
 | 
											
												
													
														|  |          classGroupTeacherMapper.setClassGroupId(classGroup.getId());
 |  |          classGroupTeacherMapper.setClassGroupId(classGroup.getId());
 | 
											
												
													
														|  |          classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.BISHOP);
 |  |          classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.BISHOP);
 | 
											
										
											
												
													
														|  | @@ -154,7 +412,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 | 
											
												
													
														|  |          classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
 |  |          classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          //创建班级与老师课酬记录
 |  |          //创建班级与老师课酬记录
 | 
											
												
													
														|  | -        ClassGroupTeacherSalary classGroupTeacherSalary=new ClassGroupTeacherSalary();
 |  | 
 | 
											
												
													
														|  | 
 |  | +        ClassGroupTeacherSalary classGroupTeacherSalary = new ClassGroupTeacherSalary();
 | 
											
												
													
														|  |          classGroupTeacherSalary.setMusicGroupId(practiceGroup.getId().toString());
 |  |          classGroupTeacherSalary.setMusicGroupId(practiceGroup.getId().toString());
 | 
											
												
													
														|  |          classGroupTeacherSalary.setClassGroupId(classGroup.getId());
 |  |          classGroupTeacherSalary.setClassGroupId(classGroup.getId());
 | 
											
												
													
														|  |          classGroupTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
 |  |          classGroupTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
 | 
											
										
											
												
													
														|  | @@ -170,88 +428,101 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 | 
											
												
													
														|  |          ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper();
 |  |          ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper();
 | 
											
												
													
														|  |          classGroupStudentMapper.setMusicGroupId(practiceGroup.getId().toString());
 |  |          classGroupStudentMapper.setMusicGroupId(practiceGroup.getId().toString());
 | 
											
												
													
														|  |          classGroupStudentMapper.setClassGroupId(classGroup.getId());
 |  |          classGroupStudentMapper.setClassGroupId(classGroup.getId());
 | 
											
												
													
														|  | -        classGroupStudentMapper.setUserId(practiceGroup.getUserId());
 |  | 
 | 
											
												
													
														|  | 
 |  | +        classGroupStudentMapper.setUserId(practiceGroup.getStudentId());
 | 
											
												
													
														|  |          classGroupStudentMapper.setCreateTime(now);
 |  |          classGroupStudentMapper.setCreateTime(now);
 | 
											
												
													
														|  |          classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
 |  |          classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
 | 
											
												
													
														|  |          classGroupStudentMapper.setGroupType(GroupType.PRACTICE);
 |  |          classGroupStudentMapper.setGroupType(GroupType.PRACTICE);
 | 
											
												
													
														|  |          classGroupStudentMapperDao.insert(classGroupStudentMapper);
 |  |          classGroupStudentMapperDao.insert(classGroupStudentMapper);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        //课表
 |  | 
 | 
											
												
													
														|  | -        CourseSchedule courseSchedule = new CourseSchedule();
 |  | 
 | 
											
												
													
														|  | -        courseSchedule.setMusicGroupId(practiceGroup.getId().toString());
 |  | 
 | 
											
												
													
														|  | -        courseSchedule.setClassGroupId(classGroup.getId());
 |  | 
 | 
											
												
													
														|  | -        courseSchedule.setStatus(CourseStatusEnum.NOT_START);
 |  | 
 | 
											
												
													
														|  | -        courseSchedule.setClassDate(practiceGroup.getCoursesStartDate());
 |  | 
 | 
											
												
													
														|  | -        courseSchedule.setStartClassTime(practiceGroup.getCoursesStartDate());
 |  | 
 | 
											
												
													
														|  | -        courseSchedule.setEndClassTime(practiceGroup.getCoursesExpireDate());
 |  | 
 | 
											
												
													
														|  | -        courseSchedule.setTeacherId(teacherId);
 |  | 
 | 
											
												
													
														|  | -        courseSchedule.setActualTeacherId(teacherId);
 |  | 
 | 
											
												
													
														|  | -        courseSchedule.setCreateTime(now);
 |  | 
 | 
											
												
													
														|  | -        courseSchedule.setUpdateTime(now);
 |  | 
 | 
											
												
													
														|  | -        courseSchedule.setTeachMode(TeachModeEnum.ONLINE);
 |  | 
 | 
											
												
													
														|  | -        courseSchedule.setType(CourseSchedule.CourseScheduleType.PRACTICE);
 |  | 
 | 
											
												
													
														|  | -        courseSchedule.setGroupType(GroupType.PRACTICE);
 |  | 
 | 
											
												
													
														|  | -        courseSchedule.setName(practiceGroup.getName());
 |  | 
 | 
											
												
													
														|  | -        courseScheduleDao.insert(courseSchedule);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -        //课程与老师薪水表
 |  | 
 | 
											
												
													
														|  | -        CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
 |  | 
 | 
											
												
													
														|  | -        courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
 |  | 
 | 
											
												
													
														|  | -        courseScheduleTeacherSalary.setGroupType(GroupType.PRACTICE);
 |  | 
 | 
											
												
													
														|  | -        courseScheduleTeacherSalary.setMusicGroupId(practiceGroup.getId().toString());
 |  | 
 | 
											
												
													
														|  | -        courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
 |  | 
 | 
											
												
													
														|  | -        courseScheduleTeacherSalary.setUserId(teacherId);
 |  | 
 | 
											
												
													
														|  | -        courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(practiceCourseSalaryConfig.getParanValue()));
 |  | 
 | 
											
												
													
														|  | -        courseScheduleTeacherSalary.setCreateTime(now);
 |  | 
 | 
											
												
													
														|  | -        courseScheduleTeacherSalary.setUpdateTime(now);
 |  | 
 | 
											
												
													
														|  | -        courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
 |  | 
 | 
											
												
													
														|  | -        courseScheduleTeacherSalaryDao.insert(courseScheduleTeacherSalary);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -        //学生缴费记录
 |  | 
 | 
											
												
													
														|  | -        CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
 |  | 
 | 
											
												
													
														|  | -        courseScheduleStudentPayment.setGroupType(GroupType.PRACTICE);
 |  | 
 | 
											
												
													
														|  | -        courseScheduleStudentPayment.setMusicGroupId(practiceGroup.getId().toString());
 |  | 
 | 
											
												
													
														|  | -        courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
 |  | 
 | 
											
												
													
														|  | -        courseScheduleStudentPayment.setUserId(practiceGroup.getUserId());
 |  | 
 | 
											
												
													
														|  | -        courseScheduleStudentPayment.setExpectPrice(BigDecimal.ZERO);
 |  | 
 | 
											
												
													
														|  | -        courseScheduleStudentPayment.setClassGroupId(classGroup.getId());
 |  | 
 | 
											
												
													
														|  | -        courseScheduleStudentPayment.setCreateTime(now);
 |  | 
 | 
											
												
													
														|  | -        courseScheduleStudentPayment.setUpdateTime(now);
 |  | 
 | 
											
												
													
														|  | -        courseScheduleStudentPaymentDao.insert(courseScheduleStudentPayment);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -        //教师签到记录
 |  | 
 | 
											
												
													
														|  | -        TeacherAttendance teacherAttendance = new TeacherAttendance();
 |  | 
 | 
											
												
													
														|  | -        teacherAttendance.setMusicGroupId(practiceGroup.getId().toString());
 |  | 
 | 
											
												
													
														|  | -        teacherAttendance.setTeacherId(teacherId);
 |  | 
 | 
											
												
													
														|  | -        teacherAttendance.setClassGroupId(classGroup.getId());
 |  | 
 | 
											
												
													
														|  | -        teacherAttendance.setGroupType(GroupType.PRACTICE);
 |  | 
 | 
											
												
													
														|  | -        teacherAttendance.setCourseScheduleId(courseSchedule.getId());
 |  | 
 | 
											
												
													
														|  | -        teacherAttendance.setCreateTime(now);
 |  | 
 | 
											
												
													
														|  | -        teacherAttendanceDao.insert(teacherAttendance);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -        Student student = studentDao.get(practiceGroup.getUserId());
 |  | 
 | 
											
												
													
														|  | -        if(Objects.isNull(student)){
 |  | 
 | 
											
												
													
														|  | -            student=new Student();
 |  | 
 | 
											
												
													
														|  | -            student.setUserId(practiceGroup.getUserId());
 |  | 
 | 
											
												
													
														|  | 
 |  | +        List<CourseSchedule> courseSchedules=new ArrayList<>();
 | 
											
												
													
														|  | 
 |  | +        List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries=new ArrayList<>();
 | 
											
												
													
														|  | 
 |  | +        List<CourseScheduleStudentPayment> courseScheduleStudentPayments=new ArrayList<>();
 | 
											
												
													
														|  | 
 |  | +        List<TeacherAttendance> teacherAttendances=new ArrayList<>();
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        for (Date courseDate : allCourseDates) {
 | 
											
												
													
														|  | 
 |  | +            //课表
 | 
											
												
													
														|  | 
 |  | +            CourseSchedule courseSchedule = new CourseSchedule();
 | 
											
												
													
														|  | 
 |  | +            courseSchedule.setMusicGroupId(practiceGroup.getId().toString());
 | 
											
												
													
														|  | 
 |  | +            courseSchedule.setClassGroupId(classGroup.getId());
 | 
											
												
													
														|  | 
 |  | +            courseSchedule.setStatus(CourseStatusEnum.NOT_START);
 | 
											
												
													
														|  | 
 |  | +            courseSchedule.setClassDate(courseDate);
 | 
											
												
													
														|  | 
 |  | +            courseSchedule.setStartClassTime(courseDate);
 | 
											
												
													
														|  | 
 |  | +            courseSchedule.setEndClassTime(DateUtil.addMinutes(courseDate,practiceCourseMinutes));
 | 
											
												
													
														|  | 
 |  | +            courseSchedule.setTeacherId(teacherId);
 | 
											
												
													
														|  | 
 |  | +            courseSchedule.setActualTeacherId(teacherId);
 | 
											
												
													
														|  | 
 |  | +            courseSchedule.setCreateTime(now);
 | 
											
												
													
														|  | 
 |  | +            courseSchedule.setUpdateTime(now);
 | 
											
												
													
														|  | 
 |  | +            courseSchedule.setTeachMode(TeachModeEnum.ONLINE);
 | 
											
												
													
														|  | 
 |  | +            courseSchedule.setType(CourseSchedule.CourseScheduleType.PRACTICE);
 | 
											
												
													
														|  | 
 |  | +            courseSchedule.setGroupType(GroupType.PRACTICE);
 | 
											
												
													
														|  | 
 |  | +            courseSchedule.setName(practiceGroup.getName());
 | 
											
												
													
														|  | 
 |  | +            courseSchedules.add(courseSchedule);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            //课程与老师薪水表
 | 
											
												
													
														|  | 
 |  | +            CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalary.setGroupType(GroupType.PRACTICE);
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalary.setMusicGroupId(practiceGroup.getId().toString());
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalary.setUserId(teacherId);
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(practiceCourseSalaryConfig.getParanValue()));
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalary.setCreateTime(now);
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalary.setUpdateTime(now);
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
 | 
											
												
													
														|  | 
 |  | +            courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            //学生缴费记录
 | 
											
												
													
														|  | 
 |  | +            CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
 | 
											
												
													
														|  | 
 |  | +            courseScheduleStudentPayment.setGroupType(GroupType.PRACTICE);
 | 
											
												
													
														|  | 
 |  | +            courseScheduleStudentPayment.setMusicGroupId(practiceGroup.getId().toString());
 | 
											
												
													
														|  | 
 |  | +            courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
 | 
											
												
													
														|  | 
 |  | +            courseScheduleStudentPayment.setUserId(practiceGroup.getStudentId());
 | 
											
												
													
														|  | 
 |  | +            courseScheduleStudentPayment.setExpectPrice(BigDecimal.ZERO);
 | 
											
												
													
														|  | 
 |  | +            courseScheduleStudentPayment.setClassGroupId(classGroup.getId());
 | 
											
												
													
														|  | 
 |  | +            courseScheduleStudentPayment.setCreateTime(now);
 | 
											
												
													
														|  | 
 |  | +            courseScheduleStudentPayment.setUpdateTime(now);
 | 
											
												
													
														|  | 
 |  | +            courseScheduleStudentPayments.add(courseScheduleStudentPayment);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            //教师签到记录
 | 
											
												
													
														|  | 
 |  | +            TeacherAttendance teacherAttendance = new TeacherAttendance();
 | 
											
												
													
														|  | 
 |  | +            teacherAttendance.setMusicGroupId(practiceGroup.getId().toString());
 | 
											
												
													
														|  | 
 |  | +            teacherAttendance.setTeacherId(teacherId);
 | 
											
												
													
														|  | 
 |  | +            teacherAttendance.setClassGroupId(classGroup.getId());
 | 
											
												
													
														|  | 
 |  | +            teacherAttendance.setGroupType(GroupType.PRACTICE);
 | 
											
												
													
														|  | 
 |  | +            teacherAttendance.setCourseScheduleId(courseSchedule.getId());
 | 
											
												
													
														|  | 
 |  | +            teacherAttendance.setCreateTime(now);
 | 
											
												
													
														|  | 
 |  | +            teacherAttendances.add(teacherAttendance);
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        courseScheduleDao.batchAddCourseSchedules(courseSchedules);
 | 
											
												
													
														|  | 
 |  | +        courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaries);
 | 
											
												
													
														|  | 
 |  | +        courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
 | 
											
												
													
														|  | 
 |  | +        teacherAttendanceDao.batchInsert(teacherAttendances);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        Student student = studentDao.get(practiceGroup.getStudentId());
 | 
											
												
													
														|  | 
 |  | +        if (Objects.isNull(student)) {
 | 
											
												
													
														|  | 
 |  | +            student = new Student();
 | 
											
												
													
														|  | 
 |  | +            student.setUserId(practiceGroup.getStudentId());
 | 
											
												
													
														|  |              student.setSubjectIdList(practiceGroup.getSubjectId().toString());
 |  |              student.setSubjectIdList(practiceGroup.getSubjectId().toString());
 | 
											
												
													
														|  |              studentDao.insert(student);
 |  |              studentDao.insert(student);
 | 
											
												
													
														|  | -        }else{
 |  | 
 | 
											
												
													
														|  | -            if(Objects.isNull(student.getSubjectIdList())){
 |  | 
 | 
											
												
													
														|  | 
 |  | +        } else {
 | 
											
												
													
														|  | 
 |  | +            if (Objects.isNull(student.getSubjectIdList())) {
 | 
											
												
													
														|  |                  student.setSubjectIdList(practiceGroup.getSubjectId().toString());
 |  |                  student.setSubjectIdList(practiceGroup.getSubjectId().toString());
 | 
											
												
													
														|  | -            }else{
 |  | 
 | 
											
												
													
														|  | 
 |  | +            } else {
 | 
											
												
													
														|  |                  String[] studentIdStrings = student.getSubjectIdList().split(",");
 |  |                  String[] studentIdStrings = student.getSubjectIdList().split(",");
 | 
											
												
													
														|  |                  List<String> studentIds = new ArrayList<>(Arrays.asList(studentIdStrings));
 |  |                  List<String> studentIds = new ArrayList<>(Arrays.asList(studentIdStrings));
 | 
											
												
													
														|  | -                if(!studentIds.contains(practiceGroup.getSubjectId().toString())){
 |  | 
 | 
											
												
													
														|  | 
 |  | +                if (!studentIds.contains(practiceGroup.getSubjectId().toString())) {
 | 
											
												
													
														|  |                      studentIds.add(practiceGroup.getSubjectId().toString());
 |  |                      studentIds.add(practiceGroup.getSubjectId().toString());
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
												
													
														|  | -                student.setSubjectIdList(StringUtils.join(studentIds.toArray(),","));
 |  | 
 | 
											
												
													
														|  | 
 |  | +                student.setSubjectIdList(StringUtils.join(studentIds.toArray(), ","));
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |              studentDao.update(student);
 |  |              studentDao.update(student);
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        Map result=new HashMap();
 |  | 
 | 
											
												
													
														|  | -        result.put("teacherName",teacher.getRealName());
 |  | 
 | 
											
												
													
														|  | -        result.put("enableApply",applyTimes<2?1:0);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        Map result = new HashMap();
 | 
											
												
													
														|  | 
 |  | +        result.put("teacherName", teacher.getRealName());
 | 
											
												
													
														|  | 
 |  | +        result.put("enableApply", applyTimes < 1 ? 1 : 0);
 | 
											
												
													
														|  |          return result;
 |  |          return result;
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  }
 |  |  }
 |