|  | @@ -1,19 +1,83 @@
 | 
	
		
			
				|  |  |  package com.ym.mec.biz.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import java.text.SimpleDateFormat;
 | 
	
		
			
				|  |  | +import java.util.ArrayList;
 | 
	
		
			
				|  |  | +import java.util.Collection;
 | 
	
		
			
				|  |  | +import java.util.Comparator;
 | 
	
		
			
				|  |  | +import java.util.Date;
 | 
	
		
			
				|  |  | +import java.util.HashMap;
 | 
	
		
			
				|  |  | +import java.util.HashSet;
 | 
	
		
			
				|  |  | +import java.util.List;
 | 
	
		
			
				|  |  | +import java.util.Map;
 | 
	
		
			
				|  |  | +import java.util.Objects;
 | 
	
		
			
				|  |  | +import java.util.Set;
 | 
	
		
			
				|  |  | +import java.util.TreeSet;
 | 
	
		
			
				|  |  | +import java.util.stream.Collectors;
 | 
	
		
			
				|  |  | +import java.util.stream.Stream;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import org.apache.commons.collections.ListUtils;
 | 
	
		
			
				|  |  | +import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  | +import org.springframework.beans.BeanUtils;
 | 
	
		
			
				|  |  | +import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | +import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  | +import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  | +import org.springframework.util.CollectionUtils;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  import com.alibaba.fastjson.JSON;
 | 
	
		
			
				|  |  |  import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  |  import com.ym.mec.auth.api.client.SysUserFeignService;
 | 
	
		
			
				|  |  |  import com.ym.mec.auth.api.entity.SysUser;
 | 
	
		
			
				|  |  |  import com.ym.mec.auth.api.entity.SysUserRole;
 | 
	
		
			
				|  |  |  import com.ym.mec.auth.api.enums.SysUserType;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.dal.dao.*;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.dal.dto.*;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.dal.entity.*;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.dal.enums.*;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.ClassGroupDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.CourseScheduleComplaintsDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.MusicGroupDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.StudentAttendanceDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.SubjectDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.SysConfigDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.TeacherAttendanceDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.TeacherDefaultVipGroupSalaryDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.VipGroupDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dto.ClassDateAdjustDto;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dto.CourseAttendanceDetailHeadInfoDto;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dto.CourseScheduleDto;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dto.IntegerAndIntegerListDto;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dto.Mapper;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dto.TeacherAttendanceDto;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dto.TeacherClassCourseSchudeleDto;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.entity.ClassGroup;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.entity.CourseSchedule;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.entity.CourseScheduleComplaints;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.entity.StudentAttendance;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.entity.TeacherDefaultVipGroupSalary;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.entity.VipGroup;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.enums.AuditStatusEnum;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.enums.GroupType;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.enums.ParamEnum;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.enums.TeachTypeEnum;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.enums.VipGroupStatusEnum;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.page.StudentCourseScheduleRecordQueryInfo;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.page.VipGroupQueryInfo;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.service.*;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.service.ClassGroupService;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.service.ClassGroupTeacherMapperService;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.service.CourseScheduleService;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.service.CourseScheduleTeacherSalaryService;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.service.SysConfigService;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.service.SysMessageService;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.dal.BaseDAO;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.exception.BizException;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.page.PageInfo;
 | 
	
	
		
			
				|  | @@ -21,18 +85,6 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 | 
	
		
			
				|  |  |  import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 | 
	
		
			
				|  |  |  import com.ym.mec.util.collection.MapUtil;
 | 
	
		
			
				|  |  |  import com.ym.mec.util.date.DateUtil;
 | 
	
		
			
				|  |  | -import org.apache.commons.collections.ListUtils;
 | 
	
		
			
				|  |  | -import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  | -import org.springframework.beans.BeanUtils;
 | 
	
		
			
				|  |  | -import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | -import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  | -import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  | -import org.springframework.util.CollectionUtils;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -import java.text.SimpleDateFormat;
 | 
	
		
			
				|  |  | -import java.util.*;
 | 
	
		
			
				|  |  | -import java.util.stream.Collectors;
 | 
	
		
			
				|  |  | -import java.util.stream.Stream;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @Service
 | 
	
		
			
				|  |  |  public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSchedule>  implements CourseScheduleService {
 | 
	
	
		
			
				|  | @@ -934,30 +986,40 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  | +	@Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  |  	public boolean updateCourseScheduleToOverStatus() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		Date date = new Date();
 | 
	
		
			
				|  |  | +		//课程已结束,更新“未签到”学生的状态未“旷课”
 | 
	
		
			
				|  |  |  		List<StudentAttendance> studentAttendanceList = courseScheduleDao.queryUnsignedStudentList();
 | 
	
		
			
				|  |  |  		for (StudentAttendance studentAttendance : studentAttendanceList) {
 | 
	
		
			
				|  |  |  			studentAttendance.setStatus(StudentAttendanceStatusEnum.TRUANT);
 | 
	
		
			
				|  |  | +			studentAttendance.setCurrentClassTimes(studentAttendance.getCurrentClassTimes() + 1);
 | 
	
		
			
				|  |  |  			studentAttendance.setCreateTime(date);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		if (studentAttendanceList != null && studentAttendanceList.size() > 0) {
 | 
	
		
			
				|  |  |  			studentAttendanceDao.batchUpdate(studentAttendanceList);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +		
 | 
	
		
			
				|  |  | +		//自动更新课程状态至“已结束”
 | 
	
		
			
				|  |  |  		List<CourseSchedule> list = courseScheduleDao.queryFinishedWithNoUpdateStatus();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		List<CourseSchedule> updateList = new ArrayList<CourseSchedule>();
 | 
	
		
			
				|  |  | -		List<Integer> classGroups = new ArrayList<Integer>();
 | 
	
		
			
				|  |  | +		List<Integer> classGroupIds = new ArrayList<Integer>();
 | 
	
		
			
				|  |  | +		List<Long> courseScheduleIdList = new ArrayList<Long>();
 | 
	
		
			
				|  |  | +		
 | 
	
		
			
				|  |  |  		for (CourseSchedule courseSchedule : list) {
 | 
	
		
			
				|  |  |  			courseSchedule.setStatus(CourseStatusEnum.OVER);
 | 
	
		
			
				|  |  |  			courseSchedule.setUpdateTime(date);
 | 
	
		
			
				|  |  |  			updateList.add(courseSchedule);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -			if (!classGroups.contains(courseSchedule.getClassGroupId())) {
 | 
	
		
			
				|  |  | -				classGroups.add(courseSchedule.getClassGroupId());
 | 
	
		
			
				|  |  | +			if (!classGroupIds.contains(courseSchedule.getClassGroupId())) {
 | 
	
		
			
				|  |  | +				classGroupIds.add(courseSchedule.getClassGroupId());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			
 | 
	
		
			
				|  |  | +			if(courseSchedule.getGroupType() == GroupType.VIP){
 | 
	
		
			
				|  |  | +				courseScheduleIdList.add(courseSchedule.getId());
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -965,11 +1027,36 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 | 
	
		
			
				|  |  |  			courseScheduleDao.batchUpdate(updateList);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		// 更新班级课次
 | 
	
		
			
				|  |  | -		if (classGroups.size() > 0) {
 | 
	
		
			
				|  |  | -			classGroupService.batchIncreaseClassTimes(classGroups);
 | 
	
		
			
				|  |  | +		// 更新班级已上课次
 | 
	
		
			
				|  |  | +		if (classGroupIds.size() > 0) {
 | 
	
		
			
				|  |  | +			classGroupService.batchIncreaseClassTimes(classGroupIds);
 | 
	
		
			
				|  |  | +			
 | 
	
		
			
				|  |  | +			//查询班级信息
 | 
	
		
			
				|  |  | +			List<ClassGroup> classGroupList = classGroupService.findClassGroupByIds(classGroupIds.stream().map(e->e.toString()).collect(Collectors.joining(",")));
 | 
	
		
			
				|  |  | +			
 | 
	
		
			
				|  |  | +			List<String> vipGroupIdList = new ArrayList<String>();
 | 
	
		
			
				|  |  | +			for(ClassGroup classGroup : classGroupList){
 | 
	
		
			
				|  |  | +				if(classGroup.getGroupType() == GroupType.VIP && classGroup.getCurrentClassTimes() == classGroup.getTotalClassTimes().intValue()){
 | 
	
		
			
				|  |  | +					if(!vipGroupIdList.contains(classGroup.getMusicGroupId())){
 | 
	
		
			
				|  |  | +						vipGroupIdList.add(classGroup.getMusicGroupId());
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			if(vipGroupIdList.size() > 0){
 | 
	
		
			
				|  |  | +				List<VipGroup> vipGroupList = vipGroupDao.queryByIds(vipGroupIdList.stream().collect(Collectors.joining(",")));
 | 
	
		
			
				|  |  | +				for(VipGroup vipGroup : vipGroupList){
 | 
	
		
			
				|  |  | +					vipGroup.setStatus(VipGroupStatusEnum.FINISHED);
 | 
	
		
			
				|  |  | +					vipGroup.setUpdateTime(date);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				vipGroupDao.batchUpdate(vipGroupList);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +		
 | 
	
		
			
				|  |  | +		if (courseScheduleIdList.size() > 0) {
 | 
	
		
			
				|  |  | +			// vip课自动签退
 | 
	
		
			
				|  |  | +			teacherAttendanceDao.updateViPSignOutStatus(courseScheduleIdList.stream().map(a -> a.toString()).collect(Collectors.joining(",")));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		
 | 
	
		
			
				|  |  |  		return true;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 |