当前位置: 首页 > news >正文

2025.9.22社团管理(五)

第五天:成员管理与申请审核模块开发
一、需求分析
成员管理是社团日常运营的重要组成部分,第五天的工作重点在于实现用户加入社团申请、社团管理员审核成员、管理成员信息、成员退出社团等完整功能。成员管理模块直接关系到社团的组织架构和人员管理效率,需要同时满足普通用户、社团管理员、系统管理员三类角色的不同需求。用户加入社团的流程设计为:用户提交加入申请,填写申请理由,社团管理员审核申请,审核通过后用户正式成为社团成员并可参与社团活动和享受成员权益。社团成员有三种状态:待审核(status=0)、正常(status=1)、退出(status=2)。新申请的用户状态为待审核,审核通过后变为正常状态,用户主动退出或被管理员移出社团后状态变为退出。社团成员的职位信息也需要管理,初始加入的成员职位为"成员",社团管理员可以为成员设置不同的职位,如社长、副社长、部长、干事等。职位信息主要用于在成员列表中展示和管理,不影响系统权限(系统权限由用户类型决定)。社团管理员需要管理本社团的成员列表,包括查看成员基本信息、设置成员职位、移除成员等操作。移除成员时需要考虑该成员是否是社团管理员,如果是则需要先转移管理员权限或解散社团。系统管理员则拥有全局视角,可以查看所有社团的成员分布情况,但不能直接操作某个社团的成员(社团成员管理是社团管理员的职责)。为了防止重复申请,同一用户对同一社团只能有一条待审核的申请记录,申请被拒绝后可以再次申请,但需要间隔一定时间或由管理员设置禁止再次申请的时间限制。此外,系统还应提供成员换届功能,支持社团管理员的交接,当社团管理员离职或换届时,可以将管理员权限转移给社团内的其他成员。
二、开发任务
本次开发任务主要围绕成员管理和申请审核展开。首先是用户申请加入社团功能的实现,用户可以浏览社团列表,选择感兴趣的社团提交加入申请。申请接口需要接收社团ID和申请理由参数,首先验证该用户是否已是该社团成员或有待审核的申请,如果都不是则创建ApplyRecord申请记录,状态设为待审核(status=0)。申请理由是必填字段,用于让社团管理员了解申请者的加入动机和背景。用户可以查看自己的申请记录列表,包括待审核、已通过、已拒绝的申请状态。其次是社团管理员审核申请功能的实现,社团管理员可以查看本社团的待审核申请列表,逐个审核申请。审核接口接收申请记录ID和审核结果(通过或拒绝)、审核意见参数。审核通过时,在club_member表中创建成员记录,状态设为正常,职位默认为"成员",同时更新社团的成员数量加一;审核拒绝时,更新ApplyRecord的状态为拒绝,记录审核意见和审核人ID。第三是社团成员列表查询功能的实现,社团管理员可以查询本社团的所有成员列表,包括成员基本信息、入会时间、当前职位、成员状态等。普通用户可以查询自己加入的社团列表。成员列表应支持按状态筛选(只查看正常状态的成员)、按职位筛选、分页展示等功能。第四是成员信息编辑功能的实现,社团管理员可以修改本社团成员的职位信息,支持的职位包括社长、副社长、部长、干事、普通成员等。编辑接口需要验证操作者是否为社团管理员,以及被编辑成员的状态是否为正常。职位信息修改后应在成员列表中即时体现。第五是成员移除功能的实现,社团管理员可以将本社团的成员移除,移除接口需要验证当前用户是否为社团管理员,且被移除的成员不是社团管理员本人(社长不能直接移除自己,如需移除应先转移管理员权限或解散社团)。移除操作需要更新成员状态为退出,更新社团的成员数量减一。第六是用户主动退出社团功能的实现,用户可以主动申请退出已加入的社团,退出接口需要验证用户是否为该社团的正常成员,然后更新成员状态为退出,更新社团成员数量减一。退出后用户可以再次提交加入申请。第七是社团管理员权限转移功能的实现,当需要更换社团管理员时,现任管理员可以将管理员权限转移给社团内的其他成员。转移接口需要验证当前用户是否为社团管理员,被转移用户是否为该社团成员,然后更新Club表的admin_id字段为新管理员ID,同时更新被转移用户的user_type为社团管理员。
三、实现步骤
接下来详细说明各功能的实现步骤。用户申请加入社团功能需要设计ApplyDTO数据传输对象,包含社团ID和申请理由字段,申请理由长度限制在50到500字之间。ClubMemberController中新增apply接口,从JWT令牌获取当前用户ID,调用ClubMemberService的apply方法。Service层首先根据社团ID查询社团信息,验证社团状态是否为正常;然后查询ApplyRecord表,检查是否有该用户对该社团的待审核申请(status=0);如果没有待审核申请,再查询ClubMember表检查用户是否已是成员;如果都不是,则创建ApplyRecord实体,设置社团ID、用户ID、申请理由、状态为待审核,创建时间等,调用Mapper插入数据库。社团管理员审核申请功能需要设计AuditDTO数据传输对象,包含审核结果(pass或reject)和审核意见字段。Controller中新增auditApply接口,接收申请记录ID和审核参数。Service层首先根据申请记录ID查询ApplyRecord信息,验证申请状态是否为待审核;然后查询当前登录用户是否为该社团的社团管理员;验证通过后,根据审核结果更新申请状态,如果是通过状态,则同时创建ClubMember成员记录,设置用户ID、社团ID、职位为"成员"、状态为正常,然后更新Club表的member_count加一。社团管理员查询待审核申请列表需要在ApplyRecordService中定义listPendingApplications方法,参数为社团ID,返回该社团所有状态为待审核的申请记录列表,包括申请人信息(姓名、联系方式等)。成员列表查询功能需要设计MemberVO视图对象,包含成员ID、用户ID、用户名、真实姓名、职位、入会时间、状态等信息。ClubMemberService的listClubMembers方法接收社团ID和分页参数,查询ClubMember表关联User表获取成员详情,按创建时间倒序排列返回。成员职位编辑功能需要设计UpdatePositionDTO,包含成员ID和新职位字段。Controller中新增updatePosition接口,Service层验证操作者权限和成员状态后更新职位信息。成员移除功能类似,更新成员状态为退出并更新社团成员数量。用户主动退出功能需要根据用户ID和社团ID查询成员记录,验证状态为正常后更新为退出状态。管理员权限转移功能需要在ClubService中实现,验证当前管理员身份后更新admin_id字段。
四、验证方法
成员管理模块的验证需要覆盖各种用户角色和业务场景。首先验证用户申请加入社团功能,普通用户选择社团提交申请,验证申请创建成功;重复提交同一社团的申请,验证返回已有待审核申请提示;申请已通过的社团,验证返回已是成员提示;申请不存在的社团ID,验证返回社团不存在提示;查看我的申请记录,验证申请状态和社团信息正确。其次验证社团管理员审核申请功能,使用社团管理员账号查看待审核申请列表,验证只显示本社团的待审核申请;审核通过申请,验证申请状态更新为已通过,成员记录创建成功,社团成员数量增加;审核拒绝申请,验证申请状态更新为已拒绝,审核意见记录正确;非本社团管理员审核申请,验证返回权限不足提示。第三验证成员列表查询功能,社团管理员查看本社团成员列表,验证显示所有正常状态的成员,包括成员姓名、职位、入会时间等信息;按职位筛选,验证只返回对应职位的成员;验证分页功能正常。普通用户查看我加入的社团,验证只显示自己是成员的社团列表。第四验证成员职位编辑功能,社团管理员修改成员职位,验证职位更新成功;修改不存在的成员ID,验证返回成员不存在提示;修改已退出成员的职位,验证返回成员状态异常提示。第五验证成员移除功能,社团管理员移除成员,验证成员状态更新为退出,社团成员数量减少;移除不存在的成员,验证返回相应提示;尝试移除社团管理员自己,验证返回不能移除提示;移除后该成员查看成员列表,验证不再显示该社团。第六验证用户主动退出功能,用户主动退出社团,验证退出成功,成员状态更新;退出后查看成员列表,验证该社团不再显示;退出后重新申请加入,验证可以正常申请。第七验证管理员权限转移功能,现任管理员转移权限给其他成员,验证Club表的admin_id更新成功;被转移用户查看用户信息,验证用户类型变为社团管理员;转移后前任管理员查看权限,验证不再具有管理员权限;转移给非本社团成员,验证返回成员不存在提示。

http://www.jsqmd.com/news/155833/

相关文章:

  • Day3变量的命名规则
  • 【计算机毕业设计案例】基于Java的船舶物料供应商交易平台的设计与实现基于springboot的船舶物料供应商交易平台的设计与实现(程序+文档+讲解+定制)
  • C++数据竞争与无锁编程
  • 技术博客SEO优化技巧:让‘pytorch安装教程gpu’排名靠前
  • Photoshop - Photoshop 工具栏(47)油漆桶工具
  • 超长篇幅字符串比较的哈希优化方法
  • 从实验到生产:PyTorch-CUDA镜像助力无缝模型迭代
  • Java毕设项目推荐-基于Java+springboot的船舶物料供应商交易平台的设计与实现基于springboot的船舶物料供应商交易平台的设计与实现【附源码+文档,调试定制服务】
  • 崩溃!用 ComfyUI 生成的图,竟和我梦中的场景一模一样...
  • 从CSDN图片描述看细节:Jupyter和SSH使用场景对比
  • WSL注册失败怎么办?改用PyTorch-CUDA镜像绕过系统限制
  • 清华TUNA镜像源配置PyTorch+CUDA的pip命令示例
  • 2025年吴忠可靠的移动房屋生产厂家推荐榜单,岗亭集成房屋/停车场岗亭/移动房屋/岗亭移动厕所,移动房屋定制公司联系电话 - 品牌推荐师
  • 如何撰写高转化率的技术博客推广GPU与Token销售
  • 模拟信号处理低功耗与高可靠实现原理,从器件到系统的全链路方案
  • Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04 系统启动与关闭详解(11)
  • VSCode连接远程Windows11的WSL2的项目
  • 2025.9.19社团管理(三)
  • 几个新的浏览器JS API
  • 推荐阅读:gRPC 的设计原理与网络编程实践
  • 【Week1_Day3】【软件测试学习记录与反思】【Linux的系统性学习、定义优先级的维度、Linux系统搭建与终端练习、反思与改进】
  • 大模型Token消耗监控工具开发实践(Python实现)
  • 推荐阅读:gRPC 协议与网络编程中的实践挑战
  • reprint, Use of logrotate
  • AI开发者必备工具链:PyTorch + Jupyter + CUDA一体化镜像
  • 推荐阅读:深入理解Socket网络编程及其在现代通信中的作用
  • linux-vim常规操作
  • 99线怎么算?99线、90线盯哪根? 面试官:你连这都分不清,出门左拐不送。直接凉凉
  • C++虚函数表与多重继承内存布局深度剖析
  • YOLO推理请求限速控制:保护GPU服务稳定性