Browse Source

Merge branch 'master' into yonge

yonge 5 years ago
parent
commit
47e1d88c48

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

@@ -93,6 +93,28 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
                                                        @Param("groupType") String groupType);
                                                        @Param("groupType") String groupType);
 
 
     /**
     /**
+     * @describe 获取教师在指定时间的前一节课程
+     * @author Joburgess
+     * @date 2020.10.21
+     * @param startClassTime:
+     * @param teacherId:
+     * @return com.ym.mec.biz.dal.entity.CourseSchedule
+     */
+    CourseSchedule getTeacherPrevCourseWithStartTime(@Param("startClassTime") Date startClassTime,
+                                                     @Param("teacherId") Integer teacherId);
+
+    /**
+     * @describe 获取教师在指定时间前有签到的课程
+     * @author Joburgess
+     * @date 2020.10.21
+     * @param startClassTime:
+     * @param teacherId:
+     * @return com.ym.mec.biz.dal.entity.CourseSchedule
+     */
+    CourseSchedule getTeacherAttendanceCourseBeforeStartTime(@Param("startClassTime") Date startClassTime,
+                                                             @Param("teacherId") Integer teacherId);
+
+    /**
      * @param musicGroupId: 乐团编号
      * @param musicGroupId: 乐团编号
      * @param status:       状态
      * @param status:       状态
      * @param userId:       用户编号
      * @param userId:       用户编号

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

@@ -137,11 +137,11 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
      * @return com.ym.mec.biz.dal.dto.StudentPersonalAttendanceDto
      * @return com.ym.mec.biz.dal.dto.StudentPersonalAttendanceDto
      * @describe 根据课程统计点名记录
      * @describe 根据课程统计点名记录
      */
      */
-    @Select("SELECT COUNT(*) FROM student_attendance WHERE course_schedule_id_=#{courseScheduleId}")
+    @Select("SELECT COUNT(*) FROM student_attendance WHERE course_schedule_id_=#{courseScheduleId} AND remark_ IS NULL")
     int countByCourseSchedule(Long courseScheduleId);
     int countByCourseSchedule(Long courseScheduleId);
 
 
     /**
     /**
-     * @describe 统计每节课上的学生数
+     * @describe 统计每节课上的学生数,排除学员自己请假的记录
      * @author Joburgess
      * @author Joburgess
      * @date 2019/12/26
      * @date 2019/12/26
      * @param courseScheduleIds:
      * @param courseScheduleIds:

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendanceDto.java

@@ -62,6 +62,8 @@ public class TeacherAttendanceDto {
     @ApiModelProperty(value = "教师正常签到提前时间(分钟)",required = false)
     @ApiModelProperty(value = "教师正常签到提前时间(分钟)",required = false)
     private Integer advanceSignInMinutes;
     private Integer advanceSignInMinutes;
 
 
+    private Integer advanceSignOutMinutes;
+
     @ApiModelProperty(value = "老师可打卡范围,单位米")
     @ApiModelProperty(value = "老师可打卡范围,单位米")
     private Integer attendanceRange;
     private Integer attendanceRange;
 
 
@@ -162,6 +164,14 @@ public class TeacherAttendanceDto {
         this.teacherName = teacherName;
         this.teacherName = teacherName;
     }
     }
 
 
+    public Integer getAdvanceSignOutMinutes() {
+        return advanceSignOutMinutes;
+    }
+
+    public void setAdvanceSignOutMinutes(Integer advanceSignOutMinutes) {
+        this.advanceSignOutMinutes = advanceSignOutMinutes;
+    }
+
     public String getCourseScheduleName() {
     public String getCourseScheduleName() {
         return courseScheduleName;
         return courseScheduleName;
     }
     }

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

@@ -92,6 +92,9 @@ public class TeacherAttendance {
 	@ApiModelProperty(value = "签退附件")
 	@ApiModelProperty(value = "签退附件")
 	private String signOutAttachments;
 	private String signOutAttachments;
 
 
+	@ApiModelProperty(value = "签退备注")
+	private String signOutRemark;
+
 	public Long getCurrentScheduleId() {
 	public Long getCurrentScheduleId() {
 		return currentScheduleId;
 		return currentScheduleId;
 	}
 	}
@@ -100,6 +103,14 @@ public class TeacherAttendance {
 		this.currentScheduleId = currentScheduleId;
 		this.currentScheduleId = currentScheduleId;
 	}
 	}
 
 
+	public String getSignOutRemark() {
+		return signOutRemark;
+	}
+
+	public void setSignOutRemark(String signOutRemark) {
+		this.signOutRemark = signOutRemark;
+	}
+
 	public Date getComplaintsTime() {
 	public Date getComplaintsTime() {
 		return complaintsTime;
 		return complaintsTime;
 	}
 	}

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

@@ -23,6 +23,13 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
 public interface CourseScheduleService extends BaseService<Long, CourseSchedule> {
 public interface CourseScheduleService extends BaseService<Long, CourseSchedule> {
+	
+	/**
+	 * 查询课程信息
+	 * @param courseScheduleId
+	 * @return
+	 */
+	CourseSchedule queryById(Long courseScheduleId);
 
 
 	/**
 	/**
 	 * @Author: Joburgess
 	 * @Author: Joburgess
@@ -76,6 +83,17 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @return com.ym.mec.biz.dal.enums.YesOrNoEnum
 	 * @return com.ym.mec.biz.dal.enums.YesOrNoEnum
 	 */
 	 */
 	YesOrNoEnum enableOnlyNormalAttendance(Date startClassTime,Long userId,boolean checkSchool,Integer schoolId);
 	YesOrNoEnum enableOnlyNormalAttendance(Date startClassTime,Long userId,boolean checkSchool,Integer schoolId);
+
+	/**
+	 * @describe 检测是否可以忽略正常签到时间限制
+	 * @author Joburgess
+	 * @date 2020.10.21
+	 * @param startClassTime: 当前课程开始时间
+	 * @param teacherId: 当前课程上课教师编号
+	 * @param schoolId:当前课程教学点编号
+	 * @return boolean
+	 */
+	boolean enableIgnoreAttendanceTime(Date startClassTime, Integer teacherId, Integer schoolId);
 	
 	
 	/**
 	/**
 	 * 给班级加课
 	 * 给班级加课

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

@@ -156,4 +156,15 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
      * @return void
      * @return void
      */
      */
     void closeSalaryConfirm(String month);
     void closeSalaryConfirm(String month);
+
+    /**
+     * @describe 创建教师课程课酬记录
+     * @author Joburgess
+     * @date 2020.10.22
+     * @param courseSchedule: 课程计划
+     * @param teacherIds: 教师编号列表
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
+     */
+    List<CourseScheduleTeacherSalary> createTeacherCourseSalary(CourseSchedule courseSchedule, List<Integer> teacherIds);
+
 }
 }

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

@@ -27,6 +27,8 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
      */
      */
     public static final String ADVANCE_SIGN_IN_MINUTES = "advance_sign_in_minutes";
     public static final String ADVANCE_SIGN_IN_MINUTES = "advance_sign_in_minutes";
 
 
+    String ADVANCE_SIGN_OUT_MINUTES = "advance_sign_out_minutes";
+
     /**
     /**
      * 老师可以打卡范围,为教学定位方圆{}米
      * 老师可以打卡范围,为教学定位方圆{}米
      */
      */

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

@@ -5,10 +5,7 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.text.DateFormat;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.Map.Entry;
 import java.util.Map.Entry;
 
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FileUtils;
@@ -1085,6 +1082,9 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		Map<String, Object> params = new HashMap<String, Object>();
 		Map<String, Object> params = new HashMap<String, Object>();
 
 
 		StudentInfo studentInfo = studentRegistrationService.queryStudentInfo(userId);
 		StudentInfo studentInfo = studentRegistrationService.queryStudentInfo(userId);
+		if(Objects.isNull(studentInfo)){
+			studentInfo = new StudentInfo();
+		}
 		params.put("studentInfo", studentInfo);
 		params.put("studentInfo", studentInfo);
 		params.put("isShowVisualSeal", true);
 		params.put("isShowVisualSeal", true);
 
 

+ 48 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -254,6 +254,20 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     }
     }
 
 
     @Override
     @Override
+	public CourseSchedule queryById(Long courseScheduleId) {
+    	CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId);
+    	if(courseSchedule != null){
+    		//查询助教列表
+    		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList =  courseScheduleTeacherSalaryDao.findByCourseSchedule(courseScheduleId);
+    		if(courseScheduleTeacherSalaryList != null){
+    			List<Integer> teacherIdList = courseScheduleTeacherSalaryList.stream().filter(t -> TeachTypeEnum.TEACHING.equals(t.getTeacherRole())).map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toList());
+    			courseSchedule.setTeachingTeacherIdList(teacherIdList);
+    		}
+    	}
+		return courseSchedule;
+	}
+
+	@Override
     public TeacherAttendanceDto getCurrentCourseDetail(Long courseID) {
     public TeacherAttendanceDto getCurrentCourseDetail(Long courseID) {
         SysUser user = sysUserFeignService.queryUserInfo();
         SysUser user = sysUserFeignService.queryUserInfo();
         if (null == user) {
         if (null == user) {
@@ -267,11 +281,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             throw new BizException("课程不存在");
             throw new BizException("课程不存在");
         }
         }
         if(Objects.nonNull(currentCourseDetail.getSchoolId())){
         if(Objects.nonNull(currentCourseDetail.getSchoolId())){
-            YesOrNoEnum yesOrNoEnum = enableOnlyNormalAttendance(currentCourseDetail.getStartClassTime(),
-                    user.getId().longValue(),
-                    true,
+            boolean enableIgnoreAttendanceTime = enableIgnoreAttendanceTime(currentCourseDetail.getStartClassTime(),
+                    user.getId(),
                     currentCourseDetail.getSchoolId().intValue());
                     currentCourseDetail.getSchoolId().intValue());
-            currentCourseDetail.setOnlyNormal(yesOrNoEnum);
+            currentCourseDetail.setOnlyNormal(enableIgnoreAttendanceTime?YesOrNoEnum.YES:YesOrNoEnum.NO);
         }else{
         }else{
             currentCourseDetail.setOnlyNormal(YesOrNoEnum.NO);
             currentCourseDetail.setOnlyNormal(YesOrNoEnum.NO);
         }
         }
@@ -280,7 +293,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE);
         SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE);
         SysConfig sysConfigVip = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP);
         SysConfig sysConfigVip = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP);
         currentCourseDetail.setEnableStudentAttendanceTimeRange(sysConfig.getParanValue(Integer.class));
         currentCourseDetail.setEnableStudentAttendanceTimeRange(sysConfig.getParanValue(Integer.class));
-        currentCourseDetail.setEnableStudentAttendanceTimeRange(sysConfigVip.getParanValue(Integer.class));
+        currentCourseDetail.setEnableStudentAttendanceTimeRangeVip(sysConfigVip.getParanValue(Integer.class));
         int studentNum = studentAttendanceDao.countByCourseSchedule(courseID);
         int studentNum = studentAttendanceDao.countByCourseSchedule(courseID);
         if (Objects.nonNull(studentNum)) {
         if (Objects.nonNull(studentNum)) {
             currentCourseDetail.setStudentAttendanceIsFirstTime(studentNum > 0 ? 0 : 1);
             currentCourseDetail.setStudentAttendanceIsFirstTime(studentNum > 0 ? 0 : 1);
@@ -291,6 +304,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         currentCourseDetail.setCurrentTime(new Date());
         currentCourseDetail.setCurrentTime(new Date());
         currentCourseDetail.setAdvanceSignInMinutes(Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES)));
         currentCourseDetail.setAdvanceSignInMinutes(Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES)));
         currentCourseDetail.setAttendanceRange(Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ATTENDANCE_RANGE)));
         currentCourseDetail.setAttendanceRange(Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ATTENDANCE_RANGE)));
+        currentCourseDetail.setAdvanceSignOutMinutes(Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_OUT_MINUTES)));
         return currentCourseDetail;
         return currentCourseDetail;
     }
     }
 
 
@@ -418,7 +432,24 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         }
         }
     }
     }
 
 
-    @Override
+	@Override
+	public boolean enableIgnoreAttendanceTime(Date startClassTime, Integer teacherId, Integer schoolId) {
+		CourseSchedule prevCourse = courseScheduleDao.getTeacherAttendanceCourseBeforeStartTime(startClassTime, teacherId);
+		if(Objects.isNull(prevCourse)){
+			return false;
+		}
+		if(!schoolId.equals(prevCourse.getSchoolId())){
+			return true;
+		}
+		int minutesBetween = DateUtil.minutesBetween(prevCourse.getEndClassTime(), startClassTime);
+		if(minutesBetween>60){
+			return false;
+		}else{
+			return true;
+		}
+	}
+
+	@Override
 	@Transactional(rollbackFor = Exception.class)
 	@Transactional(rollbackFor = Exception.class)
 	public boolean batchAddCourseSchedule(Integer classGroupId, int coursesTimes, Date startDate, Date groupEndDate, Date groupStartDate, List<CourseTimeDto> teachingArrangementList,
 	public boolean batchAddCourseSchedule(Integer classGroupId, int coursesTimes, Date startDate, Date groupEndDate, Date groupStartDate, List<CourseTimeDto> teachingArrangementList,
 			TeachModeEnum teachMode, CourseScheduleType type, Integer schoolId, boolean isJumpHoliday) {
 			TeachModeEnum teachMode, CourseScheduleType type, Integer schoolId, boolean isJumpHoliday) {
@@ -2937,7 +2968,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             }
             }
 
 
             if(CourseStatusEnum.OVER.equals(oldCourseSchedule.getStatus())&&newCourseSchedule.getStartClassTime().compareTo(date)<0){
             if(CourseStatusEnum.OVER.equals(oldCourseSchedule.getStatus())&&newCourseSchedule.getStartClassTime().compareTo(date)<0){
-            	throw new BizException("调整无效");
+            	throw new BizException("调整无效,已结束不能调整至已结束");
 			}
 			}
             
             
             //课程是否已结算
             //课程是否已结算
@@ -2959,7 +2990,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				for (StudentAttendance studentAttendance : studentAttendanceList) {
 				for (StudentAttendance studentAttendance : studentAttendanceList) {
 					if (studentAttendance.getStatus() != StudentAttendanceStatusEnum.LEAVE
 					if (studentAttendance.getStatus() != StudentAttendanceStatusEnum.LEAVE
 						|| (studentAttendance.getStatus() == StudentAttendanceStatusEnum.LEAVE
 						|| (studentAttendance.getStatus() == StudentAttendanceStatusEnum.LEAVE
-							&&DateUtil.addHours(studentAttendance.getCreateTime(),4).compareTo(oldCourseSchedule.getStartClassTime())>=0)) {
+							&&StringUtils.isBlank(studentAttendance.getRemark()))) {
 						throw new BizException("{}[{}] {}-{}课程已点名", oldCourseSchedule.getName(), oldCourseSchedule.getId(), DateUtil.dateToString(
 						throw new BizException("{}[{}] {}-{}课程已点名", oldCourseSchedule.getName(), oldCourseSchedule.getId(), DateUtil.dateToString(
 								oldCourseSchedule.getStartClassTime(), DateUtil.EXPANDED_DATE_TIME_FORMAT), DateUtil.dateToString(
 								oldCourseSchedule.getStartClassTime(), DateUtil.EXPANDED_DATE_TIME_FORMAT), DateUtil.dateToString(
 								oldCourseSchedule.getEndClassTime(), DateUtil.EXPANDED_DATE_TIME_FORMAT));
 								oldCourseSchedule.getEndClassTime(), DateUtil.EXPANDED_DATE_TIME_FORMAT));
@@ -3171,10 +3202,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				vipGroupDao.update(vipGroup);
 				vipGroupDao.update(vipGroup);
 			}
 			}
 
 
-			if ((newCourseSchedule.getStatus() != oldCourseSchedule.getStatus() && newCourseSchedule.getStatus() == CourseStatusEnum.NOT_START)) {
-                
+			if (newCourseSchedule.getStatus() == CourseStatusEnum.NOT_START) {
 				//如果已结束修改成了未开始,需要更新学生考勤记录
 				//如果已结束修改成了未开始,需要更新学生考勤记录
-                studentAttendanceDao.deleteStudentAttendancesByCourse(courseScheduleId);
+				studentAttendanceDao.deleteStudentAttendancesByCourse(courseScheduleId);
+			}
+
+			if ((newCourseSchedule.getStatus() != oldCourseSchedule.getStatus() && newCourseSchedule.getStatus() == CourseStatusEnum.NOT_START)) {
                 
                 
 				// 清理课程作业
 				// 清理课程作业
 				courseHomeworkService.delHomwworkByCourseScheduleId(courseScheduleId);
 				courseHomeworkService.delHomwworkByCourseScheduleId(courseScheduleId);
@@ -3251,12 +3284,14 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						Map<CourseScheduleType, TeacherDefaultMusicGroupSalary> map = musicGroupSalaryMap.get(teacherId);
 						Map<CourseScheduleType, TeacherDefaultMusicGroupSalary> map = musicGroupSalaryMap.get(teacherId);
 
 
 						if (map == null) {
 						if (map == null) {
-							throw new BizException("老师{}没有设置默认课酬,请先设置", teacherId);
+							SysUser user = sysUserFeignService.queryUserById(teacherId);
+							throw new BizException("老师{}[{}]没有设置默认课酬,请先设置", user.getRealName(), teacherId);
 						}
 						}
 
 
 						TeacherDefaultMusicGroupSalary tdms = map.get(newCourseSchedule.getType());
 						TeacherDefaultMusicGroupSalary tdms = map.get(newCourseSchedule.getType());
 						if (tdms == null) {
 						if (tdms == null) {
-							throw new BizException("老师{}没有设置默认课酬,请先设置", teacherId);
+							SysUser user = sysUserFeignService.queryUserById(teacherId);
+							throw new BizException("老师{}[{}]没有设置默认课酬,请先设置", user.getRealName(), teacherId);
 						}
 						}
 
 
 						// 乐团结算方式
 						// 乐团结算方式

+ 195 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service.impl;
 package com.ym.mec.biz.service.impl;
 
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.dto.*;
@@ -18,10 +19,8 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.date.DateUtil;
 
 
-import org.apache.poi.util.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -31,6 +30,8 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.time.Duration;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
@@ -86,6 +87,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     private SysMessageService sysMessageService;
     private SysMessageService sysMessageService;
     @Autowired
     @Autowired
     private TeacherCourseRewardDao teacherCourseRewardDao;
     private TeacherCourseRewardDao teacherCourseRewardDao;
+    @Autowired
+    private MusicGroupDao musicGroupDao;
+    @Autowired
+    private TeacherDefaultPracticeGroupSalaryDao teacherDefaultPracticeGroupSalaryDao;
 
 
     private static final Logger LOGGER = LoggerFactory
     private static final Logger LOGGER = LoggerFactory
             .getLogger(CourseScheduleTeacherSalaryServiceImpl.class);
             .getLogger(CourseScheduleTeacherSalaryServiceImpl.class);
@@ -542,7 +547,9 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
 
         //需要根据实际上课学员结算课酬的课程编号
         //需要根据实际上课学员结算课酬的课程编号
         List<Long> needStudentAttendanceCourseScheduleIds = yesterdayCourseSchedules.stream()
         List<Long> needStudentAttendanceCourseScheduleIds = yesterdayCourseSchedules.stream()
-                .filter(c -> CourseSchedule.CourseScheduleType.HIGH_ONLINE.equals(c.getType()) || CourseSchedule.CourseScheduleType.MUSIC_NETWORK.equals(c.getType()))
+                .filter(c -> CourseSchedule.CourseScheduleType.HIGH_ONLINE.equals(c.getType())
+                        || CourseSchedule.CourseScheduleType.MUSIC_NETWORK.equals(c.getType())
+                        || CourseSchedule.CourseScheduleType.HIGH.equals(c.getType()))
                 .map(CourseSchedule::getId).collect(Collectors.toList());
                 .map(CourseSchedule::getId).collect(Collectors.toList());
 
 
         List<StudentAttendance> studentAttendances = studentAttendanceDao.findByCourseIds(needStudentAttendanceCourseScheduleIds);
         List<StudentAttendance> studentAttendances = studentAttendanceDao.findByCourseIds(needStudentAttendanceCourseScheduleIds);
@@ -735,7 +742,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             boolean isCallName = false;
             boolean isCallName = false;
             List<StudentAttendance> courseStudentAttendance = courseStudentAttendanceMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
             List<StudentAttendance> courseStudentAttendance = courseStudentAttendanceMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
             if(!CollectionUtils.isEmpty(courseStudentAttendance)){
             if(!CollectionUtils.isEmpty(courseStudentAttendance)){
-                long csaNum = courseStudentAttendance.stream().filter(csa -> DateUtil.hoursBetween(csa.getSignInTime(), courseSchedule.getStartClassTime()) < 4).count();
+                long csaNum = courseStudentAttendance.stream().filter(csa -> DateUtil.hoursBetween(csa.getCreateTime(), courseSchedule.getStartClassTime()) < 4).count();
                 if(csaNum>0){
                 if(csaNum>0){
                     isCallName = true;
                     isCallName = true;
                 }
                 }
@@ -746,19 +753,21 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 deductCost = deductCost.add(teacherSalary);
                 deductCost = deductCost.add(teacherSalary);
             }else{
             }else{
                 TeacherAttendance teacherAttendance = courseTeacherAttendances.get(0);
                 TeacherAttendance teacherAttendance = courseTeacherAttendances.get(0);
-                int signCourseTimeBetween = DateUtil.minutesBetween(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime());
                 if(Objects.isNull(teacherAttendance.getSignInStatus())){
                 if(Objects.isNull(teacherAttendance.getSignInStatus())){
                     //未签到扣除全部课酬
                     //未签到扣除全部课酬
                     deductCost = deductCost.add(teacherSalary);
                     deductCost = deductCost.add(teacherSalary);
-                }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())&&signCourseTimeBetween>=0&&signCourseTimeBetween<20){
-                    //未提前20分钟打卡扣除50元
-                    deductCost = deductCost.add(new BigDecimal(50));
-                }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())&&signCourseTimeBetween<0&&signCourseTimeBetween>-30){
-                    //迟到30分钟内扣除一半课酬
-                    deductCost = deductCost.add(teacherSalary.divide(new BigDecimal(2)));
-                }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())&&signCourseTimeBetween<=-30){
-                    //迟到30分钟及以上扣除全部课酬
-                    deductCost = deductCost.add(teacherSalary);
+                }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
+                    int signCourseTimeBetween = DateUtil.minutesBetween(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime());
+                    if(signCourseTimeBetween>=0&&signCourseTimeBetween<20){
+                        //未提前20分钟打卡扣除50元
+                        deductCost = deductCost.add(new BigDecimal(50));
+                    }else if(signCourseTimeBetween<0&&signCourseTimeBetween>-30){
+                        //迟到30分钟内扣除一半课酬
+                        deductCost = deductCost.add(teacherSalary.divide(new BigDecimal(2)));
+                    }else if(signCourseTimeBetween<=-30){
+                        //迟到30分钟及以上扣除全部课酬
+                        deductCost = deductCost.add(teacherSalary);
+                    }
                 }
                 }
 
 
                 if(!isCallName){
                 if(!isCallName){
@@ -1092,4 +1101,176 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         teacherSalaryComplaintsDao.updateComplaintStatusTuDoneWithMonth(month);
         teacherSalaryComplaintsDao.updateComplaintStatusTuDoneWithMonth(month);
         teacherCourseRewardDao.updateTeacherRewardConfirmStatusWithMonth(month, null, TeacherSalaryConfirmStatus.COMPLETED);
         teacherCourseRewardDao.updateTeacherRewardConfirmStatusWithMonth(month, null, TeacherSalaryConfirmStatus.COMPLETED);
     }
     }
+
+    @Override
+    public List<CourseScheduleTeacherSalary> createTeacherCourseSalary(CourseSchedule courseSchedule, List<Integer> teacherIds) {
+        if(Objects.isNull(courseSchedule.getType())){
+            throw new BizException("请指定课程类型");
+        }
+
+        List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<>();
+        Date now = new Date();
+        for (Integer teacherId : teacherIds) {
+            CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
+            courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
+            courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
+            courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
+            courseScheduleTeacherSalary.setClassGroupId(courseSchedule.getClassGroupId());
+            if(teacherId.equals(courseSchedule.getActualTeacherId())){
+                courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
+            }else{
+                courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.TEACHING);
+            }
+            courseScheduleTeacherSalary.setUserId(teacherId);
+            courseScheduleTeacherSalary.setCreateTime(now);
+            courseScheduleTeacherSalary.setUpdateTime(now);
+        }
+        switch (courseSchedule.getGroupType()){
+            case MUSIC:
+                //生成乐团课课酬
+                createMusicGroupCourseTeacherSalary(courseSchedule, courseScheduleTeacherSalaries);
+                break;
+            case VIP:
+                //生成vip课课酬
+                createVipGroupCourseTeacherSalary(courseSchedule, courseScheduleTeacherSalaries);
+                break;
+            case PRACTICE:
+                //生成网管课课酬
+                createPracticeGroupCourseTeacherSalary(courseSchedule, courseScheduleTeacherSalaries);
+                break;
+        }
+        return courseScheduleTeacherSalaries;
+    }
+
+    /**
+     * @describe 创建课程指定教师的课酬记录-乐团课
+     * @author Joburgess
+     * @date 2020.10.22
+     * @param courseSchedule: 课程计划
+     * @param courseScheduleTeacherSalaries: 教师课酬记录基本信息
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
+     */
+    private void createMusicGroupCourseTeacherSalary(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries) {
+        MusicGroup musicGroup = musicGroupDao.get(courseSchedule.getMusicGroupId());
+
+        List<Integer> teacherIds = courseScheduleTeacherSalaries.stream().map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toList());
+
+        List<Teacher> teachers = teacherDao.findByTeacherIds(teacherIds);
+        Map<Integer, Teacher> teacherMap = teachers.stream().collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
+
+        List<TeacherDefaultMusicGroupSalary> allTeacherDefaultMusicGroupSalary = teacherDefaultMusicGroupSalaryDao.findByTeacher(teacherIds);
+        Map<Integer, List<TeacherDefaultMusicGroupSalary>> teacherSalaryMap = allTeacherDefaultMusicGroupSalary.stream().collect(Collectors.groupingBy(TeacherDefaultMusicGroupSalary::getUserId));
+
+        Date now = new Date();
+        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
+
+        long classCourseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
+
+        for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
+            List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherSalaryMap.get(courseScheduleTeacherSalary.getUserId());
+
+            BigDecimal salary;
+
+            Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
+
+            TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(courseSchedule.getType());
+
+            Teacher teacher = teacherMap.get(courseScheduleTeacherSalary.getUserId());
+            if (teacherDefaultMusicGroupSalary == null) {
+                throw new BizException("请设置" + teacher.getRealName() + "老师的" + courseSchedule.getType().getMsg() + "课酬");
+            }
+
+            //对应基准课酬
+            BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
+
+            SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
+            if (Objects.nonNull(teacher.getEntryDate())
+                    && (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
+                settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
+            }
+
+            //基准课酬
+            if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
+                //课程时长与结算单位时长占比
+                classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+                baseSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
+            }
+            //阶梯课酬
+            if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
+                //课程时长与结算单位时长占比
+                classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+                baseSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
+            }
+
+            //课堂课课酬改为按分钟数计算,并且时长占比向下取整
+            if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)){
+                baseSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
+                classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN);
+            }
+
+            salary = baseSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
+
+            //基础技能提高课
+            if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
+                salary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
+                if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
+                    salary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
+                }
+            }
+            //线上小班课
+            if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)) {
+                Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(courseSchedule.getClassGroupId());
+                if (studentNum < 3 || studentNum > 5) {
+                    String numWaring = studentNum < 3 ? "小班课人数不能小于3," : "小班课人数不能大于5,";
+                    throw new BizException( numWaring + "请调整");
+                }
+                salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
+            }
+
+            if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) {
+                salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal("1");
+            }
+
+            courseScheduleTeacherSalary.setExpectSalary(salary);
+        }
+    }
+
+    /**
+     * @describe 创建课程指定教师的课酬记录-VIP课
+     * @author Joburgess
+     * @date 2020.10.22
+     * @param courseSchedule: 课程计划
+     * @param courseScheduleTeacherSalaries: 教师课酬记录基本信息
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
+     */
+    private void createVipGroupCourseTeacherSalary(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries){
+        VipGroup vipGroup = vipGroupService.get(Long.valueOf(courseSchedule.getMusicGroupId()));
+        for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
+            Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, courseSchedule.getActualTeacherId(), null, null);
+            courseScheduleTeacherSalary.setExpectSalary(courseSchedule.getTeachMode() == TeachModeEnum.OFFLINE?salaryMap.get("offlineTeacherSalary"):salaryMap.get("onlineTeacherSalary"));
+        }
+    }
+
+    /**
+     * @describe 创建课程指定教师的课酬记录-网管课
+     * @author Joburgess
+     * @date 2020.10.22
+     * @param courseSchedule: 课程计划
+     * @param courseScheduleTeacherSalaries: 教师课酬记录基本信息
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
+     */
+    private void createPracticeGroupCourseTeacherSalary(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries){
+        List<Integer> teacherIds = courseScheduleTeacherSalaries.stream().map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toList());
+
+        List<TeacherDefaultPracticeGroupSalary> allTeacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao.queryByUserIdList(teacherIds);
+        Map<Integer, List<TeacherDefaultPracticeGroupSalary>> teacherSalaryMap = allTeacherDefaultPracticeGroupSalaryList.stream().collect(Collectors.groupingBy(TeacherDefaultPracticeGroupSalary::getUserId));
+        for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
+            final List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaryList = teacherSalaryMap.get(courseScheduleTeacherSalary.getUserId());
+            if (teacherDefaultPracticeGroupSalaryList != null && teacherDefaultPracticeGroupSalaryList.size() > 0) {
+                courseScheduleTeacherSalary.setExpectSalary(teacherDefaultPracticeGroupSalaryList.get(0).getMainTeacherSalary());
+            } else {
+                throw new BizException("请设置老师 的网管课课酬");
+            }
+        }
+    }
 }
 }

+ 50 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -110,7 +110,10 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		teacherAttendance.setMusicGroupId(currentCourseDetail.getMusicGroupId());
 		teacherAttendance.setMusicGroupId(currentCourseDetail.getMusicGroupId());
 		teacherAttendance.setClassGroupId(currentCourseDetail.getClassId());
 		teacherAttendance.setClassGroupId(currentCourseDetail.getClassId());
 		teacherAttendance.setRemark(teacherSignOutDto.getTeacherAttendanceInfo().getRemark());
 		teacherAttendance.setRemark(teacherSignOutDto.getTeacherAttendanceInfo().getRemark());
+		teacherAttendance.setSignOutRemark(teacherSignOutDto.getTeacherAttendanceInfo().getSignOutRemark());
 		int advanceSignMinutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES));
 		int advanceSignMinutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES));
+		int advanceSignOutMinutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_OUT_MINUTES));
+		int offlineSignInEarlyForwardTime = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.OFFLINE_SIGN_IN_EARLY_FORWARD_TIME));
 
 
 		CourseSchedule courseSchedule = courseScheduleDao.get(teacherAttendance.getCourseScheduleId());
 		CourseSchedule courseSchedule = courseScheduleDao.get(teacherAttendance.getCourseScheduleId());
 		teacherAttendance.setGroupType(courseSchedule.getGroupType());
 		teacherAttendance.setGroupType(courseSchedule.getGroupType());
@@ -124,13 +127,16 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			throw new BizException("明天的课程不能进行签到");
 			throw new BizException("明天的课程不能进行签到");
 		}
 		}
 
 
+		School school = schoolDao.get(courseSchedule.getSchoolId());
+
 		String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
 		String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
 		String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
 		String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
 		String endClassTime = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
 		String endClassTime = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
 		//上课时间
 		//上课时间
 		Date classStartDateTime = DateUtil.stringToDate(classDate + " " + startClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
 		Date classStartDateTime = DateUtil.stringToDate(classDate + " " + startClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
 		Date classEndDateTime = DateUtil.stringToDate(classDate + " " + endClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
 		Date classEndDateTime = DateUtil.stringToDate(classDate + " " + endClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-		Date classEndDateAdd60Minutes = DateUtil.addMinutes(classEndDateTime, 180);
+		Date classEndDateAdd60Minutes = DateUtil.addMinutes(classEndDateTime, advanceSignOutMinutes);
+		Date add60Minutes = DateUtil.addMinutes(classStartDateTime, offlineSignInEarlyForwardTime * -1);
 		Date add20Minutes = DateUtil.addMinutes(classStartDateTime, advanceSignMinutes * -1);
 		Date add20Minutes = DateUtil.addMinutes(classStartDateTime, advanceSignMinutes * -1);
 		if(teacherAttendance.getSignInTime() == null && teacherSignOutDto.getTeacherAttendanceInfo().getStatus().equals(SignStatusEnum.SIGN_IN.getCode())){
 		if(teacherAttendance.getSignInTime() == null && teacherSignOutDto.getTeacherAttendanceInfo().getStatus().equals(SignStatusEnum.SIGN_IN.getCode())){
 
 
@@ -138,8 +144,6 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 				throw new BizException("未获取到您的位置");
 				throw new BizException("未获取到您的位置");
 			}
 			}
 
 
-			School school = schoolDao.get(courseSchedule.getSchoolId());
-
 			//是否在范围内
 			//是否在范围内
 			boolean isInScore = true;
 			boolean isInScore = true;
 			if(StringUtils.isBlank(school.getLongitudeLatitude())){
 			if(StringUtils.isBlank(school.getLongitudeLatitude())){
@@ -150,6 +154,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 					isInScore = false;
 					isInScore = false;
 				}
 				}
 			}else{
 			}else{
+			    teacherAttendance.setSignInLongitudeLatitude(teacherSignOutDto.getTeacherAttendanceInfo().getSignInLongitudeLatitude());
 				SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
 				SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
 				double attendanceRange = Double.valueOf(sysConfig.getParanValue());
 				double attendanceRange = Double.valueOf(sysConfig.getParanValue());
 				double distance = MapUtil.distance(teacherSignOutDto.getTeacherAttendanceInfo().getSignInLongitudeLatitude(),
 				double distance = MapUtil.distance(teacherSignOutDto.getTeacherAttendanceInfo().getSignInLongitudeLatitude(),
@@ -165,24 +170,25 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 				throw new BizException("该课程已结束,不能进行签到!");
 				throw new BizException("该课程已结束,不能进行签到!");
 			}
 			}
 
 
-			YesOrNoEnum yesOrNoEnum = YesOrNoEnum.NO;
+			boolean enableIgnoreAttendanceTime = false;
 			if(Objects.nonNull(courseSchedule.getSchoolId())){
 			if(Objects.nonNull(courseSchedule.getSchoolId())){
-				yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(currentCourseDetail.getStartClassTime(),
-						user.getId().longValue(),
-						true,
+				enableIgnoreAttendanceTime = courseScheduleService.enableIgnoreAttendanceTime(currentCourseDetail.getStartClassTime(),
+						user.getId(),
 						currentCourseDetail.getSchoolId().intValue());
 						currentCourseDetail.getSchoolId().intValue());
 			}
 			}
 			teacherAttendance.setSignInTime(date);
 			teacherAttendance.setSignInTime(date);
 			teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
 			teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
 			result.put("signInStatus",0);
 			result.put("signInStatus",0);
-			if(yesOrNoEnum == YesOrNoEnum.YES){
-				//连堂课
-			}else if(DateUtil.minutesBetween(date,add20Minutes) >= 0){
+			if(!isInScore){
+				teacherAttendance.setSignInStatus(YesOrNoEnum.NO);
+			}else if(enableIgnoreAttendanceTime){
+				//连堂课,可忽略正常时间签到范围
+			}else if(date.compareTo(add20Minutes) <= 0&&date.compareTo(add60Minutes)>=0){
 				//正常签到范围(开始前60分钟  ~  开始之前20分钟)
 				//正常签到范围(开始前60分钟  ~  开始之前20分钟)
 				if(!isInScore){
 				if(!isInScore){
 					teacherAttendance.setSignInStatus(YesOrNoEnum.NO);
 					teacherAttendance.setSignInStatus(YesOrNoEnum.NO);
 				}
 				}
-			}else if(DateUtil.minutesBetween(add20Minutes,date) > 0){
+			}else if(date.compareTo(add20Minutes) > 0||date.compareTo(add60Minutes) < 0){
 				if(StringUtils.isEmpty(teacherAttendance.getRemark())&&!teacherSignOutDto.isNotRturnErrorInfo()){
 				if(StringUtils.isEmpty(teacherAttendance.getRemark())&&!teacherSignOutDto.isNotRturnErrorInfo()){
 					//当前为异常签到,请填写原因!
 					//当前为异常签到,请填写原因!
 					result.put("status",2);
 					result.put("status",2);
@@ -201,17 +207,43 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			}
 			}
 			return result;
 			return result;
 		}else if(teacherAttendance.getSignOutTime() == null && teacherSignOutDto.getTeacherAttendanceInfo().getStatus().equals(SignStatusEnum.SIGN_OUT.getCode())){
 		}else if(teacherAttendance.getSignOutTime() == null && teacherSignOutDto.getTeacherAttendanceInfo().getStatus().equals(SignStatusEnum.SIGN_OUT.getCode())){
+			//是否在范围内
+			boolean isInScore = false;
+			if(StringUtils.isBlank(school.getLongitudeLatitude())){
+				if(teacherSignOutDto.getTeacherAttendanceInfo().getUpdate().equals(YesOrNoEnum.YES.getCode())){
+					school.setLongitudeLatitude(teacherSignOutDto.getTeacherAttendanceInfo().getSignInLongitudeLatitude());
+					schoolDao.update(school);
+				}
+			}else if(StringUtils.isNotBlank(teacherSignOutDto.getTeacherAttendanceInfo().getSignOutLongitudeLatitude())){
+			    teacherAttendance.setSignOutLongitudeLatitude(teacherSignOutDto.getTeacherAttendanceInfo().getSignOutLongitudeLatitude());
+				SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
+				double attendanceRange = Double.valueOf(sysConfig.getParanValue());
+				double distance = MapUtil.distance(teacherSignOutDto.getTeacherAttendanceInfo().getSignOutLongitudeLatitude(),
+						school.getLongitudeLatitude());
+				if(distance<=attendanceRange){
+					isInScore=true;
+				}
+			}
+
 			//正常签退范围(结束后1小时内)
 			//正常签退范围(结束后1小时内)
 			teacherAttendance.setSignOutTime(date);
 			teacherAttendance.setSignOutTime(date);
 			teacherAttendance.setSignOutAttachments(teacherSignOutDto.getCourseHomeworkInfo().getAttachments());
 			teacherAttendance.setSignOutAttachments(teacherSignOutDto.getCourseHomeworkInfo().getAttachments());
 			ClassGroup classGroup = classGroupDao.get(courseSchedule.getClassGroupId());
 			ClassGroup classGroup = classGroupDao.get(courseSchedule.getClassGroupId());
 			teacherAttendance.setCurrentClassTimes(classGroup.getCurrentClassTimes() + 1);
 			teacherAttendance.setCurrentClassTimes(classGroup.getCurrentClassTimes() + 1);
-			if(DateUtil.minutesBetween(classEndDateTime,date) >= 0 && DateUtil.minutesBetween(date,classEndDateAdd60Minutes) >= 0){
+			if(!isInScore){
+				teacherAttendance.setSignOutStatus(YesOrNoEnum.NO);
+				result.put("signOutStatus",1);
+			}else if(date.compareTo(classEndDateTime) >= 0 && date.compareTo(classEndDateAdd60Minutes) <= 0){
 				teacherAttendance.setSignOutStatus(YesOrNoEnum.YES);
 				teacherAttendance.setSignOutStatus(YesOrNoEnum.YES);
-				result.put("signInStatus",0);
-			}else if(DateUtil.minutesBetween(classEndDateAdd60Minutes,date) > 0){
+				result.put("signOutStatus",0);
+			}else if(date.compareTo(classEndDateAdd60Minutes) > 0){
+				if(StringUtils.isEmpty(teacherAttendance.getSignOutRemark())&&!teacherSignOutDto.isNotRturnErrorInfo()){
+					//当前为异常签退,请填写原因!
+					result.put("status",2);
+					return result;
+				}
 				teacherAttendance.setSignOutStatus(YesOrNoEnum.NO);
 				teacherAttendance.setSignOutStatus(YesOrNoEnum.NO);
-				result.put("signInStatus",1);
+				result.put("signOutStatus",1);
 			}else {
 			}else {
 				throw new BizException("签退时间异常");
 				throw new BizException("签退时间异常");
 			}
 			}
@@ -510,7 +542,9 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		TeacherAttendance teacherAttendanceInfo = teacherAttendanceDao.findByTeacherAttendanceInfo(userId.longValue(), courseScheduleId.longValue());
 		TeacherAttendance teacherAttendanceInfo = teacherAttendanceDao.findByTeacherAttendanceInfo(userId.longValue(), courseScheduleId.longValue());
 		teacherSignDetail.setTeacherAttendanceInfo(teacherAttendanceInfo);
 		teacherSignDetail.setTeacherAttendanceInfo(teacherAttendanceInfo);
 		CourseHomework courseHomewok = courseHomeworkDao.findByCourseSchedule(courseScheduleId.longValue());
 		CourseHomework courseHomewok = courseHomeworkDao.findByCourseSchedule(courseScheduleId.longValue());
-		courseHomewok.setAttachments(teacherAttendanceInfo.getSignOutAttachments());
+		if(Objects.nonNull(teacherAttendanceInfo)&&Objects.nonNull(courseHomewok)){
+			courseHomewok.setAttachments(teacherAttendanceInfo.getSignOutAttachments());
+		}
 		teacherSignDetail.setCourseHomeworkInfo(courseHomewok);
 		teacherSignDetail.setCourseHomeworkInfo(courseHomewok);
 		return teacherSignDetail;
 		return teacherSignDetail;
 	}
 	}

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

@@ -437,6 +437,8 @@
         ORDER BY cs.id_
         ORDER BY cs.id_
     </select>
     </select>
 
 
+
+
     <resultMap id="studentAttendanceViewUtilEntity" type="com.ym.mec.biz.dal.dto.StudentAttendanceViewDto">
     <resultMap id="studentAttendanceViewUtilEntity" type="com.ym.mec.biz.dal.dto.StudentAttendanceViewDto">
         <result property="classGroupId" column="class_group_id_"/>
         <result property="classGroupId" column="class_group_id_"/>
         <result property="studentId" column="student_id_"/>
         <result property="studentId" column="student_id_"/>
@@ -2321,7 +2323,7 @@
             course_schedule cs
             course_schedule cs
             LEFT JOIN school s ON cs.schoole_id_=s.id_
             LEFT JOIN school s ON cs.schoole_id_=s.id_
             LEFT JOIN organization o ON cs.organ_id_=o.id_
             LEFT JOIN organization o ON cs.organ_id_=o.id_
-            LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_
+            LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_ AND sa.remark_ IS NULL
             <include refid="endFindCourseSchedulesCondition"/>
             <include refid="endFindCourseSchedulesCondition"/>
         GROUP BY cs.id_
         GROUP BY cs.id_
         ORDER BY course_start_time_,cs.id_
         ORDER BY course_start_time_,cs.id_
@@ -3244,4 +3246,67 @@
         GROUP BY cgtm.class_group_id_
         GROUP BY cgtm.class_group_id_
     </select>
     </select>
 
 
+    <select id="getTeacherPrevCourseWithStartTime" resultMap="CourseSchedule">
+        SELECT  cs.id_,
+                cs.music_group_id_,
+                cs.group_type_,
+                cs.class_group_id_,
+                cs.status_,
+                cs.subsidy_,
+                cs.class_date_,
+                CONCAT(cs.class_date_, ' ', cs.start_class_time_) start_class_time_,
+                CONCAT(cs.class_date_, ' ', cs.end_class_time_)   end_class_time_,
+                cs.teacher_id_,
+                cs.actual_teacher_id_,
+                cs.create_time_,
+                cs.update_time_,
+                cs.teach_mode_,
+                cs.type_,
+                cs.name_,
+                cs.student_num_,
+                cs.leave_student_num_,
+                cs.teaching_content_,
+                cs.note_,
+                cs.schoole_id_,
+                cs.organ_id_
+        FROM course_schedule cs LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_=cs.id_
+        WHERE csts.user_id_=#{teacherId}
+        AND cs.class_date_ = DATE_FORMAT(#{startClassTime},'%Y-%m-%d')
+        AND cs.start_class_time_ &lt; DATE_FORMAT(#{startClassTime},'%H:%i:%S')
+        ORDER BY start_class_time_ DESC LIMIT 1;
+    </select>
+
+    <select id="getTeacherAttendanceCourseBeforeStartTime" resultMap="CourseSchedule">
+        SELECT  cs.id_,
+                cs.music_group_id_,
+                cs.group_type_,
+                cs.class_group_id_,
+                cs.status_,
+                cs.subsidy_,
+                cs.class_date_,
+                CONCAT(cs.class_date_, ' ', cs.start_class_time_) start_class_time_,
+                CONCAT(cs.class_date_, ' ', cs.end_class_time_)   end_class_time_,
+                cs.teacher_id_,
+                cs.actual_teacher_id_,
+                cs.create_time_,
+                cs.update_time_,
+                cs.teach_mode_,
+                cs.type_,
+                cs.name_,
+                cs.student_num_,
+                cs.leave_student_num_,
+                cs.teaching_content_,
+                cs.note_,
+                cs.schoole_id_,
+                cs.organ_id_
+        FROM course_schedule cs
+            LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_=cs.id_
+            LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_ AND ta.teacher_id_=#{teacherId}
+        WHERE csts.user_id_=#{teacherId}
+        AND cs.class_date_ = DATE_FORMAT(#{startClassTime},'%Y-%m-%d')
+        AND cs.start_class_time_ &lt; DATE_FORMAT(#{startClassTime},'%H:%i:%S')
+        AND ta.sign_in_status_ IS NOT NULL
+        ORDER BY start_class_time_ DESC LIMIT 1;
+    </select>
+
 </mapper>
 </mapper>

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

@@ -437,6 +437,7 @@
             <foreach collection="courseScheduleIds" item="courseScheduleId" open="(" close=")" separator=",">
             <foreach collection="courseScheduleIds" item="courseScheduleId" open="(" close=")" separator=",">
                 #{courseScheduleId}
                 #{courseScheduleId}
             </foreach>
             </foreach>
+            AND remark_ IS NULL
         GROUP BY
         GROUP BY
             course_schedule_id_
             course_schedule_id_
     </select>
     </select>

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

@@ -31,6 +31,7 @@
         <result column="complaints_time_" property="complaintsTime"/>
         <result column="complaints_time_" property="complaintsTime"/>
         <result column="current_schedule_id_" property="currentScheduleId"/>
         <result column="current_schedule_id_" property="currentScheduleId"/>
         <result column="sign_out_attachments_" property="signOutAttachments"/>
         <result column="sign_out_attachments_" property="signOutAttachments"/>
+        <result column="sign_out_remark_" property="signOutRemark"/>
     </resultMap>
     </resultMap>
     
     
     <resultMap type="com.ym.mec.biz.dal.dto.Mapper" id="Mapper">
     <resultMap type="com.ym.mec.biz.dal.dto.Mapper" id="Mapper">
@@ -54,18 +55,20 @@
             keyColumn="id" keyProperty="id">
             keyColumn="id" keyProperty="id">
         INSERT INTO teacher_attendance
         INSERT INTO teacher_attendance
         (group_type_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,remark_,create_time_,sign_out_time_,
         (group_type_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,remark_,create_time_,sign_out_time_,
-        sign_out_status_,current_class_times_,sign_in_longitude_latitude_,sign_out_longitude_latitude_,current_schedule_id_,sign_out_attachments_)
+        sign_out_status_,current_class_times_,sign_in_longitude_latitude_,sign_out_longitude_latitude_,current_schedule_id_,sign_out_attachments_,
+        sign_out_remark_)
         VALUES(#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{teacherId},
         VALUES(#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{teacherId},
         #{musicGroupId},#{classGroupId},#{courseScheduleId},#{signInTime},#{signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{remark},
         #{musicGroupId},#{classGroupId},#{courseScheduleId},#{signInTime},#{signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{remark},
         now(),#{signOutTime},#{signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
         now(),#{signOutTime},#{signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-        #{currentClassTimes},#{signInLongitudeLatitude},#{signOutLongitudeLatitude},#{currentScheduleId},#{signOutAttachments})
+        #{currentClassTimes},#{signInLongitudeLatitude},#{signOutLongitudeLatitude},#{currentScheduleId},#{signOutAttachments},#{signOutRemark})
     </insert>
     </insert>
 
 
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.TeacherAttendance" useGeneratedKeys="true"
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.TeacherAttendance" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
             keyColumn="id" keyProperty="id">
         INSERT INTO teacher_attendance
         INSERT INTO teacher_attendance
         (group_type_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,
         (group_type_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,
-        remark_,create_time_,sign_out_time_,sign_out_status_,sign_in_longitude_latitude_,sign_out_longitude_latitude_,current_schedule_id_,sign_out_attachments_)
+        remark_,create_time_,sign_out_time_,sign_out_status_,sign_in_longitude_latitude_,sign_out_longitude_latitude_,current_schedule_id_,sign_out_attachments_,
+        sign_out_remark_)
         VALUE
         VALUE
         <foreach collection="teacherAttendances" item="teacherAttendance" separator=",">
         <foreach collection="teacherAttendances" item="teacherAttendance" separator=",">
             (#{teacherAttendance.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             (#{teacherAttendance.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
@@ -74,7 +77,8 @@
             #{teacherAttendance.signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{teacherAttendance.signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{teacherAttendance.remark},now(),#{teacherAttendance.signOutTime},
             #{teacherAttendance.remark},now(),#{teacherAttendance.signOutTime},
             #{teacherAttendance.signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{teacherAttendance.signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-            #{teacherAttendance.signInLongitudeLatitude},#{teacherAttendance.signOutLongitudeLatitude},#{teacherAttendance.currentScheduleId},#{teacherAttendance.signOutAttachments})
+            #{teacherAttendance.signInLongitudeLatitude},#{teacherAttendance.signOutLongitudeLatitude},#{teacherAttendance.currentScheduleId},
+            #{teacherAttendance.signOutAttachments},#{teacherAttendance.signOutRemark})
         </foreach>
         </foreach>
     </insert>
     </insert>
 
 
@@ -145,6 +149,9 @@
             <if test="signOutAttachments != null">
             <if test="signOutAttachments != null">
                 sign_out_attachments_ = #{signOutAttachments},
                 sign_out_attachments_ = #{signOutAttachments},
             </if>
             </if>
+            <if test="signOutRemark != null">
+                sign_out_remark_ = #{signOutRemark},
+            </if>
         </set>
         </set>
         WHERE id_ = #{id}
         WHERE id_ = #{id}
     </update>
     </update>

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

@@ -49,7 +49,7 @@ import java.util.stream.Collectors;
 public class CourseScheduleController extends BaseController {
 public class CourseScheduleController extends BaseController {
 
 
     @Autowired
     @Autowired
-    private CourseScheduleService scheduleService;
+    private CourseScheduleService courseScheduleService;
     @Autowired
     @Autowired
     private StudentAttendanceService studentAttendanceService;
     private StudentAttendanceService studentAttendanceService;
     @Autowired
     @Autowired
@@ -69,6 +69,37 @@ public class CourseScheduleController extends BaseController {
     @Autowired
     @Autowired
     private VipGroupDao vipGroupDao;
     private VipGroupDao vipGroupDao;
 
 
+    @ApiOperation(value = "课表详情")
+    @GetMapping("/query")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/query')")
+    public Object query(Long courseScheduleId){
+        return succeed(courseScheduleService.queryById(courseScheduleId));
+    }
+
+    @ApiOperation(value = "终极课表获取")
+    @GetMapping("/superFindCourseSchedules")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/superFindCourseSchedules')")
+    public Object superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (org.apache.commons.lang3.StringUtils.isEmpty(queryInfo.getOrganIdList())) {
+                queryInfo.setOrganIdList(employee.getOrganIdList());
+            }else if(org.apache.commons.lang3.StringUtils.isEmpty(employee.getOrganIdList())){
+                return failed("用户所在分部异常");
+            }else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if(!list.containsAll(Arrays.asList(queryInfo.getOrganIdList().split(",")))){
+                    return failed("非法请求");
+                }
+            }
+        }
+        return succeed(courseScheduleService.endFindCourseSchedules(queryInfo));
+    }
+
     @ApiOperation(value = "排课")
     @ApiOperation(value = "排课")
     @PostMapping("/batchAddCourseSchedule")
     @PostMapping("/batchAddCourseSchedule")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchAddCourseSchedule')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchAddCourseSchedule')")
@@ -103,7 +134,7 @@ public class CourseScheduleController extends BaseController {
             courseSchedule.setOrganId(musicGroup.getOrganId());
             courseSchedule.setOrganId(musicGroup.getOrganId());
         });
         });
 
 
-        scheduleService.createCourseSchedules(createCourseScheduleDto);
+        courseScheduleService.createCourseSchedules(createCourseScheduleDto);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -112,7 +143,7 @@ public class CourseScheduleController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchUpdateCourseSchedule')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchUpdateCourseSchedule')")
     public Object batchUpdateCourseSchedule(@RequestBody List<CourseSchedule> courseSchedules,
     public Object batchUpdateCourseSchedule(@RequestBody List<CourseSchedule> courseSchedules,
                                             @ApiParam(value = "乐团编号", required = true) @PathVariable("musicGroupID") String musicGroupID){
                                             @ApiParam(value = "乐团编号", required = true) @PathVariable("musicGroupID") String musicGroupID){
-        scheduleService.batchUpdateCourseSchedule(courseSchedules,musicGroupID);
+        courseScheduleService.batchUpdateCourseSchedule(courseSchedules,musicGroupID);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -125,7 +156,7 @@ public class CourseScheduleController extends BaseController {
         }
         }
         long[] ints = Arrays.asList(courseScheduleIds.split(",")).stream().mapToLong(Long::parseLong).toArray();
         long[] ints = Arrays.asList(courseScheduleIds.split(",")).stream().mapToLong(Long::parseLong).toArray();
         Long[] longs = ArrayUtils.toObject(ints);
         Long[] longs = ArrayUtils.toObject(ints);
-        scheduleService.batchDeleteCourseSchedules(Arrays.asList(longs));
+        courseScheduleService.batchDeleteCourseSchedules(Arrays.asList(longs));
         return succeed();
         return succeed();
     }
     }
 
 
@@ -133,7 +164,7 @@ public class CourseScheduleController extends BaseController {
     @PostMapping(value = "/findVipGroupCourseSchedules")
     @PostMapping(value = "/findVipGroupCourseSchedules")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/findVipGroupCourseSchedules')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/findVipGroupCourseSchedules')")
     public Object findVipGroupCourseSchedules(VipGroupQueryInfo queryInfo){
     public Object findVipGroupCourseSchedules(VipGroupQueryInfo queryInfo){
-        return succeed(scheduleService.findVipGroupCourseSchedules(queryInfo));
+        return succeed(courseScheduleService.findVipGroupCourseSchedules(queryInfo));
     }
     }
 
 
     @ApiOperation(value = "根据月份获取乐团在该月有课的日期")
     @ApiOperation(value = "根据月份获取乐团在该月有课的日期")
@@ -141,14 +172,14 @@ public class CourseScheduleController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/getCourseScheduleDateByMonth')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/getCourseScheduleDateByMonth')")
         public Object getCourseScheduleDateByMonth(@ApiParam(value = "乐团编号", required = true) @RequestParam Long musicGroupID,
         public Object getCourseScheduleDateByMonth(@ApiParam(value = "乐团编号", required = true) @RequestParam Long musicGroupID,
                                                    @ApiParam(value = "月份", required = true) @RequestParam Date month) {
                                                    @ApiParam(value = "月份", required = true) @RequestParam Date month) {
-        return succeed(scheduleService.getCourseScheduleDateByMonth(musicGroupID,month));
+        return succeed(courseScheduleService.getCourseScheduleDateByMonth(musicGroupID,month));
     }
     }
 
 
     @ApiOperation(value = "根据课程ID查询正在或即将开始的课程")
     @ApiOperation(value = "根据课程ID查询正在或即将开始的课程")
     @GetMapping("/getCurrentCourseDetail/{courseID}")
     @GetMapping("/getCurrentCourseDetail/{courseID}")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/getCurrentCourseDetail')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/getCurrentCourseDetail')")
     public Object getCurrentCourseDetail(@ApiParam(value = "课程ID", required = true) @PathVariable("courseID") Long courseID){
     public Object getCurrentCourseDetail(@ApiParam(value = "课程ID", required = true) @PathVariable("courseID") Long courseID){
-        return succeed(scheduleService.getCurrentCourseDetail(courseID));
+        return succeed(courseScheduleService.getCurrentCourseDetail(courseID));
     }
     }
 
 
     @ApiOperation(value = "根据班级ID获取当前课程的学生")
     @ApiOperation(value = "根据班级ID获取当前课程的学生")
@@ -162,7 +193,7 @@ public class CourseScheduleController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/classStartDateAdjust','system')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/classStartDateAdjust','system')")
     @PostMapping(value = "/classStartDateAdjust",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
     @PostMapping(value = "/classStartDateAdjust",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
     public Object classStartDateAdjust(CourseSchedule courseSchedule){
     public Object classStartDateAdjust(CourseSchedule courseSchedule){
-        CourseSchedule oldCourseSchedule = scheduleService.get(courseSchedule.getId());
+        CourseSchedule oldCourseSchedule = courseScheduleService.get(courseSchedule.getId());
         if(Objects.isNull(oldCourseSchedule)){
         if(Objects.isNull(oldCourseSchedule)){
             return failed("未找到指定课程");
             return failed("未找到指定课程");
         }
         }
@@ -179,7 +210,7 @@ public class CourseScheduleController extends BaseController {
         }
         }
         List<CourseSchedule> courseSchedules=new ArrayList<>();
         List<CourseSchedule> courseSchedules=new ArrayList<>();
         courseSchedules.add(courseSchedule);
         courseSchedules.add(courseSchedule);
-        scheduleService.courseAdjust(courseSchedules);
+        courseScheduleService.courseAdjust(courseSchedules);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -187,7 +218,7 @@ public class CourseScheduleController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/classGroupTeacherAdjust','system')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/classGroupTeacherAdjust','system')")
     @PostMapping(value = "/classGroupTeacherAdjust")
     @PostMapping(value = "/classGroupTeacherAdjust")
     public Object classGroupTeacherAdjust(String classGroupIds,Integer teacherId,Integer targetTeacherId){
     public Object classGroupTeacherAdjust(String classGroupIds,Integer teacherId,Integer targetTeacherId){
-        scheduleService.classGroupTeacherAdjust(classGroupIds,teacherId,targetTeacherId);
+        courseScheduleService.classGroupTeacherAdjust(classGroupIds,teacherId,targetTeacherId);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -195,7 +226,7 @@ public class CourseScheduleController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchClassStartDateAdjust')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchClassStartDateAdjust')")
     @PostMapping(value = "/batchClassStartDateAdjust")
     @PostMapping(value = "/batchClassStartDateAdjust")
     public Object batchClassStartDateAdjust(@RequestBody List<CourseSchedule> courseSchedules){
     public Object batchClassStartDateAdjust(@RequestBody List<CourseSchedule> courseSchedules){
-        scheduleService.courseAdjust(courseSchedules);
+        courseScheduleService.courseAdjust(courseSchedules);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -206,7 +237,7 @@ public class CourseScheduleController extends BaseController {
         if(Objects.isNull(courseScheduleId1)||Objects.isNull(courseScheduleId2)){
         if(Objects.isNull(courseScheduleId1)||Objects.isNull(courseScheduleId2)){
             return failed("请指定课程");
             return failed("请指定课程");
         }
         }
-        scheduleService.courseSwap(courseScheduleId1,courseScheduleId2);
+        courseScheduleService.courseSwap(courseScheduleId1,courseScheduleId2);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -214,7 +245,7 @@ public class CourseScheduleController extends BaseController {
     @PostMapping(value = "/courseScheduleCommplaintAudit")
     @PostMapping(value = "/courseScheduleCommplaintAudit")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/courseScheduleCommplaintAudit')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/courseScheduleCommplaintAudit')")
 	public Object courseScheduleCommplaintAudit(Long id, Double teacherLiabilityRatio, Double studentLiabilityRatio, AuditStatusEnum status) {
 	public Object courseScheduleCommplaintAudit(Long id, Double teacherLiabilityRatio, Double studentLiabilityRatio, AuditStatusEnum status) {
-		scheduleService.courseScheduleCommplaintAudit(id, teacherLiabilityRatio, studentLiabilityRatio, status);
+		courseScheduleService.courseScheduleCommplaintAudit(id, teacherLiabilityRatio, studentLiabilityRatio, status);
 		return succeed();
 		return succeed();
 	}
 	}
 
 
@@ -222,7 +253,7 @@ public class CourseScheduleController extends BaseController {
     @PostMapping(value = "/checkMusicGroupClassCourse")
     @PostMapping(value = "/checkMusicGroupClassCourse")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/checkMusicGroupClassCourse')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/checkMusicGroupClassCourse')")
     public Object checkMusicGroupClassCourse(String musicGroupId){
     public Object checkMusicGroupClassCourse(String musicGroupId){
-        scheduleService.checkMusicGroupClassCourse(musicGroupId);
+        courseScheduleService.checkMusicGroupClassCourse(musicGroupId);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -237,7 +268,7 @@ public class CourseScheduleController extends BaseController {
     @GetMapping("/batchDeleteMusicGroupNotStartCourse")
     @GetMapping("/batchDeleteMusicGroupNotStartCourse")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchDeleteMusicGroupNotStartCourse')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchDeleteMusicGroupNotStartCourse')")
 	public Object batchDeleteMusicGroupNotStartCourse(String musicGroupId){
 	public Object batchDeleteMusicGroupNotStartCourse(String musicGroupId){
-        scheduleService.batchDeleteMusicGroup(musicGroupId,GroupType.MUSIC);
+        courseScheduleService.batchDeleteMusicGroup(musicGroupId,GroupType.MUSIC);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -252,7 +283,7 @@ public class CourseScheduleController extends BaseController {
     @GetMapping("/findCourseScheduleByClassGroup")
     @GetMapping("/findCourseScheduleByClassGroup")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/findCourseScheduleByClassGroup')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/findCourseScheduleByClassGroup')")
 	public Object findCourseScheduleByClassGroup(Integer classGroupId){
 	public Object findCourseScheduleByClassGroup(Integer classGroupId){
-        return succeed(scheduleService.findCourseScheduleByClassGroup(classGroupId));
+        return succeed(courseScheduleService.findCourseScheduleByClassGroup(classGroupId));
     }
     }
     
     
     @ApiOperation(value = "查询课程投诉详情")
     @ApiOperation(value = "查询课程投诉详情")
@@ -267,7 +298,7 @@ public class CourseScheduleController extends BaseController {
     	SysUser user = sysUserFeignService.queryUserById(complaints.getUserId());
     	SysUser user = sysUserFeignService.queryUserById(complaints.getUserId());
     	complaints.getUser().setUsername(user.getUsername());
     	complaints.getUser().setUsername(user.getUsername());
     	
     	
-    	CourseSchedule courseSchedule = scheduleService.get(complaints.getCourseScheduleId());
+    	CourseSchedule courseSchedule = courseScheduleService.get(complaints.getCourseScheduleId());
     	SysUser teacher = sysUserFeignService.queryUserById(courseSchedule.getActualTeacherId());
     	SysUser teacher = sysUserFeignService.queryUserById(courseSchedule.getActualTeacherId());
     	courseSchedule.getTeacher().setUsername(teacher.getUsername());
     	courseSchedule.getTeacher().setUsername(teacher.getUsername());
     	
     	
@@ -282,7 +313,7 @@ public class CourseScheduleController extends BaseController {
     @PostMapping("/vipCourseAdjust")
     @PostMapping("/vipCourseAdjust")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/vipCourseAdjust')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/vipCourseAdjust')")
     public Object vipCourseAdjust(@RequestBody VipGroupCourseAdjustInfoDto vipGroupCourseAdjustInfo){
     public Object vipCourseAdjust(@RequestBody VipGroupCourseAdjustInfoDto vipGroupCourseAdjustInfo){
-        scheduleService.vipCourseAdjust(vipGroupCourseAdjustInfo);
+        courseScheduleService.vipCourseAdjust(vipGroupCourseAdjustInfo);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -290,7 +321,7 @@ public class CourseScheduleController extends BaseController {
     @PostMapping("/batchUpdateCourseSchedule")
     @PostMapping("/batchUpdateCourseSchedule")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchUpdateCourseSchedule')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchUpdateCourseSchedule')")
     public Object batchUpdateCourseSchedule(@RequestBody BatchInsertCoursesDto batchInsertCoursesDto){
     public Object batchUpdateCourseSchedule(@RequestBody BatchInsertCoursesDto batchInsertCoursesDto){
-        scheduleService.batchUpdateCourseSchedule(batchInsertCoursesDto);
+        courseScheduleService.batchUpdateCourseSchedule(batchInsertCoursesDto);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -298,7 +329,7 @@ public class CourseScheduleController extends BaseController {
     @PostMapping("/batchAppendVipGroupCourses")
     @PostMapping("/batchAppendVipGroupCourses")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchAppendVipGroupCourses')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchAppendVipGroupCourses')")
     public Object batchAppendVipGroupCourses(@RequestBody VipGroupCourseAdjustInfoDto vipGroupCourseAdjustInfo){
     public Object batchAppendVipGroupCourses(@RequestBody VipGroupCourseAdjustInfoDto vipGroupCourseAdjustInfo){
-        scheduleService.batchAppendVipGroupCourses(vipGroupCourseAdjustInfo);
+        courseScheduleService.batchAppendVipGroupCourses(vipGroupCourseAdjustInfo);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -316,41 +347,17 @@ public class CourseScheduleController extends BaseController {
     		}
     		}
     		batchInsertCoursesDto.setClassGroupId(classGroupList.get(0).getId());
     		batchInsertCoursesDto.setClassGroupId(classGroupList.get(0).getId());
     	}
     	}
-		scheduleService.batchAddCourseSchedule(batchInsertCoursesDto.getClassGroupId(), batchInsertCoursesDto.getCoursesTimes(),
+		courseScheduleService.batchAddCourseSchedule(batchInsertCoursesDto.getClassGroupId(), batchInsertCoursesDto.getCoursesTimes(),
 				batchInsertCoursesDto.getStartDate(), null,null, batchInsertCoursesDto.getTeachingArrangementList(), batchInsertCoursesDto.getTeachMode(),
 				batchInsertCoursesDto.getStartDate(), null,null, batchInsertCoursesDto.getTeachingArrangementList(), batchInsertCoursesDto.getTeachMode(),
 				batchInsertCoursesDto.getType(), batchInsertCoursesDto.getSchoolId(), batchInsertCoursesDto.getIsJumpHoliday());
 				batchInsertCoursesDto.getType(), batchInsertCoursesDto.getSchoolId(), batchInsertCoursesDto.getIsJumpHoliday());
         return succeed();
         return succeed();
     }
     }
 
 
-    @ApiOperation(value = "终极课表获取")
-    @GetMapping("/superFindCourseSchedules")
-    @PreAuthorize("@pcs.hasPermissions('courseSchedule/superFindCourseSchedules')")
-    public Object superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed("用户信息获取失败");
-        }
-        if(!sysUser.getIsSuperAdmin()){
-            Employee employee = employeeDao.get(sysUser.getId());
-            if (org.apache.commons.lang3.StringUtils.isEmpty(queryInfo.getOrganIdList())) {
-                queryInfo.setOrganIdList(employee.getOrganIdList());
-            }else if(org.apache.commons.lang3.StringUtils.isEmpty(employee.getOrganIdList())){
-                return failed("用户所在分部异常");
-            }else {
-                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
-                if(!list.containsAll(Arrays.asList(queryInfo.getOrganIdList().split(",")))){
-                    return failed("非法请求");
-                }
-            }
-        }
-        return succeed(scheduleService.endFindCourseSchedules(queryInfo));
-    }
-
     @ApiOperation(value = "课程顺延")
     @ApiOperation(value = "课程顺延")
     @PostMapping("/coursePostpone")
     @PostMapping("/coursePostpone")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/coursePostpone')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/coursePostpone')")
     public Object coursePostpone(CoursePostponeDto coursePostPoneInfo){
     public Object coursePostpone(CoursePostponeDto coursePostPoneInfo){
-        scheduleService.coursePostpone(coursePostPoneInfo);
+        courseScheduleService.coursePostpone(coursePostPoneInfo);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -358,7 +365,7 @@ public class CourseScheduleController extends BaseController {
     @PostMapping("/practiceCourseAdjust")
     @PostMapping("/practiceCourseAdjust")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/practiceCourseAdjust')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/practiceCourseAdjust')")
     public Object practiceCourseAdjust(CourseSchedule courseSchedule){
     public Object practiceCourseAdjust(CourseSchedule courseSchedule){
-        scheduleService.practiceCourseAdjust(courseSchedule);
+        courseScheduleService.practiceCourseAdjust(courseSchedule);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -366,7 +373,7 @@ public class CourseScheduleController extends BaseController {
     @PostMapping("/practiceCourseTeacherAdjust")
     @PostMapping("/practiceCourseTeacherAdjust")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/practiceCourseTeacherAdjust')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/practiceCourseTeacherAdjust')")
     public Object practiceCourseTeacherAdjust(Long courseScheduleId,Integer teacherId){
     public Object practiceCourseTeacherAdjust(Long courseScheduleId,Integer teacherId){
-        scheduleService.practiceCourseTeacherAdjust(courseScheduleId,teacherId);
+        courseScheduleService.practiceCourseTeacherAdjust(courseScheduleId,teacherId);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -374,7 +381,7 @@ public class CourseScheduleController extends BaseController {
     @PostMapping("/practiceGroupTeacherAdjust")
     @PostMapping("/practiceGroupTeacherAdjust")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/practiceGroupTeacherAdjust')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/practiceGroupTeacherAdjust')")
     public Object practiceGroupTeacherAdjust(String practiceGroupId, Integer teacherId, Integer subjectId, Integer educationalTeacherId){
     public Object practiceGroupTeacherAdjust(String practiceGroupId, Integer teacherId, Integer subjectId, Integer educationalTeacherId){
-        scheduleService.practiceGroupTeacherAdjust(practiceGroupId,teacherId,subjectId, educationalTeacherId);
+        courseScheduleService.practiceGroupTeacherAdjust(practiceGroupId,teacherId,subjectId, educationalTeacherId);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -383,7 +390,7 @@ public class CourseScheduleController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchPracticeGroupTeacherAdjust')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchPracticeGroupTeacherAdjust')")
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public Object batchPracticeGroupTeacherAdjust(String practiceGroupId, Integer teacherId, Integer subjectId, Integer educationalTeacherId,Integer oldTeacherId){
     public Object batchPracticeGroupTeacherAdjust(String practiceGroupId, Integer teacherId, Integer subjectId, Integer educationalTeacherId,Integer oldTeacherId){
-        scheduleService.batchPracticeGroupTeacherAdjust(practiceGroupId,teacherId,subjectId,educationalTeacherId,oldTeacherId);
+        courseScheduleService.batchPracticeGroupTeacherAdjust(practiceGroupId,teacherId,subjectId,educationalTeacherId,oldTeacherId);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -391,7 +398,7 @@ public class CourseScheduleController extends BaseController {
     @PostMapping("/updateCoursesExpireDate")
     @PostMapping("/updateCoursesExpireDate")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/updateCoursesExpireDate')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/updateCoursesExpireDate')")
     public Object updateCoursesExpireDate(String practiceGroupId,Date coursesExpireDate){
     public Object updateCoursesExpireDate(String practiceGroupId,Date coursesExpireDate){
-        scheduleService.updateCoursesExpireDate(practiceGroupId,coursesExpireDate);
+        courseScheduleService.updateCoursesExpireDate(practiceGroupId,coursesExpireDate);
         return succeed();
         return succeed();
     }
     }
 
 
@@ -399,7 +406,7 @@ public class CourseScheduleController extends BaseController {
     @PostMapping("/cleanAttendance")
     @PostMapping("/cleanAttendance")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/cleanAttendance')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/cleanAttendance')")
     public Object cleanAttendance(String courseScheduleIds){
     public Object cleanAttendance(String courseScheduleIds){
-        scheduleService.cleanAttendance(courseScheduleIds);
+        courseScheduleService.cleanAttendance(courseScheduleIds);
         return succeed();
         return succeed();
     }
     }
 }
 }

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

@@ -23,8 +23,8 @@ eureka:
 spring:
 spring:
   servlet:
   servlet:
     multipart:
     multipart:
-      max-file-size: 10485760
-      max-request-size: 10485760
+      max-file-size: 150MB
+      max-request-size: 150MB
   application:
   application:
     name: web-server
     name: web-server