瀏覽代碼

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

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
zouxuan 5 年之前
父節點
當前提交
a121a9799a
共有 51 個文件被更改,包括 1000 次插入242 次删除
  1. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  2. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java
  3. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  4. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java
  5. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleDto.java
  6. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVipGroupDetailDto.java
  7. 34 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendanceDto.java
  8. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherMusicGroupCourseDto.java
  9. 25 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/UserGoodsDto.java
  10. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ApprovalStatus.java
  11. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ClassGroupTeacherMapper.java
  12. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java
  13. 46 36
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupQuit.java
  14. 4 7
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherAttendance.java
  15. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseHomeWorkTemplateQueryInfo.java
  16. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  17. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseHomeworkTemplateService.java
  18. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  19. 14 3
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  20. 12 1
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  21. 21 1
      mec-biz/src/main/java/com/ym/mec/biz/service/SysUserCashAccountDetailService.java
  22. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherSchoolService.java
  23. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  24. 30 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  25. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupTeacherMapperServiceImpl.java
  26. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseHomeworkTemplateServiceImpl.java
  27. 30 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  28. 106 41
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  29. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysConfigServiceImpl.java
  30. 53 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountDetailServiceImpl.java
  31. 18 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java
  32. 37 13
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  33. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherSchoolServiceImpl.java
  34. 46 19
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  35. 16 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  36. 9 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml
  37. 3 0
      mec-biz/src/main/resources/config/mybatis/CourseHomeworkTemplateMapper.xml
  38. 63 9
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  39. 8 2
      mec-biz/src/main/resources/config/mybatis/DemoGroupMapper.xml
  40. 60 50
      mec-biz/src/main/resources/config/mybatis/MusicGroupQuitMapper.xml
  41. 2 2
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  42. 17 2
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  43. 1 2
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
  44. 2 3
      mec-student/src/main/java/com/ym/mec/student/controller/StudentVipGroupController.java
  45. 32 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseHomeworkTemplateController.java
  46. 25 10
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherAttendanceController.java
  47. 1 2
      mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java
  48. 13 11
      mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java
  49. 56 0
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupQuitController.java
  50. 9 0
      mec-web/src/main/java/com/ym/mec/web/controller/SysConfigController.java
  51. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/student/StudentCashAccountDetailController.java

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -211,9 +211,28 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     List<ClassGroup> findNoClassSubjects(String musicGroupId);
 
     /**
+     * @Author: Joburgess
+     * @Date: 2019/10/16
+     * @params [vipGroupId]
+     * @return com.ym.mec.biz.dal.entity.ClassGroup
+     * @describe 根据小课获取关联的班级信息
+     */
+    ClassGroup findByVipGroup(Long vipGroupId);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/16
+     * @params [classGroupId]
+     * @return com.ym.mec.biz.dal.entity.ClassGroup
+     * @describe 锁定班级信息
+     */
+    ClassGroup lockClassGroup(Long classGroupId);
+
+    /**
      * 获取当前班级列表老师数量
      * @param classGroupIds
      * @return
      */
     List<Map<Integer, Integer>> countTeacherNums(@Param("classGroupIds") String classGroupIds);
+
 }

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

@@ -25,4 +25,11 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
      * @return
      */
     List<ClassGroupTeacherMapper> findClassGroupTeachers(@Param("classGroupList") List classGroupList);
+
+    /**
+     * 批量删除班级的老师关联关系
+     * @param classGroupTeacherMapperList
+     * @return
+     */
+    int delMusicGroupTeacherMapper(@Param("classGroupTeacherMapperList") List<ClassGroupTeacherMapper> classGroupTeacherMapperList);
 }

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

@@ -21,6 +21,17 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      */
     TeacherAttendanceDto getCurrentCourseDetail(@Param("courseID") Long courseID);
 
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/16
+     * @params [startTime, endTime, teacherId]
+     * @return com.ym.mec.biz.dal.dto.TeacherAttendanceDto
+     * @describe 根据时间区间获取教师上课的课程
+     */
+    TeacherAttendanceDto getTeacherCourseByDateSpeed(@Param("startTime") Date startTime,
+                                                     @Param("endTime") Date endTime,
+                                                     @Param("teacherId") Long teacherId);
+
     int batchAddCourseSchedules(List<CourseSchedule> courseSchedules);
 
     /**
@@ -223,5 +234,15 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      */
     List<CourseSchedule> findVipGroupCourseSchedules(@Param("vipGroupId") Long vipGroupId);
 
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/16
+     * @params [courseScheduleId]
+     * @return java.lang.String
+     * @describe 获取课程关联班级类型
+     */
+    String findClassTypeByCourse(@Param("courseScheduleId") Long courseScheduleId);
+
+
 
 }

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

@@ -63,4 +63,14 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
      */
     @Select("SELECT COUNT(*) FROM student_attendance WHERE class_group_id_=#{classGroupID} AND status_=\"NORMAL\"")
     int countNormalAttendanceStudentNums(Long classGroupID);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/16
+     * @params [courseScheduleId]
+     * @return com.ym.mec.biz.dal.dto.StudentPersonalAttendanceDto
+     * @describe 根据课程统计点名记录
+     */
+    @Select("SELECT COUNT(*) FROM student_attendance WHERE course_schedule_id_=#{courseScheduleId}")
+    int countByCourseSchedule(Long courseScheduleId);
 }

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

@@ -17,6 +17,9 @@ public class CourseScheduleDto extends CourseSchedule {
     @ApiModelProperty(value = "班级名称",required = false)
     private String classGroupName;
 
+    @ApiModelProperty(value = "学生总人数")
+    private Integer totalStudentNum;
+
     @ApiModelProperty(value = "学校名称",required = false)
     private String schoolName;
 
@@ -29,6 +32,14 @@ public class CourseScheduleDto extends CourseSchedule {
     @ApiModelProperty(value = "签退状态(1已签到,0未签到)",required = false)
     private Integer signOutStatus;
 
+    public Integer getTotalStudentNum() {
+        return totalStudentNum;
+    }
+
+    public void setTotalStudentNum(Integer totalStudentNum) {
+        this.totalStudentNum = totalStudentNum;
+    }
+
     public Integer getSignInStatus() {
         return signInStatus;
     }

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

@@ -11,6 +11,9 @@ import java.util.List;
  */
 public class StudentVipGroupDetailDto extends StudentVipGroupShowListDto {
 
+    @ApiModelProperty(value = "总课时")
+    private Integer totalClassTimes;
+
     @ApiModelProperty(value = "授课地点")
     private String address;
 
@@ -20,6 +23,14 @@ public class StudentVipGroupDetailDto extends StudentVipGroupShowListDto {
     @ApiModelProperty(value = "课程列表",required = false)
     private List<CourseSchedule> courseSchedules;
 
+    public Integer getTotalClassTimes() {
+        return totalClassTimes;
+    }
+
+    public void setTotalClassTimes(Integer totalClassTimes) {
+        this.totalClassTimes = totalClassTimes;
+    }
+
     public Integer getNumberOfClasses() {
         return numberOfClasses;
     }

+ 34 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendanceDto.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.enums.CourseStatusEnum;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.util.Date;
@@ -64,6 +65,39 @@ public class TeacherAttendanceDto {
     @ApiModelProperty(value = "老师可打卡范围,单位米")
     private Integer attendanceRange;
 
+    @ApiModelProperty(value = "教师名称")
+    private String teacherName;
+
+    @ApiModelProperty(value = "签到时间")
+    private String signInTime;
+
+    @ApiModelProperty(value = "只能正常签到")
+    private YesOrNoEnum onlyNormal;
+
+    public YesOrNoEnum getOnlyNormal() {
+        return onlyNormal;
+    }
+
+    public void setOnlyNormal(YesOrNoEnum onlyNormal) {
+        this.onlyNormal = onlyNormal;
+    }
+
+    public String getSignInTime() {
+        return signInTime;
+    }
+
+    public void setSignInTime(String signInTime) {
+        this.signInTime = signInTime;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
     public String getCourseScheduleName() {
         return courseScheduleName;
     }

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

@@ -0,0 +1,11 @@
+package com.ym.mec.biz.dal.dto;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/15
+ */
+public class TeacherMusicGroupCourseDto {
+
+
+
+}

+ 25 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/UserGoodsDto.java

@@ -0,0 +1,25 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.util.List;
+
+public class UserGoodsDto {
+    private Integer goodsId;
+
+    private List<String> goodsName;
+
+    public Integer getGoodsId() {
+        return goodsId;
+    }
+
+    public void setGoodsId(Integer goodsId) {
+        this.goodsId = goodsId;
+    }
+
+    public List<String> getGoodsName() {
+        return goodsName;
+    }
+
+    public void setGoodsName(List<String> goodsName) {
+        this.goodsName = goodsName;
+    }
+}

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ApprovalStatus.java

@@ -0,0 +1,13 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+public enum ApprovalStatus implements BaseEnum<String, ApprovalStatus> {
+	APPROVED, DENIED, PROCESSING;
+
+	@Override
+	public String getCode() {
+		return name();
+	}
+
+}

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ClassGroupTeacherMapper.java

@@ -19,7 +19,7 @@ public class ClassGroupTeacherMapper {
 	
 	/**  */
 	@ApiModelProperty(value = "乐团编号",required = false)
-	private Integer musicGroupId;
+	private String musicGroupId;
 	
 	/**  */
 	@ApiModelProperty(value = "班级编号",required = false)
@@ -57,11 +57,11 @@ public class ClassGroupTeacherMapper {
 		return this.id;
 	}
 			
-	public void setMusicGroupId(Integer musicGroupId){
+	public void setMusicGroupId(String musicGroupId){
 		this.musicGroupId = musicGroupId;
 	}
 	
-	public Integer getMusicGroupId(){
+	public String getMusicGroupId(){
 		return this.musicGroupId;
 	}
 			

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java

@@ -88,6 +88,28 @@ public class CourseSchedule {
 	
 	private String name;
 
+	@ApiModelProperty(value = "实际上课人数")
+	private Integer studentNum;
+
+	@ApiModelProperty(value = "请假人数")
+	private Integer leaveStudentNum;
+
+	public Integer getStudentNum() {
+		return studentNum;
+	}
+
+	public void setStudentNum(Integer studentNum) {
+		this.studentNum = studentNum;
+	}
+
+	public Integer getLeaveStudentNum() {
+		return leaveStudentNum;
+	}
+
+	public void setLeaveStudentNum(Integer leaveStudentNum) {
+		this.leaveStudentNum = leaveStudentNum;
+	}
+
 	public void setId(Long id) {
 		this.id = id;
 	}

+ 46 - 36
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupQuit.java

@@ -9,81 +9,91 @@ public class MusicGroupQuit {
 
 	/**  */
 	private Long id;
-	
+
 	/** 用户编号 */
 	private Integer userId;
-	
+
 	/** 乐团编号 */
-	private Integer musicGroupId;
-	
+	private String musicGroupId;
+
 	/** 加入时间 */
 	private java.util.Date joinDate;
-	
+
 	/** 退出时间 */
 	private java.util.Date quitDate;
-	
+
 	/**  */
 	private java.util.Date createTime;
-	
+
 	/** 原因 */
 	private String reason;
-	
-	public void setId(Long id){
+
+	private ApprovalStatus status;
+
+	public void setId(Long id) {
 		this.id = id;
 	}
-	
-	public Long getId(){
+
+	public Long getId() {
 		return this.id;
 	}
-			
-	public void setUserId(Integer userId){
+
+	public void setUserId(Integer userId) {
 		this.userId = userId;
 	}
-	
-	public Integer getUserId(){
+
+	public Integer getUserId() {
 		return this.userId;
 	}
-			
-	public void setMusicGroupId(Integer musicGroupId){
+
+	public void setMusicGroupId(String musicGroupId) {
 		this.musicGroupId = musicGroupId;
 	}
-	
-	public Integer getMusicGroupId(){
+
+	public String getMusicGroupId() {
 		return this.musicGroupId;
 	}
-			
-	public void setJoinDate(java.util.Date joinDate){
+
+	public void setJoinDate(java.util.Date joinDate) {
 		this.joinDate = joinDate;
 	}
-	
-	public java.util.Date getJoinDate(){
+
+	public java.util.Date getJoinDate() {
 		return this.joinDate;
 	}
-			
-	public void setQuitDate(java.util.Date quitDate){
+
+	public void setQuitDate(java.util.Date quitDate) {
 		this.quitDate = quitDate;
 	}
-	
-	public java.util.Date getQuitDate(){
+
+	public java.util.Date getQuitDate() {
 		return this.quitDate;
 	}
-			
-	public void setCreateTime(java.util.Date createTime){
+
+	public void setCreateTime(java.util.Date createTime) {
 		this.createTime = createTime;
 	}
-	
-	public java.util.Date getCreateTime(){
+
+	public java.util.Date getCreateTime() {
 		return this.createTime;
 	}
-			
-	public void setReason(String reason){
+
+	public void setReason(String reason) {
 		this.reason = reason;
 	}
-	
-	public String getReason(){
+
+	public String getReason() {
 		return this.reason;
 	}
-			
+
+	public ApprovalStatus getStatus() {
+		return status;
+	}
+
+	public void setStatus(ApprovalStatus status) {
+		this.status = status;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 4 - 7
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherAttendance.java

@@ -1,10 +1,7 @@
 package com.ym.mec.biz.dal.entity;
 
-import com.ym.mec.biz.dal.enums.SignStatusEnum;
-
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
-
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.util.Date;
@@ -38,8 +35,8 @@ public class TeacherAttendance {
 	private java.util.Date signInTime;
 	
 	/** 状态(正常签到,异常签到) */
-	@ApiModelProperty(value = "状态(1正常签到,0异常签到,2正常签退) ",required = false)
-	private SignStatusEnum status;
+	@ApiModelProperty(value = "状态(0:签到,1:签退)",required = false)
+	private Integer status;
 
 	@ApiModelProperty(value = "签到状态:0异常,1正常")
 	private YesOrNoEnum signInStatus;
@@ -129,11 +126,11 @@ public class TeacherAttendance {
 		this.signInTime = signInTime;
 	}
 
-	public SignStatusEnum getStatus() {
+	public Integer getStatus() {
 		return status;
 	}
 
-	public void setStatus(SignStatusEnum status) {
+	public void setStatus(Integer status) {
 		this.status = status;
 	}
 

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

@@ -15,6 +15,17 @@ public class CourseHomeWorkTemplateQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "课程计划ID",required = false)
     private Long courseScheduleID;
 
+    @ApiModelProperty(value = "班级类型")
+    private String classType;
+
+    public String getClassType() {
+        return classType;
+    }
+
+    public void setClassType(String classType) {
+        this.classType = classType;
+    }
+
     public String[] getSubjectIDs() {
         return subjectIDs;
     }

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

@@ -113,9 +113,10 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * 获取乐团班级老师课酬
      *
      * @param musicGroupId
+     * @param type 班级类型(多种类型)
      * @return
      */
-    List<ClassGroupTeachersDto> getClassGroupAndTeachers(String musicGroupId);
+    List<ClassGroupTeachersDto> getClassGroupAndTeachers(String musicGroupId,String type);
 
     /**
      * 获取乐团班级老师课酬
@@ -173,6 +174,15 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
     List<ClassGroup> findNoClassSubjects(String musicGroupId);
 
     /**
+     * @Author: Joburgess
+     * @Date: 2019/10/16
+     * @params [classGroupId, num]
+     * @return boolean
+     * @describe 跟新班级人数
+     */
+    boolean updateClassStudentNum(Long classGroupId,Integer num);
+
+    /**
      * 删除单技班级
      * @param classGroupId
      */

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseHomeworkTemplateService.java

@@ -1,8 +1,20 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.entity.CourseHomeworkTemplate;
+import com.ym.mec.biz.dal.page.CourseHomeWorkTemplateQueryInfo;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.List;
+
 public interface CourseHomeworkTemplateService extends BaseService<Integer, CourseHomeworkTemplate> {
 
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/16
+     * @params [queryInfo]
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseHomeworkTemplate>
+     * @describe 根据班级类型获取作业模板
+     */
+    List<CourseHomeworkTemplate> findByClassType(CourseHomeWorkTemplateQueryInfo queryInfo);
+
 }

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

@@ -5,6 +5,7 @@ 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.entity.CourseScheduleComplaints;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentCourseScheduleRecordQueryInfo;
 import com.ym.mec.common.page.PageInfo;
@@ -25,6 +26,15 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 
     /**
      * @Author: Joburgess
+     * @Date: 2019/10/16
+     * @params [teacherAttendanceDto, userId]
+     * @return YesOrNoEnum
+     * @describe 判断该课程是否只能进行正常签到
+     */
+    YesOrNoEnum enableOnlyNormalAttendance(TeacherAttendanceDto teacherAttendanceDto, Long userId);
+
+    /**
+     * @Author: Joburgess
      * @Date: 2019/9/17
      * 批量插入课程计划
      */

+ 14 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -4,9 +4,11 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
+import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.dto.MusicCardDto;
 import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
+import com.ym.mec.biz.dal.entity.ApprovalStatus;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
 import com.ym.mec.common.page.PageInfo;
@@ -67,12 +69,21 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	boolean extensionPayment(String musicGroupId, Date expireDate);
 
 	/**
-	 * 退团
+	 * 申请退团
 	 * @param musicGroupId 乐团编号
-	 * @param userId 用户编号
+	 * @param sysUser 用户
+	 * @return
+	 */
+	boolean applyQuitMusicGroup(String musicGroupId, SysUser sysUser);
+
+	/**
+	 * 审批退团
+	 * @param id
+	 * @param status
+	 * @param reason
 	 * @return
 	 */
-	boolean quitMusicGroup(String musicGroupId, Integer userId);
+	boolean approveQuitMusicGroup(Long id, ApprovalStatus status, String reason);
 
 	/**
 	 *  续费

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

@@ -54,5 +54,16 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
 	 * 密码重置后的默认密码为{}
 	 */
 	public static final String DEFAULT_PASSWORD = "default_password";
-	
+
+	/**
+	 * 梯度结算规则设置
+	 */
+	public static final String MUSIC_GRADIENT_SETTLEMENT_RULE = "music_gradient_settlement_rule";
+
+	/**
+	 * @params paramName
+	 * @return com.ym.mec.biz.dal.entity.SysConfig
+	 * @describe 根据配置名称获取配置信息
+	 */
+	SysConfig findByParamName(String paramName);
 }

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

@@ -1,10 +1,30 @@
 package com.ym.mec.biz.service;
 
+import java.math.BigDecimal;
+
 import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.TransTypeEnum;
 import com.ym.mec.common.service.BaseService;
 
 public interface SysUserCashAccountDetailService extends BaseService<Long, SysUserCashAccountDetail> {
 
-    SysUserCashAccountDetail selectDetailByTransNo(String transNo);
+	SysUserCashAccountDetail queryDetailByTransNo(String transNo);
+
+	/**
+	 * 添加流水信息(若成功会更新账户余额)
+	 * @param userId 用户编号
+	 * @param amount 金额
+	 * @param origOrderId 原始订单号
+	 * @param transNo 交易流水号
+	 * @param type 交易类型
+	 * @param transType 交易渠道
+	 * @param status 交易状态
+	 * @param comment 备注
+	 * @return
+	 */
+	boolean addCashAccountDetail(Integer userId, BigDecimal amount, String origOrderId, String transNo, PlatformCashAccountDetailTypeEnum type,
+			TransTypeEnum transType, DealStatusEnum status, String comment);
 
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherSchoolService.java

@@ -16,4 +16,6 @@ public interface TeacherSchoolService extends BaseService<Long, TeacherSchool> {
      */
     List<TeacherSchool> findByTeacherId(Long teacherId);
 
+
+
 }

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

@@ -119,7 +119,7 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @return void
      * @describe 购买vip课程
      */
-    void buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams);
+    Map buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) throws Exception;
 
     /**
      * @Author: Joburgess

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

@@ -10,6 +10,7 @@ import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.entity.ImUserModel;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
@@ -17,6 +18,7 @@ import com.ym.mec.util.collection.MapUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
@@ -37,11 +39,12 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     private MusicGroupDao musicGroupDao;
     @Autowired
     private ClassGroupRelationService classGroupRelationService;
-    @Autowired
     private ClassGroupStudentMapperDao classGroupStudentMapperDao;
     @Autowired
     private ClassGroupRelationDao classGroupRelationDao;
     @Autowired
+    private ClassGroupStudentMapperService classGroupStudentMapperService;
+    @Autowired
     private ClassGroupTeacherMapperService classGroupTeacherMapperService;
     @Autowired
     private TeacherDefaultMusicGroupSalaryService teacherDefaultMusicGroupSalaryService;
@@ -50,6 +53,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     @Autowired
     private StudentRegistrationDao studentRegistrationDao;
     @Autowired
+    private StudentRegistrationService studentRegistrationService;
+    @Autowired
+    private ClassGroupTeacherSalaryService classGroupTeacherSalaryService;
+    @Autowired
     private MusicGroupStudentFeeDao musicGroupStudentFeeDao;
 
     @Override
@@ -181,7 +188,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
             //2、插入班级关联老师
             ClassGroupTeacherMapper classGroupTeacherMapper = new ClassGroupTeacherMapper();
-            classGroupTeacherMapper.setMusicGroupId(highClassGroup.getUserId());
+            classGroupTeacherMapper.setMusicGroupId(highClassGroup.getMusicGroupId());
             classGroupTeacherMapper.setClassGroupId(highClassGroup.getId());
             classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.BISHOP);
             classGroupTeacherMapper.setUserId(highClassGroup.getUserId());
@@ -257,8 +264,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     }
 
     @Override
-    public List<ClassGroupTeachersDto> getClassGroupAndTeachers(String musicGroupId) {
-        List<ClassGroupTeachersDto> classGroupAndTeachersList = classGroupDao.findClassGroupByMusicGroupId(musicGroupId,"NORMAL,MIX");
+    public List<ClassGroupTeachersDto> getClassGroupAndTeachers(String musicGroupId,String type) {
+        List<ClassGroupTeachersDto> classGroupAndTeachersList = classGroupDao.findClassGroupByMusicGroupId(musicGroupId,type);
 
         List<ClassGroupTeacherMapper> classGroupTeacherMapperList = classGroupTeacherMapperService.findClassGroupTeachers(classGroupAndTeachersList);
 
@@ -277,7 +284,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     @Override
     public List<ClassGroupTeachersDto> getClassGroupAndTeacherSalary(String musicGroupId, SalarySettlementTypeEnum type) throws Exception {
         //乐团班级及班级老师
-        List<ClassGroupTeachersDto> classGroupAndTeachers = getClassGroupAndTeachers(musicGroupId);
+        List<ClassGroupTeachersDto> classGroupAndTeachers = getClassGroupAndTeachers(musicGroupId,"NORMAL,MIX,HIGH");
 
         for (ClassGroupTeachersDto classGroupAndTeacher : classGroupAndTeachers) {
             //班级的教师列表
@@ -318,10 +325,9 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 } else {
                     //获取学员乐团课的续费状态
                     MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(userId, e.getMusicGroupId());
-//                    if (musicGroupStudentFee != null) {
-//                        int i = DateUtil.daysBetween(new Date(), musicGroupStudentFee.getNextPaymentDate());
-                    e.setPaymentStatus(musicGroupStudentFee.getPaymentStatus());
-//                    }
+                    if (musicGroupStudentFee != null) {
+                        e.setPaymentStatus(musicGroupStudentFee.getPaymentStatus());
+                    }
                 }
             });
         }
@@ -464,4 +470,19 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         musicGroup.setUpdateTime(new Date());
         musicGroupDao.update(musicGroup);
     }
+
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    public boolean updateClassStudentNum(Long classGroupId, Integer num) {
+        ClassGroup classGroup=classGroupDao.lockClassGroup(classGroupId);
+        if(Objects.isNull(classGroup)){
+            throw new BizException("班级不存在");
+        }
+        classGroup.setStudentNum(classGroup.getStudentNum()+num);
+        classGroup.setUpdateTime(new Date());
+
+        classGroupDao.update(classGroup);
+
+        return true;
+    }
 }

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
+import com.ym.mec.biz.dal.entity.TeacherDefaultMusicGroupSalary;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -8,6 +9,7 @@ import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import com.ym.mec.biz.service.ClassGroupTeacherMapperService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -23,7 +25,10 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int classGroupTeachersInsert(List<ClassGroupTeacherMapper> classGroupTeacherMapperList) {
+        //删除班级已经设置的老师
+        classGroupTeacherMapperDao.delMusicGroupTeacherMapper(classGroupTeacherMapperList);
         return classGroupTeacherMapperDao.classGroupTeachersInsert(classGroupTeacherMapperList);
     }
 
@@ -35,7 +40,10 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
     public boolean classGroupTeacherMapperUpdate(List<ClassGroupTeacherMapper> classGroupTeacherMapperList) throws Exception {
         for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
-            classGroupTeacherMapper.getTeacherDefaultMusicGroupSalaryList();
+            List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaryList = classGroupTeacherMapper.getTeacherDefaultMusicGroupSalaryList();
+            for (TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary : teacherDefaultMusicGroupSalaryList) {
+                
+            }
 
             classGroupTeacherMapperDao.update(classGroupTeacherMapper);
         }

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseHomeworkTemplateServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.CourseHomeworkTemplateDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.entity.CourseHomeworkTemplate;
 import com.ym.mec.biz.dal.page.CourseHomeWorkTemplateQueryInfo;
 import com.ym.mec.biz.service.CourseHomeworkTemplateService;
@@ -14,11 +15,15 @@ import org.springframework.stereotype.Service;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 
+import java.util.List;
+
 @Service
 public class CourseHomeworkTemplateServiceImpl extends BaseServiceImpl<Integer, CourseHomeworkTemplate>  implements CourseHomeworkTemplateService {
 	
 	@Autowired
 	private CourseHomeworkTemplateDao courseHomeworkTemplateDao;
+	@Autowired
+	private CourseScheduleDao courseScheduleDao;
 
 	@Override
 	public BaseDAO<Integer, CourseHomeworkTemplate> getDAO() {
@@ -36,4 +41,14 @@ public class CourseHomeworkTemplateServiceImpl extends BaseServiceImpl<Integer,
 		}
 		return super.queryPage(templateQueryInfo);
 	}
+
+	@Override
+	public List<CourseHomeworkTemplate> findByClassType(CourseHomeWorkTemplateQueryInfo queryInfo) {
+		CourseHomeWorkTemplateQueryInfo templateQueryInfo=  queryInfo;
+		if(null!=templateQueryInfo.getCourseScheduleID()){
+			String classType=courseScheduleDao.findClassTypeByCourse(templateQueryInfo.getCourseScheduleID());
+			queryInfo.setClassType(classType);
+		}
+		return super.queryPage(templateQueryInfo).getRows();
+	}
 }

+ 30 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -4,6 +4,7 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.CourseScheduleComplaintsDao;
 import com.ym.mec.biz.dal.dao.CourseScheduleDao;
+import com.ym.mec.biz.dal.dao.StudentAttendanceDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.ClassDateAdjustDto;
 import com.ym.mec.biz.dal.dto.CourseScheduleDto;
@@ -46,6 +47,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	private CourseScheduleComplaintsDao courseScheduleComplaintsDao;
 	@Autowired
 	private SysConfigDao sysConfigDao;
+	@Autowired
+	private StudentAttendanceDao studentAttendanceDao;
 
 	@Override
 	public BaseDAO<Long, CourseSchedule> getDAO() {
@@ -54,10 +57,20 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 	@Override
 	public TeacherAttendanceDto getCurrentCourseDetail(Long courseID) {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if(null==user){
+			throw new BizException("获取用户信息失败");
+		}
 		if(Objects.isNull(courseID)){
 			throw new BizException("参数错误!");
 		}
 		TeacherAttendanceDto currentCourseDetail = courseScheduleDao.getCurrentCourseDetail(courseID);
+		if(Objects.isNull(currentCourseDetail)){
+		    throw new BizException("课程不存在");
+        }
+
+		currentCourseDetail.setOnlyNormal(enableOnlyNormalAttendance(currentCourseDetail, user.getId().longValue()));
+
 		currentCourseDetail.setCurrentTime(new Date());
 		SysConfig advance_sign_in_minutes = sysConfigDao.findByParamName("advance_sign_in_minutes");
 		currentCourseDetail.setAdvanceSignInMinutes(Integer.parseInt(advance_sign_in_minutes.getParanValue()));
@@ -67,6 +80,23 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	@Override
+	public YesOrNoEnum enableOnlyNormalAttendance(TeacherAttendanceDto teacherAttendanceDto,Long userId){
+		Date endTime=teacherAttendanceDto.getStartClassTime();
+		Date startTime=DateUtil.addHours(endTime,-1);
+		TeacherAttendanceDto teacherCourseByDateSpeed = courseScheduleDao.getTeacherCourseByDateSpeed(startTime, endTime, userId);
+		if(Objects.isNull(teacherCourseByDateSpeed)){
+			return YesOrNoEnum.NO;
+		}else{
+			int i = studentAttendanceDao.countByCourseSchedule(teacherCourseByDateSpeed.getCourseScheduleId());
+			if(i>0&&teacherAttendanceDto.getSchoolId().equals(teacherCourseByDateSpeed.getSchoolId())){
+				return YesOrNoEnum.YES;
+			}else{
+				return YesOrNoEnum.NO;
+			}
+		}
+	}
+
+	@Override
 	public void batchAddCourseSchedule(List<CourseSchedule> courseSchedules) {
 		if(Objects.isNull(courseSchedules)&&courseSchedules.size()<=0){
 			throw new BizException("参数错误!");

+ 106 - 41
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -15,12 +15,14 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
+import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.ChargeTypeDao;
 import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
 import com.ym.mec.biz.dal.dao.MusicGroupBuildLogDao;
 import com.ym.mec.biz.dal.dao.MusicGroupDao;
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentEntitiesDao;
+import com.ym.mec.biz.dal.dao.MusicGroupQuitDao;
 import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
 import com.ym.mec.biz.dal.dao.MusicGroupSubjectGoodsGroupDao;
 import com.ym.mec.biz.dal.dao.MusicGroupSubjectPlanDao;
@@ -30,23 +32,29 @@ import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.dto.MusicCardDto;
 import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
+import com.ym.mec.biz.dal.entity.ApprovalStatus;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupBuildLog;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentEntities;
+import com.ym.mec.biz.dal.entity.MusicGroupQuit;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
 import com.ym.mec.biz.service.MusicGroupService;
 import com.ym.mec.biz.service.PayService;
+import com.ym.mec.biz.service.StudentRegistrationService;
+import com.ym.mec.biz.service.SysUserCashAccountDetailService;
 import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupMember;
@@ -86,19 +94,28 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
 	@Autowired
 	private MusicGroupStudentFeeDao musicGroupStudentFeeDao;
-	
+
 	@Autowired
 	private ClassGroupStudentMapperDao classGroupStudentMapperDao;
-	
+
 	@Autowired
 	private StudentPaymentOrderDao studentPaymentOrderDao;
-	
+
 	@Autowired
 	private SysUserCashAccountService sysUserCashAccountService;
-	
-    @Autowired
-    private PayService payService;
-	
+
+	@Autowired
+	private SysUserCashAccountDetailService sysUserCashAccountDetailService;
+
+	@Autowired
+	private MusicGroupQuitDao musicGroupQuitDao;
+
+	@Autowired
+	private StudentRegistrationService studentRegistrationService;
+
+	@Autowired
+	private PayService payService;
+
 	@Override
 	public BaseDAO<String, MusicGroup> getDAO() {
 		return musicGroupDao;
@@ -111,7 +128,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 		List<MusicGroupPaymentEntities> musicGroupPaymentEntities = subFeeSettingDto.getMusicGroupPaymentEntities();
 		List<MusicGroupSubjectGoodsGroup> musicGroupSubjectGoodsGroups = subFeeSettingDto.getMusicGroupSubjectGoodsGroups();
 		List<MusicGroupSubjectPlan> musicGroupSubjectPlans = subFeeSettingDto.getMusicGroupSubjectPlans();
-		String musicGroupId = idGeneratorService.generatorId()+"";
+		String musicGroupId = idGeneratorService.generatorId() + "";
 		musicGroup.setId(musicGroupId);
 		// 保存乐团基本信息
 		musicGroupDao.insert(musicGroup);
@@ -148,7 +165,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 			musicGroupSubjectGoodsGroupDao.insert(e);
 		});
 		// 新增聊天群
-//			ImGroupModel imGroupModel = new ImGroupModel(musicGroupId, musicGroup.getName());
+		// ImGroupModel imGroupModel = new ImGroupModel(musicGroupId, musicGroup.getName());
 		// 教务老师和运营主管加入群组
 		ImGroupMember[] imGroupMembers = { new ImGroupMember(musicGroup.getTeamTeacherId().toString()),
 				new ImGroupMember(musicGroup.getEducationalTeacherId().toString()) };
@@ -192,22 +209,25 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 		} else {
 			throw new BizException("乐团当前状态是{},不能取消", musicGroup.getStatus().getMsg());
 		}
-		
-		//查询是否有中间状态的缴费信息
+
+		// 查询是否有中间状态的缴费信息
 		List<StudentPaymentOrder> studentPaymentOrders = studentPaymentOrderDao.queryByDealStatus(musicGroupId, OrderTypeEnum.APPLY, DealStatusEnum.ING);
-		
-		if(studentPaymentOrders != null && studentPaymentOrders.size()>0){
+
+		if (studentPaymentOrders != null && studentPaymentOrders.size() > 0) {
 			throw new BizException("缴费存在交易中的数据,不能取消乐团");
 		}
-		
-		//查询已缴费信息
+
+		// 查询已缴费信息
 		studentPaymentOrders = studentPaymentOrderDao.queryByDealStatus(musicGroupId, OrderTypeEnum.APPLY, DealStatusEnum.SUCCESS);
 
 		// 退费
-		for(StudentPaymentOrder order : studentPaymentOrders){
+		for (StudentPaymentOrder order : studentPaymentOrders) {
 			sysUserCashAccountService.updateBalance(order.getUserId(), order.getActualAmount());
+			// 增加交易流水
+			sysUserCashAccountDetailService.addCashAccountDetail(order.getUserId(), order.getActualAmount(), "", "", PlatformCashAccountDetailTypeEnum.REFUNDS,
+					null, DealStatusEnum.SUCCESS, "取消乐团");
 		}
-		
+
 		return true;
 	}
 
@@ -299,18 +319,63 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 	}
 
 	@Override
-	public boolean quitMusicGroup(String musicGroupId, Integer userId) {
+	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+	public boolean applyQuitMusicGroup(String musicGroupId, SysUser sysUser) {
 		MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
 		if (musicGroup == null) {
 			throw new BizException("乐团不存在");
 		}
-		
-		classGroupStudentMapperDao.updateUserStatusByMusicGroupId(musicGroupId, userId, ClassGroupStudentStatusEnum.QUIT);
-		
+
+		MusicGroupQuit musicGroupQuit = new MusicGroupQuit();
+		musicGroupQuit.setCreateTime(new Date());
+		musicGroupQuit.setJoinDate(sysUser.getCreateTime());
+		musicGroupQuit.setMusicGroupId(musicGroupId);
+		musicGroupQuit.setUserId(sysUser.getId());
+		musicGroupQuit.setStatus(ApprovalStatus.PROCESSING);
+
+		musicGroupQuitDao.insert(musicGroupQuit);
 		return true;
 	}
 
 	@Override
+	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+	public boolean approveQuitMusicGroup(Long id, ApprovalStatus status, String reason) {
+		MusicGroupQuit musicGroupQuit = musicGroupQuitDao.get(id);
+		if (musicGroupQuit != null) {
+
+			String musicGroupId = musicGroupQuit.getMusicGroupId();
+			Integer userId = musicGroupQuit.getUserId();
+
+			musicGroupQuit.setStatus(status);
+			musicGroupQuit.setReason(reason);
+			musicGroupQuit.setQuitDate(new Date());
+			musicGroupQuitDao.update(musicGroupQuit);
+
+			if (status == ApprovalStatus.APPROVED) {
+				classGroupStudentMapperDao.updateUserStatusByMusicGroupId(musicGroupId, userId, ClassGroupStudentStatusEnum.QUIT);
+
+				// 判断乐器是否是租赁
+				StudentRegistration studentRegistration = studentRegistrationService.queryByUserIdAndMusicGroupId(userId, musicGroupId);
+				if (studentRegistration == null) {
+					throw new BizException("用户注册信息不存在");
+				}
+				Integer subjectId = studentRegistration.getActualSubjectId();
+				MusicGroupSubjectPlan musicGroupSubjectPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, subjectId);
+				if (musicGroupSubjectPlan == null) {
+					throw new BizException("乐团声部费用设置不存在");
+				}
+				if (musicGroupSubjectPlan.getDepositFee().doubleValue() > 0) {
+					// 增加交易流水
+					sysUserCashAccountDetailService.addCashAccountDetail(userId, musicGroupSubjectPlan.getDepositFee(), "", "",
+							PlatformCashAccountDetailTypeEnum.REFUNDS, null, DealStatusEnum.SUCCESS, "退出乐团");
+				}
+			}
+		}
+		return true;
+	}
+
+	@Override
+	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
 	public Map renew(String musicGroupId, Integer userId) {
 
 		MusicGroup musicGroup = this.get(musicGroupId);
@@ -345,39 +410,39 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 	public PageInfo<MusicGroup> queryMusicGroupPage(MusicGroupQueryInfo queryInfo) {
 		PageInfo<MusicGroup> musicGroupPageInfo = queryPage(queryInfo);
 		List<MusicGroup> musicGroupList = musicGroupPageInfo.getRows();
-		//获取学校编号列表
+		// 获取学校编号列表
 		Set<Integer> schoolIds = musicGroupList.stream().map(e -> e.getSchoolId()).collect(Collectors.toSet());
-		List<Map<Integer,String>> schoolNames =  schoolDao.queryNameByIds(schoolIds);
-		//获取相关学校名称map
-		Map<Integer,String> schoolNameMap = MapUtil.convertMybatisMap(schoolNames);
+		List<Map<Integer, String>> schoolNames = schoolDao.queryNameByIds(schoolIds);
+		// 获取相关学校名称map
+		Map<Integer, String> schoolNameMap = MapUtil.convertMybatisMap(schoolNames);
 
-		//获取教务老师编号列表
+		// 获取教务老师编号列表
 		Set<Integer> educationalTeacherIds = musicGroupList.stream().map(e -> e.getEducationalTeacherId()).collect(Collectors.toSet());
-		//获取相关老师的名字
-		List<Map<Integer,String>> educationalTeacherNames =  teacherDao.queryNameByIds(educationalTeacherIds);
-		Map<Integer,String> educationalTeacherNameMap = MapUtil.convertMybatisMap(educationalTeacherNames);
+		// 获取相关老师的名字
+		List<Map<Integer, String>> educationalTeacherNames = teacherDao.queryNameByIds(educationalTeacherIds);
+		Map<Integer, String> educationalTeacherNameMap = MapUtil.convertMybatisMap(educationalTeacherNames);
 
-		//获取运营主管编号列表
+		// 获取运营主管编号列表
 		Set<Integer> teamTeacherIds = musicGroupList.stream().map(e -> e.getTeamTeacherId()).collect(Collectors.toSet());
-		List<Map<Integer,String>> teamTeacherNames =  teacherDao.queryNameByIds(teamTeacherIds);
-		Map<Integer,String> teamTeacherNameMap = MapUtil.convertMybatisMap(teamTeacherNames);
+		List<Map<Integer, String>> teamTeacherNames = teacherDao.queryNameByIds(teamTeacherIds);
+		Map<Integer, String> teamTeacherNameMap = MapUtil.convertMybatisMap(teamTeacherNames);
 
-		//获取乐团编号列表
+		// 获取乐团编号列表
 		Set<String> musicGroupIds = musicGroupList.stream().map(e -> e.getId()).collect(Collectors.toSet());
-		//统计乐团在读人数
-		List<Map<String,Long>> payNums =  musicGroupDao.countPayNum(musicGroupIds);
-		Map<String,Long> payNumMap = MapUtil.convertMybatisMap(payNums);
+		// 统计乐团在读人数
+		List<Map<String, Long>> payNums = musicGroupDao.countPayNum(musicGroupIds);
+		Map<String, Long> payNumMap = MapUtil.convertMybatisMap(payNums);
 
-		//获取收费类型编号列表
+		// 获取收费类型编号列表
 		Set<Integer> chargeTypeIds = musicGroupList.stream().map(e -> e.getChargeTypeId()).collect(Collectors.toSet());
-		List<Map<Integer,String>> chargeTypeNames =  chargeTypeDao.queryNameByIds(chargeTypeIds);
-		Map<Integer,String> chargeTypeNameMap = MapUtil.convertMybatisMap(chargeTypeNames);
+		List<Map<Integer, String>> chargeTypeNames = chargeTypeDao.queryNameByIds(chargeTypeIds);
+		Map<Integer, String> chargeTypeNameMap = MapUtil.convertMybatisMap(chargeTypeNames);
 
-		musicGroupList.forEach(e->{
+		musicGroupList.forEach(e -> {
 			e.setSchoolName(schoolNameMap.get(e.getSchoolId()));
 			e.setEducationalTeacherName(educationalTeacherNameMap.get(e.getEducationalTeacherId()));
 			e.setTeamTeacherName(teamTeacherNameMap.get(e.getTeamTeacherId()));
-			e.setPayNum(payNumMap.get(e.getId())==null?0:payNumMap.get(e.getId()).intValue());
+			e.setPayNum(payNumMap.get(e.getId()) == null ? 0 : payNumMap.get(e.getId()).intValue());
 			e.setChargeTypeName(chargeTypeNameMap.get(e.getChargeTypeId()));
 		});
 		return musicGroupPageInfo;

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

@@ -19,5 +19,10 @@ public class SysConfigServiceImpl extends BaseServiceImpl<Long, SysConfig>  impl
 	public BaseDAO<Long, SysConfig> getDAO() {
 		return sysConfigDao;
 	}
+
+	@Override
+	public SysConfig findByParamName(String paramName) {
+		return sysConfigDao.findByParamName(paramName);
+	}
 	
 }

+ 53 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountDetailServiceImpl.java

@@ -1,27 +1,77 @@
 package com.ym.mec.biz.service.impl;
 
+import java.math.BigDecimal;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
+import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDetailDao;
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.TransTypeEnum;
 import com.ym.mec.biz.service.SysUserCashAccountDetailService;
+import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 
 @Service
-public class SysUserCashAccountDetailServiceImpl extends BaseServiceImpl<Long, SysUserCashAccountDetail>  implements SysUserCashAccountDetailService {
-	
+public class SysUserCashAccountDetailServiceImpl extends BaseServiceImpl<Long, SysUserCashAccountDetail> implements SysUserCashAccountDetailService {
+
 	@Autowired
 	private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
 
+	@Autowired
+	private SysUserCashAccountDao sysUserCashAccountDao;
+
+	@Autowired
+	private SysUserCashAccountService sysUserCashAccountService;
+
 	@Override
 	public BaseDAO<Long, SysUserCashAccountDetail> getDAO() {
 		return sysUserCashAccountDetailDao;
 	}
 
 	@Override
-	public SysUserCashAccountDetail selectDetailByTransNo(String transNo) {
+	public SysUserCashAccountDetail queryDetailByTransNo(String transNo) {
 		return sysUserCashAccountDetailDao.selectDetailByTransNo(transNo);
 	}
+
+	@Override
+	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+	public boolean addCashAccountDetail(Integer userId, BigDecimal amount, String origOrderId, String transNo, PlatformCashAccountDetailTypeEnum type,
+			TransTypeEnum transType, DealStatusEnum status, String comment) {
+
+		SysUserCashAccountDetail sysUserCashAccountDetail = new SysUserCashAccountDetail();
+		sysUserCashAccountDetail.setUserId(userId);
+		sysUserCashAccountDetail.setType(type);
+		sysUserCashAccountDetail.setStatus(status);
+		sysUserCashAccountDetail.setAmount(amount);
+		sysUserCashAccountDetail.setAttribute(origOrderId);
+		sysUserCashAccountDetail.setComment(comment);
+		sysUserCashAccountDetail.setTransNo(transNo);
+		sysUserCashAccountDetail.setTransType(transType);
+
+		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+		if (cashAccount == null) {
+			throw new BizException("用户[{}]现金账户不存在", userId);
+		}
+
+		if (DealStatusEnum.SUCCESS == status) {
+			sysUserCashAccountService.updateBalance(userId, amount);
+			sysUserCashAccountDetail.setBalance(cashAccount.getBalance().add(amount).doubleValue() > 0 ? cashAccount.getBalance().add(amount) : new BigDecimal(
+					0));
+		} else {
+			sysUserCashAccountDetail.setBalance(cashAccount.getBalance());
+		}
+
+		sysUserCashAccountDetailDao.insert(sysUserCashAccountDetail);
+
+		return true;
+	}
 }

+ 18 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java

@@ -10,14 +10,15 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountStatusEnum;
 import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 
 @Service
-public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysUserCashAccount>  implements SysUserCashAccountService {
-	
+public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysUserCashAccount> implements SysUserCashAccountService {
+
 	@Autowired
 	private SysUserCashAccountDao sysUserCashAccountDao;
 
@@ -29,17 +30,25 @@ public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysU
 	@Override
 	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
 	public boolean updateBalance(Integer userId, BigDecimal decimal) {
-		
+
 		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
-		if(cashAccount == null){
-			throw new BizException("用户[{}]现金账户不存在",userId);
+		if (cashAccount == null) {
+			throw new BizException("用户[{}]现金账户不存在", userId);
+		}
+
+		if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
+			throw new BizException("账户不可用");
 		}
-		
-		cashAccount.setBalance(cashAccount.getBalance().add(decimal));
+		BigDecimal balance = cashAccount.getBalance().add(decimal);
+		if (balance.doubleValue() < 0) {
+			throw new BizException("现金账户[{}]余额不足,可用余额剩{}元", userId, cashAccount.getBalance().doubleValue());
+		}
+
+		cashAccount.setBalance(balance);
 		cashAccount.setUpdateTime(new Date());
-		
+
 		sysUserCashAccountDao.update(cashAccount);
-		
+
 		return true;
 	}
 

+ 37 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -12,6 +12,7 @@ import com.ym.mec.biz.dal.enums.SignStatusEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.TeacherAttendanceQueryInfo;
 import com.ym.mec.biz.service.CourseHomeworkService;
+import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.TeacherAttendanceService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -43,6 +44,8 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	private SysUserFeignService sysUserFeignService;
 	@Autowired
 	private ClassGroupDao classGroupDao;
+	@Autowired
+	private CourseScheduleService courseScheduleService;
 
 	@Override
 	public BaseDAO<Long, TeacherAttendance> getDAO() {
@@ -65,37 +68,50 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 
 		TeacherAttendance teacherAttendance=teacherAttendanceDao.findByTeacherAttendanceInfo(user.getId().longValue(),teacherSignOutDto.getTeacherAttendanceInfo().getCourseScheduleId());
 
+		boolean isAttendance=false;
+
 		if(Objects.isNull(teacherAttendance)){
-			if(teacherSignOutDto.getTeacherAttendanceInfo().getStatus()==SignStatusEnum.SIGN_OUT){
-				throw new BizException("该课程还未签到,不能进行签退操作!");
-			}
 			teacherAttendance=teacherSignOutDto.getTeacherAttendanceInfo();
 			teacherAttendance.setTeacherId(Long.valueOf(user.getId()));
+		}else{
+			isAttendance=true;
 		}
 
 		CourseSchedule courseSchedule=new CourseSchedule();
-		TeacherAttendanceDto currentCourseDetail = courseScheduleDao.getCurrentCourseDetail(teacherAttendance.getCourseScheduleId());
+		TeacherAttendanceDto currentCourseDetail = courseScheduleDao.getCurrentCourseDetail(teacherSignOutDto.getTeacherAttendanceInfo().getCourseScheduleId());
+		if(Objects.isNull(currentCourseDetail)){
+			throw new BizException("课程不存在");
+		}
 		courseSchedule.setId(currentCourseDetail.getCourseScheduleId());
 
 		teacherAttendance.setMusicGroupId(currentCourseDetail.getMusicGroupId());
 		teacherAttendance.setClassGroupId(currentCourseDetail.getClassId());
 		Date date = new Date();
-		if(teacherAttendance.getStatus()!= SignStatusEnum.SIGN_OUT){
+		if(teacherSignOutDto.getTeacherAttendanceInfo().equals(SignStatusEnum.SIGN_IN.getCode())){
 
 			if (currentCourseDetail.getEndClassTime().before(date)){
 				throw new BizException("该课程已结束,不能进行签到!");
 			}
 
-			Long timeGap=(date.getTime()-currentCourseDetail.getStartClassTime().getTime())/1000/60;
-			if(timeGap<= ParamEnum.TEACHER_ATTENDANCE_TIME_GAP.getCode()){
+			YesOrNoEnum yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(currentCourseDetail, user.getId().longValue());
+
+			if(yesOrNoEnum==YesOrNoEnum.YES){
 				teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
 				result.put("signInStatus",YesOrNoEnum.YES.getCode());
 			}else{
-				if(StringUtils.isEmpty(teacherAttendance.getRemark())){
-					throw new BizException("当前为异常签到,请填写原因!");
+				Long timeGap=(date.getTime()-currentCourseDetail.getStartClassTime().getTime())/1000/60;
+				if(timeGap<= ParamEnum.TEACHER_ATTENDANCE_TIME_GAP.getCode()){
+					teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
+					result.put("signInStatus",YesOrNoEnum.YES.getCode());
+				}else{
+					if(StringUtils.isEmpty(teacherAttendance.getRemark())){
+						//当前为异常签到,请填写原因!
+						result.put("status",2);
+						return result;
+					}
+					teacherAttendance.setSignInStatus(YesOrNoEnum.NO);
+					result.put("signInStatus",YesOrNoEnum.NO.getCode());
 				}
-				teacherAttendance.setSignInStatus(YesOrNoEnum.NO);
-				result.put("signInStatus",YesOrNoEnum.NO.getCode());
 			}
 			teacherAttendance.setSignInTime(date);
 			teacherAttendanceDao.insert(teacherAttendance);
@@ -103,6 +119,9 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			if (currentCourseDetail.getEndClassTime().after(date)){
 				throw new BizException("该课程还未结束,不能进行签退!");
 			}
+			if(!Objects.isNull(teacherAttendance.getSignOutStatus())){
+				throw new BizException("该课程已签退!");
+			}
 			int i = DateUtil.hoursBetween(currentCourseDetail.getEndClassTime(), date);
 			if(i<=1){
 				teacherAttendance.setSignOutStatus(YesOrNoEnum.YES);
@@ -111,9 +130,13 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			}
 			teacherAttendance.setSignOutTime(date);
 			teacherAttendance.setCreateTime(date);
-			teacherAttendanceDao.update(teacherAttendance);
+			if(isAttendance){
+				teacherAttendanceDao.update(teacherAttendance);
+			}else{
+				teacherAttendanceDao.insert(teacherAttendance);
+			}
 		}
-		if(teacherAttendance.getStatus()==SignStatusEnum.SIGN_OUT){
+		if(teacherSignOutDto.getTeacherAttendanceInfo().getStatus().equals(SignStatusEnum.SIGN_OUT.getCode())){
 			//更新课次
 			ClassGroup classGroup=new ClassGroup();
 			classGroup.setId(currentCourseDetail.getClassId().intValue());
@@ -131,6 +154,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			studentCourseHomeworkDao.batchInsertStudentCourseHomeworkRecord(studentCourseHomeworks);
 		}
 
+		result.put("status",0);
 		result.put("currentTime",date);
 
 		return result;

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherSchoolServiceImpl.java

@@ -31,4 +31,6 @@ public class TeacherSchoolServiceImpl extends BaseServiceImpl<Long, TeacherSchoo
 		}
 		return teacherSchoolDao.findByTeacherId(teacherId);
 	}
+
+
 }

+ 46 - 19
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -35,6 +35,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	@Autowired
 	private ClassGroupDao classGroupDao;
 	@Autowired
+	private ClassGroupService classGroupService;
+	@Autowired
 	private VipGroupClassGroupMapperDao vipGroupClassGroupMapperDao;
 	@Autowired
 	private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
@@ -77,6 +79,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
     @Autowired
 	private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
+	@Autowired
+	private PayService payService;
 
 	@Override
 	public BaseDAO<Long, VipGroup> getDAO() {
@@ -382,10 +386,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     	TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(vipGroup.getUserId().longValue(),
 				vipGroup.getVipGroupCategoryId());
 
-		if(Objects.isNull(teacherDefaultVipGroupSalary)){
-			throw new BizException("课程形式不存在");
-		}
-
 		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
 
 		if(Objects.isNull(vipGroupActivity)){
@@ -394,6 +394,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
 
+		if(Objects.isNull(vipGroupSalarySettlementDto)){
+			throw new BizException("课酬结算方案错误");
+		}
+
 		Map<String,BigDecimal> results=new HashMap<>(1);
 
 		BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum());
@@ -404,6 +408,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		//教师课酬线上单课酬计算
 		switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
 			case TEACHER_DEFAULT:
+				if(Objects.isNull(teacherDefaultVipGroupSalary)){
+					throw new BizException("未设置教师默认课酬");
+				}
 				results.put("onlineTeacherSalary",teacherDefaultVipGroupSalary.getOfflineClassesSalary());
 				break;
 			case RATIO_DISCOUNT:
@@ -418,6 +425,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		//教师线下单课酬计算
 		switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
 			case TEACHER_DEFAULT:
+				if(Objects.isNull(teacherDefaultVipGroupSalary)){
+					throw new BizException("未设置教师默认课酬");
+				}
 				results.put("offlineTeacherSalary",teacherDefaultVipGroupSalary.getOfflineClassesSalary());
 				break;
 			case RATIO_DISCOUNT:
@@ -466,32 +476,60 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 	@Transactional(rollbackFor = Exception.class)
 	@Override
-	public void buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) {
+	public Map buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) throws Exception {
 		SysUser user = sysUserFeignService.queryUserInfo();
+
+		StudentPaymentOrder byStudentVipGroup = studentPaymentOrderDao.findByStudentVipGroup(vipGroupBuyParams.getVipGroupId(), user.getId().longValue());
+
+		if(Objects.nonNull(byStudentVipGroup)){
+			throw new BizException("订单已存在!");
+		}
+
 		VipGroup vipGroup = vipGroupDao.get(vipGroupBuyParams.getVipGroupId());
 
 		if(vipGroup.getStatus()!=VipGroupStatusEnum.APPLYING){
 			throw new BizException("该课程已结束报名!");
 		}
 
+		VipGroupClassGroupMapper vipGroupClassGroupMapper = vipGroupClassGroupMapperDao.findByVipGroupId(vipGroup.getId());
+
 		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
 		StudentPaymentOrder studentPaymentOrder=new StudentPaymentOrder();
 		studentPaymentOrder.setUserId(user.getId());
 		String orderNo=StringUtils.join(new String[]{user.getId().toString(),String.valueOf(System.currentTimeMillis())});
 		studentPaymentOrder.setOrderNo(orderNo);
 		studentPaymentOrder.setType(OrderTypeEnum.SMALL_CLASS_TO_BUY);
-		studentPaymentOrder.setExpectAmount(countVipGroupPredictFee(vipGroup,vipGroup.getOnlineClassesUnitPrice(),vipGroup.getOfflineClassesUnitPrice()).get("totalPrice"));
+		studentPaymentOrder.setExpectAmount(vipGroup.getTotalPrice());
 		if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.DISCOUNT){
 			studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount().multiply(new BigDecimal(vipGroupActivity.getAttribute1())));
 		}else{
 			studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount());
 		}
-		VipGroupClassGroupMapper vipGroupClassGroupMapper = vipGroupClassGroupMapperDao.findByVipGroupId(vipGroup.getId());
 		studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString());
 		studentPaymentOrder.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId());
 		studentPaymentOrderDao.insert(studentPaymentOrder);
 
+		StudentVipGroupPayment studentVipGroupPayment=new StudentVipGroupPayment();
+		studentVipGroupPayment.setUserId(user.getId());
+		studentVipGroupPayment.setVipGroupId(vipGroup.getId());
+		studentVipGroupPayment.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId());
+		studentVipGroupPayment.setStudentPaymentOrderId(studentPaymentOrder.getId());
+		studentVipGroupPaymentDao.insert(studentVipGroupPayment);
+
+		//更新班级人数,如果订单支付失败则减少
+		classGroupService.updateClassStudentNum(vipGroupClassGroupMapper.getClassGroupId().longValue(),1);
+
 		//生成回调地址
+		Map payMap = payService.getPayMap(
+				vipGroup.getTotalPrice(),
+				orderNo,
+				"https://pay.dayaedu.com/api/yqpay/notify",
+				"http://dev.dayaedu.com",
+				"vip课购买",
+				vipGroup.getName());
+
+		return payMap;
+
 	}
 
 	@Override
@@ -504,10 +542,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		VipGroup vipGroup = vipGroupDao.get(vipGroupId);
 
-		if(vipGroup.getStatus()!=VipGroupStatusEnum.APPLYING){
-			throw new BizException("该课程已结束报名!");
-		}
-
 		//生成学生单课缴费信息
 		courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentForVipGroup(vipGroupId,userId);
 
@@ -518,14 +552,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
 		studentPaymentOrderDao.update(studentPaymentOrder);
 
-		//生成缴费明细
-		StudentVipGroupPayment studentVipGroupPayment=new StudentVipGroupPayment();
-		studentVipGroupPayment.setUserId(userId.intValue());
-		studentVipGroupPayment.setVipGroupId(vipGroupId);
-		studentVipGroupPayment.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId());
-		studentVipGroupPayment.setStudentPaymentOrderId(studentPaymentOrder.getId());
-		studentVipGroupPaymentDao.insert(studentVipGroupPayment);
-
 		//将学生加入到班级,更新班级报名状态及人数信息
 		ClassGroup classGroup = classGroupDao.get(vipGroupClassGroupMapper.getClassGroupId());
 		int classStudents = classGroupDao.countClassStudent(vipGroupClassGroupMapper.getClassGroupId().longValue());
@@ -538,6 +564,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 	}
 
+	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void applyRefund(Long vipGroupId,Long studentId) {
 		SysUser sysUser=sysUserFeignService.queryUserInfo();

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

@@ -432,6 +432,22 @@
         FROM class_group_teacher_mapper cgtm
         WHERE FIND_IN_SET(cgtm.class_group_id_,#{classGroupIds}) GROUP BY cgtm.class_group_id_
     </select>
+    <select id="findByVipGroup" resultMap="ClassGroup">
+        SELECT
+            cg.*
+        FROM
+            vip_group_class_group_mapper vcgm
+            LEFT JOIN class_group cg ON vcgm.class_group_id_ = cg.id_
+            WHERE vcgm.vip_group_id_=#{vipGroupId}
+    </select>
+
+    <select id="lockClassGroup" resultMap="ClassGroup">
+        SELECT
+            cg.*
+        FROM
+            class_group cg
+            WHERE cg.id_=#{classGroupId} FOR UPDATE
+    </select>
 
     <!-- 增加实际学生人数 -->
     <update id="addStudentNum" parameterType="com.ym.mec.biz.dal.entity.ClassGroup">

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

@@ -94,6 +94,7 @@
     <insert id="classGroupTeachersInsert" parameterType="java.util.List">
         INSERT INTO class_group_teacher_mapper
         (id_,music_group_id_,class_group_id_,teacher_role_,user_id_,salary_,create_time_,update_time_)
+        VALUES
         <foreach collection="classGroupTeacherMapperList" item="item" index="index" separator=",">
             (#{item.id},#{item.musicGroupId},#{item.classGroupId},#{item.teacherRole},#{item.userId},#{item.salary},#{item.createTime},#{item.updateTime})
         </foreach>
@@ -109,4 +110,12 @@
             #{item.id}
         </foreach>
     </select>
+
+    <!-- 删除对应乐团老师关联关系 -->
+    <delete id="delMusicGroupTeacherMapper">
+        DELETE FROM class_group_teacher_mapper WHERE class_group_id_ IN
+        <foreach collection="classGroupTeacherMapperList" item="item" index="index" open="(" close=")" separator=",">
+            #{item.classGroupId}
+        </foreach>
+    </delete>
 </mapper>

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

@@ -82,6 +82,9 @@
                     #{subjectID}
                 </foreach>
             </if>
+            <if test="classType != null and classType!=''">
+                and class_group_type_ = #{classType}
+            </if>
         </where>
     </sql>
 

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

@@ -21,6 +21,8 @@
         <result column="teach_mode_" property="teachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="name_" property="name"/>
+        <result column="student_num_" property="studentNum"/>
+        <result column="leave_student_num_" property="leaveStudentNum"/>
     </resultMap>
 
     <resultMap type="com.ym.mec.biz.dal.dto.CourseScheduleDto" id="courseScheduleDto" extends="CourseSchedule">
@@ -31,6 +33,7 @@
         <result column="sign_in_status_" property="signInStatus"/>
         <result column="sign_out_status_" property="signOutStatus"/>
         <result column="seal_class_id_" property="sealClassId"/>
+        <result column="total_student_num_" property="totalStudentNum"/>
     </resultMap>
 
     <resultMap type="com.ym.mec.biz.dal.entity.StudentCourseScheduleRecordDto" id="studentCourseScheduleRecord">
@@ -67,16 +70,16 @@
         </selectKey>
         -->
         INSERT INTO course_schedule
-        (id_,class_group_id_,status_,subsidy_,class_date_,start_class_time_,end_class_time_,teacher_id_,actual_teacher_id_,create_time_,update_time_,type_,name_,teach_mode_)
-        VALUES(#{id},#{classGroupId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{subsidy},#{classDate},#{startClassTime},#{endClassTime},#{teacherId},#{teacherId},now(),now(),#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{name},#{teachMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+        (id_,class_group_id_,status_,subsidy_,class_date_,start_class_time_,end_class_time_,teacher_id_,actual_teacher_id_,create_time_,update_time_,type_,name_,teach_mode_,student_num_,leave_student_num_)
+        VALUES(#{id},#{classGroupId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{subsidy},#{classDate},#{startClassTime},#{endClassTime},#{teacherId},#{teacherId},now(),now(),#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{name},#{teachMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{studentNum},#{leaveStudentNum})
     </insert>
 
     <insert id="batchAddCourseSchedules" parameterType="java.util.List" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
         INSERT INTO course_schedule
-        (id_,class_group_id_,status_,subsidy_,class_date_,start_class_time_,end_class_time_,teacher_id_,actual_teacher_id_,create_time_,update_time_,type_,name_,teach_mode_)
+        (id_,class_group_id_,status_,subsidy_,class_date_,start_class_time_,end_class_time_,teacher_id_,actual_teacher_id_,create_time_,update_time_,type_,name_,teach_mode_,student_num_,leave_student_num_)
         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.teacherId},now(),now(),#{course.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.name},#{course.teachMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+            (#{course.id},#{course.classGroupId},#{course.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.subsidy},#{course.classDate},#{course.startClassTime},#{course.endClassTime},#{course.teacherId},#{course.teacherId},now(),now(),#{course.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.name},#{course.teachMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.studentNum},#{course.leaveStudentNum})
         </foreach>
     </insert>
 
@@ -114,8 +117,11 @@
             <if test="updateTime != null">
                 update_time_ = #{updateTime},
             </if>
-            <if test="name != null">
-                name_ = #{name},
+            <if test="studentNum != null">
+                student_num_ = #{studentNum},
+            </if>
+            <if test="leaveStudentNum != null">
+                leave_student_num_ = #{leaveStudentNum},
             </if>
         </set>
         WHERE id_ = #{id}
@@ -161,6 +167,8 @@
         <result property="schoolId" column="school_id_"/>
         <result property="address" column="address_"/>
         <result property="longitudeAndLatitude" column="longitude_latitude_"/>
+        <result property="teacherName" column="teacher_name_"/>
+        <result property="signInTime" column="sign_in_time_"/>
     </resultMap>
 
     <select id="getCurrentCourseDetail"
@@ -179,15 +187,50 @@
             mg.name_ music_group_name,
             s.id_ school_id_,
             s.address_,
-            s.longitude_latitude_
+            s.longitude_latitude_,
+            su.username_ teacher_name_,
+            ta.sign_in_time_
         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_
         LEFT JOIN school s ON mg.school_id_=s.id_
+        LEFT JOIN sys_user su ON cs.actual_teacher_id_=su.id_
+        LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_
         WHERE cs.id_= #{courseID}
     </select>
 
+    <select id="getTeacherCourseByDateSpeed"
+            resultMap="TeacherAttendanceViewUtilEntity">
+        SELECT
+            cs.id_ ,
+            cs.name_ course_schedule_name_,
+            cs.class_date_,
+            CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
+            CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
+            cs.status_ course_status_,
+            cg.id_ class_id,
+            cg.name_ class_name,
+            cs.type_ class_type,
+            mg.id_ music_group_id,
+            mg.name_ music_group_name,
+            s.id_ school_id_,
+            s.address_,
+            s.longitude_latitude_,
+            su.username_ teacher_name_,
+            ta.sign_in_time_
+        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_
+        LEFT JOIN school s ON mg.school_id_=s.id_
+        LEFT JOIN sys_user su ON cs.actual_teacher_id_=su.id_
+        LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_
+        WHERE cs.actual_teacher_id_= #{teacherId}
+        AND (cs.end_class_time_ BETWEEN #{startTime} AND #{endTime})
+        ORDER BY cs.id_ DESC LIMIT 1
+    </select>
+
     <resultMap id="studentAttendanceViewUtilEntity" type="com.ym.mec.biz.dal.dto.StudentAttendanceViewDto">
         <result property="classGroupId" column="class_group_id_"/>
         <result property="studentId" column="student_id_"/>
@@ -238,6 +281,9 @@
             CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
             CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
             cs.status_,
+            cs.student_num_,
+            cs.leave_student_num_,
+            cg.student_num_ total_student_num_,
 	        su.username_ teacher_name_,
 	        ta.sign_in_status_ attendance_status_
         FROM
@@ -300,8 +346,8 @@
             CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
             cs.status_,
 	        s.name_ school_name_,
-	        ta.sign_in_status_,
-	        ta.sign_out_status_,
+	        if(ta.sign_in_status_ IS NULL,0,1) sign_in_status_,
+	        if(ta.sign_out_status_ IS NULL,0,1) sign_out_status_,
 	        cs.teach_mode_
         FROM
             course_schedule cs
@@ -619,4 +665,12 @@
             </if>
         </where>
     </select>
+    <select id="findClassTypeByCourse" resultType="string">
+        SELECT
+            cg.type_
+        FROM
+            course_schedule cs
+            LEFT JOIN class_group cg ON cs.class_group_id_=cg.id_
+            WHERE cs.id_=#{courseScheduleId}
+    </select>
 </mapper>

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

@@ -159,7 +159,7 @@ create_time_ = #{createTime},
 				AND CONCAT(dgcp.course_date_,' ',dgcp.start_time_)&gt;=#{startTime}
 			</if>
 			<if test="startTime!=null and endTime!=null">
-				AND (CONCAT(dgcp.course_date_,' ',dgcp.start_time_) BETWEEN DATE_FORMAT(#{startTime},'%Y-%m-%d %H:%i') AND DATE_FORMAT(#{endTime},'%Y-%m-%d %H:%i'))
+				AND (CONCAT(dgcp.course_date_,' ',dgcp.start_time_) BETWEEN #{startTime} AND #{endTime})
 			</if>
 		</where>
 	</sql>
@@ -172,7 +172,13 @@ create_time_ = #{createTime},
 		t.introduction_,
 		s.name_ subject_name_,
 		COUNT(dgcgm.class_group_id_) number_of_classes_,
-		dgcp.*
+		dgcp.id_,
+		dgcp.demo_group_id_,
+		dgcp.create_time_,
+		dgcp.status_,
+		dgcp.course_date_,
+		CONCAT(dgcp.course_date_,' ',dgcp.start_time_) start_time_,
+		CONCAT(dgcp.course_date_,' ',dgcp.end_time_) end_time_
 		FROM
 		demo_group dg
 		LEFT JOIN demo_group_courses_plan dgcp ON dg.id_=dgcp.demo_group_id_

+ 60 - 50
mec-biz/src/main/resources/config/mybatis/MusicGroupQuitMapper.xml

@@ -1,12 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<!--
-这个文件是自动生成的。
-不要修改此文件。所有改动将在下次重新自动生成时丢失。
--->
+<!-- 这个文件是自动生成的。 不要修改此文件。所有改动将在下次重新自动生成时丢失。 -->
 <mapper namespace="com.ym.mec.biz.dal.dao.MusicGroupQuitDao">
-	
-	<resultMap type="com.ym.mec.biz.dal.entity.MusicGroupQuit" id="MusicGroupQuit">
+
+	<resultMap type="com.ym.mec.biz.dal.entity.MusicGroupQuit"
+		id="MusicGroupQuit">
 		<result column="id_" property="id" />
 		<result column="user_id_" property="userId" />
 		<result column="music_group_id_" property="musicGroupId" />
@@ -14,67 +12,79 @@
 		<result column="quit_date_" property="quitDate" />
 		<result column="create_time_" property="createTime" />
 		<result column="reason_" property="reason" />
+		<result column="status_" property="status"
+			typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler" />
 	</resultMap>
-	
+
 	<!-- 根据主键查询一条记录 -->
-	<select id="get" resultMap="MusicGroupQuit" >
-		SELECT * FROM music_group_quit WHERE id_ = #{id} 
+	<select id="get" resultMap="MusicGroupQuit">
+		SELECT * FROM
+		music_group_quit WHERE id_ = #{id}
 	</select>
-	
+
 	<!-- 全查询 -->
 	<select id="findAll" resultMap="MusicGroupQuit">
-		SELECT * FROM music_group_quit ORDER BY id_
+		SELECT * FROM music_group_quit
+		ORDER BY id_
 	</select>
-	
+
 	<!-- 向数据库增加一条记录 -->
-	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		<!--
-		<selectKey resultClass="int" keyProperty="id" > 
-		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
-		</selectKey>
-		-->
-		INSERT INTO music_group_quit (id_,user_id_,music_group_id_,join_date_,quit_date_,create_time_,reason_) VALUES(#{id},#{userId},#{musicGroupId},#{joinDate},#{quitDate},#{createTime},#{reason})
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit"
+		useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
+			AS ID FROM DUAL </selectKey> -->
+		INSERT INTO music_group_quit
+		(id_,user_id_,music_group_id_,join_date_,quit_date_,create_time_,reason_,status_)
+		VALUES(#{id},#{userId},#{musicGroupId},#{joinDate},#{quitDate},#{createTime},#{reason},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
 	</insert>
-	
+
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit">
-		UPDATE music_group_quit <set>
-<if test="userId != null">
-user_id_ = #{userId},
-</if>
-<if test="id != null">
-id_ = #{id},
-</if>
-<if test="joinDate != null">
-join_date_ = #{joinDate},
-</if>
-<if test="reason != null">
-reason_ = #{reason},
-</if>
-<if test="quitDate != null">
-quit_date_ = #{quitDate},
-</if>
-<if test="musicGroupId != null">
-music_group_id_ = #{musicGroupId},
-</if>
-<if test="createTime != null">
-create_time_ = #{createTime},
-</if>
-</set> WHERE id_ = #{id} 
+		UPDATE music_group_quit
+		<set>
+			<if test="userId != null">
+				user_id_ = #{userId},
+			</if>
+			<if test="id != null">
+				id_ = #{id},
+			</if>
+			<if test="joinDate != null">
+				join_date_ = #{joinDate},
+			</if>
+			<if test="reason != null">
+				reason_ = #{reason},
+			</if>
+			<if test="quitDate != null">
+				quit_date_ = #{quitDate},
+			</if>
+			<if test="musicGroupId != null">
+				music_group_id_ = #{musicGroupId},
+			</if>
+			<if test="createTime != null">
+				create_time_ = #{createTime},
+			</if>
+			<if test="status != null">
+				status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+			</if>
+		</set>
+		WHERE id_ = #{id}
 	</update>
-	
+
 	<!-- 根据主键删除一条记录 -->
-	<delete id="delete" >
-		DELETE FROM music_group_quit WHERE id_ = #{id} 
+	<delete id="delete">
+		DELETE FROM music_group_quit WHERE id_ =
+		#{id}
 	</delete>
-	
+
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="MusicGroupQuit" parameterType="map">
-		SELECT * FROM music_group_quit ORDER BY id_ <include refid="global.limit"/>
+		SELECT * FROM music_group_quit ORDER BY id_
+		<include refid="global.limit" />
 	</select>
-	
+
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM music_group_quit
+		SELECT COUNT(*) FROM
+		music_group_quit
 	</select>
 </mapper>

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

@@ -156,8 +156,8 @@
     <select id="countClassTime" resultType="java.lang.Integer">
         select count(*) from teacher_attendance where class_group_id_=#{classGroupId} for update
     </select>
-    <select id="findByTeacherAttendanceInfo" resultMap="teacherPersonalAttendance">
-        ELECT * FROM teacher_attendance WHERE teacher_id_=#{teacherId} AND course_schedule_id_=#{courseScheduleId}
+    <select id="findByTeacherAttendanceInfo" resultMap="TeacherAttendance">
+        SELECT * FROM teacher_attendance WHERE teacher_id_=#{teacherId} AND course_schedule_id_=#{courseScheduleId}
     </select>
 
 

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

@@ -31,6 +31,7 @@
         <result column="student_num_" property="studentNum"/>
         <result column="total_class_times_" property="totalClassTimes"/>
         <result column="current_class_times_" property="currentClassTimes"/>
+        <result column="vip_group_category_id_" property="vipGroupCategoryId"/>
         <result column="give_teach_mode_" property="giveTeachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
 
@@ -50,6 +51,7 @@
     </resultMap>
 
     <resultMap id="studentVipGroupDetailDto" type="com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto" extends="studentVipGroup">
+        <result column="total_class_times_" property="totalClassTimes"/>
         <result column="address_" property="address"/>
         <collection property="courseSchedules" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule" column="cs.id_"/>
     </resultMap>
@@ -349,14 +351,27 @@
     <select id="getVipGroupDetail" resultMap="studentVipGroupDetailDto">
         SELECT
             vg.*,
+            cg.total_class_times_,
             cg.expect_student_num_,
             cg.student_num_,
             su.username_ teacher_name_,
             su.avatar_,
             t.introduction_,
-            cs.id_ course_id_,
             s.name_ address_,
-            cs.*
+            cs.id_ course_id_,
+            cs.class_group_id_,
+            cs.status_,
+            cs.subsidy_,
+            cs.class_date_,
+            CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
+            CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
+            cs.teacher_id_,
+            cs.actual_teacher_id_,
+            cs.create_time_,
+            cs.update_time_,
+            cs.teach_mode_,
+            cs.type_,
+            cs.name_
         FROM
             vip_group vg
             LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_

+ 1 - 2
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java

@@ -180,8 +180,7 @@ public class MusicGroupController extends BaseController {
     @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String")})
 	public HttpResponseResult quitMusicGroup(String musicGroupId) throws Exception {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		Integer userId = sysUser.getId();
-		return succeed(musicGroupService.quitMusicGroup(musicGroupId, userId));
+		return succeed(musicGroupService.applyQuitMusicGroup(musicGroupId, sysUser));
 	}
 
 

+ 2 - 3
mec-student/src/main/java/com/ym/mec/student/controller/StudentVipGroupController.java

@@ -61,9 +61,8 @@ public class StudentVipGroupController extends BaseController {
 
     @ApiOperation(value = "vip课购买")
     @PostMapping("/buyVipGroup")
-    public Object buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams){
-        vipGroupService.buyVipGroup(vipGroupBuyParams);
-        return succeed();
+    public Object buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) throws Exception {
+        return succeed(vipGroupService.buyVipGroup(vipGroupBuyParams));
     }
 
     @ApiOperation(value = "vip课退课")

+ 32 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseHomeworkTemplateController.java

@@ -0,0 +1,32 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.biz.dal.page.CourseHomeWorkTemplateQueryInfo;
+import com.ym.mec.biz.service.CourseHomeworkTemplateService;
+import com.ym.mec.common.controller.BaseController;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/18
+ */
+@RequestMapping("courseHomeworkTemplate")
+@Api(tags = "作业模板")
+@RestController
+public class CourseHomeworkTemplateController extends BaseController {
+
+
+    @Autowired
+    private CourseHomeworkTemplateService courseHomeworkTemplateService;
+
+    @ApiOperation(value = "分页查询作业模板列表")
+    @PostMapping("/findByClassType")
+    public Object findByClassType(CourseHomeWorkTemplateQueryInfo queryInfo){
+        return succeed(courseHomeworkTemplateService.findByClassType(queryInfo));
+    }
+
+}

+ 25 - 10
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherAttendanceController.java

@@ -1,19 +1,18 @@
 package com.ym.mec.teacher.controller;
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-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 com.ym.mec.biz.dal.dto.TeacherSignOutDto;
+import com.ym.mec.biz.dal.entity.StudentAttendance;
+import com.ym.mec.biz.dal.page.StudentAttendanceQueryInfo;
 import com.ym.mec.biz.dal.page.TeacherAttendanceQueryInfo;
+import com.ym.mec.biz.service.StudentAttendanceService;
 import com.ym.mec.biz.service.TeacherAttendanceService;
 import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 @RequestMapping("teacherAttendance")
 @Api(tags = "教师签到服务")
@@ -23,6 +22,9 @@ public class TeacherAttendanceController extends BaseController {
     @Autowired
     private TeacherAttendanceService teacherAttendanceService;
 
+    @Autowired
+    private StudentAttendanceService studentAttendanceService;
+
     @ApiOperation(value = "新增教师签到")
     @PostMapping("/add")
     public Object add(@RequestBody TeacherSignOutDto teacherSignOutDto) {
@@ -41,4 +43,17 @@ public class TeacherAttendanceController extends BaseController {
         return teacherAttendanceService.getTeacherPersonalAttendances(queryInfo);
     }
 
+    @ApiOperation(value = "根据班级ID获取当前课程的学生")
+    @GetMapping("/getCurrentCourseStudents")
+    public Object getCurrentCourseStudents(@RequestBody StudentAttendanceQueryInfo queryInfo){
+        return succeed(studentAttendanceService.getCurrentCourseStudents(queryInfo));
+    }
+
+    @ApiOperation(value = "点名完成")
+    @PostMapping("/addStudentAttendances")
+    public Object addStudentAttendances(@RequestBody List<StudentAttendance> studentAttendances){
+        studentAttendanceService.addStudentAttendances(studentAttendances);
+        return succeed();
+    }
+
 }

+ 1 - 2
mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java

@@ -22,8 +22,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 
 	@Override
 	public void configure(HttpSecurity http) throws Exception {
-		http.csrf().disable().authorizeRequests().antMatchers("/task/**").hasIpAddress("0.0.0.0/0")
-				.antMatchers("/v2/api-docs", "/classGroup/findMusicGroupClassTeacherSalary").permitAll().anyRequest().authenticated().and().httpBasic();
+		http.csrf().disable().authorizeRequests().antMatchers("/v2/api-docs","/classGroup/findMusicGroupClassTeacherSalary","/classGroup/findMusicGroupClassTeacher","/teacher/findTeachers").permitAll().anyRequest().authenticated().and().httpBasic();
 	}
 
 	@Override

+ 13 - 11
mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java

@@ -7,6 +7,7 @@ import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
 import com.ym.mec.biz.service.ClassGroupService;
 import com.ym.mec.biz.service.ClassGroupTeacherMapperService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.*;
 import org.apache.commons.lang3.StringUtils;
@@ -79,38 +80,39 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "合奏班相关班级获取")
     @GetMapping("/findClassGroupAboutMix")
-    public Object findClassGroupAboutMix(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId,
+    public HttpResponseResult findClassGroupAboutMix(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId,
                                          @ApiParam(value = "班级编号", required = false) Integer mixClassGroupId) {
         return succeed(classGroupService.findClassGroup(musicGroupId, mixClassGroupId));
     }
 
     @ApiOperation(value = "乐团单技班列表")
     @GetMapping("/findMusicGroupClass")
-    public Object findMusicGroupClass(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId) {
+    public HttpResponseResult findMusicGroupClass(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId) {
         return succeed(classGroupService.findAllNormalClassGroupByMusicGroupId(musicGroupId));
     }
 
     @ApiOperation(value = "获取未分班的单技班列表")
     @GetMapping("/findNoClassSubjects")
-    public Object findNoClassSubjects(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId) {
+    public HttpResponseResult findNoClassSubjects(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId) {
         return succeed(classGroupService.findNoClassSubjects(musicGroupId));
     }
 
     @ApiOperation(value = "乐团合奏班列表")
     @GetMapping("/findMixMusicGroupClass")
-    public Object findMixMusicGroupClass(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId) {
+    public HttpResponseResult findMixMusicGroupClass(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId) {
         return succeed(classGroupService.findAllMixClassGroupByMusicGroupId(musicGroupId));
     }
 
     @ApiOperation(value = "乐团所有班列表")
     @GetMapping("/findAllClassGroupByMusicGroup")
-    public Object findAllClassGroupByMusicGroup(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId) {
+    public HttpResponseResult findAllClassGroupByMusicGroup(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId) {
         return succeed(classGroupService.findAllClassGroupByMusicGroup(musicGroupId));
     }
 
     @ApiOperation(value = "乐团班级老师设置")
     @PostMapping("/addClassGroupTeacher")
-    public Object addClassGroupTeacher(@ApiParam(value = "乐团班级老师json", required = true) @RequestParam List<ClassGroupTeacherMapper> classGroupTeacherMapperList) {
+    @ApiParam(value = "乐团班级老师json", required = true)
+    public HttpResponseResult addClassGroupTeacher(@RequestBody List<ClassGroupTeacherMapper> classGroupTeacherMapperList) {
         if (classGroupTeacherMapperList.size() <= 0) {
             return failed("参数不合法");
         }
@@ -119,15 +121,15 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "获取乐团班级老师")
     @GetMapping("/findMusicGroupClassTeacher")
-    public Object findMusicGroupClassTeacher(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId) {
-        return succeed(classGroupService.getClassGroupAndTeachers(musicGroupId));
+    public HttpResponseResult findMusicGroupClassTeacher(@ApiParam(value = "乐团编号", required = true) @RequestParam String musicGroupId) {
+        return succeed(classGroupService.getClassGroupAndTeachers(musicGroupId,"NORMAL,MIX"));
     }
 
     @ApiOperation(value = "获取乐团班级老师课酬")
     @GetMapping("/findMusicGroupClassTeacherSalary")
     @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String"),
             @ApiImplicitParam(name = "type", value = "结算类型(1-基准课酬,4-梯度课酬)", required = true, dataType = "Integer")})
-    public Object findMusicGroupClassTeacherSalary(String musicGroupId, SalarySettlementTypeEnum type) {
+    public HttpResponseResult findMusicGroupClassTeacherSalary(String musicGroupId, SalarySettlementTypeEnum type) {
         try {
             return succeed(classGroupService.getClassGroupAndTeacherSalary(musicGroupId, type));
         } catch (Exception e) {
@@ -137,8 +139,8 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "乐团班级老师课酬确认")
     @PostMapping("/setClassGroupTeacherSalary")
-    @ApiImplicitParams({@ApiImplicitParam(name = "classGroupTeacherMapperList", value = "乐团班级老师json", required = true, dataType = "String")})
-    public Object setClassGroupTeacherSalary(@RequestParam List<ClassGroupTeacherMapper> classGroupTeacherMapperList) throws Exception {
+    @ApiParam(value = "乐团班级老师<包含相应课酬>json", required = true)
+    public Object setClassGroupTeacherSalary(@RequestBody List<ClassGroupTeacherMapper> classGroupTeacherMapperList) throws Exception {
         if (classGroupTeacherMapperList.size() <= 0) {
             return failed("参数不合法");
         }

+ 56 - 0
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupQuitController.java

@@ -0,0 +1,56 @@
+package com.ym.mec.web.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.biz.dal.entity.ApprovalStatus;
+import com.ym.mec.biz.service.MusicGroupQuitService;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.QueryInfo;
+
+@RequestMapping("musicGroupQuit")
+@Api(tags = "退团服务")
+@RestController
+public class MusicGroupQuitController extends BaseController {
+
+	@Autowired
+	private MusicGroupService musicGroupService;
+	
+	@Autowired
+	private MusicGroupQuitService musicGroupQuitService;
+	
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@ApiOperation(value = "分页查询")
+	@GetMapping("/queryPage")
+	public HttpResponseResult queryPage(QueryInfo queryInfo) throws Exception {
+		return succeed(musicGroupQuitService.queryPage(queryInfo));
+	}
+	
+	@ApiOperation(value = "单查询")
+	@GetMapping("/query")
+	public HttpResponseResult query(Long id) throws Exception {
+		return succeed(musicGroupQuitService.get(id));
+	}
+
+	@ApiOperation(value = "退团")
+	@PostMapping("/quitMusicGroup")
+	@ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "退团申请id", required = true, dataType = "Long"),
+			@ApiImplicitParam(name = "status", value = "审批状态(APPROVED, DENIED, PROCESSING)", required = true, dataType = "String"),
+			@ApiImplicitParam(name = "reason", value = "原因", required = true, dataType = "String") })
+	public HttpResponseResult quitMusicGroup(Long id, ApprovalStatus status, String reason) throws Exception {
+		return succeed(musicGroupService.approveQuitMusicGroup(id, status, reason));
+	}
+}

+ 9 - 0
mec-web/src/main/java/com/ym/mec/web/controller/SysConfigController.java

@@ -66,4 +66,13 @@ public class SysConfigController extends BaseController {
 			return failed("请检查输入的ID");
 		return succeed(sysConfigService.get(id));
 	}
+
+	@ApiOperation(value = "查询参数")
+	@GetMapping(value = "queryByParamName")
+	public Object queryByParamName(String paramName) {
+		if(StringUtils.isBlank(paramName)){
+			return failed("参数不能为空");
+		}
+		return succeed(sysConfigService.findByParamName(paramName));
+	}
 }

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/student/StudentCashAccountDetailController.java

@@ -60,7 +60,7 @@ public class StudentCashAccountDetailController extends BaseController {
         if(studentRecharge == null){
             return failed("交易不存在");
         }
-        SysUserCashAccountDetail sysUserCashAccountDetail = sysUserCashAccountDetailService.selectDetailByTransNo(transNo);
+        SysUserCashAccountDetail sysUserCashAccountDetail = sysUserCashAccountDetailService.queryDetailByTransNo(transNo);
         if(sysUserCashAccountDetail == null){
             return failed("交易不存在");
         }