Преглед изворни кода

课酬计算基本时长调整

Joburgess пре 5 година
родитељ
комит
c60bfcd899

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

@@ -179,4 +179,13 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
     Map<String,Integer> queryOrganTeacherNum(@Param("organId") String organId);
 
     List<Teacher> findByFlowOrganRange(Map<String, Object> params);
+
+    /**
+     * @describe 根据教师编号获取教师信息
+     * @author Joburgess
+     * @date 2019/12/10
+     * @param teacherIds: 教师编号里列表
+     * @return java.util.List<com.ym.mec.biz.dal.entity.Teacher>
+     */
+    List<Teacher> findByTeacherIds(@Param("teacherIds") List<Integer> teacherIds);
 }

+ 101 - 94
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -5,98 +5,105 @@ import com.ym.mec.common.service.BaseService;
 
 public interface SysConfigService extends BaseService<Long, SysConfig> {
 
-	/**
-	 * 缴费状态提前{}天刷新
-	 */
-	public static final String REFRESH_PAYMENT_STATUS_EARLY_DAYS = "refresh_payment_status_early_days";
-
-	/**
-	 * VIP课结束后,用户可申诉时间,为课程结束后的{}天
-	 */
-	public static final String VIP_APPEAL_DAYS_RANGE = "vip_appeal_days_range";
-
-	/**
-	 * VIP课的结算周期,为课程完成后{}天
-	 */
-	public static final String VIP_SETTLEMENT_CYCLE = "vip_settlement_cycle";
-
-	/**
-	 * 课酬结算周期,为每个月的{}日
-	 */
-	public static final String COURSES_SETTLEMENT_CYCLE = "courses_settlement_cycle";
-
-	/**
-	 * 老师正常打卡时间,为课程当天,距离开课时间前{}分钟
-	 */
-	public static final String ADVANCE_SIGN_IN_MINUTES = "advance_sign_in_minutes";
-
-	/**
-	 * 乐团课,签退时间,为课程结束后开始,至结束后的{}小时
-	 */
-	public static final String SIGN_OUT_DELAY_HOURS = "sign_out_delay_hours";
-
-	/**
-	 * 老师可以打卡范围,为教学定位方圆{}米
-	 */
-	public static final String ATTENDANCE_RANGE = "attendance_range";
-
-	/**
-	 * 学生允许请假的时间,为开课前{}小时
-	 */
-	public static final String ADVANCE_LEAVE_HOURS = "advance_leave_hours";
-
-	/**
-	 * 移动端「课程调整」调整的课程时间,为开课前{}天
-	 */
-	public static final String ADVANCE_UPDATE_COURSES_DAYS = "advance_update_courses_days";
-
-	/**
-	 * 密码重置后的默认密码为{}
-	 */
-	public static final String DEFAULT_PASSWORD = "default_password";
-
-	/**
-	 * 单技课梯度结算规则设置
-	 */
-	public static final String SIGLE_GRADIENT_SETTLEMENT_RULE = "sigle_gradient_settlement_rule";
-
-	/**
-	 * 合奏课梯度结算规则设置
-	 */
-	public static final String MAX_GRADIENT_SETTLEMENT_RULE = "max_gradient_settlement_rule";
-
-	/**
-	 * 小班课梯度结算规则设置
-	 */
-	public static final String HIGH_GRADIENT_SETTLEMENT_RULE = "high_gradient_settlement_rule";
-
-	/**
-	 * 如果没有签退,{}分钟后自动发送推送信息
-	 */
-	public static final String SIGN_OUT_MESSAGE_PUSH_MINUTE = "sign_out_message_push_minute";
-
-	/**
-	 * 试听课默认单节课时长
-	 */
-	String DEMO_GROUP_SINGLE_CLASS_MINUTES_="demo_group_single_class_minutes_";
-	String USER_DEFAULT_HEAD_URL = "user_default_head_url";
-	String STUDENT_APPLY_URL = "student_apply_url";
-	String STUDENT_APPLY_PAYMENT_DETAIL_URL = "student_apply_payment_detail_url";
-	String SERVER_PHONE = "server_phone";
-
-	/** 乐团课90分钟课酬计算时的收费类型 */
-	String MUSIC_GROUP_CHARGE_TYPE_90_="music_group_charge_type_90_";
-
-	String MUSIC_GROUP_SETTLEMENT_CLASS_MINUTES="music_group_settlement_class_minutes";
-
-	String MUSIC_GROUP_SETTLEMENT_SINGLE_CLASS_MINUTES="music_group_settlement_single_class_minutes";
-
-	String REFUND_PERIOD = "refund_period";
-
-	/**
-	 * @params paramName
-	 * @return com.ym.mec.biz.dal.entity.SysConfig
-	 * @describe 根据配置名称获取配置信息
-	 */
-	SysConfig findByParamName(String paramName);
+    /**
+     * 缴费状态提前{}天刷新
+     */
+    public static final String REFRESH_PAYMENT_STATUS_EARLY_DAYS = "refresh_payment_status_early_days";
+
+    /**
+     * VIP课结束后,用户可申诉时间,为课程结束后的{}天
+     */
+    public static final String VIP_APPEAL_DAYS_RANGE = "vip_appeal_days_range";
+
+    /**
+     * VIP课的结算周期,为课程完成后{}天
+     */
+    public static final String VIP_SETTLEMENT_CYCLE = "vip_settlement_cycle";
+
+    /**
+     * 课酬结算周期,为每个月的{}日
+     */
+    public static final String COURSES_SETTLEMENT_CYCLE = "courses_settlement_cycle";
+
+    /**
+     * 老师正常打卡时间,为课程当天,距离开课时间前{}分钟
+     */
+    public static final String ADVANCE_SIGN_IN_MINUTES = "advance_sign_in_minutes";
+
+    /**
+     * 乐团课,签退时间,为课程结束后开始,至结束后的{}小时
+     */
+    public static final String SIGN_OUT_DELAY_HOURS = "sign_out_delay_hours";
+
+    /**
+     * 老师可以打卡范围,为教学定位方圆{}米
+     */
+    public static final String ATTENDANCE_RANGE = "attendance_range";
+
+    /**
+     * 学生允许请假的时间,为开课前{}小时
+     */
+    public static final String ADVANCE_LEAVE_HOURS = "advance_leave_hours";
+
+    /**
+     * 移动端「课程调整」调整的课程时间,为开课前{}天
+     */
+    public static final String ADVANCE_UPDATE_COURSES_DAYS = "advance_update_courses_days";
+
+    /**
+     * 密码重置后的默认密码为{}
+     */
+    public static final String DEFAULT_PASSWORD = "default_password";
+
+    /**
+     * 单技课梯度结算规则设置
+     */
+    public static final String SIGLE_GRADIENT_SETTLEMENT_RULE = "sigle_gradient_settlement_rule";
+
+    /**
+     * 合奏课梯度结算规则设置
+     */
+    public static final String MAX_GRADIENT_SETTLEMENT_RULE = "max_gradient_settlement_rule";
+
+    /**
+     * 小班课梯度结算规则设置
+     */
+    public static final String HIGH_GRADIENT_SETTLEMENT_RULE = "high_gradient_settlement_rule";
+
+    /**
+     * 如果没有签退,{}分钟后自动发送推送信息
+     */
+    public static final String SIGN_OUT_MESSAGE_PUSH_MINUTE = "sign_out_message_push_minute";
+
+    /**
+     * 试听课默认单节课时长
+     */
+    String DEMO_GROUP_SINGLE_CLASS_MINUTES_ = "demo_group_single_class_minutes_";
+    String USER_DEFAULT_HEAD_URL = "user_default_head_url";
+    String STUDENT_APPLY_URL = "student_apply_url";
+    String STUDENT_APPLY_PAYMENT_DETAIL_URL = "student_apply_payment_detail_url";
+    String SERVER_PHONE = "server_phone";
+
+    /**
+     * 乐团课90分钟课酬计算时的收费类型
+     */
+    String MUSIC_GROUP_CHARGE_TYPE_90_ = "music_group_charge_type_90_";
+
+    String MUSIC_GROUP_SETTLEMENT_CLASS_MINUTES = "music_group_settlement_class_minutes";
+
+    String MUSIC_GROUP_SETTLEMENT_SINGLE_CLASS_MINUTES = "music_group_settlement_single_class_minutes";
+
+    String REFUND_PERIOD = "refund_period";
+
+    /**
+     * 教师入职时间为此时间之后的,按照3.0的课酬结算
+     */
+    String TEACHER_ENTRY_DATE = "teacher_entry_date";
+
+    /**
+     * @return com.ym.mec.biz.dal.entity.SysConfig
+     * @params paramName
+     * @describe 根据配置名称获取配置信息
+     */
+    SysConfig findByParamName(String paramName);
 }

+ 63 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -100,6 +100,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     private RedisCache<String, Object> redisCache;
     @Autowired
     private ClassGroupService classGroupService;
+    @Autowired
+    private TeacherDao teacherDao;
+    @Autowired
+    private SysConfigDao sysConfigDao;
 
     @Override
     public BaseDAO<Integer, ClassGroup> getDAO() {
@@ -1018,7 +1022,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup == null) {
             throw new Exception("乐团不存在");
-        }
+        }Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue());
         Integer schoolId = musicGroup.getSchoolId();
 
         List<Integer> studentIdList = classGroup4MixDto.getStudents();
@@ -1089,6 +1093,15 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
         classGroupTeacherMapperDao.classGroupTeachersInsert(classGroupTeacherMapperList);
 
+        List<Integer> allTeacherIds = classGroupTeacherMapperList.stream()
+                .map(ClassGroupTeacherMapper::getUserId)
+                .collect(Collectors.toList());
+
+        //所有教师列表
+        List<Teacher> teachers = teacherDao.findByTeacherIds(allTeacherIds);
+        Map<Integer, Teacher> teacherMap = teachers.stream()
+                .collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
+
         //创建IM群组
         addImGroup(classGroup, userIds);
 
@@ -1174,14 +1187,20 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     //对应基准课酬
                     BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
 
+                    Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
+                    SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
+                    if(teacher.getEntryDate().after(entryDate)){
+                        settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
+                    }
+
                     //基准课酬
-                    if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
+                    if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
                         //课程时长与结算单位时长占比
                         classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                         baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
                     }
                     //阶梯课酬
-                    if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
+                    if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
                         //课程时长与结算单位时长占比
                         classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                         baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
@@ -1198,7 +1217,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         //课程时长与结算单位时长占比
                         classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(45), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                         baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                        if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
+                        if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
                             baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
                         }
                     }
@@ -1256,6 +1275,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
         Integer courseTimes = classGroup4MixDto.getCourseTimes();
 
+        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue());
+
         if (classGroup4MixDto.getCourseAddType().equals("renew")) {
             List<CourseSchedule> noStartCourses = courseScheduleService.findNoStartCoursesByClassGroupId(classGroup.getId());
             if (noStartCourses.size() > 0) {
@@ -1290,6 +1311,15 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
         }
 
+        List<Integer> allTeacherIds = newClassGroupTeacherMapperList.stream()
+                .map(ClassGroupTeacherMapper::getUserId)
+                .collect(Collectors.toList());
+
+        //所有教师列表
+        List<Teacher> teachers = teacherDao.findByTeacherIds(allTeacherIds);
+        Map<Integer, Teacher> teacherMap = teachers.stream()
+                .collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
+
         Set<String> newTeacher = newClassGroupTeacherMapperList.stream().map(
                 classGroupTeacherMapper -> classGroupTeacherMapper.getTeacherRole().getCode() + classGroupTeacherMapper.getUserId()
         ).collect(Collectors.toSet());
@@ -1388,14 +1418,20 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     //对应基准课酬
                     BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
 
+                    Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
+                    SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
+                    if(teacher.getEntryDate().after(entryDate)){
+                        settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
+                    }
+
                     //基准课酬
-                    if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
+                    if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
                         //课程时长与结算单位时长占比
                         classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                         baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
                     }
                     //阶梯课酬
-                    if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
+                    if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
                         //课程时长与结算单位时长占比
                         classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                         baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
@@ -1411,7 +1447,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         //课程时长与结算单位时长占比
                         classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(45), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                         baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                        if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
+                        if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
                             baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
                         }
                     }
@@ -1478,6 +1514,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
         Integer schoolId = musicGroup.getSchoolId();
 
+        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue());
+
         List<Integer> studentIdList = classGroup4MixDto.getStudents();
 
         List<StudentRegistration> studentList = studentRegistrationService.findStudentListByUserIdList(musicGroupId, studentIdList);
@@ -1537,6 +1575,15 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
         classGroupTeacherMapperDao.classGroupTeachersInsert(classGroupTeacherMapperList);
 
+        List<Integer> allTeacherIds = classGroupTeacherMapperList.stream()
+                .map(ClassGroupTeacherMapper::getUserId)
+                .collect(Collectors.toList());
+
+        //所有教师列表
+        List<Teacher> teachers = teacherDao.findByTeacherIds(allTeacherIds);
+        Map<Integer, Teacher> teacherMap = teachers.stream()
+                .collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
+
         //创建IM群组
         addImGroup(classGroup, userIds);
 
@@ -1624,14 +1671,20 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     //对应基准课酬
                     BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
 
+                    Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
+                    SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
+                    if(teacher.getEntryDate().after(entryDate)){
+                        settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
+                    }
+
                     //基准课酬
-                    if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
+                    if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
                         //课程时长与结算单位时长占比
                         classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                         baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
                     }
                     //阶梯课酬
-                    if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
+                    if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
                         //课程时长与结算单位时长占比
                         classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                         baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
@@ -1647,7 +1700,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         //课程时长与结算单位时长占比
                         classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(45), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                         baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                        if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
+                        if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
                             baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
                         }
                     }

+ 67 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupTeacherMapperServiceImpl.java

@@ -52,6 +52,8 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
     private TeacherAttendanceDao teacherAttendanceDao;
     @Autowired
     private CourseScheduleDao courseScheduleDao;
+    @Autowired
+    private TeacherDao teacherDao;
 
     @Override
     public BaseDAO<Long, ClassGroupTeacherMapper> getDAO() {
@@ -155,6 +157,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
     public boolean classGroupTeacherMapperUpdate(List<ClassGroupTeacherMapper> classGroupTeacherMapperList) throws Exception {
         Date date = new Date();
+        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue());
         List<Integer> classGroupIds = classGroupTeacherMapperList.stream().map(classGroupTeacherMapper -> classGroupTeacherMapper.getClassGroupId()).collect(Collectors.toList());
 
         List<CourseSchedule> classGroupNoStartCourseSchedules = courseScheduleService.findClassGroupNoStartCourseSchedules(classGroupIds, GroupType.MUSIC);
@@ -174,6 +177,11 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
         String musicGroupId = classGroupTeacherMapperList.get(0).getMusicGroupId();
         MusicGroup musicGroup = musicGroupService.get(musicGroupId);
 
+        //所有教师列表
+        List<Teacher> teachers = teacherDao.findByTeacherIds(teacherUserIds);
+        Map<Integer, Teacher> teacherMap = teachers.stream()
+                .collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
+
         //删除未开始的课程老师课酬,和签到
         List<Long> courseScheduleIds = classGroupNoStartCourseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
         courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
@@ -186,7 +194,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
                 if (!classGroupTeacherMapper.getClassGroupId().equals(classGroupNoStartCourseSchedule.getClassGroupId())) {
                     continue;
                 }
-                BigDecimal salary = new BigDecimal("0");
+                BigDecimal salary;
                 List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaryList = classGroupTeacherMapper.getTeacherDefaultMusicGroupSalaryList();
 
                 Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherDefaultMusicGroupSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
@@ -202,15 +210,21 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
                 //对应基准课酬
                 BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
 
+                Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
+                SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
+                if(teacher.getEntryDate().after(entryDate)){
+                    settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
+                }
+
 
                 //2.0课酬
-                if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.TEACHER_DEFAULT)) {
+                if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT)) {
                     //课程时长与结算单位时长占比
                     classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                     baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
                 }
                 //3.0课酬
-                if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
+                if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
                     //课程时长与结算单位时长占比
                     classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                     baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
@@ -226,7 +240,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
                     //课程时长与结算单位时长占比
                     classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(45), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                     baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                    if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
+                    if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
                         baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
                     }
                 }
@@ -255,6 +269,14 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
     public void createMusicGroupTeacherMapper(List<CourseSchedule> courseSchedules, String musicGroupId) {
         Date date = new Date();
         MusicGroup musicGroup = musicGroupService.get(musicGroupId);
+        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue());
+        List<Integer> teacherUserIds = courseSchedules.stream()
+                                        .map(CourseSchedule::getActualTeacherId)
+                                        .collect(Collectors.toList());
+        //所有教师列表
+        List<Teacher> teachers = teacherDao.findByTeacherIds(teacherUserIds);
+        Map<Integer, Teacher> teacherMap = teachers.stream()
+                .collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
         //老师默认的课酬
 //        Map<String, TeacherDefaultMusicGroupSalary> teacherDefaultSalary = new HashMap<>();
         for (CourseSchedule classGroupNoStartCourseSchedule : courseSchedules) {
@@ -279,15 +301,21 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
                 //对应基准课酬
                 BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
 
+                Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
+                SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
+                if(teacher.getEntryDate().after(entryDate)){
+                    settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
+                }
+
 
                 //2.0课酬
-                if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.TEACHER_DEFAULT)) {
+                if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT)) {
                     //课程时长与结算单位时长占比
                     classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                     baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
                 }
                 //3.0课酬
-                if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
+                if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
                     //课程时长与结算单位时长占比
                     classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                     baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
@@ -338,6 +366,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
     @Transactional(rollbackFor = Exception.class)
     public void createCourseScheduleTeacherSalary(List<CourseSchedule> courseSchedules, Map<Long, CourseSchedule> oldCourseSchedules) {
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
+        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue());
 
         //课程编号列表
         List<Long> courseScheduleIds = courseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
@@ -350,6 +379,11 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
         //所有老师列表
         allTeacherIds = allTeacherIds.stream().distinct().collect(Collectors.toList());
 
+        //所有教师列表
+        List<Teacher> teachers = teacherDao.findByTeacherIds(allTeacherIds);
+        Map<Integer, Teacher> teacherMap = teachers.stream()
+                .collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
+
         //所有老师默认乐团课酬
         List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaries = teacherDefaultMusicGroupSalaryDao.findByTeacher(allTeacherIds);
         Map<CourseSchedule.CourseScheduleType, List<TeacherDefaultMusicGroupSalary>> teacherDefaultMusicGroupSalariesGroupByCourseType = teacherDefaultMusicGroupSalaries.stream().collect(Collectors.groupingBy(TeacherDefaultMusicGroupSalary::getCourseScheduleType));
@@ -383,6 +417,11 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
             Map<Integer, TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesGroupByTeacherId = teacherDefaultMusicGroupSalariesWithCourseType.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getUserId, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
 
             if (!courseSchedule.isBishopTeacherSalaryNotCreate()) {
+                Teacher teacher = teacherMap.get(courseSchedule.getActualTeacherId());
+                if(teacher.getEntryDate().after(entryDate)){
+                    settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY.getCode();
+                }
+
                 //根据课程获取主教的默认课酬设置列表
                 TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId = teacherDefaultMusicGroupSalariesGroupByTeacherId.get(courseSchedule.getActualTeacherId());
                 courseScheduleTeacherSalaryList.add(countMusicGroupTeacherSalary(
@@ -400,7 +439,11 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
             if (CollectionUtils.isEmpty(teachingTeacherIdList)) {
                 return;
             }
-            teachingTeacherIdList.forEach(teacherId -> {
+            for (Integer teacherId : teachingTeacherIdList) {
+                Teacher teacher = teacherMap.get(teacherId);
+                if(teacher.getEntryDate().after(entryDate)){
+                    settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY.getCode();
+                }
                 TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId = teacherDefaultMusicGroupSalariesGroupByTeacherId.get(teacherId);
                 courseScheduleTeacherSalaryList.add(countMusicGroupTeacherSalary(
                         courseSchedule,
@@ -409,7 +452,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
                         courseSubsidyMap.get(courseSchedule.getId()),
                         teacherId,
                         teacherDefaultMusicGroupSalaryWithTeacherId));
-            });
+            }
         });
         courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
     }
@@ -443,13 +486,27 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
         //如果结算方式是教师默认课酬
         if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT.getCode())) {
+            BigDecimal baseTime = new BigDecimal(30);
+            if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
+                baseTime = new BigDecimal(45);
+            }
+            if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
+                baseTime = new BigDecimal(45);
+            }
             //课程时长与结算单位时长占比
-            BigDecimal classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+            BigDecimal classTimeDuty = new BigDecimal(duration).divide(baseTime, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
             BigDecimal teacherDefaultSalary = teachType == TeachTypeEnum.BISHOP ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher30MinSalary();
             teacherSalary = teacherDefaultSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
         } else if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY.getCode())) {
+            BigDecimal baseTime = new BigDecimal(90);
+            if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
+                baseTime = new BigDecimal(45);
+            }
+            if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
+                baseTime = new BigDecimal(45);
+            }
             //课程时长与结算单位时长占比
-            BigDecimal classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+            BigDecimal classTimeDuty = new BigDecimal(duration).divide(baseTime, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
             BigDecimal teacherDefaultSalary = teachType == TeachTypeEnum.BISHOP ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher90MinSalary();
             teacherSalary = teacherDefaultSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
         }

+ 20 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -53,6 +53,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     private TeacherAttendanceDao teacherAttendanceDao;
     @Autowired
     private ClassGroupDao classGroupDao;
+    @Autowired
+    private TeacherDao teacherDao;
 
     private static final Logger LOGGER = LoggerFactory
             .getLogger(CourseScheduleTeacherSalaryServiceImpl.class);
@@ -339,6 +341,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         Date yesterday = DateUtil.addDays1(now, -1);
         Integer settlementClassMinutes = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.MUSIC_GROUP_SETTLEMENT_CLASS_MINUTES).getParanValue());
         Integer singleClassTime = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.MUSIC_GROUP_SETTLEMENT_SINGLE_CLASS_MINUTES).getParanValue());
+        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue());
         //获取昨天的课程计划
         List<CourseSchedule> yesterdayCourseSchedules = courseScheduleDao.findCourseScheduleWithDate(yesterday);
         //课程编号列表
@@ -374,6 +377,11 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 .map(CourseScheduleTeacherSalary::getUserId)
                 .collect(Collectors.toList());
 
+        //所有教师列表
+        List<Teacher> teachers = teacherDao.findByTeacherIds(allTeacherIds);
+        Map<Integer, Teacher> teacherMap = teachers.stream()
+                .collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
+
         //所有老师默认乐团课酬
         List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaries = teacherDefaultMusicGroupSalaryDao.findByTeacher(allTeacherIds);
         Map<CourseSchedule.CourseScheduleType, List<TeacherDefaultMusicGroupSalary>> teacherDefaultMusicGroupSalariesGroupByCourseType = teacherDefaultMusicGroupSalaries.stream().collect(Collectors.groupingBy(TeacherDefaultMusicGroupSalary::getCourseScheduleType));
@@ -424,11 +432,20 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             CourseSchedule courseSchedule = courseScheduleIdMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
             Map<Integer, Integer> schoolClassMinutesMap = teacherClassMinutesMap.get(courseScheduleTeacherSalary.getUserId());
             Integer schoolClassMinutes = schoolClassMinutesMap.get(courseSchedule.getSchoolId());
+            //结算方式
+            String settlementType = musicGroupSettlementsMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
+            Teacher teacher=teacherMap.get(courseScheduleTeacherSalary.getUserId());
+            //如果当前教师是在指定日期之后入职的,则按照3.0的方式结算
+            if(teacher.getEntryDate().after(entryDate)){
+                settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY.getCode();
+            }
+
             //当前课程的时长
             int duration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
-            //如果是单技课或者合奏课
-            if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.SINGLE)
-                    || courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.MIX)) {
+            //如果是单技课或者合奏课并且结算方式为3.0
+            if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY.getCode())
+                    &&(courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.SINGLE)
+                    || courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.MIX))) {
                 if (schoolClassMinutes >= settlementClassMinutes && duration < singleClassTime) {
                     duration = singleClassTime;
                     durationIsChange = true;
@@ -451,7 +468,6 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
                 TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId = teacherDefaultMusicGroupSalariesGroupByTeacherId.get(courseScheduleTeacherSalary.getUserId());
 
-                String settlementType = musicGroupSettlementsMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
                 //如果结算方式是教师默认课酬
                 if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT.getCode())) {
                     //课程时长与结算单位时长占比

+ 1 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java

@@ -22,7 +22,6 @@ import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
@@ -57,7 +56,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 	private final int DEFAULT_CODE = 888888;
 
-	@Value("${message.debugMode}")
+//	@Value("${message.debugMode}")
 	private boolean debugMode;
 
 	@Override

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

@@ -548,4 +548,11 @@
             </if>
         </where>
     </select>
+
+    <select id="findByTeacherIds" resultType="com.ym.mec.biz.dal.entity.Teacher">
+        SELECT * FROM teacher WHERE id_ IN
+        <foreach collection="teacherIds" item="teacherId" open="(" close=")" separator=",">
+            #{teacherId}
+        </foreach>
+    </select>
 </mapper>

+ 1 - 1
mec-common/common-core/src/main/java/com/ym/mec/common/redis/config/RedisConfig.java

@@ -41,7 +41,7 @@ public class RedisConfig {
 	}
 
 	@Bean
-	public RedisTemplate<String, Serializable> redisTemplate(JedisConnectionFactory connectionFactory) {
+	public RedisTemplate<String, Serializable> redisTemplate() {
 		RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
 		redisTemplate.setKeySerializer(new StringRedisSerializer());
 		redisTemplate.setHashKeySerializer(new StringRedisSerializer());

+ 1 - 3
mec-common/common-core/src/main/java/com/ym/mec/common/service/impl/RedisIdGeneratorService.java

@@ -3,12 +3,10 @@ package com.ym.mec.common.service.impl;
 import com.google.common.base.Strings;
 import com.ym.mec.common.redis.service.RedisCache;
 import com.ym.mec.common.service.IdGeneratorService;
-
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.ValueOperations;
 import org.springframework.stereotype.Service;
@@ -26,7 +24,7 @@ public class RedisIdGeneratorService implements IdGeneratorService {
 
 	@Autowired
 	private RedisCache<String,Object> redisCache;
-	@Value("${message.debugMode}")
+//	@Value("${message.debugMode}")
 	private boolean debugMode;
 
 	/**