|
|
@@ -1,14 +1,18 @@
|
|
|
package cn.seecoder.seecoderportalserver.serviceImpl;
|
|
|
|
|
|
+import cn.seecoder.seecoderportalcommon.vo.group.GroupMemberVO;
|
|
|
import cn.seecoder.seecoderportalcommon.vo.group.GroupRuleVO;
|
|
|
import cn.seecoder.seecoderportalcommon.vo.group.GroupVO;
|
|
|
import cn.seecoder.seecoderportalserver.domain.group.Group;
|
|
|
+import cn.seecoder.seecoderportalserver.domain.group.GroupMember;
|
|
|
import cn.seecoder.seecoderportalserver.domain.group.GroupRule;
|
|
|
import cn.seecoder.seecoderportalserver.mapper.group.GroupMapper;
|
|
|
+import cn.seecoder.seecoderportalserver.mapper.group.GroupMemberMapper;
|
|
|
import cn.seecoder.seecoderportalserver.mapper.group.GroupRuleMapper;
|
|
|
import cn.seecoder.seecoderportalserver.repository.group.GroupMemberRepository;
|
|
|
import cn.seecoder.seecoderportalserver.repository.group.GroupRepository;
|
|
|
import cn.seecoder.seecoderportalserver.repository.group.GroupRuleRepository;
|
|
|
+import cn.seecoder.seecoderportalserver.security.DomainUserDetails;
|
|
|
import cn.seecoder.seecoderportalserver.security.SecurityUtils;
|
|
|
import cn.seecoder.seecoderportalserver.service.CourseService;
|
|
|
import cn.seecoder.seecoderportalserver.service.GroupService;
|
|
|
@@ -28,14 +32,16 @@ public class GroupServiceImpl implements GroupService {
|
|
|
private final GroupRuleRepository groupRuleRepository;
|
|
|
private final GroupRuleMapper groupRuleMapper;
|
|
|
private final GroupMemberRepository groupMemberRepository;
|
|
|
+ private final GroupMemberMapper groupMemberMapper;
|
|
|
private final CourseService courseService;
|
|
|
|
|
|
- public GroupServiceImpl(GroupRepository groupRepository, GroupMapper groupMapper, GroupRuleRepository groupRuleRepository, GroupRuleMapper groupRuleMapper, GroupMemberRepository groupMemberRepository, CourseService courseService) {
|
|
|
+ public GroupServiceImpl(GroupRepository groupRepository, GroupMapper groupMapper, GroupRuleRepository groupRuleRepository, GroupRuleMapper groupRuleMapper, GroupMemberRepository groupMemberRepository, GroupMemberMapper groupMemberMapper, CourseService courseService) {
|
|
|
this.groupRepository = groupRepository;
|
|
|
this.groupMapper = groupMapper;
|
|
|
this.groupRuleRepository = groupRuleRepository;
|
|
|
this.groupRuleMapper = groupRuleMapper;
|
|
|
this.groupMemberRepository = groupMemberRepository;
|
|
|
+ this.groupMemberMapper = groupMemberMapper;
|
|
|
this.courseService = courseService;
|
|
|
}
|
|
|
|
|
|
@@ -43,24 +49,74 @@ public class GroupServiceImpl implements GroupService {
|
|
|
public String createGroupTable(GroupRuleVO groupRuleVO) {
|
|
|
String tableName = getGroupTableName(groupRuleVO.getCourseVO().getId());
|
|
|
groupRepository.createGroupTable(tableName, groupRuleVO.getMaxNameLen().toString());
|
|
|
+ log.info("Create Group Table " + tableName);
|
|
|
return tableName;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public String createGroupMemberTable(Long courseId) {
|
|
|
String tableName = getGroupMemberTableName(courseId);
|
|
|
- groupMemberRepository.createGroupMemberTable(tableName);
|
|
|
+ groupMemberRepository.createGroupMemberTable(tableName, getGroupTableName(courseId));
|
|
|
+ log.info("Create Group Member Table " + tableName);
|
|
|
return tableName;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public GroupVO createGroup(GroupVO groupVO) {
|
|
|
- // todo
|
|
|
+ DomainUserDetails user = SecurityUtils.getCurrentUser();
|
|
|
+ // 验证选课
|
|
|
+ if (!courseService.checkSelection(user.getId(), groupVO.getCourseId())) {
|
|
|
+ throw CustomErrorException.courseSelectionNotFound();
|
|
|
+ }
|
|
|
+ // 验证尚未加入小组
|
|
|
+ if (groupMemberRepository.findByUserId(getGroupMemberTableName(groupVO.getCourseId()), user.getId()) != null) {
|
|
|
+ throw CustomErrorException.groupMemberAlreadyExists("当前用户无法创建新的小组!");
|
|
|
+ }
|
|
|
+ // 创建小组
|
|
|
Group group = groupMapper.toGroup(groupVO);
|
|
|
- groupRepository.createGroup(group, getGroupTableName(groupVO.getCourseId()));
|
|
|
+ groupRepository.createGroup(getGroupTableName(groupVO.getCourseId()), group);
|
|
|
+ log.info("Create Group: {}", group);
|
|
|
+ // 添加小组成员(当前用户)
|
|
|
+ try {
|
|
|
+ GroupMemberVO groupMemberVO = new GroupMemberVO();
|
|
|
+ groupMemberVO.setUserId(user.getId());
|
|
|
+ groupMemberVO.setGroupId(group.getId());
|
|
|
+ groupMemberVO.setCourseId(groupVO.getCourseId());
|
|
|
+ addGroupMember(groupMemberVO);
|
|
|
+ } catch (RuntimeException e) {
|
|
|
+ log.error(e.getMessage());
|
|
|
+ groupRepository.deleteGroup(getGroupTableName(groupVO.getCourseId()), group.getId());
|
|
|
+ log.info("Delete Group: {}", group);
|
|
|
+ }
|
|
|
return groupMapper.toGroupVO(group);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public GroupMemberVO addGroupMember(GroupMemberVO groupMemberVO) {
|
|
|
+ String tableName = getGroupMemberTableName(groupMemberVO.getCourseId());
|
|
|
+ DomainUserDetails user = SecurityUtils.getCurrentUser();
|
|
|
+ // 验证选课
|
|
|
+ if (!courseService.checkSelection(user.getId(), groupMemberVO.getCourseId())) {
|
|
|
+ throw CustomErrorException.courseSelectionNotFound();
|
|
|
+ }
|
|
|
+ // 验证尚未加入小组
|
|
|
+ if (groupMemberRepository.findByUserId(tableName, user.getId()) != null) {
|
|
|
+ throw CustomErrorException.groupMemberAlreadyExists("当前用户无法加入其他小组!");
|
|
|
+ }
|
|
|
+ // 验证小组未满员
|
|
|
+ GroupRule groupRule = groupRuleRepository.findByCourse_Id(groupMemberVO.getCourseId())
|
|
|
+ .orElseThrow(() -> CustomErrorException.groupRuleNotFound(null));
|
|
|
+ int currentSize = groupMemberRepository.countGroupMembers(tableName, groupMemberVO.getGroupId());
|
|
|
+ if(currentSize == groupRule.getMaxSize()){
|
|
|
+ throw CustomErrorException.groupAlreadyMaxSize(null);
|
|
|
+ }
|
|
|
+ // 添加小组成员
|
|
|
+ GroupMember groupMember = groupMemberMapper.toGroupMember(groupMemberVO);
|
|
|
+ groupMemberRepository.createGroupMember(tableName, groupMember);
|
|
|
+ log.info("Create GroupMember: {}", groupMember);
|
|
|
+ return groupMemberMapper.toGroupMemberVO(groupMember);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public GroupRuleVO editGroupRule(GroupRuleVO ruleVO) {
|
|
|
Long teacherId = courseService
|
|
|
@@ -72,10 +128,8 @@ public class GroupServiceImpl implements GroupService {
|
|
|
GroupRule groupRule;
|
|
|
groupRule = groupRuleRepository.save(groupRuleMapper.toGroupRule(ruleVO));
|
|
|
log.info("Edit Course Group Rule: {}", groupRule);
|
|
|
- String table1 = createGroupTable(ruleVO);
|
|
|
- log.info("Create Group Table " + table1);
|
|
|
- String table2 = createGroupMemberTable(ruleVO.getCourseVO().getId());
|
|
|
- log.info("Create Group Member Table " + table2);
|
|
|
+ createGroupTable(ruleVO);
|
|
|
+ createGroupMemberTable(ruleVO.getCourseVO().getId());
|
|
|
return groupRuleMapper.toGroupRuleVO(groupRule);
|
|
|
}
|
|
|
|