Explorar el Código

Merge branch 'zouxuan' of http://git.dayaedu.com/yonge/mec into online1

zouxuan hace 5 años
padre
commit
2a76117099
Se han modificado 21 ficheros con 207 adiciones y 87 borrados
  1. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseReviewDto.java
  3. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassGroupDto.java
  4. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java
  5. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseReviewQueryInfo.java
  6. 30 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/PracticeGroupQueryInfo.java
  7. 0 1
      mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java
  8. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  9. 53 48
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  10. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java
  11. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  12. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  13. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  14. 4 2
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  15. 4 4
      mec-biz/src/main/resources/config/mybatis/CourseScheduleEvaluateMapper.xml
  16. 10 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  17. 7 2
      mec-biz/src/main/resources/config/mybatis/CourseScheduleReviewMapper.xml
  18. 2 2
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  19. 31 17
      mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
  20. 3 3
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  21. 4 4
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

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

@@ -1443,4 +1443,11 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
                                  @Param("startTime") String startTime,
                                  @Param("teacherId") Integer teacherId,
                                  @Param("continueCourseTime") String continueCourseTime);
+
+    /**
+     * 获取课程组已结束最后一节课时间
+     * @param vipGroupIds
+     * @return
+     */
+    List<Map<String, String>> findLastOverTime(@Param("vipGroupIds") List<String> vipGroupIds);
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseReviewDto.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.enums.PracticeGroupType;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.util.Date;
@@ -36,6 +37,8 @@ public class CourseReviewDto {
     @ApiModelProperty(value = "购买月数",required = false)
     private Integer BuyMonths;
 
+    private PracticeGroupType practiceGroupType;
+
     @ApiModelProperty(value = "评论id",required = false)
     private Integer reviewId;
 
@@ -127,6 +130,14 @@ public class CourseReviewDto {
     @ApiModelProperty(value = "考勤Str",required = false)
     private String attendanceStr;
 
+    public PracticeGroupType getPracticeGroupType() {
+        return practiceGroupType;
+    }
+
+    public void setPracticeGroupType(PracticeGroupType practiceGroupType) {
+        this.practiceGroupType = practiceGroupType;
+    }
+
     public String getAssignHomeworkStr() {
         return assignHomeworkStr;
     }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassGroupDto.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.PracticeGroupType;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.util.Date;
@@ -89,6 +90,17 @@ public class TeacherClassGroupDto {
     @ApiModelProperty(value = "购买月数")
     private Integer buyMonths;
 
+    @ApiModelProperty(value = "网管课课程组类型")
+    private PracticeGroupType practiceGroupType;
+
+    public PracticeGroupType getPracticeGroupType() {
+        return practiceGroupType;
+    }
+
+    public void setPracticeGroupType(PracticeGroupType practiceGroupType) {
+        this.practiceGroupType = practiceGroupType;
+    }
+
     public Date getCourseStartDate() {
         return courseStartDate;
     }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java

@@ -130,6 +130,16 @@ public class VipGroup {
 
 	private String userInfo;
 
+	private String lastOverTime;
+
+	public String getLastOverTime() {
+		return lastOverTime;
+	}
+
+	public void setLastOverTime(String lastOverTime) {
+		this.lastOverTime = lastOverTime;
+	}
+
 	public String getUserInfo() {
 		return userInfo;
 	}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseReviewQueryInfo.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.page;
 
+import com.ym.mec.biz.dal.enums.PracticeGroupType;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -23,6 +24,8 @@ public class CourseReviewQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "是否免费 1-免费 0收费",required = false)
     private Integer isFree;
 
+    private PracticeGroupType practiceGroupType;
+
     @ApiModelProperty(value = "学生评价",required = false)
     private Integer studentReview;
 
@@ -56,6 +59,14 @@ public class CourseReviewQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "作业是否回复",required = false)
     private Integer homeWorkReplied;
 
+    public PracticeGroupType getPracticeGroupType() {
+        return practiceGroupType;
+    }
+
+    public void setPracticeGroupType(PracticeGroupType practiceGroupType) {
+        this.practiceGroupType = practiceGroupType;
+    }
+
     public Integer getAssignHomework() {
         return assignHomework;
     }

+ 30 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/PracticeGroupQueryInfo.java

@@ -12,6 +12,8 @@ public class PracticeGroupQueryInfo extends QueryInfo {
 
     private Integer teacherId;
 
+    private Integer studentId;
+
     private Long practiceId;
 
     private String month;
@@ -22,6 +24,10 @@ public class PracticeGroupQueryInfo extends QueryInfo {
 
     private Integer hasReport;
 
+    private String practiceGroupType;
+
+    private String groupStatus;
+
     private Integer educationalTeacherId;
 
     private Boolean hasEducationalTeacherId;
@@ -30,6 +36,30 @@ public class PracticeGroupQueryInfo extends QueryInfo {
 
     private boolean isExport = false;
 
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+
+    public String getPracticeGroupType() {
+        return practiceGroupType;
+    }
+
+    public void setPracticeGroupType(String practiceGroupType) {
+        this.practiceGroupType = practiceGroupType;
+    }
+
+    public String getGroupStatus() {
+        return groupStatus;
+    }
+
+    public void setGroupStatus(String groupStatus) {
+        this.groupStatus = groupStatus;
+    }
+
     public Integer getType() {
         return type;
     }

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

@@ -263,7 +263,6 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
 	 */
 	void pushStudyReport(Date expiredDate,String pushType);
 
-
 	/**
 	 * 获取陪练课列表
 	 * @param queryInfo

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

@@ -1082,7 +1082,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     }else {
                         teacherClassGroupDto.setStudyReportUrl(studyReportUrl + teacherClassGroupDto.getClassGroupId());
                     }
-                }else if(teacherClassGroupDto.getBuyMonths() == null && classGroupNoStartClassTimes.intValue()==0 && classGroupTeacherMap.get(teacherClassGroupDto.getClassGroupId().intValue()).equals(user.getId())){
+                }else if(PracticeGroupType.FREE.equals(teacherClassGroupDto.getPracticeGroupType()) && classGroupNoStartClassTimes.intValue()==0 && classGroupTeacherMap.get(teacherClassGroupDto.getClassGroupId().intValue()).equals(user.getId())){
                    String studyReportUrl = sysConfigDao.findConfigValue(SysConfigService.TEACHER_STUDY_REPORT_URL);
                    teacherClassGroupDto.setStudyReportUrl(studyReportUrl+teacherClassGroupDto.getClassGroupId());
                }

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

@@ -47,6 +47,7 @@ import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import static com.ym.mec.biz.dal.enums.PracticeGroupType.*;
 import static com.ym.mec.biz.dal.enums.SignInStatusEnum.*;
 
 @Service
@@ -491,7 +492,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 							PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(classGroup.getMusicGroupId()));
 							if(practiceGroup == null){
 								throw new BizException("课程组不存在");
-							}else if (practiceGroup.getBuyMonths() == null){
+							}else if (FREE.equals(practiceGroup.getType())){
 								SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
 								BigDecimal teacherSalary = new BigDecimal(practiceCourseSalaryConfig.getParanValue());
 								courseScheduleTeacherSalary.setExpectSalary(teacherSalary);
@@ -3723,17 +3724,20 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         if(teacherSalary != null && teacherSalary.getSettlementTime() != null){
             throw new BizException("调整失败: 课程已结算");
         }
+
         PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(oldCourseSchedule.getMusicGroupId()));
         String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
         String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
         Date startDateTime = DateUtil.stringToDate(classDate + " " + startClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
         Date endDateTime = DateUtil.addMinutes(startDateTime,practiceGroup.getSingleClassMinutes());
-        if(DateUtil.minutesBetween(startDateTime,practiceGroup.getCoursesStartDate()) > 0){
-            throw new BizException("调整失败: 调整时间不得早于开课时间");
-        }
-        if(DateUtil.minutesBetween(practiceGroup.getCoursesExpireDate(),endDateTime) > 0){
-            throw new BizException("调整失败: 截止时间超过课程有效期");
-        }
+		if(practiceGroup.getType() != TRIAL){
+			if(DateUtil.minutesBetween(startDateTime,practiceGroup.getCoursesStartDate()) > 0){
+				throw new BizException("调整失败: 调整时间不得早于开课时间");
+			}
+			if(DateUtil.minutesBetween(practiceGroup.getCoursesExpireDate(),endDateTime) > 0){
+				throw new BizException("调整失败: 截止时间超过课程有效期");
+			}
+		}
         if(DateUtil.daysBetween(DateUtil.stringToDate(DateUtil.format(startDateTime,DateUtil.DEFAULT_PATTERN),DateUtil.DEFAULT_PATTERN),
                 DateUtil.stringToDate(DateUtil.format(endDateTime,DateUtil.DEFAULT_PATTERN),DateUtil.DEFAULT_PATTERN)) > 0){
             throw new BizException("单节课时不允许跨天");
@@ -3825,26 +3829,26 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         courseScheduleDao.update(oldCourseSchedule);
 
         PracticeGroup practiceGroup = practiceGroupDao.get(Long.valueOf(oldCourseSchedule.getMusicGroupId()));
-
-        if(Objects.nonNull(practiceGroup.getBuyMonths())){
-            List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
-            if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
-                throw new BizException("请设置老师默认课酬");
-            }
-            courseScheduleTeacherSalaryDao.batchUpdateTeacher(courseScheduleIds,teacherId);
-        }else{
-			List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedule(courseScheduleId);
-			if(!CollectionUtils.isEmpty(courseScheduleTeacherSalaries)){
-                SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
-                BigDecimal teacherSalary = new BigDecimal(practiceCourseSalaryConfig.getParanValue());
-                for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
-                    courseScheduleTeacherSalary.setUserId(teacherId);
-                    courseScheduleTeacherSalary.setExpectSalary(teacherSalary);
-                }
-                courseScheduleTeacherSalaryDao.batchUpdate(courseScheduleTeacherSalaries);
-            }
-        }
-
+		if(practiceGroup.getType() != TRIAL){
+			if(practiceGroup.getType() == FREE){
+				List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
+				if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
+					throw new BizException("请设置老师默认课酬");
+				}
+				courseScheduleTeacherSalaryDao.batchUpdateTeacher(courseScheduleIds,teacherId);
+			}else{
+				List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedule(courseScheduleId);
+				if(!CollectionUtils.isEmpty(courseScheduleTeacherSalaries)){
+					SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
+					BigDecimal teacherSalary = new BigDecimal(practiceCourseSalaryConfig.getParanValue());
+					for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
+						courseScheduleTeacherSalary.setUserId(teacherId);
+						courseScheduleTeacherSalary.setExpectSalary(teacherSalary);
+					}
+					courseScheduleTeacherSalaryDao.batchUpdate(courseScheduleTeacherSalaries);
+				}
+			}
+		}
         teacherAttendanceDao.batchUpdateTeacher(courseScheduleIds,teacherId);
         courseScheduleModifyLogDao.insert(scheduleModifyLog);
 
@@ -3927,27 +3931,28 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         checkNewCourseSchedules(courseSchedules,false);
         courseScheduleDao.batchUpdate(courseSchedules);
         Set<Long> courseScheduleIds = courseSchedules.stream().map(e -> e.getId()).collect(Collectors.toSet());
-
-        if(Objects.nonNull(practiceGroup.getBuyMonths())){
-            List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
-            if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
-                throw new BizException("请设置老师默认课酬");
-            }
-            courseScheduleTeacherSalaryDao.batchUpdateTeacher(courseScheduleIds,teacherId);
-        }else{
-            List<CourseSchedule> groupNotStartCourses = courseScheduleDao.findGroupNotStartCourses(practiceGroupId, GroupType.PRACTICE);
-            if(!CollectionUtils.isEmpty(groupNotStartCourses)){
-                SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
-                BigDecimal teacherSalary = new BigDecimal(practiceCourseSalaryConfig.getParanValue());
-                List<Long> courseIds = groupNotStartCourses.stream().map(CourseSchedule::getId).collect(Collectors.toList());
-                List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseIds);
-                for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
-                    courseScheduleTeacherSalary.setUserId(teacherId);
-                    courseScheduleTeacherSalary.setExpectSalary(teacherSalary);
-                }
-                courseScheduleTeacherSalaryDao.batchUpdate(courseScheduleTeacherSalaries);
-            }
-        }
+		if(practiceGroup.getType() != TRIAL){
+			if(CHARGE == practiceGroup.getType()){
+				List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
+				if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
+					throw new BizException("请设置老师默认课酬");
+				}
+				courseScheduleTeacherSalaryDao.batchUpdateTeacher(courseScheduleIds,teacherId);
+			}else{
+				List<CourseSchedule> groupNotStartCourses = courseScheduleDao.findGroupNotStartCourses(practiceGroupId, GroupType.PRACTICE);
+				if(!CollectionUtils.isEmpty(groupNotStartCourses)){
+					SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
+					BigDecimal teacherSalary = new BigDecimal(practiceCourseSalaryConfig.getParanValue());
+					List<Long> courseIds = groupNotStartCourses.stream().map(CourseSchedule::getId).collect(Collectors.toList());
+					List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseIds);
+					for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
+						courseScheduleTeacherSalary.setUserId(teacherId);
+						courseScheduleTeacherSalary.setExpectSalary(teacherSalary);
+					}
+					courseScheduleTeacherSalaryDao.batchUpdate(courseScheduleTeacherSalaries);
+				}
+			}
+		}
         teacherAttendanceDao.batchUpdateTeacher(courseScheduleIds,teacherId);
         courseScheduleModifyLogDao.batchInsert(scheduleModifyLogs);
 

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

@@ -276,6 +276,7 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
         practiceGroupBuyParams.setSingleClassMinutes(practiceCourseMinutes);
         practiceGroupBuyParams.setGroupStatus(GroupStatusEnum.LOCK);
         practiceGroupBuyParams.setMemo(operatorInfo+",教务代买");
+        practiceGroupBuyParams.setType(PracticeGroupType.CHARGE);
         practiceGroupDao.insert(practiceGroupBuyParams);
 
         //创建班级信息

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

@@ -1843,6 +1843,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         practiceGroup.setName(subject.getName() + "•" + sysUser.getUsername());
         practiceGroup.setSingleClassMinutes(practiceCourseMinutes);
         practiceGroup.setGroupStatus(GroupStatusEnum.NORMAL);
+        practiceGroup.setType(PracticeGroupType.FREE);
         practiceGroupDao.insert(practiceGroup);
 
         //创建班级信息
@@ -2813,6 +2814,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         practiceGroupBuyParams.setOrganId(sysUser.getOrganId());
         practiceGroupBuyParams.setSingleClassMinutes(practiceCourseMinutes);
         practiceGroupBuyParams.setGroupStatus(GroupStatusEnum.LOCK);
+        practiceGroupBuyParams.setType(PracticeGroupType.CHARGE);
         practiceGroupDao.insert(practiceGroupBuyParams);
 
         //创建班级信息
@@ -3423,7 +3425,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         Map<String, Object> result=new HashMap<>();
         if(Objects.nonNull(groupId)){
             PracticeGroup practiceGroup = practiceGroupDao.get(groupId);
-            if(Objects.isNull(practiceGroup)||!practiceGroup.getGroupStatus().equals(GroupStatusEnum.NORMAL)||Objects.isNull(practiceGroup.getBuyMonths())){
+            if(Objects.isNull(practiceGroup)||!practiceGroup.getGroupStatus().equals(GroupStatusEnum.NORMAL)||PracticeGroupType.FREE.equals(practiceGroup.getType())){
                 result.put("existWaitPayOrder",0);
                 return result;
             }

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

@@ -463,6 +463,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 			studentAttendance.setMusicGroupId(classGroup.getMusicGroupId());
 			studentAttendance.setUserId(userId);
 			studentAttendance.setTeacherId(courseSchedule.getActualTeacherId());
+
 			studentAttendanceDao.insert(studentAttendance);
 		}else {
 			studentAttendance.setTeacherId(courseSchedule.getActualTeacherId());

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

@@ -584,6 +584,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 				Map<String,Long> totalClassTimeMap = MapUtil.convertIntegerMap(courseScheduleDao.countTotalCourseScheduleNum(vipGroupIds,"VIP"));
 				Map<String,Long> currentClassTimeMap = MapUtil.convertIntegerMap(courseScheduleDao.countCourseScheduleNum(vipGroupIds,"VIP"));
+				Map<String,String> lastOverTimeMap = MapUtil.convertIntegerMap(courseScheduleDao.findLastOverTime(vipGroupIds));
 
 				Map<Integer, String> idNameMap=new HashMap<>();
 				if(!CollectionUtils.isEmpty(educationalTeacherIds)){
@@ -603,7 +604,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 					if(Objects.nonNull(classGroup)){
 						vipGroup.setStudentNum(classGroup.getStudentNum());
 					}
-
+					vipGroup.setLastOverTime(lastOverTimeMap.get(vipGroup.getId().toString()));
 					Long aLong = totalClassTimeMap.get(vipGroup.getId() + "");
 					vipGroup.setTotalClassTimes(aLong==null?0:aLong.intValue());
 					Long aLong1 = currentClassTimeMap.get(vipGroup.getId() + "");

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

@@ -498,6 +498,7 @@
         <result property="courseStartDate" column="courses_start_date_"/>
         <result property="classMode" column="class_mode_"/>
         <result property="buyMonths" column="buy_months_"/>
+        <result property="practiceGroupType" column="practice_group_type_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
 
     <select id="findTeacherMusicClassGroup" resultMap="TeacherClassGroupDto">
@@ -543,7 +544,8 @@
             pg.id_ music_group_id_,
             pg.name_ music_group_name_,
 						1 class_mode_,
-            pg.buy_months_
+            pg.buy_months_,
+            pg.type_ practice_group_type_
         FROM
             practice_group pg
             LEFT JOIN class_group cg ON pg.id_=cg.music_group_id_ AND cg.group_type_='PRACTICE'
@@ -822,7 +824,7 @@
         cg.current_class_times_,cg.total_class_times_,pg.single_class_minutes_,
         pg.id_ practice_id_,cg.type_,1 class_mode_,pg.courses_start_date_,
         pg.courses_expire_date_,
-        IF(pg.buy_months_ IS NULL,0,1) practice_type_
+        CASE pg.type_ WHEN 'FREE' THEN 0 WHEN 'CHARGE' THEN 1 END practice_type_
         FROM practice_group pg
         LEFT JOIN class_group cg ON cg.music_group_id_ = pg.id_
         LEFT JOIN sys_user su ON pg.user_id_ = su.id_

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

@@ -136,7 +136,7 @@
         FROM practice_group
         WHERE group_status_ != 'LOCK'
           AND group_status_ != 'CANCEL'
-          AND buy_months_ IS NULL
+          AND type_='FREE'
         GROUP BY organ_id_
     </select>
 
@@ -155,7 +155,7 @@
         SELECT pg.organ_id_, count(*) report_nums_
         FROM course_schedule_evaluate cse
                  LEFT JOIN practice_group pg on cse.music_group_id_ = pg.id_
-            AND pg.buy_months_ IS NULL
+            AND pg.type_='FREE'
             AND pg.group_status_ != 'LOCK'
             AND cse.status_ = 1
         GROUP BY pg.organ_id_
@@ -170,7 +170,7 @@
         WHERE cs.group_type_ = 'PRACTICE'
           AND cs.status_ != 'NOT_START'
           AND cs.del_flag_ = 0
-          AND pg.buy_months_ IS NULL
+          AND pg.type='FREE'
           AND pg.group_status_ != 'LOCK'
         GROUP BY cs.class_group_id_, pg.organ_id_
     </select>
@@ -323,7 +323,7 @@
                  LEFT JOIN student s ON s.user_id_ = pg.student_id_
         WHERE pg.group_status_ IN ('NORMAL', 'FINISH')
           AND s.operating_tag_ = 1
-          AND pg.buy_months_ IS NULL
+          AND pg.type_='FREE'
         GROUP BY pg.organ_id_
     </select>
 

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

@@ -2472,7 +2472,7 @@
         WHERE cs.group_type_ = 'PRACTICE'
           AND cssp.user_id_ = #{userId}
           AND cssp.expect_price_ = 0
-          AND pg.buy_months_ IS NULL
+          AND pg.type_ = 'FREE'
     </select>
     <select id="findTeacherCoursesWithIncludeDateRange" resultMap="CourseSchedule" useCache="false" flushCache="true">
         SELECT cs.id_,
@@ -2964,5 +2964,14 @@
         ORDER BY cs.class_date_ DESC,cs.end_class_time_ DESC
         LIMIT 1
     </select>
+    <select id="findLastOverTime" resultType="java.util.Map">
+        SELECT cs.music_group_id_ 'key',MAX(cs.class_date_) 'value'
+        FROM course_schedule cs
+        WHERE cs.status_ = 'OVER' AND cs.group_type_ = 'VIP' AND cs.music_group_id_ IN
+        <foreach collection="vipGroupIds" open="(" close=")" separator="," item="item">
+            #{item}
+        </foreach>
+        GROUP BY cs.music_group_id_
+    </select>
 
 </mapper>

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

@@ -138,6 +138,7 @@
         <result column="teacher_name_" jdbcType="VARCHAR" property="teacherName"/>
         <result column="edu_teacher_name_" jdbcType="VARCHAR" property="eduTeacherName"/>
         <result column="buy_months_" property="BuyMonths"/>
+        <result column="practice_group_type_" property="practiceGroupType"/>
         <result column="review_id_" property="reviewId"/>
         <result column="student_review_" property="studentReview"/>
         <result column="hand_homework_" property="handHomework"/>
@@ -186,7 +187,10 @@
                 AND pg.buy_months_ > 0
             </if>
             <if test='isFree !=null and isFree=="1"'>
-                AND pg.buy_months_ IS NULL
+                AND pg.type_='FREE'
+            </if>
+            <if test="practiceGroupType != null">
+                AND pg.type_=#{practiceGroupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
             <if test="studentReview !=null">
                 AND csc.score_ =#{studentReview}
@@ -247,7 +251,8 @@
         csr.hand_homework_,csr.course_review_,pg.student_id_,csr.teaching_material_,csr.pronunciation_,csr.tempo_,
         csr.music_theory_,csr.song_,csr.memo_,csr.create_time_,csr.has_liaison_,csr.update_time_,sa.id_
         attendance_id_,sch.is_replied_ home_work_replied_,
-        CASE WHEN sch.id_ IS NULL THEN 0 ELSE 1 END assign_homework_
+        CASE WHEN sch.id_ IS NULL THEN 0 ELSE 1 END assign_homework_,
+        pg.type_ practice_group_type_
         FROM course_schedule cs
         LEFT JOIN practice_group pg ON cs.music_group_id_ = pg.id_ AND cs.group_type_='PRACTICE'
         LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_

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

@@ -384,8 +384,8 @@
 	
 	<select id="queryStudentNotStartCourseTimesOfOnline" resultMap="studentCourseTimesDto">
 		SELECT cssp.`user_id_`,count(*) totalTimes, 
-		sum(case when (pg.buy_months_ > 0) then 1 ELSE 0 END) practiceTmes,
-		sum(case when (pg.buy_months_ IS NULL AND cssp.`group_type_` = 'PRACTICE' ) then 1 ELSE 0 END) freePracticeTimes
+		sum(CASE type_ WHEN 'FREE' THEN 0 WHEN 'CHARGE' THEN 1 END) practiceTmes,
+		sum(case when (pg.type_='FREE' AND cssp.`group_type_` = 'PRACTICE' ) then 1 ELSE 0 END) freePracticeTimes
 		FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs on cssp.course_schedule_id_ = cs.id_
 		LEFT JOIN practice_group pg ON pg.id_ = cs.music_group_id_ AND cs.group_type_ = 'PRACTICE'
 		WHERE cs.`teach_mode_` = 'ONLINE' AND cs.status_ = 'NOT_START'

+ 31 - 17
mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml

@@ -130,7 +130,7 @@
         SELECT *
         FROM practice_group
         WHERE student_id_ = #{userId}
-          AND buy_months_ IS NULL
+          AND type_='FREE'
     </select>
 
     <!-- 分页查询 -->
@@ -155,7 +155,7 @@
         FROM practice_group
         WHERE student_id_ = #{userId}
           AND group_status_ = 'NORMAL'
-          AND buy_months_ IS NULL
+          AND type_='FREE'
           AND create_time_ > '2020-03-25'
     </select>
     <select id="countPracticeGroupByOrgan" resultType="java.lang.Integer">
@@ -180,7 +180,7 @@
         SELECT *
         FROM practice_group
         WHERE student_id_ = #{userId}
-          AND buy_months_ IS NOT NULL
+          AND type_='CHARGE'
         ORDER BY create_time_ DESC
         LIMIT 1;
     </select>
@@ -195,7 +195,7 @@
                  LEFT JOIN `subject` s ON pg.subject_id_ = s.id_
         WHERE student_id_ = #{userId}
           AND (pg.group_status_ = 'NORMAL' OR pg.group_status_ = 'LOCK')
-          AND pg.buy_months_ IS NOT NULL
+          AND pg.type_='CHARGE'
     </select>
 
     <select id="findUserBuyPracticeGroupsWithDate" resultMap="PracticeCourseDto">
@@ -209,7 +209,7 @@
         WHERE student_id_ = #{userId}
           AND courses_start_date_ = #{date}
           AND group_status_ = 'LOCK'
-          AND pg.buy_months_ IS NOT NULL
+          AND pg.type_='CHARGE'
     </select>
     <select id="findUserPracticeGroup" resultMap="PracticeGroup">
         SELECT *
@@ -233,7 +233,6 @@
 
     <sql id="practiceGroupQueryCondition">
         <where>
-            pg.group_status_ IN ('NORMAL', 'FINISH')
             <if test="hasEducationalTeacherId != null and hasEducationalTeacherId == true">
                 AND pg.educational_teacher_id_ IS NOT NULL
             </if>
@@ -243,9 +242,21 @@
             <if test="search!=null and search!=''">
                 AND (pg.name_ LIKE CONCAT('%',#{search},'%') OR pg.id_= #{search})
             </if>
-            <if test="teacherId!=null">
+            <if test="teacherId != null">
                 AND pg.user_id_=#{teacherId}
             </if>
+            <if test="studentId != null">
+                AND pg.student_id_ = #{studentId}
+            </if>
+            <if test="practiceGroupType !=null and practiceGroupType != ''">
+                AND pg.type_ = #{practiceGroupType}
+            </if>
+            <if test="groupStatus != null and groupStatus != ''">
+                AND pg.group_status_ = #{groupStatus}
+            </if>
+            <if test="groupStatus == null or groupStatus == ''">
+                AND pg.group_status_ IN ('NORMAL', 'FINISH')
+            </if>
             <if test="organId != null">
                 AND FIND_IN_SET(pg.organ_id_,#{organId})
             </if>
@@ -253,13 +264,16 @@
                 AND pg.educational_teacher_id_=#{educationalTeacherId}
             </if>
             <if test="type != null and type == 1">
-                AND pg.be_renew_group_id_ IS NULL AND pg.buy_months_ IS NOT NULL
+                AND pg.be_renew_group_id_ IS NULL AND pg.type_='CHARGE'
             </if>
             <if test="type != null and type == 0">
-                AND pg.be_renew_group_id_ IS NOT NULL AND pg.buy_months_ IS NOT NULL
+                AND pg.be_renew_group_id_ IS NOT NULL AND pg.type_='CHARGE'
             </if>
             <if test="type != null and type == 2">
-                AND pg.buy_months_ IS NULL
+                AND pg.type_='FREE'
+            </if>
+            <if test="practiceGroupType != null">
+                AND pg.type_=#{practiceGroupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
         </where>
     </sql>
@@ -311,10 +325,10 @@
                 AND pg.courses_expire_date_ >= #{month}
             </if>
             <if test='isFree !=null and isFree=="0"'>
-                AND pg.buy_months_ > 0
+                AND pg.type_='CHARGE'
             </if>
             <if test='isFree !=null and isFree=="1"'>
-                AND pg.buy_months_ IS NULL
+                AND pg.type_='FREE'
             </if>
             <if test='isOver !=null and isOver=="0"'>
                 <![CDATA[AND pg.group_status_ = 'NORMAL'
@@ -401,10 +415,10 @@
         LEFT JOIN (SELECT pg.`student_id_` ,max(concat(cs.`class_date_`,' ',cs.`end_class_time_` )) lastClassDate FROM
         `practice_group` pg
         LEFT JOIN `course_schedule` cs on cs.`music_group_id_` = pg.`id_` and cs.`group_type_` = 'PRACTICE'
-        WHERE pg.`buy_months_` IS NULL AND cs.`group_type_` = 'PRACTICE'
+        WHERE pg.type_='FREE' AND cs.`group_type_` = 'PRACTICE'
         GROUP BY pg.`student_id_` ) b on a.student_id_ = b.student_id_
         left join (SELECT pg.`student_id_` ,min(pg.`create_time_`) firstBuyTime
-        FROM `practice_group` pg WHERE pg.`buy_months_` IS NOT NULL AND pg.`group_status_` in ('NORMAL','FINISH') GROUP
+        FROM `practice_group` pg WHERE pg.type_='CHARGE' AND pg.`group_status_` in ('NORMAL','FINISH') GROUP
         BY pg.`student_id_` ) c
         on a.student_id_ = c.student_id_
         left join `sys_user` u on u.`id_` = a.student_id_
@@ -436,11 +450,11 @@
         LEFT JOIN (SELECT pg.`student_id_` ,max(concat(cs.`class_date_`,' ',cs.`end_class_time_` )) lastClassDate FROM
         `practice_group` pg
         LEFT JOIN `course_schedule` cs on cs.`music_group_id_` = pg.`id_`
-        WHERE pg.`buy_months_` IS NULL AND cs.`group_type_` = 'PRACTICE'
+        WHERE pg.type_='FREE' AND cs.`group_type_` = 'PRACTICE'
         GROUP BY pg.`student_id_` ) b on a.student_id_ = b.student_id_
         left join (SELECT pg.`student_id_` ,min(pg.`create_time_`) firstBuyTime
         FROM `practice_group` pg
-        WHERE pg.`buy_months_` IS NOT NULL AND pg.`group_status_` IN ('NORMAL','FINISH') GROUP
+        WHERE pg.type_='CHARGE' AND pg.`group_status_` IN ('NORMAL','FINISH') GROUP
         BY pg.`student_id_` ) c ON a.student_id_ = c.student_id_
         LEFT JOIN (SELECT GROUP_CONCAT(DISTINCT su.real_name_) teacher_name_,pg.student_id_,GROUP_CONCAT(DISTINCT suc.real_name_) course_group_teacher_
         FROM `practice_group` pg
@@ -489,7 +503,7 @@
         su.username_ student_name_,
         o.name_ organ_name_,
         MAX(pg.courses_expire_date_) expire_date_,
-        CASE WHEN MAX(pg.buy_months_) IS NULL THEN 0 ELSE 1 END buy_practice_
+        CASE WHEN type_='FREE' THEN 0 ELSE 1 END buy_practice_
         FROM practice_group pg
         LEFT JOIN organization o on o.id_ = pg.organ_id_
         LEFT JOIN sys_user su ON su.id_ = pg.student_id_

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

@@ -194,7 +194,7 @@
         LEFT JOIN (
         SELECT cssp.user_id_,
         SUM(case when (cs.group_type_ = 'VIP' AND cs.teach_mode_='ONLINE') then 1 ELSE 0 END) vip_times_,
-        SUM(case when (pg.buy_months_ > 0) then 1 ELSE 0 END) buy_practice_times_
+        SUM(case when (pg.type_='FREE') then 1 ELSE 0 END) buy_practice_times_
         FROM course_schedule_student_payment cssp
         LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
         LEFT JOIN practice_group pg ON pg.`id_` = cs.`music_group_id_` AND cs.`group_type_` = 'PRACTICE'
@@ -204,7 +204,7 @@
         LEFT JOIN (
         SELECT student_id_, count(id_) free_practice_times_
         FROM practice_group
-        WHERE buy_months_ IS NULL
+        WHERE type_='FREE'
         GROUP BY student_id_
         ) p ON p.student_id_ = s.user_id_
         <include refid="student4OperatingQueryCondition"/>
@@ -229,7 +229,7 @@
         LEFT JOIN (
         SELECT student_id_, count(id_) free_practice_times_
         FROM practice_group
-        WHERE buy_months_ IS NULL
+        WHERE type_='FREE'
         GROUP BY student_id_
         ) p ON p.student_id_ = s.user_id_
         <include refid="student4OperatingQueryCondition"/>

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

@@ -374,9 +374,9 @@ public class ExportController extends BaseController {
         }
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"VIP编号", "课程名称", "课程状态", "指导老师", "指导老师", "班级人数", "先上课单价", "线下课单价",
-                    "活动方案", "当前课次", "总课次", "剩余课次", "月消耗", "开课时间", "结束时间", "申请时间", "学生姓名"}, new String[]{
+                    "活动方案", "当前课次", "总课次", "剩余课次", "月消耗", "上次课时间", "开课时间", "结束时间", "申请时间", "学生姓名"}, new String[]{
                     "id", "name", "status.msg", "userName", "educationalTeacherName", "studentNum", "onlineClassesUnitPrice",
-                    "offlineClassesUnitPrice", "vipGroupActivityName", "currentClassTimes", "totalClassTimes", "subClassTimes", "monthConsumeRate",
+                    "offlineClassesUnitPrice", "vipGroupActivityName", "currentClassTimes", "totalClassTimes", "subClassTimes", "monthConsumeRate", "lastOverTime",
                     "courseStartDate", "coursesExpireDate", "registrationStartTime", "userInfo"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
@@ -1115,8 +1115,8 @@ public class ExportController extends BaseController {
         OutputStream ouputStream = null;
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(
-                    new String[]{"布置时间", "截至时间", "训练标题", "老师名字", "分部", "学生姓名", "提交作业", "是否回复", "是否查看"},
-                    new String[]{"createTime", "expireDate", "title", "teacherName", "organName", "user.username", "statusStr", "isRepliedStr", "isViewStr"}, rows);
+                    new String[]{"布置时间", "截至时间", "训练标题", "老师名字", "分部", "学生编号", "学生姓名", "提交作业", "提交作业时间", "是否回复", "是否查看"},
+                    new String[]{"createTime", "expireDate", "title", "teacherName", "organName", "user.username","userId", "statusStr","submitTime", "isRepliedStr", "isViewStr"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             ouputStream = response.getOutputStream();