|
@@ -110,8 +110,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
@Autowired
|
|
|
private ClassGroupStudentMapperDao classGroupStudentMapperDao;
|
|
|
@Autowired
|
|
|
- private CourseScheduleRewardsRulesService courseScheduleRewardsRulesService;
|
|
|
- @Autowired
|
|
|
private SysConfigDao sysConfigDao;
|
|
|
@Autowired
|
|
|
private SysUserCashAccountDetailService sysUserCashAccountDetailService;
|
|
@@ -1121,412 +1119,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
- public HttpResponseResult createActivityVipGroup1(VipGroupApplyDto vipGroup) {
|
|
|
- VipGroupApplyBaseInfoDto applyBaseInfo = vipGroup.getVipGroupApplyBaseInfo();
|
|
|
- if (applyBaseInfo.getVipGroupActivityId() == null) {
|
|
|
- throw new BizException("请选择活动");
|
|
|
- }
|
|
|
- VipGroupActivity activity = vipGroupActivityDao.get(applyBaseInfo.getVipGroupActivityId());
|
|
|
- if (Objects.isNull(activity)) {
|
|
|
- throw new BizException("活动信息不存在");
|
|
|
- }
|
|
|
- if (Objects.isNull(applyBaseInfo.getUserId())) {
|
|
|
- throw new BizException("请选择指导老师");
|
|
|
- }
|
|
|
-
|
|
|
- if (vipGroup.getCourseSchedules().size() != (applyBaseInfo.getOfflineClassesNum() + applyBaseInfo.getOnlineClassesNum())) {
|
|
|
- throw new BizException("建课失败,当前课程存在未排课课程,请调整相关设置");
|
|
|
- }
|
|
|
-
|
|
|
- Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroup;
|
|
|
- try {
|
|
|
- courseScheduleGroup = vipGroup.getCourseSchedules().stream().collect(Collectors.groupingBy(CourseSchedule::getTeachMode));
|
|
|
- } catch (Exception e) {
|
|
|
- throw new BizException("教学模式错误");
|
|
|
- }
|
|
|
-
|
|
|
- if (StringUtils.isBlank(applyBaseInfo.getSubjectIdList())) {
|
|
|
- throw new BizException("请选择声部");
|
|
|
- }
|
|
|
- if (vipGroup.getGiveFlag()) {
|
|
|
- applyBaseInfo.setVipGroupCategoryId(Integer.parseInt(activity.getGiveCategoryId()));
|
|
|
- } else {
|
|
|
- applyBaseInfo.setVipGroupCategoryId(Integer.parseInt(activity.getVipGroupCategoryIdList()));
|
|
|
- }
|
|
|
-
|
|
|
- if ((Objects.isNull(courseScheduleGroup.get(TeachModeEnum.OFFLINE)) && applyBaseInfo.getOfflineClassesNum() != 0)
|
|
|
- || (!Objects.isNull(courseScheduleGroup.get(TeachModeEnum.OFFLINE)) && (courseScheduleGroup.get(TeachModeEnum.OFFLINE).size() < applyBaseInfo.getOfflineClassesNum()))) {
|
|
|
- throw new BizException("线下课课时数量安排有误");
|
|
|
- }
|
|
|
-
|
|
|
- if ((Objects.isNull(courseScheduleGroup.get(TeachModeEnum.ONLINE)) && applyBaseInfo.getOnlineClassesNum() != 0)
|
|
|
- || (!Objects.isNull(courseScheduleGroup.get(TeachModeEnum.ONLINE)) && (courseScheduleGroup.get(TeachModeEnum.ONLINE).size() < applyBaseInfo.getOnlineClassesNum()))) {
|
|
|
- throw new BizException("线上课课时数量安排有误");
|
|
|
- }
|
|
|
- //校验线上课学员上限
|
|
|
- if (applyBaseInfo.getOnlineClassesNum() > 0) {
|
|
|
- courseScheduleService.checkOnlineCategory(applyBaseInfo.getStudentNum());
|
|
|
- }
|
|
|
-
|
|
|
- if (applyBaseInfo.getOfflineClassesNum() > 0 && Objects.isNull(applyBaseInfo.getTeacherSchoolId())) {
|
|
|
- throw new BizException("请设置教学点");
|
|
|
- }
|
|
|
-
|
|
|
- String studentIds = applyBaseInfo.getStudentIdList();
|
|
|
- if (StringUtils.isBlank(studentIds)) {
|
|
|
- throw new BizException("请选择学员");
|
|
|
- }
|
|
|
- VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(applyBaseInfo.getVipGroupCategoryId());
|
|
|
- if (Objects.isNull(vipGroupCategory)) {
|
|
|
- throw new BizException("课程形式不存在");
|
|
|
- }
|
|
|
- Boolean giveFlag = vipGroup.getGiveFlag();
|
|
|
- List<Integer> studentIdList = Arrays.stream(studentIds.split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
|
|
|
- if (!vipGroupCategory.getMusicTheory()) {
|
|
|
- if (studentIdList.size() != vipGroupCategory.getStudentNum()) {
|
|
|
- throw new BizException("学员数量异常");
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (studentIdList.size() > vipGroupCategory.getStudentNum()) {
|
|
|
- throw new BizException("{}课程最多支持{}人", vipGroupCategory.getName(), vipGroupCategory.getStudentNum());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //获取学员排课资格
|
|
|
- List<ActivityUserMapper> activityUserMappers = activityUserMapperService.findByStudentIdList(activity.getId(), studentIds, giveFlag ? "GIVE_VIP" : "VIP");
|
|
|
- if (studentIdList.size() != activityUserMappers.size()) {
|
|
|
- throw new BizException("所选学员暂无排课资格");
|
|
|
- }
|
|
|
-
|
|
|
- Date now = new Date();
|
|
|
-
|
|
|
- if (Objects.isNull(applyBaseInfo.getOfflineClassesUnitPrice()) && Objects.isNull(applyBaseInfo.getOnlineClassesUnitPrice())) {
|
|
|
- throw new BizException("请设置课程单价");
|
|
|
- }
|
|
|
-
|
|
|
- if (StringUtils.isBlank(applyBaseInfo.getStudentIdList())) {
|
|
|
- throw new BizException("请选择学员");
|
|
|
- }
|
|
|
-
|
|
|
- Integer totalClassTimes = applyBaseInfo.getOnlineClassesNum() + applyBaseInfo.getOfflineClassesNum();
|
|
|
- //获取第一节课
|
|
|
- CourseSchedule firstCourseSchedule = vipGroup.getCourseSchedules().stream().min(Comparator.comparing(CourseSchedule::getStartClassTime)).get();
|
|
|
- //获取最后一节课
|
|
|
- CourseSchedule latestCourseSchedule = vipGroup.getCourseSchedules().stream().max(Comparator.comparing(CourseSchedule::getEndClassTime)).get();
|
|
|
-
|
|
|
- if (firstCourseSchedule.getStartClassTime().before(now)) {
|
|
|
- throw new BizException("开课时间不能小于当前时间");
|
|
|
- }
|
|
|
-
|
|
|
- applyBaseInfo.setRegistrationStartTime(now);
|
|
|
- applyBaseInfo.setPaymentExpireDate(now);
|
|
|
-
|
|
|
- if (applyBaseInfo.getRegistrationStartTime().after(applyBaseInfo.getPaymentExpireDate())) {
|
|
|
- throw new BizException("报名开始时间必须在报名截至时间之前");
|
|
|
- }
|
|
|
-
|
|
|
- List<Integer> canBuyStudentIds = Arrays.stream(applyBaseInfo.getStudentIdList().split(",")).map(e -> Integer.valueOf(e)).collect(Collectors.toList());
|
|
|
- List<VipGroupStudentCoursePrice> vscps = vipGroup.getVipGroupApplyBaseInfo().getVipGroupStudentCoursePrices();
|
|
|
-
|
|
|
- //判断课程安排是否超出范围
|
|
|
- if ((Objects.nonNull(activity.getCoursesEndTime()) || Objects.nonNull(activity.getCoursesStartTime()))) {
|
|
|
- if (latestCourseSchedule.getEndClassTime().after(activity.getCoursesEndTime())
|
|
|
- || firstCourseSchedule.getStartClassTime().before(activity.getCoursesStartTime())) {
|
|
|
- throw new BizException("课时安排时间超出范围!");
|
|
|
- }
|
|
|
- } else {
|
|
|
- VipGroupDefaultClassesCycle vipGroupDefaultClassesCycle = vipGroupDefaultClassesCycleDao.findByOrganAndClassTimes(totalClassTimes, TenantContextHolder.getTenantId());
|
|
|
-
|
|
|
- if (vipGroupDefaultClassesCycle != null) {
|
|
|
- int month = DateUtil.monthsBetween(firstCourseSchedule.getStartClassTime(), latestCourseSchedule.getEndClassTime());
|
|
|
- if (month > vipGroupDefaultClassesCycle.getMonth()) {
|
|
|
- throw new BizException("课时安排时间超出范围!");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (giveFlag) {
|
|
|
- if ((applyBaseInfo.getOfflineClassesNum() + applyBaseInfo.getOnlineClassesNum()) != activity.getGiveCourseNum()) {
|
|
|
- throw new BizException("该活动赠送课时数为{}节", activity.getGiveCourseNum());
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (Objects.nonNull(activity.getMinCourseNum()) && activity.getMinCourseNum() != -1 && Objects.nonNull(activity.getMaxCourseNum())
|
|
|
- && activity.getMaxCourseNum() != -1) {
|
|
|
- Integer requestCourseNum = applyBaseInfo.getOnlineClassesNum() + applyBaseInfo.getOfflineClassesNum();
|
|
|
- if (requestCourseNum.compareTo(activity.getMinCourseNum()) < 0 || requestCourseNum.compareTo(activity.getMaxCourseNum()) > 0) {
|
|
|
- throw new BizException("该活动课时数为{}节~{}节", activity.getMinCourseNum(), activity.getMaxCourseNum());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- int repeatVipGroups = vipGroupDao.countUserRepeatVipGroupInCourseStartEndTime(applyBaseInfo.getUserId(), firstCourseSchedule.getStartClassTime(), latestCourseSchedule.getEndClassTime());
|
|
|
- if (repeatVipGroups > 0) {
|
|
|
- SysUser sysUser = sysUserFeignService.queryUserById(applyBaseInfo.getUserId());
|
|
|
- throw new BizException("{}课程时间冲突({}-{})", sysUser.getRealName(), DateUtil.dateToString(firstCourseSchedule.getStartClassTime(), "yyyy-MM-dd HH:mm:ss"), DateUtil.dateToString(latestCourseSchedule.getEndClassTime(), "HH:mm:ss"));
|
|
|
- }
|
|
|
-
|
|
|
- List<String> studentNames = studentDao.getStudentNames(canBuyStudentIds);
|
|
|
-
|
|
|
- //生成vip课信息
|
|
|
- List<String> bySubIds = subjectDao.findBySubIds(applyBaseInfo.getSubjectIdList());
|
|
|
- StringBuffer className = new StringBuffer();
|
|
|
- if (Objects.isNull(vipGroupCategory.getMusicTheory()) || !vipGroupCategory.getMusicTheory()) {
|
|
|
- className.append(StringUtils.join(bySubIds, ","));
|
|
|
- className.append(vipGroupCategory.getName());
|
|
|
- } else {
|
|
|
- className.append("乐理课•");
|
|
|
- }
|
|
|
- className.append(StringUtils.join(studentNames, ","));
|
|
|
- applyBaseInfo.setName(className.toString());
|
|
|
-
|
|
|
- applyBaseInfo.setAuditStatus(AuditStatusEnum.PASS);
|
|
|
- applyBaseInfo.setStatus(VipGroupStatusEnum.PROGRESS);
|
|
|
-
|
|
|
- if (CollectionUtils.isEmpty(vscps)) {
|
|
|
- vscps = new ArrayList<>();
|
|
|
- for (Integer canBuyStudentId : canBuyStudentIds) {
|
|
|
- vscps.add(new VipGroupStudentCoursePrice(canBuyStudentId, applyBaseInfo.getOnlineClassesUnitPrice(), applyBaseInfo.getOfflineClassesUnitPrice(), applyBaseInfo.getTotalPrice()));
|
|
|
- }
|
|
|
- }
|
|
|
- Teacher teacher = teacherService.get(applyBaseInfo.getUserId());
|
|
|
- if (Objects.isNull(teacher)) {
|
|
|
- throw new BizException("教师不存在");
|
|
|
- }
|
|
|
-
|
|
|
- //开课时间为排课的第一节课的开始时间
|
|
|
- applyBaseInfo.setCourseStartDate(firstCourseSchedule.getStartClassTime());
|
|
|
- //课程结束时间为排课的最后一节课的结束时间
|
|
|
- applyBaseInfo.setCoursesExpireDate(latestCourseSchedule.getEndClassTime());
|
|
|
- applyBaseInfo.setStudentNum(studentIdList.size());
|
|
|
- applyBaseInfo.setPaymentExpireDate(DateUtil.getLastSecondWithDay(applyBaseInfo.getPaymentExpireDate()));
|
|
|
-
|
|
|
- vipGroupDao.insert(applyBaseInfo);
|
|
|
-
|
|
|
- //消耗排课资格
|
|
|
- List<Integer> activityUserMapperIds = activityUserMappers.stream().map(e -> e.getId()).collect(Collectors.toList());
|
|
|
- int use = activityUserMapperService.use(StringUtils.join(activityUserMapperIds, ","), studentIds, giveFlag ? "GIVE_VIP" : "VIP", applyBaseInfo.getId());
|
|
|
- if (use != studentIdList.size()) {
|
|
|
- throw new BizException("VIP课创建失败,请联系管理员");
|
|
|
- }
|
|
|
- //是否消耗课程余额
|
|
|
- if (activity.isPayToBalance() && !giveFlag) {
|
|
|
- for (ActivityUserMapper userMapper : activityUserMappers) {
|
|
|
- sysUserCashAccountService.appendCourseBalance(userMapper.getUserId(), userMapper.getActualPrice().negate(),
|
|
|
- PlatformCashAccountDetailTypeEnum.PAY_FEE, "活动排课消耗课程余额");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- vscps.forEach(e -> e.setVipGroupId(applyBaseInfo.getId()));
|
|
|
- vipGroupStudentCoursePriceDao.batchInsert(vscps);
|
|
|
-
|
|
|
- vipGroup.getVipGroupApplyBaseInfo().setId(applyBaseInfo.getId());
|
|
|
-
|
|
|
- //创建班级信息
|
|
|
- ClassGroup classGroup = new ClassGroup();
|
|
|
- classGroup.setSubjectIdList(applyBaseInfo.getSubjectIdList());
|
|
|
- classGroup.setExpectStudentNum(vipGroupCategory.getStudentNum());
|
|
|
- classGroup.setStudentNum(studentIdList.size());
|
|
|
- classGroup.setName(applyBaseInfo.getName());
|
|
|
- classGroup.setTotalClassTimes(totalClassTimes);
|
|
|
- classGroup.setType(ClassGroupTypeEnum.VIP);
|
|
|
- classGroup.setDelFlag(0);
|
|
|
- classGroup.setGroupType(GroupType.VIP);
|
|
|
- classGroup.setMusicGroupId(applyBaseInfo.getId().toString());
|
|
|
- classGroup.setCreateTime(now);
|
|
|
- classGroup.setUpdateTime(now);
|
|
|
- classGroupDao.insert(classGroup);
|
|
|
-
|
|
|
- //班级学员关联记录
|
|
|
- List<ClassGroupStudentMapper> classGroupStudentMapperList = new ArrayList<>();
|
|
|
- for (Integer studentId : studentIdList) {
|
|
|
- ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper();
|
|
|
- classGroupStudentMapper.setMusicGroupId(applyBaseInfo.getId().toString());
|
|
|
- classGroupStudentMapper.setClassGroupId(classGroup.getId());
|
|
|
- classGroupStudentMapper.setUserId(studentId);
|
|
|
- classGroupStudentMapper.setCreateTime(now);
|
|
|
- classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
|
|
|
- classGroupStudentMapper.setGroupType(GroupType.VIP);
|
|
|
- classGroupStudentMapperList.add(classGroupStudentMapper);
|
|
|
- }
|
|
|
- classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMapperList);
|
|
|
-
|
|
|
- //计算课程相关费用信息
|
|
|
- Map<String, BigDecimal> costInfo = countVipGroupPredictFee1(applyBaseInfo, applyBaseInfo.getUserId(), null);
|
|
|
- if (vipGroup.getGiveFlag()) {
|
|
|
- applyBaseInfo.setOfflineTeacherSalary(costInfo.get("giveOfflineTeacherSalary"));
|
|
|
- } else {
|
|
|
- applyBaseInfo.setOfflineTeacherSalary(costInfo.get("offlineTeacherSalary"));
|
|
|
- }
|
|
|
- applyBaseInfo.setTotalPrice(costInfo.get("totalPrice"));
|
|
|
-
|
|
|
- //创建班级老师关联记录
|
|
|
- ClassGroupTeacherMapper classGroupTeacherMapper = new ClassGroupTeacherMapper();
|
|
|
- classGroupTeacherMapper.setMusicGroupId(applyBaseInfo.getId().toString());
|
|
|
- classGroupTeacherMapper.setClassGroupId(classGroup.getId());
|
|
|
- classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.BISHOP);
|
|
|
- classGroupTeacherMapper.setUserId(applyBaseInfo.getUserId());
|
|
|
- classGroupTeacherMapper.setGroupType(GroupType.VIP);
|
|
|
- classGroupTeacherMapper.setCreateTime(now);
|
|
|
- classGroupTeacherMapper.setUpdateTime(now);
|
|
|
- classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
|
|
|
-
|
|
|
- //创建班级与老师课酬记录
|
|
|
- ClassGroupTeacherSalary classGroupTeacherSalary = new ClassGroupTeacherSalary();
|
|
|
- classGroupTeacherSalary.setMusicGroupId(applyBaseInfo.getId().toString());
|
|
|
- classGroupTeacherSalary.setClassGroupId(classGroup.getId());
|
|
|
- classGroupTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
|
|
|
- classGroupTeacherSalary.setUserId(applyBaseInfo.getUserId());
|
|
|
- classGroupTeacherSalary.setSalary(applyBaseInfo.getOfflineTeacherSalary());
|
|
|
- classGroupTeacherSalary.setOnlineClassesSalary(applyBaseInfo.getOfflineTeacherSalary());
|
|
|
- classGroupTeacherSalary.setGroupType(GroupType.VIP);
|
|
|
- classGroupTeacherSalary.setCreateTime(now);
|
|
|
- classGroupTeacherSalary.setUpdateTime(now);
|
|
|
- classGroupTeacherSalaryDao.insert(classGroupTeacherSalary);
|
|
|
-
|
|
|
- //创建课程
|
|
|
- List<CourseSchedule> courseSchedules = vipGroup.getCourseSchedules();
|
|
|
- for (CourseSchedule courseSchedule : courseSchedules) {
|
|
|
- courseSchedule.setGroupType(GroupType.VIP);
|
|
|
- courseSchedule.setMusicGroupId(applyBaseInfo.getId().toString());
|
|
|
- if (courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)) {
|
|
|
- courseSchedule.setSchoolId(vipGroup.getVipGroupApplyBaseInfo().getTeacherSchoolId());
|
|
|
- }
|
|
|
- courseSchedule.setTeacherId(applyBaseInfo.getUserId());
|
|
|
- courseSchedule.setActualTeacherId(applyBaseInfo.getUserId());
|
|
|
- courseSchedule.setStatus(CourseStatusEnum.NOT_START);
|
|
|
- courseSchedule.setType(CourseSchedule.CourseScheduleType.VIP);
|
|
|
- courseSchedule.setClassGroupId(classGroup.getId());
|
|
|
- courseSchedule.setName(applyBaseInfo.getName());
|
|
|
- courseSchedule.setOrganId(applyBaseInfo.getOrganId());
|
|
|
- }
|
|
|
- courseScheduleService.batchAddCourseSchedule(courseSchedules);
|
|
|
-
|
|
|
- //创建老师单节课课酬信息
|
|
|
- List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<>();
|
|
|
- //课程信息调整
|
|
|
- for (CourseSchedule courseSchedule : courseSchedules) {
|
|
|
- courseSchedule.setGroupType(GroupType.VIP);
|
|
|
- courseSchedule.setMusicGroupId(applyBaseInfo.getId().toString());
|
|
|
- if (courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)) {
|
|
|
- courseSchedule.setSchoolId(vipGroup.getVipGroupApplyBaseInfo().getTeacherSchoolId());
|
|
|
- }
|
|
|
- courseSchedule.setTeacherId(applyBaseInfo.getUserId());
|
|
|
- courseSchedule.setActualTeacherId(applyBaseInfo.getUserId());
|
|
|
- courseSchedule.setStatus(CourseStatusEnum.NOT_START);
|
|
|
- courseSchedule.setType(CourseSchedule.CourseScheduleType.VIP);
|
|
|
- courseSchedule.setClassGroupId(classGroup.getId());
|
|
|
- courseSchedule.setName(applyBaseInfo.getName());
|
|
|
- courseSchedule.setOrganId(applyBaseInfo.getOrganId());
|
|
|
-
|
|
|
- //创建教师课程薪水记录
|
|
|
- CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
|
|
|
- courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
|
|
|
- courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
|
|
|
- courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
|
|
|
- courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
|
|
|
- courseScheduleTeacherSalary.setUserId(courseSchedule.getActualTeacherId().intValue());
|
|
|
- courseScheduleTeacherSalary.setClassGroupId(courseSchedule.getClassGroupId());
|
|
|
- courseScheduleTeacherSalary.setExpectSalary(classGroupTeacherSalary.getSalary());
|
|
|
- courseScheduleTeacherSalary.setActualSalary(null);
|
|
|
- courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
|
|
|
- }
|
|
|
- if (courseScheduleTeacherSalaries.size() > 0) {
|
|
|
- courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaries);
|
|
|
- }
|
|
|
-
|
|
|
- applyBaseInfo.setCourseSchedulesJson(JSON.toJSONString(vipGroup.getCourseSchedules()));
|
|
|
- vipGroupDao.update(applyBaseInfo);
|
|
|
-
|
|
|
- List<ClassGroupStudentMapper> classGroupStudents = classGroupStudentMapperDao.findByClassGroup(classGroup.getId());
|
|
|
-
|
|
|
- Map<Integer, String> userRoleMap = new HashMap<>();
|
|
|
- if (Objects.nonNull(applyBaseInfo.getEducationalTeacherId())) {
|
|
|
- userRoleMap.put(applyBaseInfo.getEducationalTeacherId(), "乐团主管");
|
|
|
- }
|
|
|
- userRoleMap.put(applyBaseInfo.getUserId(), "指导老师");
|
|
|
-// StudentPaymentOrder studentPaymentOrder = null;
|
|
|
- VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroup(applyBaseInfo.getId());
|
|
|
- if (Objects.isNull(vipGroupDefaultClassesUnitPrice)) {
|
|
|
- throw new BizException("课程单价设置错误");
|
|
|
- }
|
|
|
-// if(!vipGroup.getGiveFlag()){
|
|
|
-// studentPaymentOrder = studentPaymentOrderDao.get(activityUserMappers.get(0).getPaymentOrderId());
|
|
|
-// studentPaymentOrder.setMusicGroupId(applyBaseInfo.getId().toString());
|
|
|
-// studentPaymentOrder.setClassGroupId(classGroup.getId());
|
|
|
-// studentPaymentOrderDao.update(studentPaymentOrder);
|
|
|
-// }
|
|
|
- //生成学生单课缴费信息
|
|
|
- List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
|
|
|
- Map<Integer, List<ActivityUserMapper>> collect = activityUserMappers.stream().collect(Collectors.groupingBy(ActivityUserMapper::getUserId));
|
|
|
- for (ClassGroupStudentMapper classGroupStudent : classGroupStudents) {
|
|
|
- if (vipGroup.getGiveFlag()) {
|
|
|
- for (CourseSchedule courseSchedule : courseSchedules) {
|
|
|
- CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
|
|
|
- courseScheduleStudentPayment.setUserId(classGroupStudent.getUserId());
|
|
|
- courseScheduleStudentPayment.setGroupType(courseSchedule.getGroupType());
|
|
|
- courseScheduleStudentPayment.setMusicGroupId(courseSchedule.getMusicGroupId());
|
|
|
- courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
|
|
|
- courseScheduleStudentPayment.setClassGroupId(courseSchedule.getClassGroupId());
|
|
|
- courseScheduleStudentPayment.setExpectPrice(BigDecimal.ZERO);
|
|
|
- courseScheduleStudentPayment.setOriginalPrice(TeachModeEnum.ONLINE.equals(courseSchedule.getTeachMode()) ? vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice() : vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice());
|
|
|
- courseScheduleStudentPayment.setActualPrice(BigDecimal.ZERO);
|
|
|
- courseScheduleStudentPayments.add(courseScheduleStudentPayment);
|
|
|
- }
|
|
|
- } else {
|
|
|
- ActivityUserMapper activityUserMapper = collect.get(classGroupStudent.getUserId()).get(0);
|
|
|
- //实际支付金额,去除优惠券
|
|
|
- BigDecimal totalAmount = activityUserMapper.getActualPrice();
|
|
|
- BigDecimal singleAmount = totalAmount.divide(new BigDecimal(courseSchedules.size()), ROUND_DOWN);
|
|
|
- BigDecimal firstSingleAmount = totalAmount.subtract(singleAmount.multiply(new BigDecimal(courseSchedules.size()))).add(singleAmount);
|
|
|
- for (int i = 0; i < courseSchedules.size(); i++) {
|
|
|
- CourseSchedule courseSchedule = courseSchedules.get(i);
|
|
|
- CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
|
|
|
- courseScheduleStudentPayment.setUserId(classGroupStudent.getUserId());
|
|
|
- courseScheduleStudentPayment.setGroupType(courseSchedule.getGroupType());
|
|
|
- courseScheduleStudentPayment.setMusicGroupId(courseSchedule.getMusicGroupId());
|
|
|
- courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
|
|
|
- courseScheduleStudentPayment.setClassGroupId(courseSchedule.getClassGroupId());
|
|
|
- if (i == 0) {
|
|
|
- courseScheduleStudentPayment.setExpectPrice(firstSingleAmount);
|
|
|
- } else {
|
|
|
- courseScheduleStudentPayment.setExpectPrice(singleAmount);
|
|
|
- }
|
|
|
- courseScheduleStudentPayment.setOriginalPrice(TeachModeEnum.ONLINE.equals(courseSchedule.getTeachMode()) ? vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice() : vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice());
|
|
|
- courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice());
|
|
|
- courseScheduleStudentPayments.add(courseScheduleStudentPayment);
|
|
|
- }
|
|
|
- }
|
|
|
- userRoleMap.put(classGroupStudent.getUserId(), null);
|
|
|
- }
|
|
|
- if (courseScheduleStudentPayments.size() > 0) {
|
|
|
- courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
|
|
|
- studentDao.updateStudentServiceTag(null, studentIdList, YesOrNoEnum.YES.getCode());
|
|
|
- }
|
|
|
-// courseScheduleService.checkNewCourseSchedules(courseSchedules, false,false);
|
|
|
- try {
|
|
|
- imGroupService.create(classGroup.getId().toString(), null, classGroup.getName(), classGroup.getName(),
|
|
|
- applyBaseInfo.getName(), null, null, GroupType.VIP.getCode(), ImGroup.GroupTypeEnum.VIP);
|
|
|
- imGroupMemberService.join(classGroup.getId().toString(), userRoleMap);
|
|
|
- imUserFriendService.refreshGroupImUserFriend(classGroup.getMusicGroupId(), classGroup.getGroupType());
|
|
|
-// SysUser sysUser = teacherDao.getUser(applyBaseInfo.getUserId());
|
|
|
-// //发送推送
|
|
|
-// Map<Integer,String> map = new HashMap<>(1);
|
|
|
-// map.put(applyBaseInfo.getUserId(),sysUser.getPhone());
|
|
|
-// sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,MessageTypeEnum.CHILDREN_DAY_VIP_COURSE_TEACHER_PUSH,
|
|
|
-// map,null,0,"","TEACHER", StringUtils.join(studentNames, ","),applyBaseInfo.getName());
|
|
|
-//
|
|
|
-// Map<Integer,String> studentIdStrMap = new HashMap<>(1);
|
|
|
-// studentIdList.forEach(id->studentIdStrMap.put(id, id.toString()));
|
|
|
-// sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.CHILDREN_DAY_VIP_COURSE_STUDENT_PUSH, studentIdStrMap, null, 0, "","STUDENT",
|
|
|
-// applyBaseInfo.getName());
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- LOGGER.error("消息发送失败:{}", e);
|
|
|
- }
|
|
|
- return BaseController.succeed(applyBaseInfo.getAuditStatus().getCode());
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public HttpResponseResult importActivityVipGroup(String data) {
|
|
|
if (StringUtils.isBlank(data)) {
|
|
@@ -3016,11 +2608,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
}
|
|
|
}
|
|
|
//退还活动购买
|
|
|
- ActivityUserMapper activityUserMapper = activityUserMapperService.findByStudentId(vipGroup.getId(), studentId);
|
|
|
- HttpResponseResult result = groupClassService.quitActivityGive(activityUserMapper, returnFeeDto.getConfirmReturnActivityGive(), vipGroup.getId(), VIP);
|
|
|
- if (result.getCode() != 200) {
|
|
|
- return result;
|
|
|
- }
|
|
|
+// groupClassService.quitActivityGive(activityUserMapperService.findByStudentId(vipGroup.getId(), studentId));
|
|
|
|
|
|
if (classStudentMapperByUserIdAndClassGroupId.getStatus().equals(ClassGroupStudentStatusEnum.QUIT_SCHOOL)) {
|
|
|
classStudentMapperByUserIdAndClassGroupId.setStatus(ClassGroupStudentStatusEnum.QUIT);
|
|
@@ -3174,8 +2762,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
// }
|
|
|
}
|
|
|
//退还活动购买
|
|
|
- ActivityUserMapper activityUserMapper = activityUserMapperService.findByStudentId(vipGroup.getId(), studentId);
|
|
|
- HttpResponseResult result = groupClassService.quitActivityGive(activityUserMapper, returnFeeDto.getConfirmReturnActivityGive(), vipGroup.getId(), VIP);
|
|
|
+// ActivityUserMapper activityUserMapper = activityUserMapperService.findByStudentId(vipGroup.getId(), studentId);
|
|
|
+// HttpResponseResult result = groupClassService.quitActivityGive(activityUserMapper, returnFeeDto.getConfirmReturnActivityGive(), vipGroup.getId(), VIP);
|
|
|
|
|
|
if (classStudentMapperByUserIdAndClassGroupId.getStatus().equals(ClassGroupStudentStatusEnum.QUIT_SCHOOL)) {
|
|
|
classStudentMapperByUserIdAndClassGroupId.setStatus(ClassGroupStudentStatusEnum.QUIT);
|
|
@@ -3286,7 +2874,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
|
|
|
studentPauseInfoDao.insert(studentPauseInfo);
|
|
|
|
|
|
- sysUserCashAccountService.appendCourseBalance(studentId, surplusCourseFee, PlatformCashAccountDetailTypeEnum.REFUNDS, "学生休学剩余课时转化为课程余额");
|
|
|
+// sysUserCashAccountService.appendCourseBalance(studentId, surplusCourseFee, PlatformCashAccountDetailTypeEnum.REFUNDS, "学生休学剩余课时转化为课程余额");
|
|
|
+
|
|
|
classStudentMapperByUserIdAndClassGroupId.setStatus(ClassGroupStudentStatusEnum.QUIT_SCHOOL);
|
|
|
classGroupStudentMapperDao.update(classStudentMapperByUserIdAndClassGroupId);
|
|
|
|
|
@@ -3294,8 +2883,11 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
studentAttendanceDao.deleteByCourseAndUser(courseScheduleIds, studentId);
|
|
|
}
|
|
|
|
|
|
- List<Integer> studentPaymentIds = courseScheduleStudentPaymentDao.findNotStartCourseStudentPaymentIdsWithClassGroupAndStudent(classGroup.getId(), studentId);
|
|
|
- if (!CollectionUtils.isEmpty(studentPaymentIds)) {
|
|
|
+ List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentDao.findNotStartCourseStudentPaymentsWithClassGroupAndStudent(classGroup.getId(), studentId);
|
|
|
+ if (!CollectionUtils.isEmpty(studentPayments)) {
|
|
|
+ //学员休学转化排课资格
|
|
|
+ activityUserMapperService.subCourseConvert(studentPayments,studentId,vipGroup.getSingleClassMinutes(),vipGroup.getVipGroupCategoryId());
|
|
|
+ List<Integer> studentPaymentIds = studentPayments.stream().map(e -> e.getId().intValue()).collect(Collectors.toList());
|
|
|
courseScheduleStudentPaymentDao.batchDeleteWithID(studentPaymentIds);
|
|
|
}
|
|
|
|
|
@@ -3552,31 +3144,31 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
BigDecimal bigDecimal;
|
|
|
List<StudentCourseInfoDto> userCourseInfos = new ArrayList<>();
|
|
|
//是否关联活动
|
|
|
- if (vipGroup.getVipGroupActivityId() != null) {
|
|
|
- ActivityUserMapper activityUserMapper = activityUserMapperService.findByStudentId(vipGroupId, studentId);
|
|
|
- if (activityUserMapper != null && !activityUserMapper.getReturnFee()) {
|
|
|
- if (Objects.nonNull(activityUserMapper.getVipGroupId())) {
|
|
|
- VipGroup group = vipGroupDao.get(vipGroupId);
|
|
|
- vipGroupCategory = vipGroupCategoryService.get(group.getVipGroupCategoryId().intValue());
|
|
|
- userCourseInfos.addAll(courseScheduleDao.findUserCourseInfos(GroupType.VIP, activityUserMapper.getVipGroupId(), studentId, null));
|
|
|
- }
|
|
|
- if (Objects.nonNull(activityUserMapper.getGiveVipGroupId())) {
|
|
|
- userCourseInfos.addAll(courseScheduleDao.findUserCourseInfos(GroupType.VIP, activityUserMapper.getGiveVipGroupId(), studentId, null));
|
|
|
- }
|
|
|
- if (Objects.nonNull(activityUserMapper.getPracticeGroupId())) {
|
|
|
- vipGroupCategory = vipGroupCategoryService.get(1);
|
|
|
- userCourseInfos.addAll(courseScheduleDao.findUserCourseInfos(GroupType.PRACTICE, activityUserMapper.getPracticeGroupId(), studentId, null));
|
|
|
- }
|
|
|
- if (Objects.nonNull(activityUserMapper.getGivePracticeGroupId())) {
|
|
|
- userCourseInfos.addAll(courseScheduleDao.findUserCourseInfos(GroupType.PRACTICE, activityUserMapper.getGivePracticeGroupId(), studentId, null));
|
|
|
- }
|
|
|
- userCourseInfos.removeAll(Collections.singleton(null));
|
|
|
- } else {
|
|
|
- userCourseInfos = courseScheduleDao.findUserCourseInfos(GroupType.VIP, vipGroupId.toString(), studentId, null);
|
|
|
- }
|
|
|
- } else {
|
|
|
- userCourseInfos = courseScheduleDao.findUserCourseInfos(GroupType.VIP, vipGroupId.toString(), studentId, null);
|
|
|
- }
|
|
|
+// if (vipGroup.getVipGroupActivityId() != null) {
|
|
|
+// ActivityUserMapper activityUserMapper = activityUserMapperService.findByStudentId(vipGroupId, studentId);
|
|
|
+// if (activityUserMapper != null && !activityUserMapper.getReturnFee()) {
|
|
|
+// if (Objects.nonNull(activityUserMapper.getVipGroupId())) {
|
|
|
+// VipGroup group = vipGroupDao.get(vipGroupId);
|
|
|
+// vipGroupCategory = vipGroupCategoryService.get(group.getVipGroupCategoryId().intValue());
|
|
|
+// userCourseInfos.addAll(courseScheduleDao.findUserCourseInfos(GroupType.VIP, activityUserMapper.getVipGroupId(), studentId, null));
|
|
|
+// }
|
|
|
+// if (Objects.nonNull(activityUserMapper.getGiveVipGroupId())) {
|
|
|
+// userCourseInfos.addAll(courseScheduleDao.findUserCourseInfos(GroupType.VIP, activityUserMapper.getGiveVipGroupId(), studentId, null));
|
|
|
+// }
|
|
|
+// if (Objects.nonNull(activityUserMapper.getPracticeGroupId())) {
|
|
|
+// vipGroupCategory = vipGroupCategoryService.get(1);
|
|
|
+// userCourseInfos.addAll(courseScheduleDao.findUserCourseInfos(GroupType.PRACTICE, activityUserMapper.getPracticeGroupId(), studentId, null));
|
|
|
+// }
|
|
|
+// if (Objects.nonNull(activityUserMapper.getGivePracticeGroupId())) {
|
|
|
+// userCourseInfos.addAll(courseScheduleDao.findUserCourseInfos(GroupType.PRACTICE, activityUserMapper.getGivePracticeGroupId(), studentId, null));
|
|
|
+// }
|
|
|
+// userCourseInfos.removeAll(Collections.singleton(null));
|
|
|
+// } else {
|
|
|
+// userCourseInfos = courseScheduleDao.findUserCourseInfos(GroupType.VIP, vipGroupId.toString(), studentId, null);
|
|
|
+// }
|
|
|
+// } else {
|
|
|
+// userCourseInfos = courseScheduleDao.findUserCourseInfos(GroupType.VIP, vipGroupId.toString(), studentId, null);
|
|
|
+// }
|
|
|
|
|
|
if (CollectionUtils.isEmpty(userCourseInfos) && vipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING)) {
|
|
|
StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.findByStudentVipGroup(vipGroupId, studentId, DealStatusEnum.SUCCESS.getCode());
|
|
@@ -3642,11 +3234,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public List<SurplusCourseFeeDto> getStudentSurplusCourseFee1(SurplusCourseFeeDto feeDto) {
|
|
|
- //获取所有关联的课程组
|
|
|
- return courseScheduleStudentPaymentDao.getAllAssociatedCourseGroups(feeDto);
|
|
|
- }
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
@@ -3670,11 +3257,11 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
if (studentApplyRefunds.getStatus() == StudentApplyRefundsStatus.DONE) {
|
|
|
//退还活动购买
|
|
|
|
|
|
- ActivityUserMapper activityUserMapper = activityUserMapperService.findByStudentId(vipGroup.getId(), studentPaymentOrder.getUserId());
|
|
|
- HttpResponseResult result = groupClassService.quitActivityGive(activityUserMapper, confirmReturnActivityGive, id, VIP);
|
|
|
- if (result.getCode() != 200) {
|
|
|
- return result;
|
|
|
- }
|
|
|
+// ActivityUserMapper activityUserMapper = activityUserMapperService.findByStudentId(vipGroup.getId(), studentPaymentOrder.getUserId());
|
|
|
+// HttpResponseResult result = groupClassService.quitActivityGive(activityUserMapper, confirmReturnActivityGive, id, VIP);
|
|
|
+// if (result.getCode() != 200) {
|
|
|
+// return result;
|
|
|
+// }
|
|
|
studentApplyRefunds.setActualAmount(amount);
|
|
|
} else {
|
|
|
studentApplyRefunds.setActualAmount(new BigDecimal(0));
|