|
@@ -1,5 +1,6 @@
|
|
package com.yonge.cooleshow.biz.dal.service.impl;
|
|
package com.yonge.cooleshow.biz.dal.service.impl;
|
|
|
|
|
|
|
|
+import cn.hutool.core.date.DateUnit;
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
@@ -20,6 +21,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.dto.search.PracticeTeacherSearch;
|
|
import com.yonge.cooleshow.biz.dal.entity.*;
|
|
import com.yonge.cooleshow.biz.dal.entity.*;
|
|
import com.yonge.cooleshow.biz.dal.enums.*;
|
|
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.enums.im.EImUserFriendSourceForm;
|
|
import com.yonge.cooleshow.biz.dal.service.*;
|
|
import com.yonge.cooleshow.biz.dal.service.*;
|
|
import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
|
|
import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
|
|
@@ -322,7 +324,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
Iterator<CourseTimeEntity> iterator = calendarEntity.getCourseTime().iterator();
|
|
Iterator<CourseTimeEntity> iterator = calendarEntity.getCourseTime().iterator();
|
|
while (iterator.hasNext()) {
|
|
while (iterator.hasNext()) {
|
|
CourseTimeEntity next = iterator.next();
|
|
CourseTimeEntity next = iterator.next();
|
|
- boolean flag = checkCourseTime(nowCourse, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime, next.getStartTime(), next.getEndTime());
|
|
|
|
|
|
+ boolean flag = checkCourseTime(nowCourse, CourseTimeEntity::getStartTime, CourseTimeEntity::getFreeEndTime, next.getStartTime(), next.getFreeEndTime());
|
|
if (flag) {
|
|
if (flag) {
|
|
iterator.remove();
|
|
iterator.remove();
|
|
}
|
|
}
|
|
@@ -442,6 +444,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
timeEntity.setEndTime(edate);
|
|
timeEntity.setEndTime(edate);
|
|
//再加上单节课休息时间
|
|
//再加上单节课休息时间
|
|
edate = DateUtil.addMinutes(edate, freeCourseMinutes);
|
|
edate = DateUtil.addMinutes(edate, freeCourseMinutes);
|
|
|
|
+ timeEntity.setFreeEndTime(edate);
|
|
result.add(timeEntity);
|
|
result.add(timeEntity);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -535,6 +538,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
|
|
|
// 检查时间段是否满足课程时间,不满足则删除,满足 并且可多段的情况下,将时间段拆分
|
|
// 检查时间段是否满足课程时间,不满足则删除,满足 并且可多段的情况下,将时间段拆分
|
|
courseTime = splitTime(courseTime,courseMinutes,freeMinutes);
|
|
courseTime = splitTime(courseTime,courseMinutes,freeMinutes);
|
|
|
|
+ courseTime.sort(Comparator.comparing(CourseTimeEntity::getStartTime));
|
|
calendarEntity.setCourseTime(courseTime);
|
|
calendarEntity.setCourseTime(courseTime);
|
|
|
|
|
|
//如果日历时间集合数据删没了,那么就证明当天课程已经满了 0:未满 1满
|
|
//如果日历时间集合数据删没了,那么就证明当天课程已经满了 0:未满 1满
|
|
@@ -610,10 +614,10 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
}
|
|
}
|
|
for (CourseTimeEntity trainingPlanTimeDetail : timeList) {
|
|
for (CourseTimeEntity trainingPlanTimeDetail : timeList) {
|
|
if (time.getStartTime().compareTo(trainingPlanTimeDetail.getStartTime()) < 0) {
|
|
if (time.getStartTime().compareTo(trainingPlanTimeDetail.getStartTime()) < 0) {
|
|
- if (time.getEndTime().compareTo(trainingPlanTimeDetail.getStartTime()) <= 0) {
|
|
|
|
|
|
+ if (time.getFreeEndTime().compareTo(trainingPlanTimeDetail.getStartTime()) <= 0) {
|
|
result.add(time);
|
|
result.add(time);
|
|
return result;
|
|
return result;
|
|
- } else if (time.getEndTime().compareTo(trainingPlanTimeDetail.getEndTime()) <= 0) {
|
|
|
|
|
|
+ } else if (time.getFreeEndTime().compareTo(trainingPlanTimeDetail.getFreeEndTime()) <= 0) {
|
|
CourseTimeEntity trainingPlanTimeDetail1 = new CourseTimeEntity();
|
|
CourseTimeEntity trainingPlanTimeDetail1 = new CourseTimeEntity();
|
|
trainingPlanTimeDetail1.setStartTime(time.getStartTime());
|
|
trainingPlanTimeDetail1.setStartTime(time.getStartTime());
|
|
trainingPlanTimeDetail1.setEndTime(trainingPlanTimeDetail.getStartTime());
|
|
trainingPlanTimeDetail1.setEndTime(trainingPlanTimeDetail.getStartTime());
|
|
@@ -626,9 +630,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
result.add(trainingPlanTimeDetail1);
|
|
result.add(trainingPlanTimeDetail1);
|
|
time.setStartTime(trainingPlanTimeDetail.getEndTime());
|
|
time.setStartTime(trainingPlanTimeDetail.getEndTime());
|
|
}
|
|
}
|
|
- } else if (time.getStartTime().compareTo(trainingPlanTimeDetail.getEndTime()) <= 0) {
|
|
|
|
- if (time.getEndTime().compareTo(trainingPlanTimeDetail.getEndTime()) > 0) {
|
|
|
|
- time.setStartTime(trainingPlanTimeDetail.getEndTime());
|
|
|
|
|
|
+ } else if (time.getStartTime().compareTo(trainingPlanTimeDetail.getFreeEndTime()) <= 0) {
|
|
|
|
+ if (time.getFreeEndTime().compareTo(trainingPlanTimeDetail.getFreeEndTime()) > 0) {
|
|
|
|
+ time.setStartTime(trainingPlanTimeDetail.getFreeEndTime());
|
|
} else {
|
|
} else {
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
@@ -652,16 +656,17 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
for (int i = 1; i < timeList.size(); i++) {
|
|
for (int i = 1; i < timeList.size(); i++) {
|
|
CourseTimeEntity nextTime = timeList.get(i);
|
|
CourseTimeEntity nextTime = timeList.get(i);
|
|
// 如果下一个时间段的开始时间小于等于上一个时间段的结束时间
|
|
// 如果下一个时间段的开始时间小于等于上一个时间段的结束时间
|
|
- if (nextTime.getStartTime().compareTo(time.getEndTime()) <= 0 ) {
|
|
|
|
|
|
+ if (nextTime.getStartTime().compareTo(time.getFreeEndTime()) <= 0 ) {
|
|
// 合并时间段
|
|
// 合并时间段
|
|
- if (nextTime.getEndTime().compareTo(time.getEndTime()) >= 0) {
|
|
|
|
|
|
+ if (nextTime.getFreeEndTime().compareTo(time.getFreeEndTime()) >= 0) {
|
|
time.setEndTime(nextTime.getEndTime());
|
|
time.setEndTime(nextTime.getEndTime());
|
|
|
|
+ time.setFreeEndTime(nextTime.getFreeEndTime());
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
// 保存上一个时间段
|
|
// 保存上一个时间段
|
|
result.add(time);
|
|
result.add(time);
|
|
// 重置时间段
|
|
// 重置时间段
|
|
- if (nextTime.getEndTime().compareTo(time.getEndTime()) >= 0) {
|
|
|
|
|
|
+ if (nextTime.getFreeEndTime().compareTo(time.getFreeEndTime()) >= 0) {
|
|
time = nextTime;
|
|
time = nextTime;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -686,6 +691,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
String star = sysConfigService.findConfigValue(SysConfigConstant.COURSE_START_SETTING);//系统开课时间
|
|
String star = sysConfigService.findConfigValue(SysConfigConstant.COURSE_START_SETTING);//系统开课时间
|
|
String end = sysConfigService.findConfigValue(SysConfigConstant.COURSE_END_SETTING);//系统关课时间
|
|
String end = sysConfigService.findConfigValue(SysConfigConstant.COURSE_END_SETTING);//系统关课时间
|
|
|
|
|
|
|
|
+ LocalDate now = LocalDate.now();
|
|
//获取每日日期数据
|
|
//获取每日日期数据
|
|
while (firstDay.isBefore(lastDay) || firstDay.isEqual(lastDay)) {
|
|
while (firstDay.isBefore(lastDay) || firstDay.isEqual(lastDay)) {
|
|
CourseCalendarEntity entity = new CourseCalendarEntity();
|
|
CourseCalendarEntity entity = new CourseCalendarEntity();
|
|
@@ -699,7 +705,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
.map(t -> getCourseTimeEntity(entity, (JSONObject) t))
|
|
.map(t -> getCourseTimeEntity(entity, (JSONObject) t))
|
|
.filter(f -> checkTime(f, star, end))
|
|
.filter(f -> checkTime(f, star, end))
|
|
.collect(Collectors.toList());
|
|
.collect(Collectors.toList());
|
|
- entity.setCourseTime(timeEntities);
|
|
|
|
|
|
+ if (!now.isAfter(firstDay)) {
|
|
|
|
+ entity.setCourseTime(timeEntities);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
list.add(entity);
|
|
list.add(entity);
|
|
firstDay = firstDay.plusDays(1L);
|
|
firstDay = firstDay.plusDays(1L);
|
|
@@ -741,6 +749,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
CourseTimeEntity courseTimeEntity = new CourseTimeEntity();
|
|
CourseTimeEntity courseTimeEntity = new CourseTimeEntity();
|
|
courseTimeEntity.setStartTime(DateUtil.addDays(time.getStartTime(), addDay));
|
|
courseTimeEntity.setStartTime(DateUtil.addDays(time.getStartTime(), addDay));
|
|
courseTimeEntity.setEndTime(DateUtil.addDays(time.getEndTime(), addDay));
|
|
courseTimeEntity.setEndTime(DateUtil.addDays(time.getEndTime(), addDay));
|
|
|
|
+ courseTimeEntity.setFreeEndTime(DateUtil.addDays(time.getFreeEndTime(), addDay));
|
|
times.add(courseTimeEntity);
|
|
times.add(courseTimeEntity);
|
|
});
|
|
});
|
|
entity.setCourseTime(times);
|
|
entity.setCourseTime(times);
|
|
@@ -813,6 +822,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
lockCourse.setClassDate(DateUtil.toDate(ymd));
|
|
lockCourse.setClassDate(DateUtil.toDate(ymd));
|
|
lockCourse.setStartTime(courseTimeEntity.getStartTime());
|
|
lockCourse.setStartTime(courseTimeEntity.getStartTime());
|
|
lockCourse.setEndTime(courseTimeEntity.getEndTime());
|
|
lockCourse.setEndTime(courseTimeEntity.getEndTime());
|
|
|
|
+ lockCourse.setFreeEndTime(courseTimeEntity.getFreeEndTime());
|
|
lockCourseList.add(lockCourse);
|
|
lockCourseList.add(lockCourse);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
@@ -838,7 +848,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
v.forEach(course -> {
|
|
v.forEach(course -> {
|
|
CourseTimeEntity courseTimeEntity = new CourseTimeEntity();
|
|
CourseTimeEntity courseTimeEntity = new CourseTimeEntity();
|
|
courseTimeEntity.setStartTime(course.getStartTime());
|
|
courseTimeEntity.setStartTime(course.getStartTime());
|
|
- courseTimeEntity.setEndTime(course.getFreeEndTime());
|
|
|
|
|
|
+ courseTimeEntity.setEndTime(course.getEndTime());
|
|
|
|
+ courseTimeEntity.setFreeEndTime(course.getFreeEndTime());
|
|
value.add(courseTimeEntity);
|
|
value.add(courseTimeEntity);
|
|
});
|
|
});
|
|
nowCourse.put(DateUtil.dateToString(k), value);
|
|
nowCourse.put(DateUtil.dateToString(k), value);
|
|
@@ -1435,6 +1446,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
if (ObjectUtil.isEmpty(schedule)) {
|
|
if (ObjectUtil.isEmpty(schedule)) {
|
|
throw new BizException("无法调整该课程,课程不存在");
|
|
throw new BizException("无法调整该课程,课程不存在");
|
|
}
|
|
}
|
|
|
|
+ Date oldStartTime = schedule.getStartTime();
|
|
|
|
|
|
//校验系统配置上下课时间
|
|
//校验系统配置上下课时间
|
|
String star = sysConfigService.findConfigValue(SysConfigConstant.COURSE_START_SETTING);//系统开课时间
|
|
String star = sysConfigService.findConfigValue(SysConfigConstant.COURSE_START_SETTING);//系统开课时间
|
|
@@ -1457,25 +1469,33 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
baseMapper.update(null, Wrappers.<CourseSchedule>lambdaUpdate()
|
|
baseMapper.update(null, Wrappers.<CourseSchedule>lambdaUpdate()
|
|
.eq(CourseSchedule::getId, adjustVo.getCourseId())
|
|
.eq(CourseSchedule::getId, adjustVo.getCourseId())
|
|
.set(CourseSchedule::getStartTime, DateUtil.getYesterday())
|
|
.set(CourseSchedule::getStartTime, DateUtil.getYesterday())
|
|
- .set(CourseSchedule::getEndTime, DateUtil.getYesterday()));
|
|
|
|
|
|
+ .set(CourseSchedule::getEndTime, DateUtil.getYesterday())
|
|
|
|
+ .set(CourseSchedule::getFreeEndTime, DateUtil.getYesterday())
|
|
|
|
+ );
|
|
|
|
|
|
CourseTimeEntity timeEntity = new CourseTimeEntity();
|
|
CourseTimeEntity timeEntity = new CourseTimeEntity();
|
|
timeEntity.setStartTime(startTime);
|
|
timeEntity.setStartTime(startTime);
|
|
timeEntity.setEndTime(endTime);
|
|
timeEntity.setEndTime(endTime);
|
|
|
|
+
|
|
|
|
+ // 加上课间时间
|
|
|
|
+ int feeTime = Integer.parseInt(String.valueOf(cn.hutool.core.date.DateUtil.between(schedule.getEndTime(), schedule.getFreeEndTime(), DateUnit.MINUTE)));
|
|
|
|
+ Date freeEndTime = DateUtil.offsetMinute(endTime, feeTime);
|
|
|
|
+ timeEntity.setFreeEndTime(freeEndTime);
|
|
|
|
+
|
|
List<CourseTimeEntity> timeList = Arrays.asList(timeEntity);
|
|
List<CourseTimeEntity> timeList = Arrays.asList(timeEntity);
|
|
//校验老师课程是否冲突
|
|
//校验老师课程是否冲突
|
|
- this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
|
|
|
|
|
|
+ this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getFreeEndTime);
|
|
//校验学生课程是否冲突
|
|
//校验学生课程是否冲突
|
|
- this.batchCheckTeacherCourseTime(studentPayment.getUserId(), timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
|
|
|
|
|
|
+ this.batchCheckStudentCourseTime(studentPayment.getUserId(), timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
|
|
|
|
|
|
baseMapper.courseAdjust(adjustVo);
|
|
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},请注意查看
|
|
//{老师昵称}已将{课程类型趣纠课、琴房课}{课程名称}课调整到{上课时间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 {
|
|
try {
|
|
// 发送消息
|
|
// 发送消息
|
|
@@ -1485,16 +1505,26 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
CourseSchedule courseSchedule = this.getById(courseScheduleId);
|
|
CourseSchedule courseSchedule = this.getById(courseScheduleId);
|
|
CourseGroup courseGroup = courseGroupService.getById(courseSchedule.getCourseGroupId());
|
|
CourseGroup courseGroup = courseGroupService.getById(courseSchedule.getCourseGroupId());
|
|
|
|
|
|
- String courseName = courseGroup.getName() + "-第" + courseSchedule.getClassNum() + "课";
|
|
|
|
-
|
|
|
|
String dateString = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().format(
|
|
String dateString = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().format(
|
|
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
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<>();
|
|
Map<Long, String> receivers = new HashMap<>();
|
|
receivers.put(studentId, student.getPhone());
|
|
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) {
|
|
} catch (Exception e) {
|
|
log.error("趣纠课调整发送消息失败--> {}", e.fillInStackTrace());
|
|
log.error("趣纠课调整发送消息失败--> {}", e.fillInStackTrace());
|
|
@@ -1677,9 +1707,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
|
|
|
//老师端-明日课程提醒
|
|
//老师端-明日课程提醒
|
|
if (liveCount != 0 || practiceCount != 0) {
|
|
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,
|
|
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());
|
|
practiceCount.toString(), liveCount.toString());
|
|
log.info("send success {}", MessageTypeEnum.TOMORROW_COURSE_REMINDER);
|
|
log.info("send success {}", MessageTypeEnum.TOMORROW_COURSE_REMINDER);
|
|
|
|
|
|
@@ -2302,9 +2332,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
Map<Long, String> studentReceivers = new HashMap<>();
|
|
Map<Long, String> studentReceivers = new HashMap<>();
|
|
studentReceivers.put(studentId, student.getPhone());
|
|
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,
|
|
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());
|
|
teacher.getUsername());
|
|
log.info("老师:{},学员:{},排课推送成功", teacherId, studentId);
|
|
log.info("老师:{},学员:{},排课推送成功", teacherId, studentId);
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
@@ -2430,6 +2460,11 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
throw new BizException("无法修改课程");
|
|
throw new BizException("无法修改课程");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // 加上课间时间
|
|
|
|
+ int feeTime = Integer.parseInt(String.valueOf(cn.hutool.core.date.DateUtil.between(courseSchedule.getStartTime(), startTime, DateUnit.MINUTE)));
|
|
|
|
+ Date freeEndTime = DateUtil.offsetMinute(endTime, feeTime);
|
|
|
|
+ courseTime.setFreeEndTime(freeEndTime);
|
|
|
|
+
|
|
//校验上下课时间
|
|
//校验上下课时间
|
|
Integer singleCourseTime = courseSchedule.getSingleCourseTime();
|
|
Integer singleCourseTime = courseSchedule.getSingleCourseTime();
|
|
if (!DateUtil.offsetMinute(startTime, singleCourseTime).equals(endTime)) {
|
|
if (!DateUtil.offsetMinute(startTime, singleCourseTime).equals(endTime)) {
|
|
@@ -2440,10 +2475,11 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
baseMapper.update(null, Wrappers.<CourseSchedule>lambdaUpdate()
|
|
baseMapper.update(null, Wrappers.<CourseSchedule>lambdaUpdate()
|
|
.eq(CourseSchedule::getId, courseId)
|
|
.eq(CourseSchedule::getId, courseId)
|
|
.set(CourseSchedule::getStartTime, DateUtil.getYesterday())
|
|
.set(CourseSchedule::getStartTime, DateUtil.getYesterday())
|
|
|
|
+ .set(CourseSchedule::getFreeEndTime, DateUtil.getYesterday())
|
|
.set(CourseSchedule::getEndTime, DateUtil.getYesterday()));
|
|
.set(CourseSchedule::getEndTime, DateUtil.getYesterday()));
|
|
|
|
|
|
//批量检查老师课时在数据库是否重复
|
|
//批量检查老师课时在数据库是否重复
|
|
- this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
|
|
|
|
|
|
+ this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getFreeEndTime);
|
|
|
|
|
|
//校验购买的课程组每节课时间是否和自己的课时冲突
|
|
//校验购买的课程组每节课时间是否和自己的课时冲突
|
|
List<CourseScheduleStudentPayment> studentPayments = paymentDao.selectList(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
|
|
List<CourseScheduleStudentPayment> studentPayments = paymentDao.selectList(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
|
|
@@ -2460,7 +2496,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
.eq(CourseSchedule::getId, courseId)
|
|
.eq(CourseSchedule::getId, courseId)
|
|
.set(CourseSchedule::getClassDate, DateUtil.trunc(startTime))
|
|
.set(CourseSchedule::getClassDate, DateUtil.trunc(startTime))
|
|
.set(CourseSchedule::getStartTime, startTime)
|
|
.set(CourseSchedule::getStartTime, startTime)
|
|
- .set(CourseSchedule::getEndTime, endTime));
|
|
|
|
|
|
+ .set(CourseSchedule::getEndTime, endTime)
|
|
|
|
+ .set(CourseSchedule::getFreeEndTime, freeEndTime)
|
|
|
|
+ );
|
|
|
|
|
|
if (CollectionUtils.isNotEmpty(studentPayments)) {
|
|
if (CollectionUtils.isNotEmpty(studentPayments)) {
|
|
SysUser teacher = sysUserService.getByUserId(teacherId);
|
|
SysUser teacher = sysUserService.getByUserId(teacherId);
|
|
@@ -2493,7 +2531,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
0, null, ClientEnum.STUDENT.getCode(), teacher.getUsername(),"琴房课",courseName,dateString);
|
|
0, null, ClientEnum.STUDENT.getCode(), teacher.getUsername(),"琴房课",courseName,dateString);
|
|
|
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
- log.error("琴房课调整发送消息失败--> {}", e.fillInStackTrace());
|
|
|
|
|
|
+ log.error("琴房课调整发送消息失败", e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2876,6 +2914,81 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
return courseVos;
|
|
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) {
|
|
private UserOrderDetail buyPracticeCourseTranV2(UserPaymentOrderWrapper.OrderGoodsInfo orderGoodsInfo) {
|
|
log.info("buyPracticeCourse param:{}", JSON.toJSONString(orderGoodsInfo));
|
|
log.info("buyPracticeCourse param:{}", JSON.toJSONString(orderGoodsInfo));
|
|
|
|
|