Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

Joburgess 5 vuotta sitten
vanhempi
commit
92aee01515
23 muutettua tiedostoa jossa 408 lisäystä ja 87 poistoa
  1. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java
  2. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java
  3. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java
  4. 10 13
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java
  5. 0 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherAttendance.java
  6. 73 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentSignQueryInfo.java
  7. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java
  8. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  9. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupTeacherMapperServiceImpl.java
  10. 27 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java
  11. 112 25
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  12. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  13. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  14. 8 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  15. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  16. 7 4
      mec-biz/src/main/resources/config/contracts/courses.ftl
  17. 7 4
      mec-biz/src/main/resources/config/contracts/goods.ftl
  18. 1 2
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  19. 3 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml
  20. 35 11
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  21. 4 0
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  22. 79 0
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  23. 2 1
      mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachTypeEnum;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
@@ -62,7 +63,7 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
      * @param classGroupTeacherMapperList
      * @return
      */
-    List<ClassGroupTeacherMapper> getClassGroupTeacherMapper(@Param("classGroupTeacherMapperList") List<ClassGroupTeacherMapper> classGroupTeacherMapperList);
+    List<ClassGroupTeacherMapper> getClassGroupTeacherMapper(@Param("classGroupTeacherMapperList") List<ClassGroupTeacherMapper> classGroupTeacherMapperList, @Param("groupType") GroupType groupType);
 
     /**
      * 批量删除班级老师关系
@@ -74,6 +75,7 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
 
     /**
      * 获取助教名称列表
+     *
      * @param classGroupId
      * @return
      */

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

@@ -99,4 +99,11 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
      * @return java.util.List<java.util.Map<java.lang.Integer,java.lang.Integer>>
      */
     List<TeacherAttendance> findTeacherIdByCourseSchedule(@Param("courseScheduleIds") List<Long> courseScheduleIds);
+    
+	/**
+	 * 更新vip课的签退状态
+	 * @param courseScheduleIdList
+	 * @return
+	 */
+	int updateViPSignOutStatus(String courseScheduleIdList);
 }

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java

@@ -280,4 +280,18 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return
 	 */
 	int countStudentVipGroups(Map<String, Object> params);
+	
+	/**
+	 * 根编号列表查询对象
+	 * @param idList
+	 * @return
+	 */
+	List<VipGroup> queryByIds(String idList);
+
+	/**
+	 * 批量更新
+	 * @param vipGroupList
+	 * @return
+	 */
+	int batchUpdate(List<VipGroup> vipGroupList);
 }

+ 10 - 13
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java

@@ -1,26 +1,23 @@
 package com.ym.mec.biz.dal.entity;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.google.common.collect.Lists;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.TeachModeEnum;
-import com.ym.mec.common.enums.BaseEnum;
-
 import io.swagger.annotations.ApiModelProperty;
 
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-
 import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.Objects;
 
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
+import com.ym.mec.common.enums.BaseEnum;
+
 /**
  * 对应数据库表(course_schedule):
  */

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

@@ -39,7 +39,6 @@ public class TeacherAttendance {
 	@ApiModelProperty(value = "签到时间",required = false)
 	private java.util.Date signInTime;
 	
-	/** 状态(正常签到,异常签到) */
 	@ApiModelProperty(value = "状态(0:签到,1:签退)",required = false)
 	private Integer status;
 

+ 73 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentSignQueryInfo.java

@@ -0,0 +1,73 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+public class StudentSignQueryInfo extends QueryInfo {
+
+    @ApiModelProperty(value = "开始时间",required = false)
+    private String startTime;
+
+    @ApiModelProperty(value = "结束时间",required = false)
+    private String endTime;
+
+    @ApiModelProperty(value = "课程名称",required = false)
+    private String courseScheduleName;
+
+    @ApiModelProperty(value = "学生名",required = false)
+    private String userName;
+
+    @ApiModelProperty(value = "签到状态",required = false)
+    private String signStatus;
+
+    @ApiModelProperty(value = "乐团编号",required = false)
+    private String musicGroupId;
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getCourseScheduleName() {
+        return courseScheduleName;
+    }
+
+    public void setCourseScheduleName(String courseScheduleName) {
+        this.courseScheduleName = courseScheduleName;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getSignStatus() {
+        return signStatus;
+    }
+
+    public void setSignStatus(String signStatus) {
+        this.signStatus = signStatus;
+    }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+}

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

@@ -91,7 +91,7 @@ public interface StudentManageService {
      * @param queryInfo
      * @return
      */
-    PageInfo<MusicGroupStudentSignDto> queryMusicGroupStudentsSign(QueryInfo queryInfo);
+    PageInfo<MusicGroupStudentSignDto> queryMusicGroupStudentsSign(StudentSignQueryInfo queryInfo);
 
     /**
      * 获取学员的班级信息列表

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java

@@ -306,4 +306,8 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      */
     void addVipGroupStudents(Long vipGroupId,List<Integer> studentIds);
     
+	/**
+	 * 更新vipgroup至完成状态
+	 */
+	void updateVipGroupStatusToFinished();
 }

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

@@ -63,9 +63,10 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
         List<ClassGroup> classGroups = classGroupService.findClassGroupByIds(classGroupIds);
 
-        List<ClassGroupTeacherMapper> oldClassGroupTeacherMapper = classGroupTeacherMapperDao.getClassGroupTeacherMapper(classGroupTeacherMapperList);
+        List<ClassGroupTeacherMapper> oldClassGroupTeacherMapper = classGroupTeacherMapperDao.getClassGroupTeacherMapper(classGroupTeacherMapperList,GroupType.MUSIC);
 
         for (ClassGroup classGroup : classGroups) {
+            imGroupMemberList.clear();
             //原设置的老师删除群组
             for (ClassGroupTeacherMapper classGroupTeacherMapper : oldClassGroupTeacherMapper) {
                 if (!classGroup.getId().equals(classGroupTeacherMapper.getClassGroupId())) continue;

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

@@ -19,9 +19,11 @@ import org.springframework.stereotype.Service;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
+import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
 import com.ym.mec.biz.dal.dto.StudentInfo;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.entity.Subject;
@@ -69,6 +71,9 @@ public class ContractServiceImpl implements ContractService {
 
 	@Autowired
 	private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao;
+	
+	@Autowired
+	private MusicGroupStudentFeeDao musicGroupStudentFeeDao;
 
 	@Autowired
 	private MusicGroupSubjectGoodsGroupService musicGroupSubjectGoodsGroupService;
@@ -250,12 +255,18 @@ public class ContractServiceImpl implements ContractService {
 		if (studentRegistration == null) {
 			throw new BizException("用户 报名信息不存在");
 		}
-		MusicGroupSubjectPlan musicGroupSubjectPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(musicGroupId,
-				studentRegistration.getActualSubjectId());
-		if (musicGroupSubjectPlan == null) {
-			throw new BizException("声部课程费用设置找不到");
+		MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(userId, musicGroupId);
+		if (musicGroupStudentFee == null) {
+			MusicGroupSubjectPlan musicGroupSubjectPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(musicGroupId,
+					studentRegistration.getActualSubjectId());
+			if (musicGroupSubjectPlan == null) {
+				throw new BizException("声部课程费用设置找不到");
+			}
+			params.put("courseFee", musicGroupSubjectPlan.getFee().doubleValue());
+		} else {
+			params.put("courseFee", musicGroupStudentFee.getTemporaryCourseFee().doubleValue() > 0 ? musicGroupStudentFee.getTemporaryCourseFee().doubleValue()
+					: musicGroupStudentFee.getCourseFee().doubleValue());
 		}
-		params.put("courseFee", musicGroupSubjectPlan.getFee().doubleValue());
 
 		// 收费形式
 		List<MusicGroupPaymentCalender> calenders = musicGroupPaymentCalenderDao.findByMusicGroupId(musicGroupId);
@@ -327,12 +338,18 @@ public class ContractServiceImpl implements ContractService {
 		if (studentRegistration == null) {
 			throw new BizException("用户 报名信息不存在");
 		}
-		MusicGroupSubjectPlan musicGroupSubjectPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(musicGroupId,
-				studentRegistration.getActualSubjectId());
-		if (musicGroupSubjectPlan == null) {
-			throw new BizException("声部课程费用设置找不到");
+		MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(userId, musicGroupId);
+		if (musicGroupStudentFee == null) {
+			MusicGroupSubjectPlan musicGroupSubjectPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(musicGroupId,
+					studentRegistration.getActualSubjectId());
+			if (musicGroupSubjectPlan == null) {
+				throw new BizException("声部课程费用设置找不到");
+			}
+			params.put("courseFee", musicGroupSubjectPlan.getFee().doubleValue());
+		} else {
+			params.put("courseFee", musicGroupStudentFee.getTemporaryCourseFee().doubleValue() > 0 ? musicGroupStudentFee.getTemporaryCourseFee().doubleValue()
+					: musicGroupStudentFee.getCourseFee().doubleValue());
 		}
-		params.put("courseFee", musicGroupSubjectPlan.getFee().doubleValue());
 
 		// 收费形式
 		List<MusicGroupPaymentCalender> calenders = musicGroupPaymentCalenderDao.findByMusicGroupId(musicGroupId);

+ 112 - 25
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -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;
 	}
 

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

@@ -61,7 +61,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 	@Transactional(rollbackFor = Exception.class)
 	public void add(Employee employee){
 		SysUser user = sysUserFeignService.queryUserByMobile(employee.getPhone());
-		if(user != null){
+		if(user != null && user.getId() != null){
 			employee.setUserType(SysUserType.SYSTEM);
 			teacherDao.updateUser(employee);
 			Employee employee1 = employeeDao.get(user.getId());
@@ -73,6 +73,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 			}else{
 				new BizException("员工已存在");
 			}
+			return;
 		}
 		employee.setPassword(new BCryptPasswordEncoder().encode(ParamEnum.INIT_PASSWORD.getCode().toString()));
 		employee.setUserType(SysUserType.SYSTEM);

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service.impl;
 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.MusicGroup;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.service.StudentManageService;
@@ -202,7 +203,7 @@ public class StudentManageServiceImpl implements StudentManageService {
     }
 
     @Override
-    public PageInfo<MusicGroupStudentSignDto> queryMusicGroupStudentsSign(QueryInfo queryInfo) {
+    public PageInfo<MusicGroupStudentSignDto> queryMusicGroupStudentsSign(StudentSignQueryInfo queryInfo) {
         PageInfo<MusicGroupStudentSignDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);

+ 8 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -552,16 +552,20 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(studentRegistration.getMusicGroupId(), studentRegistration.getSubjectId());
 
         if (studentPaymentOrder.getStatus().equals(DealStatusEnum.SUCCESS)) {
+            studentRegistration.setTemporaryCourseFee(new BigDecimal(0));
+            studentRegistration.setPaymentStatus(PaymentStatusEnum.YES);
+            studentRegistration.setMusicGroupStatus(ClassGroupStudentStatusEnum.NORMAL);
+            studentRegistrationDao.update(studentRegistration);
+
+            //进行中乐团加入学生缴费
             if (studentRegistration.getTemporaryCourseFee() != null) {
-                //关闭订单
+                //关闭待支付订单
                 StudentPaymentOrder waitPayOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(studentRegistration.getUserId(), studentRegistration.getMusicGroupId(), DealStatusEnum.WAIT_PAY);
                 waitPayOrder.setStatus(DealStatusEnum.CLOSE);
                 studentPaymentOrderService.update(waitPayOrder);
                 //添加学生
                 classGroupStudentMapperService.addStudents(waitPayOrder.getClassGroupId(), studentRegistration.getUserId().toString(), GroupType.MUSIC);
-            }
-
-            if (studentRegistration.getTemporaryCourseFee() == null) {
+            } else {
                 //获取当前月
                 Integer month = Integer.parseInt(DateUtil.getMonth(nowDate));
                 //获取下次缴费月份
@@ -589,11 +593,6 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 musicGroupStudentFeeDao.insert(musicGroupStudentFee);
             }
 
-            studentRegistration.setTemporaryCourseFee(new BigDecimal(0));
-            studentRegistration.setPaymentStatus(PaymentStatusEnum.YES);
-            studentRegistration.setMusicGroupStatus(ClassGroupStudentStatusEnum.NORMAL);
-            studentRegistrationDao.update(studentRegistration);
-
             //插入交易明细
             SysUserCashAccount cashAccount = sysUserCashAccountService.get(studentRegistration.getUserId());
             BigDecimal amount = studentPaymentOrder.getActualAmount();
@@ -637,7 +636,6 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                     studentRegistration.getParentsName(), studentPaymentOrder.getActualAmount());
         }
 
-        //失败减去已收款金额
 
         //减去缴费人数
         if (studentPaymentOrder.getStatus().equals(DealStatusEnum.FAILED)) {

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

@@ -1547,4 +1547,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		}
 		sysUserCashAccountDetailDao.batchInsert(userCashAccountDetails);
 	}
+
+	@Override
+	public void updateVipGroupStatusToFinished() {
+		
+	}
 }

+ 7 - 4
mec-biz/src/main/resources/config/contracts/courses.ftl

@@ -80,7 +80,7 @@
         <div style="display: flex;">乙方:
             <div style="flex: 1 auto;">
                 <div class="iInfo">
-                    <span>家长姓名 ${studentInfo.parentsName!}</span>
+                    <span>家长姓名 ${studentInfo.parentsName!}</span>
                     <span>电话: ${studentInfo.phone!}</span>
                 </div>
                 <div class="iInfo">
@@ -106,7 +106,7 @@
         
         <div class="iInfoContent">
             <span>授课类别:${classesType}</span>
-            <span>课程费用:${courseFee?string("0.00")}</span>
+            <span>课程费用:${courseFee?string("0.00")}</span>
             <span>收费形式:${paymentcalender}</span>
         </div>
 
@@ -160,14 +160,17 @@
             <div class="sign">甲方签章:深圳大雅乐盟网络教育股份有限公司<img class="cachet" src="https://daya-online.oss-cn-beijing.aliyuncs.com/website/cachet.png" alt="" />
                 <span>日期:${.now?string("yyyy年MM月dd日")}</span>
             </div>
+            <div class="sign">乙方签字:${studentInfo.parentsName!}
+                <span>日期:${.now?string("yyyy年MM月dd日")} </span>
+            </div>
         	<#else>
             <div class="sign">甲方签章:深圳大雅乐盟网络教育股份有限公司
                 <span>日期:${.now?string("yyyy年MM月dd日")}</span>
             </div>
-        	</#if>
-            <div class="sign">乙方签字:${studentInfo.realName!}
+            <div class="sign">乙方签字:
                 <span>日期:${.now?string("yyyy年MM月dd日")} </span>
             </div>
+        	</#if>
         </div>
     </div>
 </body>

+ 7 - 4
mec-biz/src/main/resources/config/contracts/goods.ftl

@@ -79,7 +79,7 @@
         <div style="display: flex;">乙方:
             <div style="flex: 1 auto;">
                 <div class="iInfo">
-                    <span>家长姓名 ${studentInfo.parentsName!}</span>
+                    <span>家长姓名 ${studentInfo.parentsName!}</span>
                     <span>电话: ${studentInfo.phone!}</span>
                 </div>
                 <div class="iInfo">
@@ -113,7 +113,7 @@
         </div>
         <div class="iInfo">
             <span>型号:${goodsList[0].specification}</span>
-            <span>团购价格:${goodsList[0].groupPurchasePrice?string("0.00")}</span>
+            <span>团购价格:${goodsList[0].groupPurchasePrice?string("0.00")}</span>
         </div>
 
         <h2>四、违约责任</h2>  
@@ -139,14 +139,17 @@
             <div class="sign">甲方签章:深圳大雅乐盟网络教育股份有限公司<img class="cachet" src="https://daya-online.oss-cn-beijing.aliyuncs.com/website/cachet.png" alt="" />
                 <span>日期:${.now?string("yyyy年MM月dd日")}</span>
             </div>
+            <div class="sign">乙方签字:${studentInfo.parentsName!}
+                <span>日期:${.now?string("yyyy年MM月dd日")} </span>
+            </div>
         	<#else>
             <div class="sign">甲方签章:深圳大雅乐盟网络教育股份有限公司
                 <span>日期:${.now?string("yyyy年MM月dd日")}</span>
             </div>
-            </#if>
-            <div class="sign">乙方签字:${studentInfo.realName!}
+            <div class="sign">乙方签字:
                 <span>日期:${.now?string("yyyy年MM月dd日")} </span>
             </div>
+            </#if>
         </div>
     </div>
 </body>

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

@@ -521,8 +521,7 @@
     <select id="countStudyNum" resultType="java.util.Map">
         SELECT cgsm.class_group_id_ 'key',COUNT(cgsm.user_id_) 'value' FROM class_group_student_mapper cgsm
         LEFT JOIN student_registration sr ON (sr.user_id_ = cgsm.user_id_ AND sr.music_group_id_ = cgsm.music_group_id_)
-        WHERE FIND_IN_SET(cgsm.class_group_id_,#{classGroupIds}) AND cgsm.status_ != 'QUIT' AND sr.music_group_status_ != 'QUIT' AND
-        FIND_IN_SET(sr.music_group_status_,'NORMAL,LEAVE') GROUP BY cgsm.class_group_id_
+        WHERE FIND_IN_SET(cgsm.class_group_id_,#{classGroupIds}) AND cgsm.status_ != 'QUIT' AND sr.music_group_status_ != 'QUIT' GROUP BY cgsm.class_group_id_
     </select>
 
     <select id="countQuitNum" resultType="java.util.Map">

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

@@ -100,7 +100,7 @@
         (id_,group_type_,music_group_id_,class_group_id_,teacher_role_,user_id_,salary_,create_time_,update_time_)
         VALUE
         <foreach collection="classGroupTeacherMapperList" item="item" index="index" separator=",">
-            (#{item.id},#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{item.musicGroupId},#{item.classGroupId},#{item.teacherRole},#{item.userId},#{item.salary},NOW(),NOW())
+            (#{item.id},#{item.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{item.musicGroupId},#{item.classGroupId},#{item.teacherRole},#{item.userId},#{item.salary},NOW(),NOW())
         </foreach>
     </insert>
 
@@ -143,7 +143,9 @@
         <foreach collection="classGroupTeacherMapperList" item="item" index="index" open="(" close=")" separator=",">
             #{item.classGroupId}
         </foreach>
+        AND group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
     </select>
+
     <select id="queryTeachingNames" resultType="java.lang.String">
         SELECT GROUP_CONCAT(su.real_name_) FROM class_group_teacher_mapper cgtm
         LEFT JOIN sys_user su ON cgtm.user_id_ = su.id_

+ 35 - 11
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -189,13 +189,13 @@
         <where>
                 cgsm.status_ != 'QUIT'
             <if test="studentId!=null">
-                and cgsm.user_id_=#{studentId}
+                and cgsm.user_id_ = #{studentId}
             </if>
             <if test="musicGroupId!=null">
-                and cg.music_group_id_=#{musicGroupId} AND cg.group_type_='MUSIC'
+                and cg.music_group_id_ = #{musicGroupId} AND cg.group_type_='MUSIC'
             </if>
             <if test="classGroupType!=null">
-                and cg.type_=#{classGroupType}
+                and cg.type_ = #{classGroupType}
             </if>
             <if test="courseStatus!=null">
                 and cs.status_=#{courseStatus}
@@ -207,7 +207,7 @@
                 and su.username_ like CONCAT("%",#{teacherName},"%")
             </if>
             <if test="vipGroupId!=null">
-                and cg.music_group_id_=#{vipGroupId} AND cg.group_type_='VIP'
+                and cg.music_group_id_ = #{vipGroupId} AND cg.group_type_='VIP'
             </if>
         </where>
     </sql>
@@ -241,13 +241,13 @@
         <where>
             CONCAT(cs.class_date_," ",cs.start_class_time_) &lt; NOW()
             <if test="studentId!=null">
-                and sa.user_id_=#{studentId}
+                and sa.user_id_ = #{studentId}
             </if>
             <if test="classGroupType!=null">
-                and cg.type_=#{classGroupType}
+                and cg.type_ = #{classGroupType}
             </if>
             <if test="attendanceStatus!=null">
-                and sa.status_=#{attendanceStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+                and sa.status_ = #{attendanceStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
             <if test="classGroupName!=null">
                 and cg.name_ like CONCAT("%",#{classGroupName},"%")
@@ -320,8 +320,8 @@
         cg.total_class_times_,sa.current_class_times_,sa.status_,cssp.expect_price_,cssp.actual_price_
         FROM course_schedule_student_payment cssp
         LEFT JOIN course_schedule cs ON cssp.course_schedule_id_ = cs.id_
+        LEFT JOIN class_group cg ON cg.id_ = cs.class_group_id_
         LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cssp.course_schedule_id_ AND sa.user_id_ = cssp.user_id_
-        LEFT JOIN class_group cg ON cg.id_ = sa.class_group_id_
         <include refid="studentPaymentSql"/>
         ORDER BY cs.class_date_ DESC,cs.start_class_time_ DESC
         <include refid="global.limit"/>
@@ -421,7 +421,7 @@
         SELECT COUNT(sr.user_id_) FROM student_registration sr
         LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
         WHERE sr.music_group_id_ = #{musicGroupId} AND sr.music_group_status_ != 'QUIT'
-        AND sr.create_time_ > mg.payment_expire_date_
+        AND DATE_FORMAT(sr.create_time_,'%Y-%m-%d') > DATE_FORMAT(mg.payment_expire_date_,'%Y-%m-%d')
     </select>
 
     <resultMap id="MusicGroupStudentSignDto" type="com.ym.mec.biz.dal.dto.MusicGroupStudentSignDto">
@@ -435,15 +435,39 @@
         FROM student_attendance sa
         LEFT JOIN sys_user su ON sa.user_id_ = su.id_
         LEFT JOIN course_schedule cs ON sa.course_schedule_id_ = cs.id_
-        WHERE sa.music_group_id_ = #{search}
+        <include refid="queryMusicGroupStudentsSignSql"/>
         <include refid="global.limit"/>
     </select>
+
+    <sql id="queryMusicGroupStudentsSignSql">
+        <where>
+            <if test="musicGroupId != null">
+                AND sa.music_group_id_ = #{musicGroupId}
+            </if>
+            <if test="courseScheduleName != null">
+                AND cs.name_ LIKE CONCAT('%',#{courseScheduleName},'%')
+            </if>
+            <if test="startTime != null">
+                AND sa.create_time_ &gt;= #{startTime}
+            </if>
+            <if test="endTime != null">
+                AND sa.create_time_ &lt;= #{endTime}
+            </if>
+            <if test="signStatus != null">
+                AND sa.status_ = #{signStatus}
+            </if>
+            <if test="userName != null">
+                AND su.username_ LIKE CONCAT('%',#{userName},'%')
+            </if>
+        </where>
+    </sql>
+
     <select id="countMusicGroupStudentsSign" resultType="java.lang.Integer">
         SELECT COUNT(sa.id_)
         FROM student_attendance sa
         LEFT JOIN sys_user su ON sa.user_id_ = su.id_
         LEFT JOIN course_schedule cs ON sa.course_schedule_id_ = cs.id_
-        WHERE sa.music_group_id_ = #{search}
+        <include refid="queryMusicGroupStudentsSignSql"/>
     </select>
 
 </mapper>

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

@@ -274,4 +274,8 @@
             #{courseScheduleId}
         </foreach>
     </select>
+    
+    <update id="updateViPSignOutStatus" parameterType="string">
+    	update teacher_attendance set sign_out_status_ = 1,sign_out_time_= now() where course_schedule_id_ in (#{courseScheduleIdList}) and sign_in_status_ = 1
+    </update>
 </mapper>

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

@@ -755,4 +755,83 @@
             LEFT JOIN course_schedule_student_payment cssp ON cs.id_=cssp.user_id_
             WHERE cssp.settlement_time_ IS NOT NULL AND cs.class_group_id_=#{classGroupId}
     </select>
+    
+    <select id="queryByIds" resultMap="VipGroup" parameterType="string">
+    	select * from vip_group where id_ in (#{idList})
+    </select>
+    
+    <update id="batchUpdate" parameterType="java.util.List">
+    	<foreach collection="list" item="item" index="index" open="" close="" separator=";">
+	        UPDATE vip_group
+	        <set>
+	            <if test="item.paymentExpireDate != null">
+	                payment_expire_date_ = #{item.paymentExpireDate},
+	            </if>
+	            <if test="item.userId != null">
+	                user_id_ = #{item.userId},
+	            </if>
+	            <if test="item.offlineClassesNum != null">
+	                offline_classes_num_ = #{item.offlineClassesNum},
+	            </if>
+	            <if test="item.onlineClassesNum != null">
+	                online_classes_num_ = #{item.onlineClassesNum},
+	            </if>
+	            <if test="item.updateTime != null">
+	                update_time_ = NOW(),
+	            </if>
+	            <if test="item.singleClassMinutes != null">
+	                single_class_minutes_ = #{item.singleClassMinutes},
+	            </if>
+	            <if test="item.teacherSchoolId != null">
+	                teacher_school_id_ = #{item.teacherSchoolId},
+	            </if>
+	            <if test="item.coursesExpireDate != null">
+	                courses_expire_date_ = #{item.coursesExpireDate},
+	            </if>
+	            <if test="item.registrationStartTime != null">
+	                registration_start_time_ = #{item.registrationStartTime},
+	            </if>
+	            <if test="item.organIdList!=null">
+	                organ_id_list_=#{item.organIdList},
+	            </if>
+	            <if test="item.auditStatus != null">
+	                audit_status_ = #{item.auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+	            </if>
+	            <if test="item.organIdList != null">
+	                organ_id_list_ = #{item.organIdList},
+	            </if>
+	            <if test="item.vipGroupActivityId != null">
+	                vip_group_activity_id_ = #{item.vipGroupActivityId},
+	            </if>
+	            <if test="item.status != null">
+	                status_ = #{item.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+	            </if>
+	            <if test="item.onlineClassesUnitPrice != null">
+	                online_classes_unit_price_ = #{item.onlineClassesUnitPrice},
+	            </if>
+	            <if test="item.offlineClassesUnitPrice != null">
+	                offline_classes_unit_price_ = #{item.offlineClassesUnitPrice},
+	            </if>
+	            <if test="item.totalPrice != null">
+	                total_price_ = #{item.totalPrice},
+	            </if>
+	            <if test="item.giveTeachMode!=null">
+	                give_teach_mode_=#{item.giveTeachMode},
+	            </if>
+	            <if test="item.organId!=null">
+	                organ_id_=#{item.organId},
+	            </if>
+	            <if test="item.stopReason!=null">
+	                stop_reason_=#{item.stopReason},
+	            </if>
+	            <if test="item.auditStatus!=null">
+	                audit_status_=#{item.auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+	            </if>
+	            <if test="item.courseSchedulesJson!=null">
+	                course_schedules_json_=#{item.courseSchedulesJson},
+	            </if>
+	        </set>
+	        WHERE id_ = #{item.id}
+        </foreach>
+    </update>
 </mapper>

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

@@ -4,6 +4,7 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.StudentAttendance;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.service.StudentManageService;
 import com.ym.mec.common.controller.BaseController;
@@ -74,7 +75,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "乐团管理--乐团详情--点名总览")
     @GetMapping("/queryMusicGroupStudentsSign")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryMusicGroupStudentsSign')")
-    public Object queryMusicGroupStudentsSign(QueryInfo queryInfo){
+    public Object queryMusicGroupStudentsSign(StudentSignQueryInfo queryInfo){
         return succeed(studentManageService.queryMusicGroupStudentsSign(queryInfo));
     }