|
|
@@ -1,5 +1,6 @@
|
|
|
package cn.seecoder.seecoderportalserver.serviceImpl;
|
|
|
|
|
|
+import cn.seecoder.seecoderportalcommon.vo.dto.GroupDTO;
|
|
|
import cn.seecoder.seecoderportalcommon.vo.group.GroupMemberVO;
|
|
|
import cn.seecoder.seecoderportalcommon.vo.group.GroupRuleVO;
|
|
|
import cn.seecoder.seecoderportalcommon.vo.group.GroupVO;
|
|
|
@@ -16,10 +17,16 @@ import cn.seecoder.seecoderportalserver.security.DomainUserDetails;
|
|
|
import cn.seecoder.seecoderportalserver.security.SecurityUtils;
|
|
|
import cn.seecoder.seecoderportalserver.service.CourseService;
|
|
|
import cn.seecoder.seecoderportalserver.service.GroupService;
|
|
|
+import cn.seecoder.seecoderportalserver.service.UserService;
|
|
|
import cn.seecoder.seecoderportalserver.web.rest.errors.CustomErrorException;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author wind
|
|
|
@@ -34,8 +41,9 @@ public class GroupServiceImpl implements GroupService {
|
|
|
private final GroupMemberRepository groupMemberRepository;
|
|
|
private final GroupMemberMapper groupMemberMapper;
|
|
|
private final CourseService courseService;
|
|
|
+ private final UserService userService;
|
|
|
|
|
|
- public GroupServiceImpl(GroupRepository groupRepository, GroupMapper groupMapper, GroupRuleRepository groupRuleRepository, GroupRuleMapper groupRuleMapper, GroupMemberRepository groupMemberRepository, GroupMemberMapper groupMemberMapper, CourseService courseService) {
|
|
|
+ public GroupServiceImpl(GroupRepository groupRepository, GroupMapper groupMapper, GroupRuleRepository groupRuleRepository, GroupRuleMapper groupRuleMapper, GroupMemberRepository groupMemberRepository, GroupMemberMapper groupMemberMapper, CourseService courseService, UserService userService) {
|
|
|
this.groupRepository = groupRepository;
|
|
|
this.groupMapper = groupMapper;
|
|
|
this.groupRuleRepository = groupRuleRepository;
|
|
|
@@ -43,9 +51,11 @@ public class GroupServiceImpl implements GroupService {
|
|
|
this.groupMemberRepository = groupMemberRepository;
|
|
|
this.groupMemberMapper = groupMemberMapper;
|
|
|
this.courseService = courseService;
|
|
|
+ this.userService = userService;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = RuntimeException.class)
|
|
|
public String createGroupTable(GroupRuleVO groupRuleVO) {
|
|
|
String tableName = getGroupTableName(groupRuleVO.getCourseVO().getId());
|
|
|
groupRepository.createGroupTable(tableName, groupRuleVO.getMaxNameLen().toString());
|
|
|
@@ -54,6 +64,7 @@ public class GroupServiceImpl implements GroupService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = RuntimeException.class)
|
|
|
public String createGroupMemberTable(Long courseId) {
|
|
|
String tableName = getGroupMemberTableName(courseId);
|
|
|
groupMemberRepository.createGroupMemberTable(tableName, getGroupTableName(courseId));
|
|
|
@@ -62,6 +73,7 @@ public class GroupServiceImpl implements GroupService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = RuntimeException.class)
|
|
|
public GroupVO createGroup(GroupVO groupVO) {
|
|
|
DomainUserDetails user = SecurityUtils.getCurrentUser();
|
|
|
// 验证选课
|
|
|
@@ -77,21 +89,16 @@ public class GroupServiceImpl implements GroupService {
|
|
|
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);
|
|
|
- }
|
|
|
+ GroupMemberVO groupMemberVO = new GroupMemberVO();
|
|
|
+ groupMemberVO.setUserId(user.getId());
|
|
|
+ groupMemberVO.setGroupId(group.getId());
|
|
|
+ groupMemberVO.setCourseId(groupVO.getCourseId());
|
|
|
+ addGroupMember(groupMemberVO);
|
|
|
return groupMapper.toGroupVO(group);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = RuntimeException.class)
|
|
|
public GroupMemberVO addGroupMember(GroupMemberVO groupMemberVO) {
|
|
|
String tableName = getGroupMemberTableName(groupMemberVO.getCourseId());
|
|
|
DomainUserDetails user = SecurityUtils.getCurrentUser();
|
|
|
@@ -106,8 +113,8 @@ public class GroupServiceImpl implements GroupService {
|
|
|
// 验证小组未满员
|
|
|
GroupRule groupRule = groupRuleRepository.findByCourse_Id(groupMemberVO.getCourseId())
|
|
|
.orElseThrow(() -> CustomErrorException.groupRuleNotFound(null));
|
|
|
- int currentSize = groupMemberRepository.countGroupMembers(tableName, groupMemberVO.getGroupId());
|
|
|
- if(currentSize == groupRule.getMaxSize()){
|
|
|
+ int currentSize = groupMemberRepository.findByGroupId(tableName, groupMemberVO.getGroupId()).size();
|
|
|
+ if (currentSize == groupRule.getMaxSize()) {
|
|
|
throw CustomErrorException.groupAlreadyMaxSize(null);
|
|
|
}
|
|
|
// 添加小组成员
|
|
|
@@ -118,6 +125,32 @@ public class GroupServiceImpl implements GroupService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public GroupDTO findGroup(Long courseId) {
|
|
|
+ DomainUserDetails user = SecurityUtils.getCurrentUser();
|
|
|
+ if (!courseService.checkSelection(user.getId(), courseId)) {
|
|
|
+ throw CustomErrorException.courseSelectionNotFound();
|
|
|
+ }
|
|
|
+ GroupMember groupMember = groupMemberRepository.findByUserId(
|
|
|
+ getGroupMemberTableName(courseId),
|
|
|
+ user.getId());
|
|
|
+ Group group = groupRepository.findGroupById(
|
|
|
+ getGroupTableName(courseId),
|
|
|
+ groupMember.getGroupId());
|
|
|
+ return generateGroupDTO(courseId, group);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<GroupDTO> findAllGroupsByCourse(Long courseId) {
|
|
|
+ List<GroupDTO> groupDTOList = new ArrayList<>();
|
|
|
+ List<Group> groups = groupRepository.findAll(getGroupTableName(courseId));
|
|
|
+ for (Group group : groups) {
|
|
|
+ groupDTOList.add(generateGroupDTO(courseId, group));
|
|
|
+ }
|
|
|
+ return groupDTOList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = RuntimeException.class)
|
|
|
public GroupRuleVO editGroupRule(GroupRuleVO ruleVO) {
|
|
|
Long teacherId = courseService
|
|
|
.findCourseById(ruleVO.getCourseVO().getId())
|
|
|
@@ -140,4 +173,17 @@ public class GroupServiceImpl implements GroupService {
|
|
|
private String getGroupMemberTableName(Long courseId) {
|
|
|
return "group_member_" + courseId;
|
|
|
}
|
|
|
+
|
|
|
+ private GroupDTO generateGroupDTO(Long courseId, Group group) {
|
|
|
+ List<GroupMember> members = groupMemberRepository.findByGroupId(
|
|
|
+ getGroupMemberTableName(courseId),
|
|
|
+ group.getId());
|
|
|
+ GroupDTO dto = new GroupDTO();
|
|
|
+ dto.setGroupVO(groupMapper.toGroupVO(group));
|
|
|
+ dto.setMembers(
|
|
|
+ members.stream()
|
|
|
+ .map(member -> userService.findUserById(member.getUserId()))
|
|
|
+ .collect(Collectors.toList()));
|
|
|
+ return dto;
|
|
|
+ }
|
|
|
}
|