zouxuan vor 4 Jahren
Ursprung
Commit
c06a57899d

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PracticeGroupApplyDto.java

@@ -18,9 +18,20 @@ public class PracticeGroupApplyDto {
 
     private BigDecimal singleClassPrice;
 
+    @ApiModelProperty(value = "是否赠课")
+    private Boolean giveFlag;
+
     @ApiModelProperty(value = "是否允许超出活动允许的学生使用次数")
     private Boolean allowOverstepActivityStudentNum = false;
 
+    public Boolean getGiveFlag() {
+        return giveFlag;
+    }
+
+    public void setGiveFlag(Boolean giveFlag) {
+        this.giveFlag = giveFlag;
+    }
+
     public Boolean getAllowOverstepActivityStudentNum() {
         return allowOverstepActivityStudentNum;
     }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/VipGroupActivityQueryInfo.java

@@ -9,8 +9,10 @@ import io.swagger.annotations.ApiModelProperty;
  */
 public class VipGroupActivityQueryInfo extends QueryInfo {
 
+    @ApiModelProperty(value = "可用分部")
     private String organId;
 
+    @ApiModelProperty(value = "是否可用")
     private Boolean enable;
 
     @ApiModelProperty(value = "适用学生类型:-1:所有;0:老用户;1:新用户")

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleStudentPaymentService.java

@@ -20,6 +20,8 @@ public interface CourseScheduleStudentPaymentService extends BaseService<Long, C
 	 */
 	int createCourseScheduleStudentPaymentForVipGroup(Long vipGroupId, Integer userId);
 
+	int createCourseScheduleStudentPaymentForPracticeGroup(Long practiceGroupId, Integer userId);
+
 
 	/**
 	 * 删除学生对应的课程

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleTeacherSalaryService.java

@@ -34,6 +34,9 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
                                              BigDecimal onlineTeacherSalary,
                                              BigDecimal offlineTeacherSalary);
 
+    void createCourseScheduleTeacherPracticeSalary(List<CourseSchedule> courseSchedules,
+                                             BigDecimal onlineTeacherSalary);
+
     /**
      * @describe 批量插入教师课程课酬记录
      * @author Joburgess

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java

@@ -334,4 +334,13 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
     * @date 2021/10/8 12:22
     */
     Object createPracticeGroup(PracticeGroupApplyDto practiceGroupApplyDto);
+
+    /**
+    * @description: 创建网管课
+     * @param practiceGroupApplyDto
+    * @return java.lang.Object
+    * @author zx
+    * @date 2021/10/11 19:17
+    */
+    Object createActivityPracticeGroup(PracticeGroupApplyDto practiceGroupApplyDto);
 }

+ 111 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -84,7 +84,117 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 
 	@Override
 	public int createCourseScheduleStudentPaymentForVipGroup(Long vipGroupId, Integer userId) {
-		VipGroup vipGroup=vipGroupDao.get(vipGroupId);
+		VipGroup vipGroup = vipGroupDao.get(vipGroupId);
+
+		if(Objects.isNull(vipGroup)){
+			throw new BizException("未找到相关vip课程");
+		}
+
+		VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroup(vipGroupId);
+		if(Objects.isNull(vipGroupDefaultClassesUnitPrice)){
+			throw new BizException("课程单价设置错误");
+		}
+
+		//获取活动信息
+		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId());
+
+		List<CourseSchedule> vipGroupCourseSchedules=courseScheduleDao.findGroupCourseSchedules(vipGroupId.toString(),GroupType.VIP.getCode());
+
+		if(CollectionUtils.isEmpty(vipGroupCourseSchedules)){
+			throw new BizException("未获取到排课信息");
+		}
+
+		int giveClassTimes=0;
+        if(vipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING)
+                &&Objects.nonNull(vipGroupActivity)
+                &&vipGroupActivity.getType().equals(VipGroupActivityTypeEnum.GIVE_CLASS)
+                &&vipGroupCourseSchedules.size() >= Integer.parseInt(vipGroupActivity.getAttribute1())){
+            giveClassTimes = Integer.parseInt(vipGroupActivity.getAttribute2());
+        }
+
+		StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDaop.findByStudentVipGroup(vipGroupId, userId, DealStatusEnum.SUCCESS.getCode());
+		BigDecimal couponFee = new BigDecimal(0);
+		if(Objects.nonNull(studentPaymentOrder)){
+			couponFee = studentPaymentOrder.getCouponRemitFee().divide(new BigDecimal(vipGroupCourseSchedules.size()-giveClassTimes), CommonConstants.DECIMAL_PLACE);
+		}
+
+		List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
+		Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroupByTeachMode = vipGroupCourseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getTeachMode));
+		for(TeachModeEnum teachModeEnum:courseScheduleGroupByTeachMode.keySet()){
+			List<CourseSchedule> courseSchedules = courseScheduleGroupByTeachMode.get(teachModeEnum)
+					.stream()
+					.sorted(Comparator.comparing(CourseSchedule::getStartClassTime)).collect(Collectors.toList());
+			for(int i=0;i<courseSchedules.size();i++) {
+				//创建学生课程应缴费记录
+				CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+				courseScheduleStudentPayment.setUserId(userId);
+	            courseScheduleStudentPayment.setGroupType(courseSchedules.get(i).getGroupType());
+	            courseScheduleStudentPayment.setMusicGroupId(courseSchedules.get(i).getMusicGroupId());
+				courseScheduleStudentPayment.setCourseScheduleId(courseSchedules.get(i).getId());
+				courseScheduleStudentPayment.setClassGroupId(courseSchedules.get(i).getClassGroupId());
+
+				if (teachModeEnum == TeachModeEnum.ONLINE) {
+					//学生线上单节课应缴费计算
+					switch (vipGroupActivity.getType()) {
+						case BASE_ACTIVITY:
+							courseScheduleStudentPayment.setExpectPrice(vipGroup.getOnlineClassesUnitPrice().subtract(couponFee));
+							break;
+						case DISCOUNT:
+							courseScheduleStudentPayment.setExpectPrice(
+									vipGroup.getOnlineClassesUnitPrice().multiply(
+											new BigDecimal(vipGroupActivity.getAttribute1()))
+											.divide(new BigDecimal(100), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP)
+											.subtract(couponFee)
+							);
+							break;
+						case GIVE_CLASS:
+							if (vipGroup.getGiveTeachMode() == teachModeEnum
+									&& i >= (courseSchedules.size()-giveClassTimes)) {
+								courseScheduleStudentPayment.setExpectPrice(new BigDecimal(0));
+							} else {
+								courseScheduleStudentPayment.setExpectPrice(vipGroup.getOnlineClassesUnitPrice().subtract(couponFee));
+							}
+							break;
+						default:
+							throw new BizException("活动类型错误!");
+					}
+				}else{
+					//学生线下单节课应缴费计算
+					switch (vipGroupActivity.getType()) {
+						case BASE_ACTIVITY:
+							courseScheduleStudentPayment.setExpectPrice(vipGroup.getOfflineClassesUnitPrice().subtract(couponFee));
+							break;
+						case DISCOUNT:
+							courseScheduleStudentPayment.setExpectPrice(
+									vipGroup.getOfflineClassesUnitPrice().multiply(
+											new BigDecimal(vipGroupActivity.getAttribute1()))
+											.divide(new BigDecimal(100), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP)
+											.subtract(couponFee)
+							);
+							break;
+						case GIVE_CLASS:
+							if (vipGroup.getGiveTeachMode() == teachModeEnum
+                                    && i >= (courseSchedules.size()-giveClassTimes)) {
+								courseScheduleStudentPayment.setExpectPrice(new BigDecimal(0));
+							} else {
+								courseScheduleStudentPayment.setExpectPrice(vipGroup.getOfflineClassesUnitPrice().subtract(couponFee));
+							}
+							break;
+						default:
+							throw new BizException("活动类型错误!");
+					}
+				}
+                courseScheduleStudentPayment.setOriginalPrice(TeachModeEnum.ONLINE.equals(teachModeEnum)?vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice():vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice());
+				courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice());
+				courseScheduleStudentPayments.add(courseScheduleStudentPayment);
+			}
+		}
+		return courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
+	}
+
+	@Override
+	public int createCourseScheduleStudentPaymentForPracticeGroup(Long vipGroupId, Integer userId) {
+		VipGroup vipGroup = vipGroupDao.get(vipGroupId);
 
 		if(Objects.isNull(vipGroup)){
 			throw new BizException("未找到相关vip课程");

+ 29 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -163,6 +163,35 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     }
 
     @Override
+    public void createCourseScheduleTeacherPracticeSalary(List<CourseSchedule> courseSchedules,
+                                                          BigDecimal onlineTeacherSalary) {
+        List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<>();
+        for (int i = 0; i < courseSchedules.size(); i++) {
+            //创建教师课程薪水记录
+            CourseScheduleTeacherSalary courseScheduleTeacherSalary = courseScheduleTeacherSalaryDao.queryByCourseScheduleIdAndUserId(courseSchedules.get(i).getId(), courseSchedules.get(i).getActualTeacherId());
+            if (Objects.isNull(courseScheduleTeacherSalary)) {
+                courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
+            }
+            courseScheduleTeacherSalary.setCourseScheduleId(courseSchedules.get(i).getId());
+            courseScheduleTeacherSalary.setGroupType(courseSchedules.get(i).getGroupType());
+            courseScheduleTeacherSalary.setMusicGroupId(courseSchedules.get(i).getMusicGroupId());
+            courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
+            courseScheduleTeacherSalary.setUserId(courseSchedules.get(i).getActualTeacherId().intValue());
+            courseScheduleTeacherSalary.setClassGroupId(courseSchedules.get(i).getClassGroupId());
+            courseScheduleTeacherSalary.setExpectSalary(onlineTeacherSalary);
+            courseScheduleTeacherSalary.setActualSalary(null);
+            if (Objects.isNull(courseScheduleTeacherSalary.getId())) {
+                courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
+            } else {
+                courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
+            }
+        }
+        if (courseScheduleTeacherSalaries.size() > 0) {
+            batchInsert(courseScheduleTeacherSalaries);
+        }
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public void batchInsert(List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries) {
         courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaries);

+ 222 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -134,6 +134,10 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     private SysCouponCodeService sysCouponCodeService;
     @Autowired
     private VipGroupActivityDao vipGroupActivityDao;
+    @Autowired
+    private ActivityUserMapperDao activityUserMapperDao;
+    @Autowired
+    private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
 
     private static Map<Integer, Map<Integer, List<Integer>>> schoolSubjectTeachersMap;
 
@@ -4513,4 +4517,222 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         sysMessageService.batchSeoMessage(userIds,MessageTypeEnum.BACKSTAGE_TEACHER_APPLY_PRACTICE, JSONObject.toJSONString(memo),teacher.getRealName());
         return BaseController.succeed(applyBaseInfoDto.getAuditStatus().getCode());
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
+    public Object createActivityPracticeGroup(PracticeGroupApplyDto practice) {
+        PracticeGroupApplyBaseInfoDto applyBaseInfo = practice.getPracticeGroupApplyBaseInfoDto();
+        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("请选择指导老师");
+        }
+
+        List<CourseSchedule> courseSchedules = practice.getCourseSchedules();
+        if(courseSchedules.size() != applyBaseInfo.getAllCourseNum()){
+            throw new BizException("建课失败,当前课程存在未排课课程,请调整相关设置");
+        }
+
+        if(applyBaseInfo.getSubjectId() == null){
+            throw new BizException("请选择声部");
+        }
+
+        Integer studentId = applyBaseInfo.getStudentId();
+        if(studentId == null){
+            throw new BizException("请选择学员");
+        }
+        Boolean giveFlag = practice.getGiveFlag();
+        //获取学员排课资格
+        List<ActivityUserMapper> activityUserMappers = activityUserMapperDao.findByStudentIdList(activity.getId(),studentId.toString(),giveFlag?"GIVE_PRACTICE":"PRACTICE");
+        if(activityUserMappers.size() == 0){
+            throw new BizException("所选学员暂无排课资格");
+        }
+        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("报名开始时间必须在报名截至时间之前");
+        }
+
+        //判断课程安排是否超出范围
+        if((Objects.nonNull(activity.getCoursesEndTime()) || Objects.nonNull(activity.getCoursesStartTime()))){
+            if(latestCourseSchedule.getEndClassTime().after(activity.getCoursesEndTime())
+                    ||firstCourseSchedule.getStartClassTime().before(activity.getCoursesStartTime())){
+                throw new BizException("课时安排时间超出范围!");
+            }
+        }
+        Integer allCourseNum = applyBaseInfo.getAllCourseNum();
+        if(Objects.nonNull(activity.getMinCourseNum()) && activity.getMinCourseNum() != -1 && Objects.nonNull(activity.getMaxCourseNum())
+                && activity.getMaxCourseNum()!=-1){
+            if(allCourseNum.compareTo(activity.getMinCourseNum())<0 || allCourseNum.compareTo(activity.getMaxCourseNum())>0){
+                throw new BizException("该活动课时数为{}节~{}节", activity.getMinCourseNum(), activity.getMaxCourseNum());
+            }
+        }
+
+        int repeatVipGroups = practiceGroupDao.countUserRepeatPracticeGroupInCourseStartEndTime(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"));
+        }
+
+        //生成网管课信息
+        Subject subject = subjectDao.get(applyBaseInfo.getSubjectId());
+        Student student = studentDao.get(studentId);
+        StringBuffer className = new StringBuffer(subject.getName()).append("•").append(student.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()));
+
+        practiceGroupDao.insert(applyBaseInfo);
+
+        //创建班级信息
+        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 = countPracticeGroupPredictFee(applyBaseInfo,applyBaseInfo.getUserId(), null);
+        if(practice.getGiveFlag()){
+            applyBaseInfo.setOnlineTeacherSalary(costInfo.get("giveOnlineTeacherSalary"));
+        }else {
+            applyBaseInfo.setOnlineTeacherSalary(costInfo.get("onlineTeacherSalary"));
+        }
+        practiceGroupDao.update(applyBaseInfo);
+
+        //创建班级老师关联记录
+        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);
+        //创建老师单节课课酬信息
+        courseScheduleTeacherSalaryService.createCourseScheduleTeacherPracticeSalary(courseSchedules,
+                classGroupTeacherSalary.getOnlineClassesSalary());
+
+        SysUser sysUser = sysUserFeignService.queryUserById(applyBaseInfo.getUserId());
+
+        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(),"指导老师");
+        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
+        TeacherDefaultPracticeGroupSalary teacherDefaultPracticeGroupSalary = teacherDefaultPracticeGroupSalaryDao.findByTeacherAndCourseMinutes(applyBaseInfo.getUserId(),practiceCourseMinutes);
+
+        //生成学生单课缴费信息
+        for (ClassGroupStudentMapper classGroupStudent : classGroupStudents) {
+            List<CourseScheduleStudentPayment> courseScheduleStudentPayments=new ArrayList<>();
+            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());
+                if(practice.getGiveFlag()){
+                    courseScheduleStudentPayment.setExpectPrice(BigDecimal.ZERO);
+                    courseScheduleStudentPayment.setOriginalPrice(BigDecimal.ZERO);
+                }else {
+                    courseScheduleStudentPayment.setExpectPrice(teacherDefaultPracticeGroupSalary.getMainTeacherSalary());
+                    courseScheduleStudentPayment.setOriginalPrice(teacherDefaultPracticeGroupSalary.getMainTeacherSalary());
+                }
+                courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice());
+                courseScheduleStudentPayments.add(courseScheduleStudentPayment);
+            }
+            courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
+            userRoleMap.put(classGroupStudent.getUserId(),null);
+            studentDao.updateStudentServiceTag(classGroupStudent.getUserId(), null, YesOrNoEnum.YES.getCode());
+        }
+        courseScheduleService.checkNewCourseSchedules(courseSchedules, false,false);
+        return BaseController.succeed(applyBaseInfo.getAuditStatus().getCode());
+    }
 }

+ 2 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -1169,13 +1169,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 					courseScheduleStudentPayment.setMusicGroupId(courseSchedule.getMusicGroupId());
 					courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
 					courseScheduleStudentPayment.setClassGroupId(courseSchedule.getClassGroupId());
-					if(ActivityCourseType.MUSIC_THEORY.equals(vipGroup.getVipGroupApplyBaseInfo().getActivityCourseType())){
-						courseScheduleStudentPayment.setExpectPrice(coursePrice);
-						courseScheduleStudentPayment.setOriginalPrice(coursePrice);
-					}else{
-						courseScheduleStudentPayment.setExpectPrice(BigDecimal.ZERO);
-						courseScheduleStudentPayment.setOriginalPrice(BigDecimal.ZERO);
-					}
+					courseScheduleStudentPayment.setExpectPrice(BigDecimal.ZERO);
+					courseScheduleStudentPayment.setOriginalPrice(BigDecimal.ZERO);
 					courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice());
 					courseScheduleStudentPayments.add(courseScheduleStudentPayment);
 				}

+ 11 - 4
mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml

@@ -55,6 +55,7 @@
 		<result property="periodEnum" column="period_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result property="givePeriodEnum" column="give_period_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result property="status" column="status_"/>
+		<result property="enable" column="enable_"/>
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -75,19 +76,22 @@
 										student_max_used_times_, apply_to_student_type_,allow_online_to_offline_,
 										single_course_time_,discount_,full_minus_course_times_,give_course_type_,give_category_id_,give_course_num_
 										,member_rank_id_,member_time_,give_member_rank_id_,give_member_time_,course_type_,
-		                                activity_type_,give_sign_course_time_,is_pay_to_balance_,teach_mode_,give_teach_mode_,period_,give_period_,status_)
+		                                activity_type_,give_sign_course_time_,is_pay_to_balance_,teach_mode_,give_teach_mode_,period_,give_period_,status_,enable_)
 		VALUES(#{name},#{description},#{vipGroupCategoryIdList},#{startTime},#{endTime},#{organId},#{coursesStartTime},#{coursesEndTime},#{type},#{attribute1},#{attribute2},#{attribute3},
 		       #{salaryReadonlyFlag},#{giveClassPaySalaryFlag},now(),now(),#{salarySettlementJson},#{delFlag},#{paymentReadonlyFlag},#{onlineClassJoinGradientRewards},
 		       #{offlineClassJoinGradientRewards},#{minCourseNum},#{maxCourseNum},#{studentMaxUsedTimes},#{applyToStudentType},#{allowOnlineToOffline},
 			   #{singleCourseTime},#{discount},#{fullMinusCourseTimes},#{giveCourseType},#{giveCategoryId},#{giveCourseNum}
 				  ,#{memberRankId},#{memberTime},#{giveMemberRankId},#{giveMemberTime},#{courseType},#{activityType},#{giveSingleCourseTime},
-		       #{isPayToBalance},#{teachMode},#{giveTeachMode},#{periodEnum},#{givePeriodEnum},#{status})
+		       #{isPayToBalance},#{teachMode},#{giveTeachMode},#{periodEnum},#{givePeriodEnum},#{status},#{enable})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.VipGroupActivity">
 		UPDATE vip_group_activity
 		<set>
+			<if test="enable != null">
+				enable_ = #{enable},
+			</if>
 			<if test="status != null">
 				status_ = #{status},
 			</if>
@@ -244,11 +248,14 @@
 			<if test="enable != null">
 				AND enable_ = #{enable}
 			</if>
+			<if test="status != null">
+				AND status_ = #{status}
+			</if>
 			<if test="search != null and search != ''">
 				AND (vga.id_=#{search} OR vga.name_ LIKE CONCAT('%', #{search}, '%'))
 			</if>
-			<if test="applyToStudentType!=null">
-				AND apply_to_student_type_=#{applyToStudentType}
+			<if test="applyToStudentType != null">
+				AND FIND_IN_SET(#{applyToStudentType},apply_to_student_type_)
 			</if>
 		</where>
 	</sql>

+ 62 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherPracticeGroupController.java

@@ -0,0 +1,62 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.PracticeGroupApplyBaseInfoDto;
+import com.ym.mec.biz.dal.dto.PracticeGroupApplyDto;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.service.PracticeGroupService;
+import com.ym.mec.biz.service.VipGroupService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.util.date.DateUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Objects;
+
+@Api(tags = "网管课-教师端")
+@RequestMapping("teacherPracticeGroup")
+@RestController
+public class TeacherPracticeGroupController extends BaseController {
+
+	@Autowired
+	private PracticeGroupService practiceGroupService;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+	@Autowired
+	private TeacherDao teacherDao;
+
+	@ApiOperation(value = "教师端网管课活动排课")
+	@PostMapping("/createPracticeGroup")
+	public Object createPracticeGroup(@RequestBody PracticeGroupApplyDto practiceGroupApplyDto){
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed("用户信息获取失败");
+		}
+		PracticeGroupApplyBaseInfoDto applyBaseInfo = practiceGroupApplyDto.getPracticeGroupApplyBaseInfoDto();
+		Integer userId = sysUser.getId();
+		applyBaseInfo.setUserId(userId);
+		Teacher teacher = teacherDao.get(userId);
+		if(Objects.isNull(teacher)){
+			return failed("请指定指导老师!");
+		}
+		SysUser student = teacherDao.getUser(applyBaseInfo.getStudentId());
+		if(Objects.isNull(student)||Objects.isNull(student.getOrganId())){
+			return failed("学员信息异常");
+		}
+		applyBaseInfo.setOrganId(student.getOrganId());
+		for (CourseSchedule courseSchedule : practiceGroupApplyDto.getCourseSchedules()) {
+			courseSchedule.setEndClassTime(DateUtil.addMinutes(courseSchedule.getStartClassTime(), applyBaseInfo.getSingleClassMinutes()));
+		}
+		applyBaseInfo.setEducationalTeacherId(sysUser.getId());
+		return practiceGroupService.createActivityPracticeGroup(practiceGroupApplyDto);
+	}
+
+}

+ 1 - 5
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherVipGroupController.java

@@ -5,10 +5,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dao.VipGroupCategoryDao;
 import com.ym.mec.biz.dal.dao.VipGroupDefaultClassesUnitPriceDao;
-import com.ym.mec.biz.dal.dto.StudentVipDouble11Dto;
-import com.ym.mec.biz.dal.dto.VipGroupApplyBaseInfoDto;
-import com.ym.mec.biz.dal.dto.VipGroupApplyDto;
-import com.ym.mec.biz.dal.dto.VipGroupCostCountParamsDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.page.StudentManageQueryInfo;
 import com.ym.mec.biz.service.StudentManageService;
@@ -269,5 +266,4 @@ public class TeacherVipGroupController extends BaseController {
 		applyBaseInfo.setEducationalTeacherId(sysUser.getId());
 		return vipGroupService.createActivityVipGroup1(vipGroupApplyDto);
 	}
-
 }

+ 9 - 0
mec-web/src/main/java/com/ym/mec/web/controller/VipGroupActivityController.java

@@ -64,6 +64,15 @@ public class VipGroupActivityController extends BaseController {
         return succeed(vipGroupActivityService.get(id));
     }
 
+    @ApiOperation(value = "启用停用")
+    @GetMapping("/enable")
+    @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/enable')")
+    public Object enable(Integer id){
+        VipGroupActivity activity = vipGroupActivityService.get(id);
+        activity.setEnable(!activity.getEnable());
+        return succeed(vipGroupActivityService.update(activity));
+    }
+
     @ApiOperation(value = "分页查询活动方案")
     @GetMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/queryPage')")