|
@@ -20,6 +20,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.search.PracticeTeacherSearch;
|
|
|
import com.yonge.cooleshow.biz.dal.entity.*;
|
|
|
import com.yonge.cooleshow.biz.dal.enums.*;
|
|
|
+import com.yonge.cooleshow.biz.dal.enums.course.CourseTypeEnum;
|
|
|
import com.yonge.cooleshow.biz.dal.enums.im.EImUserFriendSourceForm;
|
|
|
import com.yonge.cooleshow.biz.dal.service.*;
|
|
|
import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
|
|
@@ -1435,6 +1436,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
if (ObjectUtil.isEmpty(schedule)) {
|
|
|
throw new BizException("无法调整该课程,课程不存在");
|
|
|
}
|
|
|
+ Date oldStartTime = schedule.getStartTime();
|
|
|
|
|
|
//校验系统配置上下课时间
|
|
|
String star = sysConfigService.findConfigValue(SysConfigConstant.COURSE_START_SETTING);//系统开课时间
|
|
@@ -1471,11 +1473,11 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
baseMapper.courseAdjust(adjustVo);
|
|
|
|
|
|
// 课程调整后给学生发消息
|
|
|
- sendCourseAdjustMessage(teacherId,studentPayment.getUserId(),adjustVo.getCourseId(),adjustVo.getStartTime());
|
|
|
+ sendCourseAdjustMessage(teacherId,studentPayment.getUserId(),adjustVo.getCourseId(),adjustVo.getStartTime(),oldStartTime);
|
|
|
}
|
|
|
|
|
|
//{老师昵称}已将{课程类型趣纠课、琴房课}{课程名称}课调整到{上课时间yyyy-MM-dd HH:mm:ss},请注意查看
|
|
|
- private void sendCourseAdjustMessage(Long teacherId,Long studentId,Integer courseScheduleId,Date date) {
|
|
|
+ private void sendCourseAdjustMessage(Long teacherId,Long studentId,Integer courseScheduleId,Date date,Date oldStartTime) {
|
|
|
// 趣纠课调整模板
|
|
|
try {
|
|
|
// 发送消息
|
|
@@ -1485,16 +1487,26 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
CourseSchedule courseSchedule = this.getById(courseScheduleId);
|
|
|
CourseGroup courseGroup = courseGroupService.getById(courseSchedule.getCourseGroupId());
|
|
|
|
|
|
- String courseName = courseGroup.getName() + "-第" + courseSchedule.getClassNum() + "课";
|
|
|
-
|
|
|
String dateString = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().format(
|
|
|
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
|
+ String oldDateString = oldStartTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().format(
|
|
|
+ DateTimeFormatter.ofPattern("MM-dd HH:mm:ss"));
|
|
|
+
|
|
|
Map<Long, String> receivers = new HashMap<>();
|
|
|
receivers.put(studentId, student.getPhone());
|
|
|
-
|
|
|
- sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PRACTICE_ADJUST, receivers, null,
|
|
|
- 0, null, ClientEnum.STUDENT.getCode(), teacher.getUsername(),"趣纠课",courseName,dateString);
|
|
|
+// String url = sysMessageService.selectConfigUrl(MessageTypeEnum.PRACTICE_ADJUST.getCode(),courseSchedule.getId());
|
|
|
+ sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
|
|
|
+ MessageTypeEnum.PRACTICE_ADJUST,
|
|
|
+ receivers,
|
|
|
+ new String[]{courseSchedule.getId().toString()},
|
|
|
+ null,
|
|
|
+ 0,
|
|
|
+ ClientEnum.STUDENT.getCode(),
|
|
|
+ teacher.getRealName(),
|
|
|
+ oldDateString,
|
|
|
+ CourseTypeEnum.valueOf(courseGroup.getType()).getMsg(),
|
|
|
+ dateString);
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
log.error("趣纠课调整发送消息失败--> {}", e.fillInStackTrace());
|
|
@@ -1677,9 +1689,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
|
|
|
//老师端-明日课程提醒
|
|
|
if (liveCount != 0 || practiceCount != 0) {
|
|
|
- String teacherUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.TOMORROW_COURSE_REMINDER.getCode());
|
|
|
+// String teacherUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.TOMORROW_COURSE_REMINDER.getCode());
|
|
|
sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TOMORROW_COURSE_REMINDER,
|
|
|
- teacherReceivers, null, 0, teacherUrl, ClientEnum.TEACHER.getCode(),
|
|
|
+ teacherReceivers, null, 0, null, ClientEnum.TEACHER.getCode(),
|
|
|
practiceCount.toString(), liveCount.toString());
|
|
|
log.info("send success {}", MessageTypeEnum.TOMORROW_COURSE_REMINDER);
|
|
|
|
|
@@ -2302,9 +2314,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
Map<Long, String> studentReceivers = new HashMap<>();
|
|
|
studentReceivers.put(studentId, student.getPhone());
|
|
|
|
|
|
- String pianoUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.ARRANGE_PIANO_ROOM_CLASS.getCode());
|
|
|
+// String pianoUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.ARRANGE_PIANO_ROOM_CLASS.getCode());
|
|
|
sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.ARRANGE_PIANO_ROOM_CLASS,
|
|
|
- studentReceivers, null, 0, pianoUrl, ClientEnum.STUDENT.getCode(),
|
|
|
+ studentReceivers, null, 0, null, ClientEnum.STUDENT.getCode(),
|
|
|
teacher.getUsername());
|
|
|
log.info("老师:{},学员:{},排课推送成功", teacherId, studentId);
|
|
|
} catch (Exception e) {
|
|
@@ -2876,6 +2888,81 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
return courseVos;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void courseStartRemind() {
|
|
|
+ List<CourseSchedule> courseSchedules = this.lambdaQuery()
|
|
|
+ .eq(CourseSchedule::getStatus, CourseScheduleEnum.NOT_START.getCode())
|
|
|
+ .eq(CourseSchedule::getPushStartMsg, false)
|
|
|
+ .lt(CourseSchedule::getStartTime, DateUtil.offsetMinute(new Date(), 20))
|
|
|
+ .list();
|
|
|
+ if (CollectionUtils.isEmpty(courseSchedules)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //获取所有老师
|
|
|
+ List<Long> teacherIds = courseSchedules.stream().map(CourseSchedule::getTeacherId).distinct().collect(Collectors.toList());
|
|
|
+ Map<Long, com.yonge.cooleshow.biz.dal.entity.SysUser> teacherMap = sysUserService.getMapByIds(teacherIds);
|
|
|
+ Map<Long, String> sendTeacherMap = teacherIds.stream().collect(Collectors.toMap(teacherId -> teacherId, teacherId -> teacherMap.get(teacherId).getPhone()));
|
|
|
+ //获取学员
|
|
|
+ List<Long> courseScheduleIds = courseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
|
|
|
+ List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentService.lambdaQuery().in(CourseScheduleStudentPayment::getCourseId, courseScheduleIds).list();
|
|
|
+ List<Long> studentIds = studentPayments.stream().map(CourseScheduleStudentPayment::getUserId).distinct().collect(Collectors.toList());
|
|
|
+ Map<Long, com.yonge.cooleshow.biz.dal.entity.SysUser> studentMap = sysUserService.getMapByIds(studentIds);
|
|
|
+ Map<Long, String> sendStudentMap = studentIds.stream().collect(Collectors.toMap(studentId -> studentId, studentId -> studentMap.get(studentId).getPhone()));
|
|
|
+ Map<String,List<CourseSchedule>> courseTypeMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getType));
|
|
|
+ courseTypeMap.forEach((type,courseList) -> {
|
|
|
+ if(CourseScheduleEnum.PRACTICE.getCode().equals(type)){
|
|
|
+ sendStartRemind(CourseScheduleEnum.PRACTICE,sendTeacherMap,courseList);
|
|
|
+ }else if(CourseScheduleEnum.VIP.getCode().equals(type)){
|
|
|
+ sendStartRemind(CourseScheduleEnum.VIP,sendTeacherMap,courseList);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ Map<String,List<CourseScheduleStudentPayment>> studentCourseTypeMap = studentPayments.stream().collect(Collectors.groupingBy(CourseScheduleStudentPayment::getCourseType));
|
|
|
+ studentCourseTypeMap.forEach((type,courseList) -> {
|
|
|
+ if(CourseScheduleEnum.PRACTICE.getCode().equals(type)){
|
|
|
+ sendStartRemind(CourseScheduleEnum.PRACTICE,courseList,sendStudentMap);
|
|
|
+ }else if(CourseScheduleEnum.VIP.getCode().equals(type)){
|
|
|
+ sendStartRemind(CourseScheduleEnum.VIP,courseList,sendStudentMap);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ this.lambdaUpdate().set(CourseSchedule::getPushStartMsg,true)
|
|
|
+ .in(CourseSchedule::getId,courseScheduleIds)
|
|
|
+ .update();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void sendStartRemind(CourseScheduleEnum courseScheduleEnum, Map<Long, String> teacherMap, List<CourseSchedule> courseList) {
|
|
|
+ courseList.forEach(courseSchedule -> {
|
|
|
+ Map<Long, String> sendTeacherMap = new HashMap<>();
|
|
|
+ sendTeacherMap.put(courseSchedule.getTeacherId(),teacherMap.get(courseSchedule.getTeacherId()));
|
|
|
+ sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
|
|
|
+ MessageTypeEnum.STUDENT_PRACTICE_REMINDER,
|
|
|
+ sendTeacherMap,
|
|
|
+ new String[]{courseSchedule.getId().toString()},
|
|
|
+ null,
|
|
|
+ 0,
|
|
|
+ ClientEnum.TEACHER.getCode(),
|
|
|
+ courseScheduleEnum.getMsg());
|
|
|
+ });
|
|
|
+ log.info("send success {}",MessageTypeEnum.STUDENT_PRACTICE_REMINDER);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void sendStartRemind(CourseScheduleEnum courseScheduleEnum, List<CourseScheduleStudentPayment> studentPayments, Map<Long, String> studentMap) {
|
|
|
+ studentPayments.forEach(courseSchedule -> {
|
|
|
+ Map<Long, String> sendTeacherMap = new HashMap<>(1);
|
|
|
+ sendTeacherMap.put(courseSchedule.getUserId(),studentMap.get(courseSchedule.getUserId()));
|
|
|
+ sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
|
|
|
+ MessageTypeEnum.PRACTICE_REMIND,
|
|
|
+ sendTeacherMap,
|
|
|
+ new String[]{courseSchedule.getCourseId().toString()},
|
|
|
+ null,
|
|
|
+ 0,
|
|
|
+ ClientEnum.STUDENT.getCode(),
|
|
|
+ courseScheduleEnum.getMsg());
|
|
|
+ });
|
|
|
+ log.info("send success {}",MessageTypeEnum.PRACTICE_REMIND);
|
|
|
+ }
|
|
|
+
|
|
|
private UserOrderDetail buyPracticeCourseTranV2(UserPaymentOrderWrapper.OrderGoodsInfo orderGoodsInfo) {
|
|
|
log.info("buyPracticeCourse param:{}", JSON.toJSONString(orderGoodsInfo));
|
|
|
|