瀏覽代碼

按班级类型查找班级

周箭河 5 年之前
父節點
當前提交
9c015d1823
共有 70 個文件被更改,包括 1117 次插入625 次删除
  1. 2 2
      cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml
  2. 25 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  3. 0 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupStudentMapperDao.java
  4. 25 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  5. 0 9
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DemoGroupClassGroupMapperDao.java
  6. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java
  7. 13 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserCashAccountDao.java
  8. 0 37
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupClassGroupMapperDao.java
  9. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java
  10. 12 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java
  11. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupApplyDto.java
  12. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupStudentDto.java
  13. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ClassGroup.java
  14. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ClassGroupStudentMapper.java
  15. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ClassGroupTeacherMapper.java
  16. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseHomework.java
  17. 25 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java
  18. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleStudentPayment.java
  19. 25 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleTeacherSalary.java
  20. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentAttendance.java
  21. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrder.java
  22. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherAttendance.java
  23. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/GroupType.java
  24. 14 3
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  25. 3 5
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupStudentMapperService.java
  26. 11 3
      mec-biz/src/main/java/com/ym/mec/biz/service/SysUserCashAccountService.java
  27. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  28. 46 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  29. 9 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  30. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupTeacherMapperServiceImpl.java
  31. 18 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  32. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  33. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  34. 0 23
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DemoGroupClassGroupMapperServiceImpl.java
  35. 15 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DemoGroupServiceImpl.java
  36. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  37. 32 40
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  38. 9 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  39. 13 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  40. 10 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  41. 31 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java
  42. 59 55
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  43. 0 23
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupClassGroupMapperServiceImpl.java
  44. 173 42
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  45. 71 47
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  46. 6 2
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  47. 6 2
      mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml
  48. 10 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherSalaryMapper.xml
  49. 5 1
      mec-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml
  50. 70 30
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  51. 11 3
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  52. 13 7
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  53. 0 68
      mec-biz/src/main/resources/config/mybatis/DemoGroupClassGroupMapperMapper.xml
  54. 4 5
      mec-biz/src/main/resources/config/mybatis/DemoGroupMapper.xml
  55. 44 4
      mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  56. 5 9
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  57. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml
  58. 6 2
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  59. 2 2
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  60. 6 0
      mec-biz/src/main/resources/config/mybatis/SysUserCashAccountMapper.xml
  61. 8 4
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  62. 0 92
      mec-biz/src/main/resources/config/mybatis/VipGroupClassGroupMapperMapper.xml
  63. 40 31
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  64. 4 4
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java
  65. 2 2
      mec-student/src/main/java/com/ym/mec/student/controller/ClassGroupController.java
  66. 3 2
      mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java
  67. 2 1
      mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupStudentController.java
  68. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/StudentRegistrationController.java
  69. 15 7
      mec-web/src/main/java/com/ym/mec/web/controller/SysUserCashAccountController.java
  70. 24 4
      mec-web/src/main/java/com/ym/mec/web/controller/VipGroupManageController.java

+ 2 - 2
cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml

@@ -51,8 +51,8 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.cms.dal.entity.SysNewsInformation" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO sys_news_information (id_,title_,content_,cover_image_,type_,status_,create_time_,update_time_,link_url_,href_target_,order_,del_flag_,href_target_)
-		VALUES(#{id},#{title},#{content},#{coverImage},#{type},#{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),now(),#{linkUrl},#{hrefTarget},#{order},0,#{hrefTarget})
+		INSERT INTO sys_news_information (id_,title_,content_,cover_image_,type_,status_,create_time_,update_time_,link_url_,href_target_,order_,del_flag_)
+		VALUES(#{id},#{title},#{content},#{coverImage},#{type},#{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),now(),#{linkUrl},#{hrefTarget},#{order},0)
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->

+ 25 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -14,7 +14,6 @@ import java.util.Set;
 
 public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
 
-
     /**
      * 查询老师乐团课课程
      *
@@ -434,11 +433,35 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
      */
     int batchSoftDelete(@Param("classGroupIds") List<Integer> classGroupIds);
 
+
+    /*
+     * @describe 根据乐团编号和类型获取班级
+     * @author Joburgess
+     * @date 2019/11/17
+     * @param musicGroupId: 编号
+     * @param groupType: 类型
+     * @return com.ym.mec.biz.dal.entity.ClassGroup
+     */
+    ClassGroup findByMusicGroupAndType(@Param("musicGroupId") String musicGroupId,
+                                       @Param("groupType") String groupType);
+
+    /**
+     * @param musicGroupIds: 编号列表
+     * @param groupType:     类型
+     * @return com.ym.mec.biz.dal.entity.ClassGroup
+     * @describe 根据乐团编号和类型获取班级
+     * @author Joburgess
+     * @date 2019/11/17
+     */
+    List<ClassGroup> findByMusicGroupsAndType(@Param("musicGroupIds") List<String> musicGroupIds,
+                                              @Param("groupType") String groupType);
+
     /**
      * 按类型获取班级
+     *
      * @param musicGroupId
      * @param type
      * @return
      */
-    List<ClassGroupTeachersDto> findClassGroupByType(String musicGroupId,ClassGroupTypeEnum type);
+    List<ClassGroupTeachersDto> findClassGroupByType(String musicGroupId, ClassGroupTypeEnum type);
 }

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

@@ -12,7 +12,6 @@ import java.util.List;
 import java.util.Map;
 
 public interface ClassGroupStudentMapperDao extends BaseDAO<Long, ClassGroupStudentMapper> {
-
     /**
      * 批量插入学生
      *

+ 25 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -5,9 +5,11 @@ import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
 import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.ym.mec.biz.dal.entity.StudentAttendance;
 import com.ym.mec.biz.dal.entity.StudentCourseScheduleRecordDto;
 import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.common.dal.BaseDAO;
+
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Date;
@@ -425,8 +427,10 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @param endTime   结束时间
      * @return
      */
-    List<CourseSchedule> queryTeacherCourseScheduleListByTimeRangeAndType(@Param("teacherId") Integer teacherId, @Param("type") CourseScheduleType type,
-                                                                          @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+    List<CourseSchedule> queryTeacherCourseScheduleListByTimeRangeAndType(@Param("teacherId") Integer teacherId,
+                                                                          @Param("type") CourseScheduleType type,
+                                                                          @Param("startTime") Date startTime,
+                                                                          @Param("endTime") Date endTime);
 
     /**
      * 查询班级未开始的课程
@@ -461,7 +465,8 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @author Joburgess
      * @date 2019/10/31
      */
-    List<CourseSchedule> findByDateZone(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
+    List<CourseSchedule> findByDateZone(@Param("startTime") Date startTime,
+                                        @Param("endTime") Date endTime);
 
     /**
      * 查询学生明天的课程数
@@ -532,6 +537,17 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     List<CourseSchedule> findByClassGroup(@Param("classGroupId") Integer classGroupId);
 
     /**
+     * @describe 根据班级以及课程状态获取课程计划
+     * @author Joburgess
+     * @date 2019/11/16
+     * @param classGroupId: 班级编号
+     * @param status: 状态
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
+     */
+    List<CourseSchedule> findByClassGroupAndStatus(@Param("classGroupId") Integer classGroupId,
+                                                   @Param("status") String status);
+
+    /**
      * @param classGroupIds: 班级编号
      * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
      * @describe 根据班级获取课程计划
@@ -574,4 +590,10 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @return
      */
     int deleteCourseSchedulesByClassGroupIds(@Param("classGroupIds") List<Integer> classGroupIds);
+    
+    /**
+     * 查询所有未签到的学生信息
+     * @return
+     */
+    List<StudentAttendance> queryUnsignedStudentList();
 }

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

@@ -1,9 +0,0 @@
-package com.ym.mec.biz.dal.dao;
-
-import com.ym.mec.biz.dal.entity.DemoGroupClassGroupMapper;
-import com.ym.mec.common.dal.BaseDAO;
-
-public interface DemoGroupClassGroupMapperDao extends BaseDAO<Long, DemoGroupClassGroupMapper> {
-
-	
-}

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

@@ -22,6 +22,8 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
      * 批量插入学生上课签到情况
      */
     int addStudentAttendances(List<StudentAttendance> studentAttendances);
+    
+    int batchUpdate(List<StudentAttendance> studentAttendances);
 
     /**
      * @describe 根据课程删除对应的点名记录

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

@@ -2,6 +2,9 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface SysUserCashAccountDao extends BaseDAO<Integer, SysUserCashAccount> {
 	
@@ -12,4 +15,13 @@ public interface SysUserCashAccountDao extends BaseDAO<Integer, SysUserCashAccou
 	 */
 	SysUserCashAccount getLocked(Integer userId);
 
-}
+	/**
+	 * @describe 根据用户编号获取现金账户信息
+	 * @author Joburgess
+	 * @date 2019/11/17
+	 * @param userIds: 用户编号列表
+	 * @return java.util.List<com.ym.mec.biz.dal.entity.SysUserCashAccount>
+	 */
+	List<SysUserCashAccount> findByUserIds(@Param("userIds") List<Integer> userIds);
+
+}

+ 0 - 37
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupClassGroupMapperDao.java

@@ -1,37 +0,0 @@
-package com.ym.mec.biz.dal.dao;
-
-import com.ym.mec.biz.dal.entity.ClassGroup;
-import com.ym.mec.biz.dal.entity.VipGroupClassGroupMapper;
-import com.ym.mec.common.dal.BaseDAO;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-public interface VipGroupClassGroupMapperDao extends BaseDAO<Long, VipGroupClassGroupMapper> {
-
-    /**
-     * @Author: Joburgess
-     * @Date: 2019/10/2
-     * 根据vip课获取对应班级
-     */
-	VipGroupClassGroupMapper findByVipGroupId(Long vipGroupId);
-
-	/**
-	 * @describe 更据vip课获取关联的班级
-	 * @author Joburgess
-	 * @date 2019/10/20
-	 * @param vipGroupId: vip课编号
-	 * @return com.ym.mec.biz.dal.entity.ClassGroup
-	 */
-	ClassGroup findClassGroupByVipGroup(Long vipGroupId);
-
-	/**
-	 * @describe 根据vip课获取关联的班级
-	 * @author Joburgess
-	 * @date 2019/11/15
-	 * @param vipGroupIds: VIP课编号列表
-	 * @return java.util.List<com.ym.mec.biz.dal.entity.ClassGroup>
-	 */
-	List<ClassGroup> findClassGroupsByVipGroups(@Param("vipGroupIds") List<Long> vipGroupIds);
-
-}

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

@@ -42,6 +42,16 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 */
 	List<VipGroupStudentDto> findVipGroupStudents(Map<String, Object> params);
 
+	/**
+	 * @describe 获取还有课程余额的学员
+	 * @author Joburgess
+	 * @date 2019/11/16
+	 * @param params:
+	 * @return java.util.List<com.ym.mec.biz.dal.dto.VipGroupStudentDto>
+	 */
+	List<VipGroupStudentDto> findHaveCourseBalanceStudents(Map<String, Object> params);
+	int countHaveCourseBalanceStudentNum(Map<String, Object> params);
+
 	int countVipGroupStudents(Map<String, Object> params);
 
 	/**
@@ -263,4 +273,6 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 */
 	List<VipGroup> findNoCreateSuccessVipGroup();
 
+
+
 }

+ 12 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java

@@ -3,8 +3,8 @@ package com.ym.mec.biz.dal.dto;
 import com.ym.mec.common.enums.UserGenderEnum;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
 import java.util.Date;
-import java.util.List;
 
 /**
  * @Author Joburgess
@@ -36,6 +36,17 @@ public class StudentManageListDto {
     @ApiModelProperty(value = "年级",required = false)
     private String currentGrade;
 
+    @ApiModelProperty(value = "课程余额")
+    private BigDecimal courseBalance;
+
+    public BigDecimal getCourseBalance() {
+        return courseBalance;
+    }
+
+    public void setCourseBalance(BigDecimal courseBalance) {
+        this.courseBalance = courseBalance;
+    }
+
     public String getCurrentClass() {
         return currentClass;
     }

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupApplyDto.java

@@ -17,7 +17,15 @@ public class VipGroupApplyDto {
     @ApiModelProperty(value = "课程计划列表",required = false)
     private List<CourseSchedule> courseSchedules;
 
+    private String studentIds;
 
+    public String getStudentIds() {
+        return studentIds;
+    }
+
+    public void setStudentIds(String studentIds) {
+        this.studentIds = studentIds;
+    }
 
     public VipGroupApplyBaseInfoDto getVipGroupApplyBaseInfo() {
         return vipGroupApplyBaseInfo;

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

@@ -14,12 +14,23 @@ public class VipGroupStudentDto {
     @ApiModelProperty(value = "用户名称")
     private String userName;
 
+    @ApiModelProperty(value = "手机号")
+    private String phone;
+
     @ApiModelProperty(value = "课时总数")
     private Integer totalClassTimes;
 
     @ApiModelProperty(value = "当前课时")
     private Integer currentClassTimes;
 
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
     public Long getId() {
         return id;
     }

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

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 
 /**
@@ -15,6 +16,8 @@ public class ClassGroup {
 	/**  */
 	@ApiModelProperty(value = "班级编号", required = false)
 	private Integer id;
+	
+	private GroupType groupType;
 
 	/**  */
 	@ApiModelProperty(value = "乐团编号", required = true)
@@ -113,6 +116,14 @@ public class ClassGroup {
 		return this.id;
 	}
 
+	public GroupType getGroupType() {
+		return groupType;
+	}
+
+	public void setGroupType(GroupType groupType) {
+		this.groupType = groupType;
+	}
+
 	public void setMusicGroupId(String musicGroupId) {
 		this.musicGroupId = musicGroupId;
 	}

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ClassGroupStudentMapper.java

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
 
 /**
  * 对应数据库表(class_group_student_mapper):
@@ -13,6 +14,8 @@ public class ClassGroupStudentMapper {
 
 	/**  */
 	private Long id;
+	
+	private GroupType groupType;
 
 	/** 乐团id */
 	@ApiModelProperty(value = "班级编号",required = false)
@@ -50,6 +53,13 @@ public class ClassGroupStudentMapper {
 		this.status = ClassGroupStudentStatusEnum.NORMAL;
 	}
 
+	public ClassGroupStudentMapper(String musicGroupId, int classGroupId, Integer userId, ClassGroupStudentStatusEnum status) {
+		this.musicGroupId = musicGroupId;
+		this.classGroupId = classGroupId;
+		this.userId = userId;
+		this.status = status;
+	}
+
 	public ClassGroupStudentStatusEnum getStatus() {
 		return status;
 	}
@@ -70,6 +80,14 @@ public class ClassGroupStudentMapper {
 		this.classGroupId = classGroupId;
 	}
 	
+	public GroupType getGroupType() {
+		return groupType;
+	}
+
+	public void setGroupType(GroupType groupType) {
+		this.groupType = groupType;
+	}
+
 	public int getClassGroupId(){
 		return this.classGroupId;
 	}

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachTypeEnum;
 
 import io.swagger.annotations.ApiModelProperty;
@@ -17,6 +18,8 @@ public class ClassGroupTeacherMapper {
 	/**  */
 	private Long id;
 	
+	private GroupType groupType;
+	
 	/**  */
 	@ApiModelProperty(value = "乐团编号",required = false)
 	private String musicGroupId;
@@ -57,6 +60,14 @@ public class ClassGroupTeacherMapper {
 		return this.id;
 	}
 			
+	public GroupType getGroupType() {
+		return groupType;
+	}
+
+	public void setGroupType(GroupType groupType) {
+		this.groupType = groupType;
+	}
+
 	public void setMusicGroupId(String musicGroupId){
 		this.musicGroupId = musicGroupId;
 	}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseHomework.java

@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModelProperty;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
+import com.ym.mec.biz.dal.enums.GroupType;
+
 import java.util.Date;
 
 /**
@@ -14,6 +16,8 @@ public class CourseHomework {
 	/**  */
 	private Long id;
 	
+	private GroupType groupType;
+	
 	/**  */
 	private Long courseScheduleId;
 	
@@ -80,6 +84,14 @@ public class CourseHomework {
 		return this.id;
 	}
 			
+	public GroupType getGroupType() {
+		return groupType;
+	}
+
+	public void setGroupType(GroupType groupType) {
+		this.groupType = groupType;
+	}
+
 	public void setCourseScheduleId(Long courseScheduleId){
 		this.courseScheduleId = courseScheduleId;
 	}

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

@@ -3,9 +3,12 @@ package com.ym.mec.biz.dal.entity;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.enums.CourseStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import com.ym.mec.common.enums.BaseEnum;
+
 import io.swagger.annotations.ApiModelProperty;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
@@ -51,6 +54,12 @@ public class CourseSchedule {
 
 	/**  */
 	private Long id;
+	
+	private GroupType groupType;
+	
+	/**  */
+	@ApiModelProperty(value = "乐团编号",required = false)
+	private String musicGroupId;
 
 	/** 班级编号 */
 	@ApiModelProperty(value = "班级编号", required = false)
@@ -194,6 +203,22 @@ public class CourseSchedule {
 		return this.id;
 	}
 
+	public GroupType getGroupType() {
+		return groupType;
+	}
+
+	public void setGroupType(GroupType groupType) {
+		this.groupType = groupType;
+	}
+
+	public String getMusicGroupId() {
+		return musicGroupId;
+	}
+
+	public void setMusicGroupId(String musicGroupId) {
+		this.musicGroupId = musicGroupId;
+	}
+
 	public void setClassGroupId(Integer classGroupId) {
 		this.classGroupId = classGroupId;
 	}

+ 26 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleStudentPayment.java

@@ -2,6 +2,10 @@ package com.ym.mec.biz.dal.entity;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
+import com.ym.mec.biz.dal.enums.GroupType;
+
+import io.swagger.annotations.ApiModelProperty;
+
 import java.math.BigDecimal;
 
 /**
@@ -12,6 +16,12 @@ public class CourseScheduleStudentPayment {
 	/**  */
 	private Long id;
 	
+	private GroupType groupType;
+	
+	/**  */
+	@ApiModelProperty(value = "乐团编号",required = false)
+	private String musicGroupId;
+	
 	/**  */
 	private Long courseScheduleId;
 	
@@ -53,6 +63,22 @@ public class CourseScheduleStudentPayment {
 		return this.id;
 	}
 			
+	public GroupType getGroupType() {
+		return groupType;
+	}
+
+	public void setGroupType(GroupType groupType) {
+		this.groupType = groupType;
+	}
+
+	public String getMusicGroupId() {
+		return musicGroupId;
+	}
+
+	public void setMusicGroupId(String musicGroupId) {
+		this.musicGroupId = musicGroupId;
+	}
+
 	public void setCourseScheduleId(Long courseScheduleId){
 		this.courseScheduleId = courseScheduleId;
 	}

+ 25 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleTeacherSalary.java

@@ -1,7 +1,10 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachTypeEnum;
+
 import io.swagger.annotations.ApiModelProperty;
+
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.math.BigDecimal;
@@ -14,6 +17,12 @@ public class CourseScheduleTeacherSalary {
 	/**  */
 	private Long id;
 	
+	private GroupType groupType;
+	
+	/**  */
+	@ApiModelProperty(value = "乐团编号",required = false)
+	private String musicGroupId;
+	
 	/**  */
 	private Long courseScheduleId;
 	
@@ -86,6 +95,22 @@ public class CourseScheduleTeacherSalary {
 		return this.id;
 	}
 			
+	public GroupType getGroupType() {
+		return groupType;
+	}
+
+	public void setGroupType(GroupType groupType) {
+		this.groupType = groupType;
+	}
+
+	public String getMusicGroupId() {
+		return musicGroupId;
+	}
+
+	public void setMusicGroupId(String musicGroupId) {
+		this.musicGroupId = musicGroupId;
+	}
+
 	public void setCourseScheduleId(Long courseScheduleId){
 		this.courseScheduleId = courseScheduleId;
 	}

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
 
 import io.swagger.annotations.ApiModelProperty;
@@ -14,6 +15,8 @@ public class StudentAttendance {
 	/**  */
 	private Long id;
 	
+	private GroupType groupType;
+	
 	/** 乐团 */
 	@ApiModelProperty(value = "乐团",required = false)
 	private String musicGroupId;
@@ -64,6 +67,14 @@ public class StudentAttendance {
 		return this.id;
 	}
 			
+	public GroupType getGroupType() {
+		return groupType;
+	}
+
+	public void setGroupType(GroupType groupType) {
+		this.groupType = groupType;
+	}
+
 	public void setMusicGroupId(String musicGroupId){
 		this.musicGroupId = musicGroupId;
 	}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrder.java

@@ -9,8 +9,10 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelTypeEnum;
+
 import org.springframework.data.annotation.Version;
 
 /**
@@ -20,6 +22,8 @@ public class StudentPaymentOrder {
 
 	/**  */
 	private Long id;
+	
+	private GroupType groupType;
 
 	@Version
 	private Integer version;
@@ -97,6 +101,14 @@ public class StudentPaymentOrder {
 		return this.id;
 	}
 			
+	public GroupType getGroupType() {
+		return groupType;
+	}
+
+	public void setGroupType(GroupType groupType) {
+		this.groupType = groupType;
+	}
+
 	public void setUserId(Integer userId){
 		this.userId = userId;
 	}

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

@@ -1,7 +1,10 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+
 import io.swagger.annotations.ApiModelProperty;
+
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.util.Date;
@@ -14,6 +17,8 @@ public class TeacherAttendance {
 	/**  */
 	private Long id;
 	
+	private GroupType groupType;
+	
 	/**  */
 	@ApiModelProperty(value = "教师编号",required = false)
 	private Integer teacherId;
@@ -113,6 +118,14 @@ public class TeacherAttendance {
 		this.id = id;
 	}
 
+	public GroupType getGroupType() {
+		return groupType;
+	}
+
+	public void setGroupType(GroupType groupType) {
+		this.groupType = groupType;
+	}
+
 	public Integer getTeacherId() {
 		return teacherId;
 	}

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/GroupType.java

@@ -0,0 +1,23 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+public enum GroupType implements BaseEnum<String, GroupType> {
+	MUSIC("乐团课"), VIP("VIP课"), DEMO("试听课");
+
+	private String desc;
+
+	private GroupType(String desc) {
+		this.desc = desc;
+	}
+
+	@Override
+	public String getCode() {
+		return name();
+	}
+
+	public String getDesc() {
+		return desc;
+	}
+
+}

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
 import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentPayLogQueryInfo;
@@ -66,7 +67,7 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * @param classGroup
      * @return
      */
-    ClassGroup addClassGroup(ClassGroup classGroup) throws Exception;
+    ClassGroup addClassGroup(ClassGroup classGroup,GroupType groupType) throws Exception;
 
     /**
      * 添加合奏班
@@ -167,7 +168,7 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * @param userId
      * @return
      */
-    ClassGroup addStudent(ClassGroup classGroup,Integer userId);
+    ClassGroup addStudent(ClassGroup classGroup, Integer userId, GroupType groupType);
 
     /**
      * 获取未分配合奏的单技班列表
@@ -306,6 +307,17 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      */
     int batchUpdateClassCourseTimes(List<Integer> classGroupIds);
 
+    /*
+     * @describe 将学生加入到班级
+     * @author Joburgess
+     * @date 2019/11/16
+     * @param musicGroupId: 乐团或者VIP课编号
+     * @param classGroupId: 班级编号
+     * @param studentIds: 学生编号列表
+     * @return void
+     */
+    void addStudentIntoClassGroup(String musicGroupId,Integer classGroupId,List<Integer> studentIds);
+
     /**
      * 根据乐团id,班级类型获取班级和老师
      * @param musicGroupId
@@ -313,5 +325,4 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * @return
      */
     List<ClassGroupTeachersDto> getClassGroupAndTeacherByType(String musicGroupId, ClassGroupTypeEnum type);
-
 }

+ 3 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupStudentMapperService.java

@@ -1,13 +1,11 @@
 package com.ym.mec.biz.service;
 
-import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.common.service.BaseService;
 
-import org.apache.ibatis.annotations.Param;
-
 import java.util.List;
 
 public interface ClassGroupStudentMapperService extends BaseService<Long, ClassGroupStudentMapper> {
@@ -53,5 +51,5 @@ public interface ClassGroupStudentMapperService extends BaseService<Long, ClassG
      * @return
      * @throws Exception
      */
-    boolean addStudents(Integer classGroupId,String userIdsStr) throws Exception;
-}
+    boolean addStudents(Integer classGroupId, String userIdsStr, GroupType groupType) throws Exception;
+}

+ 11 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/SysUserCashAccountService.java

@@ -1,10 +1,10 @@
 package com.ym.mec.biz.service;
 
-import java.math.BigDecimal;
-
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.common.service.BaseService;
 
+import java.math.BigDecimal;
+
 public interface SysUserCashAccountService extends BaseService<Integer, SysUserCashAccount> {
 
 	/**
@@ -16,9 +16,17 @@ public interface SysUserCashAccountService extends BaseService<Integer, SysUserC
 	boolean updateBalance(Integer userId, BigDecimal decimal);
 
 	/**
+	 * 更新指定用户的账户课程余额
+	 * @param userId 用户编号
+	 * @param decimal 交易金额(支持负数)
+	 * @return
+	 */
+	boolean updateCourseBalance(Integer userId, BigDecimal decimal);
+
+	/**
 	 * 将课程余额转入到可用余额
 	 * @param userId
 	 * @return
 	 */
 	boolean transferCourseBalanceToBalance(Integer userId);
-}
+}

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

@@ -99,6 +99,15 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
     PageInfo findVipGroupStudents(VipGroupQueryInfo queryInfo);
 
     /**
+     * @describe 获取还有课程余额的学员
+     * @author Joburgess
+     * @date 2019/11/16
+     * @param queryInfo:
+     * @return com.ym.mec.common.page.PageInfo
+     */
+    PageInfo findHaveCourseBalanceStudents(VipGroupQueryInfo queryInfo);
+
+    /**
      * @Author: Joburgess
      * @Date: 2019/10/3
      * @params [vipGroupId]

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

@@ -144,7 +144,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public ClassGroup addClassGroup(ClassGroup classGroup) throws Exception {
+    public ClassGroup addClassGroup(ClassGroup classGroup, GroupType groupType) throws Exception {
         String userIds = classGroup.getUserIds();
         if (userIds == null || userIds.isEmpty()) throw new Exception("班级学生不能为空");
 
@@ -169,6 +169,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             classGroupStudentMapper.setUserId(Integer.parseInt(userId));
             classGroupStudentMapper.setCreateTime(date);
             classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
+            classGroupStudentMapper.setGroupType(GroupType.MUSIC);
+            classGroupStudentMapper.setGroupType(groupType);
             classGroupStudentList.add(classGroupStudentMapper);
 
             StudentRegistration studentRegistration = new StudentRegistration();
@@ -208,6 +210,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         classGroup.setSubjectIdList(subjectIds);
         classGroup.setName(name);
         classGroup.setType(ClassGroupTypeEnum.MIX);
+        classGroup.setGroupType(GroupType.MUSIC);
         classGroup.setExpectStudentNum(studentNum);
         classGroup.setStudentNum(studentNum);
         classGroup.setCreateTime(date);
@@ -226,6 +229,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             mixClassGroupStudentMapper.setUserId(classGroupStudentMapper.getUserId());
             mixClassGroupStudentMapper.setCreateTime(date);
             mixClassGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
+            mixClassGroupStudentMapper.setGroupType(GroupType.MUSIC);
             mixClassGroupStudentMappers.add(mixClassGroupStudentMapper);
 
             imGroupMemberList.add(new ImGroupMember(classGroupStudentMapper.getUserId().toString()));
@@ -294,6 +298,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             classGroupTeacherMapper.setClassGroupId(highClassGroup.getId());
             classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.BISHOP);
             classGroupTeacherMapper.setUserId(highClassGroup.getUserId());
+            classGroupTeacherMapper.setGroupType(GroupType.MUSIC);
             classGroupTeacherMapper.setCreateTime(date);
             classGroupTeacherMapper.setUpdateTime(date);
             classGroupTeacherMapperService.insert(classGroupTeacherMapper);
@@ -330,6 +335,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     courseSchedule.setUpdateTime(date);
                     courseSchedule.setTeachMode(TeachModeEnum.OFFLINE);
                     courseSchedule.setType(CourseSchedule.CourseScheduleType.HIGH);
+                    courseSchedule.setGroupType(GroupType.MUSIC);
                     courseSchedule.setName(courseScheduleName + "-" + CourseSchedule.CourseScheduleType.HIGH.getMsg());
                     courseScheduleList.add(courseSchedule);
                     times++;
@@ -612,7 +618,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public ClassGroup addStudent(ClassGroup classGroup, Integer userId) {
+    public ClassGroup addStudent(ClassGroup classGroup, Integer userId, GroupType groupType) {
         Date date = new Date();
         //1、增加班级人数
         classGroup.setCreateTime(date);
@@ -623,6 +629,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         classGroupStudentMapper.setClassGroupId(classGroup.getId());
         classGroupStudentMapper.setUserId(userId);
         classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
+        classGroupStudentMapper.setGroupType(groupType);
         classGroupStudentMapper.setCreateTime(date);
         classGroupStudentMapperDao.insert(classGroupStudentMapper);
 
@@ -632,6 +639,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
         for (CourseSchedule courseSchedule : courseScheduleList) {
             CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+            courseScheduleStudentPayment.setGroupType(classGroup.getGroupType());
+            courseScheduleStudentPayment.setMusicGroupId(classGroup.getMusicGroupId());
             courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
             courseScheduleStudentPayment.setUserId(userId);
             courseScheduleStudentPayment.setExpectPrice(coursePrice);
@@ -921,6 +930,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         classGroup.setStudentNum(studentList.size());
         classGroup.setType(ClassGroupTypeEnum.NORMAL);
         classGroup.setDelFlag(YesOrNoEnum.NO);
+        classGroup.setGroupType(GroupType.MUSIC);
         classGroup.setCurrentClassTimes(0);
         classGroup.setTotalClassTimes(classGroup4MixDto.getCourseTimes());
         classGroup.setCreateTime(date);
@@ -940,7 +950,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             classGroupStudentMapper.setUserId(studentRegistration.getUserId());
             classGroupStudentMapper.setCreateTime(date);
             classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
-
+            classGroupStudentMapper.setGroupType(GroupType.MUSIC);
             classGroupStudentMapperList.add(classGroupStudentMapper);
         }
         classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMapperList);
@@ -1003,6 +1013,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 courseSchedule.setUpdateTime(date);
                 courseSchedule.setTeachMode(TeachModeEnum.OFFLINE);
                 courseSchedule.setType(classGroup4MixDto.getCourseType());
+                courseSchedule.setGroupType(GroupType.MUSIC);
                 courseSchedule.setName(subjectNames + "-" + CourseSchedule.CourseScheduleType.SINGLE.getMsg());
 
                 courseScheduleDao.insert(courseSchedule);
@@ -1036,6 +1047,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
                     CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                     courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
+                    courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
+                    courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
                     courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                     courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
                     courseScheduleTeacherSalary.setExpectSalary(salary);
@@ -1046,6 +1059,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 }
                 for (StudentRegistration studentRegistration : studentList) {
                     CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+                    courseScheduleStudentPayment.setGroupType(classGroup.getGroupType());
+                    courseScheduleStudentPayment.setMusicGroupId(classGroup.getMusicGroupId());
                     courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
                     courseScheduleStudentPayment.setUserId(studentRegistration.getUserId());
                     courseScheduleStudentPayment.setExpectPrice(expectPrice);
@@ -1125,6 +1140,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         classGroup.setExpectStudentNum(studentList.size());
         classGroup.setStudentNum(studentList.size());
         classGroup.setType(ClassGroupTypeEnum.NORMAL);
+        classGroup.setGroupType(GroupType.MUSIC);
         classGroup.setDelFlag(YesOrNoEnum.NO);
         classGroup.setCreateTime(date);
         classGroup.setUpdateTime(date);
@@ -1142,7 +1158,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             classGroupStudentMapper.setUserId(studentRegistration.getUserId());
             classGroupStudentMapper.setCreateTime(date);
             classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
-
+            classGroupStudentMapper.setGroupType(GroupType.MUSIC);
             classGroupStudentMapperList.add(classGroupStudentMapper);
         }
         classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMapperList);
@@ -1205,6 +1221,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 courseSchedule.setTeachMode(TeachModeEnum.OFFLINE);
                 courseSchedule.setType(classGroup4MixDto.getCourseType());
                 courseSchedule.setName(subjectNames + "-" + CourseSchedule.CourseScheduleType.SINGLE.getMsg());
+                courseSchedule.setGroupType(GroupType.MUSIC);
 
                 courseScheduleDao.insert(courseSchedule);
 
@@ -1237,6 +1254,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
                     CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                     courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
+                    courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
+                    courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
                     courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                     courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
                     courseScheduleTeacherSalary.setExpectSalary(salary);
@@ -1247,6 +1266,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 }
                 for (StudentRegistration studentRegistration : studentList) {
                     CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+                    courseScheduleStudentPayment.setGroupType(classGroup.getGroupType());
+                    courseScheduleStudentPayment.setMusicGroupId(classGroup.getMusicGroupId());
                     courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
                     courseScheduleStudentPayment.setUserId(studentRegistration.getUserId());
                     courseScheduleStudentPayment.setExpectPrice(expectPrice);
@@ -1324,6 +1345,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         classGroup.setExpectStudentNum(studentList.size());
         classGroup.setStudentNum(studentList.size());
         classGroup.setType(ClassGroupTypeEnum.SNAP);
+        classGroup.setGroupType(GroupType.MUSIC);
         classGroup.setDelFlag(YesOrNoEnum.NO);
         classGroup.setTotalClassTimes(classGroup4MixDto.getCourseTimes());
         classGroup.setCurrentClassTimes(0);
@@ -1341,7 +1363,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             classGroupStudentMapper.setUserId(studentRegistration.getUserId());
             classGroupStudentMapper.setCreateTime(date);
             classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
-
+            classGroupStudentMapper.setGroupType(GroupType.MUSIC);
             classGroupStudentMapperList.add(classGroupStudentMapper);
         }
         classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMapperList);
@@ -1403,6 +1425,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 courseSchedule.setUpdateTime(date);
                 courseSchedule.setTeachMode(TeachModeEnum.OFFLINE);
                 courseSchedule.setType(classGroup4MixDto.getCourseType());
+                courseSchedule.setGroupType(GroupType.MUSIC);
                 courseSchedule.setName(subjectNames + "-" + CourseSchedule.CourseScheduleType.SINGLE.getMsg());
 
                 courseScheduleDao.insert(courseSchedule);
@@ -1436,6 +1459,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
                     CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                     courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
+                    courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
+                    courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
                     courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                     courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
                     courseScheduleTeacherSalary.setExpectSalary(salary);
@@ -1446,6 +1471,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 }
                 for (StudentRegistration studentRegistration : studentList) {
                     CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+                    courseScheduleStudentPayment.setGroupType(classGroup.getGroupType());
+                    courseScheduleStudentPayment.setMusicGroupId(classGroup.getMusicGroupId());
                     courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
                     courseScheduleStudentPayment.setUserId(studentRegistration.getUserId());
                     courseScheduleStudentPayment.setExpectPrice(expectPrice);
@@ -1626,10 +1653,22 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         return classGroupDao.batchUpdateClassGroupCourseTimes(classGroupCourseTimesMap);
     }
 
+
+    @Transactional(rollbackFor = Exception.class)
+    public void addStudentIntoClassGroup(String musicGroupId, Integer classGroupId, List<Integer> studentIds) {
+        List<ClassGroupStudentMapper> classGroupStudentMappers=new ArrayList<>();
+        for (Integer studentId : studentIds) {
+            ClassGroupStudentMapper classGroupStudentMapper=new ClassGroupStudentMapper(musicGroupId,classGroupId,studentId,ClassGroupStudentStatusEnum.NORMAL);
+            classGroupStudentMapper.setGroupType(GroupType.VIP);
+            classGroupStudentMappers.add(classGroupStudentMapper);
+        }
+        classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMappers);
+    }
+
     @Override
     public List<ClassGroupTeachersDto> getClassGroupAndTeacherByType(String musicGroupId, ClassGroupTypeEnum type) {
-        List<ClassGroupTeachersDto> classGroups = classGroupDao.findClassGroupByType(musicGroupId,type);
-        if(classGroups.size() == 0){
+        List<ClassGroupTeachersDto> classGroups = classGroupDao.findClassGroupByType(musicGroupId, type);
+        if (classGroups.size() == 0) {
             return null;
         }
         String classGroupIds = classGroups.stream().map(classGroup -> classGroup.getId().toString()).collect(Collectors.joining(","));

+ 9 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java

@@ -4,6 +4,7 @@ import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupMember;
@@ -111,6 +112,8 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
         List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
         for (CourseSchedule courseSchedule : courseScheduleList) {
             CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+            courseScheduleStudentPayment.setGroupType(courseSchedule.getGroupType());
+            courseScheduleStudentPayment.setMusicGroupId(courseSchedule.getMusicGroupId());
             courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
             courseScheduleStudentPayment.setUserId(userId);
             courseScheduleStudentPayment.setExpectPrice(coursePrice);
@@ -129,7 +132,7 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean addStudents(Integer classGroupId, String userIdsStr) throws Exception {
+    public boolean addStudents(Integer classGroupId, String userIdsStr, GroupType groupType) throws Exception {
         ClassGroup classGroup = classGroupService.get(classGroupId);
         if (classGroup == null) {
             throw new Exception("添加学员的班级不存在");
@@ -148,6 +151,8 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
             classGroupStudentMapper.setUserId(Integer.parseInt(userIdStr));
             classGroupStudentMapper.setCreateTime(nowDate);
             classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
+            classGroupStudentMapper.setGroupType(GroupType.MUSIC);
+            classGroupStudentMapper.setGroupType(groupType);
             classGroupStudentMappers.add(classGroupStudentMapper);
             if (classGroup.getType().equals(ClassGroupTypeEnum.NORMAL)) {
                 StudentRegistration studentRegistration = studentRegistrationService.queryByUserIdAndMusicGroupId(Integer.parseInt(userIdStr), classGroup.getMusicGroupId());
@@ -186,6 +191,8 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
         for (CourseSchedule courseSchedule : courseScheduleList) {
             for (String userIdStr : userIdStrSet) {
                 CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+                courseScheduleStudentPayment.setGroupType(classGroup.getGroupType());
+                courseScheduleStudentPayment.setMusicGroupId(classGroup.getMusicGroupId());
                 courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
                 courseScheduleStudentPayment.setUserId(Integer.parseInt(userIdStr));
                 courseScheduleStudentPayment.setExpectPrice(coursePrice);
@@ -203,4 +210,4 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
         courseScheduleStudentPaymentService.batchInsert(courseScheduleStudentPayments);
         return true;
     }
-}
+}

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

@@ -179,6 +179,8 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
                 //课程与老师薪水表
                 CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                 courseScheduleTeacherSalary.setCourseScheduleId(classGroupNoStartCourseSchedule.getId());
+                courseScheduleTeacherSalary.setGroupType(classGroupNoStartCourseSchedule.getGroupType());
+                courseScheduleTeacherSalary.setMusicGroupId(classGroupNoStartCourseSchedule.getMusicGroupId());
                 courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                 courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
                 courseScheduleTeacherSalary.setExpectSalary(salary);

+ 18 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -925,17 +925,28 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 	@Override
 	public boolean updateCourseScheduleToOverStatus() {
+
+		Date date = new Date();
+		List<StudentAttendance> studentAttendanceList = courseScheduleDao.queryUnsignedStudentList();
+		for (StudentAttendance studentAttendance : studentAttendanceList) {
+			studentAttendance.setStatus(StudentAttendanceStatusEnum.TRUANT);
+			studentAttendance.setCreateTime(date);
+		}
+
+		if (studentAttendanceList != null && studentAttendanceList.size() > 0) {
+			studentAttendanceDao.batchUpdate(studentAttendanceList);
+		}
+
 		List<CourseSchedule> list = courseScheduleDao.queryFinishedWithNoUpdateStatus();
 
 		List<CourseSchedule> updateList = new ArrayList<CourseSchedule>();
-		Date date = new Date();
 		List<Integer> classGroups = new ArrayList<Integer>();
 		for (CourseSchedule courseSchedule : list) {
 			courseSchedule.setStatus(CourseStatusEnum.OVER);
 			courseSchedule.setUpdateTime(date);
 			updateList.add(courseSchedule);
-			
-			if(!classGroups.contains(courseSchedule.getClassGroupId())){
+
+			if (!classGroups.contains(courseSchedule.getClassGroupId())) {
 				classGroups.add(courseSchedule.getClassGroupId());
 			}
 		}
@@ -943,12 +954,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		if (updateList.size() > 0) {
 			courseScheduleDao.batchUpdate(updateList);
 		}
-		
-		//更新班级课次
-		if(classGroups.size()>0){
+
+		// 更新班级课次
+		if (classGroups.size() > 0) {
 			classGroupService.batchIncreaseClassTimes(classGroups);
 		}
-		
+
 		return true;
 	}
 

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

@@ -60,6 +60,8 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 				//创建学生课程应缴费记录
 				CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
 				courseScheduleStudentPayment.setUserId(userId);
+	            courseScheduleStudentPayment.setGroupType(courseSchedules.get(i).getGroupType());
+	            courseScheduleStudentPayment.setMusicGroupId(courseSchedules.get(i).getMusicGroupId());
 				courseScheduleStudentPayment.setCourseScheduleId(courseSchedules.get(i).getId());
 				courseScheduleStudentPayment.setClassGroupId(courseSchedules.get(i).getClassGroupId());
 

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

@@ -90,6 +90,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                 }
                 courseScheduleTeacherSalary.setCourseScheduleId(courseSchedules.get(i).getId());
+                courseScheduleTeacherSalary.setGroupType(courseSchedules.get(i).getGroupType());
+                courseScheduleTeacherSalary.setMusicGroupId(courseSchedules.get(i).getMusicGroupId());
                 courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
                 courseScheduleTeacherSalary.setUserId(courseSchedules.get(i).getActualTeacherId().intValue());
                 courseScheduleTeacherSalary.setClassGroupId(courseSchedules.get(i).getClassGroupId());
@@ -154,6 +156,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 collect = teacherAttendancesTemp.stream().map(TeacherAttendance::getTeacherId).collect(Collectors.toList());
             }
             TeacherAttendance teacherAttendance=new TeacherAttendance();
+            teacherAttendance.setGroupType(courseScheduleTeacherSalary.getGroupType());
             if(Objects.nonNull(classGroup)){
                 teacherAttendance.setClassGroupId(classGroup.getId());
                 teacherAttendance.setMusicGroupId(classGroup.getMusicGroupId());
@@ -199,7 +202,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         //需更新学生课程缴费记录
         List<CourseScheduleStudentPayment> updateStudentPayments = new ArrayList<>();
 
-        //用户账户自己变动信息列表
+        //用户账户资金变动信息列表
         List<SysUserCashAccountDetail> userCashAccountDetails = new ArrayList<>();
 
         //处理课酬信息

+ 0 - 23
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DemoGroupClassGroupMapperServiceImpl.java

@@ -1,23 +0,0 @@
-package com.ym.mec.biz.service.impl;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.ym.mec.biz.dal.dao.DemoGroupClassGroupMapperDao;
-import com.ym.mec.biz.dal.entity.DemoGroupClassGroupMapper;
-import com.ym.mec.biz.service.DemoGroupClassGroupMapperService;
-import com.ym.mec.common.dal.BaseDAO;
-import com.ym.mec.common.service.impl.BaseServiceImpl;
-
-@Service
-public class DemoGroupClassGroupMapperServiceImpl extends BaseServiceImpl<Long, DemoGroupClassGroupMapper>  implements DemoGroupClassGroupMapperService {
-	
-	@Autowired
-	private DemoGroupClassGroupMapperDao demoGroupClassGroupMapperDao;
-
-	@Override
-	public BaseDAO<Long, DemoGroupClassGroupMapper> getDAO() {
-		return demoGroupClassGroupMapperDao;
-	}
-	
-}

+ 15 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DemoGroupServiceImpl.java

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.dto.EducationDemoGroupListDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.StudentDemoGroupQueryInfo;
@@ -15,12 +16,14 @@ import com.ym.mec.biz.dal.page.TeacherManageDemoGroupQueryInfo;
 import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.DemoGroupService;
 import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.TeacherAttendanceService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -41,8 +44,6 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 	@Autowired
 	private ClassGroupDao classGroupDao;
 	@Autowired
-	private DemoGroupClassGroupMapperDao demoGroupClassGroupMapperDao;
-	@Autowired
 	private DemoGroupCoursesPlanDao demoGroupCoursesPlanDao;
 	@Autowired
 	private CourseScheduleDao courseScheduleDao;
@@ -61,6 +62,8 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 	private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
 	@Autowired
 	private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
+	@Autowired
+	private TeacherAttendanceService teacherAttendanceService;
 
 	@Override
 	public BaseDAO<Long, DemoGroup> getDAO() {
@@ -199,21 +202,17 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 		classGroup.setType(ClassGroupTypeEnum.DEMO);
 		classGroup.setDelFlag(YesOrNoEnum.NO);
 		classGroup.setTotalClassTimes(1);
+		classGroup.setGroupType(GroupType.DEMO);
 		classGroup.setCreateTime(now);
 		classGroup.setUpdateTime(now);
 		classGroupDao.insert(classGroup);
 
-		//创建试听课班级映射
-		DemoGroupClassGroupMapper demoGroupClassGroupMapper=new DemoGroupClassGroupMapper();
-		demoGroupClassGroupMapper.setDemoGroupId(demoGroup.getId());
-		demoGroupClassGroupMapper.setClassGroupId(classGroup.getId());
-		demoGroupClassGroupMapperDao.insert(demoGroupClassGroupMapper);
-
 		//创建班级学生映射
 		ClassGroupStudentMapper classGroupStudentMapper=new ClassGroupStudentMapper();
 		classGroupStudentMapper.setClassGroupId(classGroup.getId());
 		classGroupStudentMapper.setUserId(user.getId());
 		classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
+		classGroupStudentMapper.setGroupType(GroupType.DEMO);
 		classGroupStudentMapperDao.insert(classGroupStudentMapper);
 
 		//创建课程
@@ -233,6 +232,8 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 
 		CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
 		courseScheduleStudentPayment.setUserId(user.getId());
+        courseScheduleStudentPayment.setGroupType(courseScheduleByDemoGroup.getGroupType());
+        courseScheduleStudentPayment.setMusicGroupId(courseScheduleByDemoGroup.getMusicGroupId());
 		courseScheduleStudentPayment.setCourseScheduleId(courseScheduleByDemoGroup.getId());
 		courseScheduleStudentPayment.setClassGroupId(courseScheduleByDemoGroup.getClassGroupId());
 		courseScheduleStudentPayment.setExpectPrice(demoGroup.getPrice());
@@ -240,6 +241,8 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 
 		CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
 		courseScheduleTeacherSalary.setCourseScheduleId(courseScheduleByDemoGroup.getId());
+        courseScheduleTeacherSalary.setGroupType(courseScheduleByDemoGroup.getGroupType());
+        courseScheduleTeacherSalary.setMusicGroupId(courseScheduleByDemoGroup.getMusicGroupId());
 		courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
 		courseScheduleTeacherSalary.setUserId(demoGroup.getUserId());
 		courseScheduleTeacherSalary.setExpectSalary(demoGroup.getPrice());
@@ -256,6 +259,10 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 		demoGroup.setOrganIdList(organIdsString);
 		demoGroupDao.update(demoGroup);
 
+		TeacherAttendance teacherAttendance=new TeacherAttendance(demoGroup.getUserId(),demoGroup.getId().toString(),classGroup.getId(),courseScheduleByDemoGroup.getId(),now);
+		teacherAttendance.setGroupType(GroupType.DEMO);
+		teacherAttendanceService.insert(teacherAttendance);
+
 		//修改课程预约状态
 		demoGroupCoursesPlan.setStatus(YesOrNoEnum.YES);
 		demoGroupCoursesPlanDao.update(demoGroupCoursesPlan);

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

@@ -687,6 +687,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
             Date date = new Date();
             StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+            studentPaymentOrder.setGroupType(GroupType.MUSIC);
             studentPaymentOrder.setUserId(userId);
             studentPaymentOrder.setOrderNo(idGeneratorService.generatorId("RENEW") + "");
             studentPaymentOrder.setType(OrderTypeEnum.RENEW);

+ 32 - 40
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -12,6 +12,7 @@ import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.dal.page.StudentAttendanceQueryInfo;
 import com.ym.mec.biz.service.StudentAttendanceService;
+import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -56,7 +57,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 	@Autowired
 	private SysMessageService sysMessageService;
 	@Autowired
-	private TeacherDao teacherDao;
+	private SysConfigDao sysConfigDao;
 
 	@Override
 	public BaseDAO<Long, StudentAttendance> getDAO() {
@@ -189,14 +190,16 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 			throw new BizException("课程已结束");
 		}
 
-		if(StringUtils.length(remark)>150){
-			throw new BizException("字符长度超限");
-		}
-		
 		Date date = new Date();
 		
-		if(DateUtil.addHours(date, 2).after(courseSchedule.getStartClassTime())){
-			throw new BizException("开课2个小时之前才可以请假");
+		int hours = 2;
+		String str = sysConfigDao.findConfigValue(SysConfigService.ADVANCE_LEAVE_HOURS);
+		if (StringUtils.isNotBlank(str)) {
+			hours = Integer.parseInt(str);
+		}
+		
+		if(DateUtil.addHours(date, hours).after(courseSchedule.getStartClassTime())){
+			throw new BizException("开课{}个小时之前才可以请假",hours);
 		}
 		
 		StudentAttendance studentAttendance  = studentAttendanceDao.findByStatusAndCourseScheduleId(userId,courseScheduleId.intValue());
@@ -338,42 +341,31 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 	public void addStudentAttendanceRecord(Integer courseScheduleId, Integer userId, StudentAttendanceStatusEnum statusEnum) {
 		StudentAttendance studentAttendance = studentAttendanceDao.findByStatusAndCourseScheduleId(userId,courseScheduleId);
 		if(studentAttendance == null){
-			studentAttendance = new StudentAttendance();
-			ClassGroup classGroup = classGroupDao.findByCourseSchedule(courseScheduleId);
+			//判断是否在签到时间段内(课程开始前20~结束前)
 			CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId.longValue());
-			Date date = new Date();
+			ClassGroup classGroup = classGroupDao.findByCourseSchedule(courseScheduleId);
 			if(classGroup != null && courseSchedule != null){
-				studentAttendance.setClassGroupId(classGroup.getId());
-				studentAttendance.setCourseScheduleId(courseScheduleId.longValue());
-				studentAttendance.setCurrentClassTimes(classGroup.getCurrentClassTimes());
-				studentAttendance.setMusicGroupId(classGroup.getMusicGroupId());
-				studentAttendance.setStatus(statusEnum);
-				studentAttendance.setUserId(userId);
-				studentAttendance.setTeacherId(courseSchedule.getActualTeacherId());
-//				studentAttendance.setRemark(statusEnum==StudentAttendanceStatusEnum.NORMAL?"":"课程结束后学生未到");
-				studentAttendanceDao.insert(studentAttendance);
-				//点名完成推送
-//				Map<Integer, String> receivers = new HashMap<Integer, String>(1);
-//				receivers.put(userId, userId.toString());
-//				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_NAMES_ACHIEVE, receivers, null, 0, "2",
-//						DateUtil.format(date,DateUtil.DATE_FORMAT_MIN));
-				//修改课程状态(如果是学生签到,并且课程未开始)
-				/*if(StudentAttendanceStatusEnum.NORMAL == statusEnum && courseSchedule.getStatus() == CourseStatusEnum.NOT_START){
-					courseSchedule.setStatus(CourseStatusEnum.UNDERWAY);
-					courseSchedule.setUpdateTime(date);
-					courseScheduleDao.update(courseSchedule);
+				int advanceSignMinutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES));
+				Date date = new Date();
+				String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
+				String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+				String endClassTime = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+				//上课时间
+				Date classStartDateTime = DateUtil.stringToDate(classDate + " " + startClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+				Date classEndDateTime = DateUtil.stringToDate(classDate + " " + endClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+				Date addMinutes = DateUtil.addMinutes(classStartDateTime, advanceSignMinutes * -1);
+				if(DateUtil.minutesBetween(addMinutes,date) >= 0 && DateUtil.minutesBetween(date,classEndDateTime) > 0){
+					studentAttendance = new StudentAttendance();
+					studentAttendance.setClassGroupId(classGroup.getId());
+					studentAttendance.setCourseScheduleId(courseScheduleId.longValue());
+					studentAttendance.setCurrentClassTimes(classGroup.getCurrentClassTimes());
+					studentAttendance.setGroupType(classGroup.getGroupType());
+					studentAttendance.setMusicGroupId(classGroup.getMusicGroupId());
+					studentAttendance.setStatus(statusEnum);
+					studentAttendance.setUserId(userId);
+					studentAttendance.setTeacherId(courseSchedule.getActualTeacherId());
+					studentAttendanceDao.insert(studentAttendance);
 				}
-				if(StudentAttendanceStatusEnum.TRUANT == statusEnum && courseSchedule.getStatus() == CourseStatusEnum.UNDERWAY){
-					String classDate = DateUtil.getDate(courseSchedule.getClassDate());
-					String classTime = DateUtil.getTime(courseSchedule.getEndClassTime());
-					Date stringToDate = DateUtil.stringToDate(classDate + " " + classTime);
-					//当前课程已结束
-					if(DateUtil.minutesBetween(stringToDate,date) > 0){
-						courseSchedule.setStatus(CourseStatusEnum.OVER);
-						courseSchedule.setUpdateTime(date);
-						courseScheduleDao.update(courseSchedule);
-					}
-				}*/
 			}else {
 				throw new BizException("学员班级或课程信息异常");
 			}

+ 9 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java

@@ -3,9 +3,11 @@ package com.ym.mec.biz.service.impl;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.CourseHomeworkDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dao.StudentCourseHomeworkDao;
 import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
 import com.ym.mec.biz.dal.entity.CourseHomework;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
@@ -38,7 +40,8 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
 	private CourseHomeworkService courseHomeworkService;
 	@Autowired
 	private CourseHomeworkDao courseHomeworkDao;
-
+	@Autowired
+	private CourseScheduleDao courseScheduleDao;
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
 
@@ -60,9 +63,13 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
 		bean.setStatus(YesOrNoEnum.YES);
 		long insert = super.insert(bean);
 
+		CourseSchedule courseSchedule = courseScheduleDao.get(bean.getCourseScheduleId());
+
 		CourseHomework courseHomework = new CourseHomework();
 		courseHomework.setId(bean.getCourseHomeworkId());
+		courseHomework.setGroupType(courseSchedule.getGroupType());
 		courseHomework.setCompletedNum(studentCourseHomeworkDao.countCompletedStudentNum(bean.getCourseHomeworkId()));
+
 		courseHomeworkService.update(courseHomework);
 		return insert;
 	}
@@ -117,4 +124,4 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
 					.getMusicGroup().getName(), sch.getCourseHomework().getClassGroup().getName());
 		}
 	}
-}
+}

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

@@ -1,11 +1,9 @@
 package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.ClassGroupDao;
-import com.ym.mec.biz.dal.dao.StudentManageDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dao.VipGroupDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.service.StudentManageService;
 import com.ym.mec.common.page.PageInfo;
@@ -19,6 +17,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @Author Joburgess
@@ -35,6 +34,8 @@ public class StudentManageServiceImpl implements StudentManageService {
     private StudentPaymentOrderDao studentPaymentOrderDao;
     @Autowired
     private VipGroupDao vipGroupDao;
+    @Autowired
+    private SysUserCashAccountDao sysUserCashAccountDao;
 
     @Override
     public PageInfo findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
@@ -48,6 +49,14 @@ public class StudentManageServiceImpl implements StudentManageService {
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             dataList = studentManageDao.findStudentsByOrganId(params);
+            List<Integer> userIds = dataList.stream()
+                    .map(StudentManageListDto::getUserId).collect(Collectors.toList());
+            List<SysUserCashAccount> byUserIds = sysUserCashAccountDao.findByUserIds(userIds);
+            Map<Integer, SysUserCashAccount> collect = byUserIds.stream()
+                    .collect(Collectors.toMap(SysUserCashAccount::getUserId, sysUserCashAccount -> sysUserCashAccount));
+            dataList.forEach(studentManageListDto -> {
+                studentManageListDto.setCourseBalance(collect.get(studentManageListDto.getUserId()).getCourseBalance());
+            });
         }
         if (count == 0) {
             dataList = new ArrayList<>();

+ 10 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -24,12 +24,14 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.*;
@@ -232,6 +234,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         Date date = new Date();
         StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
         studentPaymentOrder.setUserId(studentRegistration.getUserId());
+        studentPaymentOrder.setGroupType(GroupType.MUSIC);
         studentPaymentOrder.setOrderNo(orderNo);
         studentPaymentOrder.setType(OrderTypeEnum.APPLY);
         studentPaymentOrder.setExpectAmount(amount);
@@ -321,6 +324,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         Date date = new Date();
         StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
         studentPaymentOrder.setUserId(userId);
+        studentPaymentOrder.setGroupType(GroupType.MUSIC);
         studentPaymentOrder.setOrderNo(orderNo);
         studentPaymentOrder.setType(OrderTypeEnum.APPLY);
         studentPaymentOrder.setExpectAmount(amount);
@@ -421,6 +425,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             if (sysUser == null) {
                 //新增user
                 sysUser = new SysUser();
+                sysUser.setPhone(studentRegistration.getParentsPhone());
                 sysUser.setRealName(studentRegistration.getName());
                 sysUser.setUsername(studentRegistration.getName());
                 sysUser.setGender(studentRegistration.getGender());
@@ -431,7 +436,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 //添加用户现金账户
                 sysUserCashAccountDao.insert(new SysUserCashAccount(userId, "CNY"));
                 //添加用户电子签章账户
-                contractService.register(userId, sysUser.getRealName(), sysUser.getIdCardNo(), sysUser.getPhone());
+//                contractService.register(userId, sysUser.getRealName(), sysUser.getIdCardNo(), sysUser.getPhone());
                 //注册到融云
                 if (StringUtils.isEmpty(sysUser.getAvatar())) {
                     sysUser.setAvatar(sysConfigDao.findConfigValue(SysConfigService.USER_DEFAULT_HEAD_URL));
@@ -500,8 +505,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 //生成订单
                 StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
                 studentPaymentOrder.setUserId(userId);
+                studentPaymentOrder.setGroupType(GroupType.MUSIC);
                 studentPaymentOrder.setType(OrderTypeEnum.APPLY);
-                studentPaymentOrder.setStatus(DealStatusEnum.ING);
+                studentPaymentOrder.setStatus(DealStatusEnum.WAIT_PAY);
                 studentPaymentOrder.setMusicGroupId(musicGroupId);
                 studentPaymentOrder.setClassGroupId(classGroupId);
                 studentPaymentOrderService.insert(studentPaymentOrder);
@@ -550,7 +556,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 waitPayOrder.setStatus(DealStatusEnum.CLOSE);
                 studentPaymentOrderService.update(waitPayOrder);
                 //添加学生
-                classGroupStudentMapperService.addStudents(studentRegistration.getClassGroupId(),studentRegistration.getUserId().toString());
+                classGroupStudentMapperService.addStudents(studentRegistration.getClassGroupId(),studentRegistration.getUserId().toString(),GroupType.MUSIC);
             }
 
             if (studentRegistration.getTemporaryCourseFee() == null) {
@@ -731,4 +737,4 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         contractService.register(student.getUserId(),student.getParentsName(), student.getIdCardNo(), student.getParentsPhone());
         return student;
     }
-}
+}

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

@@ -1,13 +1,5 @@
 package com.ym.mec.biz.service.impl;
 
-import java.math.BigDecimal;
-import java.util.Date;
-
-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;
@@ -19,6 +11,13 @@ 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;
+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;
+import java.util.Date;
 
 @Service
 public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysUserCashAccount> implements SysUserCashAccountService {
@@ -60,6 +59,29 @@ public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysU
 	}
 
 	@Override
+	public boolean updateCourseBalance(Integer userId, BigDecimal decimal) {
+		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+		if (cashAccount == null) {
+			throw new BizException("用户[{}]现金账户不存在", userId);
+		}
+
+		if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
+			throw new BizException("账户不可用");
+		}
+		BigDecimal balance = cashAccount.getCourseBalance().add(decimal);
+		if (balance.doubleValue() < 0) {
+			throw new BizException("现金账户[{}]余额不足,可用余额剩{}元", userId, cashAccount.getCourseBalance().doubleValue());
+		}
+
+		cashAccount.setCourseBalance(balance);
+		cashAccount.setUpdateTime(new Date());
+
+		sysUserCashAccountDao.update(cashAccount);
+
+		return true;
+	}
+
+	@Override
 	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
 	public boolean transferCourseBalanceToBalance(Integer userId) {
 		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
@@ -93,4 +115,4 @@ public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysU
 		return true;
 	}
 
-}
+}

+ 59 - 55
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -107,12 +107,12 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 
 			if(yesOrNoEnum==YesOrNoEnum.YES){
 				teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
-				result.put("signInStatus",YesOrNoEnum.YES.getCode());
+				result.put("signInStatus",0);
 			}else{
 				Long timeGap=(date.getTime()-currentCourseDetail.getStartClassTime().getTime())/1000/60;
 				if(timeGap<= advanceSignInMinutes){
 					teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
-					result.put("signInStatus",YesOrNoEnum.YES.getCode());
+					result.put("signInStatus",0);
 				}else{
 					if(StringUtils.isEmpty(teacherAttendance.getRemark())){
 						//当前为异常签到,请填写原因!
@@ -120,7 +120,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 						return result;
 					}
 					teacherAttendance.setSignInStatus(YesOrNoEnum.NO);
-					result.put("signInStatus",YesOrNoEnum.NO.getCode());
+					result.put("signInStatus",1);
 				}
 			}
 			teacherAttendance.setSignInTime(date);
@@ -178,59 +178,75 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		TeacherAttendance teacherAttendance=teacherAttendanceDao.findByTeacherAttendanceInfo(userId.longValue(),courseScheduleId.longValue());
 		ClassGroup classGroup = classGroupDao.findByCourseSchedule(courseScheduleId);
 		CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId.longValue());
-		boolean isAttendance=false;
-		Date now=new Date();
-
-		SysConfig byParamName = sysConfigService.findByParamName(SysConfigService.ADVANCE_SIGN_IN_MINUTES);
-		Integer advanceSignInMinutes=Integer.parseInt(byParamName.getParanValue());
 
 		if(Objects.isNull(teacherAttendance)){
 			teacherAttendance=new TeacherAttendance();
+			teacherAttendance.setGroupType(courseSchedule.getGroupType());
 			teacherAttendance.setCourseScheduleId(courseScheduleId.longValue());
-		}else{
-			isAttendance=true;
+			teacherAttendance.setCurrentClassTimes(classGroup.getCurrentClassTimes());
+			teacherAttendance.setTeacherId(userId);
+			teacherAttendance.setMusicGroupId(classGroup.getMusicGroupId());
+			teacherAttendance.setClassGroupId(classGroup.getId());
+			teacherAttendance.setClassGroupId(courseScheduleId);
+			teacherAttendance.setTeacherId(userId);
+			teacherAttendanceDao.insert(teacherAttendance);
+		}else if(teacherAttendance.getSignInTime() != null && teacherAttendance.getSignOutTime() != null){
+			return;
 		}
+		teacherAttendance.setGroupType(courseSchedule.getGroupType());
 		teacherAttendance.setTeacherId(userId);
 		teacherAttendance.setClassGroupId(classGroup.getId());
 		teacherAttendance.setMusicGroupId(classGroup.getMusicGroupId());
-
-		int timeGap = DateUtil.minutesBetween(now, courseSchedule.getStartClassTime());
-
-		YesOrNoEnum yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(courseSchedule.getStartClassTime(),
-				userId.longValue(),
-				false,
-				null);
-
-
-		switch (signStatus){
-			case SIGN_IN:
-				if (courseSchedule.getEndClassTime().after(now)){
-					teacherAttendance.setSignInTime(now);
-					if(yesOrNoEnum.equals(YesOrNoEnum.YES)||advanceSignInMinutes<=timeGap&&timeGap<=60){
-						teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
-					}else{
-						teacherAttendance.setSignInStatus(YesOrNoEnum.NO);
+		int advanceSignMinutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES));
+		Date date = new Date();
+		String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
+		String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+		String endClassTime = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+		//上课时间
+		Date classStartDateTime = DateUtil.stringToDate(classDate + " " + startClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+		Date classEndDateTime = DateUtil.stringToDate(classDate + " " + endClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+		Date addMinutes = DateUtil.addMinutes(classStartDateTime, advanceSignMinutes * -1);
+		//签到
+		if(teacherAttendance.getSignInTime() == null && SignStatusEnum.SIGN_IN.equals(signStatus)){
+			//是否连堂课
+			YesOrNoEnum yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(courseSchedule.getStartClassTime(),
+					userId.longValue(),
+					false,
+					null);
+			teacherAttendance.setSignInTime(date);
+			teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
+			boolean isSign = false;
+			if(yesOrNoEnum == YesOrNoEnum.YES){
+				isSign = true;
+			}else if(DateUtil.minutesBetween(addMinutes,date) >= 0 && DateUtil.minutesBetween(date,classStartDateTime) > 0){
+				//正常签到范围(开始前20分钟  ~  开始之前)
+				isSign = true;
+			}else if(DateUtil.minutesBetween(classStartDateTime,date) > 0 && DateUtil.minutesBetween(date,classEndDateTime) > 0){
+				//异常签到范围(开始之后  ~  结束之前)
+				isSign = true;
+				teacherAttendance.setSignInStatus(YesOrNoEnum.NO);
+			}
+			if(isSign){
+				teacherAttendanceDao.update(teacherAttendance);
+				if(courseSchedule.getTeachMode() == TeachModeEnum.ONLINE){
+					//获取所有当前课程的学生列表
+					Map<Integer,String> userMap = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertMybatisMap(courseScheduleDao.findStudentMap(courseScheduleId))),HashMap.class);
+					if(userMap != null && userMap.size() > 0){
+						String name = subjectDao.findNames(classGroup.getSubjectIdList());
+						sysMessageService.batchSendMessage(MessageSender.JIGUANG,MessageTypeEnum.STUDENT_PUSH_ONLINE_COURSE_ACTION,userMap,
+								null,0,"6?sealClassId=" + courseScheduleId + "&subjectName=" + name ,courseSchedule.getName());
 					}
 				}
-				int currentClassTimes = teacherAttendanceDao.countClassTime(classGroup.getId().longValue());
-				classGroup.setCurrentClassTimes(currentClassTimes);
-				if(updateCourseScheduleStatus&&courseSchedule.getStatus().equals(CourseStatusEnum.NOT_START)){
-					courseScheduleDao.updateCourscheduleStatus(courseScheduleId,CourseStatusEnum.UNDERWAY.getCode());
-				}
-				break;
-			case SIGN_OUT:
-				teacherAttendance.setSignOutTime(now);
-				teacherAttendance.setSignOutStatus(YesOrNoEnum.YES);
-				break;
-			default:
-
-				break;
+			}
 		}
-		if(isAttendance){
-			if(SignStatusEnum.SIGN_OUT.equals(signStatus)){
+		//签退
+		if(teacherAttendance.getSignOutTime() == null && SignStatusEnum.SIGN_OUT.equals(signStatus)){
+			//正常签退范围(课程结束后)
+			if(DateUtil.minutesBetween(classEndDateTime,date) > 0){
+				teacherAttendance.setSignOutTime(date);
+				teacherAttendance.setSignOutStatus(YesOrNoEnum.YES);
 				teacherAttendanceDao.update(teacherAttendance);
 				//教师签退后,给未签到学员添加旷课记录
-				//封装未签到学员签到列表
 				List<StudentAttendance> studentAttendances = studentAttendanceDao.queryNoSignStudentRecord(courseScheduleId);
 				if(studentAttendances != null && studentAttendances.size() > 0){
 					studentAttendances.forEach(e->{
@@ -241,18 +257,6 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 					studentAttendanceDao.addStudentAttendances(studentAttendances);
 				}
 			}
-		}else{
-			teacherAttendanceDao.insert(teacherAttendance);
-			//教师到课推送
-			if(courseSchedule.getTeachMode() == TeachModeEnum.ONLINE){
-				//获取所有当前课程的学生列表
-				Map<Integer,String> userMap = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertMybatisMap(courseScheduleDao.findStudentMap(courseScheduleId))),HashMap.class);
-				if(userMap != null && userMap.size() > 0){
-					String name = subjectDao.findNames(classGroup.getSubjectIdList());
-					sysMessageService.batchSendMessage(MessageSender.JIGUANG,MessageTypeEnum.STUDENT_PUSH_ONLINE_COURSE_ACTION,userMap,
-							null,0,"6?sealClassId=" + courseScheduleId + "&subjectName=" + name ,courseSchedule.getName());
-				}
-			}
 		}
 	}
 

+ 0 - 23
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupClassGroupMapperServiceImpl.java

@@ -1,23 +0,0 @@
-package com.ym.mec.biz.service.impl;
-
-import com.ym.mec.biz.dal.dao.VipGroupClassGroupMapperDao;
-import com.ym.mec.biz.dal.entity.VipGroupClassGroupMapper;
-import com.ym.mec.biz.service.VipGroupClassGroupMapperService;
-import com.ym.mec.common.dal.BaseDAO;
-import com.ym.mec.common.service.impl.BaseServiceImpl;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class VipGroupClassGroupMapperServiceImpl extends BaseServiceImpl<Long, VipGroupClassGroupMapper> implements VipGroupClassGroupMapperService {
-	
-	@Autowired
-	private VipGroupClassGroupMapperDao vipGroupClassGroupMapperDao;
-
-	@Override
-	public BaseDAO<Long, VipGroupClassGroupMapper> getDAO() {
-		return vipGroupClassGroupMapperDao;
-	}
-	
-}

+ 173 - 42
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -23,6 +23,7 @@ import com.ym.mec.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -42,8 +43,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	@Autowired
 	private ClassGroupDao classGroupDao;
 	@Autowired
-	private VipGroupClassGroupMapperDao vipGroupClassGroupMapperDao;
-	@Autowired
 	private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
 	@Autowired
 	private CourseScheduleService courseScheduleService;
@@ -101,6 +100,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	private TeacherAttendanceDao teacherAttendanceDao;
 	@Autowired
 	private ContractService contractService;
+	@Autowired
+	private ClassGroupService classGroupService;
 
 	@Override
 	public BaseDAO<Long, VipGroup> getDAO() {
@@ -146,6 +147,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         	throw new BizException("该用户不存在");
 		}
 
+        String studentIds=vipGroup.getStudentIds();
+		List<String> studentIdList=new ArrayList<>();
+
+        if(StringUtils.isNotBlank(studentIds)){
+			studentIdList = Arrays.asList(studentIds.split(","));
+		}
+
         Date now=new Date();
 
 		VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo();
@@ -186,18 +194,47 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				true,
 				true);
 
-//		if()
+		VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
+
+		BigDecimal offlineClassNum=new BigDecimal(vipGroupApplyBaseInfoDto.getOfflineClassesNum());
+		BigDecimal onlineClassNum=new BigDecimal(vipGroupApplyBaseInfoDto.getOnlineClassesNum());
+
+		if(vipGroupActivity.getType().equals(VipGroupActivityTypeEnum.GIVE_CLASS)){
+			if(vipGroupApplyBaseInfoDto.getGiveTeachMode()==TeachModeEnum.OFFLINE){
+				if(new BigDecimal(totalClassTimes).compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))>-1){
+					offlineClassNum=offlineClassNum.subtract(new BigDecimal(vipGroupActivity.getAttribute2()));
+				}
+			}else if(vipGroupApplyBaseInfoDto.getGiveTeachMode()==TeachModeEnum.ONLINE){
+				if(new BigDecimal(totalClassTimes).compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))>-1){
+					onlineClassNum=onlineClassNum.subtract(new BigDecimal(vipGroupActivity.getAttribute2()));
+				}
+			}else{
+				throw new BizException("请指定赠送课程类型!");
+			}
+		}
+
+		BigDecimal tempFee = costInfo.get("totalPrice").multiply(new BigDecimal(0.6));
+		BigDecimal totalSalary = vipGroupApplyBaseInfoDto.getOfflineTeacherSalary().multiply(offlineClassNum)
+				.add(vipGroupApplyBaseInfoDto.getOnlineTeacherSalary().multiply(onlineClassNum));
+		if(totalSalary.compareTo(tempFee)>0){
+			throw new BizException("课酬异常");
+		}
 
 		//如果默认课酬与实际课酬不匹配则需要审批
 		if(costInfo.get("offlineTeacherSalary").compareTo(vipGroupApplyBaseInfoDto.getOfflineTeacherSalary())!=0||
-			costInfo.get("onlineTeacherSalary").compareTo(vipGroupApplyBaseInfoDto.getOnlineTeacherSalary())!=0){
+			costInfo.get("onlineTeacherSalary").compareTo(vipGroupApplyBaseInfoDto.getOnlineTeacherSalary())!=0
+			&&StringUtils.isBlank(studentIds)){
 			vipGroupApplyBaseInfoDto.setAuditStatus(AuditStatusEnum.ING);
 		}else{
 			vipGroupApplyBaseInfoDto.setAuditStatus(AuditStatusEnum.PASS);
 		}
 
 		vipGroupApplyBaseInfoDto.setTotalPrice(costInfo.get("totalPrice"));
-		vipGroupApplyBaseInfoDto.setStatus(VipGroupStatusEnum.APPLYING);
+		if(StringUtils.isNotBlank(studentIds)){
+			vipGroupApplyBaseInfoDto.setStatus(VipGroupStatusEnum.FINISH);
+		}else{
+			vipGroupApplyBaseInfoDto.setStatus(VipGroupStatusEnum.APPLYING);
+		}
 		vipGroupApplyBaseInfoDto.setOrganId(sysUser.getOrganId());
 		//开课时间为排课的第一节课的开始时间
 		vipGroupApplyBaseInfoDto.setCourseStartDate(firstCourseSchedule.getStartClassTime());
@@ -212,28 +249,27 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		ClassGroup classGroup=new ClassGroup();
 		classGroup.setSubjectIdList(vipGroupApplyBaseInfoDto.getSubjectIdList());
 		classGroup.setExpectStudentNum(vipGroupCategory.getStudentNum());
+		if(StringUtils.isNotBlank(studentIds)){
+			classGroup.setStudentNum(studentIdList.size());
+		}
 		classGroup.setName(vipGroupApplyBaseInfoDto.getName());
 		classGroup.setExpectStudentNum(vipGroupApplyBaseInfoDto.getStudentNum());
 		classGroup.setTotalClassTimes(totalClassTimes);
 		classGroup.setType(ClassGroupTypeEnum.VIP);
 		classGroup.setDelFlag(YesOrNoEnum.YES);
+		classGroup.setGroupType(GroupType.VIP);
 		classGroup.setMusicGroupId(vipGroupApplyBaseInfoDto.getId().toString());
 		classGroup.setCreateTime(now);
 		classGroup.setUpdateTime(now);
 		classGroupDao.insert(classGroup);
 
-		//创建vip课班级关联记录
-		VipGroupClassGroupMapper vipGroupClassGroupMapper=new VipGroupClassGroupMapper();
-		vipGroupClassGroupMapper.setVipGroupId(vipGroupApplyBaseInfoDto.getId());
-		vipGroupClassGroupMapper.setClassGroupId(classGroup.getId());
-		vipGroupClassGroupMapperDao.insert(vipGroupClassGroupMapper);
-
 		//创建班级老师关联记录
 		ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper();
 		classGroupTeacherMapper.setMusicGroupId(vipGroupApplyBaseInfoDto.getId().toString());
 		classGroupTeacherMapper.setClassGroupId(classGroup.getId());
 		classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.BISHOP);
 		classGroupTeacherMapper.setUserId(vipGroupApplyBaseInfoDto.getUserId());
+		classGroupTeacherMapper.setGroupType(GroupType.VIP);
 		classGroupTeacherMapper.setCreateTime(now);
 		classGroupTeacherMapper.setUpdateTime(now);
 		classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
@@ -246,6 +282,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		classGroupTeacherSalary.setUserId(vipGroupApplyBaseInfoDto.getUserId());
 		classGroupTeacherSalary.setSalary(vipGroupApplyBaseInfoDto.getOfflineTeacherSalary());
 		classGroupTeacherSalary.setOnlineClassesSalary(vipGroupApplyBaseInfoDto.getOnlineTeacherSalary());
+		classGroupTeacherSalary.setGroupType(GroupType.VIP);
 		classGroupTeacherSalaryDao.insert(classGroupTeacherSalary);
 
 		//课程信息调整
@@ -261,12 +298,18 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		vipGroupApplyBaseInfoDto.setCourseSchedulesJson(JSON.toJSONString(vipGroup.getCourseSchedules()));
 		vipGroupDao.update(vipGroupApplyBaseInfoDto);
 
-		SysUser systemUser = sysUserFeignService.queryUserById(systemId);
+		if(StringUtils.isNotBlank(studentIds)){
+			List<Integer> collect = studentIdList.stream().mapToInt(Integer::parseInt).boxed().collect(Collectors.toList());
+			classGroupService.addStudentIntoClassGroup(vipGroupApplyBaseInfoDto.getId().toString(),classGroup.getId(),collect);
+			createVipGroupCourseScheInfo(vipGroupApplyBaseInfoDto.getId());
+		}
+
 		Set<Integer> roleIds = new HashSet<>(1);
 		roleIds.add(SysUserRole.OPERATION_EXECUTIVE);
 		Map<String,Long> memo = new HashMap<>(1);
 		memo.put("vipGroupId",vipGroupApplyBaseInfoDto.getId());
 		if (systemId != null){
+			SysUser systemUser = sysUserFeignService.queryUserById(systemId);
 			sysMessageService.batchSeoMessage(roleIds,MessageTypeEnum.BACKSTAGE_VIP_COURSE_APPLY, JSONObject.toJSONString(memo),systemUser.getUsername(),sysUser.getUsername());
 		}else {
 			sysMessageService.batchSeoMessage(roleIds,MessageTypeEnum.BACKSTAGE_TEACHER_APPLY_VIP, JSONObject.toJSONString(memo),sysUser.getUsername());
@@ -400,7 +443,11 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			List<Long> vipGroupIds = dataList.stream().map(vipGroup -> vipGroup.getId()).distinct().collect(Collectors.toList());
 			List<Map<Long, Integer>> vipGroupOverCourses = vipGroupDao.countVipGroupOverCourse(vipGroupIds);
 			Map<Long,Integer> vipGroupOverCourseMaps = MapUtil.convertIntegerMap(vipGroupOverCourses);
-			List<ClassGroup> classGroupsByVipGroups = vipGroupClassGroupMapperDao.findClassGroupsByVipGroups(vipGroupIds);
+
+			List<ClassGroup> classGroupsByVipGroups = classGroupDao
+					.findByMusicGroupsAndType(vipGroupIds.stream().map(vipGroupId->String.valueOf(vipGroupId)).collect(Collectors.toList()),
+							GroupType.VIP.getCode());
+
 			Map<String, ClassGroup> vipGroupClassGroupMap = classGroupsByVipGroups.stream().collect(Collectors.toMap(ClassGroup::getMusicGroupId, classGroup -> classGroup));
 			dataList.forEach(vipGroup -> {
 				Integer overCourses = vipGroupOverCourseMaps.get(vipGroup.getId());
@@ -497,6 +544,26 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	}
 
 	@Override
+	public PageInfo findHaveCourseBalanceStudents(VipGroupQueryInfo queryInfo) {
+		PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List dataList = null;
+		int count = vipGroupDao.countHaveCourseBalanceStudentNum(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = vipGroupDao.findHaveCourseBalanceStudents(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
 	public VipGroupManageDetailDto getVipGroupDetail(Long vipGroupId) {
 		if(Objects.isNull(vipGroupId)){
 			throw new BizException("请指定vip课程");
@@ -612,6 +679,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("请指定课程形式");
 		}
 
+		if(Objects.isNull(vipGroup.getSingleClassMinutes())){
+			throw new BizException("请指定课程时长");
+		}
+
 		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
 		if(Objects.isNull(vipGroupCategory)){
 			throw new BizException("未找到课程形式");
@@ -640,7 +711,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		BigDecimal teacherSalaryTimeUnit=new BigDecimal(sysConfigDao.findConfigValue(SysConfigService.TEACHER_SALARY_TIME_UNIT));
 		//课程时长与结算单位时长占比
-		BigDecimal classTimeDuty=new BigDecimal(vipGroupCategory.getSingleClassMinutes()).divide(teacherSalaryTimeUnit);
+		BigDecimal classTimeDuty=new BigDecimal(vipGroup.getSingleClassMinutes()).divide(teacherSalaryTimeUnit);
 		BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum());
 		BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
 		BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
@@ -751,7 +822,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.isNull(vipGroup)){
 			throw new BizException("指定的vip课程不存在");
 		}
-		ClassGroup classGroup=vipGroupClassGroupMapperDao.findClassGroupByVipGroup(vipGroupId);
+		ClassGroup classGroup=classGroupDao.findByMusicGroupAndType(vipGroupId.toString(),ClassGroupTypeEnum.VIP.getCode());
 		if(Objects.isNull(classGroup)){
 			throw new BizException("未找到关联班级");
 		}
@@ -838,13 +909,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("您已购买过此课程");
 		}
 
-		VipGroupClassGroupMapper vipGroupClassGroupMapper = vipGroupClassGroupMapperDao.findByVipGroupId(vipGroup.getId());
-
-		if(Objects.isNull(vipGroupClassGroupMapper)){
-			throw new BizException("课程信息错误");
-		}
-
-		ClassGroup classGroup = vipGroupClassGroupMapperDao.findClassGroupByVipGroup(vipGroupBuyParams.getVipGroupId());
+		ClassGroup classGroup= classGroupDao.findByMusicGroupAndType(vipGroup.getId().toString(),ClassGroupTypeEnum.VIP.getCode());
 		if(Objects.isNull(classGroup)){
 			throw new BizException("课程信息错误");
 		}
@@ -863,7 +928,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			//更新班级人数,如果订单支付失败则减少
 			this.updateVipGroupStudentNumAndStatus(vipGroup.getId(),1,false);
 
-			ClassGroupStudentMapper classGroupStudentMapper=new ClassGroupStudentMapper(vipGroupClassGroupMapper.getClassGroupId(),user.getId().intValue());
+			ClassGroupStudentMapper classGroupStudentMapper=new ClassGroupStudentMapper(classGroup.getId(),user.getId().intValue());
+			classGroupStudentMapper.setGroupType(GroupType.VIP);
 			classGroupStudentMapper.setMusicGroupId(vipGroup.getId().toString());
 			classGroupStudentMapperDao.insert(classGroupStudentMapper);
 		}
@@ -873,6 +939,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		StudentPaymentOrder studentPaymentOrder=new StudentPaymentOrder();
 		studentPaymentOrder.setUserId(user.getId());
+        studentPaymentOrder.setGroupType(GroupType.VIP);
 		String orderNo=StringUtils.join(new String[]{user.getId().toString(),String.valueOf(System.currentTimeMillis())});
 		studentPaymentOrder.setOrderNo(orderNo);
 		studentPaymentOrder.setStatus(DealStatusEnum.ING);
@@ -881,9 +948,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString());
 		studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount());
 		studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString());
-		studentPaymentOrder.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId());
+		studentPaymentOrder.setClassGroupId(classGroup.getId());
 
-		contractService.register(user.getId(),user.getRealName(),user.getIdCardNo(),user.getPhone());
+		try {
+			contractService.register(user.getId(),user.getRealName(),user.getIdCardNo(),user.getPhone());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
 
 		//生成回调地址
 		Map<String,Object> payMap = payService.getPayMap(
@@ -954,10 +1025,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_VIP_BUY, map, null, 0, "2",
 				vipGroup.getName());
 
-		VipGroupClassGroupMapper vipGroupClassGroupMapper = vipGroupClassGroupMapperDao.findByVipGroupId(vipGroupId);
+		ClassGroup classGroup=classGroupDao.findByMusicGroupAndType(vipGroupId.toString(),ClassGroupTypeEnum.VIP.getCode());
 
 		//更新所属分部列表
-		List<Integer> organIds = classGroupDao.findStudentOrganIdsByClassGroup(vipGroupClassGroupMapper.getClassGroupId().longValue());
+		List<Integer> organIds = classGroupDao.findStudentOrganIdsByClassGroup(classGroup.getId().longValue());
 		organIds.add(vipGroup.getOrganId());
 		HashSet<Integer> hashSet = new HashSet<>(organIds);
 		String organIdsString = StringUtils.join(hashSet, ",");
@@ -1142,19 +1213,21 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			pageInfo.setTotal(count);
 			params.put("offset", pageInfo.getOffset());
 			dataList = courseScheduleTeacherSalaryDao.findVipGroupSalarys(params);
-			dataList.forEach(vipGroupSalaryDto -> {
-				if(Objects.isNull(vipGroupSalaryDto.getExpectSalary())){
-					vipGroupSalaryDto.setExpectSalary(new BigDecimal(0));
-				}
-				if(Objects.isNull(vipGroupSalaryDto.getActualSalary())){
-					vipGroupSalaryDto.setActualSalary(new BigDecimal(0));
-					vipGroupSalaryDto.setDeductionFee(new BigDecimal(0));
-					vipGroupSalaryDto.setIsSalary(YesOrNoEnum.NO);
-				}else{
-					vipGroupSalaryDto.setDeductionFee(vipGroupSalaryDto.getExpectSalary().subtract(vipGroupSalaryDto.getActualSalary()));
-					vipGroupSalaryDto.setIsSalary(YesOrNoEnum.YES);
-				}
-			});
+			if(!CollectionUtils.isEmpty(dataList)){
+				dataList.forEach(vipGroupSalaryDto -> {
+					if(Objects.isNull(vipGroupSalaryDto.getExpectSalary())){
+						vipGroupSalaryDto.setExpectSalary(new BigDecimal(0));
+					}
+					if(Objects.isNull(vipGroupSalaryDto.getActualSalary())){
+						vipGroupSalaryDto.setActualSalary(new BigDecimal(0));
+						vipGroupSalaryDto.setDeductionFee(new BigDecimal(0));
+						vipGroupSalaryDto.setIsSalary(YesOrNoEnum.NO);
+					}else{
+						vipGroupSalaryDto.setDeductionFee(vipGroupSalaryDto.getExpectSalary().subtract(vipGroupSalaryDto.getActualSalary()));
+						vipGroupSalaryDto.setIsSalary(YesOrNoEnum.YES);
+					}
+				});
+			}
 		}
 		if (count == 0) {
 			dataList = new ArrayList<>();
@@ -1373,22 +1446,80 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public void addVipGroupStudents(Long vipGroupId, List<Integer> studentIds) {
 		if(CollectionUtils.isEmpty(studentIds)){
 			throw new BizException("请选择学生");
 		}
 		if(Objects.isNull(vipGroupId)){
-			throw new BizException("请指定班级");
+			throw new BizException("请指定vip课程");
+		}
+		VipGroup vipGroup=vipGroupDao.get(vipGroupId);
+		if(Objects.isNull(vipGroup)){
+			throw new BizException("未找到指定的vip课程");
+		}
+		ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroupId, null);
+		List<CourseSchedule> surplusCourses = courseScheduleDao.findByClassGroupAndStatus(classGroup.getId(), CourseStatusEnum.NOT_START.getCode());
+		if(CollectionUtils.isEmpty(surplusCourses)){
+			throw new BizException("此vip课程没有剩余课程计划");
+		}
+		BigDecimal surplusCoursesPrice=new BigDecimal(0);
+		surplusCourses.forEach(courseSchedule -> {
+			if(courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)){
+				surplusCoursesPrice.add(vipGroup.getOfflineClassesUnitPrice());
+			}else if(courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)){
+				surplusCoursesPrice.add(vipGroup.getOnlineClassesUnitPrice());
+			}
+		});
+		List<ImGroupMember> imGroupMemberList = new ArrayList<>();
+		//生成学生单课缴费信息
+		for (Integer studentId:studentIds) {
+			SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(studentId);
+			if(sysUserCashAccount.getCourseBalance().compareTo(surplusCoursesPrice)<0){
+				throw new BizException("存在课程余额不足的学生");
+			}
+			courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentForVipGroup(vipGroupId,studentId);
+
+			sysUserCashAccountService.updateCourseBalance(studentId,surplusCoursesPrice.negate());
+
+			imGroupMemberList.add(new ImGroupMember(studentId.toString()));
 		}
 
+		try {
+			ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
+			// 创建群组
+			imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public void stopVipGroupWithNoCreate() {
 		List<VipGroup> noCreateSuccessVipGroups = vipGroupDao.findNoCreateSuccessVipGroup();
 		if(CollectionUtils.isEmpty(noCreateSuccessVipGroups)){
 			return;
 		}
-//		studentPaymentOrderDao.queryByDealStatus()
+		//用户账户资金变动信息列表
+		List<SysUserCashAccountDetail> userCashAccountDetails = new ArrayList<>();
+		for (VipGroup noCreateSuccessVipGroup : noCreateSuccessVipGroups) {
+			List<StudentPaymentOrder> studentPaymentOrders = studentPaymentOrderDao.queryByDealStatus(noCreateSuccessVipGroup.getId().toString(),
+					OrderTypeEnum.SMALL_CLASS_TO_BUY, DealStatusEnum.SUCCESS);
+			for (StudentPaymentOrder studentPaymentOrder:studentPaymentOrders){
+				//生成账户资金明细
+				sysUserCashAccountService.updateCourseBalance(studentPaymentOrder.getUserId(),studentPaymentOrder.getActualAmount());
+				SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(studentPaymentOrder.getUserId());
+				SysUserCashAccountDetail sysUserIncomeCashAccountDetail = new SysUserCashAccountDetail();
+				sysUserIncomeCashAccountDetail.setUserId(studentPaymentOrder.getUserId());
+				sysUserIncomeCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.REFUNDS);
+				sysUserIncomeCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+				sysUserIncomeCashAccountDetail.setAmount(studentPaymentOrder.getActualAmount());
+				sysUserIncomeCashAccountDetail.setBalance(sysUserCashAccount.getBalance());
+				sysUserIncomeCashAccountDetail.setAttribute(studentPaymentOrder.getTransNo());
+				userCashAccountDetails.add(sysUserIncomeCashAccountDetail);
+			}
+		}
+		sysUserCashAccountDetailDao.batchInsert(userCashAccountDetails);
 	}
 }

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

@@ -7,6 +7,7 @@
 <mapper namespace="com.ym.mec.biz.dal.dao.ClassGroupDao">
     <resultMap type="com.ym.mec.biz.dal.entity.ClassGroup" id="ClassGroup">
         <result column="id_" property="id"/>
+        <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="music_group_id_" property="musicGroupId"/>
         <result column="subject_id_list_" property="subjectIdList"/>
         <result column="subject_name_" property="subjectName"/>
@@ -45,6 +46,7 @@
         INSERT INTO class_group
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="id!=null">id_,</if>
+            <if test="groupType!=null">group_type_,</if>
             <if test="musicGroupId!=null">music_group_id_,</if>
             <if test="subjectIdList!=null">subject_id_list_,</if>
             <if test="name!=null">name_,</if>
@@ -61,6 +63,7 @@
         VALUES
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="id!=null">#{id},</if>
+            <if test="groupType!=null">#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},</if>
             <if test="musicGroupId!=null">#{musicGroupId},</if>
             <if test="subjectIdList!=null">#{subjectIdList},</if>
             <if test="name!=null">#{name},</if>
@@ -107,6 +110,9 @@
             <if test="type != null">
                 type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
+            <if test="groupType != null">
+                group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
             <if test="name != null">
                 name_ = #{name},
             </if>
@@ -409,61 +415,57 @@
 
     <select id="findTeacherMusicClassGroup" resultMap="TeacherClassGroupDto">
         SELECT
-        cg.id_ class_group_id_,
-        cg.name_ class_group_name_,
-        cg.student_num_,
-        cg.current_class_times_,
-        cg.total_class_times_,
-        cg.subject_id_list_,
-        cg.type_,
-        COUNT(cg.id_) surplus_class_times_,
-        mg.id_ music_group_id_,
-        mg.name_ music_group_name_,
-        s.id_ school_id_,
-        s.name_ school_name_
+            cg.id_ class_group_id_,
+            cg.name_ class_group_name_,
+            cg.student_num_,
+            cg.current_class_times_,
+            cg.total_class_times_,
+            cg.subject_id_list_,
+            cg.type_,
+            COUNT(cg.id_) surplus_class_times_,
+            mg.id_ music_group_id_,
+            mg.name_ music_group_name_,
+            s.id_ school_id_,
+            s.name_ school_name_
         FROM
-        course_schedule_teacher_salary csts
-        LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
-        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_
+            course_schedule_teacher_salary csts
+            LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
+            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_
         WHERE
-        csts.user_id_ = #{teacherId}
-        AND cs.status_ != 'OVER'
-        AND cs.type_ != 'VIP'
-        AND cs.type_ != 'DEMO'
-        AND csts.expect_salary_!=0
-        AND cg.del_flag_ = 0
+            csts.user_id_ = #{teacherId}
+            AND cg.group_type_='MUSIC'
+            AND csts.expect_salary_!=0
+            AND cg.del_flag_ = 0
         GROUP BY cg.id_
     </select>
     <select id="findTeacherVipClassGroup" resultMap="TeacherClassGroupDto">
         SELECT
-        cg.id_ class_group_id_,
-        cg.name_ class_group_name_,
-        cg.type_,
-        cg.subject_id_list_,
-        vg.payment_expire_date_,
-        vg.courses_expire_date_,
-        vg.single_class_minutes_,
-        vg.courses_start_date,
-        IF(vg.online_classes_num_ IS NULL,0,vg.online_classes_num_) online_classes_num_,
-        IF(vg.offline_classes_num_ IS NULL,0,vg.offline_classes_num_) offline_classes_num_,
-        cg.total_class_times_,
-        COUNT(vg.id_) surplus_class_times_,
-        vg.id_ music_group_id_,
-        vg.name_ music_group_name_,
-        s.id_ school_id_,
-        s.name_ school_name_
+            cg.id_ class_group_id_,
+            cg.name_ class_group_name_,
+            cg.type_,
+            cg.subject_id_list_,
+            vg.payment_expire_date_,
+            vg.courses_expire_date_,
+            vg.single_class_minutes_,
+            vg.courses_start_date,
+            IF(vg.online_classes_num_ IS NULL,0,vg.online_classes_num_) online_classes_num_,
+            IF(vg.offline_classes_num_ IS NULL,0,vg.offline_classes_num_) offline_classes_num_,
+            cg.total_class_times_,
+            COUNT(vg.id_) surplus_class_times_,
+            vg.id_ music_group_id_,
+            vg.name_ music_group_name_,
+            s.id_ school_id_,
+            s.name_ school_name_
         FROM
-        vip_group vg
-        LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_ = vgcgm.vip_group_id_
-        LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
-        LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
-        LEFT JOIN music_group mg ON cg.music_group_id_ = mg.id_
-        LEFT JOIN school s ON vg.teacher_school_id_ = s.id_
+            vip_group vg
+            LEFT JOIN class_group cg ON vg.id_=cg.music_group_id_ AND cg.group_type_='VIP'
+            LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
+            LEFT JOIN school s ON vg.teacher_school_id_ = s.id_
         WHERE
-        vg.user_id_ = #{teacherId}
-        AND cg.del_flag_ = 0
+            vg.user_id_ = #{teacherId}
+            AND cg.del_flag_ = 0
         GROUP BY
         vg.id_,cg.id_
     </select>
@@ -742,6 +744,28 @@
         </if>
         AND type_='HIGH' AND del_flag_='0';
     </select>
+    <select id="findByMusicGroupAndType" resultMap="ClassGroup">
+        SELECT
+            *
+        FROM
+            class_group
+        WHERE
+            music_group_id_ = #{musicGroupId}
+            AND group_type_ = #{groupType}
+    </select>
+
+    <select id="findByMusicGroupsAndType" resultMap="ClassGroup">
+        SELECT
+        *
+        FROM
+        class_group
+        WHERE
+        music_group_id_ IN
+        <foreach collection="musicGroupIds" item="musicGroupId" open="(" close=")" separator=",">
+            #{musicGroupId}
+        </foreach>
+        AND group_type_ = #{groupType}
+    </select>
 
     <!-- 根据主键批量删除班级-->
     <delete id="batchSoftDelete">

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

@@ -8,6 +8,7 @@
 
     <resultMap type="com.ym.mec.biz.dal.entity.ClassGroupStudentMapper" id="ClassGroupStudentMapper">
         <result column="id_" property="id"/>
+        <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="music_group_id_" property="musicGroupId" />
         <result column="class_group_id_" property="classGroupId"/>
         <result column="user_id_" property="userId"/>
@@ -28,8 +29,8 @@
     <!-- 向数据库增加一条记录 -->
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ClassGroupStudentMapper" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
-        INSERT INTO class_group_student_mapper (id_,music_group_id_,class_group_id_,user_id_,status_,create_time_)
-        VALUES(#{id},#{musicGroupId},#{classGroupId},#{userId},#{status},now())
+        INSERT INTO class_group_student_mapper (id_,group_type_,music_group_id_,class_group_id_,user_id_,status_,create_time_)
+        VALUES(#{id},#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{musicGroupId},#{classGroupId},#{userId},#{status},now())
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -45,6 +46,9 @@
             <if test="status != null">
                 status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
+            <if test="groupType != null">
+                group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
         </set>
         WHERE id_ = #{id}
     </update>

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

@@ -6,6 +6,7 @@
     <resultMap type="com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper"
                id="ClassGroupTeacherMapper">
         <result column="id_" property="id"/>
+        <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="music_group_id_" property="musicGroupId"/>
         <result column="class_group_id_" property="classGroupId"/>
         <result column="teacher_role_" property="teacherRole"/>
@@ -35,8 +36,8 @@
         <!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval
             AS ID FROM DUAL </selectKey> -->
         INSERT INTO class_group_teacher_mapper
-        (id_,music_group_id_,class_group_id_,teacher_role_,user_id_,salary_,create_time_,update_time_)
-        VALUES(#{id},#{musicGroupId},#{classGroupId},#{teacherRole},#{userId},#{salary},#{createTime},NOW())
+        (id_,group_type_,music_group_id_,class_group_id_,teacher_role_,user_id_,salary_,create_time_,update_time_)
+        VALUES(#{id},#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{musicGroupId},#{classGroupId},#{teacherRole},#{userId},#{salary},#{createTime},NOW())
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -49,6 +50,9 @@
             <if test="id != null">
                 id_ = #{id},
             </if>
+            <if test="groupType != null">
+                group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
             <if test="classGroupId != null">
                 class_group_id_ = #{classGroupId},
             </if>

+ 10 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherSalaryMapper.xml

@@ -3,6 +3,7 @@
 <mapper namespace="com.ym.mec.biz.dal.dao.ClassGroupTeacherSalaryDao">
   <resultMap id="ClassGroupTeacherSalary" type="com.ym.mec.biz.dal.entity.ClassGroupTeacherSalary">
     <id column="id_" jdbcType="BIGINT" property="id" />
+    <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     <result column="music_group_id_" jdbcType="INTEGER" property="musicGroupId" />
     <result column="class_group_id_" jdbcType="INTEGER" property="classGroupId" />
     <result column="teacher_role_" jdbcType="VARCHAR" property="teacherRole" />
@@ -23,6 +24,9 @@
     
     insert into class_group_teacher_salary
     <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="groupType != null">
+        group_type_,
+      </if>
       <if test="musicGroupId != null">
         music_group_id_,
       </if>
@@ -49,6 +53,9 @@
       </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="groupType != null">
+        #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+      </if>
       <if test="musicGroupId != null">
         #{musicGroupId,jdbcType=INTEGER},
       </if>
@@ -82,6 +89,9 @@
       <if test="musicGroupId != null">
         music_group_id_ = #{musicGroupId,jdbcType=INTEGER},
       </if>
+      <if test="groupType != null">
+          group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+      </if>
       <if test="classGroupId != null">
         class_group_id_ = #{classGroupId,jdbcType=INTEGER},
       </if>

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

@@ -8,6 +8,7 @@
 	
 	<resultMap type="com.ym.mec.biz.dal.entity.CourseHomework" id="CourseHomework">
 		<result column="id_" property="id" />
+        <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result column="course_schedule_id_" property="courseScheduleId" />
 		<result column="attachments_" property="attachments" />
 		<result column="content_" property="content" />
@@ -60,7 +61,7 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		-->
-		INSERT INTO course_homework (id_,course_schedule_id_,attachments_,content_,create_time_,update_time_,music_group_id_,class_group_id_,completed_num_,expect_num_) VALUES(#{id},#{courseScheduleId},#{attachments},#{content},now(),now(),#{musicGroupId},#{classGroupId},#{completedNum},#{expectNum})
+		INSERT INTO course_homework (id_,group_type_,course_schedule_id_,attachments_,content_,create_time_,update_time_,music_group_id_,class_group_id_,completed_num_,expect_num_) VALUES(#{id},#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{courseScheduleId},#{attachments},#{content},now(),now(),#{musicGroupId},#{classGroupId},#{completedNum},#{expectNum})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -81,6 +82,9 @@
 		<if test="completedNum != null">
 			completed_num_ = #{completedNum},
 		</if>
+        <if test="groupType != null">
+            group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+        </if>
 
 		<if test="expectNum != null">
 			expect_num_ = #{expectNum},

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

@@ -8,6 +8,8 @@
 
     <resultMap type="com.ym.mec.biz.dal.entity.CourseSchedule" id="CourseSchedule">
         <result column="id_" property="id"/>
+        <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="music_group_id_" property="musicGroupId"/>
         <result column="class_group_id_" property="classGroupId"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="subsidy_" property="subsidy"/>
@@ -62,6 +64,15 @@
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="rest_of_class_" property="restOfClass"/>
     </resultMap>
+    
+    <resultMap type="com.ym.mec.biz.dal.entity.StudentAttendance" id="StudentAttendance">
+        <result column="music_group_id_" property="musicGroupId"/>
+        <result column="class_group_id_" property="classGroupId"/>
+        <result column="course_schedule_id_" property="courseScheduleId"/>
+        <result column="user_id_" property="userId"/>
+        <result column="teacher_id_" property="teacherId"/>
+        <result column="current_class_times_" property="currentClassTimes"/>
+    </resultMap>
 
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="CourseSchedule">
@@ -102,17 +113,17 @@
         </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_,student_num_,leave_student_num_,schoole_id_)
-        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},#{schoolId})
+        (id_,group_type_,music_group_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_,schoole_id_)
+        VALUES(#{id},#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{musicGroupId},#{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},#{schoolId})
     </insert>
 
     <insert id="batchAddCourseSchedules" parameterType="java.util.List" useGeneratedKeys="true" keyColumn="id"
             keyProperty="id">
         INSERT INTO course_schedule
-        (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_,schoole_id_)
+        (group_type_,music_group_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_,schoole_id_)
         VALUE
         <foreach collection="list" item="course" separator=",">
-            (#{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},#{course.schoolId})
+            (#{course.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.musicGroupId},#{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},#{course.schoolId})
         </foreach>
     </insert>
 
@@ -132,6 +143,9 @@
             <if test="type != null">
                 type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
+            <if test="groupType != null">
+                group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
             <if test="actualTeacherId != null">
                 actual_teacher_id_ = #{actualTeacherId},
             </if>
@@ -222,27 +236,27 @@
     <select id="getCurrentCourseDetail"
             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,
-        cg.total_class_times_,
-        cg.current_class_times_,
-        cg.student_num_,
-        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_
+            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,
+            cg.total_class_times_,
+            cg.current_class_times_,
+            cg.student_num_,
+            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
+          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 cs.schoole_id_=s.id_
@@ -781,9 +795,8 @@
             cs.schoole_id_
         FROM
         	course_schedule cs
-            LEFT JOIN vip_group_class_group_mapper vgcgm ON vgcgm.class_group_id_ = cs.class_group_id_
         WHERE
-        vgcgm.vip_group_id_ =#{vipGroupId}
+          cs.music_group_id_ =#{vipGroupId} AND cg.group_type_ = 'VIP'
     </select>
     <select id="findByClassGroupAndDate" resultMap="CourseSchedule">
         SELECT
@@ -825,7 +838,7 @@
     </select>
     
     <select id="queryVipGroupTeachereClassTimesByMonth" resultType="map" parameterType="map">
-        SELECT vp.organ_id_ organ_id_,cs.actual_teacher_id_ teacher_id_,count(cs.id_) times FROM course_schedule cs left join vip_group_class_group_mapper vgm on cs.class_group_id_ = vgm.class_group_id_ left join vip_group vp on vgm.vip_group_id_ = vp.id_ where cs.status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} and date_format(#{monthDate} , '%Y%m' ) = date_format(cs.class_date_, '%Y%m' ) group by vp.organ_id_,cs.actual_teacher_id_
+        SELECT vp.organ_id_ organ_id_,cs.actual_teacher_id_ teacher_id_,count(cs.id_) times FROM course_schedule cs left join vip_group vp on cs.music_group_id_ = vp.id_ where cs.status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} and date_format(#{monthDate} , '%Y%m' ) = date_format(cs.class_date_, '%Y%m' ) group by vp.organ_id_,cs.actual_teacher_id_
     </select>
     
     <select id="queryFinishedWithNoUpdateStatus" resultMap="CourseSchedule">
@@ -1229,6 +1242,31 @@
         LEFT JOIN course_schedule_teacher_salary csts ON cs.id_=csts.course_schedule_id_
       where cs.class_group_id_=#{classGroupId}
     </select>
+    <select id="findByClassGroupAndStatus" resultMap="CourseSchedule">
+      select
+        cs.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.start_class_time_ start_class_time_str_,
+        cs.end_class_time_ end_class_time_str_,
+        cs.teacher_id_,
+        csts.user_id_ actual_teacher_id_,
+        cs.create_time_,
+        cs.update_time_,
+        cs.teach_mode_,
+        cs.type_,
+        cs.name_,
+        cs.student_num_,
+        cs.leave_student_num_,
+        cs.schoole_id_
+      from  course_schedule cs
+        LEFT JOIN course_schedule_teacher_salary csts ON cs.id_=csts.course_schedule_id_
+      where cs.class_group_id_=#{classGroupId} AND cs.status=#{status}
+    </select>
     <select id="findByClassGroups" resultMap="CourseSchedule">
         select
             cs.id_,
@@ -1241,7 +1279,7 @@
             cs.start_class_time_ start_class_time_str_,
             cs.end_class_time_ end_class_time_str_,
             cs.teacher_id_,
-            csts.user_id_ actual_teacher_id_,
+            cs.actual_teacher_id_,
             cs.create_time_,
             cs.update_time_,
             cs.teach_mode_,
@@ -1252,13 +1290,11 @@
             cs.schoole_id_,
             cg.name_ class_group_name_
         from  course_schedule cs
-          LEFT JOIN course_schedule_teacher_salary csts ON cs.id_=csts.course_schedule_id_
           LEFT JOIN class_group cg ON cs.class_group_id_=cg.id_
         where cs.class_group_id_ IN
         <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
             #{classGroupId}
         </foreach>
-        AND csts.teacher_role_='BISHOP'
         ORDER BY start_class_time_
     </select>
     <select id="findStudentMap" resultType="java.util.Map">
@@ -1327,4 +1363,8 @@
             #{classGroupId}
         </foreach>
     </delete>
+    
+    <select id="queryUnsignedStudentList" resultMap="StudentAttendance">
+        SELECT a.*,cg.current_class_times_ FROM (SELECT cgsm.user_id_,cs.actual_teacher_id_ teacher_id_,cs.id_ course_schedule_id_,cs.class_group_id_,cs.music_group_id_,cs.group_type_ FROM class_group_student_mapper cgsm right JOIN course_schedule cs ON cgsm.class_group_id_ = cs.class_group_id_ WHERE cgsm.status_ = 'NORMAL' AND CONCAT(cs.class_date_,' ',cs.end_class_time_) &lt;= now()) a LEFT JOIN student_attendance sa ON a.course_schedule_id_ = sa.course_schedule_id_ LEFT JOIN class_group cg ON a.class_group_id_ = cg.id_ WHERE sa.user_id_ IS null
+    </select>
 </mapper>

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

@@ -8,6 +8,8 @@
 	
 	<resultMap type="com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment" id="CourseScheduleStudentPayment">
 		<result column="id_" property="id" />
+        <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="music_group_id_" property="musicGroupId"/>
 		<result column="course_schedule_id_" property="courseScheduleId" />
 		<result column="user_id_" property="userId" />
 		<result column="expect_price_" property="expectPrice" />
@@ -35,13 +37,13 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		-->
-		INSERT INTO course_schedule_student_payment (id_,course_schedule_id_,user_id_,expect_price_,actual_price_,create_time_,update_time_,settlement_time_,class_group_id_) VALUES(#{id},#{courseScheduleId},#{userId},#{expectPrice},#{actualPrice},#{createTime},NOW(),#{settlementTime},#{classGroupId})
+		INSERT INTO course_schedule_student_payment (id_,group_type_,music_group_id_,course_schedule_id_,user_id_,expect_price_,actual_price_,create_time_,update_time_,settlement_time_,class_group_id_) VALUES(#{id},#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{musicGroupId},#{courseScheduleId},#{userId},#{expectPrice},#{actualPrice},#{createTime},NOW(),#{settlementTime},#{classGroupId})
 	</insert>
     <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
-		INSERT INTO course_schedule_student_payment (id_,course_schedule_id_,user_id_,expect_price_,actual_price_,create_time_,update_time_,settlement_time_,class_group_id_)
+		INSERT INTO course_schedule_student_payment (id_,group_type_,music_group_id_,course_schedule_id_,user_id_,expect_price_,actual_price_,create_time_,update_time_,settlement_time_,class_group_id_)
 		VALUE
 		<foreach collection="list" item="data" separator=",">
-			(#{data.id},#{data.courseScheduleId},#{data.userId},#{data.expectPrice},#{data.actualPrice},now(),now(),#{data.settlementTime},#{data.classGroupId})
+			(#{data.id},#{data.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{data.musicGroupId},#{data.courseScheduleId},#{data.userId},#{data.expectPrice},#{data.actualPrice},now(),now(),#{data.settlementTime},#{data.classGroupId})
 		</foreach>
     </insert>
 
@@ -58,6 +60,12 @@
 			<if test="courseScheduleId != null">
 			course_schedule_id_ = #{courseScheduleId},
 			</if>
+            <if test="groupType != null">
+                group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
+            <if test="musicGroupId != null">
+                music_group_id_ = #{musicGroupId},
+            </if>
 			<if test="updateTime != null">
 			update_time_ = NOW(),
 			</if>

+ 13 - 7
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -8,6 +8,8 @@
 	
 	<resultMap type="com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary" id="CourseScheduleTeacherSalary">
 		<result column="id_" property="id" />
+        <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="music_group_id_" property="musicGroupId"/>
 		<result column="course_schedule_id_" property="courseScheduleId" />
 		<result column="teacher_role_" property="teacherRole" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result column="user_id_" property="userId" />
@@ -38,13 +40,13 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		-->
-		INSERT INTO course_schedule_teacher_salary (id_,course_schedule_id_,teacher_role_,user_id_,expect_salary_,create_time_,update_time_,subsidy_,actual_salary_,settlement_time_,class_group_id_) VALUES(#{id},#{courseScheduleId},#{teacherRole},#{userId},#{expectSalary},now(),now(),#{subsidy},#{actualSalary},#{settlementTime},#{classGroupId})
+		INSERT INTO course_schedule_teacher_salary (id_,group_type_,music_group_id_,course_schedule_id_,teacher_role_,user_id_,expect_salary_,create_time_,update_time_,subsidy_,actual_salary_,settlement_time_,class_group_id_) VALUES(#{id},#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{musicGroupId},#{courseScheduleId},#{teacherRole},#{userId},#{expectSalary},now(),now(),#{subsidy},#{actualSalary},#{settlementTime},#{classGroupId})
 	</insert>
     <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
-		INSERT INTO course_schedule_teacher_salary (id_,course_schedule_id_,teacher_role_,user_id_,expect_salary_,create_time_,update_time_,subsidy_,actual_salary_,settlement_time_,class_group_id_)
+		INSERT INTO course_schedule_teacher_salary (id_,group_type_,music_group_id_,course_schedule_id_,teacher_role_,user_id_,expect_salary_,create_time_,update_time_,subsidy_,actual_salary_,settlement_time_,class_group_id_)
 		VALUES
 		<foreach collection="list" item="data" separator=",">
-			(#{data.id},#{data.courseScheduleId},#{data.teacherRole},#{data.userId},#{data.expectSalary},now(),now(),#{data.subsidy},#{data.actualSalary},#{data.settlementTime},#{data.classGroupId})
+			(#{data.id},#{data.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{data.musicGroupId},#{data.courseScheduleId},#{data.teacherRole},#{data.userId},#{data.expectSalary},now(),now(),#{data.subsidy},#{data.actualSalary},#{data.settlementTime},#{data.classGroupId})
 		</foreach>
     </insert>
 
@@ -55,6 +57,12 @@
 			<if test="userId != null">
 			user_id_ = #{userId},
 			</if>
+            <if test="groupType != null">
+                group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
+            <if test="musicGroupId != null">
+                music_group_id_ = #{musicGroupId},
+            </if>
 			<if test="subsidy != null">
 			subsidy_ = #{subsidy},
 			</if>
@@ -182,8 +190,7 @@
 			csts.*
 		FROM
 			vip_group vg
-			LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_ = vgcgm.vip_group_id_
-			LEFT JOIN course_schedule cs ON vgcgm.class_group_id_ = cs.class_group_id_
+			LEFT JOIN course_schedule cs ON vg.id_ = cs.music_group_id_ AND cs.group_type_='VIP'
 			LEFT JOIN course_schedule_teacher_salary csts ON cs.id_ = csts.course_schedule_id_
 			<include refid="vipGroupSalaryQueryCondition"/>
 		ORDER BY id_
@@ -194,8 +201,7 @@
 			COUNT(*)
 		FROM
 			vip_group vg
-			LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_ = vgcgm.vip_group_id_
-			LEFT JOIN course_schedule cs ON vgcgm.class_group_id_ = cs.class_group_id_
+			LEFT JOIN course_schedule cs ON vg.id_ = cs.music_group_id_
 		<include refid="vipGroupSalaryQueryCondition"/>
 	</select>
     <select id="findSomeDayAgoTeacherCourseSalaryNoSettlement" resultMap="CourseScheduleTeacherSalary">

+ 0 - 68
mec-biz/src/main/resources/config/mybatis/DemoGroupClassGroupMapperMapper.xml

@@ -1,68 +0,0 @@
-<?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.DemoGroupClassGroupMapperDao">
-	
-	<resultMap type="com.ym.mec.biz.dal.entity.DemoGroupClassGroupMapper" id="DemoGroupClassGroupMapper">
-		<result column="id_" property="id" />
-		<result column="demo_group_id_" property="demoGroupId" />
-		<result column="class_group_id_" property="classGroupId" />
-		<result column="create_time_" property="createTime" />
-	</resultMap>
-	
-	<!-- 根据主键查询一条记录 -->
-	<select id="get" resultMap="DemoGroupClassGroupMapper" >
-		SELECT * FROM demo_group_class_group_mapper WHERE id_ = #{id} 
-	</select>
-	
-	<!-- 全查询 -->
-	<select id="findAll" resultMap="DemoGroupClassGroupMapper">
-		SELECT * FROM demo_group_class_group_mapper ORDER BY id_
-	</select>
-	
-	<!-- 向数据库增加一条记录 -->
-	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.DemoGroupClassGroupMapper" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		<!--
-		<selectKey resultClass="int" keyProperty="id" > 
-		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
-		</selectKey>
-		-->
-		INSERT INTO demo_group_class_group_mapper (id_,demo_group_id_,class_group_id_,create_time_) VALUES(#{id},#{demoGroupId},#{classGroupId},#{createTime})
-	</insert>
-	
-	<!-- 根据主键查询一条记录 -->
-	<update id="update" parameterType="com.ym.mec.biz.dal.entity.DemoGroupClassGroupMapper">
-		UPDATE demo_group_class_group_mapper <set>
-<if test="id != null">
-id_ = #{id},
-</if>
-<if test="classGroupId != null">
-class_group_id_ = #{classGroupId},
-</if>
-<if test="demoGroupId != null">
-demo_group_id_ = #{demoGroupId},
-</if>
-<if test="createTime != null">
-create_time_ = #{createTime},
-</if>
-</set> WHERE id_ = #{id} 
-	</update>
-	
-	<!-- 根据主键删除一条记录 -->
-	<delete id="delete" >
-		DELETE FROM demo_group_class_group_mapper WHERE id_ = #{id} 
-	</delete>
-	
-	<!-- 分页查询 -->
-	<select id="queryPage" resultMap="DemoGroupClassGroupMapper" parameterType="map">
-		SELECT * FROM demo_group_class_group_mapper ORDER BY id_ <include refid="global.limit"/>
-	</select>
-	
-	<!-- 查询当前表的总记录数 -->
-	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM demo_group_class_group_mapper
-	</select>
-</mapper>

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

@@ -196,7 +196,7 @@
         su.avatar_,
         t.introduction_,
         s.name_ subject_name_,
-        COUNT(dgcgm.class_group_id_) number_of_classes_,
+        COUNT(cg.id_) number_of_classes_,
         dgcp.id_,
         dgcp.demo_group_id_,
         dgcp.create_time_,
@@ -210,7 +210,7 @@
         LEFT JOIN teacher t ON dg.user_id_=t.id_
         LEFT JOIN sys_user su ON dg.user_id_=su.id_
         LEFT JOIN `subject` s ON dg.subject_id_=s.id_
-        LEFT JOIN demo_group_class_group_mapper dgcgm ON dg.id_=dgcgm.demo_group_id_
+        LEFT JOIN class_group cg ON dg.id_=cg.music_group_id_ AND cg.group_type_='DEMO'
         <include refid="demoGroupQueryCondition"/>
         GROUP BY dgcp.id_,dg.id_
         ORDER BY dgcp.start_time_
@@ -243,8 +243,7 @@
         GROUP_CONCAT(DISTINCT s.name_) subjectNames
         FROM
         demo_group dg
-        LEFT JOIN demo_group_class_group_mapper dgcgm ON dg.id_=dgcgm.demo_group_id_
-        LEFT JOIN class_group cg ON dgcgm.class_group_id_=cg.id_
+        LEFT JOIN class_group cg ON dg.id_=cg.music_group_id_ AND cg.group_type_='DEMO'
         LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
         LEFT JOIN `subject` s ON s.id_ = cg.subject_id_list_
         WHERE cs.type_ = 'DEMO' AND dg.user_id_ = #{teacherId}
@@ -281,7 +280,7 @@
 	</select>
     
     <select id="queryCurrentMonthCoursesNum" resultType="int">
-    	select count(cs.id_) from course_schedule cs left join demo_group_class_group_mapper vgcgm on cs.class_group_id_ = vgcgm.class_group_id_ left join demo_group vg on vgcgm.demo_group_id_ = vg.id_ where cs.type_ in ('DEMO')
+    	select count(cs.id_) from course_schedule cs left join demo_group vg on cs.music_group_id_ = vg.id_ AND cs.group_type_='DEMO' where cs.type_ in ('DEMO')
   		and DATE_FORMAT(cs.class_date_, '%Y%m' ) = DATE_FORMAT(CURDATE() , '%Y%m')
    		<if test="organId != null">
    			and find_in_set(#{organId},vg.organ_id_list_)

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

@@ -8,6 +8,7 @@
 
     <resultMap type="com.ym.mec.biz.dal.entity.StudentAttendance" id="StudentAttendance">
         <result column="id_" property="id"/>
+        <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="music_group_id_" property="musicGroupId"/>
         <result column="class_group_id_" property="classGroupId"/>
         <result column="course_schedule_id_" property="courseScheduleId"/>
@@ -33,15 +34,15 @@
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentAttendance" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
         INSERT INTO student_attendance
-        (music_group_id_,class_group_id_,course_schedule_id_,user_id_,teacher_id_,status_,create_time_,remark_,current_class_times_)
-        VALUES(#{musicGroupId},#{classGroupId},#{courseScheduleId},#{userId},#{teacherId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),#{remark},#{currentClassTimes})
+        (group_type_,music_group_id_,class_group_id_,course_schedule_id_,user_id_,teacher_id_,status_,create_time_,remark_,current_class_times_)
+        VALUES(#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{musicGroupId},#{classGroupId},#{courseScheduleId},#{userId},#{teacherId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),#{remark},#{currentClassTimes})
     </insert>
 
     <insert id="addStudentAttendances" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
-      INSERT INTO student_attendance ( music_group_id_, class_group_id_, course_schedule_id_, user_id_, teacher_id_, status_, create_time_, remark_ ,current_class_times_)
+      INSERT INTO student_attendance (group_type_, music_group_id_, class_group_id_, course_schedule_id_, user_id_, teacher_id_, status_, create_time_, remark_ ,current_class_times_)
       VALUES
 	  <foreach collection="list" item="studentAttendance" separator=",">
-          (#{studentAttendance.musicGroupId},#{studentAttendance.classGroupId},#{studentAttendance.courseScheduleId},#{studentAttendance.userId},#{studentAttendance.teacherId},#{studentAttendance.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),#{studentAttendance.remark},#{studentAttendance.currentClassTimes})
+          (#{studentAttendance.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{studentAttendance.musicGroupId},#{studentAttendance.classGroupId},#{studentAttendance.courseScheduleId},#{studentAttendance.userId},#{studentAttendance.teacherId},#{studentAttendance.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),#{studentAttendance.remark},#{studentAttendance.currentClassTimes})
       </foreach>
     </insert>
 
@@ -58,6 +59,9 @@
             <if test="remark != null">
                 remark_ = #{remark},
             </if>
+            <if test="groupType != null">
+                group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
             <if test="classGroupId != null">
                 class_group_id_ = #{classGroupId},
             </if>
@@ -76,6 +80,42 @@
         </set>
         WHERE id_ = #{id}
     </update>
+    
+    <update id="batchUpdate"  parameterType="java.util.List">  
+    	<foreach collection="list" item="item" index="index" open="" close="" separator=";">
+	        update student_attendance
+	        <set>
+	            <if test="item.status != null">
+	                status_ = #{item.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+	            </if>
+	            <if test="item.userId != null">
+	                user_id_ = #{item.userId},
+	            </if>
+	            <if test="item.remark != null">
+	                remark_ = #{item.remark},
+	            </if>
+	            <if test="item.classGroupId != null">
+	                class_group_id_ = #{item.classGroupId},
+	            </if>
+	            <if test="item.groupType != null">
+	                group_type_ = #{item.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+	            </if>
+	            <if test="item.teacherId != null">
+	                teacher_id_ = #{item.teacherId},
+	            </if>
+	            <if test="item.courseScheduleId != null">
+	                course_schedule_id_ = #{item.courseScheduleId},
+	            </if>
+	            <if test="item.musicGroupId != null">
+	                music_group_id_ = #{item.musicGroupId},
+	            </if>
+	            <if test="item.currentClassTimes != null">
+	                current_class_times_ = #{item.currentClassTimes},
+	            </if>
+        	</set>
+	        where id = ${item.id}
+	    </foreach>      
+	</update>
 
     <!-- 根据主键删除一条记录 -->
     <delete id="delete">

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

@@ -30,6 +30,7 @@
         <result property="courseBalance" column="course_balance_"/>
         <result property="bankName" column="bank_name_"/>
         <result property="cardNo" column="card_no_"/>
+        <result property="courseBalance" column="course_balance_"/>
     </resultMap>
 
     <sql id="queryCondition">
@@ -189,7 +190,7 @@
                 and cgsm.user_id_=#{studentId}
             </if>
             <if test="musicGroupId!=null">
-                and cg.music_group_id_=#{musicGroupId}
+                and cg.music_group_id_=#{musicGroupId} AND cg.group_type_='MUSIC'
             </if>
             <if test="classGroupType!=null">
                 and cg.type_=#{classGroupType}
@@ -204,7 +205,7 @@
                 and su.username_ like CONCAT("%",#{teacherName},"%")
             </if>
             <if test="vipGroupId!=null">
-                and vgcgm.vip_group_id_=#{vipGroupId}
+                and cg.music_group_id_=#{vipGroupId} AND cg.group_type_='VIP'
             </if>
         </where>
     </sql>
@@ -219,9 +220,6 @@
             su.username_ teacher_name_
         FROM class_group cg
             LEFT JOIN class_group_student_mapper cgsm ON cg.id_=cgsm.class_group_id_
-            <if test="vipGroupId!=null">
-                LEFT JOIN vip_group_class_group_mapper vgcgm ON cgsm.class_group_id_=vgcgm.class_group_id_
-            </if>
             LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
             LEFT JOIN sys_user su ON cs.teacher_id_=su.id_
         <include refid="studentManageCourseQueryCondition"/>
@@ -232,9 +230,6 @@
     <select id="countStudentCourses" resultType="int">
         SELECT count(*) FROM class_group cg
         LEFT JOIN class_group_student_mapper cgsm ON cg.id_=cgsm.class_group_id_
-        <if test="vipGroupId!=null">
-            LEFT JOIN vip_group_class_group_mapper vgcgm ON cgsm.class_group_id_=vgcgm.class_group_id_
-        </if>
         LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
         LEFT JOIN sys_user su ON cs.teacher_id_=su.id_
         <include refid="studentManageCourseQueryCondition"/>
@@ -295,7 +290,8 @@
             suca.balance_,
             suca.course_balance_,
             subc.bank_name_,
-            subc.card_no_
+            subc.card_no_,
+            suca.course_balance_
         FROM
             sys_user_cash_account suca
             LEFT JOIN sys_user_bank_card subc ON suca.user_id_ = subc.user_id_

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

@@ -86,7 +86,7 @@
         (id_,type_,goods_id_list_,price_,create_time_,update_time_,payment_order_id_)
         VALUES
         <foreach collection="studentPaymentOrderDetailList" item="orderDetail" separator=",">
-            (#{orderDetail.id},#{orderDetail.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{orderDetail.goodsIdList},#{orderDetail.price},#{orderDetail.createTime},#{orderDetail.updateTime},#{orderDetail.paymentOrderId})
+            (#{orderDetail.id},#{orderDetail.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{orderDetail.goodsIdList},#{orderDetail.price},now(),now(),#{orderDetail.paymentOrderId})
         </foreach>
     </insert>
 

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

@@ -8,6 +8,7 @@
 
     <resultMap type="com.ym.mec.biz.dal.entity.StudentPaymentOrder" id="StudentPaymentOrder">
         <result column="id_" property="id"/>
+        <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="user_id_" property="userId"/>
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="expect_amount_" property="expectAmount"/>
@@ -73,8 +74,8 @@
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentPaymentOrder" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
         INSERT INTO student_payment_order
-        (id_,user_id_,type_,expect_amount_,actual_amount_,trans_no_,status_,memo_,create_time_,update_time_,payment_channel_,payment_business_channel_,payment_account_no_,order_no_,music_group_id_,class_group_id_)
-        VALUES(#{id},#{userId},#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{expectAmount},#{actualAmount},#{transNo},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{memo},now(),now(),#{paymentChannel},#{paymentBusinessChannel},#{paymentAccountNo},#{orderNo},#{musicGroupId},#{classGroupId})
+        (id_,group_type_,user_id_,type_,expect_amount_,actual_amount_,trans_no_,status_,memo_,create_time_,update_time_,payment_channel_,payment_business_channel_,payment_account_no_,order_no_,music_group_id_,class_group_id_)
+        VALUES(#{id},#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{userId},#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{expectAmount},#{actualAmount},#{transNo},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{memo},now(),now(),#{paymentChannel},#{paymentBusinessChannel},#{paymentAccountNo},#{orderNo},#{musicGroupId},#{classGroupId})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -84,6 +85,9 @@
             <if test="status != null">
                 status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
+            <if test="groupType != null">
+                group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
             <if test="orderNo != null">
                 order_no_ = #{orderNo},
             </if>

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

@@ -424,10 +424,10 @@
     <insert id="insertBasic" parameterType="com.ym.mec.biz.dal.entity.StudentRegistration">
         INSERT INTO student_registration
         (parents_phone_,user_id_,name_,music_group_id_,current_grade_,current_class_,subject_id_,
-        create_time_,update_time_,parents_name_,payment_status_,actual_subject_id_,music_group_status_)
+        create_time_,update_time_,parents_name_,payment_status_,actual_subject_id_,music_group_status_,temporary_course_fee_)
         VALUES (#{parentsPhone},#{userId},#{name},#{musicGroupId},#{currentGrade},#{currentClass},#{subjectId},
             now(),now(),#{parentsName},#{paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{subjectId},
-            #{musicGroupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+            #{musicGroupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}#{temporaryCourseFee})
     </insert>
 
     <!-- 查询乐团userIdList的学生 -->

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/SysUserCashAccountMapper.xml

@@ -87,5 +87,11 @@
     <select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM sys_user_cash_account
 	</select>
+    <select id="findByUserIds" resultMap="SysUserCashAccount">
+        SELECT * FROM sys_user_cash_account WHERE user_id_ IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+    </select>
 
 </mapper>

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

@@ -8,6 +8,7 @@
 
     <resultMap type="com.ym.mec.biz.dal.entity.TeacherAttendance" id="TeacherAttendance">
         <result column="id_" property="id"/>
+        <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="teacher_id_" property="teacherId"/>
         <result column="music_group_id_" property="musicGroupId"/>
         <result column="class_group_id_" property="classGroupId"/>
@@ -45,17 +46,17 @@
         </selectKey>
         -->
         INSERT INTO teacher_attendance
-        (id_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,remark_,create_time_,sign_out_time_,sign_out_status_)
-        VALUES(#{id},#{teacherId},#{musicGroupId},#{classGroupId},#{courseScheduleId},#{signInTime},#{signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{remark},now(),#{signOutTime},#{signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+        (id_,group_type_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,remark_,create_time_,sign_out_time_,sign_out_status_)
+        VALUES(#{id},#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{teacherId},#{musicGroupId},#{classGroupId},#{courseScheduleId},#{signInTime},#{signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{remark},now(),#{signOutTime},#{signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
     </insert>
 
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.TeacherAttendance" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
         INSERT INTO teacher_attendance
-        (teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,remark_,create_time_,sign_out_time_,sign_out_status_)
+        (group_type_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,remark_,create_time_,sign_out_time_,sign_out_status_)
         VALUE
         <foreach collection="teacherAttendances" item="teacherAttendance" separator=",">
-            (#{teacherAttendance.teacherId},#{teacherAttendance.musicGroupId},#{teacherAttendance.classGroupId},#{teacherAttendance.courseScheduleId},#{teacherAttendance.signInTime},#{teacherAttendance.signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{teacherAttendance.remark},now(),#{teacherAttendance.signOutTime},#{teacherAttendance.signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+            (#{teacherAttendance.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{teacherAttendance.teacherId},#{teacherAttendance.musicGroupId},#{teacherAttendance.classGroupId},#{teacherAttendance.courseScheduleId},#{teacherAttendance.signInTime},#{teacherAttendance.signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{teacherAttendance.remark},now(),#{teacherAttendance.signOutTime},#{teacherAttendance.signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
         </foreach>
     </insert>
 
@@ -69,6 +70,9 @@
             <if test="remark != null">
                 remark_ = #{remark},
             </if>
+            <if test="groupType != null">
+                group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
             <if test="signInTime != null">
                 sign_in_time_ = #{signInTime},
             </if>

+ 0 - 92
mec-biz/src/main/resources/config/mybatis/VipGroupClassGroupMapperMapper.xml

@@ -1,92 +0,0 @@
-<?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.VipGroupClassGroupMapperDao">
-
-    <resultMap type="com.ym.mec.biz.dal.entity.VipGroupClassGroupMapper" id="VipGroupClassGroupMapper">
-        <result column="id_" property="id"/>
-        <result column="vip_group_id_" property="vipGroupId"/>
-        <result column="class_group_id_" property="classGroupId"/>
-        <result column="create_time_" property="createTime"/>
-    </resultMap>
-
-    <!-- 根据主键查询一条记录 -->
-    <select id="get" resultMap="VipGroupClassGroupMapper">
-		SELECT * FROM vip_group_class_group_mapper WHERE id_ = #{id} 
-	</select>
-
-    <!-- 全查询 -->
-    <select id="findAll" resultMap="VipGroupClassGroupMapper">
-		SELECT * FROM vip_group_class_group_mapper ORDER BY id_
-	</select>
-
-    <!-- 向数据库增加一条记录 -->
-    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.VipGroupClassGroupMapper" useGeneratedKeys="true"
-            keyColumn="id" keyProperty="id">
-        <!--
-        <selectKey resultClass="int" keyProperty="id" >
-        SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL
-        </selectKey>
-        -->
-        INSERT INTO vip_group_class_group_mapper (id_,vip_group_id_,class_group_id_,create_time_)
-        VALUES(#{id},#{vipGroupId},#{classGroupId},now())
-    </insert>
-
-    <!-- 根据主键查询一条记录 -->
-    <update id="update" parameterType="com.ym.mec.biz.dal.entity.VipGroupClassGroupMapper">
-        UPDATE vip_group_class_group_mapper
-        <set>
-            <if test="vipGroupId != null">
-                vip_group_id_ = #{vipGroupId},
-            </if>
-            <if test="id != null">
-                id_ = #{id},
-            </if>
-            <if test="classGroupId != null">
-                class_group_id_ = #{classGroupId},
-            </if>
-        </set>
-        WHERE id_ = #{id}
-    </update>
-
-    <!-- 根据主键删除一条记录 -->
-    <delete id="delete">
-		DELETE FROM vip_group_class_group_mapper WHERE id_ = #{id} 
-	</delete>
-
-    <!-- 分页查询 -->
-    <select id="queryPage" resultMap="VipGroupClassGroupMapper" parameterType="map">
-        SELECT * FROM vip_group_class_group_mapper ORDER BY id_
-        <include refid="global.limit"/>
-    </select>
-
-    <!-- 查询当前表的总记录数 -->
-    <select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM vip_group_class_group_mapper
-	</select>
-    <select id="findByVipGroupId" resultMap="VipGroupClassGroupMapper">
-        SELECT * FROM vip_group_class_group_mapper WHERE vip_group_id_=#{vipGroupId}
-    </select>
-    <select id="findClassGroupByVipGroup" resultMap="com.ym.mec.biz.dal.dao.ClassGroupDao.ClassGroup">
-        SELECT
-            cg.*
-        FROM
-            vip_group_class_group_mapper vgcgm
-            LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
-            WHERE vgcgm.vip_group_id_=#{vipGroupId} FOR UPDATE
-    </select>
-    <select id="findClassGroupsByVipGroups" resultMap="com.ym.mec.biz.dal.dao.ClassGroupDao.ClassGroup">
-        SELECT
-            cg.*
-        FROM
-            vip_group_class_group_mapper vgcgm
-            LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
-            WHERE vgcgm.vip_group_id_ IN
-            <foreach collection="vipGroupIds" item="vipGroupId" open="(" close=")" separator=",">
-                #{vipGroupId}
-            </foreach>
-    </select>
-</mapper>

+ 40 - 31
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -108,10 +108,9 @@
             vgc.name_ vip_group_category_
         FROM
             class_group_student_mapper cgsm
-            LEFT JOIN vip_group_class_group_mapper vgcgm ON cgsm.class_group_id_=vgcgm.class_group_id_
             LEFT JOIN vip_group vg ON vgcgm.vip_group_id_=vg.id_
             LEFT JOIN vip_group_category vgc ON vg.vip_group_category_id_=vgc.id_
-        WHERE cgsm.class_group_id_=vgcgm.class_group_id_ AND cgsm.user_id_=#{userId}
+        WHERE cgsm.music_group_id_=vg.id_ AND cgsm.user_id_=#{userId}
     </select>
 
     <!-- 全查询 -->
@@ -311,8 +310,7 @@
             vgc.name_ category_name_
         FROM
             vip_group vg
-            LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
-            LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
+            LEFT JOIN class_group cg ON vg.id_=cg.music_group_id_ AND cg.group_type_ = 'VIP'
             LEFT JOIN teacher t ON vg.user_id_=t.id_
             LEFT JOIN sys_user su ON vg.user_id_=su.id_
             LEFT JOIN vip_group_activity vga ON vg.vip_group_activity_id_=vga.id_
@@ -326,8 +324,7 @@
             count(*)
         FROM
             vip_group vg
-        LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
-        LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
+        LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_ AND cg.group_type_ = 'VIP'
         <include refid="studentVipGroupQueryCondition"/>
     </select>
     <select id="getVipGroupBaseInfo" resultMap="vipGroupManageDetailDto">
@@ -344,8 +341,7 @@
         FROM
             vip_group vg
             LEFT JOIN sys_user su ON vg.user_id_=su.id_
-            LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
-            LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
+            LEFT JOIN class_group cg ON vg.id_=cg.music_group_id_ AND cg.group_type_ = 'VIP'
             LEFT JOIN vip_group_activity vga ON vg.vip_group_activity_id_=vga.id_
             LEFT JOIN vip_group_category vgc ON vg.vip_group_category_id_=vgc.id_
             LEFT JOIN school s ON vg.teacher_school_id_=s.id_
@@ -376,8 +372,7 @@
             cs.*
         FROM
             vip_group vg
-            LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
-            LEFT JOIN teacher_attendance ta ON vgcgm.class_group_id_=ta.class_group_id_
+            LEFT JOIN teacher_attendance ta ON vg.id_=ta.music_group_id_ AND ta.group_type_ = 'VIP'
             LEFT JOIN course_schedule cs ON ta.course_schedule_id_=cs.id_
         <include refid="vipGroupAttendanceQueryCondition"/>
         ORDER BY ta.id_
@@ -388,8 +383,7 @@
         count(*)
         FROM
         vip_group vg
-        LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
-        LEFT JOIN teacher_attendance ta ON vgcgm.class_group_id_=ta.class_group_id_
+        LEFT JOIN teacher_attendance ta ON vg.id_=ta.music_group_id_ AND ta.group_type_ = 'VIP'
         LEFT JOIN course_schedule cs ON ta.course_schedule_id_=cs.id_
         <include refid="vipGroupAttendanceQueryCondition"/>
         ORDER BY ta.id_
@@ -421,8 +415,7 @@
             cs.name_
         FROM
             vip_group vg
-            LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
-            LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
+            LEFT JOIN class_group cg ON vg.id_=cg.music_group_id_ AND cg.group_type_ = 'VIP'
             LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
 	        LEFT JOIN school s ON vg.teacher_school_id_=s.id_
             LEFT JOIN teacher t ON vg.user_id_=t.id_
@@ -444,6 +437,7 @@
     <resultMap id="vipGroupStudentDto" type="com.ym.mec.biz.dal.dto.VipGroupStudentDto">
         <result column="id_" property="id"/>
         <result column="username_" property="userName"/>
+        <result column="phone_" property="phone"/>
         <result column="total_class_times_" property="totalClassTimes"/>
         <result column="current_class_times_" property="currentClassTimes"/>
     </resultMap>
@@ -452,18 +446,39 @@
         SELECT
             su.id_,
             su.username_,
+            su.phone_,
             cg.total_class_times_,
             cg.current_class_times_
         FROM
-            vip_group_class_group_mapper vgcgm
-            LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
-            LEFT JOIN class_group_student_mapper cgsm ON vgcgm.class_group_id_=cgsm.class_group_id_
+            class_group cg
+            LEFT JOIN class_group_student_mapper cgsm ON cg.id_=cgsm.class_group_id_
             LEFT JOIN sys_user su ON cgsm.user_id_=su.id_
-        WHERE vgcgm.vip_group_id_=#{vipGroupId} AND cgsm.user_id_ IS NOT NULL
+        WHERE cg.music_group_id_=#{vipGroupId} AND cgsm.user_id_ IS NOT NULL
         ORDER BY su.id_
         <include refid="global.limit"/>
     </select>
 
+    <select id="findHaveCourseBalanceStudents" resultMap="vipGroupStudentDto">
+        SELECT
+            su.id_,
+            su.username_,
+            su.phone_
+        FROM
+          sys_user_cash_account suca
+          LEFT JOIN sys_user su ON suca.user_id_=su.id_
+        WHERE
+          suca.course_balance_ >0
+        <include refid="global.limit"/>
+    </select>
+    <select id="countHaveCourseBalanceStudentNum" resultType="int">
+        SELECT
+            COUNT(1)
+        FROM
+        sys_user_cash_account suca
+        WHERE
+        suca.course_balance_ >0
+    </select>
+
     <select id="countVipGroupStudents" resultType="int">
         SELECT
         count(*)
@@ -558,8 +573,7 @@
              SUM(csts.actual_salary_) totalSalary
         FROM
             vip_group vg
-            LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
-            LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
+            LEFT JOIN course_schedule cs ON vg.id_=cs.music_group_id_ AND cs.group_type_ = 'VIP'
             LEFT JOIN course_schedule_teacher_salary csts ON cs.id_=csts.course_schedule_id_
         WHERE vg.id_=#{vipGroupId} AND cs.id_ IS NOT NULL
     </select>
@@ -568,8 +582,7 @@
              COUNT(csts.id_)
         FROM
             vip_group vg
-            LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
-            LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
+            LEFT JOIN course_schedule cs ON vg.id_=cs.music_group_id_ AND cs.group_type_='VIP'
             LEFT JOIN course_schedule_teacher_salary csts ON cs.id_=csts.course_schedule_id_
         WHERE vg.id_=#{vipGroupId} AND cs.id_!=NULL AND csts.settlement_time_!=NULL AND csts.actual_salary_&lt;csts.expect_salary_
     </select>
@@ -580,8 +593,7 @@
             SUM(cssp.expect_price_) as 'value'
         FROM
             vip_group vg
-            LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_ = vgcgm.vip_group_id_
-            LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
+            LEFT JOIN course_schedule cs ON vg.id_=cs.music_group_id_ AND cs.group_type_ = 'VIP'
             LEFT JOIN course_schedule_student_payment cssp ON cs.id_=cssp.course_schedule_id_
             WHERE vg.id_=#{vipGroupId} AND cs.status_='NOT_START'
         GROUP BY cssp.user_id_
@@ -593,8 +605,7 @@
 
     <select id="countTeacherVipClass" resultType="java.lang.Integer">
         SELECT COUNT(DISTINCT vg.id_) FROM vip_group vg
-        LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_ = vgcgm.vip_group_id_
-        LEFT JOIN class_group cg ON cg.id_ = vgcgm.class_group_id_
+        LEFT JOIN class_group cg ON cg.music_group_id_ = vg.id_ AND cg.group_type_ = 'VIP'
         LEFT JOIN course_schedule cs ON cs.class_group_id_ = cg.id_
         WHERE cs.actual_teacher_id_ = #{teacherId} AND cs.type_ = 'VIP' AND cg.del_flag_ = 0
     </select>
@@ -622,8 +633,7 @@
         vg.payment_expire_date_,vg.courses_expire_date_,vg.online_classes_unit_price_,vg.offline_classes_unit_price_,
         cg.total_class_times_,cg.current_class_times_,cg.id_ class_group_id_,cg.student_num_,vg.vip_group_activity_id_
         FROM vip_group vg
-        LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_ = vgcgm.vip_group_id_
-        LEFT JOIN class_group cg ON cg.id_ = vgcgm.class_group_id_
+        LEFT JOIN class_group cg ON vg.id_ = cg.music_group_id_ AND cg.group_type_ = 'VIP'
         LEFT JOIN course_schedule cs ON cs.class_group_id_ = cg.id_
         WHERE cs.actual_teacher_id_ = #{teacherId} AND cs.type_ = 'VIP' AND cg.del_flag_ = 0 GROUP BY vg.id_,cg.id_
         <include refid="global.limit"/>
@@ -654,8 +664,7 @@
             vg.*
         FROM
             vip_group vg
-            LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
-            LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
+            LEFT JOIN course_schedule cs ON vg.id_=cs.music_group_id_ AND cs.group_type_ = 'VIP'
             WHERE cs.id_=#{courseScheduleId}
     </select>
     
@@ -669,7 +678,7 @@
     </select>
     
     <select id="queryCurrentMonthCoursesNum" resultType="int">
-    	select count(cs.id_) from course_schedule cs left join vip_group_class_group_mapper vgcgm on cs.class_group_id_ = vgcgm.class_group_id_ left join vip_group vg on vgcgm.vip_group_id_ = vg.id_ where cs.type_ in ('VIP')
+    	select count(cs.id_) from course_schedule cs left join vip_group vg on cs.music_group_id_ = vg.id_ where cs.type_ in ('VIP')
   		and DATE_FORMAT(cs.class_date_, '%Y%m' ) = DATE_FORMAT(CURDATE() , '%Y%m')
    		<if test="organId != null">
    			and vg.organ_id_ = #{organId}

+ 4 - 4
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -124,7 +124,7 @@ public class RoomServiceImpl implements RoomService {
                 log.info("join error: roomId = {}, userName = {}, isAudience = {}", roomId, userName, isAudience);
                 throw new ApiException(ErrorEnum.ERR_OVER_MAX_COUNT);
             }
-            /*if (!isAudience) {
+            if (!isAudience) {
                 List<RoomMember> assistantList = roomMemberDao.findByRidAndRole(roomId, RoleEnum.RoleAssistant.getValue());
                 if (!assistantList.isEmpty()) {
                     if (count == 1) {
@@ -137,12 +137,12 @@ public class RoomServiceImpl implements RoomService {
                 }
             } else {
                 roleEnum = RoleEnum.RoleAudience;
-            }*/
-            if(teacher == null){
+            }
+            /*if(teacher == null){
                 roleEnum = RoleEnum.RoleStudent;
             }else {
                 roleEnum = RoleEnum.RoleTeacher;
-            }
+            }*/
             saveRoomMember(userId, userName, roomId, roleEnum.getValue(), !isDisableCamera, curTime);
             IMApiResultInfo resultInfo = imHelper.joinGroup(new String[]{userId}, roomId, roomId);
             if (!resultInfo.isSuccess()) {

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

@@ -8,8 +8,8 @@ import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.service.ClassGroupService;
-import com.ym.mec.biz.service.ClassGroupStudentMapperService;
 import com.ym.mec.biz.service.StudentRegistrationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -59,7 +59,7 @@ public class ClassGroupController extends BaseController {
         if (classGroupStudentMapper != null) {
             return succeed(classGroup);
         }
-        classGroupService.addStudent(classGroup, sysUser.getId());
+        classGroupService.addStudent(classGroup, sysUser.getId(), GroupType.MUSIC);
         return succeed("报名成功");
     }
 

+ 3 - 2
mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.dto.HighClassGroupDto;
 import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
 import com.ym.mec.biz.dal.page.queryMusicGroupCourseScheduleQueryInfo;
 import com.ym.mec.biz.service.ClassGroupService;
@@ -35,7 +36,7 @@ public class ClassGroupController extends BaseController {
     @PostMapping("/add")
     @PreAuthorize("@pcs.hasPermissions('classGroup/add')")
     public Object add(@RequestBody ClassGroup classGroup) throws Exception {
-        return succeed(classGroupService.addClassGroup(classGroup));
+        return succeed(classGroupService.addClassGroup(classGroup, GroupType.MUSIC));
     }
 
     @ApiOperation(value = "新增合奏班")
@@ -234,4 +235,4 @@ public class ClassGroupController extends BaseController {
         return succeed(classGroupService.getClassGroupAndTeacherByType(musicGroup,type));
     }
 
-}
+}

+ 2 - 1
mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupStudentController.java

@@ -1,6 +1,7 @@
 package com.ym.mec.web.controller;
 
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.service.ClassGroupStudentMapperService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -61,7 +62,7 @@ public class ClassGroupStudentController extends BaseController {
             @ApiImplicitParam(name = "userIdsStr", value = "学生UserId,逗号分隔", required = true, dataType = "String")
     })
     public HttpResponseResult addStudents(Integer classGroupId, String userIdsStr) throws Exception {
-        return succeed(classGroupStudentMapperService.addStudents(classGroupId, userIdsStr));
+        return succeed(classGroupStudentMapperService.addStudents(classGroupId, userIdsStr, GroupType.MUSIC));
     }
 
 }

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

@@ -32,7 +32,7 @@ public class StudentRegistrationController extends BaseController {
     @ApiOperation(value = "乐团添加学员")
     @PostMapping("/insertStudent")
     @PreAuthorize("@pcs.hasPermissions('studentRegistration/insertStudent')")
-    public Object add(StudentAddDto studentAddDto) throws Exception {
+    public Object add(@RequestBody StudentAddDto studentAddDto) throws Exception {
         return succeed(studentRegistrationService.insertStudent(studentAddDto));
     }
 

+ 15 - 7
mec-web/src/main/java/com/ym/mec/web/controller/SysUserCashAccountController.java

@@ -1,8 +1,12 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.service.SysUserCashAccountService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -10,11 +14,7 @@ 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.auth.api.entity.SysUser;
-import com.ym.mec.biz.service.SysUserCashAccountService;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.page.QueryInfo;
+import java.math.BigDecimal;
 
 @RequestMapping("userCashAccount")
 @Api(tags = "用户账户服务")
@@ -44,11 +44,19 @@ public class SysUserCashAccountController extends BaseController {
 		return succeed(sysUserCashAccountService.queryPage(queryInfo));
 	}
 
-	@ApiOperation(value = "分页查询收费类型列表")
+	@ApiOperation(value = "将课程余额转入到可用余额")
 	@PostMapping("/transferCourseBalanceToBalance")
 	@PreAuthorize("@pcs.hasPermissions('userCashAccount/transferCourseBalanceToBalance')")
 	public Object transferCourseBalanceToBalance(Integer userId) {
 		sysUserCashAccountService.transferCourseBalanceToBalance(userId);
 		return succeed();
 	}
+
+	@ApiOperation(value = "更新指定用户的账户课程余额")
+	@PostMapping("/updateCourseBalance")
+	@PreAuthorize("@pcs.hasPermissions('userCashAccount/updateCourseBalance')")
+	public Object updateCourseBalance(Integer userId, BigDecimal decimal) {
+		sysUserCashAccountService.updateCourseBalance(userId,decimal);
+		return succeed();
+	}
 }

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

@@ -1,6 +1,5 @@
 package com.ym.mec.web.controller;
 
-import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
@@ -10,16 +9,19 @@ import com.ym.mec.biz.dal.dto.VipGroupApplyDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.StudentApplyRefunds.StudentApplyRefundsStatus;
 import com.ym.mec.biz.dal.enums.AuditStatusEnum;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.page.VipGroupAttendanceQueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupQueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupSalaryQueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupTeachingRecordQueryInfo;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.service.CourseScheduleService;
+import com.ym.mec.biz.service.StudentApplyRefundsService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.VipGroupService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -27,7 +29,10 @@ import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * @Author Joburgess
@@ -95,6 +100,21 @@ public class VipGroupManageController extends BaseController {
         return succeed(vipGroupService.findVipGroupStudents(queryInfo));
     }
 
+    @ApiOperation(value = "获取还有课程余额的学员")
+    @GetMapping(value = "/findHaveCourseBalanceStudents")
+    @PreAuthorize("@pcs.hasPermissions('vipGroupManage/findHaveCourseBalanceStudents')")
+    public Object findHaveCourseBalanceStudents(VipGroupQueryInfo queryInfo){
+        return succeed(vipGroupService.findHaveCourseBalanceStudents(queryInfo));
+    }
+
+    @ApiOperation(value = "添加vip课学员")
+    @GetMapping(value = "/addVipGroupStudents")
+    @PreAuthorize("@pcs.hasPermissions('vipGroupManage/addVipGroupStudents')")
+    public Object addVipGroupStudents(Long vipGroupId,@Param("studentIds[]") List<Integer> studentIds){
+        vipGroupService.addVipGroupStudents(vipGroupId,studentIds);
+        return succeed();
+    }
+
     @ApiOperation(value = "vip课详情")
     @GetMapping("/getVipGroupDetail")
     @PreAuthorize("@pcs.hasPermissions('vipGroupManage/getVipGroupDetail')")