Przeglądaj źródła

feat: 小组成员表

mjh 4 lat temu
rodzic
commit
242d69d17d

+ 25 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/group/GroupMember.java

@@ -0,0 +1,25 @@
+package cn.seecoder.seecoderportalserver.domain.group;
+
+/**
+ * @author wind
+ */
+public class GroupMember {
+    private Long userId;
+    private Long groupId;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
+}

+ 25 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/group/GroupMemberRepository.java

@@ -0,0 +1,25 @@
+package cn.seecoder.seecoderportalserver.repository.group;
+
+import cn.seecoder.seecoderportalserver.domain.group.GroupMember;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author wind
+ */
+@Repository
+public interface GroupMemberRepository extends BaseMapper<GroupMember> {
+    /**
+     * 新建相关课程下小组成员表
+     *
+     * @param name 表名称
+     */
+    @Insert("create table if not exists ${name} (\n" +
+            "user_id bigint not null references portal_user(id),\n" +
+            "group_id bigint not null,\n" +
+            "primary key (user_id)\n" +
+            ")")
+    void createGroupMemberTable(@Param("name") String name);
+}

+ 3 - 3
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/group/GroupRepository.java

@@ -18,10 +18,10 @@ public interface GroupRepository extends BaseMapper<Group> {
      * @param name 表名
      * @param len   名称长度
      */
-    @Insert("create table ${name} (\n" +
-            "id integer not null,\n" +
+    @Insert("create table if not exists ${name} (\n" +
+            "id bigint not null,\n" +
             "name varchar(${len}) not null,\n" +
             "primary key (id)\n" +
             ")")
-    void createTableByCourse(@Param("name") String name, @Param("len") String len);
+    void createGroupTable(@Param("name") String name, @Param("len") String len);
 }

+ 22 - 2
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/group/GroupRuleService.java → seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/GroupService.java

@@ -1,4 +1,5 @@
-package cn.seecoder.seecoderportalserver.service.group;
+package cn.seecoder.seecoderportalserver.service;
+
 
 import cn.seecoder.seecoderportalcommon.vo.group.GroupRuleVO;
 import cn.seecoder.seecoderportalserver.domain.group.GroupRule;
@@ -6,9 +7,10 @@ import cn.seecoder.seecoderportalserver.domain.group.GroupRule;
 /**
  * @author wind
  */
-public interface GroupRuleService {
+public interface GroupService {
     /**
      * 编辑课程小组规则
+     *
      * @param ruleVO 课程小组规则
      * @return 修改后的课程小组规则
      */
@@ -16,6 +18,7 @@ public interface GroupRuleService {
 
     /**
      * po2vo
+     *
      * @param groupRule po
      * @return vo
      */
@@ -23,8 +26,25 @@ public interface GroupRuleService {
 
     /**
      * vo2po
+     *
      * @param groupRuleVO vo
      * @return po
      */
     GroupRule toGroupRule(GroupRuleVO groupRuleVO);
+
+    /**
+     * 新建相关课程下小组表
+     *
+     * @param groupRuleVO 课程建组规则
+     * @return 表名称
+     */
+    String createGroupTable(GroupRuleVO groupRuleVO);
+
+    /**
+     * 新建相关课程下小组成员表
+     *
+     * @param courseId 课程Id
+     * @return 表名称
+     */
+    String createGroupMemberTable(Long courseId);
 }

+ 0 - 25
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/group/GroupService.java

@@ -1,25 +0,0 @@
-package cn.seecoder.seecoderportalserver.service.group;
-
-
-import cn.seecoder.seecoderportalcommon.vo.group.GroupRuleVO;
-
-/**
- * @author wind
- */
-public interface GroupService {
-    /**
-     * 根据课程新建表
-     *
-     * @param groupRuleVO 课程建组规则
-     * @return 表名称
-     */
-    String createTableByCourse(GroupRuleVO groupRuleVO);
-
-    /**
-     * 相关课程小组表是否存在
-     *
-     * @param courseId 课程id
-     * @return T/F
-     */
-    Boolean isTableExisted(Long courseId);
-}

+ 38 - 12
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/group/GroupRuleServiceImpl.java → seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/GroupServiceImpl.java

@@ -1,14 +1,15 @@
-package cn.seecoder.seecoderportalserver.serviceImpl.group;
+package cn.seecoder.seecoderportalserver.serviceImpl;
 
 import cn.seecoder.seecoderportalcommon.vo.group.GroupRuleVO;
 import cn.seecoder.seecoderportalserver.domain.group.GroupRule;
 import cn.seecoder.seecoderportalserver.mapper.CourseMapper;
 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.SecurityUtils;
 import cn.seecoder.seecoderportalserver.service.CourseService;
-import cn.seecoder.seecoderportalserver.service.group.GroupRuleService;
-import cn.seecoder.seecoderportalserver.service.group.GroupService;
+import cn.seecoder.seecoderportalserver.service.GroupService;
 import cn.seecoder.seecoderportalserver.web.rest.errors.CustomErrorException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -18,20 +19,36 @@ import org.springframework.stereotype.Service;
  * @author wind
  */
 @Service
-public class GroupRuleServiceImpl implements GroupRuleService {
-    private final static Logger log = LoggerFactory.getLogger(GroupRuleServiceImpl.class);
+public class GroupServiceImpl implements GroupService {
+    private final static Logger log = LoggerFactory.getLogger(GroupServiceImpl.class);
+    private final GroupRepository groupRepository;
     private final GroupRuleRepository groupRuleRepository;
     private final GroupRuleMapper groupRuleMapper;
+    private final GroupMemberRepository groupMemberRepository;
     private final CourseService courseService;
     private final CourseMapper courseMapper;
-    private final GroupService groupService;
 
-    public GroupRuleServiceImpl(GroupRuleRepository groupRuleRepository, GroupRuleMapper groupRuleMapper, CourseService courseService, CourseMapper courseMapper, GroupService groupService) {
+    public GroupServiceImpl(GroupRepository groupRepository, GroupRuleRepository groupRuleRepository, GroupRuleMapper groupRuleMapper, GroupMemberRepository groupMemberRepository, CourseService courseService, CourseMapper courseMapper) {
+        this.groupRepository = groupRepository;
         this.groupRuleRepository = groupRuleRepository;
         this.groupRuleMapper = groupRuleMapper;
+        this.groupMemberRepository = groupMemberRepository;
         this.courseService = courseService;
         this.courseMapper = courseMapper;
-        this.groupService = groupService;
+    }
+
+    @Override
+    public String createGroupTable(GroupRuleVO groupRuleVO) {
+        String tableName = getGroupTableName(groupRuleVO.getCourseId());
+        groupRepository.createGroupTable(tableName, groupRuleVO.getMaxNameLen().toString());
+        return tableName;
+    }
+
+    @Override
+    public String createGroupMemberTable(Long courseId) {
+        String tableName = getGroupMemberTableName(courseId);
+        groupMemberRepository.createGroupMemberTable(tableName);
+        return tableName;
     }
 
     @Override
@@ -43,16 +60,17 @@ public class GroupRuleServiceImpl implements GroupRuleService {
         GroupRule groupRule;
         groupRule = groupRuleRepository.save(toGroupRule(ruleVO));
         log.info("Edit Course Group Rule: {}", groupRule);
-        if (!groupService.isTableExisted(ruleVO.getCourseId())) {
-            groupService.createTableByCourse(ruleVO);
-        }
+        String table1 = createGroupTable(ruleVO);
+        log.info("Create Group Table " + table1);
+        String table2 = createGroupMemberTable(ruleVO.getCourseId());
+        log.info("Create Group Member Table " + table2);
         return toGroupRuleVO(groupRule);
     }
 
     @Override
     public GroupRuleVO toGroupRuleVO(GroupRule groupRule) {
         GroupRuleVO groupRuleVO = groupRuleMapper.toGroupRuleVO(groupRule);
-        groupRuleVO.setCourseId(groupRuleVO.getCourseId());
+        groupRuleVO.setCourseId(groupRule.getCourse().getId());
         return groupRuleVO;
     }
 
@@ -62,4 +80,12 @@ public class GroupRuleServiceImpl implements GroupRuleService {
         groupRule.setCourse(courseMapper.courseVOToCourse(courseService.findCourseById(groupRuleVO.getCourseId())));
         return groupRule;
     }
+
+    private String getGroupTableName(Long courseId) {
+        return "group_" + courseId;
+    }
+
+    private String getGroupMemberTableName(Long courseId) {
+        return "group_member_" + courseId;
+    }
 }

+ 0 - 41
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/group/GroupServiceImpl.java

@@ -1,41 +0,0 @@
-package cn.seecoder.seecoderportalserver.serviceImpl.group;
-
-import cn.seecoder.seecoderportalcommon.vo.group.GroupRuleVO;
-import cn.seecoder.seecoderportalserver.repository.group.GroupRepository;
-import cn.seecoder.seecoderportalserver.service.group.GroupService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Service;
-
-/**
- * @author wind
- */
-@Service
-public class GroupServiceImpl implements GroupService {
-    private final static Logger log = LoggerFactory.getLogger(GroupServiceImpl.class);
-    private final GroupRepository groupRepository;
-
-    public GroupServiceImpl(GroupRepository groupRepository) {this.groupRepository = groupRepository;}
-
-    @Override
-    public String createTableByCourse(GroupRuleVO groupRuleVO) {
-        String tableName = getTableName(groupRuleVO.getCourseId());
-        groupRepository.createTableByCourse(tableName, groupRuleVO.getMaxNameLen().toString());
-        log.info("create table " + tableName);
-        return tableName;
-    }
-
-    @Override
-    public Boolean isTableExisted(Long courseId) {
-        try {
-            groupRepository.selectCount(null);
-            return true;
-        }catch (Exception e){
-            return false;
-        }
-    }
-
-    private String getTableName(Long courseId){
-        return "course_groups_" + courseId;
-    }
-}

+ 27 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/GroupController.java

@@ -0,0 +1,27 @@
+package cn.seecoder.seecoderportalserver.web.rest;
+
+import cn.seecoder.seecoderportalcommon.vo.group.GroupRuleVO;
+import cn.seecoder.seecoderportalserver.service.GroupService;
+import cn.seecoder.seecoderportalserver.utility.OkResponse;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author wind
+ */
+@RestController
+@RequestMapping("/api/group")
+public class GroupController {
+    private final GroupService groupService;
+
+    public GroupController(GroupService groupService) {
+        this.groupService = groupService;
+    }
+
+    @PostMapping("/rule")
+    public OkResponse<GroupRuleVO> editGroupRule(@RequestBody GroupRuleVO ruleVO) {
+        return OkResponse.of(groupService.editGroupRule(ruleVO));
+    }
+}

+ 0 - 12
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/group/GroupController.java

@@ -1,12 +0,0 @@
-package cn.seecoder.seecoderportalserver.web.rest.group;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author wind
- */
-@RestController
-@RequestMapping("/api/group")
-public class GroupController {
-}

+ 0 - 28
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/group/GroupRuleController.java

@@ -1,28 +0,0 @@
-package cn.seecoder.seecoderportalserver.web.rest.group;
-
-import cn.seecoder.seecoderportalcommon.vo.group.GroupRuleVO;
-import cn.seecoder.seecoderportalserver.service.group.GroupRuleService;
-import cn.seecoder.seecoderportalserver.utility.OkResponse;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author wind
- */
-@RestController
-@RequestMapping("/api/group/rule")
-public class GroupRuleController {
-    private final GroupRuleService groupRuleService;
-
-    public GroupRuleController(GroupRuleService groupRuleService) {
-        this.groupRuleService = groupRuleService;
-    }
-
-    @PostMapping
-    public OkResponse<GroupRuleVO> editGroupRule(@RequestBody GroupRuleVO ruleVO) {
-        return OkResponse.of(groupRuleService.editGroupRule(ruleVO));
-    }
-}