Преглед на файлове

Merge remote-tracking branch 'origin/feature/0529-live' into feature/0529-live

shangke преди 2 години
родител
ревизия
e3d055955e

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

@@ -2007,4 +2007,10 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @param muteAll 全员静音状态
      */
     void updateGroupMuteAllStatus(@Param("courseScheduleId") Long courseScheduleId, @Param("muteAll") Boolean muteAll);
+
+    /**
+     * 直播课需要通知的课程
+     */
+    List<CourseSchedule> liveCourseRemind();
+
 }

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

@@ -462,4 +462,6 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
     List<StudentPaymentOrderExportDto> ExportQueryPage2(Map<String, Object> params);
 
     int queryCount1(Map<String, Object> params);
+
+    List<StudentPaymentOrder> queryVipQuitOrder(@Param("vipGroupId") Long vipGroupId, @Param("orderTypeEnum") OrderTypeEnum orderTypeEnum, @Param("success") DealStatusEnum success);
 }

+ 4 - 31
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVipGroupDetailDto.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.util.List;
 
@@ -9,6 +10,7 @@ import java.util.List;
  * @Author Joburgess
  * @Date 2019/9/23
  */
+@Data
 public class StudentVipGroupDetailDto extends StudentVipGroupShowListDto {
 
     @ApiModelProperty(value = "总课时")
@@ -23,35 +25,6 @@ public class StudentVipGroupDetailDto extends StudentVipGroupShowListDto {
     @ApiModelProperty(value = "课程列表",required = false)
     private List<CourseSchedule> courseSchedules;
 
-    public Integer getTotalClassTimes() {
-        return totalClassTimes;
-    }
-
-    public void setTotalClassTimes(Integer totalClassTimes) {
-        this.totalClassTimes = totalClassTimes;
-    }
-
-    public Integer getNumberOfClasses() {
-        return numberOfClasses;
-    }
-
-    public void setNumberOfClasses(Integer numberOfClasses) {
-        this.numberOfClasses = numberOfClasses;
-    }
-
-    public String getAddress() {
-        return address;
-    }
-
-    public void setAddress(String address) {
-        this.address = address;
-    }
-
-    public List<CourseSchedule> getCourseSchedules() {
-        return courseSchedules;
-    }
-
-    public void setCourseSchedules(List<CourseSchedule> courseSchedules) {
-        this.courseSchedules = courseSchedules;
-    }
+    @ApiModelProperty("直播间配置信息")
+    private String liveConfigJson;
 }

+ 15 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java

@@ -129,7 +129,8 @@ public class CourseSchedule  extends BaseEntity{
 	@ApiModelProperty(value = "助教编号列表(用于记录调整日志)")
 	private String teachingTeacherIds;
 
-	private String teachingTeacherNames;
+
+    private String teachingTeacherNames;
 
 	/**  */
 	private java.util.Date createTime;
@@ -218,7 +219,19 @@ public class CourseSchedule  extends BaseEntity{
 	@ApiModelProperty("授课直播间编号")
 	private String liveRoomId;
 
-	public Boolean getSettlementReportFlag() {
+
+    @ApiModelProperty(value = "直播课通知标记")
+    private Boolean liveRemind;
+
+    public Boolean getLiveRemind() {
+        return liveRemind;
+    }
+
+    public void setLiveRemind(Boolean liveRemind) {
+        this.liveRemind = liveRemind;
+    }
+
+    public Boolean getSettlementReportFlag() {
 		return settlementReportFlag;
 	}
 

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

@@ -3,22 +3,17 @@ package com.ym.mec.biz.dal.entity;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.enums.AuditStatusEnum;
 import com.ym.mec.common.entity.BaseEntity;
-
+import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 /**
  * 对应数据库表(teacher_leave_record):
  */
+@Data
 public class TeacherLeaveRecord extends BaseEntity {
 
-    /**
-     *
-     */
     private Long id;
 
-    /**
-     *
-     */
     private Integer userId;
 
     /**
@@ -46,14 +41,8 @@ public class TeacherLeaveRecord extends BaseEntity {
      */
     private String remark;
 
-    /**
-     *
-     */
     private java.util.Date createTime;
 
-    /**
-     *
-     */
     private java.util.Date updateTime;
 
     /**
@@ -83,152 +72,17 @@ public class TeacherLeaveRecord extends BaseEntity {
     
     private SysUser user = new SysUser();
 
-    public String getLeaveCategoryName() {
-        return leaveCategoryName;
-    }
-
-    public void setLeaveCategoryName(String leaveCategoryName) {
-        this.leaveCategoryName = leaveCategoryName;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getId() {
-        return this.id;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    public Integer getUserId() {
-        return this.userId;
-    }
-
-    public void setDays(double days) {
-        this.days = days;
-    }
-
-    public double getDays() {
-        return this.days;
-    }
-
-    public Integer getLeaveCategoryId() {
-        return leaveCategoryId;
-    }
-
-    public void setLeaveCategoryId(Integer leaveCategoryId) {
-        this.leaveCategoryId = leaveCategoryId;
-    }
-
-    public void setStatus(AuditStatusEnum status) {
-        this.status = status;
-    }
-
-    public AuditStatusEnum getStatus() {
-        return this.status;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    public String getRemark() {
-        return this.remark;
-    }
-
-    public void setCreateTime(java.util.Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public java.util.Date getCreateTime() {
-        return this.createTime;
-    }
-
-    public void setUpdateTime(java.util.Date updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public java.util.Date getUpdateTime() {
-        return this.updateTime;
-    }
-
-    public void setStartTime(java.util.Date startTime) {
-        this.startTime = startTime;
-    }
-
-    public java.util.Date getStartTime() {
-        return this.startTime;
-    }
-
-    public void setEndTime(java.util.Date endTime) {
-        this.endTime = endTime;
-    }
-
-    public java.util.Date getEndTime() {
-        return this.endTime;
-    }
-
-    public void setCoursesScheduleJson(String coursesScheduleJson) {
-        this.coursesScheduleJson = coursesScheduleJson;
-    }
-
-    public String getCoursesScheduleJson() {
-        return this.coursesScheduleJson;
-    }
-
-    public void setWfProcessId(String wfProcessId) {
-        this.wfProcessId = wfProcessId;
-    }
-
-    public String getWfProcessId() {
-        return this.wfProcessId;
-    }
-
-    public void setWfOrderId(String wfOrderId) {
-        this.wfOrderId = wfOrderId;
-    }
-
-    public String getWfOrderId() {
-        return this.wfOrderId;
-    }
-
-    public SysUser getUser() {
-		return user;
-	}
-
-	public void setUser(SysUser user) {
-		this.user = user;
-	}
-
 	@Override
     public String toString() {
         return ToStringBuilder.reflectionToString(this);
     }
 
 
+    @Data
     public static class CoursesScheduleHistory {
 
         private CourseSchedule before;
 
         private CourseSchedule after;
-
-        public CourseSchedule getBefore() {
-            return before;
-        }
-
-        public void setBefore(CourseSchedule before) {
-            this.before = before;
-        }
-
-        public CourseSchedule getAfter() {
-            return after;
-        }
-
-        public void setAfter(CourseSchedule after) {
-            this.after = after;
-        }
     }
 }

+ 2 - 368
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java

@@ -7,6 +7,7 @@ import com.ym.mec.common.entity.BaseEntity;
 
 import io.swagger.annotations.ApiModelProperty;
 
+import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.math.BigDecimal;
@@ -15,6 +16,7 @@ import java.util.Date;
 /**
  * 对应数据库表(vip_group):
  */
+@Data
 public class VipGroup extends BaseEntity {
 
 	/**  */
@@ -150,376 +152,8 @@ public class VipGroup extends BaseEntity {
 
 	private int enableDelete;
 
-	public Integer getEnableDelete() {
-		return enableDelete;
-	}
-
-	public void setEnableDelete(Integer enableDelete) {
-		this.enableDelete = enableDelete;
-	}
-
-	public String getVipGroupCategoryName() {
-		return vipGroupCategoryName;
-	}
-
-	public void setVipGroupCategoryName(String vipGroupCategoryName) {
-		this.vipGroupCategoryName = vipGroupCategoryName;
-	}
-
-	public BigDecimal getCourseUnitPrice() {
-		return courseUnitPrice;
-	}
-
-	public void setCourseUnitPrice(BigDecimal courseUnitPrice) {
-		this.courseUnitPrice = courseUnitPrice;
-	}
-
-	public String getLastOverTime() {
-		return lastOverTime;
-	}
-
-	public void setLastOverTime(String lastOverTime) {
-		this.lastOverTime = lastOverTime;
-	}
-
-	public String getUserInfo() {
-		return userInfo;
-	}
-
-	public void setUserInfo(String userInfo) {
-		this.userInfo = userInfo;
-	}
-
-	public String getEducationalTeacherName() {
-		return educationalTeacherName;
-	}
-
-	public void setEducationalTeacherName(String educationalTeacherName) {
-		this.educationalTeacherName = educationalTeacherName;
-	}
-
-	public Integer getEducationalTeacherId() {
-		return educationalTeacherId;
-	}
-
-	public void setEducationalTeacherId(Integer educationalTeacherId) {
-		this.educationalTeacherId = educationalTeacherId;
-	}
-
-	public Integer getSubClassTimes() {
-		return subClassTimes;
-	}
-
-	public void setSubClassTimes(Integer subClassTimes) {
-		this.subClassTimes = subClassTimes;
-	}
-
-	public String getStudentIdList() {
-		return studentIdList;
-	}
-
-	public void setStudentIdList(String studentIdList) {
-		this.studentIdList = studentIdList;
-	}
-
-	public String getCourseSchedulesJson() {
-		return courseSchedulesJson;
-	}
-
-	public void setCourseSchedulesJson(String courseSchedulesJson) {
-		this.courseSchedulesJson = courseSchedulesJson;
-	}
-
-	public Date getCourseStartDate() {
-		return courseStartDate;
-	}
-
-	public void setCourseStartDate(Date courseStartDate) {
-		this.courseStartDate = courseStartDate;
-	}
-
-	public Integer getMonthConsumeRate() {
-		return monthConsumeRate;
-	}
-
-	public void setMonthConsumeRate(Integer monthConsumeRate) {
-		this.monthConsumeRate = monthConsumeRate;
-	}
-
-	public String getStopReason() {
-		return stopReason;
-	}
-
-	public void setStopReason(String stopReason) {
-		this.stopReason = stopReason;
-	}
-
-	public String getMemo() {
-		return memo;
-	}
-
-	public void setMemo(String memo) {
-		this.memo = memo;
-	}
-
-	public String getVipGroupActivityName() {
-		return vipGroupActivityName;
-	}
-
-	public void setVipGroupActivityName(String vipGroupActivityName) {
-		this.vipGroupActivityName = vipGroupActivityName;
-	}
-
-	public String getUserName() {
-		return userName;
-	}
-
-	public void setUserName(String userName) {
-		this.userName = userName;
-	}
-
-	public Integer getStudentNum() {
-		return studentNum;
-	}
-
-	public void setStudentNum(Integer studentNum) {
-		this.studentNum = studentNum;
-	}
-
-	public Integer getTotalClassTimes() {
-		return totalClassTimes;
-	}
-
-	public void setTotalClassTimes(Integer totalClassTimes) {
-		this.totalClassTimes = totalClassTimes;
-	}
-
-	public Integer getCurrentClassTimes() {
-		return currentClassTimes;
-	}
-
-	public void setCurrentClassTimes(Integer currentClassTimes) {
-		this.currentClassTimes = currentClassTimes;
-	}
-
-	public VipGroupStatusEnum getStatus() {
-		return status;
-	}
-
-	public void setStatus(VipGroupStatusEnum status) {
-		this.status = status;
-	}
-
-	public Integer getVipGroupActivityId() {
-		return vipGroupActivityId;
-	}
-
-	public void setVipGroupActivityId(Integer vipGroupActivityId) {
-		this.vipGroupActivityId = vipGroupActivityId;
-	}
-
-	public AuditStatusEnum getAuditStatus() {
-		return auditStatus;
-	}
-
-	public void setAuditStatus(AuditStatusEnum auditStatus) {
-		this.auditStatus = auditStatus;
-	}
-
-	public Integer getVipGroupCategoryId() {
-		return vipGroupCategoryId;
-	}
-
-	public void setVipGroupCategoryId(Integer vipGroupCategoryId) {
-		this.vipGroupCategoryId = vipGroupCategoryId;
-	}
-
-	public BigDecimal getOnlineClassesUnitPrice() {
-		return onlineClassesUnitPrice;
-	}
-
-	public void setOnlineClassesUnitPrice(BigDecimal onlineClassesUnitPrice) {
-		this.onlineClassesUnitPrice = onlineClassesUnitPrice;
-	}
-
-	public BigDecimal getOfflineClassesUnitPrice() {
-		return offlineClassesUnitPrice;
-	}
-
-	public void setOfflineClassesUnitPrice(BigDecimal offlineClassesUnitPrice) {
-		this.offlineClassesUnitPrice = offlineClassesUnitPrice;
-	}
-
-	public BigDecimal getTotalPrice() {
-		return totalPrice;
-	}
-
-	public void setTotalPrice(BigDecimal totalPrice) {
-		this.totalPrice = totalPrice;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public Long getId() {
-		return this.id;
-	}
-
-	public void setUserId(Integer userId) {
-		this.userId = userId;
-	}
-
-	public Integer getUserId() {
-		return this.userId;
-	}
-
-	public void setSingleClassMinutes(Integer singleClassMinutes) {
-		this.singleClassMinutes = singleClassMinutes;
-	}
-
-	public Integer getSingleClassMinutes() {
-		return this.singleClassMinutes;
-	}
-
-	public void setPaymentExpireDate(java.util.Date paymentExpireDate) {
-		this.paymentExpireDate = paymentExpireDate;
-	}
-
-	public java.util.Date getPaymentExpireDate() {
-		return this.paymentExpireDate;
-	}
-
-	public void setCoursesExpireDate(java.util.Date coursesExpireDate) {
-		this.coursesExpireDate = coursesExpireDate;
-	}
-
-	public java.util.Date getCoursesExpireDate() {
-		return this.coursesExpireDate;
-	}
-
-	public void setCreateTime(java.util.Date createTime) {
-		this.createTime = createTime;
-	}
-
-	public java.util.Date getCreateTime() {
-		return this.createTime;
-	}
-
-	public void setUpdateTime(java.util.Date updateTime) {
-		this.updateTime = updateTime;
-	}
-
-	public java.util.Date getUpdateTime() {
-		return this.updateTime;
-	}
-
-	public void setTeacherSchoolId(Integer teacherSchoolId) {
-		this.teacherSchoolId = teacherSchoolId;
-	}
-
-	public Integer getTeacherSchoolId() {
-		return this.teacherSchoolId;
-	}
-
-	public void setOnlineClassesNum(Integer onlineClassesNum) {
-		this.onlineClassesNum = onlineClassesNum;
-	}
-
-	public Integer getOnlineClassesNum() {
-		return this.onlineClassesNum;
-	}
-
-	public void setOfflineClassesNum(Integer offlineClassesNum) {
-		this.offlineClassesNum = offlineClassesNum;
-	}
-
-	public Integer getOfflineClassesNum() {
-		return this.offlineClassesNum;
-	}
-
-	public Date getRegistrationStartTime() {
-		return registrationStartTime;
-	}
-
-	public void setRegistrationStartTime(Date registrationStartTime) {
-		this.registrationStartTime = registrationStartTime;
-	}
-
-	public String getOrganIdList() {
-		return organIdList;
-	}
-
-	public void setOrganIdList(String organIdList) {
-		this.organIdList = organIdList;
-	}
-
-	public TeachModeEnum getGiveTeachMode() {
-		return giveTeachMode;
-	}
-
-	public void setGiveTeachMode(TeachModeEnum giveTeachMode) {
-		this.giveTeachMode = giveTeachMode;
-	}
-
-	public Integer getOrganId() {
-		return organId;
-	}
-
-	public void setOrganId(Integer organId) {
-		this.organId = organId;
-	}
-
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);
 	}
-
-	public String getOrganName() {
-		return organName;
-	}
-
-	public void setOrganName(String organName) {
-		this.organName = organName;
-	}
-
-	public String getSchoolName() {
-		return schoolName;
-	}
-
-	public void setSchoolName(String schoolName) {
-		this.schoolName = schoolName;
-	}
-
-	public String getSubjectName() {
-		return subjectName;
-	}
-
-	public void setSubjectName(String subjectName) {
-		this.subjectName = subjectName;
-	}
-
-	public String getGroupType() {
-		return groupType;
-	}
-
-	public void setGroupType(String groupType) {
-		this.groupType = groupType;
-	}
-
-	public String getLiveConfigJson() {
-		return liveConfigJson;
-	}
-
-	public void setLiveConfigJson(String liveConfigJson) {
-		this.liveConfigJson = liveConfigJson;
-	}
 }

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/LiveGroupWrapper.java

@@ -1,7 +1,6 @@
 package com.ym.mec.biz.dal.wrapper;
 
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -10,7 +9,6 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
 import java.util.Date;
 
 public class LiveGroupWrapper {
@@ -33,7 +31,7 @@ public class LiveGroupWrapper {
         @ApiModelProperty("直播课ID")
         private Long liveGroupId;
 
-        private Long classGroupdId;
+        private Long classGroupId;
 
     }
 
@@ -71,6 +69,9 @@ public class LiveGroupWrapper {
         @ApiModelProperty("报名时间")
         private Date createTime;
 
+        @ApiModelProperty("学生状态")
+        private int studentStatus = 0;
+
 
     }
 

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

@@ -463,5 +463,11 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      */
     IPage<LiveGroupWrapper.LiveGroupStudentList> liveStudentList(IPage<LiveGroupWrapper.LiveGroupStudentList> page, LiveGroupWrapper.LiveGroupStudentQuery query);
 
-    List<CourseSchedule> liveCourseList( LiveGroupWrapper.LiveGroupStudentQuery query);
+    Map<String, Object> liveCourseList(LiveGroupWrapper.LiveGroupStudentQuery query);
+
+    /**
+     *
+     * 直播课程提醒
+     */
+    void liveCourseRemind();
 }

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

@@ -16,6 +16,7 @@ import com.ym.mec.biz.dal.enums.SysUserRoleEnum;
 import com.ym.mec.biz.event.source.SendSeoMessageSource;
 import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.biz.service.TeacherLeaveRecordService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dal.BaseDAO;
@@ -53,7 +54,7 @@ public class TeacherLeaveRecordServiceImpl extends BaseServiceImpl<Long, Teacher
 	@Autowired
 	private SendSeoMessageSource sendSeoMessageSource;
 	@Autowired
-	private SysUserFeignService sysUserFeignService;
+	private SysUserService sysUserService;
 
 	@Override
 	public BaseDAO<Long, TeacherLeaveRecord> getDAO() {
@@ -61,12 +62,9 @@ public class TeacherLeaveRecordServiceImpl extends BaseServiceImpl<Long, Teacher
 	}
 
 	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+	@Transactional(rollbackFor = Exception.class)
 	public boolean askForLeave(TeacherLeaveRecord teacherLeaveRecord) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (Objects.isNull(sysUser)) {
-			throw new BizException("获取用户信息失败");
-		}
+		SysUser sysUser = sysUserService.getUser();
 		Date date = new Date();
 
 		teacherLeaveRecord.setUserId(sysUser.getId());
@@ -84,7 +82,7 @@ public class TeacherLeaveRecordServiceImpl extends BaseServiceImpl<Long, Teacher
 				List<CourseSchedule> list = new ArrayList<CourseSchedule>();
 
 				for (CoursesScheduleHistory his : coursesScheduleHistoryList) {
-					if (his.getBefore().getType() != CourseScheduleType.VIP) {
+					if (his.getBefore().getType() != CourseScheduleType.VIP && his.getBefore().getType() != CourseScheduleType.LIVE) {
 						continue;
 					}
 					if(!teacherLeaveRecord.getEndTime().before(his.getAfter().getStartClassTime())
@@ -94,10 +92,6 @@ public class TeacherLeaveRecordServiceImpl extends BaseServiceImpl<Long, Teacher
 
 					list.add(his.getAfter());
 				}
-
-				if(list.size() > 0){
-					// checkCourseSchedulePlansExitLeaveRecord(list);
-				}
 			}
 		}
 		teacherLeaveRecordDao.insert(teacherLeaveRecord);
@@ -112,10 +106,6 @@ public class TeacherLeaveRecordServiceImpl extends BaseServiceImpl<Long, Teacher
 	@Override
 	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
 	public HttpResponseResult approve(Long id, Integer userId, AuditStatusEnum status, String remark, Boolean allowZeroSalary) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (Objects.isNull(sysUser)) {
-			throw new BizException("获取用户信息失败");
-		}
 		TeacherLeaveRecord teacherLeaveRecord = teacherLeaveRecordDao.get(id);
 		if (teacherLeaveRecord == null) {
 			throw new BizException("请假记录不存在");

+ 218 - 70
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -2170,7 +2170,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         if (Objects.isNull(groupId)) {
             throw new BizException("请指定课程组");
         }
-        // groupType -> PRACTICE, VIP, LIVE
         if ("PRACTICE".equals(groupType)) {
             PracticeGroup practiceGroup = practiceGroupService.get(groupId);
             if (Objects.isNull(practiceGroup)) {
@@ -2469,38 +2468,30 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
             if (exist) {
                 throw new BizException("您已加入此课程");
             }
-//
-//			if(classGroup.getStudentNum()>0 && (VipGroupStatusEnum.APPLYING.equals(practiceGroup.getGroupStatus()))){
-//				int i = studentPaymentOrderDao.countGroupOrderWithoutFailed(vipGroupId.toString(), GroupType.PRACTICE);
-//				if(i<=0){
-//					throw new BizException("该课程已经无法通过购买加入,请联系教务老师!");
-//				}
-//			}
-
             List<CourseSchedule> courseSchedules = JSON.parseArray(practiceGroup.getCourseScheduleJson(), CourseSchedule.class);
             courseScheduleService.checkNewCourseSchedules(courseSchedules, false, false);
         } else {
             VipGroup vipGroup = get(vipGroupId.longValue());
-            if (Objects.nonNull(vipGroup.getStudentIdList())) {
-                Set<Integer> userIds = Arrays.asList(vipGroup.getStudentIdList().split(",")).stream().mapToInt(Integer::parseInt).boxed().collect(Collectors.toSet());
-                if (!userIds.contains(userId)) {
-                    throw new BizException("您无法购买此课程");
+            ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroupId.longValue(), vipGroup.getGroupType());
+            if("VIP".equals(vipGroup.getGroupType())){
+                if (StringUtils.isNotEmpty(vipGroup.getStudentIdList())) {
+                    Set<Integer> userIds = Arrays.asList(vipGroup.getStudentIdList().split(",")).stream().mapToInt(Integer::parseInt).boxed().collect(Collectors.toSet());
+                    if (!userIds.contains(userId)) {
+                        throw new BizException("您无法购买此课程");
+                    }
+                }
+                if (classGroup.getStudentNum() > 0 && (VipGroupStatusEnum.APPLYING.equals(vipGroup.getStatus()))) {
+                    int i = studentPaymentOrderDao.countGroupOrderWithoutFailed(vipGroupId.toString(), GroupType.VIP);
+                    if (i <= 0) {
+                        throw new BizException("该课程已经无法通过购买加入,请联系教务老师!");
+                    }
                 }
             }
-            ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroupId.longValue(), vipGroup.getGroupType());
             //是否已经购买
             Boolean exist = classGroupStudentMapperDao.existByClassGroupIds(classGroup.getId().toString(), userId);
             if (exist) {
                 throw new BizException("您已加入此课程");
             }
-
-            if (classGroup.getStudentNum() > 0 && (VipGroupStatusEnum.APPLYING.equals(vipGroup.getStatus()))) {
-                int i = studentPaymentOrderDao.countGroupOrderWithoutFailed(vipGroupId.toString(), GroupType.VIP);
-                if (i <= 0) {
-                    throw new BizException("该课程已经无法通过购买加入,请联系教务老师!");
-                }
-            }
-
             List<CourseSchedule> courseSchedules = JSON.parseArray(vipGroup.getCourseSchedulesJson(), CourseSchedule.class);
             courseScheduleService.checkNewCourseSchedules(courseSchedules, false, false);
         }
@@ -2659,7 +2650,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString());
         studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString());
         studentPaymentOrder.setClassGroupId(classGroup.getId());
-        studentPaymentOrder.setOrganId(vipGroup.getOrganId());
+        studentPaymentOrder.setOrganId(user.getOrganId());
         studentPaymentOrder.setVersion(0);
         studentPaymentOrder.setActivityBuyNum(vipGroup.getOnlineClassesNum() + vipGroup.getOfflineClassesNum());
         Integer vipGroupActivityId = vipGroup.getVipGroupActivityId();
@@ -2675,14 +2666,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
             }
             studentPaymentOrder.setPaymentChannel("BALANCE");
             if (userCashAccount.getBalance().subtract(amount).doubleValue() >= 0) {
-                studentPaymentRouteOrderService.addRouteOrder(orderNo, vipGroup.getOrganId(), vipGroup.getTotalPrice());
+                studentPaymentRouteOrderService.addRouteOrder(orderNo, user.getOrganId(), vipGroup.getTotalPrice());
                 // 更新订单信息
                 studentPaymentOrder.setActualAmount(new BigDecimal(0));
                 studentPaymentOrder.setBalancePaymentAmount(amount);
                 studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
                 studentPaymentOrder.setUpdateTime(date);
-                studentPaymentOrder.setOrganId(vipGroup.getOrganId());
-                studentPaymentOrder.setRoutingOrganId(vipGroup.getOrganId());
+                studentPaymentOrder.setOrganId(user.getOrganId());
+                studentPaymentOrder.setRoutingOrganId(user.getOrganId());
 
                 this.orderCallback(studentPaymentOrder);
 
@@ -2725,12 +2716,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 groupType.getDesc() + "购买",
                 vipGroup.getName(),
-                vipGroup.getOrganId(),
+                user.getOrganId(),
                 orderTypeEnum.getCode()
         );
 
-        studentPaymentOrder.setOrganId(vipGroup.getOrganId());
-        studentPaymentOrder.setRoutingOrganId(vipGroup.getOrganId());
+        studentPaymentOrder.setOrganId(user.getOrganId());
+        studentPaymentOrder.setRoutingOrganId(user.getOrganId());
         studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
         studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
         studentPaymentOrder.setUpdateTime(date);
@@ -4452,28 +4443,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void stopVipGroupWithNoCreate(Integer tenantId) {
-        List<VipGroup> noCreateSuccessVipGroups = vipGroupDao.findNoCreateSuccessVipGroup(tenantId,null);
+        List<VipGroup> noCreateSuccessVipGroups = vipGroupDao.findNoCreateSuccessVipGroup(tenantId,"VIP");
         if (CollectionUtils.isEmpty(noCreateSuccessVipGroups)) {
             return;
         }
-//        List<VipGroup> vipGroup = noCreateSuccessVipGroups.stream().filter(e -> StringUtils.equals("VIP",e.getGroupType())).collect(Collectors.toList());
-//        List<VipGroup> liveGroup = noCreateSuccessVipGroups.stream().filter(e -> StringUtils.equals("LIVE",e.getGroupType())).collect(Collectors.toList());
-//        List<VipGroup> noStudentGroup = vipGroups.stream().filter(e -> StringUtils.isEmpty(e.getStudentIdList())).collect(Collectors.toList());
-//        List<VipGroup> hasStudentGroup = vipGroups.stream().filter(e -> StringUtils.isNotEmpty(e.getStudentIdList())).collect(Collectors.toList());
-//        if(!CollectionUtils.isEmpty(noStudentGroup)){
-//            关闭课程组
-//        }
-//        if(!CollectionUtils.isEmpty(hasStudentGroup)){
-//            排课
-//        }
         //用户账户资金变动信息列表
         List<SysUserCashAccountDetail> userCashAccountDetails = new ArrayList<>();
-        List<Long> groupIds = noCreateSuccessVipGroups.stream().map(e -> e.getId()).collect(Collectors.toList());
-        List<ClassGroupStudentMapper> classGroupStudentMappers = classGroupStudentMapperDao.findByVipGroups(groupIds);
-        Map<Long, Integer> quitUserMap = new HashMap<>();
-        if(!CollectionUtils.isEmpty(classGroupStudentMappers)){
-            quitUserMap = classGroupStudentMappers.stream().collect(Collectors.groupingBy(e -> Long.parseLong(e.getMusicGroupId()), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0).getUserId())));
-        }
         for (VipGroup noCreateSuccessVipGroup : noCreateSuccessVipGroups) {
             GroupType groupType = GroupType.VIP;
             OrderTypeEnum orderTypeEnum = OrderTypeEnum.SMALL_CLASS_TO_BUY;
@@ -4486,13 +4461,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
                 continue;
             }
             noCreateSuccessVipGroup.setStatus(VipGroupStatusEnum.CANCEL);
-            List<StudentPaymentOrder> studentPaymentOrders = studentPaymentOrderDao.queryByDealStatus(noCreateSuccessVipGroup.getId().toString(),
+            List<StudentPaymentOrder> studentPaymentOrders = studentPaymentOrderDao.queryVipQuitOrder(noCreateSuccessVipGroup.getId(),
                     orderTypeEnum, DealStatusEnum.SUCCESS);
 
             for (StudentPaymentOrder studentPaymentOrder : studentPaymentOrders) {
-                if(studentPaymentOrder.getUserId().equals(quitUserMap.get(noCreateSuccessVipGroup.getId()))){
-
-                }
                 //生成账户资金明细
                 if (studentPaymentOrder.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
                     if(Objects.equals("关闭订单,实际支付成功,退到用户余额",studentPaymentOrder.getMemo())){
@@ -4531,6 +4503,138 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         }
     }
 
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void createLiveCourse() {
+        List<VipGroup> vipGroups = vipGroupDao.findNoCreateSuccessVipGroup(null,"LIVE");
+        if(!CollectionUtils.isEmpty(vipGroups)){
+            List<VipGroup> noStudentGroup = vipGroups.stream().filter(e -> StringUtils.isEmpty(e.getStudentIdList())).collect(Collectors.toList());
+            List<VipGroup> hasStudentGroup = vipGroups.stream().filter(e -> StringUtils.isNotEmpty(e.getStudentIdList())).collect(Collectors.toList());
+            if(!CollectionUtils.isEmpty(noStudentGroup)){
+                noStudentGroup.forEach(e->e.setStatus(VipGroupStatusEnum.CANCEL));
+                //关闭课程组
+                vipGroupDao.batchUpdate(noStudentGroup);
+            }
+            Date now = new Date();
+            if(!CollectionUtils.isEmpty(hasStudentGroup)){
+                //排课
+                for (VipGroup vipGroup : hasStudentGroup) {
+                    ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroup.getId(),vipGroup.getGroupType());
+                    vipGroup.setStatus(VipGroupStatusEnum.PROGRESS);
+                    Integer tenantId = vipGroup.getTenantId();
+                    for (String s : vipGroup.getStudentIdList().split(",")) {
+                        Integer userId = Integer.parseInt(s);
+                        //生成班级学员关联
+                        ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper();
+                        classGroupStudentMapper.setMusicGroupId(classGroup.getMusicGroupId());
+                        classGroupStudentMapper.setClassGroupId(classGroup.getId());
+                        classGroupStudentMapper.setUserId(userId);
+                        classGroupStudentMapper.setCreateTime(now);
+                        classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
+                        classGroupStudentMapper.setGroupType(GroupType.LIVE);
+                        classGroupStudentMapperDao.insert(classGroupStudentMapper);
+
+                        classGroup.setDelFlag(0);
+                        VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(vipGroup.getVipGroupCategoryId(),
+                                vipGroup.getOrganId(), vipGroup.getGroupType());
+
+                        //生成课表
+                        List<CourseSchedule> courseSchedules = JSON.parseArray(vipGroup.getCourseSchedulesJson(), CourseSchedule.class);
+                        classGroup.setTotalClassTimes(courseSchedules.size());
+
+                        courseScheduleService.batchAddCourseSchedule1(courseSchedules);
+
+                        //考勤信息
+                        List<TeacherAttendance> teacherAttendances = new ArrayList<>();
+                        //创建课酬信息
+                        List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<>();
+                        Map<String, BigDecimal> stringBigDecimalMap = countVipGroupPredictFee1(vipGroup, vipGroup.getUserId(), null);
+                        for (CourseSchedule courseSchedule : courseSchedules) {
+                            //创建教师课程薪水记录
+                            CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
+                            courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
+                            courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
+                            courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
+                            courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
+                            courseScheduleTeacherSalary.setUserId(courseSchedule.getActualTeacherId().intValue());
+                            courseScheduleTeacherSalary.setClassGroupId(courseSchedule.getClassGroupId());
+                            courseScheduleTeacherSalary.setExpectSalary(stringBigDecimalMap.get("offlineTeacherSalary"));
+                            courseScheduleTeacherSalary.setActualSalary(null);
+                            courseScheduleTeacherSalary.setTenantId(tenantId);
+                            courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
+
+                            TeacherAttendance teacherAttendance = new TeacherAttendance();
+                            teacherAttendance.setGroupType(courseSchedule.getGroupType());
+                            teacherAttendance.setClassGroupId(courseSchedule.getClassGroupId());
+                            teacherAttendance.setMusicGroupId(courseSchedule.getMusicGroupId());
+                            teacherAttendance.setTeacherId(courseSchedule.getActualTeacherId());
+                            teacherAttendance.setCourseScheduleId(courseSchedule.getId());
+                            teacherAttendance.setTenantId(tenantId);
+                            teacherAttendances.add(teacherAttendance);
+                        }
+                        courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaries);
+                        teacherAttendanceDao.batchInsert(teacherAttendances);
+
+                        //群聊数据
+                        Map<Integer, String> userRoleMap = new HashMap<Integer, String>(5);
+                        if (Objects.nonNull(vipGroup.getEducationalTeacherId())) {
+                            userRoleMap.put(vipGroup.getEducationalTeacherId(), "乐团主管");
+                        }
+                        userRoleMap.put(vipGroup.getUserId(), "指导老师");
+                        //生成课程学员关联
+                        List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
+                        List<ClassGroupStudentMapper> classGroupStudents = classGroupStudentMapperDao.findByClassGroup(classGroup.getId());
+
+                        List<Integer> studentIdList = classGroupStudents.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+                        for (ClassGroupStudentMapper classGroupStudent : classGroupStudents) {
+                            StudentPaymentOrder successOrder = studentPaymentOrderDao.findByStudentVipGroup(vipGroup.getId(), classGroupStudent.getUserId(), "SUCCESS","VIP".equals(vipGroup.getGroupType())?"SMALL_CLASS_TO_BUY":"LIVE_GROUP_BUY");
+                            //实际支付金额,去除优惠券
+                            BigDecimal actualPrice = successOrder.getExpectAmount();
+                            BigDecimal divide = actualPrice.divide(new BigDecimal(courseSchedules.size()), ROUND_DOWN);
+                            BigDecimal firstAmount = actualPrice.subtract(divide.multiply(new BigDecimal(courseSchedules.size()))).add(divide);
+                            for (int i = 0; i < courseSchedules.size(); i++) {
+                                CourseSchedule courseSchedule = courseSchedules.get(i);
+                                CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+                                courseScheduleStudentPayment.setUserId(classGroupStudent.getUserId());
+                                courseScheduleStudentPayment.setGroupType(courseSchedule.getGroupType());
+                                courseScheduleStudentPayment.setMusicGroupId(courseSchedule.getMusicGroupId());
+                                courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
+                                courseScheduleStudentPayment.setClassGroupId(courseSchedule.getClassGroupId());
+                                if (i == 0) {
+                                    courseScheduleStudentPayment.setExpectPrice(firstAmount);
+                                } else {
+                                    courseScheduleStudentPayment.setExpectPrice(divide);
+                                }
+                                courseScheduleStudentPayment.setOriginalPrice(TeachModeEnum.ONLINE.equals(courseSchedule.getTeachMode()) ? vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice() : vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice());
+                                courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice());
+                                courseScheduleStudentPayments.add(courseScheduleStudentPayment);
+                            }
+                            userRoleMap.put(classGroupStudent.getUserId(), null);
+                        }
+                        studentDao.updateStudentServiceTag(null, studentIdList, YesOrNoEnum.YES.getCode());
+
+                        courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
+
+                        imGroupService.create(classGroup.getId().toString(), null, classGroup.getName(), classGroup.getName(),
+                                vipGroup.getName(), null, null, vipGroup.getGroupType(), ImGroup.GroupTypeEnum.valueOf(vipGroup.getGroupType()));
+                        imGroupMemberService.join(classGroup.getId().toString(), userRoleMap);
+                        imUserFriendService.refreshGroupImUserFriend(classGroup.getMusicGroupId(), classGroup.getGroupType());
+                        //更新所属分部列表
+                        List<Integer> organIds = classGroupDao.findStudentOrganIdsByClassGroup(classGroup.getId().longValue());
+                        organIds.add(vipGroup.getOrganId());
+                        HashSet<Integer> hashSet = new HashSet<>(organIds);
+                        String organIdsString = StringUtils.join(hashSet, ",");
+                        vipGroup.setOrganIdList(organIdsString);
+                        vipGroupDao.update(vipGroup);
+                    }
+                }
+            }
+        }
+    }
+
+
+
     @Override
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public void updateVipGroupStatusToFinished() {
@@ -4738,23 +4842,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
     }
 
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void createLiveCourse() {
-        List<VipGroup> vipGroups = vipGroupDao.findNoCreateSuccessVipGroup(null,"LIVE");
-        if(!CollectionUtils.isEmpty(vipGroups)){
-            List<VipGroup> noStudentGroup = vipGroups.stream().filter(e -> StringUtils.isEmpty(e.getStudentIdList())).collect(Collectors.toList());
-            List<VipGroup> hasStudentGroup = vipGroups.stream().filter(e -> StringUtils.isNotEmpty(e.getStudentIdList())).collect(Collectors.toList());
-            if(!CollectionUtils.isEmpty(noStudentGroup)){
-                //关闭课程组
-
-            }
-            if(!CollectionUtils.isEmpty(hasStudentGroup)){
-                //排课
-            }
-        }
-    }
-
 
     /**
      * 学生列表
@@ -4811,11 +4898,52 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
             }
         }
+        // 学生休学状态
+        ClassGroup classGroup = classGroupDao.findByVipGroup(query.getLiveGroupId(), GroupType.LIVE.getCode());
+        if (Objects.isNull(classGroup)) {
+            return livedStudentList;
+        }
+
+        List<ClassGroupStudentMapper> studentMapperList = classGroupStudentMapperDao.findAllByClassGroup(classGroup.getId().longValue());
+        if (CollectionUtils.isEmpty(studentMapperList)) {
+            return livedStudentList;
+        }
+        Map<Integer, ClassGroupStudentMapper> studentMapperMap = studentMapperList.stream().collect(Collectors.toMap(ClassGroupStudentMapper::getUserId, o->o ,(k1,k2)->k2));
+
+        List<StudentApplyRefunds> applyRefunds = studentApplyRefundsDao.findByGroupAndType(query.getLiveGroupId().toString(), GroupType.LIVE.getCode());
+        Map<Integer, List<StudentApplyRefunds>> studentApplyRefundsMap = applyRefunds.stream()
+                .collect(Collectors.groupingBy(StudentApplyRefunds::getUserId));
+        records.forEach(data -> {
+            ClassGroupStudentMapper classGroupStudentMapper = studentMapperMap.get(data.getStudentId().intValue());
+            if (Objects.isNull(classGroupStudentMapper)) {
+                data.setStudentStatus(0);
+                return;
+            }
+            if (classGroupStudentMapper.getStatus().equals(ClassGroupStudentStatusEnum.QUIT)) {
+                data.setStudentStatus(1);
+                return;
+            } else if (classGroupStudentMapper.getStatus().equals(ClassGroupStudentStatusEnum.QUIT_SCHOOL)) {
+                data.setStudentStatus(3);
+                return;
+            }
+
+            List<StudentApplyRefunds> studentApplyRefunds = studentApplyRefundsMap.get(data.getStudentId().intValue());
+            if (!CollectionUtils.isEmpty(studentApplyRefunds)) {
+                StudentApplyRefunds studentApplyRefund = studentApplyRefunds.get(0);
+                if (data.getStudentStatus() == 0 && studentApplyRefund.getStatus().equals(StudentApplyRefundsStatus.ING)) {
+                    data.setStudentStatus(2);
+                    return;
+                }
+            }
+            data.setStudentStatus(0);
+        });
+
+
         return livedStudentList.setRecords(records);
     }
 
     @Override
-    public List<CourseSchedule> liveCourseList(LiveGroupWrapper.LiveGroupStudentQuery query) {
+    public Map<String, Object> liveCourseList(LiveGroupWrapper.LiveGroupStudentQuery query) {
 
         VipGroup vipGroup = this.get(query.getLiveGroupId());
         if (Objects.isNull(vipGroup)) {
@@ -4825,10 +4953,30 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
             throw new BizException("此课程不是直播课程");
         }
         // 报名中的课程直接返回json数据
+        List<CourseSchedule> courseSchedules;
         if (vipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING)) {
-            return JSON.parseArray(vipGroup.getCourseSchedulesJson(), CourseSchedule.class);
+            courseSchedules =  JSON.parseArray(vipGroup.getCourseSchedulesJson(), CourseSchedule.class);
         } else {
-            return courseScheduleDao.findGroupCourseSchedules(vipGroup.getId().toString(), GroupType.LIVE.getCode());
+            courseSchedules =  courseScheduleDao.findGroupCourseSchedules(vipGroup.getId().toString(), GroupType.LIVE.getCode());
         }
+
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("list", courseSchedules);
+        result.put("singleClassMinutes", vipGroup.getSingleClassMinutes());
+        return result;
+    }
+
+    /**
+     * 直播课程提醒
+     */
+    @Override
+    public void liveCourseRemind() {
+        // 查询30分钟内要开始的并且没有直播通知的直播课
+        List<CourseSchedule> courseSchedules = courseScheduleDao.liveCourseRemind();
+
+
+
+
     }
 }

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

@@ -4239,4 +4239,14 @@
             <include refid="selectPage"/>
         </where>
     </select>
+
+    <select id="liveCourseRemind" resultMap="CourseSchedule">
+        select *
+        from course_schedule cs
+        where cs.status_ = 'NOT_START'
+          and cs.live_remind_ = 0
+          and cs.type_ = 'LIVE'
+          and cs.class_date_ = date_format(now(),'%Y-%m-%d')
+          and cs.start_class_time_ &lt;= date_format(now(),'%H:%i:%s')
+    </select>
 </mapper>

+ 7 - 0
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -1225,6 +1225,13 @@
             #{activityId}
         </foreach>
     </select>
+    <select id="queryVipQuitOrder" resultType="com.ym.mec.biz.dal.entity.StudentPaymentOrder">
+        SELECT spo.* FROM student_payment_order spo
+        left join class_group_student_mapper cgsm ON spo.class_group_id_ = cgsm.class_group_id_ and spo.music_group_id_ = cgsm.music_group_id_
+        WHERE music_group_id_ = #{vipGroupId} AND cgsm.status_ != 'QUIT'
+        AND type_ IN ('LIVE_GROUP_BUY','SMALL_CLASS_TO_BUY')
+        AND status_ = 'SUCCESS'  AND spo.class_group_id_ = cgsm.class_group_id_ and spo.music_group_id_ = cgsm.music_group_id_
+    </select>
 
 
 </mapper>

+ 18 - 53
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherVipGroupController.java

@@ -1,14 +1,18 @@
 package com.ym.mec.teacher.controller;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dao.VipGroupCategoryDao;
 import com.ym.mec.biz.dal.dao.VipGroupDefaultClassesUnitPriceDao;
-import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.dto.StudentVipDouble11Dto;
+import com.ym.mec.biz.dal.dto.VipGroupApplyDto;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.entity.VipGroupCategory;
+import com.ym.mec.biz.dal.entity.VipGroupDefaultClassesUnitPrice;
 import com.ym.mec.biz.dal.page.StudentManageQueryInfo;
 import com.ym.mec.biz.service.StudentManageService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.biz.service.VipGroupService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -18,8 +22,6 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
@@ -39,7 +41,7 @@ public class TeacherVipGroupController extends BaseController {
 	@Autowired
 	private VipGroupService vipGroupService;
 	@Autowired
-	private SysUserFeignService sysUserFeignService;
+	private SysUserService sysUserService;
 	@Autowired
 	private TeacherDao teacherDao;
 	@Autowired
@@ -53,10 +55,7 @@ public class TeacherVipGroupController extends BaseController {
 	@PostMapping("/vipGroupApply")
 	@AuditLogAnnotation(operateName = "vip课申请")
 	public Object vipGroupApply(@RequestBody VipGroupApplyDto vipGroupApplyDto) {
-		SysUser user = sysUserFeignService.queryUserInfo();
-		if (Objects.isNull(user)) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
+		SysUser user = sysUserService.getUser();
 		Integer userId = user.getId();
 		Teacher teacher = teacherDao.get(userId);
 		vipGroupApplyDto.getVipGroupApplyBaseInfo().setUserId(userId);
@@ -76,10 +75,7 @@ public class TeacherVipGroupController extends BaseController {
 	@PostMapping("/vipGroupApplyForDouble11")
 	@Transactional(rollbackFor = Exception.class)
 	public Object vipGroupApplyForDouble11(@RequestBody VipGroupApplyDto vipGroupApplyDto) {
-		SysUser user = sysUserFeignService.queryUserInfo();
-		if (Objects.isNull(user)) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
+		SysUser user = sysUserService.getUser();
 		Integer userId = user.getId();
 		Teacher teacher = teacherDao.get(userId);
 		vipGroupApplyDto.getVipGroupApplyBaseInfo().setUserId(userId);
@@ -138,64 +134,37 @@ public class TeacherVipGroupController extends BaseController {
 		return result;
 	}
 
-	@ApiOperation("获取vip课课程和课酬总费用")
-	@PostMapping("/getVipGroupCostCount")
-	public Object getVipGroupCostCount(VipGroupCostCountParamsDto vipGroupCostCountParamsDto) {
-		// return succeed(vipGroupService.vipGroupCostCount(vipGroupCostCountParamsDto));
-		return succeed();
-	}
-
 	@ApiOperation("获取vip课教学点")
 	@PostMapping("/getSchools")
 	public Object getSchools() {
-		SysUser user = sysUserFeignService.queryUserInfo();
-		if (Objects.isNull(user)) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		return succeed(vipGroupService.querySchoolByUserId(user.getId()));
+		return succeed(vipGroupService.querySchoolByUserId(sysUserService.getUserId()));
 	}
 
 	@ApiOperation(value = "获取教师所在分部学生列表")
 	@GetMapping("/queryStudentsWithTeacher")
 	public Object queryStudentsWithTeacher(StudentManageQueryInfo queryInfo){
-		SysUser user = sysUserFeignService.queryUserInfo();
-		if (Objects.isNull(user)) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		queryInfo.setTeacherId(user.getId());
+		queryInfo.setTeacherId(sysUserService.getUserId());
 		return succeed(studentManageService.queryStudentsWithTeacher(queryInfo));
 	}
 
 	@ApiOperation(value = "获取教师所在分部学生列表")
 	@GetMapping("/queryStudentsWithTeacherByOrganId")
 	public Object queryStudentsWithTeacherByOrganId(StudentManageQueryInfo queryInfo){
-		SysUser user = sysUserFeignService.queryUserInfo();
-		if (Objects.isNull(user)) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		queryInfo.setTeacherId(user.getId());
+		queryInfo.setTeacherId(sysUserService.getUserId());
 		return succeed(studentManageService.queryStudentsWithTeacherByOrganId(queryInfo));
 	}
 
 	@ApiOperation(value = "获取参与双十一活动学员列表")
 	@GetMapping("/queryDouble11Students")
 	public HttpResponseResult queryDouble11Students(StudentManageQueryInfo queryInfo){
-		SysUser user = sysUserFeignService.queryUserInfo();
-		if (Objects.isNull(user)) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		queryInfo.setTeacherId(user.getId());
+		queryInfo.setTeacherId(sysUserService.getUserId());
 		return succeed(studentManageService.queryDouble11Students(queryInfo));
 	}
 
 	@ApiOperation(value = "获取六一活动学生列表")
 	@GetMapping("queryChildrenDayStudentList")
 	public Object queryStudentList(StudentManageQueryInfo queryInfo){
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed("用户信息获取失败");
-		}
-		Teacher teacher = teacherDao.get(sysUser.getId());
+		Teacher teacher = teacherDao.get(sysUserService.getUserId());
 		if(Objects.isNull(teacher)){
 			return failed("教师信息不存在");
 		}
@@ -216,12 +185,8 @@ public class TeacherVipGroupController extends BaseController {
 	@ApiOperation(value = "创建六一活动vip课")
 	@PostMapping("/createActivityVipGroup")
 	public Object createActivityVipGroup(@RequestBody VipGroupApplyDto vipGroupApplyDto){
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed("用户信息获取失败");
-		}
-		vipGroupApplyDto.getVipGroupApplyBaseInfo().setUserId(sysUser.getId());
-		Integer userId = vipGroupApplyDto.getVipGroupApplyBaseInfo().getUserId();
+		Integer userId = sysUserService.getUserId();
+		vipGroupApplyDto.getVipGroupApplyBaseInfo().setUserId(userId);
 		Teacher teacher = teacherDao.get(userId);
 		if(Objects.isNull(teacher)){
 			return failed("请指定指导老师!");
@@ -248,7 +213,7 @@ public class TeacherVipGroupController extends BaseController {
 			vipGroupApplyDto.getVipGroupApplyBaseInfo().setOfflineClassesUnitPrice(vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice());
 		}
 
-		vipGroupApplyDto.getVipGroupApplyBaseInfo().setEducationalTeacherId(sysUser.getId());
+		vipGroupApplyDto.getVipGroupApplyBaseInfo().setEducationalTeacherId(userId);
 		return vipGroupService.createActivityVipGroup(vipGroupApplyDto);
 	}
 }

+ 10 - 4
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -282,6 +282,8 @@ public class TaskController extends BaseController {
 	// 更新VIP课程状态至已结束
 	public void updateVipGroupToFinishedStatus() {
 		vipGroupService.updateVipGroupStatusToFinished();
+		//直播课排课
+		vipGroupService.createLiveCourse();
 	}
 
 	@GetMapping("/stopVipGroupWithNoCreate")
@@ -407,8 +409,6 @@ public class TaskController extends BaseController {
 		TenantContextHolder.setTenantId(1);
 		studentServeService.exercisesSituationStatistics2(monday,1);
 		TenantContextHolder.clearTenantId();
-//		studentServeService.exercisesSituationStatistics2(null,new ArrayList<>(Arrays.asList(1095257)));
-//		studentServeService.exercisesSituationStatistics(null);
 	}
 
 	//更新学生运营指标
@@ -630,8 +630,6 @@ public class TaskController extends BaseController {
     public void  checkCampState(){
 		//修改训练营状态
         tempLittleArtistTrainingCampService.checkCampState();
-		//直播课排课
-		vipGroupService.createLiveCourse();
     }
 
     @ApiOperation("统计老师课程云教练使用时长")
@@ -659,4 +657,12 @@ public class TaskController extends BaseController {
         degreeService.degreeStatusChange();
         return succeed();
     }
+
+
+    @ApiOperation("直播课课程提醒")
+    @GetMapping("/liveCourseRemind")
+    public Object liveCourseRemind() {
+        vipGroupService.liveCourseRemind();
+        return succeed();
+    }
 }

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

@@ -455,7 +455,7 @@ public class VipGroupManageController extends BaseController {
 
     @ApiOperation(value = "课程列表")
     @PostMapping(value = "/liveCourseList")
-    public HttpResponseResult<List<CourseSchedule>> liveCourseList(@Validated @RequestBody LiveGroupWrapper.LiveGroupStudentQuery query){
+    public HttpResponseResult<Object> liveCourseList(@Validated @RequestBody LiveGroupWrapper.LiveGroupStudentQuery query){
 
         return succeed(vipGroupService.liveCourseList(query));
     }