|
@@ -10,9 +10,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.google.common.collect.Lists;
|
|
|
+import com.google.common.collect.Sets;
|
|
|
+import com.microsvc.toolkit.common.spring.SpringContextHolder;
|
|
|
import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
|
|
|
import com.yonge.cooleshow.auth.api.entity.SysUser;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.*;
|
|
|
+import com.yonge.cooleshow.biz.dal.dto.BasicUserInfo;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.PracticeScheduleDto;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
|
|
@@ -1955,15 +1958,23 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
* @Date: 2022/5/27
|
|
|
*/
|
|
|
public void arrangeCourse(ArrangeCourseVo arrangeCourseVo, Long teacherId) {
|
|
|
- DistributedLock.of(redissonClient)
|
|
|
- .runIfLockCanGet(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey("teacherId:" + teacherId)
|
|
|
- , () -> this.checkArrangeCourse(arrangeCourseVo, teacherId), 60L, TimeUnit.SECONDS);
|
|
|
+
|
|
|
+ // 返回未加入群用户消息
|
|
|
+ String message = DistributedLock.of(redissonClient)
|
|
|
+ .runIfLockCanGet(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey("teacherId:" + teacherId)
|
|
|
+ , () -> SpringContextHolder.getBean(CourseScheduleServiceImpl.class).checkArrangeCourse(arrangeCourseVo, teacherId),
|
|
|
+ 60L, TimeUnit.SECONDS);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 校验排课
|
|
|
+ * @param arrangeCourseVo 排课参数
|
|
|
+ * @param teacherId 老师id
|
|
|
+ */
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void checkArrangeCourse(ArrangeCourseVo arrangeCourseVo, Long teacherId) {
|
|
|
+ public String checkArrangeCourse(ArrangeCourseVo arrangeCourseVo, Long teacherId) {
|
|
|
Integer classNum = arrangeCourseVo.getClassNum();//课时数
|
|
|
- Integer singleClssTime = arrangeCourseVo.getSingleClssTime();//单课时长
|
|
|
+ Integer singleClassTime = arrangeCourseVo.getSingleClssTime();//单课时长
|
|
|
List<Long> studentIds = arrangeCourseVo.getStudentIds();//学员id集合
|
|
|
|
|
|
String formula = sysConfigService.findConfigValue(SysConfigConstant.PIANO_ROOM_TIME_FORMULA);
|
|
@@ -1971,13 +1982,13 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
if (n == null) {
|
|
|
throw new BizException("公式转换失败");
|
|
|
}
|
|
|
- Integer consumTime = classNum * singleClssTime * n;//消耗时长 课程数*单课时长*人数
|
|
|
+ Integer consumTime = classNum * singleClassTime * n;//消耗时长 课程数*单课时长*人数
|
|
|
|
|
|
List<CourseTimeEntity> timeList = arrangeCourseVo.getTimeList();//选课时间
|
|
|
Integer consumeTime = arrangeCourseVo.getConsumeTime();
|
|
|
|
|
|
log.info("classNum:" + classNum);
|
|
|
- log.info("singleClssTime:" + singleClssTime);
|
|
|
+ log.info("singleClssTime:" + singleClassTime);
|
|
|
log.info("n:" + n);
|
|
|
log.info("消耗时长:" + consumTime);
|
|
|
log.info("传入时长:" + consumeTime);
|
|
@@ -2002,7 +2013,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
if (timeList.get(i).getStartTime().before(new Date())) {
|
|
|
throw new BizException("上课时间必须大于当前时间");
|
|
|
}
|
|
|
- if (!DateUtil.offsetMinute(timeList.get(i).getStartTime(), singleClssTime).equals(timeList.get(i).getEndTime())) {
|
|
|
+ if (!DateUtil.offsetMinute(timeList.get(i).getStartTime(), singleClassTime).equals(timeList.get(i).getEndTime())) {
|
|
|
throw new BizException("第{}节课结束时间计算错误", i + 1);
|
|
|
}
|
|
|
}
|
|
@@ -2059,7 +2070,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
courseGroup.setTeacherId(teacherId);
|
|
|
courseGroup.setName(arrangeCourseVo.getCourseName());
|
|
|
courseGroup.setSubjectId(arrangeCourseVo.getSubjectId());
|
|
|
- courseGroup.setSingleCourseMinutes(singleClssTime);
|
|
|
+ courseGroup.setSingleCourseMinutes(singleClassTime);
|
|
|
courseGroup.setCourseNum(classNum);
|
|
|
courseGroup.setStatus(CourseGroupEnum.ING.getCode());
|
|
|
courseGroup.setCreatedBy(teacherId);
|
|
@@ -2079,7 +2090,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
schedule.setLock(0);
|
|
|
schedule.setStatus(CourseScheduleEnum.NOT_START.getCode());
|
|
|
schedule.setCreatedBy(teacherId);
|
|
|
- schedule.setSingleCourseTime(singleClssTime);
|
|
|
+ schedule.setSingleCourseTime(singleClassTime);
|
|
|
baseMapper.insert(schedule);
|
|
|
|
|
|
//添加payment
|
|
@@ -2113,14 +2124,14 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
roomTimeLock.setFrozenTime(frozenTimeLock + consumTime);
|
|
|
pianoRoomTimeDao.update(roomTimeLock, Wrappers.<PianoRoomTime>lambdaQuery().eq(PianoRoomTime::getTeacherId, teacherId));
|
|
|
return null;
|
|
|
- }, null, 10l);
|
|
|
+ }, null, 10L);
|
|
|
|
|
|
+ List<Long> noGroupJoinUserIds = Lists.newArrayList();
|
|
|
//创建群聊
|
|
|
try {
|
|
|
- imGroupService.autoCreate(courseGroup.getId(), CourseScheduleEnum.PIANO_ROOM_CLASS.getCode());
|
|
|
+ imGroupService.autoCreate(courseGroup.getId(), CourseScheduleEnum.PIANO_ROOM_CLASS.getCode(), noGroupJoinUserIds);
|
|
|
} catch (Exception e) {
|
|
|
- log.error("琴房课程组id:{},创建群聊失败:{}", courseGroup.getId(), e);
|
|
|
- e.printStackTrace();
|
|
|
+ log.error("琴房课程组id:{},创建群聊失败", courseGroup.getId(), e);
|
|
|
}
|
|
|
|
|
|
for (Long studentId : studentIds) {
|
|
@@ -2131,6 +2142,15 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
}
|
|
|
//清除老师缓存
|
|
|
redissonClient.getBucket(CacheNameEnum.TEACHER_TOTAL.getRedisKey(teacherId)).delete();
|
|
|
+
|
|
|
+ String message = "";
|
|
|
+ if (CollectionUtils.isNotEmpty(noGroupJoinUserIds)) {
|
|
|
+ String collect = teacherService.getDao().findBasicUserInfo(Sets.newHashSet(noGroupJoinUserIds)).stream()
|
|
|
+ .map(BasicUserInfo::getUsername).collect(Collectors.joining());
|
|
|
+ // 返回未加入群用户消息
|
|
|
+ message = collect + "由于群成员人数达到上限,未能进入课程群";
|
|
|
+ }
|
|
|
+ return message;
|
|
|
}
|
|
|
|
|
|
/**
|