Browse Source

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

zouxuan 5 years ago
parent
commit
ae26843520
22 changed files with 349 additions and 116 deletions
  1. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  2. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  3. 13 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DemoGroupDao.java
  4. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  5. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  6. 96 79
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java
  7. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java
  8. 18 5
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  9. 13 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  10. 24 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  11. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  12. 20 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  13. 9 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  14. 8 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  15. 9 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  16. 16 0
      mec-biz/src/main/resources/config/mybatis/DemoGroupMapper.xml
  17. 8 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  18. 2 2
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  19. 1 1
      mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml
  20. 21 3
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  21. 17 3
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  22. 23 1
      mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java

+ 9 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -6,7 +6,6 @@ import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.entity.ImUserModel;
-
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -394,4 +393,13 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
      * @return com.ym.mec.biz.dal.entity.ClassGroup
      */
     ClassGroup findByCourseSchedule(Integer courseScheduleId);
+
+    /**
+     * @describe 获取合奏班下所有子班级
+     * @author Joburgess
+     * @date 2019/11/5
+     * @param maxCourseScheduleId: 合奏班编号
+     * @return java.util.List<java.lang.Integer>
+     */
+    List<ClassGroup> findClassGroupsByMixClassGroup(Integer maxCourseScheduleId);
 }

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

@@ -500,4 +500,22 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 	 * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
 	 */
 	List<CourseSchedule> findCourseScheduleWithDate(@Param("date") Date date);
+
+	/**
+	 * @describe 根据班级获取课程计划
+	 * @author Joburgess
+	 * @date 2019/11/5
+	 * @param classGroupId: 班级编号
+	 * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
+	 */
+	List<CourseSchedule> findByClassGroup(@Param("classGroupId") Integer classGroupId);
+
+	/**
+	 * @describe 根据班级获取课程计划
+	 * @author Joburgess
+	 * @date 2019/11/5
+	 * @param classGroupIds: 班级编号
+	 * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
+	 */
+	List<CourseSchedule> findByClassGroups(@Param("classGroupIds") List<Integer> classGroupIds);
 }

+ 13 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DemoGroupDao.java

@@ -111,5 +111,17 @@ public interface DemoGroupDao extends BaseDAO<Long, DemoGroup> {
      */
     List<Map<Integer, Long>> countTeacherDemoGroupNum(String teacherIds);
 
-
+    /**
+     * 查询vip课程数
+     * @param organId
+     * @return
+     */
+    Map<String, Integer> queryDemoGroupNum(Integer organId);
+    
+    /**
+     * 
+     * @param organId
+     * @return
+     */
+    Integer queryCurrentMonthCoursesNum(Integer organId);
 }

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

@@ -119,4 +119,11 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
      * @return
      */
     Map<String,Integer> queryOrganMusicGroupNum(Integer ogranId);
+    
+    /**
+     * 查询本月乐团课程数
+     * @param organId
+     * @return
+     */
+    Integer queryCurrentMonthCoursesNum(Integer organId);
 }

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

@@ -215,5 +215,5 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * 查询学生数
      * @return
      */
-    Map<String,Integer> queryStudentNum();
+    Map<String,Integer> queryStudentNum(Integer organId);
 }

+ 96 - 79
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java

@@ -28,8 +28,9 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return java.util.List<com.ym.mec.biz.dal.entity.VipGroup>
 	 * @describe 根据部门获取
 	 */
-	List<VipGroup> findAllByOrgan(Map<String,Object> params);
-	int countVipGroupByOrgan(Map<String,Object> params);
+	List<VipGroup> findAllByOrgan(Map<String, Object> params);
+
+	int countVipGroupByOrgan(Map<String, Object> params);
 
 	/**
 	 * @Author: Joburgess
@@ -38,8 +39,9 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return java.util.List<com.ym.mec.biz.dal.dto.VipGroupStudentDto>
 	 * @describe 获取小课学员
 	 */
-	List<VipGroupStudentDto> findVipGroupStudents(Map<String,Object> params);
-	int countVipGroupStudents(Map<String,Object> params);
+	List<VipGroupStudentDto> findVipGroupStudents(Map<String, Object> params);
+
+	int countVipGroupStudents(Map<String, Object> params);
 
 	/**
 	 * @Author: Joburgess
@@ -48,8 +50,9 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return java.util.List<com.ym.mec.biz.dal.dto.VipGroupCourseSchduleRecordDto>
 	 * @describe 获取vip课教学记录
 	 */
-	List<VipGroupCourseSchduleRecordDto> findTeachingRecord(Map<String,Object> params);
-	int countTeachingRecord(Map<String,Object> params);
+	List<VipGroupCourseSchduleRecordDto> findTeachingRecord(Map<String, Object> params);
+
+	int countTeachingRecord(Map<String, Object> params);
 
 	/**
 	 * @Author: Joburgess
@@ -94,7 +97,7 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return java.util.List<com.ym.mec.biz.dal.dto.StudentVipGroupShowListDto>
 	 * @describe 学生端获取vip课列表
 	 */
-	List<StudentVipGroupShowListDto> findVipGroups(Map<String,Object> params);
+	List<StudentVipGroupShowListDto> findVipGroups(Map<String, Object> params);
 
 	/**
 	 * @Author: Joburgess
@@ -103,7 +106,7 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return int
 	 * @describe 统计vip数
 	 */
-	int countVipGorups(Map<String,Object> params);
+	int countVipGorups(Map<String, Object> params);
 
 	/**
 	 * @Author: Joburgess
@@ -139,61 +142,61 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
 	 * @describe 获取小课考勤记录
 	 */
-    List<CourseSchedule> findVipGroupAttendances(Map<String,Object> params);
-
-    /**
-     * @Author: Joburgess
-     * @Date: 2019/10/3
-     * @params [params]
-     * @return int
-     * @describe 统计小课考勤记录数
-     */
-    int countVipGroupAttendance(Map<String,Object> params);
-
-    /**
-     * @Author: Joburgess
-     * @Date: 2019/10/3
-     * @params [vipGroupId]
-     * @return com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto
-     * @describe 获取vip课详情
-     */
-    StudentVipGroupDetailDto getVipGroupDetail(Long vipGroupId);
-
-    /**
-     * @Author: Joburgess
-     * @Date: 2019/10/3
-     * @params [vipGroupId]
-     * @return java.util.List<java.util.Map<java.lang.String,java.lang.Integer>>
-     * @describe 统计剩余课时数
-     */
-    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]
-     * @return java.math.BigDecimal
-     * @describe 统计学生vip课未上课时费用
-     */
-    List<Map<Integer,BigDecimal>> countSurplusCourseFee(Long vipGroupId);
-
-    /**
-     * @Author: Joburgess
-     * @Date: 2019/10/14
-     * @params [teacherId]
-     * @return int
-     * @describe 统计老师开启的vip课数
-     */
-    int countTeacherVipGroups(Long teacherId);
+	List<CourseSchedule> findVipGroupAttendances(Map<String, Object> params);
+
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/10/3
+	 * @params [params]
+	 * @return int
+	 * @describe 统计小课考勤记录数
+	 */
+	int countVipGroupAttendance(Map<String, Object> params);
+
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/10/3
+	 * @params [vipGroupId]
+	 * @return com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto
+	 * @describe 获取vip课详情
+	 */
+	StudentVipGroupDetailDto getVipGroupDetail(Long vipGroupId);
+
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/10/3
+	 * @params [vipGroupId]
+	 * @return java.util.List<java.util.Map<java.lang.String,java.lang.Integer>>
+	 * @describe 统计剩余课时数
+	 */
+	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]
+	 * @return java.math.BigDecimal
+	 * @describe 统计学生vip课未上课时费用
+	 */
+	List<Map<Integer, BigDecimal>> countSurplusCourseFee(Long vipGroupId);
+
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/10/14
+	 * @params [teacherId]
+	 * @return int
+	 * @describe 统计老师开启的vip课数
+	 */
+	int countTeacherVipGroups(Long teacherId);
 
 	/**
 	 * 根据教师编号获取老师vip课数量
@@ -208,20 +211,34 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return
 	 */
 	List<TeacherVipClassInfoDto> getTeacherVipClass(Map<String, Object> params);
-    
-    /**
-     * 根据老师查询vip课教学点
-     * @param userId
-     * @return
-     */
-    List<School> querySchoolByUserId(Integer userId);
-
-    /**
-     * @describe 根据课程编号获取vip课
-     * @author Joburgess
-     * @date 2019/10/23
-     * @param courseScheduleId: 课程编号
-     * @return com.ym.mec.biz.dal.entity.VipGroup
-     */
-    VipGroup findByCourseSchedule(Integer courseScheduleId);
+
+	/**
+	 * 根据老师查询vip课教学点
+	 * @param userId
+	 * @return
+	 */
+	List<School> querySchoolByUserId(Integer userId);
+
+	/**
+	 * @describe 根据课程编号获取vip课
+	 * @author Joburgess
+	 * @date 2019/10/23
+	 * @param courseScheduleId: 课程编号
+	 * @return com.ym.mec.biz.dal.entity.VipGroup
+	 */
+	VipGroup findByCourseSchedule(Integer courseScheduleId);
+
+	/**
+	 * 查询vip课数目
+	 * @param organId
+	 * @return
+	 */
+	Map<String, Integer> queryVipGroupNum(Integer organId);
+	
+	/**
+	 * 查询当月vip课数量
+	 * @param organId
+	 * @return
+	 */
+	Integer queryCurrentMonthCoursesNum(Integer organId);
 }

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

@@ -107,6 +107,17 @@ public class VipGroup {
 	@ApiModelProperty(value = "月度消耗百分数")
 	private Double monthConsumeRate;
 
+	@ApiModelProperty(value = "开课时间")
+	private Date courseStartDate;
+
+	public Date getCourseStartDate() {
+		return courseStartDate;
+	}
+
+	public void setCourseStartDate(Date courseStartDate) {
+		this.courseStartDate = courseStartDate;
+	}
+
 	public Double getMonthConsumeRate() {
 		return monthConsumeRate;
 	}

+ 18 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java

@@ -36,13 +36,17 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	void deleteCourseSchedules(List<Long> courseScheduleIds);
 
 	/**
-	 * @Author: Joburgess
-	 * @Date: 2019/10/16
-	 * @params [teacherAttendanceDto, userId]
-	 * @return YesOrNoEnum
 	 * @describe 判断该课程是否只能进行正常签到
+	 * @author Joburgess
+	 * @date 2019/11/5
+	 * @param teacherAttendanceDto: 教师签到信息
+	 * @param userId: 教师编号
+	 * @param checkSchool: 是否判断教学点
+	 * @return com.ym.mec.biz.dal.enums.YesOrNoEnum
 	 */
-	YesOrNoEnum enableOnlyNormalAttendance(TeacherAttendanceDto teacherAttendanceDto, Long userId);
+	YesOrNoEnum enableOnlyNormalAttendance(TeacherAttendanceDto teacherAttendanceDto,
+										   Long userId,
+										   boolean checkSchool);
 
 	/**
 	 * @Author: Joburgess
@@ -263,4 +267,13 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * 老师上课提醒
 	 */
 	void teacherSignInRemind();
+
+	/**
+	 * @describe 获取班级的课程计划
+	 * @author Joburgess
+	 * @date 2019/11/5
+	 * @param classGroupId: 班级编号
+	 * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
+	 */
+	List<CourseSchedule> findCourseScheduleByClassGroup(Integer classGroupId);
 }

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

@@ -819,10 +819,19 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             throw new BizException("请指定课程编号");
         }
         List<StudentAttendanceViewDto> studentByCourse = classGroupStudentMapperDao.findStudentByCourse(courseScheduleId);
-        List<StudentAttendanceViewDto> leaveStudent = studentByCourse.stream().filter(studentAttendanceViewDto -> StudentAttendanceStatusEnum.LEAVE.equals(studentAttendanceViewDto.getStatus())).collect(Collectors.toList());
-        List<StudentAttendanceViewDto> notLeaveStudent = studentByCourse.stream().filter(studentAttendanceViewDto -> !StudentAttendanceStatusEnum.LEAVE.equals(studentAttendanceViewDto.getStatus())).collect(Collectors.toList());
-        notLeaveStudent.addAll(leaveStudent);
-        return notLeaveStudent;
+        List<StudentAttendanceViewDto> leaveStudent = studentByCourse.stream()
+                .filter(studentAttendanceViewDto -> StudentAttendanceStatusEnum.LEAVE.equals(studentAttendanceViewDto.getStatus()))
+                .collect(Collectors.toList());
+        List<StudentAttendanceViewDto> truantStudent = studentByCourse.stream()
+                .filter(studentAttendanceViewDto -> StudentAttendanceStatusEnum.TRUANT.equals(studentAttendanceViewDto.getStatus()))
+                .collect(Collectors.toList());
+        List<StudentAttendanceViewDto> otherStudent = studentByCourse.stream()
+                .filter(studentAttendanceViewDto -> !StudentAttendanceStatusEnum.LEAVE.equals(studentAttendanceViewDto.getStatus())
+                                                &&!StudentAttendanceStatusEnum.TRUANT.equals(studentAttendanceViewDto.getStatus()))
+                .collect(Collectors.toList());
+        truantStudent.addAll(otherStudent);
+        truantStudent.addAll(leaveStudent);
+        return truantStudent;
     }
 
     @Override

+ 24 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -85,7 +85,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		    throw new BizException("课程不存在");
         }
 
-		currentCourseDetail.setOnlyNormal(enableOnlyNormalAttendance(currentCourseDetail, user.getId().longValue()));
+		currentCourseDetail.setOnlyNormal(enableOnlyNormalAttendance(currentCourseDetail, user.getId().longValue(),true));
 
 		currentCourseDetail.setCurrentTime(new Date());
 		currentCourseDetail.setAdvanceSignInMinutes(Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES)));
@@ -102,7 +102,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	@Override
-	public YesOrNoEnum enableOnlyNormalAttendance(TeacherAttendanceDto teacherAttendanceDto,Long userId){
+	public YesOrNoEnum enableOnlyNormalAttendance(TeacherAttendanceDto teacherAttendanceDto,Long userId,boolean checkSchool){
 		Date endTime=teacherAttendanceDto.getStartClassTime();
 		Date startTime=DateUtil.addHours(endTime,-1);
 		TeacherAttendanceDto teacherCourseByDateSpeed = courseScheduleDao.getTeacherCourseByDateSpeed(startTime, endTime, userId);
@@ -110,7 +110,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			return YesOrNoEnum.NO;
 		}else{
 			int i = studentAttendanceDao.countByCourseSchedule(teacherCourseByDateSpeed.getCourseScheduleId());
-			if(i>0&&teacherAttendanceDto.getSchoolId().equals(teacherCourseByDateSpeed.getSchoolId())){
+			if(i>0&&checkSchool&&teacherAttendanceDto.getSchoolId().equals(teacherCourseByDateSpeed.getSchoolId())){
 				return YesOrNoEnum.YES;
 			}else{
 				return YesOrNoEnum.NO;
@@ -885,4 +885,25 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_ATTEND_CLASS_MESSAGE, receivers, null, 0, "", scheduleName);
 		}
 	}
+
+	@Override
+	public List<CourseSchedule> findCourseScheduleByClassGroup(Integer classGroupId) {
+		if(Objects.isNull(classGroupId)){
+			throw new BizException("请指定班级");
+		}
+		ClassGroup classGroup = classGroupDao.get(classGroupId);
+		if(Objects.isNull(classGroup)){
+			throw new BizException("指定的班级不存在");
+		}
+		List<Integer> classGroupIds=new ArrayList<>();
+		classGroupIds.add(classGroupId);
+		if(classGroup.getType().equals(ClassGroupTypeEnum.MIX)){
+			List<ClassGroup> mixClassChildClassGroup = classGroupDao.findMixClassChildClassGroup(classGroupId);
+			List<Integer> childClassGroupIds = mixClassChildClassGroup.stream()
+					.map(ClassGroup::getId)
+					.collect(Collectors.toList());
+			classGroupIds.addAll(childClassGroupIds);
+		}
+		return courseScheduleDao.findByClassGroups(classGroupIds);
+	}
 }

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

@@ -19,6 +19,7 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -173,6 +174,10 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 		if(courseSchedule.getStatus() == CourseStatusEnum.OVER){
 			throw new BizException("课程已结束");
 		}
+
+		if(StringUtils.length(remark)>150){
+			throw new BizException("字符长度超限");
+		}
 		
 		Date date = new Date();
 		

+ 20 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -4,10 +4,7 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.ClassGroup;
-import com.ym.mec.biz.dal.entity.CourseHomework;
-import com.ym.mec.biz.dal.entity.StudentCourseHomework;
-import com.ym.mec.biz.dal.entity.TeacherAttendance;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.TeacherCloseQueryInfo;
 import com.ym.mec.biz.service.*;
@@ -45,6 +42,8 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	@Autowired
 	private SysConfigDao sysConfigDao;
 	@Autowired
+	private SysConfigService sysConfigService;
+	@Autowired
 	private SysMessageService sysMessageService;
 	@Autowired
 	private ClassGroupDao classGroupDao;
@@ -66,6 +65,9 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			throw new BizException("请选择课程!");
 		}
 
+		SysConfig byParamName = sysConfigService.findByParamName(SysConfigService.ADVANCE_SIGN_IN_MINUTES);
+		Integer advanceSignInMinutes=Integer.parseInt(byParamName.getParanValue());
+
 		Map<String,Object> result=new HashMap<>();
 
 		TeacherAttendance teacherAttendance=teacherAttendanceDao.findByTeacherAttendanceInfo(user.getId().longValue(),teacherSignOutDto.getTeacherAttendanceInfo().getCourseScheduleId());
@@ -93,14 +95,14 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 				throw new BizException("该课程已结束,不能进行签到!");
 			}
 
-			YesOrNoEnum yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(currentCourseDetail, user.getId().longValue());
+			YesOrNoEnum yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(currentCourseDetail, user.getId().longValue(),true);
 
 			if(yesOrNoEnum==YesOrNoEnum.YES){
 				teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
 				result.put("signInStatus",YesOrNoEnum.YES.getCode());
 			}else{
 				Long timeGap=(date.getTime()-currentCourseDetail.getStartClassTime().getTime())/1000/60;
-				if(timeGap<= ParamEnum.TEACHER_ATTENDANCE_TIME_GAP.getCode()){
+				if(timeGap<= advanceSignInMinutes){
 					teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
 					result.put("signInStatus",YesOrNoEnum.YES.getCode());
 				}else{
@@ -159,9 +161,13 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	public void addTeacherAttendanceRecord(Integer courseScheduleId, Integer userId, SignStatusEnum signStatus, boolean updateCourseScheduleStatus) {
 		TeacherAttendance teacherAttendance=teacherAttendanceDao.findByTeacherAttendanceInfo(userId.longValue(),courseScheduleId.longValue());
 		ClassGroup classGroup = classGroupDao.findByCourseSchedule(courseScheduleId);
+		CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId.longValue());
 		boolean isAttendance=false;
 		Date now=new Date();
 
+		SysConfig byParamName = sysConfigService.findByParamName(SysConfigService.ADVANCE_SIGN_IN_MINUTES);
+		Integer advanceSignInMinutes=Integer.parseInt(byParamName.getParanValue());
+
 		if(Objects.isNull(teacherAttendance)){
 			teacherAttendance=new TeacherAttendance();
 			teacherAttendance.setTeacherId(userId);
@@ -171,10 +177,17 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		}else{
 			isAttendance=true;
 		}
+
+		int timeGap = DateUtil.minutesBetween(now, courseSchedule.getStartClassTime());
+
 		switch (signStatus){
 			case SIGN_IN:
 				teacherAttendance.setSignInTime(now);
-				teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
+				if(advanceSignInMinutes<=timeGap&&timeGap<=60){
+					teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
+				}else{
+					teacherAttendance.setSignInStatus(YesOrNoEnum.NO);
+				}
 				int currentClassTimes = teacherAttendanceDao.countClassTime(classGroup.getId().longValue());
 				classGroup.setCurrentClassTimes(currentClassTimes);
 				if(updateCourseScheduleStatus){

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

@@ -188,6 +188,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		vipGroupApplyBaseInfoDto.setTotalPrice(costInfo.get("totalPrice"));
 		vipGroupApplyBaseInfoDto.setStatus(VipGroupStatusEnum.APPLYING);
 		vipGroupApplyBaseInfoDto.setOrganId(sysUser.getOrganId());
+		//开课时间为排课的第一节课的开始时间
+		vipGroupApplyBaseInfoDto.setCourseStartDate(firstCourseSchedule.getStartClassTime());
 		//课程结束时间为排课的最后一节课的结束时间
 		vipGroupApplyBaseInfoDto.setCoursesExpireDate(latestCourseSchedule.getEndClassTime());
 		vipGroupDao.insert(vipGroupApplyBaseInfoDto);
@@ -217,9 +219,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		//创建融云班级群
 		// 指导老师加入群组
-//		ImGroupMember[] imGroupMembers = { new ImGroupMember(vipGroup.getVipGroupApplyBaseInfo().getUserId().toString())};
+		ImGroupMember[] imGroupMembers = { new ImGroupMember(vipGroup.getVipGroupApplyBaseInfo().getUserId().toString())};
 		// 创建群组
-//		imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+		imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
 
 		//创建班级老师关联记录
 		ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper();
@@ -610,7 +612,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.nonNull(vipGroupSalarySettlementDto.getOnlineSalarySettlement())){
 			switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
 				case TEACHER_DEFAULT:
-					if(vipGroup instanceof VipGroupApplyBaseInfoDto&&!useDefaultTeacherSalary){
+					if(vipGroup instanceof VipGroupApplyBaseInfoDto&&!useDefaultTeacherSalary
+							&&vipGroupActivity.getSalaryReadonlyFlag().equals("0")){
 						teacherOnlineSalary=((VipGroupApplyBaseInfoDto) vipGroup).getOnlineTeacherSalary();
 					}
 
@@ -638,7 +641,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.nonNull(vipGroupSalarySettlementDto.getOfflineSalarySettlement())){
 			switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
 				case TEACHER_DEFAULT:
-					if(vipGroup instanceof VipGroupApplyBaseInfoDto&&!useDefaultTeacherSalary){
+					if(vipGroup instanceof VipGroupApplyBaseInfoDto&&!useDefaultTeacherSalary
+							&&vipGroupActivity.getSalaryReadonlyFlag().equals("0")){
 						teacherOfflineSalary=((VipGroupApplyBaseInfoDto) vipGroup).getOfflineTeacherSalary();
 					}
 					if(Objects.isNull(teacherOfflineSalary)){
@@ -838,7 +842,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			sysUserExpendCashAccountDetail.setUserId(userId);
 			sysUserExpendCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
 			sysUserExpendCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-			sysUserExpendCashAccountDetail.setAmount(order.getActualAmount());
+			sysUserExpendCashAccountDetail.setAmount(order.getActualAmount().negate());
 			sysUserExpendCashAccountDetail.setBalance(sysUserCashAccount.getBalance());
 			sysUserExpendCashAccountDetail.setAttribute(order.getTransNo());
 

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

@@ -679,4 +679,12 @@
             LEFT JOIN class_group cg ON cs.class_group_id_=cg.id_
         WHERE cs.id_=#{courseScheduleId}
     </select>
+    <select id="findClassGroupsByMixClassGroup" resultMap="ClassGroup">
+        SELECT
+            cg.*
+        FROM
+            class_group_relation cgr
+        LEFT JOIN class_group cg ON cgr.sub_class_group_id_=cg.id_
+        WHERE cgr.class_group_id_=#{maxCourseScheduleId}
+    </select>
 </mapper>

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

@@ -1161,4 +1161,13 @@
         WHERE cs.class_date_=DATE_FORMAT(#{date},'%Y-%m-%d %H:%i:%s')
         AND cs.type_!='VIP'
     </select>
+    <select id="findByClassGroup" resultMap="CourseSchedule">
+      select * from  course_schedule where class_group_id_=#{classGroupId}
+    </select>
+    <select id="findByClassGroups" resultMap="CourseSchedule">
+        select * from  course_schedule where class_group_id_ IN
+        <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
+            #{classGroupId}
+        </foreach>
+    </select>
 </mapper>

+ 16 - 0
mec-biz/src/main/resources/config/mybatis/DemoGroupMapper.xml

@@ -269,4 +269,20 @@
         WHERE FIND_IN_SET(dg.user_id_,#{teacherIds}) GROUP BY user_id_
 	</select>
 
+	<select id="queryDemoGroupNum" resultType="map">
+		select sum(case when dgcp.status_ = 0 then 1 else 0 end) unbooked_num_,sum(case when dgcp.status_ = 1 then 1 else 0 end) booked_num_ from demo_group_courses_plan dgcp left join demo_group dg on dgcp.demo_group_id_ = dg.id_
+		<where>
+    		<if test="organId != null">
+    			FIND_IN_SET(#{organId},dg.organ_id_list_)
+    		</if>
+    	</where> 
+	</select>
+    
+    <select id="queryCurrentMonthCoursesNum" resultType="int">
+    	select count(cs.id_) from course_schedule cs left join demo_group_class_group_mapper vgcgm on cs.class_group_id_ = vgcgm.class_group_id_ left join demo_group vg on vgcgm.demo_group_id_ = vg.id_ where cs.type_ in ('DEMO')
+  		and DATE_FORMAT(cs.class_date_, '%Y%m' ) = DATE_FORMAT(CURDATE() , '%Y%m')
+   		<if test="organId != null">
+   			and find_in_set(#{organId},vg.organ_id_list_)
+   		</if>
+    </select>
 </mapper>

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -321,4 +321,12 @@
     		</if>
     	</where>
   	</select>
+  	
+  	<select id="queryCurrentMonthCoursesNum" resultType="int">
+  		select count(cs.id_) from course_schedule cs left join class_group cg on cs.class_group_id_ = cg.id_ left join music_group mg on cg.music_group_id_ = mg.id_ where cs.type_ not in ('VIP','DEMO')
+  		and DATE_FORMAT(cs.class_date_, '%Y%m' ) = DATE_FORMAT(CURDATE() , '%Y%m')
+   		<if test="organId != null">
+   			and mg.organ_id_ = #{organId}
+   		</if>
+  	</select>
 </mapper>

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

@@ -227,7 +227,7 @@
 
     <select id="countStudentCourses" resultType="int">
         SELECT count(*) FROM class_group cg
-        LEFT JOIN class_group_student_mapper cgsm ON cg.id_ = cgsm.class_group_id_
+        LEFT JOIN class_group_student_mapper cgsm ON cg.id_=cgsm.class_group_id_
         <if test="vipGroupId!=null">
             LEFT JOIN vip_group_class_group_mapper vgcgm ON cgsm.class_group_id_=vgcgm.class_group_id_
         </if>
@@ -436,4 +436,4 @@
         WHERE (cs.type_ = 'NORMAL' OR cs.type_ = 'MIX') AND sa.music_group_id_ = #{search}
     </select>
 
-</mapper>
+</mapper>

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

@@ -124,7 +124,7 @@
 	<select id="queryPage" resultMap="VipGroupActivity" parameterType="map">
 		SELECT
 		vga.*,
-		(NOW() &lt; end_time_) enable,
+		(NOW() &lt; end_time_ AND NOW() > start_time_) enable,
 		GROUP_CONCAT(vgc.name_) vip_group_category_names_
 		FROM vip_group_activity vga
 		LEFT JOIN vip_group_category vgc ON FIND_IN_SET(vgc.id_,vga.vip_group_category_id_list_)

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

@@ -35,6 +35,7 @@
         <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"/>
+        <result column="courses_start_date" property="courseStartDate"/>
     </resultMap>
     
     <resultMap type="com.ym.mec.biz.dal.entity.School" id="School">
@@ -170,8 +171,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_,stop_reason_,audit_status_)
-        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},#{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+        (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_,audit_status_,courses_start_date)
+        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},#{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{courseStartDate})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -454,7 +455,7 @@
             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 vgcgm.id_=#{vipGroupId}
+        WHERE vgcgm.vip_group_id_=#{vipGroupId}
         ORDER BY su.id_
         <include refid="global.limit"/>
     </select>
@@ -653,4 +654,21 @@
             LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
             WHERE cs.id_=#{courseScheduleId}
     </select>
+    
+    <select id="queryVipGroupNum" resultType="map">
+    	select count(*) total,sum(case when status_ = 1 then 1 else 0 end) applying_num_,sum(case when status_ = 2 then 1 else 0 end) finished_num_ from vip_group 
+    	<where>
+    		<if test="organId != null">
+    			organ_id_ = #{organId}
+    		</if>
+    	</where>
+    </select>
+    
+    <select id="queryCurrentMonthCoursesNum" resultType="int">
+    	select count(cs.id_) from course_schedule cs left join vip_group_class_group_mapper vgcgm on cs.class_group_id_ = vgcgm.class_group_id_ left join vip_group vg on vgcgm.vip_group_id_ = vg.id_ where cs.type_ in ('VIP')
+  		and DATE_FORMAT(cs.class_date_, '%Y%m' ) = DATE_FORMAT(CURDATE() , '%Y%m')
+   		<if test="organId != null">
+   			and vg.organ_id_ = #{organId}
+   		</if>
+    </select>
 </mapper>

+ 17 - 3
mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java

@@ -3,7 +3,6 @@ package com.ym.mec.web.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.ClassGroupTeacherMapperDao;
-import com.ym.mec.biz.dal.dto.ClassDateAdjustDto;
 import com.ym.mec.biz.dal.dto.CreateCourseScheduleDto;
 import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
@@ -121,9 +120,17 @@ public class CourseScheduleController extends BaseController {
     @ApiOperation(value = "课时调整")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/classStartDateAdjust')")
     @PostMapping(value = "/classStartDateAdjust",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-    public Object classStartDateAdjust(ClassDateAdjustDto classDateAdjustDto){
+    public Object classStartDateAdjust(CourseSchedule courseSchedule){
         List<CourseSchedule> courseSchedules=new ArrayList<>();
-        courseSchedules.add(classDateAdjustDto);
+        courseSchedules.add(courseSchedule);
+        scheduleService.classStartDateAdjust(courseSchedules);
+        return succeed();
+    }
+
+    @ApiOperation(value = "课时调整-批量")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchClassStartDateAdjust')")
+    @PostMapping(value = "/batchClassStartDateAdjust",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public Object batchClassStartDateAdjust(List<CourseSchedule> courseSchedules){
         scheduleService.classStartDateAdjust(courseSchedules);
         return succeed();
     }
@@ -171,4 +178,11 @@ public class CourseScheduleController extends BaseController {
 		return succeed(musicGroupService.queryTeacherSalary(courseScheduleId));
 	}
 
+    @ApiOperation(value = "根据班级获取课程计划")
+    @GetMapping("/findCourseScheduleByClassGroup")
+    @PreAuthorize("@pcs.hasPermissions('course/findCourseScheduleByClassGroup')")
+	public Object findCourseScheduleByClassGroup(Integer classGroupId){
+        return succeed(scheduleService.findCourseScheduleByClassGroup(classGroupId));
+    }
+
 }

+ 23 - 1
mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java

@@ -13,9 +13,11 @@ import org.springframework.web.bind.annotation.RestController;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.DemoGroupDao;
 import com.ym.mec.biz.dal.dao.MusicGroupDao;
 import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dao.VipGroupDao;
 import com.ym.mec.common.controller.BaseController;
 
 @Api(tags = "首页")
@@ -31,6 +33,12 @@ public class IndexController extends BaseController {
 	
 	@Autowired
 	private StudentRegistrationDao studentRegistrationDao;
+	
+	@Autowired
+	private VipGroupDao vipGroupDao;
+	
+	@Autowired
+	private DemoGroupDao demoGroupDao;
 
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
@@ -53,7 +61,21 @@ public class IndexController extends BaseController {
 		
 		Map<String, Integer> teacherDatas = teacherDao.queryOrganTeacherNum(organId);
 		
-		Map<String, Integer> studentDatas = studentRegistrationDao.queryStudentNum();
+		Map<String, Integer> studentDatas = studentRegistrationDao.queryStudentNum(organId);
+		
+		Map<String, Integer> vipDatas = vipGroupDao.queryVipGroupNum(organId);
+		
+		Map<String, Integer> demoDatas = demoGroupDao.queryDemoGroupNum(organId);
+		
+		Integer musicGroupNum = musicGroupDao.queryCurrentMonthCoursesNum(organId);
+		
+		Integer vipGroupNum = vipGroupDao.queryCurrentMonthCoursesNum(organId);
+		
+		Integer demoGroupNum = demoGroupDao.queryCurrentMonthCoursesNum(organId);
+		
+		//本月收入
+		
+		//本月支出
 
 		return succeed();
 	}