|
@@ -1,23 +1,24 @@
|
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
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.*;
|
|
|
import com.ym.mec.biz.dal.entity.*;
|
|
|
-import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
|
|
|
-import com.ym.mec.biz.dal.enums.ReturnFeeEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.*;
|
|
|
import com.ym.mec.biz.dal.page.ActivityStudentQueryInfo;
|
|
|
import com.ym.mec.biz.dal.page.ActivityUserQueryInfo;
|
|
|
-import com.ym.mec.biz.service.ActivityUserMapperService;
|
|
|
-import com.ym.mec.biz.service.SysUserCashAccountLogService;
|
|
|
-import com.ym.mec.common.constant.CommonConstants;
|
|
|
+import com.ym.mec.biz.service.*;
|
|
|
+import com.ym.mec.common.controller.BaseController;
|
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
|
+import com.ym.mec.common.entity.HttpResponseResult;
|
|
|
import com.ym.mec.common.exception.BizException;
|
|
|
import com.ym.mec.common.page.PageInfo;
|
|
|
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.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -25,10 +26,12 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
-import static com.ym.mec.biz.dal.enums.GroupType.*;
|
|
|
+import static com.ym.mec.biz.dal.enums.GroupType.ACTIVITY;
|
|
|
+import static java.math.BigDecimal.ROUND_DOWN;
|
|
|
|
|
|
@Service
|
|
|
public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, ActivityUserMapper> implements ActivityUserMapperService {
|
|
@@ -51,6 +54,40 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
|
|
|
private SysConfigDao sysConfigDao;
|
|
|
@Autowired
|
|
|
private SubjectDao subjectDao;
|
|
|
+ @Autowired
|
|
|
+ private CourseScheduleService courseScheduleService;
|
|
|
+ @Autowired
|
|
|
+ private VipGroupCategoryService vipGroupCategoryService;
|
|
|
+ @Autowired
|
|
|
+ private VipGroupDao vipGroupDao;
|
|
|
+ @Autowired
|
|
|
+ private VipGroupService vipGroupService;
|
|
|
+ @Autowired
|
|
|
+ private VipGroupStudentCoursePriceDao vipGroupStudentCoursePriceDao;
|
|
|
+ @Autowired
|
|
|
+ private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
|
|
|
+ @Autowired
|
|
|
+ private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
|
|
|
+ @Autowired
|
|
|
+ private VipGroupDefaultClassesUnitPriceDao vipGroupDefaultClassesUnitPriceDao;
|
|
|
+ @Autowired
|
|
|
+ private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
|
|
|
+ @Autowired
|
|
|
+ private ClassGroupTeacherSalaryDao classGroupTeacherSalaryDao;
|
|
|
+ @Autowired
|
|
|
+ private ClassGroupStudentMapperDao classGroupStudentMapperDao;
|
|
|
+ @Autowired
|
|
|
+ private ClassGroupDao classGroupDao;
|
|
|
+ @Autowired
|
|
|
+ private PracticeGroupDao practiceGroupDao;
|
|
|
+ @Autowired
|
|
|
+ private PracticeGroupService practiceGroupService;
|
|
|
+ @Autowired
|
|
|
+ private SysUserService sysUserService;
|
|
|
+ @Autowired
|
|
|
+ private TeacherService teacherService;
|
|
|
+ @Autowired
|
|
|
+ private PracticeGroupSellPriceDao practiceGroupSellPriceDao;
|
|
|
|
|
|
@Override
|
|
|
public BaseDAO<Integer, ActivityUserMapper> getDAO() {
|
|
@@ -332,4 +369,622 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
|
|
|
public List<ActivityUserDto> queryActivityStudentList(ActivityUserQueryInfo activityUserQueryInfo) {
|
|
|
return activityUserMapperDao.queryActivityStudentList(activityUserQueryInfo);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Integer> queryActivityCourseTimeList(ActivityUserQueryInfo activityUserQueryInfo) {
|
|
|
+ return activityUserMapperDao.queryActivityCourseTimeList(activityUserQueryInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void checkCreateActivityVipGroup(VipGroupApplyDto vipGroup,VipGroupApplyBaseInfoDto applyBaseInfo){
|
|
|
+ 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(Objects.isNull(applyBaseInfo.getVipGroupCategoryId())){
|
|
|
+ throw new BizException("请选择课程类型");
|
|
|
+ }
|
|
|
+ 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("请设置教学点");
|
|
|
+ }
|
|
|
+ if (Objects.isNull(applyBaseInfo.getOfflineClassesUnitPrice()) && Objects.isNull(applyBaseInfo.getOnlineClassesUnitPrice())) {
|
|
|
+ throw new BizException("请设置课程单价");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpResponseResult createActivityVipGroup(VipGroupApplyDto vipGroup) {
|
|
|
+ VipGroupApplyBaseInfoDto applyBaseInfo = vipGroup.getVipGroupApplyBaseInfo();
|
|
|
+ this.checkCreateActivityVipGroup(vipGroup,applyBaseInfo);
|
|
|
+ String studentIds = applyBaseInfo.getStudentIdList();
|
|
|
+ if (StringUtils.isBlank(studentIds)) {
|
|
|
+ throw new BizException("请选择学员");
|
|
|
+ }
|
|
|
+ int courseNum = vipGroup.getCourseSchedules().size();
|
|
|
+ if (courseNum != (applyBaseInfo.getOfflineClassesNum() + applyBaseInfo.getOnlineClassesNum())) {
|
|
|
+ throw new BizException("建课失败,课程数量异常");
|
|
|
+ }
|
|
|
+ Date now = new Date();
|
|
|
+ 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("报名开始时间必须在报名截至时间之前");
|
|
|
+ }
|
|
|
+ VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(applyBaseInfo.getVipGroupCategoryId());
|
|
|
+ if (Objects.isNull(vipGroupCategory)) {
|
|
|
+ throw new BizException("课程形式不存在");
|
|
|
+ }
|
|
|
+ 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<Integer> canBuyStudentIds = Arrays.stream(applyBaseInfo.getStudentIdList().split(",")).map(e -> Integer.valueOf(e)).collect(Collectors.toList());
|
|
|
+
|
|
|
+ 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);
|
|
|
+
|
|
|
+ //开课时间为排课的第一节课的开始时间
|
|
|
+ applyBaseInfo.setCourseStartDate(firstCourseSchedule.getStartClassTime());
|
|
|
+ //课程结束时间为排课的最后一节课的结束时间
|
|
|
+ applyBaseInfo.setCoursesExpireDate(latestCourseSchedule.getEndClassTime());
|
|
|
+ applyBaseInfo.setStudentNum(studentIdList.size());
|
|
|
+ applyBaseInfo.setPaymentExpireDate(DateUtil.getLastSecondWithDay(applyBaseInfo.getPaymentExpireDate()));
|
|
|
+
|
|
|
+ vipGroupDao.insert(applyBaseInfo);
|
|
|
+
|
|
|
+ //校验排课资格,消耗排课资格(获取被使用的排课资格)
|
|
|
+ List<CourseScheduleStudentPayment> courseScheduleStudentPayments =
|
|
|
+ this.checkScheduleQualification(studentIdList, vipGroupCategory.getId(), applyBaseInfo.getSingleClassMinutes(), courseNum, applyBaseInfo.getId());
|
|
|
+
|
|
|
+ List<VipGroupStudentCoursePrice> vscps = vipGroup.getVipGroupApplyBaseInfo().getVipGroupStudentCoursePrices();
|
|
|
+ if (org.springframework.util.CollectionUtils.isEmpty(vscps)) {
|
|
|
+ vscps = new ArrayList<>();
|
|
|
+ for (Integer canBuyStudentId : canBuyStudentIds) {
|
|
|
+ vscps.add(new VipGroupStudentCoursePrice(canBuyStudentId, applyBaseInfo.getOnlineClassesUnitPrice(), applyBaseInfo.getOfflineClassesUnitPrice(), applyBaseInfo.getTotalPrice()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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 = vipGroupService.countVipGroupPredictFee1(applyBaseInfo, applyBaseInfo.getUserId(), null);
|
|
|
+ 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);
|
|
|
+
|
|
|
+ Map<Integer, String> userRoleMap = new HashMap<>();
|
|
|
+ if (Objects.nonNull(applyBaseInfo.getEducationalTeacherId())) {
|
|
|
+ userRoleMap.put(applyBaseInfo.getEducationalTeacherId(), "乐团主管");
|
|
|
+ }
|
|
|
+ userRoleMap.put(applyBaseInfo.getUserId(), "指导老师");
|
|
|
+ VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroup(applyBaseInfo.getId());
|
|
|
+ if (Objects.isNull(vipGroupDefaultClassesUnitPrice)) {
|
|
|
+ throw new BizException("课程单价设置错误");
|
|
|
+ }
|
|
|
+ //生成学生单课缴费信息
|
|
|
+ for (CourseSchedule courseSchedule : courseSchedules) {
|
|
|
+ for (CourseScheduleStudentPayment courseScheduleStudentPayment : courseScheduleStudentPayments) {
|
|
|
+ courseScheduleStudentPayment.setGroupType(courseSchedule.getGroupType());
|
|
|
+ courseScheduleStudentPayment.setMusicGroupId(courseSchedule.getMusicGroupId());
|
|
|
+ courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
|
|
|
+ courseScheduleStudentPayment.setClassGroupId(courseSchedule.getClassGroupId());
|
|
|
+ courseScheduleStudentPayment.setOriginalPrice(TeachModeEnum.ONLINE.equals(courseSchedule.getTeachMode()) ? vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice() : vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice());
|
|
|
+ userRoleMap.put(courseScheduleStudentPayment.getUserId(), null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (courseScheduleStudentPayments.size() > 0) {
|
|
|
+ courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
|
|
|
+ studentDao.updateStudentServiceTag(null, studentIdList, YesOrNoEnum.YES.getCode());
|
|
|
+ }
|
|
|
+// 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());
|
|
|
+// } catch (Exception e) {
|
|
|
+// e.printStackTrace();
|
|
|
+// }
|
|
|
+ return BaseController.succeed(applyBaseInfo.getAuditStatus().getCode());
|
|
|
+ }
|
|
|
+
|
|
|
+ //校验排课资格并消耗
|
|
|
+ private List<CourseScheduleStudentPayment> checkScheduleQualification(List<Integer> studentIdList,Integer categoryId,Integer classMinutes,Integer courseNum,Long groupId) {
|
|
|
+ //获取学员排课资格
|
|
|
+ List<ActivityUserMapper> totalActivityUserMappers = activityUserMapperDao.findTotalByStudents(studentIdList,categoryId,classMinutes);
|
|
|
+ if (CollectionUtils.isEmpty(totalActivityUserMappers)) {
|
|
|
+ throw new BizException("所选学员暂无排课资格");
|
|
|
+ }
|
|
|
+ totalActivityUserMappers.stream().collect(Collectors.groupingBy(ActivityUserMapper::getUserId,Collectors.collectingAndThen(Collectors.toList(), list -> {
|
|
|
+ Integer sum = list.stream().mapToInt(ActivityUserMapper::getSubCourseNum).sum();
|
|
|
+ if (sum < courseNum) {
|
|
|
+ throw new BizException("所选学员排课资格不足");
|
|
|
+ }
|
|
|
+ return sum;
|
|
|
+ })));
|
|
|
+ //获取学员付费排课资格
|
|
|
+ List<ActivityUserMapper> activityUserMappers = activityUserMapperDao.findByStudents(studentIdList,categoryId,classMinutes);
|
|
|
+ //获取学员赠送排课资格
|
|
|
+ List<ActivityUserMapper> freeActivityUserMappers = activityUserMapperDao.findByStudents1(studentIdList,categoryId,classMinutes);
|
|
|
+ //消耗排课资格(获取被使用的排课资格)
|
|
|
+ return this.use(activityUserMappers, freeActivityUserMappers, courseNum,groupId,studentIdList);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void getStudentPayment(Integer userId,BigDecimal totalAmount,Integer courseNum,List<CourseScheduleStudentPayment> courseScheduleStudentPayments){
|
|
|
+ //实际支付金额,去除优惠券
|
|
|
+ BigDecimal singleAmount = totalAmount.divide(new BigDecimal(courseNum), ROUND_DOWN);
|
|
|
+ BigDecimal firstSingleAmount = totalAmount.subtract(singleAmount.multiply(new BigDecimal(courseNum))).add(singleAmount);
|
|
|
+ for (Integer i = 0; i < courseNum; i++) {
|
|
|
+ CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
|
|
|
+ courseScheduleStudentPayment.setUserId(userId);
|
|
|
+ if (i == 0) {
|
|
|
+ courseScheduleStudentPayment.setExpectPrice(firstSingleAmount);
|
|
|
+ } else {
|
|
|
+ courseScheduleStudentPayment.setExpectPrice(singleAmount);
|
|
|
+ }
|
|
|
+ courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice());
|
|
|
+ courseScheduleStudentPayments.add(courseScheduleStudentPayment);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private void getStudentPayment(Integer userId,Integer courseNum,BigDecimal singlePrice,List<CourseScheduleStudentPayment> courseScheduleStudentPayments){
|
|
|
+ for (Integer i = 0; i < courseNum; i++) {
|
|
|
+ CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
|
|
|
+ courseScheduleStudentPayment.setUserId(userId);
|
|
|
+ courseScheduleStudentPayment.setExpectPrice(singlePrice);
|
|
|
+ courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice());
|
|
|
+ courseScheduleStudentPayments.add(courseScheduleStudentPayment);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<CourseScheduleStudentPayment> use(List<ActivityUserMapper> activityUserMappers,
|
|
|
+ List<ActivityUserMapper> freeActivityUserMappers,
|
|
|
+ int courseNum,
|
|
|
+ Long groupId,List<Integer> studentIdList) {
|
|
|
+ Map<Integer, List<ActivityUserMapper>> collect = activityUserMappers.stream().collect(Collectors.groupingBy(ActivityUserMapper::getUserId));
|
|
|
+ Map<Integer,Integer> subCourseMap = new HashMap<>();
|
|
|
+ studentIdList.stream().forEach(e-> subCourseMap.put(e,courseNum));
|
|
|
+ List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
|
|
|
+ List<ActivityUserMapper> useActivityUserMappers = new ArrayList<>();
|
|
|
+ one:for (Integer integer : collect.keySet()) {
|
|
|
+ Integer subCourseNum = courseNum;
|
|
|
+ List<ActivityUserMapper> activityUserMapperList = collect.get(integer);
|
|
|
+ for (ActivityUserMapper activityUserMapper : activityUserMapperList) {
|
|
|
+ if(subCourseNum == 0){
|
|
|
+ continue one;
|
|
|
+ }
|
|
|
+ useActivityUserMappers.add(activityUserMapper);
|
|
|
+ //区分vip还是网管
|
|
|
+ this.modifyGroupId(activityUserMapper,groupId);
|
|
|
+ int num = activityUserMapper.getSubCourseNum();
|
|
|
+ //剩余课次不足
|
|
|
+ if(num <= subCourseNum){
|
|
|
+ subCourseNum = subCourseNum - num;
|
|
|
+ subCourseMap.put(integer, subCourseNum);
|
|
|
+ activityUserMapper.setSubCourseNum(0);
|
|
|
+ activityUserMapper.setSubNoCoursePrice(BigDecimal.ZERO);
|
|
|
+ activityUserMapper.setCurrentCoursePrice(activityUserMapper.getSubNoCoursePrice());
|
|
|
+ //生成学员课程支付记录
|
|
|
+ this.getStudentPayment(integer,activityUserMapper.getSubNoCoursePrice(),num,courseScheduleStudentPayments);
|
|
|
+ }else {
|
|
|
+ subCourseMap.put(integer, 0);
|
|
|
+ activityUserMapper.setSubCourseNum(num - subCourseNum);
|
|
|
+ //消耗的课程价值
|
|
|
+ BigDecimal divide = activityUserMapper.getActualPrice().divide(new BigDecimal(activityUserMapper.getTotalCourseNum()), RoundingMode.DOWN).multiply(new BigDecimal(subCourseNum));
|
|
|
+ activityUserMapper.setSubNoCoursePrice(activityUserMapper.getSubNoCoursePrice().subtract(divide));
|
|
|
+ activityUserMapper.setCurrentCoursePrice(divide);
|
|
|
+ this.getStudentPayment(integer,subCourseNum,divide,courseScheduleStudentPayments);
|
|
|
+ //剩余课次充足
|
|
|
+ continue one;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Map<Integer, List<ActivityUserMapper>> collect1 = freeActivityUserMappers.stream().collect(Collectors.groupingBy(ActivityUserMapper::getUserId));
|
|
|
+ one:for (Integer integer : subCourseMap.keySet()) {
|
|
|
+ Integer subCourseNum = subCourseMap.get(integer);
|
|
|
+ if(subCourseNum == 0){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<ActivityUserMapper> activityUserMapperList = collect1.get(integer);
|
|
|
+ for (ActivityUserMapper activityUserMapper : activityUserMapperList) {
|
|
|
+ if(subCourseNum == 0){
|
|
|
+ continue one;
|
|
|
+ }
|
|
|
+ useActivityUserMappers.add(activityUserMapper);
|
|
|
+ //区分vip还是网管
|
|
|
+ this.modifyGiveGroupId(activityUserMapper,groupId);
|
|
|
+ int num = activityUserMapper.getSubGiveCourseNum();
|
|
|
+ //剩余课次不足
|
|
|
+ if(num <= subCourseNum){
|
|
|
+ activityUserMapper.setSubGiveCourseNum(0);
|
|
|
+ subCourseNum = subCourseNum - num;
|
|
|
+ this.getStudentPayment(integer,num,BigDecimal.ZERO,courseScheduleStudentPayments);
|
|
|
+ }else {
|
|
|
+ activityUserMapper.setSubGiveCourseNum(num - subCourseNum);
|
|
|
+ this.getStudentPayment(integer,subCourseNum,BigDecimal.ZERO,courseScheduleStudentPayments);
|
|
|
+ continue one;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (subCourseNum > 0){
|
|
|
+ throw new BizException("所选部分学员排课资格不足,请重新选择");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ activityUserMapperDao.batchUpdate(useActivityUserMappers);
|
|
|
+ return courseScheduleStudentPayments;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void modifyGroupId(ActivityUserMapper activityUserMapper,Long groupId){
|
|
|
+ if(activityUserMapper.getVipFlag() != 0 || activityUserMapper.getGiveVipFlag() != 0){
|
|
|
+ if(StringUtils.isEmpty(activityUserMapper.getVipGroupId())){
|
|
|
+ activityUserMapper.setVipGroupId(groupId.toString());
|
|
|
+ }else {
|
|
|
+ activityUserMapper.setVipGroupId(activityUserMapper.getVipGroupId()+","+groupId);
|
|
|
+ }
|
|
|
+ activityUserMapper.setVipFlag(2);
|
|
|
+ }else {
|
|
|
+ if(StringUtils.isEmpty(activityUserMapper.getPracticeGroupId())){
|
|
|
+ activityUserMapper.setPracticeGroupId(groupId.toString());
|
|
|
+ }else {
|
|
|
+ activityUserMapper.setPracticeGroupId(activityUserMapper.getPracticeGroupId()+","+groupId);
|
|
|
+ }
|
|
|
+ //虽然还有剩余价值,但是这里处理为已排课,不再考虑退费问题
|
|
|
+ activityUserMapper.setPracticeFlag(2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private void modifyGiveGroupId(ActivityUserMapper activityUserMapper,Long groupId){
|
|
|
+ if(activityUserMapper.getVipFlag() != 0 || activityUserMapper.getGiveVipFlag() != 0){
|
|
|
+ if(StringUtils.isEmpty(activityUserMapper.getGiveVipGroupId())){
|
|
|
+ activityUserMapper.setGiveVipGroupId(groupId.toString());
|
|
|
+ }else {
|
|
|
+ activityUserMapper.setGiveVipGroupId(activityUserMapper.getGiveVipGroupId()+","+groupId);
|
|
|
+ }
|
|
|
+ activityUserMapper.setGiveVipFlag(2);
|
|
|
+ }else {
|
|
|
+ if(StringUtils.isEmpty(activityUserMapper.getPracticeGroupId())){
|
|
|
+ activityUserMapper.setGivePracticeGroupId(groupId.toString());
|
|
|
+ }else {
|
|
|
+ activityUserMapper.setGivePracticeGroupId(activityUserMapper.getGivePracticeGroupId()+","+groupId);
|
|
|
+ }
|
|
|
+ //虽然还有剩余价值,但是这里处理为已排课,不再考虑退费问题
|
|
|
+ activityUserMapper.setGivePracticeFlag(2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpResponseResult createActivityPracticeGroup(PracticeGroupApplyDto practice) {
|
|
|
+ PracticeGroupApplyBaseInfoDto applyBaseInfo = practice.getPracticeGroupApplyBaseInfoDto();
|
|
|
+ List<CourseSchedule> courseSchedules = practice.getCourseSchedules();
|
|
|
+ Integer allCourseNum = applyBaseInfo.getAllCourseNum();
|
|
|
+ if (courseSchedules.size() != applyBaseInfo.getAllCourseNum()) {
|
|
|
+ throw new BizException("建课失败,课程数量异常");
|
|
|
+ }
|
|
|
+ if (applyBaseInfo.getSubjectId() == null) {
|
|
|
+ throw new BizException("请选择声部");
|
|
|
+ }
|
|
|
+ Integer studentId = applyBaseInfo.getStudentId();
|
|
|
+ Date now = new Date();
|
|
|
+
|
|
|
+ //获取第一节课
|
|
|
+ CourseSchedule firstCourseSchedule = courseSchedules.stream().min(Comparator.comparing(CourseSchedule::getStartClassTime)).get();
|
|
|
+ //获取最后一节课
|
|
|
+ CourseSchedule latestCourseSchedule = courseSchedules.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("报名开始时间必须在报名截至时间之前");
|
|
|
+ }
|
|
|
+
|
|
|
+ int repeatVipGroups = practiceGroupDao.countUserRepeatPracticeGroupInCourseStartEndTime(applyBaseInfo.getUserId(), firstCourseSchedule.getStartClassTime(), latestCourseSchedule.getEndClassTime());
|
|
|
+ if (repeatVipGroups > 0) {
|
|
|
+ SysUser sysUser = sysUserService.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"));
|
|
|
+ }
|
|
|
+
|
|
|
+ //生成网管课信息
|
|
|
+ Subject subject = subjectDao.get(applyBaseInfo.getSubjectId());
|
|
|
+ SysUser user = teacherDao.getUser(studentId);
|
|
|
+ StringBuffer className = new StringBuffer(subject.getName()).append("•").append(user.getUsername());
|
|
|
+ applyBaseInfo.setName(className.toString());
|
|
|
+ applyBaseInfo.setAuditStatus(AuditStatusEnum.PASS);
|
|
|
+ applyBaseInfo.setGroupStatus(GroupStatusEnum.NORMAL);
|
|
|
+
|
|
|
+ Teacher teacher = teacherService.get(applyBaseInfo.getUserId());
|
|
|
+ if (Objects.isNull(teacher)) {
|
|
|
+ throw new BizException("教师不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ //开课时间为排课的第一节课的开始时间
|
|
|
+ applyBaseInfo.setCoursesStartDate(firstCourseSchedule.getStartClassTime());
|
|
|
+ //课程结束时间为排课的最后一节课的结束时间
|
|
|
+ applyBaseInfo.setCoursesExpireDate(latestCourseSchedule.getEndClassTime());
|
|
|
+
|
|
|
+ applyBaseInfo.setPaymentExpireDate(DateUtil.getLastSecondWithDay(applyBaseInfo.getPaymentExpireDate()));
|
|
|
+ applyBaseInfo.setType(PracticeGroupType.CHARGE);
|
|
|
+ practiceGroupDao.insert(applyBaseInfo);
|
|
|
+
|
|
|
+ //消耗排课资格
|
|
|
+ List<Integer> studentIdList = new ArrayList<>();
|
|
|
+ studentIdList.add(studentId);
|
|
|
+ List<CourseScheduleStudentPayment> courseScheduleStudentPayments =
|
|
|
+ this.checkScheduleQualification(studentIdList,null, applyBaseInfo.getSingleClassMinutes(), applyBaseInfo.getAllCourseNum(), applyBaseInfo.getId());
|
|
|
+
|
|
|
+ //创建班级信息
|
|
|
+ ClassGroup classGroup = new ClassGroup();
|
|
|
+ classGroup.setSubjectIdList(applyBaseInfo.getSubjectId().toString());
|
|
|
+ classGroup.setExpectStudentNum(1);
|
|
|
+ classGroup.setStudentNum(1);
|
|
|
+ classGroup.setName(applyBaseInfo.getName());
|
|
|
+ classGroup.setTotalClassTimes(allCourseNum);
|
|
|
+ classGroup.setType(ClassGroupTypeEnum.PRACTICE);
|
|
|
+ classGroup.setDelFlag(0);
|
|
|
+ classGroup.setGroupType(GroupType.PRACTICE);
|
|
|
+ classGroup.setMusicGroupId(applyBaseInfo.getId().toString());
|
|
|
+ classGroup.setCreateTime(now);
|
|
|
+ classGroup.setUpdateTime(now);
|
|
|
+ classGroupDao.insert(classGroup);
|
|
|
+
|
|
|
+ //班级学员关联记录
|
|
|
+ List<ClassGroupStudentMapper> classGroupStudentMapperList = new ArrayList<>();
|
|
|
+ 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.PRACTICE);
|
|
|
+ classGroupStudentMapperList.add(classGroupStudentMapper);
|
|
|
+ classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMapperList);
|
|
|
+
|
|
|
+ //计算课程相关费用信息
|
|
|
+ Map<String, BigDecimal> costInfo = practiceGroupService.countPracticeGroupPredictFee(applyBaseInfo, applyBaseInfo.getUserId());
|
|
|
+ applyBaseInfo.setOnlineTeacherSalary(costInfo.get("onlineTeacherSalary"));
|
|
|
+
|
|
|
+ //创建班级老师关联记录
|
|
|
+ ClassGroupTeacherMapper classGroupTeacherMapper = new ClassGroupTeacherMapper();
|
|
|
+ classGroupTeacherMapper.setMusicGroupId(applyBaseInfo.getId().toString());
|
|
|
+ classGroupTeacherMapper.setClassGroupId(classGroup.getId());
|
|
|
+ classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.BISHOP);
|
|
|
+ classGroupTeacherMapper.setUserId(applyBaseInfo.getUserId());
|
|
|
+ classGroupTeacherMapper.setGroupType(GroupType.PRACTICE);
|
|
|
+ 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(BigDecimal.ZERO);
|
|
|
+ classGroupTeacherSalary.setOnlineClassesSalary(applyBaseInfo.getOnlineTeacherSalary());
|
|
|
+ classGroupTeacherSalary.setGroupType(GroupType.PRACTICE);
|
|
|
+ classGroupTeacherSalary.setCreateTime(now);
|
|
|
+ classGroupTeacherSalary.setUpdateTime(now);
|
|
|
+ classGroupTeacherSalaryDao.insert(classGroupTeacherSalary);
|
|
|
+
|
|
|
+ //课程信息调整
|
|
|
+ courseSchedules.forEach(courseSchedule -> {
|
|
|
+ courseSchedule.setGroupType(GroupType.PRACTICE);
|
|
|
+ courseSchedule.setMusicGroupId(applyBaseInfo.getId().toString());
|
|
|
+ courseSchedule.setTeacherId(applyBaseInfo.getUserId());
|
|
|
+ courseSchedule.setActualTeacherId(applyBaseInfo.getUserId());
|
|
|
+ courseSchedule.setStatus(CourseStatusEnum.NOT_START);
|
|
|
+ courseSchedule.setType(CourseSchedule.CourseScheduleType.PRACTICE);
|
|
|
+ courseSchedule.setClassGroupId(classGroup.getId());
|
|
|
+ courseSchedule.setName(applyBaseInfo.getName());
|
|
|
+ courseSchedule.setOrganId(applyBaseInfo.getOrganId());
|
|
|
+ });
|
|
|
+
|
|
|
+ applyBaseInfo.setCourseScheduleJson(JSON.toJSONString(courseSchedules));
|
|
|
+ practiceGroupDao.update(applyBaseInfo);
|
|
|
+
|
|
|
+ //创建课程
|
|
|
+ courseScheduleService.batchAddCourseSchedule(courseSchedules);
|
|
|
+
|
|
|
+ //创建老师单节课课酬信息
|
|
|
+ List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<>();
|
|
|
+ for (CourseSchedule courseSchedule : courseSchedules) {
|
|
|
+ //创建教师课程薪水记录
|
|
|
+ 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.getOnlineClassesSalary());
|
|
|
+ courseScheduleTeacherSalary.setActualSalary(null);
|
|
|
+ courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
|
|
|
+ }
|
|
|
+ if (courseScheduleTeacherSalaries.size() > 0) {
|
|
|
+ courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaries);
|
|
|
+ }
|
|
|
+
|
|
|
+ //生成学生单课缴费信息
|
|
|
+ PracticeGroupSellPrice practiceGroupSellPrice = practiceGroupSellPriceDao.get(applyBaseInfo.getOrganId());
|
|
|
+ BigDecimal singleClassMinutesPrice = practiceGroupSellPrice.getSingleClassMinutesPrice();
|
|
|
+ for (CourseSchedule courseSchedule : courseSchedules) {
|
|
|
+ for (CourseScheduleStudentPayment courseScheduleStudentPayment : courseScheduleStudentPayments) {
|
|
|
+ courseScheduleStudentPayment.setGroupType(courseSchedule.getGroupType());
|
|
|
+ courseScheduleStudentPayment.setMusicGroupId(courseSchedule.getMusicGroupId());
|
|
|
+ courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
|
|
|
+ courseScheduleStudentPayment.setClassGroupId(courseSchedule.getClassGroupId());
|
|
|
+ courseScheduleStudentPayment.setOriginalPrice(singleClassMinutesPrice);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (courseScheduleStudentPayments.size() > 0) {
|
|
|
+ courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
|
|
|
+ studentDao.updateStudentServiceTag(null, studentIdList, YesOrNoEnum.YES.getCode());
|
|
|
+ }
|
|
|
+ return BaseController.succeed(applyBaseInfo.getAuditStatus().getCode());
|
|
|
+ }
|
|
|
+
|
|
|
}
|