Jelajahi Sumber

Merge branch 'vip_group_activity'

Joburgess 4 tahun lalu
induk
melakukan
ebb90b8b16
18 mengubah file dengan 289 tambahan dan 148 penghapusan
  1. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java
  2. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleTeacherSalary.java
  3. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java
  4. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  5. 8 21
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  6. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  7. 64 31
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  8. 93 59
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  9. 5 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  10. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultMusicGroupSalaryServiceImpl.java
  11. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultPracticeGroupSalaryServiceImpl.java
  12. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultVipGroupSalaryServiceImpl.java
  13. 36 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  14. 13 5
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  15. 7 2
      mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml
  16. 7 0
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  17. 6 6
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java
  18. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java

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

@@ -365,4 +365,15 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
      * @return
      */
     List<Map<Long, String>> queryEduNameMapByCourseId(@Param("courseIds") List<Long> courseIds);
+
+    /**
+     * @describe 统计学员在指定活动上关联的次数
+     * @author Joburgess
+     * @date 2021/5/17 0017
+     * @param vipGroupActivityId:
+     * @param studentId:
+     * @return int
+     */
+    int countStudentUserActivityNum(@Param("vipGroupActivityId") Integer vipGroupActivityId,
+                                    @Param("studentId") Integer studentId);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleTeacherSalary.java

@@ -71,6 +71,8 @@ public class CourseScheduleTeacherSalary {
 
 	private Boolean belongToDaya;
 
+	private Boolean enableChangeSalary = true;
+
 	private List<TeacherSalaryDeductReasonDto> deductReasons;
 
 	public List<TeacherSalaryDeductReasonDto> getDeductReasons() {
@@ -273,6 +275,14 @@ public class CourseScheduleTeacherSalary {
 		this.courseSchedule = courseSchedule;
 	}
 
+	public Boolean getEnableChangeSalary() {
+		return enableChangeSalary;
+	}
+
+	public void setEnableChangeSalary(Boolean enableChangeSalary) {
+		this.enableChangeSalary = enableChangeSalary;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java

@@ -86,6 +86,9 @@ public class VipGroupActivity {
 	@ApiModelProperty(value = "最多可排课数量")
 	private Integer maxCourseNum;
 
+	@ApiModelProperty(value = "每位学员最大使用次数")
+	private Integer studentMaxUsedTimes;
+
 	public Integer getMinCourseNum() {
 		return minCourseNum;
 	}
@@ -294,6 +297,14 @@ public class VipGroupActivity {
 		this.delFlag = delFlag;
 	}
 
+	public Integer getStudentMaxUsedTimes() {
+		return studentMaxUsedTimes;
+	}
+
+	public void setStudentMaxUsedTimes(Integer studentMaxUsedTimes) {
+		this.studentMaxUsedTimes = studentMaxUsedTimes;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

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

@@ -108,7 +108,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @return
 	 */
 	boolean batchAddCourseSchedule(Integer classGroupId, int coursesTimes, Date startDate, Date groupEndDate, Date groupStartDate, List<CourseTimeDto> teachingArrangementList,
-			TeachModeEnum teachMode, CourseScheduleType type, Integer schoolId, boolean isJumpHoliday);
+			TeachModeEnum teachMode, CourseScheduleType type, Integer schoolId, boolean isJumpHoliday, List<CourseScheduleTeacherSalary> oldCourseScheduleTeacherSalaries);
 	
 	/**
 	 * 批量调整

+ 8 - 21
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -1332,35 +1332,18 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
         //4、调整未上课课酬
         if (allNotStartCourses.size() > 0) {
-            Date nowDate = new Date();
-//            List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
             List<Long> courseScheduleIds = allNotStartCourses.stream().map(CourseSchedule::getId).collect(Collectors.toList());
             List<CourseScheduleTeacherSalary> oldCourseSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseScheduleIds);
             courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
             Map<Long, CourseSchedule> idCourseMap = allNotStartCourses.stream().collect(Collectors.toMap(CourseSchedule::getId, c -> c, (c1, c2) -> c1));
             for (CourseScheduleTeacherSalary oldCourseSalary : oldCourseSalaries) {
                 oldCourseSalary.setId(null);
+                //课酬调整后不能更新课酬
+                if(!oldCourseSalary.getEnableChangeSalary()){
+                    continue;
+                }
                 courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(null, idCourseMap.get(oldCourseSalary.getCourseScheduleId()), oldCourseSalary);
             }
-//            for (CourseSchedule courseSchedule : allNotStartCourses) {
-//                if(!ctm.containsKey(courseSchedule.getClassGroupId())){
-//                    continue;
-//                }
-//                List<ClassGroupTeacherMapper> classGroupTeachers = ctm.get(courseSchedule.getClassGroupId());
-//                for (ClassGroupTeacherMapper classGroupTeacher : classGroupTeachers) {
-//                    CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
-//                    courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
-//                    courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
-//                    courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
-//                    courseScheduleTeacherSalary.setTeacherRole(classGroupTeacher.getTeacherRole());
-//                    courseScheduleTeacherSalary.setUserId(classGroupTeacher.getUserId());
-//                    courseScheduleTeacherSalary.setClassGroupId(courseSchedule.getClassGroupId());
-//                    courseScheduleTeacherSalary.setCreateTime(nowDate);
-//                    courseScheduleTeacherSalary.setUpdateTime(nowDate);
-//                    courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(null, courseSchedule, courseScheduleTeacherSalary);
-//                    courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
-//                }
-//            }
             courseScheduleTeacherSalaryService.batchInsert(oldCourseSalaries);
         }
 
@@ -3955,6 +3938,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                             if (courseSchedule.getType() == CourseScheduleType.HIGH_ONLINE || courseSchedule.getType() == CourseScheduleType.HIGH) {
                                 List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedule(courseSchedule.getId());
                                 for (CourseScheduleTeacherSalary teacherSalary : courseScheduleTeacherSalaries) {
+                                    //课酬调整后不能更新课酬
+                                    if(!teacherSalary.getEnableChangeSalary()){
+                                        continue;
+                                    }
                                     List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(teacherSalary.getUserId(), null, null);
                                     if (teacherSalaryList == null || teacherSalaryList.size() == 0) {
                                         throw new BizException("请设置老师线上网管课课酬");

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java

@@ -613,6 +613,10 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
             Map<Long, CourseSchedule> idCourseMap = classGroupNotStartCourse.stream().collect(Collectors.toMap(CourseSchedule::getId, c -> c, (c1, c2) -> c1));
             for (CourseScheduleTeacherSalary oldCourseSalary : oldCourseSalaries) {
                 oldCourseSalary.setId(null);
+                //课酬调整后不能更新课酬
+                if(!oldCourseSalary.getEnableChangeSalary()){
+                    continue;
+                }
                 courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(null, idCourseMap.get(oldCourseSalary.getCourseScheduleId()), oldCourseSalary);
             }
 

+ 64 - 31
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -410,7 +410,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public boolean batchAddCourseSchedule(Integer classGroupId, int coursesTimes, Date startDate, Date groupEndDate, Date groupStartDate, List<CourseTimeDto> teachingArrangementList,
-			TeachModeEnum teachMode, CourseScheduleType type, Integer schoolId, boolean isJumpHoliday) {
+			TeachModeEnum teachMode, CourseScheduleType type, Integer schoolId, boolean isJumpHoliday, List<CourseScheduleTeacherSalary> oldCourseScheduleTeacherSalaries) {
 		ClassGroup classGroup = classGroupService.get(classGroupId);
 		if (classGroup == null) {
 			throw new BizException("排课失败,班级信息不存在");
@@ -432,6 +432,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			throw new BizException("请设置课时安排");
 		}
 
+		if(!CollectionUtils.isEmpty(oldCourseScheduleTeacherSalaries)){
+			oldCourseScheduleTeacherSalaries.sort(Comparator.comparing(c->c.getCourseSchedule().getStartClassTime()));
+		}
+
 		BigDecimal subSidy = new BigDecimal(0);
 		// 查询教学点补贴
 		if (schoolId != null) {
@@ -627,6 +631,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					courseScheduleDao.insert(courseSchedule);
 					courseScheduleList.add(courseSchedule);
 
+					CourseScheduleTeacherSalary oldCourseMainTeacherSalary = null;
+					if(!CollectionUtils.isEmpty(oldCourseScheduleTeacherSalaries)){
+						oldCourseMainTeacherSalary = oldCourseScheduleTeacherSalaries.get(courseScheduleList.size()-1);
+					}
+
 					// 课程与老师薪水表
 					for (ClassGroupTeacherMapper cgtm : classGroupTeacherMapperList) {
 						CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
@@ -635,7 +644,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						courseScheduleTeacherSalary.setMusicGroupId(classGroup.getMusicGroupId());
 						courseScheduleTeacherSalary.setTeacherRole(cgtm.getTeacherRole());
 						courseScheduleTeacherSalary.setUserId(cgtm.getUserId());
-						if (type == CourseScheduleType.PRACTICE) {
+						if(TeachTypeEnum.BISHOP.equals(cgtm.getTeacherRole())&&Objects.nonNull(oldCourseMainTeacherSalary)&&!oldCourseMainTeacherSalary.getEnableChangeSalary()){
+							courseScheduleTeacherSalary.setExpectSalary(oldCourseMainTeacherSalary.getExpectSalary());
+							courseScheduleTeacherSalary.setSubsidy(oldCourseMainTeacherSalary.getSubsidy());
+							courseScheduleTeacherSalary.setEnableChangeSalary(oldCourseMainTeacherSalary.getEnableChangeSalary());
+						}else if (type == CourseScheduleType.PRACTICE) {
 							PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(classGroup.getMusicGroupId()));
 							if(practiceGroup == null){
 								throw new BizException("课程组不存在");
@@ -874,6 +887,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			}
 		}
 
+		Map<Long, CourseSchedule> idCourseMap = courseScheduleList.stream().collect(Collectors.toMap(CourseSchedule::getId, c -> c, (c1, c2) -> c1));
+		List<CourseScheduleTeacherSalary> oldCourseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseScheduleIds);
+		oldCourseScheduleTeacherSalaries = oldCourseScheduleTeacherSalaries.stream().filter(c->TeachTypeEnum.BISHOP.equals(c.getTeacherRole())).collect(Collectors.toList());
+		oldCourseScheduleTeacherSalaries.forEach(o->o.setCourseSchedule(idCourseMap.get(o.getCourseScheduleId())));
+
 		courseScheduleDao.batchDeleteAllCourseSchedules(courseScheduleIds);
 		courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
 		courseScheduleStudentPaymentDao.deleteByCourseSchedule(courseScheduleIds);
@@ -902,7 +920,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		// 批量加课
 		batchAddCourseSchedule(classGroupId, batchInsertCoursesDto.getCourseScheduleIdList().size(), batchInsertCoursesDto.getStartDate(), endDate, startDate,
 				batchInsertCoursesDto.getTeachingArrangementList(), batchInsertCoursesDto.getTeachMode(), batchInsertCoursesDto.getType(),
-				batchInsertCoursesDto.getSchoolId(), batchInsertCoursesDto.getIsJumpHoliday());
+				batchInsertCoursesDto.getSchoolId(), batchInsertCoursesDto.getIsJumpHoliday(), oldCourseScheduleTeacherSalaries);
 		return true;
 	}
 
@@ -2973,6 +2991,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					if(courseSalaryListMap.containsKey(oldCourses.get(i).getId())){
 						List<CourseScheduleTeacherSalary> ctss = courseSalaryListMap.get(oldCourses.get(i).getId());
 						for (CourseScheduleTeacherSalary teacherSalary : ctss) {
+							//课酬调整后不能更新课酬
+							if(!teacherSalary.getEnableChangeSalary()){
+								continue;
+							}
 							courseScheduleTeacherSalaryService.updateSingleCourseTeacherSalary(oldCourses.get(i), teacherSalary);
 						}
 						courseScheduleTeacherSalaryDao.batchUpdate(ctss);
@@ -3460,8 +3482,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		List<CourseScheduleTeacherSalary> insertCourseScheduleTeacherSalaryList = new ArrayList<CourseScheduleTeacherSalary>();
 
 		// 获取课程对应教学点补贴
-		List<Map<Long, BigDecimal>> courseSubsidyByCourses = courseScheduleTeacherSalaryDao.findCourseSubsidyByCourses(courseScheduleIds);
-		Map<Integer, BigDecimal> courseSubsidyMap = MapUtil.convertIntegerMap(courseSubsidyByCourses);
+//		List<Map<Long, BigDecimal>> courseSubsidyByCourses = courseScheduleTeacherSalaryDao.findCourseSubsidyByCourses(courseScheduleIds);
+//		Map<Integer, BigDecimal> courseSubsidyMap = MapUtil.convertIntegerMap(courseSubsidyByCourses);
 
 		// 课程对应乐团结算方式集合
 		List<Map<String, String>> musicGroupSettlementTypeByCourse = courseScheduleTeacherSalaryDao.findMusicGroupSettlementTypeByCourse(courseScheduleIds);
@@ -3617,8 +3639,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 				List<CourseScheduleTeacherSalary> oldCourseScheduleTeacherSalaryList = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseScheduleIds);
 				Map<Long, List<CourseScheduleTeacherSalary>> courseSalaryListMap = new HashMap<>();
+				CourseScheduleTeacherSalary mainTeacherSalary = null;
 				if(!CollectionUtils.isEmpty(oldCourseScheduleTeacherSalaryList)){
 					courseSalaryListMap = oldCourseScheduleTeacherSalaryList.stream().collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getCourseScheduleId));
+					List<CourseScheduleTeacherSalary> mainTeacherSalarys = oldCourseScheduleTeacherSalaryList.stream().filter(t -> TeachTypeEnum.BISHOP.equals(t.getTeacherRole())).collect(Collectors.toList());
+					if(!CollectionUtils.isEmpty(mainTeacherSalarys)){
+						mainTeacherSalary = mainTeacherSalarys.get(0);
+					}
 				}
 
 				courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIdList);
@@ -3630,7 +3657,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					ts.setCreateTime(date);
 					ts.setGroupType(newCourseSchedule.getGroupType());
 					ts.setMusicGroupId(newCourseSchedule.getMusicGroupId());
-					ts.setSubsidy(courseSubsidyMap.get(courseScheduleId));
 					if (teacherId == newCourseSchedule.getActualTeacherId().intValue()) {
 						ts.setTeacherRole(TeachTypeEnum.BISHOP);
 					} else {
@@ -3638,37 +3664,44 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					}
 					ts.setUpdateTime(date);
 					ts.setUserId(teacherId);
-					// 重新生成课酬
-					if (newCourseSchedule.getGroupType() == GroupType.MUSIC) {
-						courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(null, newCourseSchedule, ts);
-					} else if (newCourseSchedule.getGroupType() == GroupType.VIP) {
-						Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, teacherId, ts.getCourseScheduleId());
 
-						BigDecimal teacherSalary=null;
+					if(Objects.nonNull(mainTeacherSalary)&&!mainTeacherSalary.getEnableChangeSalary()){
+						ts.setExpectSalary(mainTeacherSalary.getExpectSalary());
+						ts.setSubsidy(mainTeacherSalary.getSubsidy());
+					}else{
+						// 重新生成课酬
+						if (newCourseSchedule.getGroupType() == GroupType.MUSIC) {
+							courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(null, newCourseSchedule, ts);
+						} else if (newCourseSchedule.getGroupType() == GroupType.VIP) {
+							Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, teacherId, ts.getCourseScheduleId());
 
-						if(Objects.nonNull(salaryMap)){
-							teacherSalary=newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE?salaryMap.get("offlineTeacherSalary"):salaryMap.get("onlineTeacherSalary");
-						}
+							BigDecimal teacherSalary=null;
+
+							if(Objects.nonNull(salaryMap)){
+								teacherSalary=newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE?salaryMap.get("offlineTeacherSalary"):salaryMap.get("onlineTeacherSalary");
+							}
+
+							ts.setExpectSalary(teacherSalary);
 
-						ts.setExpectSalary(teacherSalary);
-
-					} else if (newCourseSchedule.getGroupType() == PRACTICE) {
-						SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
-						BigDecimal freeTeacherSalary = new BigDecimal(practiceCourseSalaryConfig.getParanValue());
-
-						List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao
-								.queryByUserId(teacherId);
-						List<CourseScheduleTeacherSalary> teacherSalaries = courseSalaryListMap.get(ts.getCourseScheduleId());
-						if(!CollectionUtils.isEmpty(teacherSalaries)&&freeTeacherSalary.compareTo(teacherSalaries.get(0).getExpectSalary())==0){
-							ts.setExpectSalary(freeTeacherSalary);
-						}else{
-							if (teacherDefaultPracticeGroupSalaryList != null && teacherDefaultPracticeGroupSalaryList.size() > 0) {
-								ts.setExpectSalary(teacherDefaultPracticeGroupSalaryList.get(0).getMainTeacherSalary());
-							} else {
-								throw new BizException("请设置老师 的网管课课酬");
+						} else if (newCourseSchedule.getGroupType() == PRACTICE) {
+							SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
+							BigDecimal freeTeacherSalary = new BigDecimal(practiceCourseSalaryConfig.getParanValue());
+
+							List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao
+									.queryByUserId(teacherId);
+							List<CourseScheduleTeacherSalary> teacherSalaries = courseSalaryListMap.get(ts.getCourseScheduleId());
+							if(!CollectionUtils.isEmpty(teacherSalaries)&&freeTeacherSalary.compareTo(teacherSalaries.get(0).getExpectSalary())==0){
+								ts.setExpectSalary(freeTeacherSalary);
+							}else{
+								if (teacherDefaultPracticeGroupSalaryList != null && teacherDefaultPracticeGroupSalaryList.size() > 0) {
+									ts.setExpectSalary(teacherDefaultPracticeGroupSalaryList.get(0).getMainTeacherSalary());
+								} else {
+									throw new BizException("请设置老师 的网管课课酬");
+								}
 							}
 						}
 					}
+
 					if(ts.getExpectSalary() == null){
 						throw new BizException("请设置老师的课酬");
 					}

+ 93 - 59
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -238,24 +238,35 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             return;
         }
 
+        BigDecimal zero = new BigDecimal("0");
+
         //获取课程对应教学点补贴
-        List<Map<Long, BigDecimal>> courseSubsidyByCourses = courseScheduleTeacherSalaryDao.findCourseSubsidyByCourses(new ArrayList<>(courseScheduleIds));
-        Map<Integer, BigDecimal> courseSubsidyMap = MapUtil.convertIntegerMap(courseSubsidyByCourses);
+//        List<Map<Long, BigDecimal>> courseSubsidyByCourses = courseScheduleTeacherSalaryDao.findCourseSubsidyByCourses(new ArrayList<>(courseScheduleIds));
+//        Map<Integer, BigDecimal> courseSubsidyMap = MapUtil.convertIntegerMap(courseSubsidyByCourses);
 
         someDayAgoTeacherCourseSalaryNoSettlement.forEach(courseScheduleTeacherSalary -> {
             List<String> deductReasons = new ArrayList<>();
 
             BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary();
 
-            BigDecimal subsidy = courseSubsidyMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
-            if (Objects.isNull(subsidy)) {
-                subsidy = new BigDecimal(0);
+//            BigDecimal subsidy = courseSubsidyMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
+//            if (Objects.isNull(subsidy)) {
+//                subsidy = new BigDecimal(0);
+//            }
+//            courseScheduleTeacherSalary.setSubsidy(subsidy);
+//            expectSalary = expectSalary.add(subsidy);
+//
+//            if(BigDecimal.ZERO.compareTo(subsidy)!=0){
+//                deductReasons.add("教学点补贴:" + subsidy);
+//            }
+
+            if(Objects.isNull(courseScheduleTeacherSalary.getSubsidy())){
+                courseScheduleTeacherSalary.setSubsidy(zero);
             }
-            courseScheduleTeacherSalary.setSubsidy(subsidy);
-            expectSalary = expectSalary.add(subsidy);
 
-            if(BigDecimal.ZERO.compareTo(subsidy)!=0){
-                deductReasons.add("教学点补贴:" + subsidy);
+            if(BigDecimal.ZERO.compareTo(courseScheduleTeacherSalary.getSubsidy())!=0){
+                expectSalary = expectSalary.add(courseScheduleTeacherSalary.getSubsidy());
+                deductReasons.add("课程补贴:" + courseScheduleTeacherSalary.getSubsidy());
             }
 
             Teacher teacher = idTeacherMap.get(courseScheduleTeacherSalary.getUserId());
@@ -380,9 +391,11 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         List<TeacherAttendance> allTeacherAttendances = teacherAttendanceDao.findByCourseSchedules(courseScheduleIds);
         Map<String, List<TeacherAttendance>> teacherCourseAttendanceMap = allTeacherAttendances.stream().collect(Collectors.groupingBy(ta -> org.apache.commons.lang3.StringUtils.joinWith(":", ta.getCourseScheduleId(), ta.getTeacherId())));
 
+        BigDecimal zero = new BigDecimal(0);
+
         //获取课程对应教学点补贴
-        List<Map<Long, BigDecimal>> courseSubsidyByCourses = courseScheduleTeacherSalaryDao.findCourseSubsidyByCourses(courseScheduleIds);
-        Map<Integer, BigDecimal> courseSubsidyMap = MapUtil.convertIntegerMap(courseSubsidyByCourses);
+//        List<Map<Long, BigDecimal>> courseSubsidyByCourses = courseScheduleTeacherSalaryDao.findCourseSubsidyByCourses(courseScheduleIds);
+//        Map<Integer, BigDecimal> courseSubsidyMap = MapUtil.convertIntegerMap(courseSubsidyByCourses);
 
         //处理课酬信息
         someDayAgoTeacherCourseSalaryNoSettlement.forEach(courseScheduleTeacherSalary -> {
@@ -390,14 +403,23 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
             BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary();
 
-            BigDecimal subsidy = courseSubsidyMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
-            if (Objects.isNull(subsidy)) {
-                subsidy = new BigDecimal(0);
+//            BigDecimal subsidy = courseSubsidyMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
+//            if (Objects.isNull(subsidy)) {
+//                subsidy = new BigDecimal(0);
+//            }
+//            courseScheduleTeacherSalary.setSubsidy(subsidy);
+//            expectSalary = expectSalary.add(subsidy);
+//            if(BigDecimal.ZERO.compareTo(subsidy)!=0){
+//                deductReasons.add("教学点补贴:" + subsidy);
+//            }
+
+            if(Objects.isNull(courseScheduleTeacherSalary.getSubsidy())){
+                courseScheduleTeacherSalary.setSubsidy(zero);
             }
-            courseScheduleTeacherSalary.setSubsidy(subsidy);
-            expectSalary = expectSalary.add(subsidy);
-            if(BigDecimal.ZERO.compareTo(subsidy)!=0){
-                deductReasons.add("教学点补贴:" + subsidy);
+
+            if(BigDecimal.ZERO.compareTo(courseScheduleTeacherSalary.getSubsidy())!=0){
+                expectSalary = expectSalary.add(courseScheduleTeacherSalary.getSubsidy());
+                deductReasons.add("课程补贴:" + courseScheduleTeacherSalary.getSubsidy());
             }
 
             Teacher teacher = idTeacherMap.get(courseScheduleTeacherSalary.getUserId());
@@ -513,9 +535,11 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             return;
         }
 
+        BigDecimal zero = new BigDecimal(0);
+
         //获取课程对应教学点补贴
-        List<Map<Long, BigDecimal>> courseSubsidyByCourses = courseScheduleTeacherSalaryDao.findCourseSubsidyByCourses(courseScheduleIds);
-        Map<Integer, BigDecimal> courseSubsidyMap = MapUtil.convertIntegerMap(courseSubsidyByCourses);
+//        List<Map<Long, BigDecimal>> courseSubsidyByCourses = courseScheduleTeacherSalaryDao.findCourseSubsidyByCourses(courseScheduleIds);
+//        Map<Integer, BigDecimal> courseSubsidyMap = MapUtil.convertIntegerMap(courseSubsidyByCourses);
 
         Set<Integer> schoolIds = yesterdayCourseSchedules.stream().map(CourseSchedule::getSchoolId).collect(Collectors.toSet());
         List<School> schools = schoolDao.getSchools(new ArrayList<>(schoolIds));
@@ -616,13 +640,22 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
                 List<String> deductReasons = new ArrayList<>();
 
-                BigDecimal subsidy = courseSubsidyMap.get(courseSchedule.getId());
-                if (Objects.isNull(subsidy)) {
-                    subsidy = new BigDecimal(0);
+//                BigDecimal subsidy = courseSubsidyMap.get(courseSchedule.getId());
+//                if (Objects.isNull(subsidy)) {
+//                    subsidy = new BigDecimal(0);
+//                }
+//                teacherSalary = teacherSalary.add(subsidy);
+//                if(BigDecimal.ZERO.compareTo(subsidy)!=0){
+//                    deductReasons.add("教学点补贴:" + subsidy);
+//                }
+
+                if(Objects.isNull(courseScheduleTeacherSalary.getSubsidy())){
+                    courseScheduleTeacherSalary.setSubsidy(zero);
                 }
-                teacherSalary = teacherSalary.add(subsidy);
-                if(BigDecimal.ZERO.compareTo(subsidy)!=0){
-                    deductReasons.add("教学点补贴:" + subsidy);
+
+                if(BigDecimal.ZERO.compareTo(courseScheduleTeacherSalary.getSubsidy())!=0){
+                    teacherSalary = teacherSalary.add(courseScheduleTeacherSalary.getSubsidy());
+                    deductReasons.add("课程补贴:" + courseScheduleTeacherSalary.getSubsidy());
                 }
 
                 //未转正
@@ -700,7 +733,6 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     courseScheduleTeacherSalary.setDeductionReason(org.apache.commons.lang3.StringUtils.join(deductReasons, ";"));
 
                 //更新教师结算信息
-                courseScheduleTeacherSalary.setSubsidy(subsidy);
                 courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
                 courseScheduleTeacherSalary.setBelongToDaya(false);
                 courseScheduleTeacherSalary.setSettlementTime(now);
@@ -713,13 +745,22 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
             List<String> deductReasons = new ArrayList<>();
 
-            BigDecimal subsidy = courseSubsidyMap.get(courseSchedule.getId());
-            if (Objects.isNull(subsidy)) {
-                subsidy = new BigDecimal(0);
+//            BigDecimal subsidy = courseSubsidyMap.get(courseSchedule.getId());
+//            if (Objects.isNull(subsidy)) {
+//                subsidy = new BigDecimal(0);
+//            }
+//            teacherSalary = teacherSalary.add(subsidy);
+//            if(BigDecimal.ZERO.compareTo(subsidy)!=0){
+//                deductReasons.add("教学点补贴:" + subsidy);
+//            }
+
+            if(Objects.isNull(courseScheduleTeacherSalary.getSubsidy())){
+                courseScheduleTeacherSalary.setSubsidy(zero);
             }
-            teacherSalary = teacherSalary.add(subsidy);
-            if(BigDecimal.ZERO.compareTo(subsidy)!=0){
-                deductReasons.add("教学点补贴:" + subsidy);
+
+            if(BigDecimal.ZERO.compareTo(courseScheduleTeacherSalary.getSubsidy())!=0){
+                teacherSalary = teacherSalary.add(courseScheduleTeacherSalary.getSubsidy());
+                deductReasons.add("课程补贴:" + courseScheduleTeacherSalary.getSubsidy());
             }
 
 //            boolean notPositive = Objects.nonNull(teacher)&&Objects.nonNull(teacher.getFormalStaffDate())&&courseSchedule.getClassDate().compareTo(teacher.getFormalStaffDate())<0;
@@ -847,7 +888,6 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             }
 
             //更新教师结算信息
-            courseScheduleTeacherSalary.setSubsidy(subsidy);
             courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
             courseScheduleTeacherSalary.setBelongToDaya(false);
             courseScheduleTeacherSalary.setSettlementTime(now);
@@ -892,6 +932,9 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             List<Map<Integer, String>> teachModeById = courseScheduleDao.getTeachModeById(courseIds);
             Map<Integer, String> coureTeachModeMap = MapUtil.convertIntegerMap(teachModeById);
             for(int i=0;i<courseScheduleTeacherSalaries.size();i++){
+                if(!courseScheduleTeacherSalaries.get(i).getEnableChangeSalary()){
+                    continue;
+                }
                 String courseType = coureTeachModeMap.get(courseScheduleTeacherSalaries.get(i).getCourseScheduleId());
 
                 Map<String, BigDecimal> salary = vipGroupService.countVipGroupPredictFee(vipGroup, vipGroup.getUserId(), courseScheduleTeacherSalaries.get(i).getCourseScheduleId());
@@ -1619,12 +1662,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         if(CourseSchedule.CourseScheduleType.MUSIC_NETWORK.equals(courseSchedule.getType())||CourseSchedule.CourseScheduleType.HIGH_ONLINE.equals(courseSchedule.getType())){
             List<TeacherSalaryDeductReasonDto> deductReasons = new ArrayList<>();
 
-            BigDecimal subsidy = new BigDecimal(0);
-            if (Objects.nonNull(school)&&Objects.nonNull(school.getSubsidy())) {
-                subsidy = school.getSubsidy();
-            }
-
-            teacherSalary = teacherSalary.add(subsidy);
+            teacherSalary = teacherSalary.add(courseScheduleTeacherSalary.getSubsidy());
             if(BigDecimal.ZERO.compareTo(teacherSalary)>0){
                 teacherSalary = new BigDecimal(0);
             }
@@ -1695,17 +1733,12 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 
             //更新教师结算信息
-            courseScheduleTeacherSalary.setSubsidy(subsidy);
             courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
             courseScheduleTeacherSalary.setDeductReasons(deductReasons);
         }else{
             List<TeacherSalaryDeductReasonDto> deductReasons = new ArrayList<>();
 
-            BigDecimal subsidy = new BigDecimal(0);
-            if (Objects.nonNull(school)&&Objects.nonNull(school.getSubsidy())) {
-                subsidy = school.getSubsidy();
-            }
-            teacherSalary = teacherSalary.add(subsidy);
+            teacherSalary = teacherSalary.add(courseScheduleTeacherSalary.getSubsidy());
             if(BigDecimal.ZERO.compareTo(teacherSalary)>0){
                 teacherSalary = new BigDecimal(0);
             }
@@ -1833,7 +1866,6 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 
             //更新教师结算信息
-            courseScheduleTeacherSalary.setSubsidy(subsidy);
             courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
             courseScheduleTeacherSalary.setDeductReasons(deductReasons);
         }
@@ -1856,12 +1888,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         
         BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary();
 
-        BigDecimal subsidy = new BigDecimal(0);
-        if (Objects.nonNull(school)&&Objects.nonNull(school.getSubsidy())) {
-            subsidy = school.getSubsidy();
-        }
-        courseScheduleTeacherSalary.setSubsidy(subsidy);
-        expectSalary = expectSalary.add(subsidy);
+        expectSalary = expectSalary.add(courseScheduleTeacherSalary.getSubsidy());
         if(BigDecimal.ZERO.compareTo(expectSalary)>0){
             expectSalary = new BigDecimal(0);
         }
@@ -1968,12 +1995,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         
         BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary();
 
-        BigDecimal subsidy = new BigDecimal(0);
-        if (Objects.nonNull(school)&&Objects.nonNull(school.getSubsidy())) {
-            subsidy = school.getSubsidy();
-        }
-        courseScheduleTeacherSalary.setSubsidy(subsidy);
-        expectSalary = expectSalary.add(subsidy);
+        expectSalary = expectSalary.add(courseScheduleTeacherSalary.getSubsidy());
         if(BigDecimal.ZERO.compareTo(expectSalary)>0){
             expectSalary = new BigDecimal(0);
         }
@@ -2125,6 +2147,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         List<Teacher> teachers = teacherDao.findByTeacherIds(new ArrayList<>(teacherIds));
         Map<Integer, Teacher> idTeacherMap = teachers.stream().collect(Collectors.toMap(Teacher::getId, t -> t, (t1, t2) -> t1));
 
+        BigDecimal zero = new BigDecimal(0);
+
         for (CourseScheduleTeacherSalary teacherSalary : teacherSalaries) {
             //课程
             CourseSchedule courseSchedule = idCourseMap.get(teacherSalary.getCourseScheduleId());
@@ -2139,6 +2163,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 continue;
             }
 
+            if(Objects.isNull(teacherSalary.getSubsidy())){
+                teacherSalary.setSubsidy(zero);
+            }
+
             switch (courseSchedule.getGroupType()){
                 case MUSIC:
                     calMusicCourseTeacherActualSalary(courseSchedule, teacherSalary, teacherAttendances, school, teacher, attendanceRange, false);
@@ -2233,6 +2261,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             List<Teacher> teachers = teacherDao.findByTeacherIds(new ArrayList<>(teacherIds));
             Map<Integer, Teacher> idTeacherMap = teachers.stream().collect(Collectors.toMap(Teacher::getId, t -> t, (t1, t2) -> t1));
 
+            BigDecimal zero = new BigDecimal(0);
+
             for (CourseScheduleTeacherSalary teacherSalary : teacherSalaries) {
                 //课程
                 CourseSchedule courseSchedule = idCourseMap.get(teacherSalary.getCourseScheduleId());
@@ -2243,6 +2273,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 //教师
                 Teacher teacher = idTeacherMap.get(teacherSalary.getUserId());
 
+                if(Objects.isNull(teacherSalary.getSubsidy())){
+                    teacherSalary.setSubsidy(zero);
+                }
+
                 BigDecimal oldSalary = null;
                 BigDecimal oldSubsidy = null;
                 if(Objects.nonNull(teacherSalary.getSettlementTime())){

+ 5 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -8,15 +8,7 @@ import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import com.ym.mec.biz.dal.dao.*;
@@ -2380,10 +2372,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             throw new BizException("课程信息不存在");
         }
 
-        if (salary == null) {
-            throw new BizException("请设置老师课酬");
-        }
-
         if ("all".equals(scope)) {
             Integer classGrpupId = courseSchedule.getClassGroupId();
             String startDateTime = sdf_ymd.format(courseSchedule.getClassDate()) + " " + sdf_hms.format(courseSchedule.getStartClassTime());
@@ -2399,8 +2387,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             if (courseScheduleTeacherSalary.getSettlementTime() != null) {
                 throw new BizException("课程已结算");
             }
-            courseScheduleTeacherSalary.setExpectSalary(salary);
+            if(Objects.nonNull(salary)){
+                courseScheduleTeacherSalary.setExpectSalary(salary);
+            }
             courseScheduleTeacherSalary.setSubsidy(subsidy);
+            courseScheduleTeacherSalary.setEnableChangeSalary(false);
             courseScheduleTeacherSalary.setUpdateTime(new Date());
             courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
         }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultMusicGroupSalaryServiceImpl.java

@@ -116,6 +116,10 @@ public class TeacherDefaultMusicGroupSalaryServiceImpl extends BaseServiceImpl<L
 					List<CourseScheduleTeacherSalary> list = new ArrayList<CourseScheduleTeacherSalary>();
 					// 批量修改课程课酬
 					for (CourseScheduleTeacherSalary ts : updateTeacherSalaryList) {
+						//课酬调整后不能更新课酬
+						if(!ts.getEnableChangeSalary()){
+							continue;
+						}
 						MusicGroup musicGroup = musicGroupMap.get(ts.getMusicGroupId());
 						// 课酬结算标准
 						if (musicGroup != null) {

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultPracticeGroupSalaryServiceImpl.java

@@ -94,6 +94,10 @@ public class TeacherDefaultPracticeGroupSalaryServiceImpl extends BaseServiceImp
 					List<CourseScheduleTeacherSalary> list = new ArrayList<CourseScheduleTeacherSalary>();
 
 					for (CourseScheduleTeacherSalary ts : updateTeacherSalaryList) {
+						//课酬调整后不能更新课酬
+						if(!ts.getEnableChangeSalary()){
+							continue;
+						}
 						if (origSalary != null && origSalary.getMainTeacherSalary().compareTo(ts.getExpectSalary()) == 0
 								&& origSalary.getMainTeacherSalary().compareTo(salary) != 0) {
 							if(freeTeacherSalary.compareTo(ts.getExpectSalary())==0){

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultVipGroupSalaryServiceImpl.java

@@ -139,6 +139,10 @@ public class TeacherDefaultVipGroupSalaryServiceImpl extends BaseServiceImpl<Lon
 					List<CourseScheduleTeacherSalary> list = new ArrayList<CourseScheduleTeacherSalary>();
 
 					for (CourseScheduleTeacherSalary ts : updateTeacherSalaryList) {
+						//课酬调整后不能更新课酬
+						if(!ts.getEnableChangeSalary()){
+							continue;
+						}
 						VipGroup vipGroup = vipGroupMap.get(Long.parseLong(ts.getMusicGroupId()));
 						// 课酬结算标准
 						if (vipGroup != null) {

+ 36 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -197,8 +197,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
         String studentIds=vipGroup.getStudentIds();
 		List<String> studentIdList=new ArrayList<>();
-
-        if(StringUtils.isNotBlank(studentIds)){
+		if(StringUtils.isNotBlank(studentIds)){
 			studentIdList = Arrays.asList(studentIds.split(","));
 		}
 
@@ -243,6 +242,15 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		//获取活动信息
 		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId());
+		if(Objects.nonNull(vipGroupActivity)&&Objects.nonNull(vipGroupActivity.getStudentMaxUsedTimes())&&StringUtils.isNotBlank(vipGroupApplyBaseInfoDto.getStudentIdList())){
+			List<String> tempStudentIds = Arrays.asList(vipGroupApplyBaseInfoDto.getStudentIdList().split(","));
+			for (String studentIdStr : tempStudentIds) {
+				int useNum = vipGroupDao.countStudentUserActivityNum(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId(), Integer.valueOf(studentIdStr));
+				if(useNum>=vipGroupActivity.getStudentMaxUsedTimes()){
+					throw new BizException("创建失败:当前活动可购买次数为{}次", vipGroupActivity.getStudentMaxUsedTimes());
+				}
+			}
+		}
 		//判断课程安排是否超出范围
 		if(Objects.nonNull(vipGroupActivity)&&(Objects.nonNull(vipGroupActivity.getCoursesEndTime())||Objects.nonNull(vipGroupActivity.getCoursesStartTime()))){
 			if(latestCourseSchedule.getEndClassTime().after(vipGroupActivity.getCoursesEndTime())
@@ -1492,7 +1500,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
         VipGroup vipGroup = vipGroupDao.get(vipGroupBuyParams.getVipGroupId());
 
-
 		if(classGroup.getStudentNum()>0&&(VipGroupStatusEnum.APPLYING.equals(vipGroup.getStatus()))){
 			int i = studentPaymentOrderDao.countGroupOrderWithoutFailed(vipGroupBuyParams.getVipGroupId().toString(), GroupType.VIP);
 			if(i<=0){
@@ -1500,6 +1507,18 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			}
 		}
 
+		VipGroupActivity vipGroupActivity = null;
+		if(Objects.nonNull(vipGroup.getVipGroupActivityId())){
+			vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
+		}
+
+		if(Objects.nonNull(vipGroupActivity)&&Objects.nonNull(vipGroupActivity.getStudentMaxUsedTimes())){
+			int useNum = vipGroupDao.countStudentUserActivityNum(vipGroup.getVipGroupActivityId(), Integer.valueOf(user.getId()));
+			if(useNum>=vipGroupActivity.getStudentMaxUsedTimes()){
+				throw new BizException("创建失败:当前活动可购买次数为{}次", vipGroupActivity.getStudentMaxUsedTimes());
+			}
+		}
+
 		if(vipGroup.getPaymentExpireDate().before(date)){
 			throw new BizException("该课程已结束报名!");
 		}
@@ -2885,6 +2904,20 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("选择的学生中存在此课程中已存在的学生");
 		}
 
+		VipGroupActivity vipGroupActivity = null;
+		if(Objects.nonNull(vipGroup.getVipGroupActivityId())){
+			vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
+		}
+
+		if(Objects.nonNull(vipGroupActivity)&&Objects.nonNull(vipGroupActivity.getStudentMaxUsedTimes())&&!CollectionUtils.isEmpty(studentIds)){
+			for (Integer studentId : studentIds) {
+				int useNum = vipGroupDao.countStudentUserActivityNum(vipGroup.getVipGroupActivityId(), Integer.valueOf(studentId));
+				if(useNum>=vipGroupActivity.getStudentMaxUsedTimes()){
+					throw new BizException("创建失败:当前活动可购买次数为{}次", vipGroupActivity.getStudentMaxUsedTimes());
+				}
+			}
+		}
+
 		Date now=new Date();
         Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
 
@@ -2965,11 +2998,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			return;
 		}
 
-		VipGroupActivity vipGroupActivity = null;
-		if(Objects.nonNull(vipGroup.getVipGroupActivityId())){
-			vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
-		}
-
 		BigDecimal surplusCoursesPrice=new BigDecimal(0);
 		boolean hasGiveClass=false;
 		int onlineCourseTimes=0,

+ 13 - 5
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -33,6 +33,7 @@
 		<result column="memo_" property="memo" />
 		<result column="deduction_reason_" property="deductionReason"/>
 		<result column="belong_to_daya_" property="belongToDaya" />
+		<result column="enable_change_salary_" property="enableChangeSalary" />
 	</resultMap>
 	
 	<resultMap type="com.ym.mec.biz.dal.dto.TeacherVipSalaryDto" id="teacherVipSalaryDto" extends="CourseScheduleTeacherSalary">
@@ -56,20 +57,21 @@
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO course_schedule_teacher_salary (id_,group_type_,music_group_id_,course_schedule_id_,teacher_role_,
 		user_id_,expect_salary_,create_time_,update_time_,subsidy_,actual_salary_,settlement_time_,class_group_id_,
-		reduce_salary,confirm_status_,memo_)
+		reduce_salary,confirm_status_,memo_,enable_change_salary_)
 		VALUES(#{id},#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{musicGroupId},#{courseScheduleId},
 		#{teacherRole},#{userId},#{expectSalary},now(),now(),#{subsidy},#{actualSalary},#{settlementTime},#{classGroupId},
-		#{reduceSalary},#{confirmStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{memo})
+		#{reduceSalary},#{confirmStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{memo},#{enableChangeSalary})
 	</insert>
     <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
 		INSERT INTO course_schedule_teacher_salary (id_,group_type_,music_group_id_,course_schedule_id_,teacher_role_,
 		user_id_,expect_salary_,create_time_,update_time_,subsidy_,actual_salary_,settlement_time_,class_group_id_,
-		reduce_salary,confirm_status_,memo_)
+		reduce_salary,confirm_status_,memo_,enable_change_salary_)
 		VALUES
 		<foreach collection="list" item="data" separator=",">
 			(#{data.id},#{data.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{data.musicGroupId},#{data.courseScheduleId},
 			#{data.teacherRole},#{data.userId},#{data.expectSalary},now(),now(),#{data.subsidy},#{data.actualSalary},#{data.settlementTime},
-			#{data.classGroupId},#{data.reduceSalary},#{data.confirmStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{data.memo})
+			#{data.classGroupId},#{data.reduceSalary},#{data.confirmStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{data.memo},
+			#{data.enableChangeSalary})
 		</foreach>
     </insert>
 
@@ -125,6 +127,9 @@
 			<if test="belongToDaya != null">
 				belong_to_daya_ = #{belongToDaya},
 			</if>
+			<if test="enableChangeSalary != null">
+				enable_change_salary_ = #{enableChangeSalary},
+			</if>
 		</set> WHERE id_ = #{id} 
 	</update>
 
@@ -464,7 +469,10 @@
 		UPDATE course_schedule_teacher_salary csts left join course_schedule cs on csts.course_schedule_id_ = cs.id_ 
 		set
 			csts.subsidy_ = #{subsidy},
-			csts.expect_salary_ = #{salary},
+		    csts.enable_change_salary_ = 0,
+		    <if test="salary!=null">
+				csts.expect_salary_ = #{salary},
+			</if>
 			csts.update_time_ = now()
 		WHERE csts.user_id_ = #{userId} and csts.class_group_id_ = #{classGroupId} and csts.settlement_time_ is null and CONCAT(cs.class_date_,' ',cs.start_class_time_) &gt;= #{startDateTime}
 	</update>

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

@@ -33,6 +33,7 @@
 		<result property="offlineClassJoinGradientRewards" column="offline_class_join_gradient_rewards_"/>
 		<result property="minCourseNum" column="min_course_num_"/>
 		<result property="maxCourseNum" column="max_course_num_"/>
+		<result property="studentMaxUsedTimes" column="student_max_used_times_"/>
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -54,10 +55,11 @@
 		-->
 		INSERT INTO vip_group_activity (id_,name_,description_,vip_group_category_id_list_,start_time_,end_time_,organ_id_,courses_start_time_,courses_end_time_,type_,
 		                                attribute1_,attribute2_,attribute3_,salary_readonly_flag_,give_class_pay_salary_flag_,create_time_,update_time_,salary_settlement_json_,del_flag_,
-		                                payment_readonly_flag_,online_class_join_gradient_rewards_,offline_class_join_gradient_rewards_,min_course_num_,max_course_num_)
+		                                payment_readonly_flag_,online_class_join_gradient_rewards_,offline_class_join_gradient_rewards_,min_course_num_,max_course_num_,
+										student_max_used_times_)
 		VALUES(#{id},#{name},#{description},#{vipGroupCategoryIdList},#{startTime},#{endTime},#{organId},#{coursesStartTime},#{coursesEndTime},#{type},#{attribute1},#{attribute2},#{attribute3},
 		       #{salaryReadonlyFlag},#{giveClassPaySalaryFlag},now(),now(),#{salarySettlementJson},#{delFlag},#{paymentReadonlyFlag},#{onlineClassJoinGradientRewards},
-		       #{offlineClassJoinGradientRewards},#{minCourseNum},#{maxCourseNum})
+		       #{offlineClassJoinGradientRewards},#{minCourseNum},#{maxCourseNum},#{studentMaxUsedTimes})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -133,6 +135,9 @@
 			<if test="maxCourseNum!=null">
 				max_course_num_=#{maxCourseNum},
 			</if>
+			<if test="studentMaxUsedTimes!=null">
+				student_max_used_times_=#{studentMaxUsedTimes},
+			</if>
 			update_time_ = NOW(),
 		</set>WHERE id_ = #{id}
 	</update>

+ 7 - 0
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -1037,4 +1037,11 @@
         </foreach>
         AND vg.educational_teacher_id_ IS NOT NULL
     </select>
+    <select id="countStudentUserActivityNum" resultType="int">
+        SELECT COUNT(DISTINCT vg.id_)
+        FROM vip_group vg
+        LEFT JOIN class_group_student_mapper cgsm ON vg.id_=cgsm.music_group_id_ AND cgsm.group_type_='VIP'
+        WHERE vg.vip_group_activity_id_=#{vipGroupActivityId}
+            AND ((vg.group_status_=1 AND FIND_IN_SET(#{studentId}, vg.student_id_list_)) OR cgsm.user_id_=#{studentId});
+    </select>
 </mapper>

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

@@ -180,12 +180,12 @@ public class TeacherCourseScheduleController extends BaseController {
         return succeed(studentAttendanceService.getCurrentCourseStudents(queryInfo));
     }
 
-    @ApiOperation(value = "课程批量调整")
-    @PostMapping("/batchUpdateCourseSchedule")
-    public Object batchUpdateCourseSchedule(@RequestBody BatchInsertCoursesDto batchInsertCoursesDto){
-        scheduleService.batchUpdateCourseSchedule(batchInsertCoursesDto);
-        return succeed();
-    }
+//    @ApiOperation(value = "课程批量调整")
+//    @PostMapping("/batchUpdateCourseSchedule")
+//    public Object batchUpdateCourseSchedule(@RequestBody BatchInsertCoursesDto batchInsertCoursesDto){
+//        scheduleService.batchUpdateCourseSchedule(batchInsertCoursesDto);
+//        return succeed();
+//    }
 
     @ApiOperation(value = "课时调整")
     @PostMapping(value = "/classStartDateAdjust",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java

@@ -378,7 +378,7 @@ public class CourseScheduleController extends BaseController {
     	}
 		courseScheduleService.batchAddCourseSchedule(batchInsertCoursesDto.getClassGroupId(), batchInsertCoursesDto.getCoursesTimes(),
 				batchInsertCoursesDto.getStartDate(), null,null, batchInsertCoursesDto.getTeachingArrangementList(), batchInsertCoursesDto.getTeachMode(),
-				batchInsertCoursesDto.getType(), batchInsertCoursesDto.getSchoolId(), batchInsertCoursesDto.getIsJumpHoliday());
+				batchInsertCoursesDto.getType(), batchInsertCoursesDto.getSchoolId(), batchInsertCoursesDto.getIsJumpHoliday(), null);
         return succeed();
     }