Joburgess 5 年之前
父節點
當前提交
7ae3c56876
共有 24 個文件被更改,包括 667 次插入228 次删除
  1. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherSchoolDao.java
  3. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java
  4. 22 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVipGroupDetailDto.java
  5. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVipGroupShowListDto.java
  6. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  7. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleStudentPaymentService.java
  8. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleTeacherSalaryService.java
  9. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherSchoolService.java
  10. 20 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  11. 105 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  12. 92 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  13. 12 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherSchoolServiceImpl.java
  14. 86 175
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  15. 44 6
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  16. 2 2
      mec-biz/src/main/resources/config/mybatis/DemoGroupMapper.xml
  17. 3 0
      mec-biz/src/main/resources/config/mybatis/TeacherSchoolMapper.xml
  18. 30 14
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  19. 6 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherVipGroupController.java
  20. 66 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherVipSchoolController.java
  21. 4 0
      mec-util/src/main/java/com/ym/mec/util/collection/MapUtil.java
  22. 66 0
      mec-web/src/main/java/com/ym/mec/web/controller/TeacherVipSchoolController.java
  23. 9 0
      mec-web/src/main/java/com/ym/mec/web/controller/VipGroupManageController.java
  24. 1 1
      mec-web/src/main/resources/application.yml

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -39,6 +39,16 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 
     /**
      * @Author: Joburgess
+     * @Date: 2019/10/14
+     * @params [classDates, classGroupId]
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
+     * @describe 根据班级和上课日期获取课程计划
+     */
+    List<CourseSchedule> findByClassGroupAndDate(@Param("classDates") List<Date> classDates,
+                                                 @Param("classGroupId") Long classGroupId);
+
+    /**
+     * @Author: Joburgess
      * @Date: 2019/9/17
      * 根据日期获取学生当日排课信息
      */
@@ -204,5 +214,14 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      */
     CourseScheduleDto getCourseSchedules(@Param("courseScheduleId") Long courseScheduleId);
 
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/14
+     * @params [vipGroupId]
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
+     * @describe 获取vip课排课计划
+     */
+    List<CourseSchedule> findVipGroupCourseSchedules(@Param("vipGroupId") Long vipGroupId);
+
 
 }

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherSchoolDao.java

@@ -3,7 +3,17 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.biz.dal.entity.TeacherSchool;
 import com.ym.mec.common.dal.BaseDAO;
 
+import java.util.List;
+
 public interface TeacherSchoolDao extends BaseDAO<Long, TeacherSchool> {
 
-	
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/14
+     * @params [teacherId]
+     * @return java.util.List<com.ym.mec.biz.dal.entity.TeacherSchool>
+     * @describe 根据教师编号获取教学点信息
+     */
+    List<TeacherSchool> findByTeacherId(Long teacherId);
+
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java

@@ -166,4 +166,13 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
      * @describe 统计学生vip课未上课时费用
      */
     List<Map<Long,BigDecimal>> countSurplusCourseFee(Long vipGroupId);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/14
+     * @params [teacherId]
+     * @return int
+     * @describe 统计老师开启的vip课数
+     */
+    int countTeacherVipGroups(Long teacherId);
 }

+ 22 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVipGroupDetailDto.java

@@ -1,6 +1,5 @@
 package com.ym.mec.biz.dal.dto;
 
-import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -12,9 +11,31 @@ import java.util.List;
  */
 public class StudentVipGroupDetailDto extends StudentVipGroupShowListDto {
 
+    @ApiModelProperty(value = "授课地点")
+    private String address;
+
+    @ApiModelProperty(value = "教师vip课申请数量")
+    private Integer numberOfClasses;
+
     @ApiModelProperty(value = "课程列表",required = false)
     private List<CourseSchedule> courseSchedules;
 
+    public Integer getNumberOfClasses() {
+        return numberOfClasses;
+    }
+
+    public void setNumberOfClasses(Integer numberOfClasses) {
+        this.numberOfClasses = numberOfClasses;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
     public List<CourseSchedule> getCourseSchedules() {
         return courseSchedules;
     }

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

@@ -39,6 +39,9 @@ public class StudentVipGroupShowListDto {
     @ApiModelProperty(value = "学生数量", required = false)
     private Integer studentNum;
 
+    @ApiModelProperty(value = "教师编号")
+    private Integer teacherId;
+
     @ApiModelProperty(value = "教师名称",required = false)
     private String teacherName;
 
@@ -55,6 +58,14 @@ public class StudentVipGroupShowListDto {
 
     private String categoryName;
 
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
     public String getCategoryName() {
         return categoryName;
     }

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

@@ -110,6 +110,15 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
     void courseSwap(Long courseScheduleId1,Long courseScheduleId2);
 
     /**
+     * @Author: Joburgess
+     * @Date: 2019/10/14
+     * @params [day1, day2]
+     * @return void
+     * @describe 对调两天的课程
+     */
+    void courseSwapWithDay(Date day1,Date day2);
+
+    /**
      * 获取班级的课程计划
      *
      * @param classGroupList

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

@@ -5,4 +5,13 @@ import com.ym.mec.common.service.BaseService;
 
 public interface CourseScheduleStudentPaymentService extends BaseService<Long, CourseScheduleStudentPayment> {
 
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/14
+     * @params [vipGroupId, userId]
+     * @return int
+     * @describe 生成学生vip课单节课时收费信息
+     */
+    int createCourseScheduleStudentPaymentForVipGroup(Long vipGroupId,Long userId);
+
 }

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

@@ -1,8 +1,28 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.ym.mec.biz.dal.entity.VipGroup;
 import com.ym.mec.common.service.BaseService;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 public interface CourseScheduleTeacherSalaryService extends BaseService<Long, CourseScheduleTeacherSalary> {
 
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/14
+     * @params [vipGroup VIP课程信息,
+     * vipCourseSchedules 排课计划,
+     * onlineTeacherSalary 教师线上课酬,
+     * offlineTeacherSalary 教师线下课酬]
+     * @return int
+     * @describe 创建vip课教师课酬
+     */
+    int createCourseScheduleTeacherVipSalary(VipGroup vipGroup,
+                                             List<CourseSchedule> vipCourseSchedules,
+                                             BigDecimal onlineTeacherSalary,
+                                             BigDecimal offlineTeacherSalary);
+
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherSchoolService.java

@@ -3,6 +3,17 @@ package com.ym.mec.biz.service;
 import com.ym.mec.biz.dal.entity.TeacherSchool;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.List;
+
 public interface TeacherSchoolService extends BaseService<Long, TeacherSchool> {
 
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/14
+     * @params [teacherId]
+     * @return java.util.List<com.ym.mec.biz.dal.entity.TeacherSchool>
+     * @describe 根据教师编号获取教学点
+     */
+    List<TeacherSchool> findByTeacherId(Long teacherId);
+
 }

+ 20 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -10,7 +10,6 @@ import com.ym.mec.biz.dal.dto.CourseScheduleDto;
 import com.ym.mec.biz.dal.dto.TeacherAttendanceDto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseScheduleComplaints;
-import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.SysConfig;
 import com.ym.mec.biz.dal.enums.AuditStatusEnum;
 import com.ym.mec.biz.dal.enums.ParamEnum;
@@ -34,6 +33,7 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Service
 public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSchedule>  implements CourseScheduleService {
@@ -195,12 +195,23 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	 * @return
 	 */
 	private void checkCourseSchedule(List<CourseSchedule> courseSchedules){
-		Map<Date, List<CourseSchedule>> collect = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getClassDate));
+		List<Date> classDates = courseSchedules.stream().map(CourseSchedule::getClassDate).collect(Collectors.toList());
+		List<CourseSchedule> byClassGroupAndDate = courseScheduleDao.findByClassGroupAndDate(classDates, null);
+		List<CourseSchedule> collect3 = Stream.of(courseSchedules, byClassGroupAndDate).flatMap(Collection::stream).collect(Collectors.toList());
+		Map<Date, List<CourseSchedule>> collect = collect3.stream().collect(Collectors.groupingBy(CourseSchedule::getClassDate));
 		for(Date keyDate:collect.keySet()){
 			List<CourseSchedule> currentCourses=collect.get(keyDate);
 			Map<Date, List<CourseSchedule>> collect1 = currentCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getStartClassTime));
-			if(currentCourses.size()==collect1.size()){
+			if(currentCourses.size()==1&&currentCourses.size()==collect1.size()){
 				continue;
+			}else if(currentCourses.size()>1&&currentCourses.size()==collect1.size()){
+				ArrayList<CourseSchedule> collect2 = currentCourses
+						.stream()
+						.collect(Collectors.collectingAndThen(Collectors.toCollection(()
+								-> new TreeSet<>(Comparator.comparing(o -> o.getStartClassTime() + "-" + o.getEndClassTime()))), ArrayList::new));
+				if(collect2.size()!=currentCourses.size()){
+					throw new BizException("课程安排上存在在同一时间开课的课程");
+				}
 			}else{
 				for(Date keyDate2:collect1.keySet()){
 					List<CourseSchedule> currentCourses1=collect1.get(keyDate2);
@@ -223,20 +234,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				}
 			}
 		}
-		//课次创建
-//		Map<Integer, List<CourseSchedule>> classGroupByID = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getClassGroupId));
-//		List<Long> ids=new ArrayList<>();
-//		for (Integer key:classGroupByID.keySet()){
-//			ids.add(Long.valueOf(key));
-//		}
-//		Map<Integer, Integer> maxClassTimes = convertToMap(courseScheduleDao.getMaxClassTimeByClassIds(ids));
-//		courseSchedules.clear();
-//		for (Integer key:classGroupByID.keySet()){
-//			Integer maxClassTime = null == maxClassTimes.get(key) ? 0 : maxClassTimes.get(key);
-//			for(CourseSchedule courseSchedule:classGroupByID.get(key)){
-//				courseSchedules.add(courseSchedule);
-//			}
-//		}
 	}
 
 	/**
@@ -353,7 +350,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		courseScheduleDao.update(courseSchedules.get(1));
 	}
 
-    @Override
+	@Override
+	public void courseSwapWithDay(Date day1, Date day2) {
+		
+	}
+
+	@Override
     public List<CourseSchedule> findClassGroupCourseSchedules(List classGroupList) {
 		return courseScheduleDao.findClassGroupCourseSchedules(classGroupList);
     }

+ 105 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -1,23 +1,124 @@
 package com.ym.mec.biz.service.impl;
 
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
+import com.ym.mec.biz.dal.dao.VipGroupActivityDao;
+import com.ym.mec.biz.dal.dao.VipGroupDao;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment;
+import com.ym.mec.biz.dal.entity.VipGroup;
+import com.ym.mec.biz.dal.entity.VipGroupActivity;
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
+import com.ym.mec.biz.dal.enums.VipGroupActivityTypeEnum;
 import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Long, CourseScheduleStudentPayment>  implements CourseScheduleStudentPaymentService {
 	
 	@Autowired
 	private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
+	@Autowired
+	private VipGroupDao vipGroupDao;
+	@Autowired
+	private VipGroupActivityDao vipGroupActivityDao;
+	@Autowired
+	private CourseScheduleDao courseScheduleDao;
 
 	@Override
 	public BaseDAO<Long, CourseScheduleStudentPayment> getDAO() {
 		return courseScheduleStudentPaymentDao;
 	}
-	
+
+	@Override
+	public int createCourseScheduleStudentPaymentForVipGroup(Long vipGroupId, Long userId) {
+		VipGroup vipGroupApplyBaseInfoDto=vipGroupDao.get(vipGroupId);
+
+		if(Objects.isNull(vipGroupApplyBaseInfoDto)){
+			throw new BizException("未找到相关vip课程");
+		}
+
+		//获取活动信息
+		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroupId.intValue());
+
+		List<CourseSchedule> vipGroupCourseSchedules=courseScheduleDao.findVipGroupCourseSchedules(vipGroupId);
+		if(CollectionUtils.isEmpty(vipGroupCourseSchedules)){
+			throw new BizException("为获取到排课信息");
+		}
+		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.setCourseScheduleId(courseSchedules.get(i).getId());
+
+				if (teachModeEnum == TeachModeEnum.ONLINE) {
+					//学生线上单节课应缴费计算
+					switch (vipGroupActivity.getType()) {
+						case BASE_ACTIVITY:
+							courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice());
+							break;
+						case DISCOUNT:
+							courseScheduleStudentPayment.setExpectPrice(
+									vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice().multiply(
+											new BigDecimal(vipGroupActivity.getAttribute1())
+									)
+							);
+							break;
+						case GIVE_CLASS:
+							if (vipGroupActivity.getType() == VipGroupActivityTypeEnum.GIVE_CLASS
+									&& vipGroupApplyBaseInfoDto.getGiveTeachMode() == teachModeEnum
+									&& i >= Integer.parseInt(vipGroupActivity.getAttribute1())) {
+								courseScheduleStudentPayment.setExpectPrice(new BigDecimal(0));
+							} else {
+								courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice());
+							}
+							break;
+						default:
+							throw new BizException("活动类型错误!");
+					}
+				}else{
+					//学生线下单节课应缴费计算
+					switch (vipGroupActivity.getType()) {
+						case BASE_ACTIVITY:
+							courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice());
+							break;
+						case DISCOUNT:
+							courseScheduleStudentPayment.setExpectPrice(
+									vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice().multiply(
+											new BigDecimal(vipGroupActivity.getAttribute1())
+									)
+							);
+							break;
+						case GIVE_CLASS:
+							if (vipGroupActivity.getType() == VipGroupActivityTypeEnum.GIVE_CLASS
+									&& vipGroupApplyBaseInfoDto.getGiveTeachMode() == teachModeEnum
+									&& i >= Integer.parseInt(vipGroupActivity.getAttribute1())) {
+								courseScheduleStudentPayment.setExpectPrice(new BigDecimal(0));
+							} else {
+								courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice());
+							}
+							break;
+						default:
+							throw new BizException("活动类型错误!");
+					}
+					courseScheduleStudentPayments.add(courseScheduleStudentPayment);
+				}
+			}
+		}
+		return courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
+	}
 }

+ 92 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -1,23 +1,110 @@
 package com.ym.mec.biz.service.impl;
 
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
+import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
-import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.ym.mec.biz.dal.dao.TeacherDefaultVipGroupSalaryDao;
+import com.ym.mec.biz.dal.dao.VipGroupActivityDao;
+import com.ym.mec.biz.dal.dto.VipGroupSalarySettlementDto;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
+import com.ym.mec.biz.dal.enums.TeachTypeEnum;
+import com.ym.mec.biz.dal.enums.VipGroupActivityTypeEnum;
 import com.ym.mec.biz.service.CourseScheduleTeacherSalaryService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long, CourseScheduleTeacherSalary>  implements CourseScheduleTeacherSalaryService {
 	
 	@Autowired
 	private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
+	@Autowired
+	private TeacherDefaultVipGroupSalaryDao teacherDefaultVipGroupSalaryDao;
+	@Autowired
+	private VipGroupActivityDao vipGroupActivityDao;
 
 	@Override
 	public BaseDAO<Long, CourseScheduleTeacherSalary> getDAO() {
 		return courseScheduleTeacherSalaryDao;
 	}
-	
+
+	@Override
+	public int createCourseScheduleTeacherVipSalary(VipGroup vipGroup,
+													List<CourseSchedule> vipCourseSchedules,
+													BigDecimal onlineTeacherSalary,
+													BigDecimal offlineTeacherSalary) {
+		TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(vipGroup.getUserId().longValue(),
+				vipGroup.getVipGroupCategoryId());
+
+		//获取活动信息
+		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
+		VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
+
+		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries=new ArrayList<>();
+		Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroupByTeachMode = vipCourseSchedules.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++){
+				//创建教师课程薪水记录
+				CourseScheduleTeacherSalary courseScheduleTeacherSalary=new CourseScheduleTeacherSalary();
+				courseScheduleTeacherSalary.setCourseScheduleId(courseSchedules.get(i).getId());
+				courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
+				courseScheduleTeacherSalary.setUserId(vipGroup.getUserId());
+
+				if(teachModeEnum==TeachModeEnum.ONLINE){
+					if(vipGroupActivity.getType()== VipGroupActivityTypeEnum.GIVE_CLASS
+							&&vipGroup.getGiveTeachMode()==teachModeEnum
+							&&i>=Integer.parseInt(vipGroupActivity.getAttribute1())
+							&&"0".equals(vipGroupActivity.getGiveClassPaySalaryFlag())){
+						courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(0));
+					}else {
+						//教师课酬线上单课酬计算
+						switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
+							case TEACHER_DEFAULT:
+								courseScheduleTeacherSalary.setExpectSalary(teacherDefaultVipGroupSalary.getOnlineClassesSalary());
+								break;
+							case RATIO_DISCOUNT:
+								courseScheduleTeacherSalary.setExpectSalary(onlineTeacherSalary.multiply(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue()));
+								break;
+							case FIXED_SALARY:
+								courseScheduleTeacherSalary.setExpectSalary(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue());
+								break;
+							default:
+								throw new BizException("未指定课酬结算标准!");
+						}
+					}
+				}else{
+					//教师线下单课酬计算
+					switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
+						case TEACHER_DEFAULT:
+							courseScheduleTeacherSalary.setExpectSalary(teacherDefaultVipGroupSalary.getOfflineClassesSalary());
+							break;
+						case RATIO_DISCOUNT:
+							courseScheduleTeacherSalary.setExpectSalary(offlineTeacherSalary.multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()));
+							break;
+						case FIXED_SALARY:
+							courseScheduleTeacherSalary.setExpectSalary(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue());
+							break;
+						default:
+							throw new BizException("未指定课酬结算标准!");
+					}
+				}
+				courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
+			}
+		}
+		return courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaries);
+	}
 }

+ 12 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherSchoolServiceImpl.java

@@ -4,11 +4,15 @@ import com.ym.mec.biz.dal.dao.TeacherSchoolDao;
 import com.ym.mec.biz.dal.entity.TeacherSchool;
 import com.ym.mec.biz.service.TeacherSchoolService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Objects;
+
 @Service
 public class TeacherSchoolServiceImpl extends BaseServiceImpl<Long, TeacherSchool> implements TeacherSchoolService {
 	
@@ -19,5 +23,12 @@ public class TeacherSchoolServiceImpl extends BaseServiceImpl<Long, TeacherSchoo
 	public BaseDAO<Long, TeacherSchool> getDAO() {
 		return teacherSchoolDao;
 	}
-	
+
+	@Override
+	public List<TeacherSchool> findByTeacherId(Long teacherId) {
+		if(Objects.isNull(teacherId)){
+			throw new BizException("请指定教师");
+		}
+		return teacherSchoolDao.findByTeacherId(teacherId);
+	}
 }

+ 86 - 175
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -8,9 +8,7 @@ import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.*;
-import com.ym.mec.biz.service.CourseScheduleService;
-import com.ym.mec.biz.service.SysUserCashAccountService;
-import com.ym.mec.biz.service.VipGroupService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupMember;
 import com.ym.mec.common.entity.ImGroupModel;
@@ -68,14 +66,17 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
     @Autowired
 	private ClassGroupTeacherSalaryDao classGroupTeacherSalaryDao;
-    @Autowired
-	private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
+
     @Autowired
 	private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
     @Autowired
 	private ImFeignService imFeignService;
     @Autowired
 	private SubjectDao subjectDao;
+    @Autowired
+	private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
+    @Autowired
+	private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
 
 	@Override
 	public BaseDAO<Long, VipGroup> getDAO() {
@@ -107,8 +108,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
         //获取活动信息
         VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId().intValue());
-		VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
-		
+
 		//生成vip课信息
 		VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo();
 		List<String> bySubIds = subjectDao.findBySubIds(vipGroupApplyBaseInfoDto.getSubjectIdList());
@@ -119,6 +119,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		vipGroupApplyBaseInfoDto.setTotalPrice(countVipGroupPredictFee(vipGroupApplyBaseInfoDto,
 				vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice(),
 				vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice()).get("totalPrice"));
+		vipGroupApplyBaseInfoDto.setStatus(VipGroupStatusEnum.APPLYING);
 		vipGroupDao.insert(vipGroupApplyBaseInfoDto);
 
 		//获取vip课类型信息
@@ -167,131 +168,18 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
                 &&courseSchedule.getStartClassTime().before(vipGroupActivity.getCoursesStartTime())){
 		        throw new BizException("课时安排时间超出范围!");
             }
+		    courseSchedule.setTeacherId(vipGroupApplyBaseInfoDto.getUserId().longValue());
+			courseSchedule.setStatus(CourseStatusEnum.NOT_START);
 		    courseSchedule.setType(CourseSchedule.CourseScheduleType.VIP);
 			courseSchedule.setClassGroupId(classGroup.getId());
 		});
 		courseScheduleService.batchAddCourseSchedule(vipGroup.getCourseSchedules());
 
-		//创建老师与学生费用相关记录
-		TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(vipGroupApplyBaseInfoDto.getUserId().longValue(),
-				vipGroupApplyBaseInfoDto.getVipGroupCategoryId());
-
-		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries=new ArrayList<>();
-		List<CourseScheduleStudentPayment> courseScheduleStudentPayments=new ArrayList<>();
-		Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroupByTeachMode = vipGroup.getCourseSchedules().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++){
-				//创建教师课程薪水记录
-				CourseScheduleTeacherSalary courseScheduleTeacherSalary=new CourseScheduleTeacherSalary();
-				courseScheduleTeacherSalary.setCourseScheduleId(courseSchedules.get(i).getId());
-				courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
-				courseScheduleTeacherSalary.setUserId(vipGroupApplyBaseInfoDto.getUserId());
-
-				//创建学生课程应缴费记录
-				CourseScheduleStudentPayment courseScheduleStudentPayment=new CourseScheduleStudentPayment();
-				courseScheduleStudentPayment.setCourseScheduleId(courseSchedules.get(i).getId());
-
-				if(teachModeEnum==TeachModeEnum.ONLINE){
-					if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.GIVE_CLASS
-							&&vipGroupApplyBaseInfoDto.getGiveTeachMode()==teachModeEnum
-							&&i>=Integer.parseInt(vipGroupActivity.getAttribute1())
-							&&"0".equals(vipGroupActivity.getGiveClassPaySalaryFlag())){
-						courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(0));
-					}else {
-						//教师课酬线上单课酬计算
-						switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
-							case TEACHER_DEFAULT:
-								courseScheduleTeacherSalary.setExpectSalary(teacherDefaultVipGroupSalary.getOnlineClassesSalary());
-								break;
-							case RATIO_DISCOUNT:
-								courseScheduleTeacherSalary.setExpectSalary(vipGroupApplyBaseInfoDto
-										.getOnlineTeacherSalary()
-										.multiply(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue()));
-								break;
-							case FIXED_SALARY:
-								courseScheduleTeacherSalary.setExpectSalary(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue());
-								break;
-							default:
-								throw new BizException("未指定课酬结算标准!");
-						}
-					}
-
-					//学生线上单节课应缴费计算
-					switch (vipGroupActivity.getType()){
-						case BASE_ACTIVITY:
-							courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice());
-							break;
-						case DISCOUNT:
-							courseScheduleStudentPayment.setExpectPrice(
-									vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice().multiply(
-											new BigDecimal(vipGroupActivity.getAttribute1())
-									)
-							);
-							break;
-						case GIVE_CLASS:
-							if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.GIVE_CLASS
-									&&vipGroupApplyBaseInfoDto.getGiveTeachMode()==teachModeEnum
-									&&i>=Integer.parseInt(vipGroupActivity.getAttribute1())){
-								courseScheduleStudentPayment.setExpectPrice(new BigDecimal(0));
-							}else {
-								courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice());
-							}
-							break;
-						default:
-							throw new BizException("活动类型错误!");
-					}
-				}else{
-					//教师线下单课酬计算
-					switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
-						case TEACHER_DEFAULT:
-							courseScheduleTeacherSalary.setExpectSalary(teacherDefaultVipGroupSalary.getOfflineClassesSalary());
-							break;
-						case RATIO_DISCOUNT:
-							courseScheduleTeacherSalary.setExpectSalary(vipGroupApplyBaseInfoDto
-									.getOfflineTeacherSalary()
-									.multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()));
-							break;
-						case FIXED_SALARY:
-							courseScheduleTeacherSalary.setExpectSalary(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue());
-							break;
-						default:
-							throw new BizException("未指定课酬结算标准!");
-					}
-				}
-
-				//学生线下单节课应缴费计算
-				switch (vipGroupActivity.getType()){
-					case BASE_ACTIVITY:
-						courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice());
-						break;
-					case DISCOUNT:
-						courseScheduleStudentPayment.setExpectPrice(
-								vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice().multiply(
-										new BigDecimal(vipGroupActivity.getAttribute1())
-								)
-						);
-						break;
-					case GIVE_CLASS:
-						if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.GIVE_CLASS
-								&&vipGroupApplyBaseInfoDto.getGiveTeachMode()==teachModeEnum
-								&&i>=Integer.parseInt(vipGroupActivity.getAttribute1())){
-							courseScheduleStudentPayment.setExpectPrice(new BigDecimal(0));
-						}else {
-							courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice());
-						}
-						break;
-					default:
-						throw new BizException("活动类型错误!");
-				}
-				courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
-				courseScheduleStudentPayments.add(courseScheduleStudentPayment);
-			}
-		}
-		courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
-		courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaries);
+		//创建老师单节课课酬信息
+		courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(vipGroupApplyBaseInfoDto,
+				vipGroup.getCourseSchedules(),
+				vipGroupApplyBaseInfoDto.getOnlineTeacherSalary(),
+				vipGroupApplyBaseInfoDto.getOfflineTeacherSalary());
 	}
 
 	@Override
@@ -428,7 +316,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.isNull(vipGroupId)){
 			throw new BizException("请指定vip课程");
 		}
-		return vipGroupDao.getVipGroupDetail(vipGroupId);
+        StudentVipGroupDetailDto vipGroupDetail = vipGroupDao.getVipGroupDetail(vipGroupId);
+        vipGroupDetail.setNumberOfClasses(vipGroupDao.countTeacherVipGroups(vipGroupDetail.getTeacherId().longValue()));
+        return vipGroupDetail;
 	}
 
 	@Override
@@ -474,52 +364,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         return new VipGroupCostCountDto(null,teacherSalary);
     }
 
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) {
-	    SysUser user = sysUserFeignService.queryUserInfo();
-        VipGroup vipGroup = vipGroupDao.get(vipGroupBuyParams.getVipGroupId());
-
-        if(vipGroup.getStatus()!=VipGroupStatusEnum.APPLYING){
-            throw new BizException("该课程已结束报名!");
-        }
-
-        VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
-        StudentPaymentOrder studentPaymentOrder=new StudentPaymentOrder();
-        studentPaymentOrder.setUserId(user.getId());
-        String orderNo=StringUtils.join(new String[]{user.getId().toString(),String.valueOf(System.currentTimeMillis())});
-        studentPaymentOrder.setOrderNo(orderNo);
-        studentPaymentOrder.setType(OrderTypeEnum.SMALL_CLASS_TO_BUY);
-        studentPaymentOrder.setExpectAmount(countVipGroupPredictFee(vipGroup,vipGroup.getOnlineClassesUnitPrice(),vipGroup.getOfflineClassesUnitPrice()).get("totalPrice"));
-        if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.DISCOUNT){
-            studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount().multiply(new BigDecimal(vipGroupActivity.getAttribute1())));
-        }else{
-            studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount());
-        }
-        VipGroupClassGroupMapper vipGroupClassGroupMapper = vipGroupClassGroupMapperDao.findByVipGroupId(vipGroup.getId());
-        studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString());
-        studentPaymentOrder.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId());
-        studentPaymentOrderDao.insert(studentPaymentOrder);
-
-        StudentVipGroupPayment studentVipGroupPayment=new StudentVipGroupPayment();
-        studentVipGroupPayment.setUserId(user.getId());
-		studentVipGroupPayment.setVipGroupId(vipGroup.getId());
-		studentVipGroupPayment.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId());
-        studentVipGroupPayment.setStudentPaymentOrderId(studentPaymentOrder.getId());
-        studentVipGroupPaymentDao.insert(studentVipGroupPayment);
-
-		ClassGroup classGroup = classGroupDao.get(vipGroupClassGroupMapper.getClassGroupId());
-		int classStudents = classGroupDao.countClassStudent(vipGroupClassGroupMapper.getClassGroupId().longValue());
-		if(classGroup.getExpectStudentNum()==classStudents){
-			vipGroup.setStatus(VipGroupStatusEnum.FINISH);
-			vipGroupDao.update(vipGroup);
-		}
-		classGroup.setStudentNum(classGroup.getStudentNum()+1);
-		classGroupDao.update(classGroup);
-
-		//生成回调地址
-    }
-
     /**
      * @Author: Joburgess
      * @Date: 2019/10/2
@@ -620,11 +464,78 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         return results;
     }
 
+	@Transactional(rollbackFor = Exception.class)
 	@Override
+	public void buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		VipGroup vipGroup = vipGroupDao.get(vipGroupBuyParams.getVipGroupId());
+
+		if(vipGroup.getStatus()!=VipGroupStatusEnum.APPLYING){
+			throw new BizException("该课程已结束报名!");
+		}
+
+		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
+		StudentPaymentOrder studentPaymentOrder=new StudentPaymentOrder();
+		studentPaymentOrder.setUserId(user.getId());
+		String orderNo=StringUtils.join(new String[]{user.getId().toString(),String.valueOf(System.currentTimeMillis())});
+		studentPaymentOrder.setOrderNo(orderNo);
+		studentPaymentOrder.setType(OrderTypeEnum.SMALL_CLASS_TO_BUY);
+		studentPaymentOrder.setExpectAmount(countVipGroupPredictFee(vipGroup,vipGroup.getOnlineClassesUnitPrice(),vipGroup.getOfflineClassesUnitPrice()).get("totalPrice"));
+		if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.DISCOUNT){
+			studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount().multiply(new BigDecimal(vipGroupActivity.getAttribute1())));
+		}else{
+			studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount());
+		}
+		VipGroupClassGroupMapper vipGroupClassGroupMapper = vipGroupClassGroupMapperDao.findByVipGroupId(vipGroup.getId());
+		studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString());
+		studentPaymentOrder.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId());
+		studentPaymentOrderDao.insert(studentPaymentOrder);
+
+		//生成回调地址
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public void orderCallback(String callbackParams) {
 		/*
 		根据回调信息调整订单状态及vip课程状态等相关信息
 		 */
+		Long vipGroupId=1L,userId=1L;
+
+		VipGroup vipGroup = vipGroupDao.get(vipGroupId);
+
+		if(vipGroup.getStatus()!=VipGroupStatusEnum.APPLYING){
+			throw new BizException("该课程已结束报名!");
+		}
+
+		//生成学生单课缴费信息
+		courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentForVipGroup(vipGroupId,userId);
+
+		VipGroupClassGroupMapper vipGroupClassGroupMapper = vipGroupClassGroupMapperDao.findByVipGroupId(vipGroupId);
+
+		//更新订单状态
+		StudentPaymentOrder studentPaymentOrder=studentPaymentOrderDao.findByStudentVipGroup(vipGroupId,userId);
+		studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
+		studentPaymentOrderDao.update(studentPaymentOrder);
+
+		//生成缴费明细
+		StudentVipGroupPayment studentVipGroupPayment=new StudentVipGroupPayment();
+		studentVipGroupPayment.setUserId(userId.intValue());
+		studentVipGroupPayment.setVipGroupId(vipGroupId);
+		studentVipGroupPayment.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId());
+		studentVipGroupPayment.setStudentPaymentOrderId(studentPaymentOrder.getId());
+		studentVipGroupPaymentDao.insert(studentVipGroupPayment);
+
+		//将学生加入到班级,更新班级报名状态及人数信息
+		ClassGroup classGroup = classGroupDao.get(vipGroupClassGroupMapper.getClassGroupId());
+		int classStudents = classGroupDao.countClassStudent(vipGroupClassGroupMapper.getClassGroupId().longValue());
+		if(classGroup.getExpectStudentNum()==classStudents){
+			vipGroup.setStatus(VipGroupStatusEnum.FINISH);
+			vipGroupDao.update(vipGroup);
+		}
+		classGroup.setStudentNum(classGroup.getStudentNum()+1);
+		classGroupDao.update(classGroup);
+
 	}
 
 	@Override
@@ -769,7 +680,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     		return;
 		}
 		List<Map<Long, BigDecimal>> maps = vipGroupDao.countSurplusCourseFee(vipGroupId);
-    	if(CollectionUtils.isEmpty(maps)){
+    	if(CollectionUtils.isEmpty(maps)||(maps.size()==1&&Objects.isNull(maps.get(0)))){
 			vipGroup.setStatus(VipGroupStatusEnum.CANCEL);
 			vipGroupDao.update(vipGroup);
 			return;

+ 44 - 6
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -67,16 +67,16 @@
         </selectKey>
         -->
         INSERT INTO course_schedule
-        (id_,class_group_id_,status_,subsidy_,class_date_,start_class_time_,end_class_time_,teacher_id_,actual_teacher_id_,create_time_,update_time_,type_,name_)
-        VALUES(#{id},#{classGroupId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{subsidy},#{classDate},#{startClassTime},#{endClassTime},#{teacherId},#{actualTeacherId},now(),now(),#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{name})
+        (id_,class_group_id_,status_,subsidy_,class_date_,start_class_time_,end_class_time_,teacher_id_,actual_teacher_id_,create_time_,update_time_,type_,name_,teach_mode_)
+        VALUES(#{id},#{classGroupId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{subsidy},#{classDate},#{startClassTime},#{endClassTime},#{teacherId},#{actualTeacherId},now(),now(),#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{name},#{teachMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
     </insert>
 
-    <insert id="batchAddCourseSchedules" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
+    <insert id="batchAddCourseSchedules" parameterType="java.util.List" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
         INSERT INTO course_schedule
-        (id_,class_group_id_,status_,subsidy_,class_date_,start_class_time_,end_class_time_,teacher_id_,actual_teacher_id_,create_time_,update_time_,type_,name_)
+        (id_,class_group_id_,status_,subsidy_,class_date_,start_class_time_,end_class_time_,teacher_id_,actual_teacher_id_,create_time_,update_time_,type_,name_,teach_mode_)
         VALUE
         <foreach collection="list" item="course" separator=",">
-            (#{course.id},#{course.classGroupId},#{course.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.subsidy},#{course.classDate},#{course.startClassTime},#{course.endClassTime},#{course.teacherId},#{course.actualTeacherId},now(),now(),#{course.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.name})
+            (#{course.id},#{course.classGroupId},#{course.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.subsidy},#{course.classDate},#{course.startClassTime},#{course.endClassTime},#{course.teacherId},#{course.actualTeacherId},now(),now(),#{course.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.name},#{course.teachMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
         </foreach>
     </insert>
 
@@ -300,7 +300,7 @@
 	        s.name_ school_name_,
 	        ta.sign_in_status_,
 	        ta.sign_out_status_,
-	        cg.teach_mode_
+	        cs.teach_mode_
         FROM
             course_schedule cs
             LEFT JOIN sys_user su ON cs.teacher_id_=su.id_
@@ -580,4 +580,42 @@
             LEFT JOIN sys_user su ON sa.user_id_=su.id_
             WHERE sa.course_schedule_id_=#{courseScheduleId}
     </select>
+    <select id="findVipGroupCourseSchedules" resultMap="CourseSchedule">
+      SELECT
+            cs.*
+        FROM
+            vip_group_class_group_mapper vgcgm
+            LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
+        WHERE
+            vgcgm.vip_group_id_ =#{vipGroupId}
+    </select>
+    <select id="findByClassGroupAndDate" resultMap="CourseSchedule">
+        SELECT
+        id_,
+        class_group_id_,
+        status_,
+        subsidy_,
+        class_date_,
+        CONCAT(class_date_,' ',start_class_time_) start_class_time_,
+        CONCAT(class_date_,' ',end_class_time_) end_class_time_,
+        teacher_id_,
+        actual_teacher_id_,
+        create_time_,
+        update_time_,
+        type_,name_,
+        teach_mode_
+        FROM
+            course_schedule
+        <where>
+            <if test="classGroupId!=null">
+                AND class_group_id_ = #{classGroupId}
+            </if>
+            <if test="classDates!=null">
+                AND class_date_ IN
+                <foreach collection="classDates" item="classDate" open="(" close=")" separator=",">
+                    #{classDate}
+                </foreach>
+            </if>
+        </where>
+    </select>
 </mapper>

+ 2 - 2
mec-biz/src/main/resources/config/mybatis/DemoGroupMapper.xml

@@ -156,10 +156,10 @@ create_time_ = #{createTime},
 				AND FIND_IN_SET(dg.subject_id_,#{subjectIds})
 			</if>
 			<if test="startTime!=null and endTime==null">
-				AND CONCAT(dgcp.course_date_,' ',dgcp.start_time_)=#{startTime}
+				AND CONCAT(dgcp.course_date_,' ',dgcp.start_time_)&gt;t=#{startTime}
 			</if>
 			<if test="startTime!=null and endTime!=null">
-				AND (CONCAT(dgcp.course_date_,' ',dgcp.start_time_) BETWEEN #{startTime} AND #{endTime})
+				AND (CONCAT(dgcp.course_date_,' ',dgcp.start_time_) BETWEEN DATE_FORMAT(#{startTime},'%Y-%m-%d %H:%i') AND DATE_FORMAT(#{endTime},'%Y-%m-%d %H:%i'))
 			</if>
 		</where>
 	</sql>

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/TeacherSchoolMapper.xml

@@ -85,4 +85,7 @@
     <select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM teacher_school
 	</select>
+    <select id="findByTeacherId" resultMap="TeacherSchool">
+      SELECT * FROM teacher_school WHERE user_id_=#{teacherId} ORDER BY id_
+    </select>
 </mapper>

+ 30 - 14
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -8,6 +8,7 @@
 
     <resultMap type="com.ym.mec.biz.dal.entity.VipGroup" id="VipGroup">
         <result column="id_" property="id"/>
+        <result column="name_" property="name"/>
         <result column="user_id_" property="userId"/>
         <result column="username_" property="userName"/>
         <result column="single_class_minutes_" property="singleClassMinutes"/>
@@ -40,7 +41,6 @@
     <resultMap id="vipGroupManageDetailDto" type="com.ym.mec.biz.dal.dto.VipGroupManageDetailDto" extends="VipGroup">
         <result property="studentNum" column="student_num_"/>
         <result property="subjectIdList" column="subject_id_list_"/>
-        <result property="latestClassTime" column="current_class_times_"/>
         <result property="categoryName" column="category_name_"/>
         <result column="teacher_school_name_" property="teacherSchoolName"/>
         <!--<collection property="students" ofType="com.ym.mec.auth.api.entity.SysUser" column="student_id_">-->
@@ -50,6 +50,7 @@
     </resultMap>
 
     <resultMap id="studentVipGroupDetailDto" type="com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto" extends="studentVipGroup">
+        <result column="address_" property="address"/>
         <collection property="courseSchedules" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule" column="cs.id_"/>
     </resultMap>
 
@@ -63,6 +64,7 @@
         <result column="total_price_" property="totalPrice"/>
         <result column="expect_student_num_" property="expectStudentNum"/>
         <result column="student_num_" property="studentNum"/>
+        <result column="user_id_" property="teacherId"/>
         <result column="teacher_name_" property="teacherName"/>
         <result column="introduction_" property="introduction"/>
         <result column="avatar_" property="avatar"/>
@@ -140,8 +142,8 @@
         </selectKey>
         -->
         INSERT INTO vip_group
-        (id_,user_id_,single_class_minutes_,payment_expire_date_,courses_expire_date_,create_time_,update_time_,teacher_school_id_,online_classes_num_,offline_classes_num_,registration_start_time_,organ_id_list_,vip_group_activity_id_,status_,online_classes_unit_price_,offline_classes_unit_price_,total_price_,give_teach_mode_)
-        VALUES(#{id},#{userId},#{singleClassMinutes},#{paymentExpireDate},#{coursesExpireDate},now(),now(),#{teacherSchoolId},#{onlineClassesNum},#{offlineClassesNum},#{registrationStartTime},#{organIdList},#{vipGroupActivityId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{onlineClassesUnitPrice},#{offlineClassesUnitPrice},#{totalPrice},#{giveTeachMode})
+        (id_,user_id_,single_class_minutes_,payment_expire_date_,courses_expire_date_,create_time_,update_time_,teacher_school_id_,online_classes_num_,offline_classes_num_,registration_start_time_,name_,organ_id_list_,vip_group_activity_id_,status_,online_classes_unit_price_,offline_classes_unit_price_,total_price_,give_teach_mode_,vip_group_category_id_)
+        VALUES(#{id},#{userId},#{singleClassMinutes},#{paymentExpireDate},#{coursesExpireDate},now(),now(),#{teacherSchoolId},#{onlineClassesNum},#{offlineClassesNum},#{registrationStartTime},#{name},#{organIdList},#{vipGroupActivityId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{onlineClassesUnitPrice},#{offlineClassesUnitPrice},#{totalPrice},#{giveTeachMode},#{vipGroupCategoryId})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -176,7 +178,7 @@
                 registration_start_time_ = #{registrationStartTime},
             </if>
             <if test="organIdList!=null">
-                organ_id_list_=#{organIdList}
+                organ_id_list_=#{organIdList},
             </if>
             <if test="auditStatus != null">
                 audit_status_ = #{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
@@ -187,7 +189,7 @@
             <if test="vipGroupActivityId != null">
                 vip_group_activity_id_ = #{vipGroupActivityId},
             </if>
-            <if test="status_ != null">
+            <if test="status != null">
                 status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
             <if test="onlineClassesUnitPrice != null">
@@ -224,11 +226,15 @@
 
     <sql id="studentVipGroupQueryCondition">
         <where>
+            vg.status_!=3
             <if test="subjectId!=null">
-                FIND_IN_SET(#{subjectId},cg.subject_id_list_)
+               AND FIND_IN_SET(#{subjectId},cg.subject_id_list_)
+            </if>
+            <if test="classType!=null and classType.toString()=='0'.toString()">
+                AND vg.offline_classes_num_>0
             </if>
-            <if test="classType!=null">
-                AND cg.teach_mode_=#{classType}
+            <if test="classType!=null and classType.toString()=='1'.toString()">
+                AND vg.online_classes_num_>0
             </if>
             <if test="search!=null">
                 AND vg.name_ like concat('%',#{search},'%')
@@ -258,9 +264,8 @@
             vip_group vg
             LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
             LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
-            LEFT JOIN class_group_teacher_mapper cgtm ON vgcgm.class_group_id_=cgtm.class_group_id_
-            LEFT JOIN teacher t ON cgtm.user_id_=t.id_
-            LEFT JOIN sys_user su ON cgtm.user_id_=su.id_
+            LEFT JOIN teacher t ON vg.user_id_=t.id_
+            LEFT JOIN sys_user su ON vg.user_id_=su.id_
             LEFT JOIN vip_group_activity vga ON vg.vip_group_activity_id_=vga.id_
             LEFT JOIN vip_group_category vgc ON vg.vip_group_category_id_=vgc.id_
             <include refid="studentVipGroupQueryCondition"/>
@@ -344,18 +349,22 @@
     <select id="getVipGroupDetail" resultMap="studentVipGroupDetailDto">
         SELECT
             vg.*,
+            cg.expect_student_num_,
+            cg.student_num_,
             su.username_ teacher_name_,
             su.avatar_,
             t.introduction_,
             cs.id_ course_id_,
+            s.name_ address_,
             cs.*
         FROM
             vip_group vg
             LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
+            LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
             LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
-            LEFT JOIN class_group_teacher_mapper cgtm ON vgcgm.class_group_id_=cgtm.class_group_id_
-            LEFT JOIN teacher t ON cgtm.user_id_=t.id_
-          LEFT JOIN sys_user su ON cgtm.user_id_=su.id_
+	        LEFT JOIN school s ON vg.teacher_school_id_=s.id_
+            LEFT JOIN teacher t ON vg.user_id_=t.id_
+          LEFT JOIN sys_user su ON vg.user_id_=su.id_
         WHERE vg.id_=#{vipGroupId}
     </select>
     <select id="countSurplusClassTimes" resultType="java.util.Map">
@@ -514,4 +523,11 @@
             WHERE vg.id_=#{vipGroupId} AND cs.status_!='OVER'
         GROUP BY cssp.user_id_
     </select>
+    <select id="countTeacherVipGroups" resultType="int">
+        SELECT
+            COUNT( * )
+        FROM
+            vip_group
+        WHERE user_id_=#{teacherId} AND status_!=3
+    </select>
 </mapper>

+ 6 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherVipGroupController.java

@@ -14,6 +14,8 @@ 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;
+
 /**
  * @Author Joburgess
  * @Date 2019/9/21
@@ -33,7 +35,11 @@ public class TeacherVipGroupController extends BaseController {
     @PostMapping("/vipGroupApply")
     public Object vipGroupApply(@RequestBody VipGroupApplyDto vipGroupApplyDto){
         SysUser user = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(user)){
+            return failed("请登录");
+        }
         vipGroupApplyDto.getVipGroupApplyBaseInfo().setTeacherId(Long.valueOf(user.getId()));
+        vipGroupApplyDto.getVipGroupApplyBaseInfo().setOrganIdList(user.getOrganId().toString());
         vipGroupService.createVipGroup(vipGroupApplyDto);
         return succeed();
     }

+ 66 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherVipSchoolController.java

@@ -0,0 +1,66 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.biz.dal.entity.TeacherSchool;
+import com.ym.mec.biz.service.TeacherSchoolService;
+import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/14
+ */
+@Api(value = "教师vip课教学点服务")
+@RequestMapping("teacherVipSchool")
+@RestController
+public class TeacherVipSchoolController extends BaseController {
+
+    @Autowired
+    private TeacherSchoolService teacherSchoolService;
+
+    @ApiOperation("单查询")
+    @GetMapping(value = "/query")
+    public Object query(Long id) {
+        return succeed(teacherSchoolService.get(id));
+    }
+
+    @ApiOperation("根据教师编号获取教学点")
+    @GetMapping(value = "/queryAll")
+    public Object queryAll(Long teacherId) {
+        return succeed(teacherSchoolService.findByTeacherId(teacherId));
+    }
+
+    @ApiOperation("新增")
+    @PostMapping(value = "/add")
+    public Object add(TeacherSchool teacherSchool) {
+        Date date = new Date();
+        teacherSchool.setCreateTime(date);
+        teacherSchool.setUpdateTime(date);
+        teacherSchoolService.insert(teacherSchool);
+        return succeed();
+    }
+
+    @ApiOperation("修改")
+    @PostMapping(value = "/update")
+    public Object update(TeacherSchool teacherSchool) {
+        Date date = new Date();
+        teacherSchool.setUpdateTime(date);
+        teacherSchoolService.update(teacherSchool);
+        return succeed();
+    }
+
+    @ApiOperation("删除")
+    @PostMapping(value = "/delete")
+    public Object delete(Long id) {
+        teacherSchoolService.delete(id);
+        return succeed();
+    }
+
+}

+ 4 - 0
mec-util/src/main/java/com/ym/mec/util/collection/MapUtil.java

@@ -11,6 +11,7 @@ import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 public class MapUtil {
 
@@ -108,6 +109,9 @@ public class MapUtil {
 	public static <T,K> Map convertMybatisMap(List<Map<T,K>> maps){
 		Map result=new HashMap();
 		maps.forEach(stringIntegerMap -> {
+			if(Objects.isNull(stringIntegerMap)){
+				return;
+			}
 			result.put(stringIntegerMap.get("key"),stringIntegerMap.get("value"));
 		});
 		return result;

+ 66 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TeacherVipSchoolController.java

@@ -0,0 +1,66 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.biz.dal.entity.TeacherSchool;
+import com.ym.mec.biz.service.TeacherSchoolService;
+import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/14
+ */
+@Api(value = "教师vip课教学点服务")
+@RequestMapping("teacherVipSchool")
+@RestController
+public class TeacherVipSchoolController extends BaseController {
+
+    @Autowired
+    private TeacherSchoolService teacherSchoolService;
+
+    @ApiOperation("单查询")
+    @GetMapping(value = "/query")
+    public Object query(Long id) {
+        return succeed(teacherSchoolService.get(id));
+    }
+
+    @ApiOperation("根据教师编号获取教学点")
+    @GetMapping(value = "/queryAll")
+    public Object queryAll(Long teacherId) {
+        return succeed(teacherSchoolService.findByTeacherId(teacherId));
+    }
+
+    @ApiOperation("新增")
+    @PostMapping(value = "/add")
+    public Object add(TeacherSchool teacherSchool) {
+        Date date = new Date();
+        teacherSchool.setCreateTime(date);
+        teacherSchool.setUpdateTime(date);
+        teacherSchoolService.insert(teacherSchool);
+        return succeed();
+    }
+
+    @ApiOperation("修改")
+    @PostMapping(value = "/update")
+    public Object update(TeacherSchool teacherSchool) {
+        Date date = new Date();
+        teacherSchool.setUpdateTime(date);
+        teacherSchoolService.update(teacherSchool);
+        return succeed();
+    }
+
+    @ApiOperation("删除")
+    @PostMapping(value = "/delete")
+    public Object delete(Long id) {
+        teacherSchoolService.delete(id);
+        return succeed();
+    }
+
+}

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

@@ -1,5 +1,7 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.ClassDateAdjustDto;
 import com.ym.mec.biz.dal.dto.VipGroupApplyDto;
 import com.ym.mec.biz.dal.entity.StudentApplyRefunds;
@@ -33,10 +35,17 @@ public class VipGroupManageController extends BaseController {
     private VipGroupService vipGroupService;
     @Autowired
     private CourseScheduleService scheduleService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
 
     @ApiOperation(value = "vip课申请")
     @PostMapping("/vipGroupApply")
     public Object vipGroupApply(@RequestBody VipGroupApplyDto vipGroupApplyDto){
+        SysUser sysUser = sysUserFeignService.queryUserById(vipGroupApplyDto.getVipGroupApplyBaseInfo().getUserId());
+        if(Objects.isNull(sysUser)){
+            return failed("请指定指导老师!");
+        }
+        vipGroupApplyDto.getVipGroupApplyBaseInfo().setOrganIdList(sysUser.getOrganId().toString());
         vipGroupService.createVipGroup(vipGroupApplyDto);
         return succeed();
     }

+ 1 - 1
mec-web/src/main/resources/application.yml

@@ -41,7 +41,7 @@ spring:
   redis:
     host: 47.99.212.176
     port: 6379
-    password: 
+    password:
     database: 0
     #连接超时时间(毫秒)
     timeout: 10000