فهرست منبع

vip课相关接口

Joburgess 5 سال پیش
والد
کامیت
8b0f6ec2ad
17فایلهای تغییر یافته به همراه804 افزوده شده و 12 حذف شده
  1. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 54 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java
  3. 46 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassDateAdjustDto.java
  4. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVipGroupDetailDto.java
  5. 123 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVipGroupShowListDto.java
  6. 47 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupManageDetailDto.java
  7. 65 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/VipGroupAttendanceQueryInfo.java
  8. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  9. 33 0
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  10. 51 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  11. 62 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  12. 1 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  13. 41 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  14. 136 0
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  15. 41 0
      mec-common/common-core/src/main/java/com/ym/mec/common/utils/DateUtils.java
  16. 37 0
      mec-student/src/main/java/com/ym/mec/student/controller/StudentVipGroupController.java
  17. 14 4
      mec-web/src/main/java/com/ym/mec/web/controller/system/VipGroupManageController.java

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

@@ -49,4 +49,26 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      */
     List<Date> getCourseScheduleDateByMonth(@Param("musicGroupID") Long musicGroupID,
                                             @Param("month") Date month);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/23
+     * 根据班级id获取已添加最大课次
+     */
+    String[] getMaxClassTimeByClassIds(List<Long> ids);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/23
+     * 统计教师在一天内有时间重复的课数
+     */
+    int countTeacherCourseInOnDayRepeats(CourseSchedule courseSchedule);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/24
+     * 根据日期获取对应老师的课程
+     */
+    List<CourseSchedule> findTeacherCoursesInDates(@Param("dates") List<Date> dates,
+                                                   @Param("teacherId") Long teacherId);
 }

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

@@ -1,10 +1,15 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.dto.StudentManageVipGroupDto;
+import com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto;
+import com.ym.mec.biz.dal.dto.StudentVipGroupShowListDto;
+import com.ym.mec.biz.dal.dto.VipGroupManageDetailDto;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.VipGroup;
 import com.ym.mec.common.dal.BaseDAO;
 
 import java.util.List;
+import java.util.Map;
 
 public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 
@@ -15,4 +20,53 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
      */
 	List<StudentManageVipGroupDto> findStudentVipGroups(Long userID);
 
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/9/23
+	 * 学生端获取vip课列表
+	 */
+	List<StudentVipGroupShowListDto> findVipGroups(Map<String,Object> params);
+
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/9/23
+	 * 统计vip数
+	 */
+	int countVipGorups(Map<String,Object> params);
+
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/9/23
+	 * 获取小课详情
+	 */
+	VipGroupManageDetailDto getVipGroupBaseInfo(Long vipGroupId);
+
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/9/23
+	 * 获取小课当前课时
+	 */
+	int getVipGroupCurrentClassTime(Long vipGroupId);
+
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/9/23
+	 * 获取小课考勤记录
+	 */
+    List<CourseSchedule> findVipGroupAttendances(Map<String,Object> params);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/23
+     * 统计小课考勤记录数
+     */
+    int countVipGroupAttendance(Map<String,Object> params);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/23
+     * 获取vip课详情
+     */
+    StudentVipGroupDetailDto getVipGroupDetail(Long vipGroupId);
+
 }

+ 46 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassDateAdjustDto.java

@@ -0,0 +1,46 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/23
+ */
+public class ClassDateAdjustDto extends CourseSchedule {
+
+    @ApiModelProperty(value = "课时调整有效时段开始时间",required = false)
+    private Date adjustStartTime;
+
+    @ApiModelProperty(value = "课时调整有效时段结束时间",required = false)
+    private Date adjustEndTime;
+
+    @ApiModelProperty(value = "星期几",required = false)
+    private Integer weekNum;
+
+    public Integer getWeekNum() {
+        return weekNum;
+    }
+
+    public void setWeekNum(Integer weekNum) {
+        this.weekNum = weekNum;
+    }
+
+    public Date getAdjustStartTime() {
+        return adjustStartTime;
+    }
+
+    public void setAdjustStartTime(Date adjustStartTime) {
+        this.adjustStartTime = adjustStartTime;
+    }
+
+    public Date getAdjustEndTime() {
+        return adjustEndTime;
+    }
+
+    public void setAdjustEndTime(Date adjustEndTime) {
+        this.adjustEndTime = adjustEndTime;
+    }
+}

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVipGroupDetailDto.java

@@ -0,0 +1,23 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/23
+ */
+public class StudentVipGroupDetailDto extends StudentVipGroupShowListDto {
+
+    @ApiModelProperty(value = "课程列表",required = false)
+    private CourseSchedule courseSchedules;
+
+    public CourseSchedule getCourseSchedules() {
+        return courseSchedules;
+    }
+
+    public void setCourseSchedules(CourseSchedule courseSchedules) {
+        this.courseSchedules = courseSchedules;
+    }
+}

+ 123 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVipGroupShowListDto.java

@@ -0,0 +1,123 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/23
+ */
+public class StudentVipGroupShowListDto {
+
+    @ApiModelProperty(value = "vip课ID",required = false)
+    private Long vipGroupId;
+
+    @ApiModelProperty(value = "vip课名称",required = false)
+    private String vipGroupName;
+
+    @ApiModelProperty(value = "单节课时", required = false)
+    private Integer singleClassMinutes;
+
+    @ApiModelProperty(value = "缴费截止时间", required = false)
+    private java.util.Date paymentExpireDate;
+
+    @ApiModelProperty(value = "线上课课时数", required = false)
+    private Integer onlineClassesNum;
+
+    @ApiModelProperty(value = "线下课课时数", required = false)
+    private Integer offlineClassesNum;
+
+    @ApiModelProperty(value = "学生购买价格",required = false)
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "预计招生人数",hidden = true)
+    private Integer expectStudentNum;
+
+    @ApiModelProperty(value = "学生数量", required = false)
+    private Integer studentNum;
+
+    @ApiModelProperty(value = "教师名称",required = false)
+    private String teacherName;
+
+    public Long getVipGroupId() {
+        return vipGroupId;
+    }
+
+    public void setVipGroupId(Long vipGroupId) {
+        this.vipGroupId = vipGroupId;
+    }
+
+    public String getVipGroupName() {
+        return vipGroupName;
+    }
+
+    public void setVipGroupName(String vipGroupName) {
+        this.vipGroupName = vipGroupName;
+    }
+
+    public Integer getSingleClassMinutes() {
+        return singleClassMinutes;
+    }
+
+    public void setSingleClassMinutes(Integer singleClassMinutes) {
+        this.singleClassMinutes = singleClassMinutes;
+    }
+
+    public Date getPaymentExpireDate() {
+        return paymentExpireDate;
+    }
+
+    public void setPaymentExpireDate(Date paymentExpireDate) {
+        this.paymentExpireDate = paymentExpireDate;
+    }
+
+    public Integer getOnlineClassesNum() {
+        return onlineClassesNum;
+    }
+
+    public void setOnlineClassesNum(Integer onlineClassesNum) {
+        this.onlineClassesNum = onlineClassesNum;
+    }
+
+    public Integer getOfflineClassesNum() {
+        return offlineClassesNum;
+    }
+
+    public void setOfflineClassesNum(Integer offlineClassesNum) {
+        this.offlineClassesNum = offlineClassesNum;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public Integer getExpectStudentNum() {
+        return expectStudentNum;
+    }
+
+    public void setExpectStudentNum(Integer expectStudentNum) {
+        this.expectStudentNum = expectStudentNum;
+    }
+
+    public Integer getStudentNum() {
+        return studentNum;
+    }
+
+    public void setStudentNum(Integer studentNum) {
+        this.studentNum = studentNum;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+}

+ 47 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupManageDetailDto.java

@@ -0,0 +1,47 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.VipGroup;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/23
+ */
+public class VipGroupManageDetailDto extends VipGroup {
+
+    @ApiModelProperty(value = "最新课次",required = false)
+    private Integer latestClassTime;
+
+    @ApiModelProperty(value = "学生数量", required = false)
+    private Integer studentNum;
+
+    @ApiModelProperty(value = "小课学院",required = false)
+    private List<SysUser> students;
+
+    public Integer getLatestClassTime() {
+        return latestClassTime;
+    }
+
+    public void setLatestClassTime(Integer latestClassTime) {
+        this.latestClassTime = latestClassTime;
+    }
+
+    public Integer getStudentNum() {
+        return studentNum;
+    }
+
+    public void setStudentNum(Integer studentNum) {
+        this.studentNum = studentNum;
+    }
+
+    public List<SysUser> getStudents() {
+        return students;
+    }
+
+    public void setStudents(List<SysUser> students) {
+        this.students = students;
+    }
+}

+ 65 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/VipGroupAttendanceQueryInfo.java

@@ -0,0 +1,65 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/23
+ */
+public class VipGroupAttendanceQueryInfo extends QueryInfo {
+
+    private Long vipGroupId;
+
+    private Date startTime;
+
+    private Date endTime;
+
+    @ApiModelProperty(value = "课程状态  NOT_START未开始,SIGN_IN已签到,SIGN_OUT已签退",required = false)
+    private CourseStatusEnum status;
+
+    private boolean complaintStatus;
+
+    public Long getVipGroupId() {
+        return vipGroupId;
+    }
+
+    public void setVipGroupId(Long vipGroupId) {
+        this.vipGroupId = vipGroupId;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public CourseStatusEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(CourseStatusEnum status) {
+        this.status = status;
+    }
+
+    public boolean isComplaintStatus() {
+        return complaintStatus;
+    }
+
+    public void setComplaintStatus(boolean complaintStatus) {
+        this.complaintStatus = complaintStatus;
+    }
+}

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.ClassDateAdjustDto;
 import com.ym.mec.biz.dal.dto.CourseScheduleDto;
 import com.ym.mec.biz.dal.dto.TeacherAttendanceDto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
@@ -44,4 +45,11 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
      * 根据月份获取乐团在该月有课的日期
      */
     List<Date> getCourseScheduleDateByMonth(Long musicGroupID, Date month);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/23
+     * 课时调整
+     */
+    int classStartDateAdjust(ClassDateAdjustDto classDateAdjustDto);
 }

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

@@ -1,7 +1,12 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto;
 import com.ym.mec.biz.dal.dto.VipGroupApplyDto;
+import com.ym.mec.biz.dal.dto.VipGroupManageDetailDto;
 import com.ym.mec.biz.dal.entity.VipGroup;
+import com.ym.mec.biz.dal.page.VipGroupAttendanceQueryInfo;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
 public interface VipGroupService extends BaseService<Long, VipGroup> {
@@ -13,4 +18,32 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      */
     String createVipGroup(VipGroupApplyDto vipGroup);
 
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/23
+     * 获取可购买vip课列表
+     */
+    PageInfo findStudentVipGroupList(QueryInfo queryInfo);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/23
+     * 获取vip课详情
+     */
+    VipGroupManageDetailDto getVipGroupDetail(Long vipGroupId);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/23
+     * 获取vip课考勤记录
+     */
+    PageInfo findVipGroupAttendances(VipGroupAttendanceQueryInfo queryInfo);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/23
+     * 学生端获取vip课详情
+     */
+    StudentVipGroupDetailDto getVipGroupShowDetail(Long vipGroupId);
+
 }

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

@@ -1,21 +1,23 @@
 package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.CourseScheduleDao;
+import com.ym.mec.biz.dal.dto.ClassDateAdjustDto;
 import com.ym.mec.biz.dal.dto.CourseScheduleDto;
 import com.ym.mec.biz.dal.dto.TeacherAttendanceDto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.enums.ParamEnum;
 import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 
+import com.ym.mec.common.utils.DateUtils;
+import io.swagger.models.auth.In;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -85,7 +87,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				continue;
 			}else{
 				for(Date keyDate2:collect1.keySet()){
-					List<CourseSchedule> currentCourses1=collect.get(keyDate2);
+					List<CourseSchedule> currentCourses1=collect1.get(keyDate2);
 					if(currentCourses1.size()>ParamEnum.ONE.getCode()){
 						Map<Long, List<CourseSchedule>> collect2 = currentCourses1.stream().collect(
 								Collectors.groupingBy(CourseSchedule::getTeacherId));
@@ -105,6 +107,51 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				}
 			}
 		}
+		Map<Integer, List<CourseSchedule>> classGroupByID = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getClassGroupId));
+		List<Long> ids=new ArrayList<>();
+		for (Integer key:classGroupByID.keySet()){
+			ids.add(Long.valueOf(key));
+		}
+		Map<Integer, Integer> maxClassTimes = convertToMap(courseScheduleDao.getMaxClassTimeByClassIds(ids));
+		courseSchedules.clear();
+		for (Integer key:classGroupByID.keySet()){
+			Integer maxClassTime = null == maxClassTimes.get(key) ? 0 : maxClassTimes.get(key);
+			for(CourseSchedule courseSchedule:classGroupByID.get(key)){
+				courseSchedule.setCurrentClassTimes(++maxClassTime);
+				courseSchedules.add(courseSchedule);
+			}
+		}
 		return "";
 	}
+
+	private Map<Integer,Integer> convertToMap(String[] result){
+		Map<Integer,Integer> map=new HashMap<>();
+		for(String s:result){
+			map.put(Integer.valueOf(s.split(",")[0]),Integer.valueOf(s.split(",")[1]));
+		}
+		return map;
+	}
+
+	@Override
+	public int classStartDateAdjust(ClassDateAdjustDto classDateAdjustDto) {
+		//单次调整课时
+		if(null==classDateAdjustDto.getAdjustStartTime()&&null==classDateAdjustDto.getAdjustEndTime()){
+			if(courseScheduleDao.countTeacherCourseInOnDayRepeats(classDateAdjustDto)<=0){
+				courseScheduleDao.update(classDateAdjustDto);
+			}else{
+				//存在时间重叠,需要前端重新调整
+				throw new BizException("所选教师在当天课程安排上存在重叠!");
+			}
+		}else{
+			//根据时间段调整课时
+			List<Date> dates= DateUtils.getWeekDays(classDateAdjustDto.getAdjustStartTime(),classDateAdjustDto.getAdjustEndTime(),classDateAdjustDto.getWeekNum());
+			List<CourseSchedule> teacherCoursesInDates = courseScheduleDao.findTeacherCoursesInDates(dates, classDateAdjustDto.getTeacherId());
+			teacherCoursesInDates.forEach(courseSchedule -> {
+//				if(courseSchedule.getStartClassTime()>classDateAdjustDto.getEndClassTime()
+//						||)
+			});
+		}
+		return 0;
+	}
+
 }

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

@@ -1,21 +1,29 @@
 package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.VipGroupApplyBaseInfoDto;
-import com.ym.mec.biz.dal.dto.VipGroupApplyDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.enums.TeachTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.page.VipGroupAttendanceQueryInfo;
 import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.VipGroupService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 
+import com.ym.mec.util.collection.MapUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 @Service
 public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> implements VipGroupService {
 	
@@ -60,4 +68,56 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		});
 		return courseScheduleService.batchAddCourseSchedule(vipGroup.getCourseSchedules());
 	}
+
+	@Override
+	public PageInfo findStudentVipGroupList(QueryInfo queryInfo) {
+		PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List dataList = null;
+		int count = vipGroupDao.countVipGorups(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = vipGroupDao.findVipGroups(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
+	public VipGroupManageDetailDto getVipGroupDetail(Long vipGroupId) {
+		VipGroupManageDetailDto vipGroupBaseInfo = vipGroupDao.getVipGroupBaseInfo(vipGroupId);
+		vipGroupBaseInfo.setLatestClassTime(vipGroupDao.getVipGroupCurrentClassTime(vipGroupId));
+		return vipGroupBaseInfo;
+	}
+
+	@Override
+	public PageInfo findVipGroupAttendances(VipGroupAttendanceQueryInfo queryInfo) {
+		PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List dataList = null;
+		int count = vipGroupDao.countVipGroupAttendance(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = vipGroupDao.findVipGroupAttendances(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
+	public StudentVipGroupDetailDto getVipGroupShowDetail(Long vipGroupId) {
+		return vipGroupDao.getVipGroupDetail(vipGroupId);
+	}
 }

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

@@ -216,7 +216,7 @@
     </resultMap>
     <select id="getTeacherVipClass" resultMap="getTeacherVipClassMap">
         SELECT vg.id_ vip_group_id_,vg.name_ vip_group_name_,vg.audit_status_,cs.status_,
-        cg.student_num_,vg.price_,vg.payment_expire_date_,vg.courses_expire_date_,vg.create_time_
+        cg.student_num_,vg.price_,vg.payment_expire_date_,vg.courses_expire_date_,vg.create_time_,
         cs.current_class_times_,cg.total_class_times_
         FROM vip_group vg
         LEFT JOIN sys_user su ON vg.user_id_ = su.id_

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

@@ -56,7 +56,7 @@
         (id_,class_group_id_,status_,subsidy_,class_date_,start_class_time_,end_class_time_,teacher_id_,actual_teacher_id_,create_time_,update_time_,current_class_times_)
         VALUE
         <foreach collection="list" item="course" separator=",">
-            (#{course.id},#{course.classGroupId},#{course.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.subsidy},#{course.classDate},#{course.startClassTime},#{course.endClassTime},#{course.teacherId},#{course.actualTeacherId},now(),now(),#{currentClassTimes})
+            (#{course.id},#{course.classGroupId},#{course.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.subsidy},#{course.classDate},#{course.startClassTime},#{course.endClassTime},#{course.teacherId},#{course.actualTeacherId},now(),now(),#{course.currentClassTimes})
         </foreach>
     </insert>
 
@@ -224,4 +224,44 @@
         AND cg.music_group_id_=#{musicGroupID}
         GROUP BY cs.class_date_
     </select>
+
+    <select id="getMaxClassTimeByClassIds" resultType="string">
+        SELECT
+        concat(class_group_id_,",",IF(MAX( current_class_times_ ) IS NULL,0,MAX( current_class_times_ )))
+        FROM
+            course_schedule
+        WHERE
+            class_group_id_ IN
+            <foreach collection="list" item="id" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+        GROUP BY
+            class_group_id_
+    </select>
+
+    <select id="countTeacherCourseInOnDayRepeats" parameterType="com.ym.mec.biz.dal.entity.CourseSchedule" resultType="int">
+        SELECT
+        COUNT( * )
+        FROM
+        course_schedule cs
+        WHERE
+        cs.teacher_id_ = #{teacherId}
+        AND cs.class_date_ = DATE_FORMAT( #{classDate}, '%Y-%m-%d' )
+        AND (
+        CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) &lt; DATE_FORMAT( 'endClassTime', '%Y-%m-%d %H:%i:%s' )
+        OR CONCAT( cs.class_date_, ' ', cs.end_class_time_ ) &gt; DATE_FORMAT( 'startClassTime', '%Y-%m-%d %H:%i:%s' )
+        )
+    </select>
+    <select id="findTeacherCoursesInDates" resultMap="CourseSchedule">
+        SELECT
+            *
+        FROM
+            course_schedule cs
+        WHERE
+            cs.teacher_id_ = #{teacherId}
+            AND cs.class_date_ IN
+            <foreach collection="dates" item="date" open="(" close=")" separator=",">
+                #{date}
+            </foreach>
+    </select>
 </mapper>

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

@@ -26,6 +26,31 @@
         <result property="vipGroupCategory" column="vip_group_category_"/>
     </resultMap>
 
+    <resultMap id="vipGroupManageDetailDto" type="com.ym.mec.biz.dal.dto.VipGroupManageDetailDto" extends="VipGroup">
+        <result property="studentNum" column="student_num_"/>
+        <collection property="students" ofType="com.ym.mec.auth.api.entity.SysUser" column="user_id_">
+            <result property="id" column="user_id_"/>
+            <result property="username" column="username_"/>
+        </collection>
+    </resultMap>
+
+    <resultMap id="studentVipGroupDetailDto" type="com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto" extends="studentVipGroup">
+        <collection property="students" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule" column="user_id_"/>
+    </resultMap>
+
+    <resultMap type="com.ym.mec.biz.dal.dto.StudentVipGroupShowListDto" id="studentVipGroup">
+        <result column="vip_group_id_" property="vipGroupId"/>
+        <result column="vip_group_name_" property="vipGroupName"/>
+        <result column="single_class_minutes_" property="singleClassMinutes"/>
+        <result column="payment_expire_date_" property="paymentExpireDate"/>
+        <result column="online_classes_num_" property="onlineClassesNum"/>
+        <result column="offline_classes_num_" property="offlineClassesNum"/>
+        <result column="price_" property="price"/>
+        <result column="expect_student_num_" property="expectStudentNum"/>
+        <result column="student_num_" property="studentNum"/>
+        <result column="teacher_name_" property="teacherName"/>
+    </resultMap>
+
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="VipGroup">
 		SELECT * FROM vip_group WHERE id_ = #{id} 
@@ -117,4 +142,115 @@
     <select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM vip_group
 	</select>
+
+
+
+    <select id="findVipGroups" resultMap="studentVipGroup">
+       SELECT
+            vg.id_ vip_group_id_,
+            vg.name_ vip_group_name_,
+            vg.single_class_minutes_,
+            vg.payment_expire_date_,
+            vg.courses_expire_date_,
+            vg.online_classes_num_,
+            vg.offline_classes_num_,
+            cg.expect_student_num_,
+            cg.student_num_,
+            su.username_ teacher_name_
+        FROM
+            vip_group vg
+            LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
+            LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
+            LEFT JOIN class_group_teacher_mapper cgtm ON vgcgm.class_group_id_=cgtm.class_group_id_
+            LEFT JOIN sys_user su ON cgtm.user_id_=su.id_
+        ORDER BY vg.id_ DESC
+        <include refid="global.limit"/>
+    </select>
+    <select id="countVipGorups" resultType="int">
+        SELECT
+            count(*)
+        FROM
+            vip_group vg
+    </select>
+    <select id="getVipGroupBaseInfo">
+        SELECT
+            vg.*,
+            cg.student_num_,
+            su.*
+        FROM
+            vip_group vg
+            LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
+            LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
+            LEFT JOIN class_group_student_mapper cgsm ON vgcgm.class_group_id_=cgsm.class_group_id_
+            LEFT JOIN sys_user su ON cgsm.user_id_=su.id_
+        WHERE vg.id_=1
+        ORDER BY vg.id_ DESC
+    </select>
+    <select id="getVipGroupCurrentClassTime">
+        SELECT
+        if(MAX(cs.current_class_times_) IS NULL,0,MAX(cs.current_class_times_))
+        FROM
+        vip_group vg
+        LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
+        LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
+        WHERE vg.id_=1 AND CONCAT(cs.class_date_,' ',cs.end_class_time_)&lt;now()
+        GROUP BY cs.id_
+    </select>
+
+    <sql id="vipGroupAttendanceQueryCondition">
+        <where>
+            <if test="vipGroupId!=null">
+                and vg.id_=#{vipGroupId}
+            </if>
+            <if test="startTime != null">
+                and CONCAT(cs.class_date_,' ',cs.end_class_time_) &gt; #{startTime}
+            </if>
+            <if test="endTime != null">
+                and CONCAT(cs.class_date_,' ',cs.end_class_time_) &lt; #{endTime}
+            </if>
+            <if test="status != null">
+                and cs.status_ = #{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
+            <if test="complaintStatus != null">
+                and cs.complaint_status_ = #{complaintStatus}
+            </if>
+        </where>
+    </sql>
+    <select id="findVipGroupAttendances" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule">
+        SELECT
+            cs.*
+        FROM
+            vip_group vg
+            LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
+            LEFT JOIN teacher_attendance ta ON vgcgm.class_group_id_=ta.class_group_id_
+            LEFT JOIN course_schedule cs ON ta.course_schedule_id_=cs.id_
+        <include refid="vipGroupAttendanceQueryCondition"/>
+        ORDER BY ta.id_
+        <include refid="global.limit"/>
+    </select>
+    <select id="countVipGroupAttendance" resultType="int">
+        SELECT
+        count(*)
+        FROM
+        vip_group vg
+        LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
+        LEFT JOIN teacher_attendance ta ON vgcgm.class_group_id_=ta.class_group_id_
+        LEFT JOIN course_schedule cs ON ta.course_schedule_id_=cs.id_
+        <include refid="vipGroupAttendanceQueryCondition"/>
+        ORDER BY ta.id_
+    </select>
+
+    <select id="getVipGroupDetail" resultMap="studentVipGroupDetailDto">
+        SELECT
+            vg.*,
+            su.username_ teacher_name_,
+            cs.*
+        FROM
+            vip_group vg
+            LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
+            LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
+            LEFT JOIN class_group_teacher_mapper cgtm ON vgcgm.class_group_id_=cgtm.class_group_id_
+          LEFT JOIN sys_user su ON cgtm.user_id_=su.id_
+        WHERE vg.id_=#{vipGroupId}
+    </select>
 </mapper>

+ 41 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/utils/DateUtils.java

@@ -0,0 +1,41 @@
+package com.ym.mec.common.utils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/23
+ */
+public class DateUtils {
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/23
+     * 获取时间段内对应星期数的集合
+     */
+    public static List<Date> getWeekDays(Date startTime, Date endTime, int weekNum){
+        Calendar calendar = Calendar.getInstance();
+        List<Date> dates=new ArrayList<>();
+        for(Date x = startTime; x.compareTo(endTime) <= 0;){
+            calendar.setTime(x);
+            calendar.add(Calendar.DATE, 1);
+            x = calendar.getTime();
+            if(calendar.get(Calendar.DAY_OF_WEEK) == weekNum){
+                dates.add(x);
+            }
+        }
+        return dates;
+    }
+
+    public static void main(String[] args) throws ParseException {
+        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
+        List<Date> mondayCount = getWeekDays(simpleDateFormat.parse("2019-9-23"), simpleDateFormat.parse("2019-10-23"), Calendar.SUNDAY);
+        System.out.println(mondayCount.size());
+    }
+
+}

+ 37 - 0
mec-student/src/main/java/com/ym/mec/student/controller/StudentVipGroupController.java

@@ -0,0 +1,37 @@
+package com.ym.mec.student.controller;
+
+import com.ym.mec.biz.dal.dto.VipGroupApplyDto;
+import com.ym.mec.biz.service.VipGroupService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/23
+ */
+
+@Api(tags = "vip课-学生端")
+@RequestMapping("studentVipGroup")
+@RestController
+public class StudentVipGroupController extends BaseController {
+
+    @Autowired
+    private VipGroupService vipGroupService;
+
+    @ApiOperation("获取vip课列表")
+    @PostMapping("/queryVipGroups")
+    public Object queryVipGroups(@RequestBody QueryInfo queryInfo){
+        return succeed(vipGroupService.findStudentVipGroupList(queryInfo));
+    }
+
+    @ApiOperation("获取学生端vip课显示详情")
+    @PostMapping("/getVipGroupShowDetail/{vipGroupId}")
+    public Object getVipGroupShowDetail(@PathVariable("vipGroupId") Long vipGroupId){
+        return succeed(vipGroupService.getVipGroupShowDetail(vipGroupId));
+    }
+
+}

+ 14 - 4
mec-web/src/main/java/com/ym/mec/web/controller/system/VipGroupManageController.java

@@ -1,13 +1,11 @@
 package com.ym.mec.web.controller.system;
 
+import com.ym.mec.biz.dal.page.VipGroupAttendanceQueryInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import com.ym.mec.biz.dal.dto.VipGroupApplyDto;
 import com.ym.mec.biz.service.VipGroupService;
@@ -35,4 +33,16 @@ public class VipGroupManageController extends BaseController {
             return failed(s);
         }
     }
+
+    @ApiOperation("vip课详情")
+    @GetMapping("/getVipGroupDetail/{vipGroupId}")
+    public Object getVipGroupDetail(@PathVariable("vipGroupId") Long vipGroupId){
+        return succeed(vipGroupService.getVipGroupDetail(vipGroupId));
+    }
+
+    @ApiOperation("获取vip课考勤记录")
+    @PostMapping("/getVipGroupAttendances")
+    public Object getVipGroupAttendances(@RequestBody VipGroupAttendanceQueryInfo queryInfo){
+        return succeed(vipGroupService.findVipGroupAttendances(queryInfo));
+    }
 }