|
@@ -1,6 +1,10 @@
|
|
|
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.dto.CourseScheduleDto;
|
|
|
+import com.ym.mec.biz.dal.dto.TeacherBasicDto;
|
|
|
import com.ym.mec.biz.dal.entity.*;
|
|
|
import com.ym.mec.biz.dal.enums.*;
|
|
|
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.exception.BizException;
|
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
|
+import com.ym.mec.util.collection.MapUtil;
|
|
|
import com.ym.mec.util.date.DateUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -18,122 +23,375 @@ import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@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;
|
|
|
- @Autowired
|
|
|
+ @Autowired
|
|
|
private EmployeeDao employeeDao;
|
|
|
- @Autowired
|
|
|
+ @Autowired
|
|
|
private ClassGroupDao classGroupDao;
|
|
|
- @Autowired
|
|
|
+ @Autowired
|
|
|
private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
|
|
|
- @Autowired
|
|
|
+ @Autowired
|
|
|
private ClassGroupTeacherSalaryDao classGroupTeacherSalaryDao;
|
|
|
- @Autowired
|
|
|
+ @Autowired
|
|
|
private CourseScheduleDao courseScheduleDao;
|
|
|
- @Autowired
|
|
|
+ @Autowired
|
|
|
private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
|
|
|
- @Autowired
|
|
|
+ @Autowired
|
|
|
private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
|
|
|
- @Autowired
|
|
|
+ @Autowired
|
|
|
private TeacherAttendanceDao teacherAttendanceDao;
|
|
|
- @Autowired
|
|
|
+ @Autowired
|
|
|
private StudentDao studentDao;
|
|
|
- @Autowired
|
|
|
+ @Autowired
|
|
|
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);
|
|
|
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)
|
|
|
- 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);
|
|
|
- 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);
|
|
|
- if(StringUtils.isEmpty(employee.getOrganIdList()) || employee.getOrganIdList().contains(",")){
|
|
|
+ if (Objects.isNull(employee) || StringUtils.isEmpty(employee.getOrganIdList()) || employee.getOrganIdList().contains(",")) {
|
|
|
practiceGroup.setOrganId(teacher.getTeacherOrganId());
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
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("声部不存在");
|
|
|
}
|
|
|
- practiceGroup.setName(subject.getName()+"•陪练课");
|
|
|
+ practiceGroup.setName(subject.getName() + "•陪练课");
|
|
|
practiceGroup.setSingleClassMinutes(practiceCourseMinutes);
|
|
|
practiceGroupDao.insert(practiceGroup);
|
|
|
|
|
|
//创建班级信息
|
|
|
- ClassGroup classGroup=new ClassGroup();
|
|
|
+ ClassGroup classGroup = new ClassGroup();
|
|
|
classGroup.setSubjectIdList(practiceGroup.getSubjectId().toString());
|
|
|
classGroup.setExpectStudentNum(1);
|
|
|
+ classGroup.setStudentNum(1);
|
|
|
classGroup.setName(practiceGroup.getName());
|
|
|
- classGroup.setTotalClassTimes(1);
|
|
|
+ classGroup.setTotalClassTimes(4);
|
|
|
classGroup.setType(ClassGroupTypeEnum.PRACTICE);
|
|
|
classGroup.setDelFlag(0);
|
|
|
classGroup.setGroupType(GroupType.PRACTICE);
|
|
@@ -143,7 +401,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
|
|
|
classGroupDao.insert(classGroup);
|
|
|
|
|
|
//创建班级老师关联记录
|
|
|
- ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper();
|
|
|
+ ClassGroupTeacherMapper classGroupTeacherMapper = new ClassGroupTeacherMapper();
|
|
|
classGroupTeacherMapper.setMusicGroupId(practiceGroup.getId().toString());
|
|
|
classGroupTeacherMapper.setClassGroupId(classGroup.getId());
|
|
|
classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.BISHOP);
|
|
@@ -154,7 +412,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
|
|
|
classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
|
|
|
|
|
|
//创建班级与老师课酬记录
|
|
|
- ClassGroupTeacherSalary classGroupTeacherSalary=new ClassGroupTeacherSalary();
|
|
|
+ ClassGroupTeacherSalary classGroupTeacherSalary = new ClassGroupTeacherSalary();
|
|
|
classGroupTeacherSalary.setMusicGroupId(practiceGroup.getId().toString());
|
|
|
classGroupTeacherSalary.setClassGroupId(classGroup.getId());
|
|
|
classGroupTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
|
|
@@ -170,88 +428,101 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
|
|
|
ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper();
|
|
|
classGroupStudentMapper.setMusicGroupId(practiceGroup.getId().toString());
|
|
|
classGroupStudentMapper.setClassGroupId(classGroup.getId());
|
|
|
- classGroupStudentMapper.setUserId(practiceGroup.getUserId());
|
|
|
+ classGroupStudentMapper.setUserId(practiceGroup.getStudentId());
|
|
|
classGroupStudentMapper.setCreateTime(now);
|
|
|
classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
|
|
|
classGroupStudentMapper.setGroupType(GroupType.PRACTICE);
|
|
|
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());
|
|
|
studentDao.insert(student);
|
|
|
- }else{
|
|
|
- if(Objects.isNull(student.getSubjectIdList())){
|
|
|
+ } else {
|
|
|
+ if (Objects.isNull(student.getSubjectIdList())) {
|
|
|
student.setSubjectIdList(practiceGroup.getSubjectId().toString());
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
String[] studentIdStrings = student.getSubjectIdList().split(",");
|
|
|
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());
|
|
|
}
|
|
|
- student.setSubjectIdList(StringUtils.join(studentIds.toArray(),","));
|
|
|
+ student.setSubjectIdList(StringUtils.join(studentIds.toArray(), ","));
|
|
|
}
|
|
|
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;
|
|
|
- }
|
|
|
+ }
|
|
|
+
|
|
|
}
|