Browse Source

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

zouxuan 5 years ago
parent
commit
becc759857
17 changed files with 599 additions and 228 deletions
  1. 11 0
      cms/src/main/java/com/ym/mec/cms/controller/queryinfo/NewsInformationQueryInfo.java
  2. 11 0
      cms/src/main/java/com/ym/mec/cms/dal/entity/SysNewsInformation.java
  3. 2 0
      cms/src/main/java/com/ym/mec/cms/service/impl/SysNewsInformationServiceImpl.java
  4. 10 3
      cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml
  5. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  6. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDefaultPracticeGroupSalaryDao.java
  7. 100 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/BatchInsertCoursesDto.java
  8. 10 15
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  9. 2 4
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleTeacherSalaryService.java
  10. 284 96
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  11. 69 84
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  12. 6 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  13. 4 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  14. 1 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  15. 3 0
      mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
  16. 8 0
      mec-biz/src/main/resources/config/mybatis/TeacherDefaultPracticeGroupSalaryMapper.xml
  17. 64 20
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java

+ 11 - 0
cms/src/main/java/com/ym/mec/cms/controller/queryinfo/NewsInformationQueryInfo.java

@@ -17,6 +17,9 @@ public class NewsInformationQueryInfo extends QueryInfo {
 
 	@ApiModelProperty(value = "标题", required = false)
 	private String title;
+
+	@ApiModelProperty(value = "备注", required = false)
+	private String memo;
 	
 	private Date date;
 
@@ -51,4 +54,12 @@ public class NewsInformationQueryInfo extends QueryInfo {
 	public void setDate(Date date) {
 		this.date = date;
 	}
+
+	public String getMemo() {
+		return memo;
+	}
+
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
 }

+ 11 - 0
cms/src/main/java/com/ym/mec/cms/dal/entity/SysNewsInformation.java

@@ -45,6 +45,9 @@ public class SysNewsInformation {
 
 	/**  */
 	private java.util.Date updateTime;
+
+	@ApiModelProperty(value = "备注", required = false)
+	private String memo;
 	
 	private Boolean delFlag;
 
@@ -136,6 +139,14 @@ public class SysNewsInformation {
 		return this.updateTime;
 	}
 
+	public String getMemo() {
+		return memo;
+	}
+
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
+
 	public Boolean getDelFlag() {
 		return delFlag;
 	}

+ 2 - 0
cms/src/main/java/com/ym/mec/cms/service/impl/SysNewsInformationServiceImpl.java

@@ -51,6 +51,8 @@ public class SysNewsInformationServiceImpl extends BaseServiceImpl<Long, SysNews
 		homeList.put("banner",queryPage(queryInfo));
 		queryInfo.setType(5);
 		homeList.put("flash",queryPage(queryInfo));
+		queryInfo.setType(6);
+		homeList.put("app",queryPage(queryInfo));
 		return homeList;
 	}
 

+ 10 - 3
cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml

@@ -19,11 +19,12 @@
 		<result column="del_flag_" property="delFlag" />
 		<result column="href_target_" property="hrefTarget" />
 		<result column="order_" property="order" />
+		<result column="memo_" property="memo" />
 	</resultMap>
 	
 	<sql id="queryCondition">
 		<where>
-			del_flag_=0
+			del_flag_=0 
 			<if test="type != null">
 				and type_ = #{type}
 			</if>
@@ -36,6 +37,9 @@
 			<if test="search != null">
 				and title_ like '%' #{search} '%'
 			</if>
+			<if test="memo != null">
+				and memo_ = #{memo}
+			</if>
 		</where>
 	</sql>
 	
@@ -51,8 +55,8 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.cms.dal.entity.SysNewsInformation" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO sys_news_information (id_,title_,content_,cover_image_,type_,status_,create_time_,update_time_,link_url_,href_target_,order_,del_flag_)
-		VALUES(#{id},#{title},#{content},#{coverImage},#{type},#{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),now(),#{linkUrl},#{hrefTarget},#{order},0)
+		INSERT INTO sys_news_information (id_,title_,content_,cover_image_,type_,status_,create_time_,update_time_,link_url_,href_target_,order_,del_flag_,memo_)
+		VALUES(#{id},#{title},#{content},#{coverImage},#{type},#{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),now(),#{linkUrl},#{hrefTarget},#{order},0,#{memo})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -86,6 +90,9 @@
 			<if test="order != null">
 				order_ = #{order},
 			</if>
+			<if test="memo != null">
+				memo_ = #{memo},
+			</if>
 			<if test="delFlag != null">
 				del_flag_ = #{delFlag},
 			</if>

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

@@ -238,6 +238,18 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
                                                   @Param("groupType") GroupType groupType);
 
     /**
+     * @describe 更新课程组下课程的名字
+     * @author Joburgess
+     * @date 2020/3/5
+     * @param groupId:
+     * @param groupType:
+     * @return int
+     */
+    int updateCourseNameByGroup(@Param("groupId") String groupId,
+                                @Param("groupType") GroupType groupType,
+                                @Param("name") String name);
+
+    /**
      * 逻辑删除乐团课程
      *
      * @param musicGroupID

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDefaultPracticeGroupSalaryDao.java

@@ -15,6 +15,8 @@ public interface TeacherDefaultPracticeGroupSalaryDao extends BaseDAO<Long, Teac
 	 */
 	List<TeacherDefaultPracticeGroupSalary> queryByUserId(Integer userId);
 
+	List<TeacherDefaultPracticeGroupSalary> queryByUserIdList(@Param("userIdList") List<Integer> userIdList);
+
     int deleteByUserId(Integer userId);
     
     int batchInsert(List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaryList);

+ 100 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/BatchInsertCoursesDto.java

@@ -0,0 +1,100 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.util.Date;
+import java.util.List;
+
+import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
+
+public class BatchInsertCoursesDto {
+	
+	private String musicGroupId;
+
+	private Integer classGroupId;
+
+	private int coursesTimes;
+
+	private Date startDate;
+
+	private List<CourseTimeDto> teachingArrangementList;
+
+	private TeachModeEnum teachMode;
+
+	private CourseScheduleType type;
+
+	private Integer schoolId;
+
+	private boolean isJumpHoliday;
+
+	public String getMusicGroupId() {
+		return musicGroupId;
+	}
+
+	public void setMusicGroupId(String musicGroupId) {
+		this.musicGroupId = musicGroupId;
+	}
+
+	public Integer getClassGroupId() {
+		return classGroupId;
+	}
+
+	public void setClassGroupId(Integer classGroupId) {
+		this.classGroupId = classGroupId;
+	}
+
+	public int getCoursesTimes() {
+		return coursesTimes;
+	}
+
+	public void setCoursesTimes(int coursesTimes) {
+		this.coursesTimes = coursesTimes;
+	}
+
+	public Date getStartDate() {
+		return startDate;
+	}
+
+	public void setStartDate(Date startDate) {
+		this.startDate = startDate;
+	}
+
+	public List<CourseTimeDto> getTeachingArrangementList() {
+		return teachingArrangementList;
+	}
+
+	public void setTeachingArrangementList(List<CourseTimeDto> teachingArrangementList) {
+		this.teachingArrangementList = teachingArrangementList;
+	}
+
+	public TeachModeEnum getTeachMode() {
+		return teachMode;
+	}
+
+	public void setTeachMode(TeachModeEnum teachMode) {
+		this.teachMode = teachMode;
+	}
+
+	public CourseScheduleType getType() {
+		return type;
+	}
+
+	public void setType(CourseScheduleType type) {
+		this.type = type;
+	}
+
+	public Integer getSchoolId() {
+		return schoolId;
+	}
+
+	public void setSchoolId(Integer schoolId) {
+		this.schoolId = schoolId;
+	}
+
+	public boolean getIsJumpHoliday() {
+		return isJumpHoliday;
+	}
+
+	public void setIsJumpHoliday(boolean isJumpHoliday) {
+		this.isJumpHoliday = isJumpHoliday;
+	}
+}

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

@@ -1,16 +1,6 @@
 package com.ym.mec.biz.service;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import com.ym.mec.biz.dal.dto.CourseAttendanceDetailHeadInfoDto;
-import com.ym.mec.biz.dal.dto.CoursePostponeDto;
-import com.ym.mec.biz.dal.dto.CourseScheduleDto;
-import com.ym.mec.biz.dal.dto.CourseScheduleEndDto;
-import com.ym.mec.biz.dal.dto.CreateCourseScheduleDto;
-import com.ym.mec.biz.dal.dto.TeacherAttendanceDto;
-import com.ym.mec.biz.dal.dto.VipGroupCourseAdjustInfoDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.CourseGenerateDto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
@@ -26,6 +16,10 @@ import com.ym.mec.biz.dal.page.VipGroupQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
 public interface CourseScheduleService extends BaseService<Long, CourseSchedule> {
 
 	/**
@@ -82,14 +76,15 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @param classGroupId 班级编号
 	 * @param coursesTimes 增加的课次
 	 * @param startDate 排课开始时间
-	 * @param teachingArrangement 教学安排(周几,几点-几点)
+	 * @param teachingArrangementList 教学安排(周几,几点-几点)
 	 * @param teachMode 教学模式
 	 * @param type 课程类型
 	 * @param schoolId 教学点
+	 * @param isJumpHoliday 是否跳过节假日
 	 * @return
 	 */
-	boolean batchAddCourseSchedule(Integer classGroupId, int coursesTimes, Date startDate, String teachingArrangement, TeachModeEnum teachMode,
-			CourseScheduleType type, Integer schoolId);
+	boolean batchAddCourseSchedule(Integer classGroupId, int coursesTimes, Date startDate, List<CourseTimeDto> teachingArrangementList,
+			TeachModeEnum teachMode, CourseScheduleType type, Integer schoolId, boolean isJumpHoliday);
 
 	/**
 	 * @Author: Joburgess
@@ -439,7 +434,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @param practiceGroupId
 	 * @param teacherId
 	 */
-	void practiceGroupTeacherAdjust(String practiceGroupId, Integer teacherId);
+	void practiceGroupTeacherAdjust(String practiceGroupId, Integer teacherId, Integer subjectId);
 
 	/**
 	 * 清空老师和学生考勤

+ 2 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleTeacherSalaryService.java

@@ -5,7 +5,6 @@ import com.ym.mec.biz.dal.dto.TeacherSalaryDto;
 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.biz.dal.enums.VipGroupStatusEnum;
 import com.ym.mec.biz.dal.page.CourseScheduleTeacherSalaryQueryInfo;
 import com.ym.mec.biz.dal.page.ExportTeacherSalaryQueryInfo;
 import com.ym.mec.common.page.PageInfo;
@@ -13,7 +12,6 @@ import com.ym.mec.common.service.BaseService;
 
 import java.math.BigDecimal;
 import java.util.List;
-import java.util.Set;
 
 public interface CourseScheduleTeacherSalaryService extends BaseService<Long, CourseScheduleTeacherSalary> {
 
@@ -70,10 +68,10 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
      * @author Joburgess
      * @date 2019/12/14
      * @param vipGroupId: vip课程编号
-     * @param studentChangeNum: 学员变化数量,增加为正,减少为负
+     * @param oldTeacherId: 原课程组教师
      * @return void
      */
-    void updateVipGroupCourseTeacherSalary(Integer vipGroupId, Integer studentChangeNum, VipGroupStatusEnum vipGroupStatusEnum);
+    void updateVipGroupCourseTeacherSalary(Integer vipGroupId, Integer oldTeacherId);
 
     /**
      * 老师课程课酬列表

+ 284 - 96
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -106,6 +106,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     private MusicGroupService musicGroupService;
     @Autowired
     private SysConfigService sysConfigService;
+    @Autowired
+    private SchoolDao schoolDao;
     
     @Autowired
     private CourseHomeworkService courseHomeworkService;
@@ -245,55 +247,128 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
-	public boolean batchAddCourseSchedule(Integer classGroupId, int coursesTimes, Date startDate, String teachingArrangement, TeachModeEnum teachMode,
-			CourseScheduleType type, Integer schoolId) {
-    	ClassGroup classGroup = classGroupService.get(classGroupId);
-    	if(classGroup == null){
-    		throw new BizException("排课失败,班级信息不存在");
-    	}
-    	List<CourseTimeDto> teachingArrangementList = JsonUtil.parseArray(teachingArrangement, CourseTimeDto.class);
-    	if(teachingArrangementList == null || teachingArrangementList.size() == 0){
-    		throw new BizException("请设置课时安排");
-    	}
-    	
-    	if(teachMode == TeachModeEnum.OFFLINE && schoolId == null){
-    		throw new BizException("线下课请指定教学点");
-    	}
-    	
-    	if(type == null){
-    		throw new BizException("请指定课程类型");
-    	}
-    	
-    	//查询班级学生信息
-    	List<ClassGroupStudentMapper> classGroupStudentMapperList = classGroupStudentMapperDao.findByClassGroup(classGroupId);
-    	
-    	//查询班级老师信息
-    	List<ClassGroupTeacherMapper> classGroupTeacherMapperList = classGroupTeacherMapperService.getClassGroupTeachers(classGroupId);
-    	
-    	//查询老师默认课酬
+	@Transactional(rollbackFor = Exception.class)
+	public boolean batchAddCourseSchedule(Integer classGroupId, int coursesTimes, Date startDate, List<CourseTimeDto> teachingArrangementList,
+			TeachModeEnum teachMode, CourseScheduleType type, Integer schoolId, boolean isJumpHoliday) {
+		ClassGroup classGroup = classGroupService.get(classGroupId);
+		if (classGroup == null) {
+			throw new BizException("排课失败,班级信息不存在");
+		}
+
+		if (teachMode == TeachModeEnum.OFFLINE && schoolId == null) {
+			throw new BizException("线下课请指定教学点");
+		}
+
+		if (type == null) {
+			throw new BizException("请指定课程类型");
+		}
+
+		if (type == CourseScheduleType.VIP) {
+			throw new BizException("暂不支持vip课加课");
+		}
+
+		if (teachingArrangementList == null || teachingArrangementList.size() == 0) {
+			throw new BizException("请设置课时安排");
+		}
+
+		BigDecimal subSidy = new BigDecimal(0);
+		// 查询教学点补贴
+		if (schoolId != null) {
+			School school = schoolDao.get(schoolId);
+			if (school == null) {
+				throw new BizException("指定的教学点不存在");
+			}
+			subSidy = school.getSubsidy();
+		}
+
+		// 查询班级老师信息
+		List<ClassGroupTeacherMapper> classGroupTeacherMapperList = classGroupTeacherMapperService.getClassGroupTeachers(classGroupId);
+
+		// 查询主教老师
+		Integer teacherId = null;
+		for (ClassGroupTeacherMapper cgtm : classGroupTeacherMapperList) {
+			if (cgtm.getTeacherRole() == TeachTypeEnum.BISHOP) {
+				teacherId = cgtm.getUserId();
+				break;
+			}
+		}
+
+		if (teacherId == null) {
+			throw new BizException("班级缺少主教老师");
+		}
+
+		List<Integer> teacherIdList = classGroupTeacherMapperList.stream().map(ClassGroupTeacherMapper::getUserId).collect(Collectors.toList());
+
+		// 查询老师列表
+		List<Teacher> teacherList = teacherDao.findByTeacherIds(teacherIdList);
+		Map<Integer, Teacher> teacherMap = teacherList.stream().collect(Collectors.toMap(Teacher::getId, t -> t));
+
+		Map<Integer, BigDecimal> teacherPracticeSalaryMap = new HashMap<Integer, BigDecimal>();
+		Map<Integer, TeacherDefaultMusicGroupSalary> teacherMusicSalaryMap = new HashMap<Integer, TeacherDefaultMusicGroupSalary>();
+
+		Date entryDate = null;
+		String settlementType = null;
+
+		// 查询老师默认课酬
 		if (type == CourseScheduleType.PRACTICE) {
-			
-		} else if (type == CourseScheduleType.VIP) {
-			
+
+			List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao
+					.queryByUserIdList(teacherIdList);
+
+			teacherPracticeSalaryMap = teacherDefaultPracticeGroupSalaryList.stream().collect(
+					Collectors.toMap(TeacherDefaultPracticeGroupSalary::getUserId, TeacherDefaultPracticeGroupSalary::getMainTeacherSalary));
+
 		} else {
-			
+			MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
+			if (musicGroup == null) {
+				throw new BizException("找不到乐团信息");
+			}
+			// 乐团结算方式
+			settlementType = musicGroup.getSettlementType().getCode();
+
+			// 老师入职的分界线
+			entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
+
+			// 所有老师默认乐团课酬
+			List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaries = teacherDefaultMusicGroupSalaryDao.findByTeacher(teacherIdList);
+
+			for (TeacherDefaultMusicGroupSalary tdms : teacherDefaultMusicGroupSalaries) {
+				if (tdms.getCourseScheduleType() == type) {
+					teacherMusicSalaryMap.put(tdms.getUserId(), tdms);
+				}
+			}
 		}
-    	
-    	Map<Integer,CourseTimeDto> dayOfWeekMap = teachingArrangementList.stream().collect(Collectors.toMap(CourseTimeDto :: getDayOfWeek, ct -> ct));
-    	
-    	Calendar calendar = Calendar.getInstance();
-    	Date date = null;
-    	Date now = new Date();
-    	CourseTimeDto courseTimeDto = null;
-    	List<CourseSchedule> courseScheduleList = new ArrayList<CourseSchedule>();
-    	List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<CourseScheduleTeacherSalary>();
-        List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<CourseScheduleStudentPayment>();
-        List<TeacherAttendance> teacherAttendances = new ArrayList<TeacherAttendance>();
+
+		// 查询班级学生信息
+		List<ClassGroupStudentMapper> classGroupStudentMapperList = classGroupStudentMapperDao.findByClassGroup(classGroupId);
+
+		Map<Integer, CourseTimeDto> dayOfWeekMap = teachingArrangementList.stream().collect(Collectors.toMap(CourseTimeDto::getDayOfWeek, ct -> ct));
+
+		Calendar calendar = Calendar.getInstance();
+		Date now = new Date();
+		CourseTimeDto courseTimeDto = null;
+		List<CourseSchedule> courseScheduleList = new ArrayList<CourseSchedule>();
+		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<CourseScheduleTeacherSalary>();
+		List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<CourseScheduleStudentPayment>();
+		List<TeacherAttendance> teacherAttendances = new ArrayList<TeacherAttendance>();
+		Map<String, Integer> holidayDays = new HashMap<>();
+		if (isJumpHoliday) {
+			try {
+		        Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
+				holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
+				holidayDays = holiday.get(calendar.get(Calendar.YEAR));
+
+			} catch (Exception e) {
+				throw new BizException("获取节假日失败",e);
+			}
+		}
+		calendar.setTime(startDate);
 		for (int i = 0; i < coursesTimes; i++) {
 			while (true) {
-				startDate = DateUtil.addDays1(startDate, 1);
-				calendar.setTime(startDate);
+	            if (holidayDays.containsKey(DateUtil.format(calendar.getTime(), "MMdd"))) {
+	                calendar.add(Calendar.DATE, 1);
+	                continue;
+	            }
 				// 查询当前日期是周几
 				int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
 				if (dayOfWeek == 1) {
@@ -308,7 +383,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					courseSchedule.setMusicGroupId(classGroup.getMusicGroupId());
 					courseSchedule.setClassGroupId(classGroup.getId());
 					courseSchedule.setStatus(CourseStatusEnum.NOT_START);
-					courseSchedule.setClassDate(startDate);
+					courseSchedule.setClassDate(calendar.getTime());
 
 					String dateYmdStr = DateUtil.dateToString(calendar.getTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT);
 
@@ -320,8 +395,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					Date courseEndTime = DateUtil.stringToDate(dateYmdStr, "yyyy-MM-dd HH:mm");
 					courseSchedule.setEndClassTime(courseEndTime);
 
-					courseSchedule.setTeacherId(-1);
-					courseSchedule.setActualTeacherId(-1);
+					if (courseEndTime.before(courseStartTime)) {
+						throw new BizException("课时上课时间安排错误");
+					}
+					
+					courseSchedule.setTeacherId(teacherId);
+					courseSchedule.setActualTeacherId(teacherId);
 					courseSchedule.setCreateTime(now);
 					courseSchedule.setUpdateTime(now);
 					courseSchedule.setTeachMode(teachMode);
@@ -329,67 +408,126 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					courseSchedule.setGroupType(classGroup.getGroupType());
 					courseSchedule.setName(classGroup.getName());
 					courseSchedule.setSchoolId(schoolId);
+					courseSchedule.setSubsidy(subSidy);
 					courseScheduleList.add(courseSchedule);
 
 					// 课程与老师薪水表
-					CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
-					courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
-					courseScheduleTeacherSalary.setGroupType(classGroup.getGroupType());
-					courseScheduleTeacherSalary.setMusicGroupId(classGroup.getMusicGroupId());
-					//courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
-					//courseScheduleTeacherSalary.setUserId(practiceGroup.getUserId());
-					//courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(practiceCourseSalaryConfig.getParanValue()));
-					courseScheduleTeacherSalary.setCreateTime(now);
-					courseScheduleTeacherSalary.setUpdateTime(now);
-					courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
-					courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
+					for (ClassGroupTeacherMapper cgtm : classGroupTeacherMapperList) {
+						CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
+						courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
+						courseScheduleTeacherSalary.setGroupType(classGroup.getGroupType());
+						courseScheduleTeacherSalary.setMusicGroupId(classGroup.getMusicGroupId());
+						courseScheduleTeacherSalary.setTeacherRole(cgtm.getTeacherRole());
+						courseScheduleTeacherSalary.setUserId(cgtm.getUserId());
+						if (type == CourseScheduleType.PRACTICE) {
+							courseScheduleTeacherSalary.setExpectSalary(teacherPracticeSalaryMap.get(cgtm.getUserId()));
+						} else if (type == CourseScheduleType.VIP) {
+
+						} else {
+							TeacherDefaultMusicGroupSalary tdms = teacherMusicSalaryMap.get(cgtm.getUserId());
+
+							int newMinutes = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
+
+							int unitMinutes = 30;
+
+							// 如果当前教师是在指定日期之后入职的,则按照3.0的方式结算
+							if (type != CourseScheduleType.CLASSROOM) {
+								Teacher teacher = teacherMap.get(teacherId);
+								if (Objects.nonNull(teacher.getEntryDate())
+										&& (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
+									settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY.getCode();
+								}
+							}
+							if (StringUtils.equals(settlementType, "TEACHER_DEFAULT")) {
+								if (type == CourseScheduleType.CLASSROOM) {
+									unitMinutes = 40;
+								} else if (type == CourseScheduleType.HIGH) {
+									unitMinutes = 45;
+								}
+								if (courseScheduleTeacherSalary.getTeacherRole() == TeachTypeEnum.BISHOP) {
+									courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(tdms.getMainTeacher30MinSalary().doubleValue() * newMinutes
+											/ unitMinutes));
+								} else {
+									courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(tdms.getAssistantTeacher30MinSalary().doubleValue() * newMinutes
+											/ unitMinutes));
+								}
+							} else if (StringUtils.equals(settlementType, "GRADIENT_SALARY")) {
+								unitMinutes = 90;
+								if (type == CourseScheduleType.CLASSROOM) {
+									unitMinutes = 40;
+								} else if (type == CourseScheduleType.HIGH) {
+									unitMinutes = 45;
+								}
+								if (courseScheduleTeacherSalary.getTeacherRole() == TeachTypeEnum.BISHOP) {
+									courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(tdms.getMainTeacher90MinSalary().doubleValue() * newMinutes
+											/ unitMinutes));
+								} else {
+									courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(tdms.getAssistantTeacher90MinSalary().doubleValue() * newMinutes
+											/ unitMinutes));
+								}
+							}
+						}
+						courseScheduleTeacherSalary.setCreateTime(now);
+						courseScheduleTeacherSalary.setUpdateTime(now);
+						courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
+						courseScheduleTeacherSalary.setSubsidy(subSidy);
+						courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
+					}
 
 					// 学生缴费记录
-					CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
-					courseScheduleStudentPayment.setGroupType(classGroup.getGroupType());
-					courseScheduleStudentPayment.setMusicGroupId(classGroup.getMusicGroupId());
-					courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
-					//courseScheduleStudentPayment.setUserId(practiceGroup.getStudentId());
-					courseScheduleStudentPayment.setExpectPrice(BigDecimal.ZERO);
-					courseScheduleStudentPayment.setClassGroupId(classGroup.getId());
-					courseScheduleStudentPayment.setCreateTime(now);
-					courseScheduleStudentPayment.setUpdateTime(now);
-					courseScheduleStudentPayments.add(courseScheduleStudentPayment);
+					for (ClassGroupStudentMapper cgsm : classGroupStudentMapperList) {
+						CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+						courseScheduleStudentPayment.setGroupType(classGroup.getGroupType());
+						courseScheduleStudentPayment.setMusicGroupId(classGroup.getMusicGroupId());
+						courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
+						courseScheduleStudentPayment.setUserId(cgsm.getUserId());
+						courseScheduleStudentPayment.setExpectPrice(BigDecimal.ZERO);
+						courseScheduleStudentPayment.setClassGroupId(classGroup.getId());
+						courseScheduleStudentPayment.setCreateTime(now);
+						courseScheduleStudentPayment.setUpdateTime(now);
+						courseScheduleStudentPayments.add(courseScheduleStudentPayment);
+					}
 
 					// 教师签到记录
-					TeacherAttendance teacherAttendance = new TeacherAttendance();
-					teacherAttendance.setMusicGroupId(classGroup.getMusicGroupId());
-					//teacherAttendance.setTeacherId(practiceGroup.getUserId());
-					teacherAttendance.setClassGroupId(classGroup.getId());
-					teacherAttendance.setGroupType(classGroup.getGroupType());
-					teacherAttendance.setCourseScheduleId(courseSchedule.getId());
-					teacherAttendance.setCreateTime(now);
-					teacherAttendances.add(teacherAttendance);
-					
+					for (ClassGroupTeacherMapper cgtm : classGroupTeacherMapperList) {
+						TeacherAttendance teacherAttendance = new TeacherAttendance();
+						teacherAttendance.setMusicGroupId(classGroup.getMusicGroupId());
+						teacherAttendance.setTeacherId(cgtm.getUserId());
+						teacherAttendance.setClassGroupId(classGroup.getId());
+						teacherAttendance.setGroupType(classGroup.getGroupType());
+						teacherAttendance.setCourseScheduleId(courseSchedule.getId());
+						teacherAttendance.setCreateTime(now);
+						teacherAttendances.add(teacherAttendance);
+					}
 					break;
 				}
+                calendar.add(Calendar.DATE, 1);
 			}
 		}
 		
-		if(courseScheduleList.size() > 0){
+		//检查冲突
+		checkNewCourseSchedules(courseScheduleList, false);
+        createCourseScheduleName(courseScheduleList);
+
+		if (courseScheduleList.size() > 0) {
 			courseScheduleDao.batchAddCourseSchedules(courseScheduleList);
 		}
-		
-		if(courseScheduleTeacherSalaries.size() > 0){
+
+		if (courseScheduleTeacherSalaries.size() > 0) {
 			courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaries);
 		}
-		
-		if(courseScheduleStudentPayments.size() > 0){
+
+		if (courseScheduleStudentPayments.size() > 0) {
 			courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
 		}
-		
-		if(teacherAttendances.size() > 0){
+
+		if (teacherAttendances.size() > 0) {
 			teacherAttendanceDao.batchInsert(teacherAttendances);
 		}
-		
-		//更新班级信息
+
+		// 更新班级信息
 		classGroupService.updateClassGroupInfo(classGroupId);
-		
+
 		return true;
 	}
 
@@ -3469,12 +3607,31 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         checkNewCourseSchedules(courseSchedules,false);
 
         courseScheduleDao.update(oldCourseSchedule);
-        List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
-        if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
-            throw new BizException("请设置老师默认课酬");
+
+        PracticeGroup practiceGroup = practiceGroupDao.get(Long.valueOf(oldCourseSchedule.getMusicGroupId()));
+
+        if(Objects.nonNull(practiceGroup.getBuyMonths())){
+            List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
+            if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
+                throw new BizException("请设置老师默认课酬");
+            }
+            courseScheduleTeacherSalaryDao.batchUpdateTeacher(courseScheduleIds,teacherId);
+        }else{
+            List<CourseSchedule> groupNotStartCourses = courseScheduleDao.findGroupNotStartCourses(practiceGroup.getId().toString(), GroupType.PRACTICE);
+            if(!CollectionUtils.isEmpty(groupNotStartCourses)){
+                SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
+                BigDecimal teacherSalary = new BigDecimal(practiceCourseSalaryConfig.getParanValue());
+                List<Long> courseIds = groupNotStartCourses.stream().map(CourseSchedule::getId).collect(Collectors.toList());
+                List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseIds);
+                for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
+                    courseScheduleTeacherSalary.setUserId(teacherId);
+                    courseScheduleTeacherSalary.setExpectSalary(teacherSalary);
+                }
+                courseScheduleTeacherSalaryDao.batchUpdateTeacherExpectSalarys(courseScheduleTeacherSalaries);
+            }
         }
+
         teacherAttendanceDao.batchUpdateTeacher(courseScheduleIds,teacherId);
-        courseScheduleTeacherSalaryDao.batchUpdateTeacher(courseScheduleIds,teacherId);
         courseScheduleModifyLogDao.insert(scheduleModifyLog);
 
         Map<Integer, String> map = new HashMap<>(2);
@@ -3488,7 +3645,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void practiceGroupTeacherAdjust(String practiceGroupId, Integer teacherId) {
+    public void practiceGroupTeacherAdjust(String practiceGroupId, Integer teacherId, Integer subjectId) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (null == user) {
             throw new BizException("获取用户信息失败");
@@ -3530,15 +3687,46 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         checkNewCourseSchedules(courseSchedules,false);
         courseScheduleDao.batchUpdate(courseSchedules);
         Set<Long> courseScheduleIds = courseSchedules.stream().map(e -> e.getId()).collect(Collectors.toSet());
-        courseScheduleTeacherSalaryDao.batchUpdateTeacher(courseScheduleIds,teacherId);
 
-        List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
-        if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
-            throw new BizException("请设置老师默认课酬");
+        PracticeGroup practiceGroup = practiceGroupDao.get(Long.valueOf(practiceGroupId));
+
+        if(Objects.nonNull(practiceGroup.getBuyMonths())){
+            List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
+            if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
+                throw new BizException("请设置老师默认课酬");
+            }
+            courseScheduleTeacherSalaryDao.batchUpdateTeacher(courseScheduleIds,teacherId);
+        }else{
+            List<CourseSchedule> groupNotStartCourses = courseScheduleDao.findGroupNotStartCourses(practiceGroupId, GroupType.PRACTICE);
+            if(!CollectionUtils.isEmpty(groupNotStartCourses)){
+                SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
+                BigDecimal teacherSalary = new BigDecimal(practiceCourseSalaryConfig.getParanValue());
+                List<Long> courseIds = groupNotStartCourses.stream().map(CourseSchedule::getId).collect(Collectors.toList());
+                List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseIds);
+                for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
+                    courseScheduleTeacherSalary.setUserId(teacherId);
+                    courseScheduleTeacherSalary.setExpectSalary(teacherSalary);
+                }
+                courseScheduleTeacherSalaryDao.batchUpdateTeacherExpectSalarys(courseScheduleTeacherSalaries);
+            }
         }
         teacherAttendanceDao.batchUpdateTeacher(courseScheduleIds,teacherId);
         courseScheduleModifyLogDao.batchInsert(scheduleModifyLogs);
 
+        if(Objects.nonNull(subjectId)&&!subjectId.equals(practiceGroup.getSubjectId())){
+            Subject subject = subjectDao.get(subjectId);
+            String groupName = practiceGroup.getName();
+            groupName=groupName.substring(groupName.indexOf("•"));
+            groupName=subject.getName()+groupName;
+            practiceGroup.setName(groupName);
+            practiceGroup.setSubjectId(subjectId);
+            practiceGroupDao.update(practiceGroup);
+            ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(practiceGroupId, GroupType.PRACTICE.getCode());
+            classGroup.setName(groupName);
+            classGroupDao.update(classGroup);
+            courseScheduleDao.updateCourseNameByGroup(practiceGroupId,GroupType.PRACTICE,groupName);
+        }
+
         if (teacherIdMap != null && teacherIdMap.size() > 0) {
             sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_COURSE_SCHEDULE_CHANGE_RESULT,
                     teacherIdMap, null, 0, "7","TEACHER");

+ 69 - 84
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -20,8 +20,10 @@ import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
@@ -295,21 +297,21 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             updateTeacherSalarys.add(courseScheduleTeacherSalary);
 
             //生成教师账户资金变动记录
-            sysUserCashAccountService.updateBalance(courseScheduleTeacherSalary.getUserId(), actualSalary);
-            SysUserCashAccount teacherCashAccount = sysUserCashAccountService.get(courseScheduleTeacherSalary.getUserId().intValue());
-            SysUserCashAccountDetail teacherCashAccountDetail = new SysUserCashAccountDetail();
-            teacherCashAccountDetail.setUserId(courseScheduleTeacherSalary.getUserId());
-            teacherCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.WAGE);
-            teacherCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-            teacherCashAccountDetail.setAmount(actualSalary);
-            if(Objects.isNull(teacherCashAccount)){
-                teacherCashAccountDetail.setBalance(new BigDecimal(0));
-            }else{
-                teacherCashAccountDetail.setBalance(teacherCashAccount.getBalance());
-            }
-            teacherCashAccountDetail.setAttribute(courseScheduleTeacherSalary.getCourseScheduleId().toString());
-
-            userCashAccountDetails.add(teacherCashAccountDetail);
+//            sysUserCashAccountService.updateBalance(courseScheduleTeacherSalary.getUserId(), actualSalary);
+//            SysUserCashAccount teacherCashAccount = sysUserCashAccountService.get(courseScheduleTeacherSalary.getUserId().intValue());
+//            SysUserCashAccountDetail teacherCashAccountDetail = new SysUserCashAccountDetail();
+//            teacherCashAccountDetail.setUserId(courseScheduleTeacherSalary.getUserId());
+//            teacherCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.WAGE);
+//            teacherCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+//            teacherCashAccountDetail.setAmount(actualSalary);
+//            if(Objects.isNull(teacherCashAccount)){
+//                teacherCashAccountDetail.setBalance(new BigDecimal(0));
+//            }else{
+//                teacherCashAccountDetail.setBalance(teacherCashAccount.getBalance());
+//            }
+//            teacherCashAccountDetail.setAttribute(courseScheduleTeacherSalary.getCourseScheduleId().toString());
+//
+//            userCashAccountDetails.add(teacherCashAccountDetail);
 
             //根据学生进行投诉分组
             Map<Integer, List<CourseScheduleComplaints>> complainsGroupByStudent = null;
@@ -354,26 +356,26 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 updateStudentPayments.add(studentPayment);
 
 
-                if(returnPrice.compareTo(zero)!=0){
-                    //生成学生账户资金变动记录
-                    sysUserCashAccountService.updateBalance(studentPayment.getUserId(), returnPrice);
-                    SysUserCashAccount studentCashAccount = sysUserCashAccountService.get(studentPayment.getUserId().intValue());
-                    SysUserCashAccountDetail studentAccountDetail = new SysUserCashAccountDetail();
-                    studentAccountDetail.setUserId(studentPayment.getUserId());
-                    studentAccountDetail.setType(PlatformCashAccountDetailTypeEnum.REFUNDS);
-                    studentAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-                    studentAccountDetail.setAmount(returnPrice);
-                    studentAccountDetail.setBalance(studentCashAccount.getBalance());
-                    studentAccountDetail.setAttribute(courseScheduleTeacherSalary.getCourseScheduleId().toString());
-
-                    userCashAccountDetails.add(studentAccountDetail);
-                }
+//                if(returnPrice.compareTo(zero)!=0){
+//                    //生成学生账户资金变动记录
+//                    sysUserCashAccountService.updateBalance(studentPayment.getUserId(), returnPrice);
+//                    SysUserCashAccount studentCashAccount = sysUserCashAccountService.get(studentPayment.getUserId().intValue());
+//                    SysUserCashAccountDetail studentAccountDetail = new SysUserCashAccountDetail();
+//                    studentAccountDetail.setUserId(studentPayment.getUserId());
+//                    studentAccountDetail.setType(PlatformCashAccountDetailTypeEnum.REFUNDS);
+//                    studentAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+//                    studentAccountDetail.setAmount(returnPrice);
+//                    studentAccountDetail.setBalance(studentCashAccount.getBalance());
+//                    studentAccountDetail.setAttribute(courseScheduleTeacherSalary.getCourseScheduleId().toString());
+//
+//                    userCashAccountDetails.add(studentAccountDetail);
+//                }
             }
 
         });
-        if(!CollectionUtils.isEmpty(userCashAccountDetails)){
-            sysUserCashAccountDetailDao.batchInsert(userCashAccountDetails);
-        }
+//        if(!CollectionUtils.isEmpty(userCashAccountDetails)){
+//            sysUserCashAccountDetailDao.batchInsert(userCashAccountDetails);
+//        }
     }
 
     @Override
@@ -571,19 +573,19 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
 
             //生成教师账户资金变动记录
-            sysUserCashAccountService.updateBalance(courseScheduleTeacherSalary.getUserId(), teacherSalary);
-            SysUserCashAccount teacherCashAccount = sysUserCashAccountService.get(courseScheduleTeacherSalary.getUserId().intValue());
-            SysUserCashAccountDetail teacherCashAccountDetail = new SysUserCashAccountDetail();
-            teacherCashAccountDetail.setUserId(courseScheduleTeacherSalary.getUserId());
-            teacherCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.WAGE);
-            teacherCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-            teacherCashAccountDetail.setAmount(teacherSalary);
-            teacherCashAccountDetail.setBalance(teacherCashAccount.getBalance());
-            teacherCashAccountDetail.setAttribute(courseScheduleTeacherSalary.getCourseScheduleId().toString());
-            userCashAccountDetails.add(teacherCashAccountDetail);
+//            sysUserCashAccountService.updateBalance(courseScheduleTeacherSalary.getUserId(), teacherSalary);
+//            SysUserCashAccount teacherCashAccount = sysUserCashAccountService.get(courseScheduleTeacherSalary.getUserId().intValue());
+//            SysUserCashAccountDetail teacherCashAccountDetail = new SysUserCashAccountDetail();
+//            teacherCashAccountDetail.setUserId(courseScheduleTeacherSalary.getUserId());
+//            teacherCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.WAGE);
+//            teacherCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+//            teacherCashAccountDetail.setAmount(teacherSalary);
+//            teacherCashAccountDetail.setBalance(teacherCashAccount.getBalance());
+//            teacherCashAccountDetail.setAttribute(courseScheduleTeacherSalary.getCourseScheduleId().toString());
+//            userCashAccountDetails.add(teacherCashAccountDetail);
 
         });
-        sysUserCashAccountDetailDao.batchInsert(userCashAccountDetails);
+//        sysUserCashAccountDetailDao.batchInsert(userCashAccountDetails);
     }
 
     @Override
@@ -610,52 +612,39 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void updateVipGroupCourseTeacherSalary(Integer vipGroupId, Integer studentChangeNum, VipGroupStatusEnum vipGroupStatusEnum) {
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public void updateVipGroupCourseTeacherSalary(Integer vipGroupId, Integer oldTeacherId) {
         VipGroup vipGroup = vipGroupService.get(vipGroupId.longValue());
-        if(Objects.isNull(vipGroupStatusEnum)){
-            vipGroupStatusEnum=vipGroup.getStatus();
-        }
+
         Integer studentNum = classGroupStudentMapperDao.countGroupStudentNum(vipGroupId.toString(), GroupType.VIP.getCode());
-        Integer oldStudentNum = studentNum-studentChangeNum;
-        if(oldStudentNum<0){
-            oldStudentNum=0;
-        }
-        ClassGroupTeacherSalary classGroupTeacherSalary = classGroupTeacherSalaryDao.findByVipGoupAndTeacher(vipGroupId, vipGroup.getUserId());
-        BigDecimal onlineTeacherSalary,
-                offlineTeacherSalary;
-        if((oldStudentNum==0&&!vipGroupStatusEnum.equals(VipGroupStatusEnum.APPLYING))
-                ||Objects.isNull(classGroupTeacherSalary)){
-            TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(vipGroup.getUserId(),
-                    vipGroup.getVipGroupCategoryId());
-            if(Objects.isNull(teacherDefaultVipGroupSalary)){
-                throw new BizException("请设置课酬");
-            }
-            onlineTeacherSalary=teacherDefaultVipGroupSalary.getOnlineClassesSalary();
-            offlineTeacherSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
-        }else{
-            onlineTeacherSalary=classGroupTeacherSalary.getOnlineClassesSalary();
-            offlineTeacherSalary=classGroupTeacherSalary.getSalary();
-        }
 
-        if(oldStudentNum==0){
-            VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
-            oldStudentNum = vipGroupCategory.getStudentNum();
+        if(Objects.isNull(oldTeacherId)){
+            oldTeacherId=vipGroup.getUserId();
         }
 
+        ClassGroupTeacherSalary classGroupTeacherSalary = classGroupTeacherSalaryDao.findByVipGoupAndTeacher(vipGroupId, oldTeacherId);
+
         if(Objects.isNull(classGroupTeacherSalary)){
-            ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(vipGroupId.toString(), GroupType.VIP.getCode());
-            classGroupTeacherSalary=new ClassGroupTeacherSalary();
-            classGroupTeacherSalary.setGroupType(GroupType.VIP);
-            classGroupTeacherSalary.setMusicGroupId(vipGroupId.toString());
-            classGroupTeacherSalary.setClassGroupId(classGroup.getId());
-            classGroupTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
-            classGroupTeacherSalary.setUserId(vipGroup.getUserId());
-            classGroupTeacherSalaryDao.insert(classGroupTeacherSalary);
+            throw new BizException("教师课酬异常");
+        }
+        ClassGroupTeacherSalary newClassGroupTeacherSalary = classGroupTeacherSalaryDao.findByVipGoupAndTeacher(vipGroupId, vipGroup.getUserId());
+        if(!oldTeacherId.equals(vipGroup.getUserId())&&Objects.isNull(newClassGroupTeacherSalary)){
+            newClassGroupTeacherSalary=new ClassGroupTeacherSalary();
+            BeanUtils.copyProperties(classGroupTeacherSalary,newClassGroupTeacherSalary);
+            newClassGroupTeacherSalary.setUserId(vipGroup.getUserId());
+            classGroupTeacherSalaryDao.insert(newClassGroupTeacherSalary);
         }
 
+        BigDecimal onlineTeacherSalary,
+                offlineTeacherSalary;
+
+        onlineTeacherSalary=classGroupTeacherSalary.getOnlineClassesSalary();
+        offlineTeacherSalary=classGroupTeacherSalary.getSalary();
+
+        VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
+
         BigDecimal studentNumDecimal = new BigDecimal(studentNum);
-        BigDecimal oldStudentNumDecimal = new BigDecimal(oldStudentNum);
+        BigDecimal oldStudentNumDecimal = new BigDecimal(vipGroupCategory.getStudentNum());
 
         if(Objects.nonNull(onlineTeacherSalary)){
             onlineTeacherSalary = onlineTeacherSalary
@@ -668,9 +657,6 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     .multiply(studentNumDecimal).setScale(0,BigDecimal.ROUND_HALF_UP);
         }
 
-        classGroupTeacherSalary.setOnlineClassesSalary(onlineTeacherSalary);
-        classGroupTeacherSalary.setSalary(offlineTeacherSalary);
-
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByGroupWithNotStart(vipGroupId.toString(), GroupType.VIP.getCode());
         if(!CollectionUtils.isEmpty(courseScheduleTeacherSalaries)){
             List<Long> courseIds = courseScheduleTeacherSalaries.stream().map(CourseScheduleTeacherSalary::getCourseScheduleId).collect(Collectors.toList());
@@ -686,7 +672,6 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             }
             courseScheduleTeacherSalaryDao.batchUpdateTeacherExpectSalarys(courseScheduleTeacherSalaries);
         }
-        classGroupTeacherSalaryDao.update(classGroupTeacherSalary);
     }
 
     @Override

+ 6 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -1488,7 +1488,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         }
 
         if(!vipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING)){
-			courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroupId.intValue(),-1, vipGroup.getStatus());
+			courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroupId.intValue(), vipGroup.getUserId());
 		}
 
 		//学员退出班级群
@@ -1588,7 +1588,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			vipGroupDao.update(vipGroup);
 		}
 
-		courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroupId.intValue(),-1,vipGroup.getStatus());
+		courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroupId.intValue(), vipGroup.getUserId());
 	}
 
     @Override
@@ -1613,6 +1613,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("此学生存在退课申请,请到系统日志中查看");
 		}
 
+		Integer oldTeacherId=vipGroup.getUserId();
 		if(Objects.nonNull(studentRecoverInfo.getTeacherId())&&!studentRecoverInfo.getTeacherId().equals(vipGroup.getUserId())){
 			vipGroup.setUserId(studentRecoverInfo.getUserId());
 		}
@@ -1717,7 +1718,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         vipGroupDao.update(vipGroup);
         classGroup.setTotalClassTimes(courseScheduleDao.countClassGroupCourses(classGroup.getId()));
         classGroupDao.update(classGroup);
-		courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroup.getId().intValue(),1,vipGroup.getStatus());
+		courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroup.getId().intValue(),oldTeacherId);
 	}
 
     @Override
@@ -1886,7 +1887,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				courseScheduleService.batchDeleteMusicGroupCourseWithStudent(studentPaymentOrder.getMusicGroupId(),studentApplyRefunds.getUserId(),GroupType.VIP);
 
 
-				courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(Integer.parseInt(studentPaymentOrder.getMusicGroupId()),-1, null);
+				courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(Integer.parseInt(studentPaymentOrder.getMusicGroupId()), null);
 
 				//学员退出班级群
 				ImGroupMember[] imGroupMembers = new ImGroupMember[]{new ImGroupMember(studentApplyRefunds.getUserId().toString())};
@@ -2586,7 +2587,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		classGroupDao.update(classGroup);
 		classGroupService.updateClassGroupInfo(classGroup.getId());
 
-		courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroupId.intValue(),studentIds.size(), vipGroupStatus);
+		courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroupId.intValue(),null);
 
 		try {
 			ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -2591,4 +2591,8 @@
     <select id="findGroupNotStartCourses" resultMap="CourseSchedule">
         SELECT * FROM course_schedule WHERE group_type_=#{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} AND music_group_id_ = #{groupId} AND CONCAT(class_date_, ' ', start_class_time_)>NOW()
     </select>
+
+    <update id="updateCourseNameByGroup">
+        UPDATE course_schedule SET name_=#{name} WHERE group_type_=#{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} AND music_group_id_ = #{groupId};
+    </update>
 </mapper>

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

@@ -229,7 +229,7 @@
 		<if test="days!=null">
 			AND cs.class_date_ &lt;= DATE_FORMAT(DATE_ADD( NOW( ), INTERVAL - #{days} DAY ),'%Y-%m-%d')
 		</if>
-		AND cs.type_ IN ('VIP','PRACTICE')
+		AND cs.type_ IN ('VIP')
 		AND csts.settlement_time_ IS NULL
 		AND (cs.del_flag_ IS NULL OR cs.del_flag_=0)
     </select>

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

@@ -55,6 +55,9 @@
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.PracticeGroup">
 		UPDATE practice_group
 		<set>
+			<if test="subjectId!=null">
+				subject_id_=#{subjectId},
+			</if>
 			<if test="memo!=null">
 				memo_=#{memo},
 			</if>

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/TeacherDefaultPracticeGroupSalaryMapper.xml

@@ -100,6 +100,14 @@
 	<select id="queryByUserId" resultMap="TeacherDefaultPracticeGroupSalary">
 		SELECT * FROM teacher_default_practice_group_salary where user_id_ = #{userId} ORDER BY id_
 	</select>
+
+	<select id="queryByUserIdList" resultMap="TeacherDefaultPracticeGroupSalary">
+		SELECT * FROM teacher_default_practice_group_salary where ser_id_ IN
+		<foreach collection="userIdList" item="userId" open="(" close=")" separator=",">
+			#{userId}
+		</foreach>
+		ORDER BY id_
+	</select>
 	<select id="findByTeacherAndCourseMinutes" resultMap="TeacherDefaultPracticeGroupSalary">
 		SELECT * FROM teacher_default_practice_group_salary where user_id_ = #{userId} AND minutes_=#{minutes}
 	</select>

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

@@ -1,18 +1,54 @@
 package com.ym.mec.web.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang.ArrayUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.ClassGroupDao;
 import com.ym.mec.biz.dal.dao.ClassGroupTeacherMapperDao;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dto.BatchInsertCoursesDto;
 import com.ym.mec.biz.dal.dto.CoursePostponeDto;
 import com.ym.mec.biz.dal.dto.CreateCourseScheduleDto;
 import com.ym.mec.biz.dal.dto.VipGroupCourseAdjustInfoDto;
-import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.entity.ClassGroup;
+import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
+import com.ym.mec.biz.dal.entity.CourseScheduleComplaints;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.enums.AuditStatusEnum;
+import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
-import com.ym.mec.biz.dal.page.PracticeGroupQueryInfo;
 import com.ym.mec.biz.dal.page.StudentAttendanceQueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupQueryInfo;
 import com.ym.mec.biz.service.CourseScheduleComplaintsService;
@@ -21,22 +57,6 @@ import com.ym.mec.biz.service.MusicGroupService;
 import com.ym.mec.biz.service.StudentAttendanceService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.exception.BizException;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import io.swagger.models.auth.In;
-import org.apache.commons.lang.ArrayUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.ui.ModelMap;
-import org.springframework.util.CollectionUtils;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * @Author Joburgess
@@ -59,6 +79,10 @@ public class CourseScheduleController extends BaseController {
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private MusicGroupService musicGroupService;
+    
+    @Autowired
+    private ClassGroupDao classGroupDao;
+    
     @Autowired
     private EmployeeDao employeeDao;
 
@@ -266,6 +290,26 @@ public class CourseScheduleController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "批量新增")
+    @PostMapping("/batchAddCourses")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchAddCourses')")
+    public Object batchAddCourses(@RequestBody BatchInsertCoursesDto batchInsertCoursesDto){
+    	if(batchInsertCoursesDto.getClassGroupId() == null){
+			if (batchInsertCoursesDto.getType() != CourseScheduleType.VIP && batchInsertCoursesDto.getType() != CourseScheduleType.PRACTICE) {
+				return failed("请指定班级");
+			}
+    		List<ClassGroup> classGroupList = classGroupDao.findClassGroupByMusicGroupIdAndType(batchInsertCoursesDto.getMusicGroupId(), ClassGroupTypeEnum.valueOf(batchInsertCoursesDto.getType().getCode()));
+    		if(classGroupList == null || classGroupList.size() == 0){
+    			return failed("没有查询到班级信息");
+    		}
+    		batchInsertCoursesDto.setClassGroupId(classGroupList.get(0).getId());
+    	}
+		scheduleService.batchAddCourseSchedule(batchInsertCoursesDto.getClassGroupId(), batchInsertCoursesDto.getCoursesTimes(),
+				batchInsertCoursesDto.getStartDate(), batchInsertCoursesDto.getTeachingArrangementList(), batchInsertCoursesDto.getTeachMode(),
+				batchInsertCoursesDto.getType(), batchInsertCoursesDto.getSchoolId(), batchInsertCoursesDto.getIsJumpHoliday());
+        return succeed();
+    }
+
     @ApiOperation(value = "终极课表获取")
     @GetMapping("/superFindCourseSchedules")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/superFindCourseSchedules')")
@@ -317,8 +361,8 @@ public class CourseScheduleController extends BaseController {
     @ApiOperation(value = "陪练课课程组老师调整")
     @PostMapping("/practiceGroupTeacherAdjust")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/practiceGroupTeacherAdjust')")
-    public Object practiceGroupTeacherAdjust(String practiceGroupId, Integer teacherId){
-        scheduleService.practiceGroupTeacherAdjust(practiceGroupId,teacherId);
+    public Object practiceGroupTeacherAdjust(String practiceGroupId, Integer teacherId, Integer subjectId){
+        scheduleService.practiceGroupTeacherAdjust(practiceGroupId,teacherId,subjectId);
         return succeed();
     }