v0.2.3 重建社团管理系统 sms系统初建完成

v0.2o
bruce 2025-02-19 22:35:52 +08:00
parent ae69105536
commit 1b90321cda
10 changed files with 266 additions and 26 deletions

View File

@ -23,7 +23,7 @@ public class SecurityConfig {
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/auth/login").permitAll()
.requestMatchers("/api/admin/**").hasAuthority("leader")
.requestMatchers("/api/admin/**").hasAuthority("ADMIN")
.requestMatchers("/api/user/**").hasAuthority("participant")
.anyRequest().authenticated()
)

View File

@ -0,0 +1,67 @@
package com.bruce.sams.controller.sms;
import com.bruce.sams.common.utils.AjaxResult;
import com.bruce.sams.domain.sms.Club;
import com.bruce.sams.service.ClubService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
/**
*
*/
@RestController
@RequestMapping("/api/admin/club")
public class ClubController {
@Autowired
private ClubService clubService;
/**
* &
*/
@PreAuthorize("hasRole('ADMIN') or hasRole('COLLEGE_ADMIN') or hasRole('DEPARTMENT_ADMIN')")
@PostMapping("/add")
public AjaxResult addClub(@RequestBody Club club) {
clubService.addClub(club);
return AjaxResult.success("社团添加成功");
}
/**
*
*/
@PreAuthorize("hasRole('ADMIN') or hasRole('CLUB_ADMIN')")
@PutMapping("/update")
public AjaxResult updateClub(@RequestBody Club club) {
clubService.updateClub(club);
return AjaxResult.success("社团信息更新成功");
}
/**
*
*/
@PreAuthorize("hasRole('ADMIN') or hasRole('COLLEGE_ADMIN') or hasRole('DEPARTMENT_ADMIN')")
@DeleteMapping("/delete/{clubId}")
public AjaxResult deleteClub(@PathVariable Long clubId) {
clubService.deleteClub(clubId);
return AjaxResult.success("社团删除成功");
}
/**
*
*/
@PreAuthorize("hasRole('ADMIN') or hasRole('COLLEGE_ADMIN') or hasRole('DEPARTMENT_ADMIN') or hasRole('CLUB_ADMIN')")
@GetMapping("/{clubId}")
public AjaxResult getClubById(@PathVariable Long clubId) {
return AjaxResult.success(clubService.getClubById(clubId));
}
/**
*
*/
@PreAuthorize("hasRole('ADMIN') or hasRole('COLLEGE_ADMIN') or hasRole('DEPARTMENT_ADMIN') or hasRole('CLUB_ADMIN')")
@GetMapping("/list")
public AjaxResult listClubs(@RequestParam(required = false) String keyword, @RequestParam Long userId) {
return AjaxResult.success(clubService.listClubs(keyword, userId));
}
}

View File

@ -0,0 +1,75 @@
package com.bruce.sams.controller.sms;
import com.bruce.sams.common.utils.AjaxResult;
import com.bruce.sams.service.ClubUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
*
*/
@RestController
@RequestMapping("/api/admin/club/user")
public class ClubUserController {
@Autowired
private ClubUserService clubUserService;
/**
*
*/
@PreAuthorize("hasRole('CLUB_ADMIN')")
@PostMapping("/add")
public AjaxResult addMember(@RequestParam Long clubId, @RequestParam Long userId) {
clubUserService.addMember(clubId, userId);
return AjaxResult.success("成员已加入社团");
}
/**
* &
*/
@PreAuthorize("hasRole('CLUB_ADMIN') or hasRole('COLLEGE_ADMIN')")
@DeleteMapping("/remove")
public AjaxResult removeMember(@RequestParam Long clubId, @RequestParam Long userId) {
clubUserService.removeMember(clubId, userId);
return AjaxResult.success("成员已移除");
}
/**
* &
*/
@PreAuthorize("hasRole('ADMIN') or hasRole('COLLEGE_ADMIN') or hasRole('DEPARTMENT_ADMIN')")
@GetMapping("/list")
public AjaxResult listMembers(@RequestParam Long clubId, @RequestParam Long userId) {
if (userHasRole("ADMIN") || userHasRole("COLLEGE_ADMIN")) {
return AjaxResult.success(clubUserService.listMembers(clubId));
} else if (userHasRole("DEPARTMENT_ADMIN")) {
return AjaxResult.success(clubUserService.listMembers(clubId)); // 仅查询本院社团
}
return AjaxResult.error("无权限");
}
/**
*
*/
@PreAuthorize("hasRole('CLUB_ADMIN')")
@GetMapping("/my-club-members")
public AjaxResult listMyClubMembers(@RequestParam Long clubId) {
return AjaxResult.success(clubUserService.listMembers(clubId));
}
/**
*
*/
private boolean userHasRole(String role) {
return org.springframework.security.core.context.SecurityContextHolder.getContext()
.getAuthentication()
.getAuthorities()
.stream()
.anyMatch(auth -> auth.getAuthority().equals("ROLE_" + role));
}
}

View File

@ -30,11 +30,6 @@ public class ClubUser {
*/
private Long clubId;
/**
* ID
*/
private Long roleId;
/**
*
*/
@ -60,7 +55,6 @@ public class ClubUser {
return (this.getSucId() == null ? other.getSucId() == null : this.getSucId().equals(other.getSucId()))
&& (this.getUserId() == null ? other.getUserId() == null : this.getUserId().equals(other.getUserId()))
&& (this.getClubId() == null ? other.getClubId() == null : this.getClubId().equals(other.getClubId()))
&& (this.getRoleId() == null ? other.getRoleId() == null : this.getRoleId().equals(other.getRoleId()))
&& (this.getIsActive() == null ? other.getIsActive() == null : this.getIsActive().equals(other.getIsActive()))
&& (this.getJoinDate() == null ? other.getJoinDate() == null : this.getJoinDate().equals(other.getJoinDate()));
}
@ -72,7 +66,6 @@ public class ClubUser {
result = prime * result + ((getSucId() == null) ? 0 : getSucId().hashCode());
result = prime * result + ((getUserId() == null) ? 0 : getUserId().hashCode());
result = prime * result + ((getClubId() == null) ? 0 : getClubId().hashCode());
result = prime * result + ((getRoleId() == null) ? 0 : getRoleId().hashCode());
result = prime * result + ((getIsActive() == null) ? 0 : getIsActive().hashCode());
result = prime * result + ((getJoinDate() == null) ? 0 : getJoinDate().hashCode());
return result;
@ -87,7 +80,6 @@ public class ClubUser {
sb.append(", sucId=").append(sucId);
sb.append(", userId=").append(userId);
sb.append(", clubId=").append(clubId);
sb.append(", roleId=").append(roleId);
sb.append(", isActive=").append(isActive);
sb.append(", joinDate=").append(joinDate);
sb.append("]");

View File

@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author bruce
* @description sms_club_user()Mapper
* @createDate 2025-02-19 20:18:31
* @createDate 2025-02-19 22:11:10
* @Entity com.bruce.sams.domain.sms.ClubUser
*/
public interface ClubUserMapper extends BaseMapper<ClubUser> {

View File

@ -3,11 +3,19 @@ package com.bruce.sams.service;
import com.bruce.sams.domain.sms.Club;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* *
* @author bruce
* @description sms_club()Service
* @createDate 2025-02-19 20:18:22
*/
public interface ClubService extends IService<Club> {
}
public interface ClubService extends IService<Club> {
void addClub(Club club);
void updateClub(Club club);
void deleteClub(Long clubId);
Club getClubById(Long clubId);
List<Club> listClubs(String keyword, Long userId);
}

View File

@ -3,11 +3,15 @@ package com.bruce.sams.service;
import com.bruce.sams.domain.sms.ClubUser;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @author bruce
* @description sms_club_user()Service
* @createDate 2025-02-19 20:18:31
* @createDate 2025-02-19 22:11:10
*/
public interface ClubUserService extends IService<ClubUser> {
}
void addMember(Long clubId, Long userId);
void removeMember(Long clubId, Long userId);
List<ClubUser> listMembers(Long clubId);
}

View File

@ -1,22 +1,72 @@
package com.bruce.sams.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bruce.sams.domain.sms.Club;
import com.bruce.sams.service.ClubService;
import com.bruce.sams.mapper.ClubMapper;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author bruce
* @description sms_club()Service
* @createDate 2025-02-19 20:18:22
*/
*
*
* @author bruce
* @description sms_club()Service
* @createDate 2025-02-19 20:18:22
*/
@Service
public class ClubServiceImpl extends ServiceImpl<ClubMapper, Club>
implements ClubService{
implements ClubService {
/**
*
*/
@Override
public void addClub(Club club) {
this.save(club);
}
/**
*
*/
@Override
public void updateClub(Club club) {
this.updateById(club);
}
/**
*
*/
@Override
public void deleteClub(Long clubId) {
this.removeById(clubId);
}
/**
* ID
*/
@Override
public Club getClubById(Long clubId) {
return this.getById(clubId);
}
/**
*
* -
* -
* -
*/
@Override
public List<Club> listClubs(String keyword, Long userId) {
LambdaQueryWrapper<Club> query = new LambdaQueryWrapper<>();
if (keyword != null && !keyword.isEmpty()) {
query.like(Club::getClubName, keyword);
}
return this.list(query);
}
}

View File

@ -1,20 +1,65 @@
package com.bruce.sams.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bruce.sams.domain.sms.ClubUser;
import com.bruce.sams.service.ClubUserService;
import com.bruce.sams.mapper.ClubUserMapper;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* @author bruce
* @description sms_club_user()Service
* @createDate 2025-02-19 20:18:31
* @createDate 2025-02-19 22:11:10
*/
@Service
public class ClubUserServiceImpl extends ServiceImpl<ClubUserMapper, ClubUser>
implements ClubUserService{
public class ClubUserServiceImpl extends ServiceImpl<ClubUserMapper, ClubUser> implements ClubUserService {
/**
*
*
* @param clubId ID
* @param userId ID
*/
@Override
public void addMember(Long clubId, Long userId) {
ClubUser clubUser = new ClubUser();
clubUser.setClubId(clubId);
clubUser.setUserId(userId);
clubUser.setIsActive(1);
clubUser.setJoinDate(new Date(System.currentTimeMillis())); // 记录加入时间
this.save(clubUser);
}
/**
* /
*
* @param clubId ID
* @param userId ID
*/
@Override
public void removeMember(Long clubId, Long userId) {
LambdaQueryWrapper<ClubUser> query = new LambdaQueryWrapper<>();
query.eq(ClubUser::getClubId, clubId).eq(ClubUser::getUserId, userId);
this.remove(query);
}
/**
*
*
* @param clubId ID
* @return
*/
@Override
public List<ClubUser> listMembers(Long clubId) {
LambdaQueryWrapper<ClubUser> query = new LambdaQueryWrapper<>();
query.eq(ClubUser::getClubId, clubId);
return this.list(query);
}
}

View File

@ -8,12 +8,11 @@
<id property="sucId" column="suc_id" />
<result property="userId" column="user_id" />
<result property="clubId" column="club_id" />
<result property="roleId" column="role_id" />
<result property="isActive" column="is_active" />
<result property="joinDate" column="join_date" />
</resultMap>
<sql id="Base_Column_List">
suc_id,user_id,club_id,role_id,is_active,join_date
suc_id,user_id,club_id,is_active,join_date
</sql>
</mapper>