Joburgess 5 years ago
parent
commit
66a8b4a60b
22 changed files with 250 additions and 67 deletions
  1. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java
  2. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java
  3. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentCourseHomeworkCommentDto.java
  4. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassGroupDto.java
  5. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherHomeworkListDto.java
  6. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomework.java
  7. 23 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java
  8. 4 2
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseHomeworkService.java
  9. 6 5
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  10. 35 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  11. 22 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseHomeworkServiceImpl.java
  12. 15 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  13. 23 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  14. 2 2
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  15. 1 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  16. 15 3
      mec-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml
  17. 1 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  18. 5 9
      mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  19. 3 1
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  20. 2 0
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkReplyMapper.xml
  21. 23 5
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  22. 5 4
      mec-web/src/main/java/com/ym/mec/web/controller/VipGroupManageController.java

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.dto.StudentStatusCountUtilEntity;
 import com.ym.mec.biz.dal.entity.StudentAttendance;
 import com.ym.mec.common.dal.BaseDAO;
 
+import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
@@ -21,6 +22,16 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
     int addStudentAttendances(List<StudentAttendance> studentAttendances);
 
     /**
+     * @describe 根据课程删除对应的点名记录
+     * @author Joburgess
+     * @date 2019/10/21
+     * @param courseScheduleId:
+     * @return int
+     */
+    @Delete("delete from student_attendance where course_schedule_id_=#{courseScheduleId}")
+    int deleteStudentAttendancesByCourse(Long courseScheduleId);
+
+    /**
      * 统计学生各种状态人数
      * @param classId
      * @return

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

@@ -160,6 +160,15 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
     List<Map<String,Integer>> countSurplusClassTimes(Long vipGroupId);
 
     /**
+     * @describe 统计vip课已上课程数量
+     * @author Joburgess
+     * @date 2019/10/21
+     * @param vipGroupIds: vip课编号列表
+     * @return java.util.List<java.util.Map<java.lang.Long,java.lang.Integer>>
+     */
+    List<Map<Long,Integer>> countVipGroupOverCourse(List<Long> vipGroupIds);
+
+    /**
      * @Author: Joburgess
      * @Date: 2019/10/12
      * @params [vipGroupId]

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

@@ -24,6 +24,9 @@ public class StudentCourseHomeworkCommentDto {
     @ApiModelProperty(value = "头像")
     private String avatar;
 
+    @ApiModelProperty(value = "是否是教师")
+    private Integer isTeacher;
+
     /** 留言内容 */
     @ApiModelProperty(value = "留言内容",required = true)
     private String content;
@@ -34,6 +37,14 @@ public class StudentCourseHomeworkCommentDto {
     @ApiModelProperty(value = "回复",required = false)
     private List<StudentCourseHomeworkCommentDto> replys;
 
+    public Integer getIsTeacher() {
+        return isTeacher;
+    }
+
+    public void setIsTeacher(Integer isTeacher) {
+        this.isTeacher = isTeacher;
+    }
+
     public String getAvatar() {
         return avatar;
     }

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

@@ -74,6 +74,17 @@ public class TeacherClassGroupDto {
     @ApiModelProperty(value = "教学形式")
     private Integer classMode;
 
+    @ApiModelProperty(value = "每月平均课时")
+    private double avgClassTimesOfMonth;
+
+    public double getAvgClassTimesOfMonth() {
+        return avgClassTimesOfMonth;
+    }
+
+    public void setAvgClassTimesOfMonth(double avgClassTimesOfMonth) {
+        this.avgClassTimesOfMonth = avgClassTimesOfMonth;
+    }
+
     public Integer getClassMode() {
         return classMode;
     }

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

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dto;
 
 import io.swagger.annotations.ApiModelProperty;
+import org.codehaus.jackson.annotate.JsonIgnore;
 
 import java.util.Date;
 
@@ -19,6 +20,9 @@ public class TeacherHomeworkListDto {
     @ApiModelProperty(value = "创建时间")
     private Date createTime;
 
+    @JsonIgnore
+    private String day;
+
     @ApiModelProperty(value = "预计完成人数")
     private Integer expectNum;
 
@@ -40,6 +44,14 @@ public class TeacherHomeworkListDto {
     @ApiModelProperty(value = "乐团名称")
     private String musicGroupName;
 
+    public String getDay() {
+        return day;
+    }
+
+    public void setDay(String day) {
+        this.day = day;
+    }
+
     public Integer getCourseScheduleId() {
         return courseScheduleId;
     }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomework.java

@@ -19,6 +19,9 @@ public class StudentCourseHomework {
 
 	@ApiModelProperty(value = "用户名")
 	private String userName;
+
+	@ApiModelProperty(value = "头像")
+	private String avatar;
 	
 	/**  */
 	private Long courseHomeworkId;
@@ -35,6 +38,14 @@ public class StudentCourseHomework {
 	/**  */
 	private java.util.Date updateTime;
 
+	public String getAvatar() {
+		return avatar;
+	}
+
+	public void setAvatar(String avatar) {
+		this.avatar = avatar;
+	}
+
 	@ApiModelProperty(value = "备注",required = false)
 	private String remark;
 

+ 23 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java

@@ -100,7 +100,29 @@ public class VipGroup {
 	private TeachModeEnum giveTeachMode;
 	
 	private Integer organId;
-	
+
+	@ApiModelProperty(value = "取消原因")
+	private String stopReason;
+
+	@ApiModelProperty(value = "月度消耗百分数")
+	private Double monthConsumeRate;
+
+	public Double getMonthConsumeRate() {
+		return monthConsumeRate;
+	}
+
+	public void setMonthConsumeRate(Double monthConsumeRate) {
+		this.monthConsumeRate = monthConsumeRate;
+	}
+
+	public String getStopReason() {
+		return stopReason;
+	}
+
+	public void setStopReason(String stopReason) {
+		this.stopReason = stopReason;
+	}
+
 	public String getVipGroupActivityName() {
 		return vipGroupActivityName;
 	}

+ 4 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/CourseHomeworkService.java

@@ -2,9 +2,11 @@ package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.entity.CourseHomework;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
-import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.List;
+import java.util.Map;
+
 public interface CourseHomeworkService extends BaseService<Long, CourseHomework> {
 
     /**
@@ -14,6 +16,6 @@ public interface CourseHomeworkService extends BaseService<Long, CourseHomework>
      * @param queryInfo:
      * @return com.ym.mec.common.page.PageInfo
      */
-    PageInfo findTeacherCourseHomeworkByClassGroup(CourseHomeworkQueryInfo queryInfo);
+    List<Map<String,Object>> findTeacherCourseHomeworkByClassGroup(CourseHomeworkQueryInfo queryInfo);
 
 }

+ 6 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java

@@ -178,13 +178,14 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
     List<String> findVipGroupAttendanceStudents(Long courseScheduleId);
 
     /**
-     * @Author: Joburgess
-     * @Date: 2019/10/12
-     * @params [vipGroupId]
-     * @return void
      * @describe 停止vip课
+     * @author Joburgess
+     * @date 2019/10/21
+     * @param vipGroupId: vip课编号
+     * @param stopReason: 取消原因
+     * @return void
      */
-    void stopGroup(Long vipGroupId);
+    void stopGroup(Long vipGroupId,String stopReason);
 
     /**
      * 发放月度奖励

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

@@ -296,17 +296,25 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             List<Map<Integer,String>> names = vipGroupActivityDao.queryNamesById(StringUtils.join(activityIds,","));
             Map<Integer,String> nameMap = MapUtil.convertMybatisMap(names);
             //计算月度平均消耗值(已上课时 / 消耗月份)
-            Date date = new Date();
-            dataList.forEach(e->{
-                e.setActivityName(nameMap.get(e.getActivityId()));
-                int days = DateUtil.daysBetween(e.getPaymentExpireDate(), date);
-                if(days <= 0){
-                    e.setMonthAvg(0f);
-                }else {
-                    e.setMonthAvg(e.getCurrentClassTimes()/(days/30));
+            List<Long> vipGroupIds = dataList.stream().map(vipGroup -> vipGroup.getVipClassId()).collect(Collectors.toList());
+            List<Map<Long, Integer>> vipGroupOverCourses = vipGroupDao.countVipGroupOverCourse(vipGroupIds);
+            Map<Long,Integer> vipGroupOverCourseMaps = MapUtil.convertMybatisMap(vipGroupOverCourses);
+            dataList.forEach(vipGroup -> {
+                Integer overCourses = vipGroupOverCourseMaps.get(vipGroup.getVipClassId());
+                if(Objects.isNull(overCourses)){
+                    overCourses=0;
                 }
-            });
+                Integer totalClassTimes=vipGroup.getTotalClassTimes();
+                if(Objects.isNull(totalClassTimes)){
+                    vipGroup.setMonthAvg(Float.parseFloat("0.0"));
+                }else{
+                    BigDecimal overCoursesOfMonth=new BigDecimal(overCourses),allClassTimes=new BigDecimal(totalClassTimes);
 
+                    Float monthConsumeRate=overCoursesOfMonth.divide(overCoursesOfMonth,2,BigDecimal.ROUND_HALF_UP).floatValue();
+                    vipGroup.setMonthAvg(monthConsumeRate);
+                }
+
+            });
         }
         if (count == 0) {
             dataList = new ArrayList<>();
@@ -562,6 +570,9 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         List<Map<Long, Integer>> musicGroupIdAndNumList = musicGroupStudentFeeDao.countContinuosAbsenteeismStudentNum(musicGroupIds);
         Map<Long, Integer> musicGroupIdAndNum = MapUtil.convertMybatisMap(musicGroupIdAndNumList);
 
+        List<Map<Long, Integer>> vipGroupOverCourses = vipGroupDao.countVipGroupOverCourse(musicGroupIds);
+        Map<Long,Integer> vipGroupOverCourseMaps = MapUtil.convertMybatisMap(vipGroupOverCourses);
+
         teacherMusicClassGroup.forEach(teacherClassGroupDto -> {
 
             if(teacherClassGroupDto.getType()==ClassGroupTypeEnum.VIP){
@@ -576,6 +587,21 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 }else{
                     teacherClassGroupDto.setClassMode(0);
                 }
+
+                Integer overCourses = vipGroupOverCourseMaps.get(teacherClassGroupDto.getMusicGroupId());
+                if(Objects.isNull(overCourses)){
+                    overCourses=0;
+                }
+                Integer totalClassTimes=teacherClassGroupDto.getTotalClassTimes();
+                if(Objects.isNull(totalClassTimes)||totalClassTimes==0){
+                    teacherClassGroupDto.setAvgClassTimesOfMonth(0.0);
+                }else{
+                    BigDecimal overCoursesOfMonth=new BigDecimal(overCourses),allClassTimes=new BigDecimal(totalClassTimes);
+
+                    Double monthConsumeRate=overCoursesOfMonth.divide(allClassTimes,1,BigDecimal.ROUND_HALF_UP).doubleValue();
+                    teacherClassGroupDto.setAvgClassTimesOfMonth(monthConsumeRate);
+                }
+
             }
             String subjectIdList=teacherClassGroupDto.getSubjectIdList();
             if(StringUtils.isNotEmpty(subjectIdList)){

+ 22 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseHomeworkServiceImpl.java

@@ -8,14 +8,16 @@ import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.service.CourseHomeworkService;
 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.page.PageInfo;
 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.util.CollectionUtils;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 @Service
@@ -34,29 +36,31 @@ public class CourseHomeworkServiceImpl extends BaseServiceImpl<Long, CourseHomew
 	}
 
 	@Override
-	public PageInfo findTeacherCourseHomeworkByClassGroup(CourseHomeworkQueryInfo queryInfo) {
-		if(Objects.isNull(queryInfo.getClassGroupId())){
-			throw new BizException("请指定班级");
-		}
-		PageInfo<TeacherHomeworkListDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+	public List<Map<String,Object>> findTeacherCourseHomeworkByClassGroup(CourseHomeworkQueryInfo queryInfo) {
 		Map<String, Object> params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
 		List<TeacherHomeworkListDto> dataList = null;
+		List<Map<String,Object>> result=new ArrayList<>();
 		int count = courseHomeworkDao.countByClassGroupAndTeacher(params);
 		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
 			dataList = courseHomeworkDao.findByClassGroupAndTeacher(params);
 			List<Integer> courseScheduleIds = dataList.stream().map(TeacherHomeworkListDto::getCourseScheduleId).collect(Collectors.toList());
-			Map<Integer, Integer> courseScheduleCurrentTimes = courseScheduleService.findCourseScheduleCurrentTimes(courseScheduleIds);
-			dataList.forEach(teacherHomeworkListDto -> {
-				teacherHomeworkListDto.setCurrentClassTimes(courseScheduleCurrentTimes.get(teacherHomeworkListDto.getCourseScheduleId()));
-			});
+			if(!CollectionUtils.isEmpty(courseScheduleIds)){
+				Map<Integer, Integer> courseScheduleCurrentTimes = courseScheduleService.findCourseScheduleCurrentTimes(courseScheduleIds);
+				dataList.forEach(teacherHomeworkListDto -> {
+					teacherHomeworkListDto.setCurrentClassTimes(courseScheduleCurrentTimes.get(teacherHomeworkListDto.getCourseScheduleId()));
+				});
+			}
 		}
-		if (count == 0) {
-			dataList = new ArrayList<>();
+		if (count != 0) {
+			Map<String, List<TeacherHomeworkListDto>> collect = dataList.stream().collect(Collectors.groupingBy(TeacherHomeworkListDto::getDay));
+			for(String key:collect.keySet()){
+				Map<String,Object> r=new HashMap<>();
+				r.put("day",key);
+				r.put("list",collect.get(key));
+				result.add(r);
+			}
 		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
+		return result;
 	}
 }

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

@@ -1,5 +1,7 @@
 package com.ym.mec.biz.service.impl;
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
 import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
@@ -42,6 +44,8 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 	
 	@Autowired
 	private ClassGroupStudentMapperDao classGroupStudentMapperDao;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
 
 	@Override
 	public BaseDAO<Long, StudentAttendance> getDAO() {
@@ -51,6 +55,10 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void addStudentAttendances(List<StudentAttendance> studentAttendances) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if(Objects.isNull(sysUser)){
+			throw new BizException("请登录");
+		}
 		if(CollectionUtils.isEmpty(studentAttendances)){
 			throw new BizException("无点名信息");
 		}
@@ -59,8 +67,10 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 		if(Objects.isNull(courseSchedule)){
 			throw new BizException("请指定课程");
 		}
+		studentAttendanceDao.deleteStudentAttendancesByCourse(courseScheduleId);
 		int classTimes=courseScheduleDao.countClassTimes(courseSchedule.getClassGroupId().longValue());
 		studentAttendances.forEach(studentAttendance -> {
+			studentAttendance.setTeacherId(sysUser.getId());
 			studentAttendance.setCurrentClassTimes(classTimes);
 			StudentAttendance studentAttendanceInfo = studentAttendanceDao.getStudentAttendanceInfo(studentAttendance);
 			if (studentAttendance.getStatus() != StudentAttendanceStatusEnum.DROP_OUT) {
@@ -68,7 +78,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 				if(StudentAttendanceStatusEnum.TRUANT.equals(studentAttendance.getStatus())
 						||StudentAttendanceStatusEnum.LEAVE.equals(studentAttendance.getStatus())){
 					StudentAttendance studentLatestAttendanceInfo = studentAttendanceDao.getStudentLatestAttendanceInfo(studentAttendanceInfo);
-					if(Objects.nonNull(studentAttendanceInfo)){
+					if(Objects.nonNull(studentLatestAttendanceInfo)){
 						if(StudentAttendanceStatusEnum.TRUANT.equals(studentLatestAttendanceInfo.getStatus())
 								||StudentAttendanceStatusEnum.LEAVE.equals(studentLatestAttendanceInfo.getStatus())){
 							studentFeeDao.updateStudentAbsenteeismTimes(studentAttendanceInfo.getUserId(),
@@ -93,10 +103,10 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 			}
 		});
 		Map<StudentAttendanceStatusEnum, List<StudentAttendance>> studentAttendanceGroupByStatus = studentAttendances.stream().collect(Collectors.groupingBy(StudentAttendance::getStatus));
-		Integer studentNum=studentAttendanceGroupByStatus.get(StudentAttendanceStatusEnum.NORMAL).size();
-		Integer leaveStudentNum=studentAttendanceGroupByStatus.get(StudentAttendanceStatusEnum.LEAVE).size();
-		courseSchedule.setStudentNum(studentNum==null?0:studentNum);
-		courseSchedule.setLeaveStudentNum(leaveStudentNum==null?0:leaveStudentNum);
+		Integer studentNum=studentAttendanceGroupByStatus.get(StudentAttendanceStatusEnum.NORMAL)==null?0:studentAttendanceGroupByStatus.get(StudentAttendanceStatusEnum.NORMAL).size();
+		Integer leaveStudentNum=studentAttendanceGroupByStatus.get(StudentAttendanceStatusEnum.LEAVE)==null?0:studentAttendanceGroupByStatus.get(StudentAttendanceStatusEnum.LEAVE).size();
+		courseSchedule.setStudentNum(studentNum);
+		courseSchedule.setLeaveStudentNum(leaveStudentNum);
 		courseScheduleDao.update(courseSchedule);
 	}
 

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

@@ -237,7 +237,24 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			params.put("offset", pageInfo.getOffset());
 			dataList = vipGroupDao.findAllByOrgan(params);
 			List<Long> vipGroupIds = dataList.stream().map(vipGroup -> vipGroup.getId()).collect(Collectors.toList());
+			List<Map<Long, Integer>> vipGroupOverCourses = vipGroupDao.countVipGroupOverCourse(vipGroupIds);
+			Map<Long,Integer> vipGroupOverCourseMaps = MapUtil.convertMybatisMap(vipGroupOverCourses);
+			dataList.forEach(vipGroup -> {
+				Integer overCourses = vipGroupOverCourseMaps.get(vipGroup.getId());
+				if(Objects.isNull(overCourses)){
+					overCourses=0;
+				}
+				Integer totalClassTimes=vipGroup.getTotalClassTimes();
+				if(Objects.isNull(totalClassTimes)){
+					vipGroup.setMonthConsumeRate(0.0);
+				}else{
+					BigDecimal overCoursesOfMonth=new BigDecimal(overCourses),allClassTimes=new BigDecimal(totalClassTimes);
+
+					Double monthConsumeRate=overCoursesOfMonth.divide(allClassTimes,2,BigDecimal.ROUND_HALF_UP).doubleValue();
+					vipGroup.setMonthConsumeRate(monthConsumeRate);
+				}
 
+			});
 		}
 		if (count == 0) {
 			dataList = new ArrayList<>();
@@ -339,6 +356,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("请指定vip课程");
 		}
         StudentVipGroupDetailDto vipGroupDetail = vipGroupDao.getVipGroupDetail(vipGroupId);
+		if(Objects.isNull(vipGroupDetail)){
+			throw new BizException("未找到指定课程");
+		}
+
         vipGroupDetail.setNumberOfClasses(vipGroupDao.countTeacherVipGroups(vipGroupDetail.getTeacherId().longValue()));
         return vipGroupDetail;
 	}
@@ -736,7 +757,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void stopGroup(Long vipGroupId) {
+	public void stopGroup(Long vipGroupId,String stopReason) {
     	if(Objects.isNull(vipGroupId)){
     		throw new BizException("请指定vip课");
 		}
@@ -776,6 +797,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			sysUserCashAccountDetailDao.insert(sysUserCashAccountDetail);
 		}
 		vipGroup.setStatus(VipGroupStatusEnum.CANCEL);
+    	vipGroup.setStopReason(stopReason);
 		vipGroupDao.update(vipGroup);
 	}
 

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

@@ -490,8 +490,8 @@
             IF(vg.offline_classes_num_ IS NULL,0,vg.offline_classes_num_) offline_classes_num_,
             cg.total_class_times_,
             COUNT(vg.id_) surplus_class_times_,
-            mg.id_ music_group_id_,
-            mg.name_ music_group_name_,
+            vg.id_ music_group_id_,
+	        vg.name_ music_group_name_,
             s.id_ school_id_,
             s.name_ school_name_
         FROM

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

@@ -124,7 +124,7 @@
             su.id_ student_id_,
             su.username_,
             su.avatar_,
-            sa.status_
+            IF(sa.status_ IS NULL,'TRUANT',sa.status_) status_
         FROM
             course_schedule_student_payment cssp
             LEFT JOIN sys_user su ON cssp.user_id_ = su.id_

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

@@ -156,13 +156,15 @@
 		<result property="musicGroupId" column="music_group_id_"/>
 		<result property="musicGroupName" column="music_group_name_"/>
 		<result property="createTime" column="create_time_"/>
+		<result property="day" column="day_"/>
 	</resultMap>
 
-	<select id="findByClassGroupAndTeacher">
+	<select id="findByClassGroupAndTeacher" resultMap="teacherHomeworkListDto">
 		SELECT
 			ch.id_ course_homework_id_,
 			ch.content_,
 			ch.create_time_,
+			DATE_FORMAT(ch.create_time_,'%Y-%m-%d') 'day_',
 			ch.expect_num_,
 			ch.completed_num_,
 			cs.name_ course_schedule_name_,
@@ -175,7 +177,14 @@
 			LEFT JOIN course_schedule_teacher_salary csts ON ch.course_schedule_id_=csts.course_schedule_id_
 			LEFT JOIN class_group cg ON ch.class_group_id_=cg.id_
 			LEFT JOIN music_group mg ON cg.music_group_id_=mg.id_
-			WHERE csts.user_id_=#{userId} AND ch.class_group_id_=#{classGroupId}
+			WHERE csts.user_id_=#{userId}
+			<if test="classGroupId!=null">
+				AND ch.class_group_id_=#{classGroupId}
+			</if>
+			<if test="createTime!=null">
+				AND DATE_FORMAT(ch.create_time_,'%Y%m')=DATE_FORMAT(#{createTime},'%Y%m')
+			</if>
+		  ORDER BY ch.id_ DESC
 	</select>
 	<select id="countByClassGroupAndTeacher" resultType="int">
 		SELECT
@@ -183,7 +192,10 @@
 		FROM
 			course_homework ch
 			LEFT JOIN course_schedule_teacher_salary csts ON ch.course_schedule_id_=csts.course_schedule_id_
-			WHERE csts.user_id_=#{userId} AND ch.class_group_id_=#{classGroupId}
+			WHERE csts.user_id_=#{userId}
+			<if test="classGroupId!=null">
+				AND ch.class_group_id_=#{classGroupId}
+			</if>
 	</select>
 	<select id="findByTeacherAndCourseHomewok" resultMap="CourseHomework">
 		SELECT

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

@@ -128,7 +128,7 @@
                 leave_student_num_ = #{leaveStudentNum},
             </if>
             <if test="schoolId != null">
-                school_id_ = #{schoolId},
+                schoole_id_ = #{schoolId},
             </if>
         </set>
         WHERE id_ = #{id}

+ 5 - 9
mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml

@@ -151,22 +151,18 @@
 
     <select id="getStudentAttendanceInfo" parameterType="com.ym.mec.biz.dal.entity.StudentAttendance" resultMap="StudentAttendance">
         SELECT
-            cgsm.class_group_id_,
-            su.id_ user_id_,
+            cs.class_group_id_,
+            #{userId} user_id_,
             mg.id_ music_group_id_,
-            s.id_ subject_id_,
             #{teacherId} teacher_id_,
             #{status} status_,
             #{remark} remark_,
             #{courseScheduleId} course_schedule_id_
         FROM
-            sys_user su
-            LEFT JOIN class_group_student_mapper cgsm ON cgsm.user_id_ = su.id_
-            LEFT JOIN class_group cg ON cg.id_ = cgsm.class_group_id_
+            course_schedule cs
+            LEFT JOIN class_group cg ON cg.id_ = cs.class_group_id_
             LEFT JOIN music_group mg ON cg.music_group_id_ = mg.id_
-            LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
-        WHERE
-            su.id_=#{userId} AND cs.id_=#{courseScheduleId}
+        WHERE cs.id_=#{courseScheduleId}
     </select>
 
     <select id="getStudentLatestAttendanceInfo" resultType="com.ym.mec.biz.dal.entity.StudentAttendance" resultMap="StudentAttendance">

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

@@ -10,6 +10,7 @@
 		<result column="id_" property="id" />
 		<result column="user_id_" property="userId"/>
 		<result column="username_" property="userName"/>
+		<result column="avatar_" property="avatar"/>
 		<result column="course_homework_id_" property="courseHomeworkId" />
 		<result column="attachments_" property="attachments" />
 		<result column="score_" property="score" />
@@ -213,7 +214,8 @@
 	<select id="findByCourseSchedule" resultMap="StudentCourseHomework">
 		SELECT
 			sch.*,
-			su.username_
+			su.username_,
+			su.avatar_
 		FROM
 			student_course_homework sch
 			LEFT JOIN sys_user su ON sch.user_id_=su.id_

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

@@ -20,6 +20,7 @@
         <result property="userId" column="comment_user_id_"></result>
         <result property="userName" column="comment_user_name_"></result>
         <result property="avatar" column="avatar_"/>
+        <result property="isTeacher" column="is_teacher_"/>
         <result property="content" column="comment_content_"></result>
         <result property="createTime" column="comment_time"></result>
     </resultMap>
@@ -95,6 +96,7 @@
             schr.user_id_ comment_user_id_,
             suc.username_ comment_user_name_,
             suc.avatar_,
+            IF(suc.user_type_!='STUDENT',1,0) is_teacher_,
             schr.content_ comment_content_,
             schr.create_time_ comment_time
         FROM

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

@@ -34,6 +34,7 @@
         <result column="vip_group_category_id_" property="vipGroupCategoryId"/>
         <result column="give_teach_mode_" property="giveTeachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="organ_id_" property="organId"/>
+        <result column="stop_reason_" property="stopReason"/>
     </resultMap>
     
     <resultMap type="com.ym.mec.biz.dal.entity.School" id="School">
@@ -162,8 +163,8 @@
         </selectKey>
         -->
         INSERT INTO vip_group
-        (id_,user_id_,single_class_minutes_,payment_expire_date_,courses_expire_date_,create_time_,update_time_,teacher_school_id_,online_classes_num_,offline_classes_num_,registration_start_time_,name_,organ_id_list_,vip_group_activity_id_,status_,online_classes_unit_price_,offline_classes_unit_price_,total_price_,give_teach_mode_,vip_group_category_id_,organ_id_)
-        VALUES(#{id},#{userId},#{singleClassMinutes},#{paymentExpireDate},#{coursesExpireDate},now(),now(),#{teacherSchoolId},#{onlineClassesNum},#{offlineClassesNum},#{registrationStartTime},#{name},#{organIdList},#{vipGroupActivityId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{onlineClassesUnitPrice},#{offlineClassesUnitPrice},#{totalPrice},#{giveTeachMode},#{vipGroupCategoryId},#{organId})
+        (id_,user_id_,single_class_minutes_,payment_expire_date_,courses_expire_date_,create_time_,update_time_,teacher_school_id_,online_classes_num_,offline_classes_num_,registration_start_time_,name_,organ_id_list_,vip_group_activity_id_,status_,online_classes_unit_price_,offline_classes_unit_price_,total_price_,give_teach_mode_,vip_group_category_id_,organ_id_,stop_reason_)
+        VALUES(#{id},#{userId},#{singleClassMinutes},#{paymentExpireDate},#{coursesExpireDate},now(),now(),#{teacherSchoolId},#{onlineClassesNum},#{offlineClassesNum},#{registrationStartTime},#{name},#{organIdList},#{vipGroupActivityId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{onlineClassesUnitPrice},#{offlineClassesUnitPrice},#{totalPrice},#{giveTeachMode},#{vipGroupCategoryId},#{organId},#{stopReason})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -227,6 +228,9 @@
             <if test="organId!=null">
                 organ_id_=#{organId}
             </if>
+            <if test="stopReason!=null">
+                stop_reason_=#{stopReason}
+            </if>
         </set>
         WHERE id_ = #{id}
     </update>
@@ -561,9 +565,7 @@
     </select>
     <select id="countTeacherVipGroups" resultType="int">
         SELECT COUNT(vg.id_) 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 cs.class_group_id_ = vgcgm.class_group_id_
-        WHERE cs.actual_teacher_id_ = #{teacherId} AND cs.type_ = 'VIP' AND status_!=3 GROUP BY vg.id_
+        WHERE vg.user_id_ = #{teacherId} AND vg.status_!=3
     </select>
 
     <select id="countTeacherVipClass" resultType="java.lang.Integer">
@@ -607,4 +609,20 @@
     <select id="querySchoolByUserId" resultMap="School">
         SELECT * from school where user_id_ = #{userId} or user_id_ is null
     </select>
+
+    <select id="countVipGroupOverCourse" resultType="java.util.Map">
+        SELECT
+            vgcgm.vip_group_id_,
+            COUNT(cs.Id_)
+        FROM
+            vip_group_class_group_mapper vgcgm
+            LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
+            WHERE cs.status_='OVER'
+            AND DATE_FORMAT(cs.class_date_,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d')
+            AND vgcgm.vip_group_id_ IN
+            <foreach collection="list" item="id" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+        GROUP BY vgcgm.vip_group_id_
+    </select>
 </mapper>

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

@@ -17,6 +17,7 @@ import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -123,11 +124,11 @@ public class VipGroupManageController extends BaseController {
     @ApiOperation(value = "停止vip课")
     @PostMapping("/stopVipGroup")
     @PreAuthorize("@pcs.hasPermissions('vipGroupManage/stopVipGroup')")
-    public Object stopVipGroup(Long vipGroupId){
-        if(Objects.isNull(vipGroupId)){
-            return failed(HttpStatus.FORBIDDEN,"请指定vip课");
+    public Object stopVipGroup(Long vipGroupId,String stopReason){
+        if(Objects.isNull(vipGroupId)|| StringUtils.isBlank(stopReason)){
+            return failed(HttpStatus.FORBIDDEN,"请指定vip课并指定取消原因");
         }
-        vipGroupService.stopGroup(vipGroupId);
+        vipGroupService.stopGroup(vipGroupId,stopReason);
         return succeed();
     }