Parcourir la source

Merge remote-tracking branch 'origin/master'

周箭河 il y a 5 ans
Parent
commit
a2a8cbbf01
26 fichiers modifiés avec 299 ajouts et 68 suppressions
  1. 10 0
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysUser.java
  2. 19 8
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java
  3. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java
  4. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherSalaryComplaintsDao.java
  5. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java
  6. 12 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentManageQueryInfo.java
  7. 21 6
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java
  8. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java
  9. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  10. 3 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java
  11. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  12. 45 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  13. 36 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  14. 1 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherSalaryComplaintsServiceImpl.java
  15. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  16. 0 2
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  17. 1 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  18. 2 2
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml
  19. 15 0
      mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  20. 2 2
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  21. 10 1
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  22. 13 1
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  23. 7 1
      mec-biz/src/main/resources/config/mybatis/TeacherSalaryComplaintsMapper.xml
  24. 1 1
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  25. 37 4
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java
  26. 2 2
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

+ 10 - 0
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysUser.java

@@ -116,6 +116,8 @@ public class SysUser implements Serializable{
 	private Integer serviceTag;
 
 	private Integer operatingTag;
+	
+	private Integer teacherId;
 
 	public Integer getServiceTag() {
 		return serviceTag;
@@ -349,6 +351,14 @@ public class SysUser implements Serializable{
 		this.isSuperAdmin = isSuperAdmin;
 	}
 
+	public Integer getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(Integer teacherId) {
+		this.teacherId = teacherId;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

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

@@ -1,20 +1,20 @@
 package com.ym.mec.biz.dal.dao;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.ibatis.annotations.Delete;
-import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.Select;
-
 import com.ym.mec.biz.dal.dto.StudentAttendanceResponse;
 import com.ym.mec.biz.dal.dto.StudentAttendanceStatusCountDto;
 import com.ym.mec.biz.dal.dto.StudentPersonalAttendanceDto;
 import com.ym.mec.biz.dal.dto.StudentStatusCountUtilEntity;
 import com.ym.mec.biz.dal.entity.StudentAttendance;
 import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
 
@@ -150,6 +150,17 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
     List<Map<Integer,Integer>> countStudentAttendancesByCourses(@Param("courseScheduleIds") List courseScheduleIds);
 
     /**
+     * @describe 统计课程里对应状态的学生数量
+     * @author Joburgess
+     * @date 2020/4/18
+     * @param courseScheduleIds:
+     * @param status:
+     * @return java.util.List<java.util.Map<java.lang.Integer,java.lang.Integer>>
+     */
+    List<Map<Integer, Integer>> countStudentAttendancesByCoursesAndStatus(@Param("courseScheduleIds") List courseScheduleIds,
+                                                                          @Param("status") StudentAttendanceStatusEnum status);
+
+    /**
      * @describe 根据课程获取最后的点名时间
      * @author Joburgess
      * @date 2019/10/24

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java

@@ -191,4 +191,10 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
 	 * @return
 	 */
     int getTotalMinutes(@Param("courseId") Long courseId, @Param("teacherId") Integer teacherId);
+
+	/**
+	 * 清空签退信息
+	 * @param courseId
+	 */
+	void cleanCourseTeacherSignOut(@Param("courseId") Long courseId);
 }

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

@@ -38,4 +38,13 @@ public interface TeacherSalaryComplaintsDao extends BaseDAO<Long, TeacherSalaryC
                                                                        @Param("month") String month,
                                                                         @Param("status") TeacherSalaryComplaintsStatusEnum status);
 
+    /**
+     * @describe 根据月份更新未处理的申诉至已结束
+     * @author Joburgess
+     * @date 2020/4/18
+     * @param month:
+     * @return int
+     */
+    int updateComplaintStatusTuDoneWithMonth(@Param("month") String month);
+
 }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java

@@ -71,6 +71,10 @@ public class StudentManageListDto {
     private String vipGroupName;
 
     private String vipGroupStatus;
+    
+    private String teacherName;
+    
+    private Integer teacherId;
 
     public YesOrNoEnum getServiceTag() {
         return serviceTag;
@@ -263,4 +267,20 @@ public class StudentManageListDto {
 	public void setIsActive(YesOrNoEnum isActive) {
 		this.isActive = isActive;
 	}
+
+	public String getTeacherName() {
+		return teacherName;
+	}
+
+	public void setTeacherName(String teacherName) {
+		this.teacherName = teacherName;
+	}
+
+	public Integer getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(Integer teacherId) {
+		this.teacherId = teacherId;
+	}
 }

+ 12 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentManageQueryInfo.java

@@ -1,13 +1,12 @@
 package com.ym.mec.biz.dal.page;
 
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.List;
+
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.common.page.QueryInfo;
 
-import java.util.List;
-
 /**
  * @Author Joburgess
  * @Date 2019/9/19
@@ -42,6 +41,8 @@ public class StudentManageQueryInfo extends QueryInfo {
     private Integer serviceTag;
 
     private Integer operatingTag;
+    
+    private Integer teacherId;
 
     public Integer getServiceTag() {
         return serviceTag;
@@ -138,4 +139,12 @@ public class StudentManageQueryInfo extends QueryInfo {
 	public void setIsActive(Boolean isActive) {
 		this.isActive = isActive;
 	}
+
+	public Integer getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(Integer teacherId) {
+		this.teacherId = teacherId;
+	}
 }

+ 21 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java

@@ -1,14 +1,29 @@
 package com.ym.mec.biz.service;
 
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.StudentAttendance;
-import com.ym.mec.biz.dal.page.*;
-import com.ym.mec.common.page.PageInfo;
-
 import java.util.List;
 import java.util.Map;
 
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.ConditionDto;
+import com.ym.mec.biz.dal.dto.MusicGroupStudentSignDto;
+import com.ym.mec.biz.dal.dto.MusicGroupStudentsDto;
+import com.ym.mec.biz.dal.dto.Student4operating;
+import com.ym.mec.biz.dal.dto.StudentManageAccountBaseInfoDto;
+import com.ym.mec.biz.dal.dto.StudentManageBaseInfoOfMusicGroupDto;
+import com.ym.mec.biz.dal.dto.StudentManageListDto;
+import com.ym.mec.biz.dal.dto.StudentManageVipGroupClassDto;
+import com.ym.mec.biz.dal.dto.StudentManageVipGroupDto;
+import com.ym.mec.biz.dal.dto.StudentRegisterPerDto;
+import com.ym.mec.biz.dal.page.MusicGroupStudentQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageAttendanceQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageCourseQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageVipClassQueryInfo;
+import com.ym.mec.biz.dal.page.StudentOperatingQueryInfo;
+import com.ym.mec.biz.dal.page.StudentSignQueryInfo;
+import com.ym.mec.biz.dal.page.TeacherPaymentRecordInfo;
+import com.ym.mec.common.page.PageInfo;
+
 /**
  * @Author Joburgess
  * @Date 2019/9/19

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java

@@ -104,4 +104,18 @@ public interface TeacherAttendanceService extends BaseService<Long, TeacherAtten
 	 * @return void
 	 */
 	void updateTeacherAttendance(TeacherAttendance teacherAttendance);
+
+	/**
+	 * 清空考勤
+	 * @param courseId
+	 */
+	void cleanCourseTeacherSignOut(Long courseId);
+
+	/**
+	 * 获取教师签到信息
+	 * @param courseId
+	 * @param teacherId
+	 * @return
+	 */
+	TeacherAttendance findByTeacherAttendanceInfo(Long courseId, Integer teacherId);
 }

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -957,5 +957,6 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             return;
         }
         courseScheduleTeacherSalaryDao.updateTeacherSalaryConfirmStatusToComplied(teacherSalaryIds);
+        teacherSalaryComplaintsDao.updateComplaintStatusTuDoneWithMonth(month);
     }
 }

+ 3 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java

@@ -225,16 +225,14 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 			int exercisesMessageNum=0;
 			int exercisesMessageTimelyNum=0;
 			for (ExtracurricularExercisesReply studentExercise : studentExercises) {
-				if(Objects.isNull(studentExercise.getSubmitTime())
-					||Objects.isNull(studentExercise.getCreateTime())){
+				if(!new Integer(1).equals(studentExercise.getStatus())){
 					continue;
 				}
-				if(studentExercise.getSubmitTime().after(studentExercise.getCreateTime())){
+				if(!new Integer(1).equals(studentExercise.getIsReplied())){
 					continue;
 				}
 				exercisesMessageNum+=1;
-				int hours = DateUtil.hoursBetween(studentExercise.getSubmitTime(), studentExercise.getCreateTime());
-				if(hours<=12){
+				if(new Integer(1).equals(studentExercise.getIsRepliedTimely())){
 					exercisesMessageTimelyNum+=1;
 				}
 			}

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

@@ -536,7 +536,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 							StudentAttendance byStatusAndCourseScheduleId = studentAttendanceDao.findByStatusAndCourseScheduleId(userId, courseSchedules.get(i).getId().intValue());
 //							Date signOutTime = date;
 //							if(i < courseSchedules.size() - 1 && date.after(endDateTime)){
-								//不是最后一节连堂课,并且签退时间大于课程结束时间,签退时间等于课程结束时间
+							//不是最后一节连堂课,并且签退时间大于课程结束时间,签退时间等于课程结束时间
 //								signOutTime = endDateTime;
 //							}
 							if(byStatusAndCourseScheduleId != null){

+ 45 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java

@@ -1,15 +1,54 @@
 package com.ym.mec.biz.service.impl;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.dao.ClassGroupDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
+import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.dao.StudentDao;
+import com.ym.mec.biz.dal.dao.StudentManageDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dao.VipGroupDao;
+import com.ym.mec.biz.dal.dto.ConditionDto;
+import com.ym.mec.biz.dal.dto.MusicGroupStudentSignDto;
+import com.ym.mec.biz.dal.dto.MusicGroupStudentsDto;
+import com.ym.mec.biz.dal.dto.Student4operating;
+import com.ym.mec.biz.dal.dto.StudentManageAccountBaseInfoDto;
+import com.ym.mec.biz.dal.dto.StudentManageBaseInfoOfMusicGroupDto;
+import com.ym.mec.biz.dal.dto.StudentManageCourseListDto;
+import com.ym.mec.biz.dal.dto.StudentManageListDto;
+import com.ym.mec.biz.dal.dto.StudentManageVipGroupClassDto;
+import com.ym.mec.biz.dal.dto.StudentManageVipGroupDto;
+import com.ym.mec.biz.dal.dto.StudentRegisterPerDto;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
-import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.biz.dal.page.MusicGroupStudentQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageAttendanceQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageCourseQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageVipClassQueryInfo;
+import com.ym.mec.biz.dal.page.StudentOperatingQueryInfo;
+import com.ym.mec.biz.dal.page.StudentSignQueryInfo;
+import com.ym.mec.biz.dal.page.TeacherPaymentRecordInfo;
 import com.ym.mec.biz.service.StudentManageService;
 import com.ym.mec.biz.service.StudentService;
 import com.ym.mec.common.entity.ImResult;
@@ -18,13 +57,6 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.util.collection.MapUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * @Author Joburgess
@@ -387,6 +419,7 @@ public class StudentManageServiceImpl implements StudentManageService {
         Student student = new Student(userId, studentRegistrationDao.getSubjectIds(userId));
         student.setOperatingTag(sysUser.getOperatingTag());
         student.setServiceTag(sysUser.getServiceTag());
+        student.setTeacherId(sysUser.getTeacherId());
         studentService.upSet(student);
         return userId;
     }
@@ -406,6 +439,7 @@ public class StudentManageServiceImpl implements StudentManageService {
         Student student = new Student(userId, studentRegistrationDao.getSubjectIds(userId));
         student.setOperatingTag(sysUser.getOperatingTag());
         student.setServiceTag(sysUser.getServiceTag());
+        student.setTeacherId(sysUser.getTeacherId());
         studentService.upSet(student);
         return userId;
     }

+ 36 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -317,7 +317,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 					//获取当前课程的所有连堂课列表
 					String courseClassDate = DateUtil.format(cs.getClassDate(), DateUtil.DEFAULT_PATTERN);
 					String courseEndDateTime = DateUtil.format(cs.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-//					Date endDateTime = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+					Date endDateTime = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
 					cs = courseScheduleDao.queryContinueCourse(cs,continueCourseTime,courseClassDate + " " + courseEndDateTime);
 					//存在连堂课
 					if(cs != null){
@@ -334,30 +334,41 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 					totalMinutes -= firstMinutes;
 					if(totalMinutes > 0){
 						String courseClassDate;
-//						String courseStartDateTime;
+						String courseStartDateTime;
 						String courseEndDateTime;
 						for (int i = 0; i < courseSchedules.size(); i++) {
 							courseClassDate = DateUtil.format(courseSchedules.get(i).getClassDate(), DateUtil.DEFAULT_PATTERN);
-//							courseStartDateTime = DateUtil.format(courseSchedules.get(i).getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+							courseStartDateTime = DateUtil.format(courseSchedules.get(i).getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
 							courseEndDateTime = DateUtil.format(courseSchedules.get(i).getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-//							Date startDateTime = DateUtil.stringToDate(courseClassDate + " " + courseStartDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+							Date startDateTime = DateUtil.stringToDate(courseClassDate + " " + courseStartDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
 							Date endDateTime = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-//							Date signOutTime = date;
-//							if(i < courseSchedules.size() - 1 && date.after(endDateTime)){
-								//不是最后一节连堂课,并且签退时间大于课程结束时间,签退时间等于课程结束时间
-//								signOutTime = endDateTime;
-//							}
+							Date signOutTime = date;
+							if(date.before(startDateTime)){
+								continue;
+							}
+							if(i < courseSchedules.size() - 1 && date.after(endDateTime)){
+							//不是最后一节连堂课,并且签退时间大于课程结束时间,签退时间等于课程结束时间
+								signOutTime = endDateTime;
+							}
 							//如果签退时间大于课程结束时间
+							//如果当前课程没有签退记录,那么正常更新
+							TeacherAttendance personalAttendance = teacherAttendanceDao.findByTeacherAttendanceInfo(userId.longValue(),courseSchedules.get(i).getId());
+							if(personalAttendance != null && personalAttendance.getSignOutStatus() == YesOrNoEnum.NO){
+								continue;
+							}
+							//如果当前课程有签到时间,那么只更新签退时间和状态
+							if(personalAttendance.getSignInTime() != null){
+								startDateTime = null;
+							}
 							if(date.after(endDateTime)){
-								teacherAttendanceDao.cuntinueCourseSign(courseSchedules.get(i).getId(),signInTime,date,1);
+								teacherAttendanceDao.cuntinueCourseSign(courseSchedules.get(i).getId(),startDateTime,signOutTime,1);
 							}else if (date.equals(endDateTime)){
-								teacherAttendanceDao.cuntinueCourseSign(courseSchedules.get(i).getId(),signInTime,date,1);
-								break;
+								teacherAttendanceDao.cuntinueCourseSign(courseSchedules.get(i).getId(),startDateTime,signOutTime,1);
 							}else {
-								teacherAttendanceDao.cuntinueCourseSign(courseSchedules.get(i).getId(),signInTime,date,0);
-								break;
+								teacherAttendanceDao.cuntinueCourseSign(courseSchedules.get(i).getId(),startDateTime,signOutTime,0);
 							}
 						}
+						date = classEndDateTime;
 					}
 				}
 			}else {
@@ -496,4 +507,15 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			teacherAttendanceDao.update(teacherAttendance);
 		}
 	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void cleanCourseTeacherSignOut(Long courseId) {
+		teacherAttendanceDao.cleanCourseTeacherSignOut(courseId);
+	}
+
+	@Override
+	public TeacherAttendance findByTeacherAttendanceInfo(Long courseId, Integer teacherId) {
+		return teacherAttendanceDao.findByTeacherAttendanceInfo(teacherId.longValue(),courseId);
+	}
 }

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

@@ -67,8 +67,7 @@ public class TeacherSalaryComplaintsServiceImpl extends BaseServiceImpl<Long, Te
 		Map<Integer, String> map = new HashMap<>(1);
 		map.put(salaryComplaints.getTeacherId(), salaryComplaints.getTeacherId().toString());
 		if (map != null && map.size() > 0) {
-			sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
-			String url = new StringBuffer(sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL)).append("/#/appealResult?id").append(salaryComplaints.getId()).toString();
+			String url = new StringBuffer("8?").append(sysConfigDao.findConfigValue(SysConfigService.TEACHER_BASE_URL)).append("/#/appealResult?id=").append(salaryComplaints.getId()).toString();
 			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.COURSE_SALARY_COMPLAINTS_RESULT, map, null, 0, url,
 					"TEACHER", DateUtil.format(salaryComplaints.getCreateTime(),DateUtil.DEFAULT_PATTERN),complaints.getStatusEnum().getMsg());
 		}

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -651,12 +651,22 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		Map<String, Object> params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
 
-		List dataList = null;
+		List<VipGroupCourseSchduleRecordDto> dataList = null;
 		int count = vipGroupDao.countTeachingRecord(params);
 		if (count > 0) {
 			pageInfo.setTotal(count);
 			params.put("offset", pageInfo.getOffset());
 			dataList = vipGroupDao.findTeachingRecord(params);
+			List<Long> courseScheduleIds = dataList.stream().map(VipGroupCourseSchduleRecordDto::getId).collect(Collectors.toList());
+			List<Map<Integer, Integer>> maps = studentAttendanceDao.countStudentAttendancesByCoursesAndStatus(courseScheduleIds, StudentAttendanceStatusEnum.NORMAL);
+			if(!CollectionUtils.isEmpty(maps)){
+				Map<Long, Long> courseStudentNumMap= MapUtil.convertIntegerMap(maps);
+				for (VipGroupCourseSchduleRecordDto vipGroupCourseSchduleRecordDto : dataList) {
+					if(Objects.nonNull(courseStudentNumMap.get(vipGroupCourseSchduleRecordDto.getId()))){
+						vipGroupCourseSchduleRecordDto.setAttendanceNum(courseStudentNumMap.get(vipGroupCourseSchduleRecordDto.getId()).intValue());
+					}
+				}
+			}
 		}
 		if (count == 0) {
 			dataList = new ArrayList<>();

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

@@ -2541,8 +2541,6 @@
           AND TIMESTAMPDIFF(MINUTE, #{endDateTime}, CONCAT(cs.class_date_, ' ', cs.start_class_time_)) &lt;= #{continueCourseTime}
           AND cs.teacher_id_ = #{courseSchedule.teacherId}
           AND cs.class_group_id_ = #{courseSchedule.classGroupId}
-          AND ta.sign_in_time_ IS NULL
-          AND ta.sign_out_time_ IS NULL
         LIMIT 1
     </select>
     <select id="queryRepairContinueCourse" resultMap="CourseSchedule">

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

@@ -827,7 +827,7 @@
 			LEFT JOIN sys_user su ON csts.user_id_=su.id_
 			LEFT JOIN organization o ON t.organ_id_=o.id_
 		<include refid="queryCourseSalaryCondition"/>
-		ORDER BY classes_start_time_ DESC
+		ORDER BY classes_start_time_,cs.id_ DESC
 		<include refid="global.limit"/>
 	</select>
 

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

@@ -306,10 +306,10 @@
 			eer.user_id_,
 			eer.status_,
 			eer.submit_time_,
-			eem.create_time_
+			eer.is_replied_,
+			eer.is_replied_timely_
 		FROM
 			extracurricular_exercises_reply eer
-		LEFT JOIN extracurricular_exercises_message eem ON eer.id_=eem.extracurricular_exercises_reply_id_ AND eem.role_='TEACHER'
 		WHERE
 			DATE_FORMAT( eer.create_time_, '%Y-%m-%d' ) BETWEEN #{monday} AND #{sunday}
 			AND EXISTS (

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

@@ -433,6 +433,21 @@
         GROUP BY
             course_schedule_id_
     </select>
+    <select id="countStudentAttendancesByCoursesAndStatus" resultType="java.util.Map">
+        SELECT
+        course_schedule_id_ AS 'key',
+        COUNT( id_ ) AS 'value'
+        FROM
+        student_attendance
+        WHERE
+        status_=#{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        AND course_schedule_id_ IN
+        <foreach collection="courseScheduleIds" item="courseScheduleId" open="(" close=")" separator=",">
+            #{courseScheduleId}
+        </foreach>
+        GROUP BY
+        course_schedule_id_
+    </select>
     <select id="countCourseLeaveStudentNumWithFourHoursAgo" resultType="java.util.Map">
         SELECT
             sa.course_schedule_id_ AS 'key',

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

@@ -140,7 +140,7 @@
 			sees.monday_ &gt;= #{monday}
 			AND sees.sunday_ &lt;= #{sunday}
 			<if test="search!=null">
-				AND (stu.id_=#{search} OR stu.username_ LIKE CONCAT('%', #{search}, '%') OR tea.username_ LIKE CONCAT('%', #{search}, '%'))
+				AND (stu.id_=#{search} OR stu.username_ LIKE CONCAT('%', #{search}, '%') OR tea.real_name_ LIKE CONCAT('%', #{search}, '%'))
 			</if>
 			<if test="organIdList != null">
 				AND FIND_IN_SET(stu.organ_id_,#{organIdList})
@@ -191,7 +191,7 @@
 			sees.monday_ &gt;= #{monday}
 			AND sees.sunday_ &lt;= #{sunday}
 			<if test="search!=null">
-				AND (stu.id_=#{search} OR stu.username_ LIKE CONCAT('%', #{search}, '%') OR tea.username_ LIKE CONCAT('%', #{search}, '%'))
+				AND (stu.id_=#{search} OR stu.username_ LIKE CONCAT('%', #{search}, '%') OR tea.real_name_ LIKE CONCAT('%', #{search}, '%'))
 			</if>
 			<if test="organIdList != null">
 				AND FIND_IN_SET(stu.organ_id_, #{organIdList})

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

@@ -114,10 +114,11 @@
         SELECT su.id_ user_id_,su.username_,su.gender_,su.phone_ parents_phone_,su.real_name_,
         su.birthdate_,su.nation_,su.organ_id_,
         CASE WHEN su.password_ IS NULL THEN 0 ELSE 1 END isActive_,
-        CASE WHEN pla.id_ IS NULL THEN 0 ELSE 1 END isMake_,st.service_tag_,st.operating_tag_
+        CASE WHEN pla.id_ IS NULL THEN 0 ELSE 1 END isMake_,st.service_tag_,st.operating_tag_,tu.real_name_ teacher_name_,st.teacher_id_
         FROM sys_user su
         LEFT JOIN practice_lesson_apply pla ON su.id_ = pla.user_id_
         LEFT JOIN student st ON st.user_id_ = su.id_
+        left join sys_user tu on tu.id_ = st.teacher_id_
         <include refid="findStudentsByOrganIdSql"/>
         ORDER BY su.create_time_ DESC
         <include refid="global.limit"/>
@@ -149,6 +150,9 @@
             <if test="serviceTag != null">
                 AND st.service_tag_ = #{serviceTag}
             </if>
+            <if test="teacherId != null">
+                AND st.teacher_id_ = #{teacherId}
+            </if>
             <if test="userIds != null">
                 AND su.id_ IN
                 <foreach collection="userIds" open="(" close=")" separator="," item="item">
@@ -605,6 +609,9 @@
         <if test="serviceTag != null">
             AND st.service_tag_ = #{serviceTag}
         </if>
+        <if test="teacherId != null">
+            AND st.teacher_id_ = #{teacherId}
+        </if>
     </sql>
     <select id="queryHasCourse" resultType="java.lang.Integer">
         SELECT su.id_ FROM sys_user su
@@ -745,6 +752,8 @@
         <result property="courseBalance" column="course_balance_"/>
         <result property="serviceTag" column="service_tag_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result property="operatingTag" column="operating_tag_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="teacherName" column="teacher_name_"/>
+        <result property="teacherId" column="teacher_id_"/>
     </resultMap>
     <select id="queryHasCourseStudent" resultMap="studentManageListDto">
         SELECT su.id_ user_id_,su.username_,su.gender_,GROUP_CONCAT(DISTINCT sr.parents_name_)parents_name_,

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

@@ -373,7 +373,14 @@
     </update>
     <update id="cuntinueCourseSign">
         UPDATE teacher_attendance
-        SET sign_in_time_ = #{startDateTime},sign_in_status_ = 1,sign_out_status_ = #{status},sign_out_time_= #{endDateTime}
+        <set>
+            <if test="startDateTime != null">
+                sign_in_time_ = #{startDateTime},sign_in_status_ = 1,
+            </if>
+            <if test="endDateTime != null">
+                sign_out_status_ = #{status},sign_out_time_= #{endDateTime}
+            </if>
+        </set>
     	WHERE course_schedule_id_ = #{courseScheduleId}
     </update>
     <update id="batchUpdateTeacher">
@@ -384,6 +391,11 @@
             #{courseScheduleId}
         </foreach>
     </update>
+    <update id="cleanCourseTeacherSignOut">
+        UPDATE teacher_attendance
+        SET sign_out_status_ = NULL,sign_out_time_= NULL
+    	WHERE course_schedule_id_=#{courseId}
+    </update>
 
     <delete id="deleteByMusicGroupId" parameterType="map" >
 		DELETE ta FROM teacher_attendance ta LEFT JOIN course_schedule cs ON ta.course_schedule_id_ = cs.id_

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

@@ -61,7 +61,13 @@
 		AND tsc.status_ = 'PENDING'
 	</update>
 
-	<!-- 根据主键查询一条记录 -->
+    <update id="updateComplaintStatusTuDoneWithMonth">
+		UPDATE teacher_salary_complaints tsc SET tsc.status_ = 'DONE'
+		WHERE tsc.salary_settlement_month_ = #{month}
+		AND tsc.status_ = 'PENDING'
+	</update>
+
+    <!-- 根据主键查询一条记录 -->
 	<select id="get" resultMap="TeacherSalaryComplaints">
 		SELECT * FROM teacher_salary_complaints WHERE id_ = #{id}
 	</select>

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

@@ -606,7 +606,7 @@
             CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
             cs.status_,
             cs.teach_mode_,
-            cs.student_num_,s.name_ school_name_,
+            s.name_ school_name_,
             csts.actual_salary_ IS NOT NULL is_salary_,
             cs.schoole_id_,
             IF(ta.sign_in_status_ IS NULL,3,ta.sign_in_status_) sign_in_status_,

+ 37 - 4
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -17,6 +17,7 @@ import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.entity.TeacherAttendance;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.SignStatusEnum;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
@@ -245,28 +246,60 @@ public class RoomServiceImpl implements RoomService {
         log.info("roomSignIn: roomId={}, userId={}", roomId, userId);
         Teacher teacher = teacherDao.get(Integer.parseInt(userId));
         CourseSchedule courseSchedule = courseScheduleDao.get(roomId);
-
+        Date date = new Date();
+        TeacherAttendance attendanceInfo = teacherAttendanceService.findByTeacherAttendanceInfo(roomId, courseSchedule.getActualTeacherId());
+        String format = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
+        String format1 = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+        Date endDateTime = DateUtil.stringToDate(format + " " + format1, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+        //如果
+        if(attendanceInfo != null && attendanceInfo.getSignOutTime() != null && date.before(endDateTime)){
+            teacherAttendanceService.cleanCourseTeacherSignOut(roomId);
+        }
         String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME);
         if(StringUtils.isEmpty(continueCourseTime)){
             continueCourseTime = "5";
         }
         CourseSchedule schedule = courseSchedule;
         //如果当前课程是连堂课,那么获取第一节课的课程编号
+        Long signInRoomId = null;
         while (true){
             String classDate = DateUtil.format(schedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
             String startClassTime = DateUtil.format(schedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
             schedule = courseScheduleDao.getLastCourse(schedule.getClassGroupId(),classDate + " " + startClassTime,schedule.getActualTeacherId(),continueCourseTime);
             if(schedule != null){
-                roomId = schedule.getId();
+                signInRoomId = schedule.getId();
             }else {
                 break;
             }
         }
+        if(signInRoomId == null){
+            signInRoomId = roomId;
+        }else {
+            if(teacher != null && teacher.getId().equals(courseSchedule.getActualTeacherId())){
+                String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
+                String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+                //获取上一次课程
+                CourseSchedule lastCourse = courseScheduleDao.getLastCourse(courseSchedule.getClassGroupId(), classDate + " " + startClassTime, courseSchedule.getActualTeacherId(), continueCourseTime);
+                //获取当前课程的签退时间
+                TeacherAttendance teacherAttendance = teacherAttendanceService.findByTeacherAttendanceInfo(lastCourse.getId(),courseSchedule.getActualTeacherId());
+                //如果上次课签退时间和当前签到时间间隔小于等于5分钟,清除上一次课程的教师签退记录
+                Date signOutTime = teacherAttendance.getSignOutTime();
+                log.info("signOutTime: signOutTime={}, date={}", signOutTime, date);
+                if(signOutTime != null && DateUtil.minutesBetween(signOutTime,date) <= Integer.parseInt(continueCourseTime)){
+                    teacherAttendanceService.cleanCourseTeacherSignOut(lastCourse.getId());
+                }else {
+                    //如果大于5分钟,不换课堂,对当前课程进行签到
+                    teacherAttendanceService.addTeacherAttendanceRecord(roomId.intValue(),courseSchedule.getActualTeacherId(), SignStatusEnum.SIGN_IN,true);
+                }
+            }
+        }
+        //如果存在连堂课,并且跨课超过5分钟
+        log.info("signInRoomId: signInRoomId={}, userId={}", signInRoomId, userId);
         try {
             if(teacher != null && teacher.getId().equals(courseSchedule.getActualTeacherId())){
-                teacherAttendanceService.addTeacherAttendanceRecord(roomId.intValue(),courseSchedule.getActualTeacherId(), SignStatusEnum.SIGN_IN,true);
+                teacherAttendanceService.addTeacherAttendanceRecord(signInRoomId.intValue(),courseSchedule.getActualTeacherId(), SignStatusEnum.SIGN_IN,true);
             }else {
-                studentAttendanceService.addStudentAttendanceRecord(roomId.intValue(),Integer.parseInt(userId), StudentAttendanceStatusEnum.NORMAL,SignStatusEnum.SIGN_IN);
+                studentAttendanceService.addStudentAttendanceRecord(signInRoomId.intValue(),Integer.parseInt(userId), StudentAttendanceStatusEnum.NORMAL,SignStatusEnum.SIGN_IN);
             }
         }catch (Exception e){
             e.printStackTrace();

+ 2 - 2
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -264,10 +264,10 @@ public class ExportController extends BaseController {
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学员编号", "学员姓名", "性别", "家长姓名",
                     "家长联系电话", "是否激活", "是否有课", "是否预约网管课", "是否有网管课", "课程余额(元)",
-                    "所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签"}, new String[]{
+                    "所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签","指导老师"}, new String[]{
                     "organName", "userId", "username", "gender.description", "parentsName", "parentsPhone",
                     "isActive.msg", "hasCourse.msg", "isMake.msg", "hasPracticeCourse.msg", "courseBalance", "musicGroupName",
-                    "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg"}, rows);
+                    "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg","teacherName"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             response.flushBuffer();