|
@@ -1,15 +1,129 @@
|
|
package com.ym.mec.biz.service.impl;
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
|
|
+import static com.ym.mec.biz.dal.enums.GroupType.COMM;
|
|
|
|
+import static com.ym.mec.biz.dal.enums.GroupType.PRACTICE;
|
|
|
|
+import static com.ym.mec.biz.dal.enums.GroupType.VIP;
|
|
|
|
+
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.time.Duration;
|
|
|
|
+import java.time.Instant;
|
|
|
|
+import java.time.LocalDate;
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
|
+import java.time.ZoneId;
|
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.Arrays;
|
|
|
|
+import java.util.Calendar;
|
|
|
|
+import java.util.Collections;
|
|
|
|
+import java.util.Date;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.HashSet;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.Objects;
|
|
|
|
+import java.util.Set;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
+
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.transaction.annotation.Propagation;
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
|
+
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.ym.mec.auth.api.client.SysUserFeignService;
|
|
import com.ym.mec.auth.api.client.SysUserFeignService;
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
-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.*;
|
|
|
|
-import com.ym.mec.biz.service.*;
|
|
|
|
|
|
+import com.ym.mec.biz.dal.dao.ClassGroupDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.ClassGroupRelationDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.ClassGroupTeacherMapperDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.CourseScheduleEvaluateDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.CoursesGroupDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.GroupDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.MusicGroupBuildLogDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.PracticeGroupDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.SchoolDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.StudentApplyRefundsDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.StudentAttendanceDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.StudentDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.SubjectDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.SysConfigDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.TeacherAttendanceDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.TeacherDao;
|
|
|
|
+import com.ym.mec.biz.dal.dao.VipGroupDao;
|
|
|
|
+import com.ym.mec.biz.dal.dto.ClassGroup4MixDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.ClassGroupImGroupDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.ClassGroupTeacherMapDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.ClassGroupTeachersDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.CourseListDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.CourseTimeDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.HighClassGroupDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.MusicGroupClassGroupDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.MusicGroupCourseScheduleDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.RemainCourseTypeDurationDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.StudentAttendanceViewDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.StudentPayInfoDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.SuperClassGroupDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.TeacherClassGroupDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.TeacherClassHeadInfo;
|
|
|
|
+import com.ym.mec.biz.dal.dto.TeacherMusicClassInfoDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.TeacherVipClassInfoDto;
|
|
|
|
+import com.ym.mec.biz.dal.dto.UserMusicGroupQueryInfo;
|
|
|
|
+import com.ym.mec.biz.dal.entity.ClassGroup;
|
|
|
|
+import com.ym.mec.biz.dal.entity.ClassGroupRelation;
|
|
|
|
+import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
|
|
|
|
+import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
|
|
|
|
+import com.ym.mec.biz.dal.entity.CourseSchedule;
|
|
|
|
+import com.ym.mec.biz.dal.entity.CourseScheduleEvaluate;
|
|
|
|
+import com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment;
|
|
|
|
+import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
|
|
|
|
+import com.ym.mec.biz.dal.entity.CoursesGroup;
|
|
|
|
+import com.ym.mec.biz.dal.entity.Group;
|
|
|
|
+import com.ym.mec.biz.dal.entity.MusicGroup;
|
|
|
|
+import com.ym.mec.biz.dal.entity.MusicGroupBuildLog;
|
|
|
|
+import com.ym.mec.biz.dal.entity.PracticeGroup;
|
|
|
|
+import com.ym.mec.biz.dal.entity.StudentRegistration;
|
|
|
|
+import com.ym.mec.biz.dal.entity.Subject;
|
|
|
|
+import com.ym.mec.biz.dal.entity.SysConfig;
|
|
|
|
+import com.ym.mec.biz.dal.entity.Teacher;
|
|
|
|
+import com.ym.mec.biz.dal.entity.TeacherDefaultMusicGroupSalary;
|
|
|
|
+import com.ym.mec.biz.dal.entity.VipGroup;
|
|
|
|
+import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
|
|
|
|
+import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
|
|
|
|
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
|
|
|
|
+import com.ym.mec.biz.dal.enums.GroupType;
|
|
|
|
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
|
|
|
|
+import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
|
|
|
|
+import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
|
|
|
|
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
|
|
|
|
+import com.ym.mec.biz.dal.enums.TeachTypeEnum;
|
|
|
|
+import com.ym.mec.biz.dal.enums.VipGroupStatusEnum;
|
|
|
|
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
|
|
|
|
+import com.ym.mec.biz.dal.page.ClassGroupQueryInfo;
|
|
|
|
+import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
|
|
|
|
+import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
|
|
|
|
+import com.ym.mec.biz.dal.page.StudentPayLogQueryInfo;
|
|
|
|
+import com.ym.mec.biz.dal.page.TeacherMusicClassQueryInfo;
|
|
|
|
+import com.ym.mec.biz.dal.page.VipClassQueryInfo;
|
|
|
|
+import com.ym.mec.biz.dal.page.queryMusicGroupCourseScheduleQueryInfo;
|
|
|
|
+import com.ym.mec.biz.service.ClassGroupRelationService;
|
|
|
|
+import com.ym.mec.biz.service.ClassGroupService;
|
|
|
|
+import com.ym.mec.biz.service.ClassGroupTeacherMapperService;
|
|
|
|
+import com.ym.mec.biz.service.CourseScheduleService;
|
|
|
|
+import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
|
|
|
|
+import com.ym.mec.biz.service.CourseScheduleTeacherSalaryService;
|
|
|
|
+import com.ym.mec.biz.service.StudentRegistrationService;
|
|
|
|
+import com.ym.mec.biz.service.SubjectService;
|
|
|
|
+import com.ym.mec.biz.service.SysConfigService;
|
|
|
|
+import com.ym.mec.biz.service.TeacherDefaultMusicGroupSalaryService;
|
|
import com.ym.mec.common.constant.CommonConstants;
|
|
import com.ym.mec.common.constant.CommonConstants;
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
import com.ym.mec.common.entity.ImGroupMember;
|
|
import com.ym.mec.common.entity.ImGroupMember;
|
|
@@ -26,21 +140,6 @@ import com.ym.mec.util.collection.MapUtil;
|
|
import com.ym.mec.util.date.DateConvertor;
|
|
import com.ym.mec.util.date.DateConvertor;
|
|
import com.ym.mec.util.date.DateUtil;
|
|
import com.ym.mec.util.date.DateUtil;
|
|
|
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
|
-import org.springframework.transaction.annotation.Propagation;
|
|
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
|
-import org.springframework.util.CollectionUtils;
|
|
|
|
-
|
|
|
|
-import java.math.BigDecimal;
|
|
|
|
-import java.time.*;
|
|
|
|
-import java.time.format.DateTimeFormatter;
|
|
|
|
-import java.util.*;
|
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
-
|
|
|
|
-import static com.ym.mec.biz.dal.enums.GroupType.*;
|
|
|
|
-
|
|
|
|
@Service
|
|
@Service
|
|
public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup> implements ClassGroupService {
|
|
public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup> implements ClassGroupService {
|
|
|
|
|
|
@@ -1032,6 +1131,93 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
+ public boolean addStudentToClassGroupAndCourseArranging(Integer studentId, String classGroupIdListStr) {
|
|
|
|
+
|
|
|
|
+ List<ClassGroup> classGroupList = classGroupDao.findClassGroupByIds(classGroupIdListStr);
|
|
|
|
+ if(classGroupList == null || classGroupList.size() == 0){
|
|
|
|
+ throw new BizException("班级查询失败");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Date date = new Date();
|
|
|
|
+ List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<CourseScheduleStudentPayment>();
|
|
|
|
+
|
|
|
|
+ for(ClassGroup classGroup : classGroupList){
|
|
|
|
+ //1、增加班级人数
|
|
|
|
+ classGroupDao.addStudentNum(classGroup);
|
|
|
|
+
|
|
|
|
+ //2、插入关联关系
|
|
|
|
+ ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper();
|
|
|
|
+ classGroupStudentMapper.setMusicGroupId(classGroup.getMusicGroupId());
|
|
|
|
+ classGroupStudentMapper.setClassGroupId(classGroup.getId());
|
|
|
|
+ classGroupStudentMapper.setUserId(studentId);
|
|
|
|
+ classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
|
|
|
|
+ classGroupStudentMapper.setGroupType(classGroup.getGroupType());
|
|
|
|
+ classGroupStudentMapper.setCreateTime(date);
|
|
|
|
+ classGroupStudentMapperDao.insert(classGroupStudentMapper);
|
|
|
|
+
|
|
|
|
+ //3、学生加入级未开始课程
|
|
|
|
+ List<CourseSchedule> courseScheduleList = courseScheduleService.findNoStartCoursesByClassGroupId(classGroup.getId());
|
|
|
|
+ for (CourseSchedule courseSchedule : courseScheduleList) {
|
|
|
|
+ CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
|
|
|
|
+ courseScheduleStudentPayment.setGroupType(classGroup.getGroupType());
|
|
|
|
+ courseScheduleStudentPayment.setMusicGroupId(classGroup.getMusicGroupId());
|
|
|
|
+ courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
|
|
|
|
+ courseScheduleStudentPayment.setUserId(studentId);
|
|
|
|
+ courseScheduleStudentPayment.setClassGroupId(classGroup.getId());
|
|
|
|
+ courseScheduleStudentPayment.setCreateTime(date);
|
|
|
|
+ courseScheduleStudentPayment.setUpdateTime(date);
|
|
|
|
+ courseScheduleStudentPayments.add(courseScheduleStudentPayment);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ List<Long> courseScheduleIds = courseScheduleList.stream().map(CourseSchedule::getId).collect(Collectors.toList());
|
|
|
|
+ //4、调整线上基础技能班未上课课酬
|
|
|
|
+ List<ClassGroupTeacherMapper> classGroupTeachers = classGroupTeacherMapperService.getClassGroupTeachers(classGroup.getId());
|
|
|
|
+ int hasTeacherSalaryCount = 0;
|
|
|
|
+ if (courseScheduleIds.size() > 0) {
|
|
|
|
+ hasTeacherSalaryCount = courseScheduleTeacherSalaryDao.getHasTeacherSalaryCount(courseScheduleIds);
|
|
|
|
+ }
|
|
|
|
+ if (classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) && hasTeacherSalaryCount > 0) {
|
|
|
|
+ Integer studentNum = classGroup.getStudentNum() + 1;
|
|
|
|
+ List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
|
|
|
|
+ courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
|
|
|
|
+ for (CourseSchedule courseSchedule : courseScheduleList) {
|
|
|
|
+ for (ClassGroupTeacherMapper classGroupTeacher : classGroupTeachers) {
|
|
|
|
+ List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacher.getUserId(), ClassGroupTypeEnum.HIGH_ONLINE.getCode(), null);
|
|
|
|
+ Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
|
|
|
|
+ TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(courseSchedule.getType());
|
|
|
|
+ BigDecimal salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
|
|
|
|
+
|
|
|
|
+ CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
|
|
|
|
+ courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
|
|
|
|
+ courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
|
|
|
|
+ courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
|
|
|
|
+ courseScheduleTeacherSalary.setTeacherRole(classGroupTeacher.getTeacherRole());
|
|
|
|
+ courseScheduleTeacherSalary.setUserId(classGroupTeacher.getUserId());
|
|
|
|
+ courseScheduleTeacherSalary.setExpectSalary(salary);
|
|
|
|
+ courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
|
|
|
|
+ courseScheduleTeacherSalary.setCreateTime(date);
|
|
|
|
+ courseScheduleTeacherSalary.setUpdateTime(date);
|
|
|
|
+ courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //5、加入班级群组
|
|
|
|
+ ImGroupMember[] imGroupMembers = new ImGroupMember[]{new ImGroupMember(studentId.toString())};
|
|
|
|
+ imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (courseScheduleStudentPayments.size() != 0) {
|
|
|
|
+ courseScheduleStudentPaymentService.batchInsert(courseScheduleStudentPayments);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
public List<ClassGroup> findNoClassSubjects(String musicGroupId) {
|
|
public List<ClassGroup> findNoClassSubjects(String musicGroupId) {
|
|
return classGroupDao.findNoClassSubjects(musicGroupId);
|
|
return classGroupDao.findNoClassSubjects(musicGroupId);
|
|
}
|
|
}
|