浏览代码

Merge branch 'feature/0529-live' of http://git.dayaedu.com/yonge/mec into master_saas

zouxuan 1 年之前
父节点
当前提交
802581e110

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

@@ -477,7 +477,7 @@ public interface ClassGroupStudentMapperDao extends BaseDAO<Long, ClassGroupStud
 
     Integer countByUserIdsAndClassIds(@Param("studentIds") String studentIds, @Param("oldClassId") Integer oldClassId);
     
-    List<VipGroupClassGroupMapper> queryWaitCancelVipGroup();
+    List<VipGroupClassGroupMapper> queryWaitCancelVipGroup(@Param("groupType") String groupType);
 
     List<ClassGroupStudentMapper> findByVipGroups(@Param("groupIds") List<Long> groupIds);
 }

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

@@ -317,7 +317,7 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
      *
      * @return
      */
-    List<VipGroup> queryRequiredOverList();
+    List<VipGroup> queryRequiredOverList(@Param("groupType") String groupType);
 
     /**
      * @return java.util.List<com.ym.mec.biz.dal.entity.VipGroup>
@@ -325,7 +325,7 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
      * @author Joburgess
      * @date 2019/12/3
      */
-    List<VipGroup> queryNormalStatusList();
+    List<VipGroup> queryNormalStatusList(@Param("groupType") String groupType);
 
     int countUserRepeatVipGroupInCourseStartEndTime(@Param("userId") Integer userId,
                                                     @Param("courseStartDate") Date courseStartDate,

+ 24 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentAttendanceViewDto.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.enums.JoinCourseType;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.StringUtils;
@@ -55,6 +56,29 @@ public class StudentAttendanceViewDto {
     @ApiModelProperty(value = "是否有待审核的退团申请",required = false)
     private Integer quitFlag;
 
+
+    @ApiModelProperty(value = "学员加入课程类型",required = false)
+    private JoinCourseType joinCourseType;
+
+    @ApiModelProperty(value = "观看时长",required = false)
+    private Integer watchTime;
+
+    public JoinCourseType getJoinCourseType() {
+        return joinCourseType;
+    }
+
+    public void setJoinCourseType(JoinCourseType joinCourseType) {
+        this.joinCourseType = joinCourseType;
+    }
+
+    public Integer getWatchTime() {
+        return watchTime;
+    }
+
+    public void setWatchTime(Integer watchTime) {
+        this.watchTime = watchTime;
+    }
+
     public String getCurrentClass() {
         return currentClass;
     }

+ 39 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/JoinCourseType.java

@@ -0,0 +1,39 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+//职务类型(指导老师、教务老师、教学主管)
+public enum JoinCourseType implements BaseEnum<String, JoinCourseType> {
+    // 购买
+    PURCHASE("PURCHASE", "购买"),
+
+    // 分享
+    SHARE("SHARE", "分享"),
+    ;
+
+	private String code;
+
+	private String msg;
+
+	JoinCourseType(String code, String msg) {
+		this.code = code;
+		this.msg = msg;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	@Override
+	public String getCode() {
+		return this.code;
+	}
+}

+ 5 - 132
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentAttendanceQueryInfo.java

@@ -1,17 +1,18 @@
 package com.ym.mec.biz.dal.page;
 
-import io.swagger.annotations.ApiModelProperty;
-
-import java.util.Date;
-
 import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
 import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
 
 /**
  * @Author Joburgess
  * @Date 2019/9/12
  */
+@Data
 public class StudentAttendanceQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "学生ID",required = false)
@@ -60,132 +61,4 @@ public class StudentAttendanceQueryInfo extends QueryInfo {
     private Boolean visitFlag;
 
     private Boolean orderFlag;
-
-    public Boolean getOrderFlag() {
-        return orderFlag;
-    }
-
-    public void setOrderFlag(Boolean orderFlag) {
-        this.orderFlag = orderFlag;
-    }
-
-    public Boolean getVisitFlag() {
-        return visitFlag;
-    }
-
-    public void setVisitFlag(Boolean visitFlag) {
-        this.visitFlag = visitFlag;
-    }
-
-    public String getIds() {
-        return ids;
-    }
-
-    public void setIds(String ids) {
-        this.ids = ids;
-    }
-
-    public Long getCourseScheduleId() {
-        return courseScheduleId;
-    }
-
-    public void setCourseScheduleId(Long courseScheduleId) {
-        this.courseScheduleId = courseScheduleId;
-    }
-
-    public StudentAttendanceStatusEnum getFilterStatus() {
-        return filterStatus;
-    }
-
-    public void setFilterStatus(StudentAttendanceStatusEnum filterStatus) {
-        this.filterStatus = filterStatus;
-    }
-
-    public Integer getStudentID() {
-		return studentID;
-	}
-
-	public void setStudentID(Integer studentID) {
-		this.studentID = studentID;
-	}
-
-	public Integer getTeacherId() {
-		return teacherId;
-	}
-
-	public void setTeacherId(Integer teacherId) {
-		this.teacherId = teacherId;
-	}
-
-	public String getCourseScheduleType() {
-		return courseScheduleType;
-	}
-
-	public void setCourseScheduleType(String courseScheduleType) {
-		this.courseScheduleType = courseScheduleType;
-	}
-
-	public Long getMusicGroupId() {
-        return musicGroupId;
-    }
-
-    public void setMusicGroupId(Long musicGroupId) {
-        this.musicGroupId = musicGroupId;
-    }
-
-    public String getGroupType() {
-		return groupType;
-	}
-
-	public void setGroupType(String groupType) {
-		this.groupType = groupType;
-	}
-
-	public Long getClassGroupId() {
-        return classGroupId;
-    }
-
-    public void setClassGroupId(Long classGroupId) {
-        this.classGroupId = classGroupId;
-    }
-
-    public StudentAttendanceStatusEnum getStatus() {
-        return status;
-    }
-
-    public void setStatus(StudentAttendanceStatusEnum status) {
-        this.status = status;
-    }
-
-	public CourseStatusEnum getCourseStatus() {
-		return courseStatus;
-	}
-
-	public void setCourseStatus(CourseStatusEnum courseStatus) {
-		this.courseStatus = courseStatus;
-	}
-
-	public Date getStartDateOfCourse() {
-		return startDateOfCourse;
-	}
-
-	public void setStartDateOfCourse(Date startDateOfCourse) {
-		this.startDateOfCourse = startDateOfCourse;
-	}
-
-	public Date getEndDateOfCourse() {
-		return endDateOfCourse;
-	}
-
-	public void setEndDateOfCourse(Date endDateOfCourse) {
-		this.endDateOfCourse = endDateOfCourse;
-	}
-
-	public String getOrganId() {
-		return organId;
-	}
-
-	public void setOrganId(String organId) {
-		this.organId = organId;
-	}
 }

+ 3 - 23
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentManageVipClassQueryInfo.java

@@ -2,7 +2,9 @@ package com.ym.mec.biz.dal.page;
 
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
+@Data
 public class StudentManageVipClassQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "学生id",required = true)
@@ -14,27 +16,5 @@ public class StudentManageVipClassQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "vip课状态",required = true)
     private String vipGroupStatus;
 
-    public Integer getStudentId() {
-        return studentId;
-    }
-
-    public void setStudentId(Integer studentId) {
-        this.studentId = studentId;
-    }
-
-    public String getVipGroupName() {
-        return vipGroupName;
-    }
-
-    public void setVipGroupName(String vipGroupName) {
-        this.vipGroupName = vipGroupName;
-    }
-
-    public String getVipGroupStatus() {
-        return vipGroupStatus;
-    }
-
-    public void setVipGroupStatus(String vipGroupStatus) {
-        this.vipGroupStatus = vipGroupStatus;
-    }
+    private String groupType = "VIP";
 }

+ 2 - 104
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherCloseQueryInfo.java

@@ -3,7 +3,9 @@ package com.ym.mec.biz.dal.page;
 import com.ym.mec.biz.dal.enums.JobNatureEnum;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
+@Data
 public class TeacherCloseQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "考勤编号列表")
     private String teacherAttendanceId;
@@ -43,108 +45,4 @@ public class TeacherCloseQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "考勤状态,ERR_ATTENDANCE,NO_ATTENDANCE")
     private String attendanceStatus;
-
-    public String getAttendanceStatus() {
-        return attendanceStatus;
-    }
-
-    public void setAttendanceStatus(String attendanceStatus) {
-        this.attendanceStatus = attendanceStatus;
-    }
-
-    public JobNatureEnum getJobNature() {
-        return jobNature;
-    }
-
-    public void setJobNature(JobNatureEnum jobNature) {
-        this.jobNature = jobNature;
-    }
-
-    public String getTeacherAttendanceId() {
-        return teacherAttendanceId;
-    }
-
-    public void setTeacherAttendanceId(String teacherAttendanceId) {
-        this.teacherAttendanceId = teacherAttendanceId;
-    }
-
-    public String getCourseScheduleStatus() {
-        return courseScheduleStatus;
-    }
-
-    public void setCourseScheduleStatus(String courseScheduleStatus) {
-        this.courseScheduleStatus = courseScheduleStatus;
-    }
-
-    public String getSignOutStatus() {
-        return signOutStatus;
-    }
-
-    public void setSignOutStatus(String signOutStatus) {
-        this.signOutStatus = signOutStatus;
-    }
-
-    public String getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(String organId) {
-        this.organId = organId;
-    }
-
-    public String getSignInStatus() {
-        return signInStatus;
-    }
-
-    public void setSignInStatus(String signInStatus) {
-        this.signInStatus = signInStatus;
-    }
-
-    public String getClassGroupName() {
-        return classGroupName;
-    }
-
-    public void setClassGroupName(String classGroupName) {
-        this.classGroupName = classGroupName;
-    }
-
-    public String getCourseStartDate() {
-        return courseStartDate;
-    }
-
-    public void setCourseStartDate(String courseStartDate) {
-        this.courseStartDate = courseStartDate;
-    }
-
-    public String getCourseEndDate() {
-        return courseEndDate;
-    }
-
-    public void setCourseEndDate(String courseEndDate) {
-        this.courseEndDate = courseEndDate;
-    }
-
-    public String getTeacherRole() {
-        return teacherRole;
-    }
-
-    public void setTeacherRole(String teacherRole) {
-        this.teacherRole = teacherRole;
-    }
-
-    public String getCourseScheduleType() {
-        return courseScheduleType;
-    }
-
-    public void setCourseScheduleType(String courseScheduleType) {
-        this.courseScheduleType = courseScheduleType;
-    }
-
-    public Integer getTeacherId() {
-        return teacherId;
-    }
-
-    public void setTeacherId(Integer teacherId) {
-        this.teacherId = teacherId;
-    }
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveBroadcastRoomMemberService.java

@@ -10,6 +10,7 @@ import com.ym.mec.common.page.PageInfo;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * 直播间人员关系表(ImLiveBroadcastRoomMember)表服务接口
@@ -35,5 +36,7 @@ public interface ImLiveBroadcastRoomMemberService extends IService<ImLiveBroadca
      * 查询在房间人员
      */
     List<Integer> getLiveRoomMember(String roomUid);
+
+    List<ImLiveBroadcastRoomMember> getByRoomUidAndUserIds(String liveRoomId, Set<Long> userIds);
 }
 

+ 24 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -43,6 +43,7 @@ import java.math.BigDecimal;
 import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import static com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType.*;
@@ -164,6 +165,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     private CooperationOrganService cooperationOrganService;
     @Autowired
     private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
+
+    @Autowired
+    private ImLiveBroadcastRoomMemberService imLiveBroadcastRoomMemberService;
+
     @Override
     public BaseDAO<Integer, ClassGroup> getDAO() {
         return classGroupDao;
@@ -1898,8 +1903,9 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         truantStudent.addAll(otherStudent);
         truantStudent.addAll(leaveStudent);
         Set<Long> collect = truantStudent.stream().map(e -> e.getStudentId()).collect(Collectors.toSet());
+        CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId);
         if (!CollectionUtils.isEmpty(truantStudent)) {
-            CourseSchedule schedule = courseScheduleDao.get(courseScheduleId);
+            CourseSchedule schedule = courseSchedule;
             if (schedule.getGroupType() == MUSIC) {
                 Map<Integer, String> paymentStatusMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.queryUserCoursePaymentStatus(collect, schedule.getMusicGroupId()));
 
@@ -1949,6 +1955,22 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 }
             });
         }
+
+        // 如果是直播课  查询观看时长
+        if(courseSchedule.getGroupType().equals(GroupType.LIVE)) {
+            List<ImLiveBroadcastRoomMember> memberList = imLiveBroadcastRoomMemberService.getByRoomUidAndUserIds(courseSchedule.getLiveRoomId(), collect);
+            if (!CollectionUtils.isEmpty(memberList)) {
+                Map<Integer, ImLiveBroadcastRoomMember> memberMap = memberList.stream().collect(Collectors.toMap(ImLiveBroadcastRoomMember::getUserId, Function.identity()));
+                truantStudent.forEach(studentAttendanceViewDto -> {
+                    ImLiveBroadcastRoomMember member = memberMap.get(studentAttendanceViewDto.getStudentId().intValue());
+                    if (member != null) {
+                        studentAttendanceViewDto.setWatchTime(member.getTotalTime());
+                    }else {
+                        studentAttendanceViewDto.setWatchTime(0);
+                    }
+                });
+            }
+        }
         return truantStudent;
     }
 
@@ -3812,7 +3834,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             queryInfo.setGroupType(MUSIC);
         }
         PageInfo<ClassGroupTeachersDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-        Map<String, Object> params = new HashMap<String, Object>();
         if(queryInfo.getMainTeacherUserId() != null){
             //获取主教老师对应的班级编号列表
             List<Integer> classIdList = classGroupTeacherMapperService.getDao().queryClassIdByTeacher(queryInfo.getGroupType(),queryInfo.getMainTeacherUserId());
@@ -3821,6 +3842,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
             queryInfo.setClassGroupIdList(classIdList);
         }
+        Map<String, Object> params = new HashMap<String, Object>();
         int count = this.countClassGroupPage(params,queryInfo);
 
         List<ClassGroupTeachersDto> dataList = null;

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomMemberServiceImpl.java

@@ -177,5 +177,18 @@ public class ImLiveBroadcastRoomMemberServiceImpl extends ServiceImpl<ImLiveBroa
         return list.stream().map(ImLiveBroadcastRoomMember::getUserId).collect(Collectors.toList());
     }
 
+    @Override
+    public List<ImLiveBroadcastRoomMember> getByRoomUidAndUserIds(String liveRoomId, Set<Long> userIds) {
+
+        if (StringUtils.isBlank(liveRoomId) || CollectionUtils.isEmpty(userIds)) {
+            return new ArrayList<>();
+        }
+        return this.lambdaQuery()
+                .eq(ImLiveBroadcastRoomMember::getRoomUid, liveRoomId)
+                .in(ImLiveBroadcastRoomMember::getUserId, userIds)
+                .list();
+
+    }
+
 }
 

+ 102 - 90
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -4551,98 +4551,110 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         if(!CollectionUtils.isEmpty(vipGroups)){
             //排课
             for (VipGroup vipGroup : vipGroups) {
-                ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroup.getId(),vipGroup.getGroupType());
-                List<ClassGroupStudentMapper> classGroupStudents = classGroupStudentMapperDao.findByClassGroup(classGroup.getId());
-                if(CollectionUtils.isEmpty(classGroupStudents)){
-                    vipGroup.setStatus(VipGroupStatusEnum.CANCEL);
-                }else {
-                    vipGroup.setStatus(VipGroupStatusEnum.PROGRESS);
-                    Integer tenantId = vipGroup.getTenantId();
-                    classGroup.setDelFlag(0);
-                    VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(vipGroup.getVipGroupCategoryId(),
-                            null, vipGroup.getGroupType(),tenantId);
-                    //生成课表
-                    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());
-                    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<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(vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice());
-                            courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice());
-                            courseScheduleStudentPayments.add(courseScheduleStudentPayment);
-                        }
-                        userRoleMap.put(classGroupStudent.getUserId(), null);
+                try {
+                    ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroup.getId(),vipGroup.getGroupType());
+                    List<ClassGroupStudentMapper> classGroupStudents = classGroupStudentMapperDao.findByClassGroup(classGroup.getId());
+                    if(CollectionUtils.isEmpty(classGroupStudents)){
+                        vipGroup.setStatus(VipGroupStatusEnum.CANCEL);
+                    }else {
+                        //生成课程群聊相关信息
+                        this.liveProgress(vipGroup,classGroup,classGroupStudents);
+                        //推送
+//                        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_VIP_STOP,
+//                                map2, null, 0, 2, "TEACHER", vipGroupName);
                     }
-                    studentDao.updateStudentServiceTag(null, studentIdList, YesOrNoEnum.YES.getCode());
-
-                    courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
+                    vipGroupDao.update(vipGroup);
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
 
-                    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());
-                    classGroupDao.update(classGroup);
+    private void liveProgress(VipGroup vipGroup,ClassGroup classGroup,List<ClassGroupStudentMapper> classGroupStudents){
+        vipGroup.setStatus(VipGroupStatusEnum.PROGRESS);
+        Integer tenantId = vipGroup.getTenantId();
+        classGroup.setDelFlag(0);
+        VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(vipGroup.getVipGroupCategoryId(),
+                null, vipGroup.getGroupType(),tenantId);
+        //生成课表
+        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());
+        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<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);
                 }
-                vipGroupDao.update(vipGroup);
+                courseScheduleStudentPayment.setOriginalPrice(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());
+        classGroupDao.update(classGroup);
     }
 
 
@@ -4652,7 +4664,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     public void updateVipGroupStatusToFinished() {
         Date now = new Date();
         //更新至已结束
-        List<VipGroup> vipGroupList = vipGroupDao.queryRequiredOverList();
+        List<VipGroup> vipGroupList = vipGroupDao.queryRequiredOverList("VIP");
         if (vipGroupList != null && vipGroupList.size() > 0) {
             for (VipGroup vipGroup : vipGroupList) {
                 if (Objects.nonNull(vipGroup.getCoursesExpireDate()) && (vipGroup.getCoursesExpireDate().compareTo(now) > 0 || DateUtil.isSameDay(vipGroup.getCoursesExpireDate(), now))) {
@@ -4673,7 +4685,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         }
         
         //关闭没有学生的课程组
-        List<VipGroupClassGroupMapper> vipGroupClassGroupMapperList = classGroupStudentMapperDao.queryWaitCancelVipGroup();
+        List<VipGroupClassGroupMapper> vipGroupClassGroupMapperList = classGroupStudentMapperDao.queryWaitCancelVipGroup("VIP");
         if(vipGroupClassGroupMapperList != null && vipGroupClassGroupMapperList.size() > 0){
             vipGroupList = vipGroupDao.queryByIds(vipGroupClassGroupMapperList.stream().map(t -> t.getId().toString()).collect(Collectors.joining(",")));
             for(VipGroup vipGroup : vipGroupList){
@@ -4694,7 +4706,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         }
         
         //更新到报名中
-        List<VipGroup> normalVipGroupList = vipGroupDao.queryNormalStatusList();
+        List<VipGroup> normalVipGroupList = vipGroupDao.queryNormalStatusList("VIP");
         if (!CollectionUtils.isEmpty(normalVipGroupList)) {
             List<VipGroup> needUpdateVipGroups = new ArrayList<>();
             for (VipGroup vipGroup : normalVipGroupList) {

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

@@ -1562,7 +1562,12 @@
                 AND type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
             <if test="organIds != null and organIds != ''">
-                AND FIND_IN_SET(mg.organ_id_,#{organIds})
+                <if test="groupType == 'LIVE'">
+                    AND INTE_ARRAY(mg.organ_id_list_,#{organIds})
+                </if>
+                <if test="groupType != 'LIVE'">
+                    FIND_IN_SET(mg.organ_id_,#{organIds})
+                </if>
             </if>
             <if test="educationUserId != null">
                 AND mg.educational_teacher_id_ = #{educationUserId}

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

@@ -715,7 +715,7 @@
 		select vg.id_,cgsm.class_group_id_,count(cgsm.user_id_) total_student_num_,sum(case when cgsm.status_ = 'QUIT' then 1 else 0 end ) quit_student_num_ 
 		from class_group_student_mapper cgsm LEFT JOIN class_group cg on cgsm.class_group_id_ = cg.id_
 		LEFT JOIN vip_group vg on vg.id_ = cgsm.music_group_id_
-		WHERE cgsm.group_type_ IN ('VIP','LIVE') and vg.group_status_ in (2,6) and cg.del_flag_ != 1 GROUP BY cgsm.class_group_id_
+		WHERE cgsm.group_type_ = #{groupType} and vg.group_status_ in (2,6) and cg.del_flag_ != 1 GROUP BY cgsm.class_group_id_
 		) a WHERE a.total_student_num_ = a.quit_student_num_
     </select>
     <select id="findByVipGroups" resultMap="ClassGroupStudentMapper">

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

@@ -698,7 +698,7 @@
         LEFT JOIN class_group cg ON cgsm.class_group_id_ = cg.id_
         LEFT JOIN vip_group vg ON cg.music_group_id_ = vg.id_
         LEFT JOIN vip_group_activity vgc ON vgc.id_ = vg.vip_group_activity_id_
-        WHERE cg.group_type_ = 'VIP' AND cgsm.user_id_ = #{studentId} AND vg.group_status_ NOT IN (3,7)
+        WHERE cg.group_type_ = #{groupType} AND cgsm.user_id_ = #{studentId} AND vg.group_status_ NOT IN (3,7)
         <if test="vipGroupName != null">
             AND vg.name_ LIKE CONCAT('%',#{vipGroupName},'%')
         </if>
@@ -713,7 +713,7 @@
         FROM class_group_student_mapper cgsm
         LEFT JOIN class_group cg ON cgsm.class_group_id_ = cg.id_
         LEFT JOIN vip_group vg ON cg.music_group_id_ = vg.id_
-        WHERE cg.group_type_ = 'VIP' AND cgsm.user_id_ = #{studentId} AND vg.group_status_ != 3
+        WHERE cg.group_type_ = #{groupType} AND cgsm.user_id_ = #{studentId} AND vg.group_status_ NOT IN (3,7)
         <if test="vipGroupName != null">
             AND vg.name_ LIKE CONCAT('%',#{vipGroupName},'%')
         </if>

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

@@ -1075,15 +1075,14 @@
             vip_group vg
             LEFT JOIN course_schedule cs ON cs.group_type_ = vg.group_type_ AND CONCAT(vg.id_, '') = cs.music_group_id_
         WHERE
-            vg.group_status_ = 2
-            GROUP BY
-            vg.id_
+            vg.group_status_ = 2 AND vg.group_type_ = #{groupType}
+            GROUP BY vg.id_
         HAVING COUNT( CASE WHEN cs.status_ != 'OVER' THEN 1 ELSE NULL END )&lt;=0
     </select>
     <select id="queryNormalStatusList" resultMap="VipGroup">
         SELECT *
         FROM vip_group
-        WHERE group_status_ = 0
+        WHERE group_status_ = 0 AND group_type_ = #{groupType}
     </select>
 
     <select id="findVipGroupInfo" resultMap="VipGroup">

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

@@ -281,8 +281,9 @@ public class TaskController extends BaseController {
 	@GetMapping("/updateVipGroupToFinishedStatus")
 	// 更新VIP课程状态至已结束
 	public void updateVipGroupToFinishedStatus() {
+		//更新vip课程状态
 		vipGroupService.updateVipGroupStatusToFinished();
-		//直播课排课
+		//更新直播课状态
 		vipGroupService.createLiveCourse();
 	}
 

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

@@ -141,25 +141,29 @@ public class VipGroupManageController extends BaseController {
     @PostMapping("/vipGroupApply")
     @PreAuthorize("@pcs.hasPermissions('vipGroupManage/vipGroupApply')")
     public Object vipGroupApply(@RequestBody VipGroupApplyDto vipGroupApplyDto){
-        Integer userId = vipGroupApplyDto.getVipGroupApplyBaseInfo().getUserId();
+        VipGroupApplyBaseInfoDto applyBaseInfo = vipGroupApplyDto.getVipGroupApplyBaseInfo();
+        Integer userId = applyBaseInfo.getUserId();
         Teacher teacher = teacherDao.get(userId);
         if(Objects.isNull(teacher)){
             return failed("请指定指导老师!");
         }
         // 设置默认参数VIP
-        if (StringUtils.isBlank(vipGroupApplyDto.getVipGroupApplyBaseInfo().getGroupType())) {
-            vipGroupApplyDto.getVipGroupApplyBaseInfo().setGroupType(CourseSchedule.CourseScheduleType.VIP.getCode());
+        if (StringUtils.isBlank(applyBaseInfo.getGroupType())) {
+            applyBaseInfo.setGroupType(CourseSchedule.CourseScheduleType.VIP.getCode());
         }
         // VIP课参数校验
-        if (CourseSchedule.CourseScheduleType.VIP.getCode().equals(vipGroupApplyDto.getVipGroupApplyBaseInfo().getGroupType())) {
-            if(Objects.isNull(vipGroupApplyDto.getVipGroupApplyBaseInfo().getOrganId())){
-                Integer firstStudentId = vipGroupApplyDto.getVipGroupApplyBaseInfo().getFirstStudentId();
+        if (CourseSchedule.CourseScheduleType.VIP.getCode().equals(applyBaseInfo.getGroupType())) {
+            if(Objects.isNull(applyBaseInfo.getOrganId())){
+                Integer firstStudentId = applyBaseInfo.getFirstStudentId();
                 SysUser student = teacherDao.getUser(firstStudentId);
                 if(Objects.isNull(student)||Objects.isNull(student.getOrganId())){
                     return failed("学员信息异常");
                 }
-                vipGroupApplyDto.getVipGroupApplyBaseInfo().setOrganId(student.getOrganId());
+                applyBaseInfo.setOrganId(student.getOrganId());
             }
+        }else {
+            //直播课分部跟随创建时的授课老师
+            applyBaseInfo.setOrganId(teacher.getTeacherOrganId());
         }
         return vipGroupService.createVipGroup(vipGroupApplyDto);
     }