|
@@ -7,10 +7,7 @@ import com.ym.mec.biz.dal.dao.*;
|
|
|
import com.ym.mec.biz.dal.dto.*;
|
|
|
import com.ym.mec.biz.dal.entity.*;
|
|
|
import com.ym.mec.biz.dal.enums.*;
|
|
|
-import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
|
|
|
-import com.ym.mec.biz.dal.page.StudentPayLogQueryInfo;
|
|
|
-import com.ym.mec.biz.dal.page.VipClassQueryInfo;
|
|
|
-import com.ym.mec.biz.dal.page.queryMusicGroupCourseScheduleQueryInfo;
|
|
|
+import com.ym.mec.biz.dal.page.*;
|
|
|
import com.ym.mec.biz.service.*;
|
|
|
import com.ym.mec.common.constant.CommonConstants;
|
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
@@ -106,6 +103,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
private SysConfigDao sysConfigDao;
|
|
|
@Autowired
|
|
|
private SubjectDao subjectDao;
|
|
|
+ @Autowired
|
|
|
+ private GroupDao groupDao;
|
|
|
|
|
|
@Override
|
|
|
public BaseDAO<Integer, ClassGroup> getDAO() {
|
|
@@ -267,152 +266,152 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public List<HighClassGroupDto> addHighClassGroup(List<HighClassGroupDto> highClassGroupList) throws Exception {
|
|
|
- String key = "addHighClassGroup";
|
|
|
- long value = Thread.currentThread().getId();
|
|
|
- redisCache.getLocked(key, value, 30);
|
|
|
- MusicGroup musicGroup = musicGroupDao.get(highClassGroupList.get(0).getMusicGroupId());
|
|
|
-
|
|
|
- int highClassGroupNum = studentRegistrationDao.findMusicGroupStudentNum(musicGroup.getId()) / 5;
|
|
|
- if (highClassGroupList.size() > highClassGroupNum) {
|
|
|
- throw new BizException("班数不能大于" + highClassGroupNum);
|
|
|
- }
|
|
|
-
|
|
|
- List<ClassGroup> classGroups = classGroupDao.findClassGroupByMusicGroupIdAndType(musicGroup.getId(), ClassGroupTypeEnum.HIGH);
|
|
|
- if (classGroups.size() > 0) {
|
|
|
- List<Integer> classGroupIds = classGroups.stream().map(classGroup -> classGroup.getId()).collect(Collectors.toList());
|
|
|
-
|
|
|
- //删除基础提高班
|
|
|
- classGroupDao.batchSoftDelete(classGroupIds);
|
|
|
- //删除基础提高老师
|
|
|
- classGroupTeacherMapperDao.delClassGroupTeacherMapper(classGroupIds);
|
|
|
-
|
|
|
- List<CourseSchedule> classGroupNoStartCourseSchedules = courseScheduleService.findClassGroupNoStartCourseSchedules(classGroupIds, GroupType.MUSIC);
|
|
|
-
|
|
|
- if (classGroupNoStartCourseSchedules.size() > 0) {
|
|
|
- List<Long> courseScheduleIds = classGroupNoStartCourseSchedules.stream().map(courseSchedule -> courseSchedule.getId()).collect(Collectors.toList());
|
|
|
- courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
|
|
|
- teacherAttendanceDao.batchDeleteByCourseSchedules(courseScheduleIds);
|
|
|
- //删除基础提高班课程
|
|
|
- courseScheduleDao.deleteCourseSchedulesByClassGroupIds(courseScheduleIds);
|
|
|
- }
|
|
|
-
|
|
|
- List<ImGroupModel> imGroupModelList = new ArrayList<>();
|
|
|
- for (ClassGroup classGroup : classGroups) {
|
|
|
- imGroupModelList.add(new ImGroupModel(classGroup.getId().toString(), null, classGroup.getName()));
|
|
|
- }
|
|
|
- imFeignService.groupBatchDismiss(imGroupModelList);
|
|
|
- }
|
|
|
-
|
|
|
- List<CourseSchedule> courseScheduleList = new ArrayList<>();
|
|
|
- List<ClassGroupTeacherMapper> classGroupTeacherMapperList = new ArrayList<>();
|
|
|
- List<ClassGroupImGroupDto> classGroupImGroupList = new ArrayList<>();
|
|
|
- Integer schoolId = musicGroup.getSchoolId();
|
|
|
-
|
|
|
-
|
|
|
- for (HighClassGroupDto highClassGroup : highClassGroupList) {
|
|
|
- if (highClassGroup.getDayOfWeek() < 1 || highClassGroup.getDayOfWeek() > 7) {
|
|
|
- throw new BizException("上课星期错误,请核查");
|
|
|
- }
|
|
|
- //1、插入班级信息
|
|
|
- Date date;
|
|
|
- date = new Date();
|
|
|
- highClassGroup.setId(null);
|
|
|
- highClassGroup.setGroupType(GroupType.MUSIC);
|
|
|
- highClassGroup.setCreateTime(date);
|
|
|
- highClassGroup.setUpdateTime(date);
|
|
|
- highClassGroup.setType(ClassGroupTypeEnum.HIGH);
|
|
|
- highClassGroup.setTotalClassTimes(highClassGroup.getCourseTimes());
|
|
|
- highClassGroup.setCurrentClassTimes(0);
|
|
|
- insert(highClassGroup);
|
|
|
-
|
|
|
- //2、插入班级关联老师
|
|
|
- ClassGroupTeacherMapper classGroupTeacherMapper = new ClassGroupTeacherMapper();
|
|
|
- classGroupTeacherMapper.setMusicGroupId(highClassGroup.getMusicGroupId());
|
|
|
- classGroupTeacherMapper.setClassGroupId(highClassGroup.getId());
|
|
|
- classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.BISHOP);
|
|
|
- classGroupTeacherMapper.setUserId(highClassGroup.getUserId());
|
|
|
- classGroupTeacherMapper.setGroupType(GroupType.MUSIC);
|
|
|
- classGroupTeacherMapper.setCreateTime(date);
|
|
|
- classGroupTeacherMapper.setUpdateTime(date);
|
|
|
- classGroupTeacherMapperList.add(classGroupTeacherMapper);
|
|
|
-
|
|
|
- //3、插入班级排课信息
|
|
|
- int times = 0;
|
|
|
- LocalDateTime now = LocalDate.parse(highClassGroup.getStartDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay();
|
|
|
-
|
|
|
- List<Subject> subjectList = subjectService.findBySubjectByIdList(highClassGroup.getSubjectIdList());
|
|
|
-
|
|
|
- String courseScheduleName = subjectList.stream().map(subject -> subject.getName()).collect(Collectors.joining("/"));
|
|
|
-
|
|
|
-
|
|
|
- Map<String, Integer> holidayDays = new HashMap<>();
|
|
|
- Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
|
|
|
- if (highClassGroup.getHoliday()) {
|
|
|
- holiday = jiaRiFeignService.query(now.getYear());
|
|
|
- holidayDays = holiday.get(now.getYear());
|
|
|
- }
|
|
|
-
|
|
|
- WhileNode:
|
|
|
- while (highClassGroup.getCourseTimes() > times) {
|
|
|
- if(highClassGroup.getHoliday() && !holiday.containsKey(now.getYear())){
|
|
|
- holiday = jiaRiFeignService.query(now.getYear());
|
|
|
- holidayDays = holiday.get(now.getYear());
|
|
|
- }
|
|
|
- if (highClassGroup.getHoliday() && holidayDays.containsKey(now.format(DateTimeFormatter.ofPattern("MMdd")))) {
|
|
|
- now = now.plusDays(1);
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- int dayOfWeek = now.getDayOfWeek().getValue();
|
|
|
- if (highClassGroup.getDayOfWeek() == dayOfWeek) {
|
|
|
- CourseSchedule courseSchedule = new CourseSchedule();
|
|
|
- Instant instant = now.atZone(ZoneId.systemDefault()).toInstant();
|
|
|
- Date classDate = Date.from(instant);
|
|
|
- String startClassTime = DateUtil.getDate(classDate) + " " + highClassGroup.getStartClassTime() + ":00";
|
|
|
- String endClassTime = DateUtil.getDate(classDate) + " " + highClassGroup.getEndClassTime() + ":00";
|
|
|
-
|
|
|
- courseSchedule.setSchoolId(schoolId);
|
|
|
- courseSchedule.setMusicGroupId(highClassGroup.getMusicGroupId());
|
|
|
- courseSchedule.setClassGroupId(highClassGroup.getId());
|
|
|
- courseSchedule.setStatus(CourseStatusEnum.NOT_START);
|
|
|
- courseSchedule.setClassDate(classDate);
|
|
|
- courseSchedule.setStartClassTime(DateUtil.stringToDate(startClassTime));
|
|
|
- courseSchedule.setEndClassTime(DateUtil.stringToDate(endClassTime));
|
|
|
- courseSchedule.setTeacherId(highClassGroup.getUserId());
|
|
|
- courseSchedule.setActualTeacherId(highClassGroup.getUserId());
|
|
|
- courseSchedule.setCreateTime(date);
|
|
|
- courseSchedule.setUpdateTime(date);
|
|
|
- courseSchedule.setTeachMode(TeachModeEnum.OFFLINE);
|
|
|
- courseSchedule.setType(CourseSchedule.CourseScheduleType.HIGH);
|
|
|
- courseSchedule.setGroupType(GroupType.MUSIC);
|
|
|
- courseSchedule.setName(courseScheduleName + "-" + CourseSchedule.CourseScheduleType.HIGH.getMsg());
|
|
|
- courseScheduleList.add(courseSchedule);
|
|
|
- times++;
|
|
|
- }
|
|
|
- now = now.plusDays(1);
|
|
|
- }
|
|
|
-
|
|
|
- List<Integer> userIdList = new ArrayList<>();
|
|
|
- userIdList.add(classGroupTeacherMapper.getUserId());
|
|
|
-
|
|
|
- ClassGroupImGroupDto classGroupImGroupDto = new ClassGroupImGroupDto();
|
|
|
- classGroupImGroupDto.setClassGroup(highClassGroup);
|
|
|
- classGroupImGroupDto.setUserIds(userIdList);
|
|
|
- classGroupImGroupList.add(classGroupImGroupDto);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- //加入Im群组
|
|
|
- batchAddImGroup(classGroupImGroupList);
|
|
|
- classGroupTeacherMapperService.classGroupTeachersInsert(classGroupTeacherMapperList);
|
|
|
- //检测新排课冲突
|
|
|
- courseScheduleService.checkNewCourseSchedules(courseScheduleList, false);
|
|
|
- courseScheduleDao.batchAddCourseSchedules(courseScheduleList);
|
|
|
-
|
|
|
- redisCache.releaseLocked(key, value);
|
|
|
- return highClassGroupList;
|
|
|
- }
|
|
|
+ public List<HighClassGroupDto> addHighClassGroup(List<HighClassGroupDto> highClassGroupList) throws Exception {
|
|
|
+ String key = "addHighClassGroup";
|
|
|
+ long value = Thread.currentThread().getId();
|
|
|
+ redisCache.getLocked(key, value, 30);
|
|
|
+ try {
|
|
|
+ MusicGroup musicGroup = musicGroupDao.get(highClassGroupList.get(0).getMusicGroupId());
|
|
|
+
|
|
|
+ int highClassGroupNum = studentRegistrationDao.findMusicGroupStudentNum(musicGroup.getId()) / 5;
|
|
|
+ if (highClassGroupList.size() > highClassGroupNum) {
|
|
|
+ throw new BizException("班数不能大于" + highClassGroupNum);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ClassGroup> classGroups = classGroupDao.findClassGroupByMusicGroupIdAndType(musicGroup.getId(), ClassGroupTypeEnum.HIGH);
|
|
|
+ if (classGroups.size() > 0) {
|
|
|
+ List<Integer> classGroupIds = classGroups.stream().map(classGroup -> classGroup.getId()).collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 删除基础提高班
|
|
|
+ classGroupDao.batchSoftDelete(classGroupIds);
|
|
|
+ // 删除基础提高老师
|
|
|
+ classGroupTeacherMapperDao.delClassGroupTeacherMapper(classGroupIds);
|
|
|
+
|
|
|
+ List<CourseSchedule> classGroupNoStartCourseSchedules = courseScheduleService.findClassGroupNoStartCourseSchedules(classGroupIds,
|
|
|
+ GroupType.MUSIC);
|
|
|
+
|
|
|
+ if (classGroupNoStartCourseSchedules.size() > 0) {
|
|
|
+ List<Long> courseScheduleIds = classGroupNoStartCourseSchedules.stream().map(courseSchedule -> courseSchedule.getId())
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
|
|
|
+ teacherAttendanceDao.batchDeleteByCourseSchedules(courseScheduleIds);
|
|
|
+ // 删除基础提高班课程
|
|
|
+ courseScheduleDao.deleteCourseSchedulesByClassGroupIds(courseScheduleIds);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ImGroupModel> imGroupModelList = new ArrayList<>();
|
|
|
+ for (ClassGroup classGroup : classGroups) {
|
|
|
+ imGroupModelList.add(new ImGroupModel(classGroup.getId().toString(), null, classGroup.getName()));
|
|
|
+ }
|
|
|
+ imFeignService.groupBatchDismiss(imGroupModelList);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<CourseSchedule> courseScheduleList = new ArrayList<>();
|
|
|
+ List<ClassGroupTeacherMapper> classGroupTeacherMapperList = new ArrayList<>();
|
|
|
+ List<ClassGroupImGroupDto> classGroupImGroupList = new ArrayList<>();
|
|
|
+ Integer schoolId = musicGroup.getSchoolId();
|
|
|
+
|
|
|
+ for (HighClassGroupDto highClassGroup : highClassGroupList) {
|
|
|
+ if (highClassGroup.getDayOfWeek() < 1 || highClassGroup.getDayOfWeek() > 7) {
|
|
|
+ throw new BizException("上课星期错误,请核查");
|
|
|
+ }
|
|
|
+ // 1、插入班级信息
|
|
|
+ Date date;
|
|
|
+ date = new Date();
|
|
|
+ highClassGroup.setId(null);
|
|
|
+ highClassGroup.setGroupType(GroupType.MUSIC);
|
|
|
+ highClassGroup.setCreateTime(date);
|
|
|
+ highClassGroup.setUpdateTime(date);
|
|
|
+ highClassGroup.setType(ClassGroupTypeEnum.HIGH);
|
|
|
+ highClassGroup.setTotalClassTimes(highClassGroup.getCourseTimes());
|
|
|
+ highClassGroup.setCurrentClassTimes(0);
|
|
|
+ insert(highClassGroup);
|
|
|
+
|
|
|
+ // 2、插入班级关联老师
|
|
|
+ ClassGroupTeacherMapper classGroupTeacherMapper = new ClassGroupTeacherMapper();
|
|
|
+ classGroupTeacherMapper.setMusicGroupId(highClassGroup.getMusicGroupId());
|
|
|
+ classGroupTeacherMapper.setClassGroupId(highClassGroup.getId());
|
|
|
+ classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.BISHOP);
|
|
|
+ classGroupTeacherMapper.setUserId(highClassGroup.getUserId());
|
|
|
+ classGroupTeacherMapper.setGroupType(GroupType.MUSIC);
|
|
|
+ classGroupTeacherMapper.setCreateTime(date);
|
|
|
+ classGroupTeacherMapper.setUpdateTime(date);
|
|
|
+ classGroupTeacherMapperList.add(classGroupTeacherMapper);
|
|
|
+
|
|
|
+ // 3、插入班级排课信息
|
|
|
+ int times = 0;
|
|
|
+ LocalDateTime now = LocalDate.parse(highClassGroup.getStartDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay();
|
|
|
+
|
|
|
+ List<Subject> subjectList = subjectService.findBySubjectByIdList(highClassGroup.getSubjectIdList());
|
|
|
+
|
|
|
+ String courseScheduleName = subjectList.stream().map(subject -> subject.getName()).collect(Collectors.joining("/"));
|
|
|
+
|
|
|
+ Map<String, Integer> holidayDays = new HashMap<>();
|
|
|
+ Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
|
|
|
+ if (highClassGroup.getHoliday()) {
|
|
|
+ holiday = jiaRiFeignService.query(now.getYear());
|
|
|
+ holidayDays = holiday.get(now.getYear());
|
|
|
+ }
|
|
|
+
|
|
|
+ WhileNode: while (highClassGroup.getCourseTimes() > times) {
|
|
|
+ if (highClassGroup.getHoliday() && !holiday.containsKey(now.getYear())) {
|
|
|
+ holiday = jiaRiFeignService.query(now.getYear());
|
|
|
+ holidayDays = holiday.get(now.getYear());
|
|
|
+ }
|
|
|
+ if (highClassGroup.getHoliday() && holidayDays.containsKey(now.format(DateTimeFormatter.ofPattern("MMdd")))) {
|
|
|
+ now = now.plusDays(1);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ int dayOfWeek = now.getDayOfWeek().getValue();
|
|
|
+ if (highClassGroup.getDayOfWeek() == dayOfWeek) {
|
|
|
+ CourseSchedule courseSchedule = new CourseSchedule();
|
|
|
+ Instant instant = now.atZone(ZoneId.systemDefault()).toInstant();
|
|
|
+ Date classDate = Date.from(instant);
|
|
|
+ String startClassTime = DateUtil.getDate(classDate) + " " + highClassGroup.getStartClassTime() + ":00";
|
|
|
+ String endClassTime = DateUtil.getDate(classDate) + " " + highClassGroup.getEndClassTime() + ":00";
|
|
|
+
|
|
|
+ courseSchedule.setSchoolId(schoolId);
|
|
|
+ courseSchedule.setMusicGroupId(highClassGroup.getMusicGroupId());
|
|
|
+ courseSchedule.setClassGroupId(highClassGroup.getId());
|
|
|
+ courseSchedule.setStatus(CourseStatusEnum.NOT_START);
|
|
|
+ courseSchedule.setClassDate(classDate);
|
|
|
+ courseSchedule.setStartClassTime(DateUtil.stringToDate(startClassTime));
|
|
|
+ courseSchedule.setEndClassTime(DateUtil.stringToDate(endClassTime));
|
|
|
+ courseSchedule.setTeacherId(highClassGroup.getUserId());
|
|
|
+ courseSchedule.setActualTeacherId(highClassGroup.getUserId());
|
|
|
+ courseSchedule.setCreateTime(date);
|
|
|
+ courseSchedule.setUpdateTime(date);
|
|
|
+ courseSchedule.setTeachMode(TeachModeEnum.OFFLINE);
|
|
|
+ courseSchedule.setType(CourseSchedule.CourseScheduleType.HIGH);
|
|
|
+ courseSchedule.setGroupType(GroupType.MUSIC);
|
|
|
+ courseSchedule.setName(courseScheduleName + "-" + CourseSchedule.CourseScheduleType.HIGH.getMsg());
|
|
|
+ courseScheduleList.add(courseSchedule);
|
|
|
+ times++;
|
|
|
+ }
|
|
|
+ now = now.plusDays(1);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Integer> userIdList = new ArrayList<>();
|
|
|
+ userIdList.add(classGroupTeacherMapper.getUserId());
|
|
|
+
|
|
|
+ ClassGroupImGroupDto classGroupImGroupDto = new ClassGroupImGroupDto();
|
|
|
+ classGroupImGroupDto.setClassGroup(highClassGroup);
|
|
|
+ classGroupImGroupDto.setUserIds(userIdList);
|
|
|
+ classGroupImGroupList.add(classGroupImGroupDto);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 加入Im群组
|
|
|
+ batchAddImGroup(classGroupImGroupList);
|
|
|
+ classGroupTeacherMapperService.classGroupTeachersInsert(classGroupTeacherMapperList);
|
|
|
+ // 检测新排课冲突
|
|
|
+ courseScheduleService.checkNewCourseSchedules(courseScheduleList, false);
|
|
|
+ courseScheduleDao.batchAddCourseSchedules(courseScheduleList);
|
|
|
+ } finally {
|
|
|
+ redisCache.releaseLocked(key, value);
|
|
|
+ }
|
|
|
+ return highClassGroupList;
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public PageInfo<TeacherMusicClassInfoDto> getTeacherMusicClass(QueryInfo queryInfo) {
|
|
@@ -2201,4 +2200,43 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
|
courseScheduleStudentPaymentDao.deleteByCourseSchedule(courseScheduleIds);
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PageInfo endFindClassGroups(EndCourseScheduleQueryInfo queryInfo) {
|
|
|
+ PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+ MapUtil.populateMap(params, queryInfo);
|
|
|
+
|
|
|
+ if(StringUtils.isNotBlank(queryInfo.getSearch())){
|
|
|
+ List<Group> groups = groupDao.searchGroups(queryInfo.getSearch());
|
|
|
+ if(!CollectionUtils.isEmpty(groups)){
|
|
|
+ params.put("groups", groups);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<CourseScheduleEndDto> results = new ArrayList<>();
|
|
|
+ int count = courseScheduleDao.endCountCourseSchedules(params);
|
|
|
+ if (count > 0) {
|
|
|
+ pageInfo.setTotal(count);
|
|
|
+ params.put("offset", pageInfo.getOffset());
|
|
|
+ results = courseScheduleDao.endFindCourseSchedules(params);
|
|
|
+ List<Group> groups=new ArrayList<>();
|
|
|
+ groups.add(null);
|
|
|
+ for (CourseScheduleEndDto courseScheduleEndDto : results) {
|
|
|
+ Group group=new Group(courseScheduleEndDto.getMusicGroupId(),courseScheduleEndDto.getGroupType());
|
|
|
+ groups.add(group);
|
|
|
+ }
|
|
|
+ groups = groupDao.findByGroupIds(groups);
|
|
|
+ Map<String, Map<GroupType, List<Group>>> groupsGroupByGroup = groups.stream().collect(Collectors.groupingBy(Group::getId, Collectors.groupingBy(Group::getGroupType)));
|
|
|
+ results.forEach(result -> {
|
|
|
+ List<Group> groupTemps = groupsGroupByGroup.get(result.getMusicGroupId())
|
|
|
+ .get(result.getGroupType());
|
|
|
+ if(!CollectionUtils.isEmpty(groupTemps)){
|
|
|
+ result.setGroupName(groupTemps.get(0).getGroupName());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ pageInfo.setRows(results);
|
|
|
+ return pageInfo;
|
|
|
+ }
|
|
|
}
|