奖惩记录增删改查 (#17)
Some checks are pending
Docker Build and Publish / build (push) Waiting to run
Gitea Sync / trigger-gitea-sync (push) Waiting to run
Java CI with Maven / build (push) Waiting to run

* 模糊查询

* 模糊查询

* 模糊查询

* 调整个人查询

* 调整个人查询

* 调整个人查询无法出现类别类型

* 调整个人查询无法出现类别类型

* 筛选查询

* 定义对象

* 管理员查找所用用户加上角色

* jwt: token有效期两周,便于调试

* 改了那个

* 那个record的id

* 无

* 1

* 1

* 调整获取userId的方式

* gai

---------

Co-authored-by: suyiiyii <suyiiyii@gmail.com>
This commit is contained in:
tortoise014 2024-09-08 18:52:44 +08:00 committed by GitHub
parent 665fae6d32
commit efc2aa97cb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
31 changed files with 447 additions and 107 deletions

View File

@ -10,10 +10,10 @@ Super Invincible Management System
5. git fetch origin && git merge origin/main: 拉取远程仓库的最新代码并合并到当前分支
6. git push origin xxx: 推送当前分支到远程仓库
7. 提 PR
8. require review: 请求reviewpush
8. require review: 请求review
9. merge: 合并 PR
10. delete: 删除分支
1. 基础rbac的五张表: user, role, permission, user_role, role_permission
2. 然后奖惩记录这张表通过用户id来查到里面有相应的记录 有一个 奖惩类别ID是对应到奖惩类型去的
3. 有一个上下级关系表,想着是用户明确查上下级就可以用查,

View File

@ -16,9 +16,6 @@ import top.suyiiyii.sims.service.RoleService;
*/
@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport {
@Autowired
private RoleService roleService;
@Autowired
private JwtInterceptor jwtInterceptor;

View File

@ -4,6 +4,7 @@ import org.modelmapper.ModelMapper;
import org.modelmapper.convention.MatchingStrategies;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import top.suyiiyii.sims.dto.RecordDto;
/**
* @Author tortoise
@ -20,24 +21,22 @@ public class ModelMapperConfig {
ModelMapper modelMapper = new ModelMapper();
// 设置完全匹配
modelMapper.getConfiguration().setFullTypeMatchingRequired(true);
// 设置匹配策略为严格模式
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
// configureUser(modelMapper);
// configureUser(modelMapper);
return modelMapper;
}
// 配置 User 类的映射规则
private void configureUser(ModelMapper modelMapper) {
// 定义 UserModel -> User 的映射规则
// modelMapper.typeMap(RecordDto.class, Record.class)
// 跳过设置密码字段
// 定义 User -> UserModel 的映射规则
// modelMapper.typeMap(User.class, RecordDto.class)
// .addMappings(mapper -> mapper.skip(RecordDto::setPassword)) // 跳过设置密码字段
// .addMappings(mapper -> mapper.map(User::getRealName, UserModel::setName)); // User realName 映射为 UserModel name
// .addMappings(mapper -> mapper.using(dateToStringConverter).map(User::getCreateTime, UserModel::setCreateTime))
// .addMappings(mapper -> mapper.using(dateToStringConverter).map(User::getUpdateTime, UserModel::setUpdateTime));
//定义 Record -> UserRecordDto 的映射规则
//modelMapper.typeMap(Record.class, UserRecordDto.class)
// .addMappings(mapper -> mapper.skip(UserRecordDto::setRevokeDate))
// .addMappings(mapper -> mapper.skip(UserRecordDto::setRevokeReason))
// .addMappings(mapper -> mapper.skip(UserRecordDto::setRevokeRemark))
// .addMappings(mapper -> mapper.skip(UserRecordDto::setOperatorUserId))
// .addMappings(mapper -> mapper.skip(UserRecordDto::setLastUpdateTime));
}
}

View File

@ -29,9 +29,7 @@ public class RbacInterceptor implements HandlerInterceptor {
}
// 获取用户角色
List<String> roles = getUserRole(request).stream().map(Role::getRoleName).toList();
List<String> allowRoles = null;
// 获取当前请求的方法上的 AuthAccess 注解从而获取允许访问的角色
if (handler instanceof HandlerMethod) {
AuthAccess annotation = ((HandlerMethod) handler).getMethodAnnotation(AuthAccess.class);

View File

@ -1,15 +1,19 @@
package top.suyiiyii.sims.controller;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.suyiiyii.sims.common.AuthAccess;
import top.suyiiyii.sims.common.Result;
import top.suyiiyii.sims.dto.RecordDto;
import top.suyiiyii.sims.dto.UserDto;
import top.suyiiyii.sims.entity.User;
import top.suyiiyii.sims.service.RoleService;
import top.suyiiyii.sims.service.UserService;
import java.util.ArrayList;
import java.util.List;
/**
@ -27,12 +31,20 @@ public class AdminController {
private RoleService roleService;
@Autowired
private UserService userService;
@Autowired
ModelMapper modelMapper;
@AuthAccess(allowRoles = {"admin"})
@GetMapping("/findAllUsersWithRoles")
public Result findAllUsersWithRoles() {
List<User> userList = roleService.findAllUsersWithRoles();
return Result.success(userList);
public Result<List<UserDto>> findAllUsersWithRoles() {
List<User> users = userService.selectAll();
List<UserDto> UserDtos = new ArrayList<>();
for (User user : users) {
UserDto userDto = modelMapper.map(user, UserDto.class);
userDto.setUserId(user.getStudentId());
userDto.setRoles(roleService.getRolesById(user.getId()));
UserDtos.add(userDto);
}
return Result.success(UserDtos);
}
@AuthAccess(allowRoles = {"admin"})
@ -41,10 +53,5 @@ public class AdminController {
List<User> users = userService.selectAll();
return Result.success(users);
}
}
/**
* request.setAttribute();lUsers();
* return Result.success(userList);
* }
* }
**/

View File

@ -2,14 +2,18 @@ package top.suyiiyii.sims.controller;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import lombok.Data;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import top.suyiiyii.sims.common.AuthAccess;
import top.suyiiyii.sims.common.JwtInterceptor;
import top.suyiiyii.sims.common.Result;
import top.suyiiyii.sims.dto.CommonResponse;
import top.suyiiyii.sims.dto.RecordDto;
import top.suyiiyii.sims.entity.Record;
import top.suyiiyii.sims.service.CategoryService;
import top.suyiiyii.sims.service.RecordService;
import top.suyiiyii.sims.service.RoleService;
@ -17,6 +21,7 @@ import top.suyiiyii.sims.service.UserService;
import top.suyiiyii.sims.utils.JwtUtils;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@RestController
@ -25,7 +30,7 @@ RecordController {
@Autowired
RecordService recordService;
@Autowired
UserService UserService;
UserService userService;
@Autowired
RoleService roleService;
@Autowired
@ -42,8 +47,8 @@ RecordController {
List<Record> records = recordService.getAllRecords(page, size);
List<RecordDto> recordDtos = new ArrayList<>();
for (Record record : records) {
RecordDto recordDto = modelMapper.map(record, RecordDto.class);
recordDto.setId(record.getId());
recordDto.setCategoryName(categoryService.getCategoryName(record.getCategoryId()));
recordDto.setSubCategoryName(categoryService.getsubCategoryName(record.getCategoryId()));
recordDtos.add(recordDto);
@ -57,29 +62,27 @@ RecordController {
public Result<List<RecordDto>> record(@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
HttpServletRequest request) {
String token = (String) request.getAttribute("token");
String userId = JwtUtils.extractUserId(token);
String userId = String.valueOf(JwtInterceptor.getUserIdFromReq(request));
List<RecordDto> recordDtos = new ArrayList<>();
List<Record> records = recordService.getMyAllRecords(page, size, userId);
for (Record record : records) {
RecordDto recordDto = modelMapper.map(record, RecordDto.class);
recordDto.setId(record.getId());
recordDto.setCategoryName(categoryService.getCategoryName(record.getCategoryId()));
recordDto.setSubCategoryName(categoryService.getsubCategoryName(record.getCategoryId()));
recordDtos.add(recordDto);
}
return Result.success(recordDtos);
}
@AuthAccess(allowRoles = {"admin"})
@Operation(summary = "更新单个奖惩记录")
@PutMapping("/admin/record/{id}")
public Result<CommonResponse> adminUpdateRecord(@PathVariable Integer id, @RequestBody RecordDto recordDto) {
Record record = modelMapper.map(recordDto, Record.class);
Integer i = recordService.IsRecord(id);
if(i==null) {
throw new RuntimeException("该记录不存在");
}
recordService.updateRecord(record, id);
return Result.msg("修改成功");
}
@ -88,6 +91,10 @@ RecordController {
@Operation(summary = "删除单个奖惩记录")
@DeleteMapping("/admin/record/{id}")
public Result<CommonResponse> adminDeleteRecord(@PathVariable Integer id) {
Integer i = recordService.IsRecord(id);
if(i==null) {
throw new RuntimeException("该记录不存在");
}
recordService.deleteRecord(id);
return Result.msg("删除成功");
}
@ -97,15 +104,143 @@ RecordController {
@Operation(summary = "添加奖惩记录")
@PostMapping("/admin/record")
public Result<CommonResponse> adminAddRecord(@RequestBody RecordDto recordDto) {
Integer categoryId = categoryService.getIdBySubCategoryName(recordDto.getSubCategoryName());
Record record = modelMapper.map(recordDto, Record.class);
if (categoryId == null) {
Result.error("请选择奖惩类别,以及类型");
//CategoryName不是奖励或者惩罚
if (!recordDto.getCategoryName().equals("奖励")
&& !recordDto.getCategoryName().equals("惩罚")) {
return Result.error("请选择正确奖惩类别");
}
record.setCategoryId(categoryId);
recordService.addRecord(record);
if (recordDto.getSubCategoryName().isEmpty()) {
return Result.error("请输入奖惩类型");
}
recordService.addRecord(recordDto);
return Result.msg("添加成功");
}
@AuthAccess(allowRoles = {"admin"})
@Operation(summary = "模糊查询奖惩记录")
@GetMapping("/admin/likeRecords")
public Result<List<RecordDto>> searchRecords(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
SearchRequest searchRequest) {
Integer s1;
List<Integer> studentIds = new ArrayList<>();
List<Record> records=new ArrayList<>();
Integer studentId = searchRequest.getStudentId();
if(studentId!=null) {
studentIds.add(studentId);
}
String roleName = searchRequest.getRoleName();
if(roleName!="") {
//rolename查用户id
Integer userId = roleService.getIdByrolename(roleName);
// 用户id查记录
s1 = userService.getStudentIdByUserId(userId);
studentIds.add(s1);
}
String username = searchRequest.getUsername();
if(username!="") {
//username查用户StudentId
s1= roleService.getStudentIdByUsername(username);
studentIds.add(s1);
}
for (Integer Sid : studentIds) {
records.addAll(recordService.getRecordsLike(page,size,Sid,searchRequest.getUserGroup(),searchRequest.getGrade()));
}
List<RecordDto> RecordDtos = new ArrayList<>();
for (Record record : records) {
RecordDto RecordDto = modelMapper.map(record, RecordDto.class);
RecordDto.setCategoryName(categoryService.getCategoryName(record.getCategoryId()));
RecordDto.setSubCategoryName(categoryService.getsubCategoryName(record.getCategoryId()));
RecordDtos.add(RecordDto);
}
return Result.success(RecordDtos);
}
@AuthAccess(allowRoles = {"admin"})
@Operation(summary = "筛选查询奖惩记录")
@GetMapping("/admin/screenRecords")
public Result<List<RecordDto>> screenRecords(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
String categoryName) {
List<Integer> studentIds = new ArrayList<>();
//CategoryName不是奖励或者惩罚
if (!categoryName.equals("奖励")
&& !categoryName.equals("惩罚")) {
return Result.error("请选择正确奖惩类别");
}
List<Integer> idByCategoryName = categoryService.getIdByCategoryName(categoryName);
for (Integer i : idByCategoryName) {
List<Integer> sid = recordService.getSidByCategoryId(i);
studentIds.addAll(sid);
}
List<Record> records=new ArrayList<>();
HashSet<Integer> studentIds1= new HashSet<>(studentIds);
for (Integer Sid : studentIds1) {
if(Sid!=null){
records.addAll(recordService.getRecordsById(page,size,Sid));
}
}
List<RecordDto> RecordDtos = new ArrayList<>();
for (Record record : records) {
RecordDto RecordDto = modelMapper.map(record, RecordDto.class);
RecordDto.setCategoryName(categoryService.getCategoryName(record.getCategoryId()));
RecordDto.setSubCategoryName(categoryService.getsubCategoryName(record.getCategoryId()));
RecordDtos.add(RecordDto);
}
return Result.success(RecordDtos);
}
@AuthAccess(allowRoles = {"user","admin"})
@Operation(summary = "用户筛选查询奖惩记录")
@GetMapping("/screenRecords")
public Result<List<RecordDto>> screenRecords1(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
String categoryName,HttpServletRequest request) {
HttpSession session = request.getSession();
String token = (String) session.getAttribute("token");
String userId = JwtUtils.extractUserId(token);
if (userId==null){
throw new RuntimeException("请先登录");
}
List<Integer> studentIds = new ArrayList<>();
//CategoryName不是奖励或者惩罚
if (!categoryName.equals("奖励")
&& !categoryName.equals("惩罚")) {
return Result.error("请选择正确奖惩类别");
}
List<Integer> idByCategoryName = categoryService.getIdByCategoryName(categoryName);
for (Integer i : idByCategoryName) {
List<Integer> sid = recordService.getSidByCategoryId(i);
if(sid!=null) {
studentIds.addAll(sid);
}
}
List<Record> records=new ArrayList<>();
HashSet<Integer> studentIds1= new HashSet<>(studentIds);
for (Integer Sid : studentIds1) {
Integer studentId1 =userService.getStudentIdByUserId(Integer.valueOf(userId));
if (studentId1!= null && studentId1.equals(Sid)) {
records.addAll(recordService.getRecordsById(page, size, Sid));
}
}
List<RecordDto> RecordDtos = new ArrayList<>();
for (Record record : records) {
RecordDto RecordDto = modelMapper.map(record, RecordDto.class);
RecordDto.setCategoryName(categoryService.getCategoryName(record.getCategoryId()));
RecordDto.setSubCategoryName(categoryService.getsubCategoryName(record.getCategoryId()));
RecordDtos.add(RecordDto);
}
return Result.success(RecordDtos);
}
@Data
public static class SearchRequest {
private String username;
private Integer studentId;
private String grade;
private String userGroup;
private String roleName;
}
}

View File

@ -0,0 +1,30 @@
package top.suyiiyii.sims.controller;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.suyiiyii.sims.service.RevokedService;
/**
* @Author tortoise
* @Date 2024/9/6 10:03
* @PackageName:top.suyiiyii.sims.controller
* @ClassName: RevokedController
* @Description: TODO
* @Version 1.0
*/
@RestController
@RequestMapping("/revoked")
@Slf4j
public class RevokedController {
@Autowired
RevokedService revokedService;
//TODO 普通成员向管理员申请撤销
//TODO 管理员查看所有撤销申请
//TODO 管理员可以撤销某一成员的奖励或惩罚记录需填写撤销原因撤销备注
}

View File

@ -9,10 +9,11 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
public class RecordDto {
//
private Integer id;
// 用户ID
private Integer studentId;
private String categoryName;
private String subCategoryName;

View File

@ -15,6 +15,7 @@ import java.util.List;
@Data
public class UserDto {
private Integer userId;
private Integer studentId;
private String username;
private String grade;
private String userGroup;

View File

@ -1,5 +1,6 @@
package top.suyiiyii.sims.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.tangzc.mpe.autotable.annotation.Table;
import lombok.AllArgsConstructor;
@ -19,7 +20,7 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
public class Attachment {
@TableId("id")
@TableId(type= IdType.AUTO)
private Integer id;
private Integer recordId;
// 文件路径

View File

@ -1,5 +1,6 @@
package top.suyiiyii.sims.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.tangzc.mpe.autotable.annotation.Table;
import lombok.AllArgsConstructor;
@ -19,7 +20,7 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
public class HierarchyRelation {
@TableId("id")
@TableId(type= IdType.AUTO)
private Integer id;
// 上级用户ID

View File

@ -1,5 +1,6 @@
package top.suyiiyii.sims.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.tangzc.mpe.autotable.annotation.Table;
import lombok.AllArgsConstructor;
@ -21,7 +22,7 @@ import java.time.LocalDateTime;
@AllArgsConstructor
@NoArgsConstructor
public class Notification {
@TableId("id")
@TableId(type= IdType.AUTO)
private Integer id;
private String title;
private String content;

View File

@ -1,5 +1,6 @@
package top.suyiiyii.sims.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.tangzc.mpe.autotable.annotation.Table;
import lombok.AllArgsConstructor;
@ -21,7 +22,7 @@ import java.util.Objects;
@AllArgsConstructor
@NoArgsConstructor
public class Permissions {
@TableId("id")
@TableId(type= IdType.AUTO)
private Integer id;
//权限id
private Integer permissionId;

View File

@ -1,5 +1,6 @@
package top.suyiiyii.sims.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.tangzc.mpe.autotable.annotation.Table;
import lombok.AllArgsConstructor;
@ -21,7 +22,7 @@ import java.time.LocalDateTime;
@AllArgsConstructor
@NoArgsConstructor
public class RevokeRequest {
@TableId("id")
@TableId(type= IdType.AUTO)
private Integer id;
private Integer recordId;
private Integer userId;

View File

@ -1,5 +1,6 @@
package top.suyiiyii.sims.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.tangzc.mpe.autotable.annotation.Table;
import lombok.AllArgsConstructor;
@ -21,7 +22,7 @@ import java.time.LocalDateTime;
@AllArgsConstructor
@NoArgsConstructor
public class RevokedRecord {
@TableId("id")
@TableId(type= IdType.AUTO)
private Integer id;
// 被撤销的奖惩记录ID
private Integer recordId;

View File

@ -1,11 +1,15 @@
package top.suyiiyii.sims.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.tangzc.mpe.autotable.annotation.Column;
import com.tangzc.mpe.autotable.annotation.Table;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Objects;
/**
* @Author tortoise
* @Date 2024/8/9 15:43
@ -19,15 +23,25 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
public class RewardPunishmentCategory {
@TableId("id")
@TableId(type= IdType.AUTO)
private Integer id;
private Integer categoryId;
// 类别名称
private String categoryName;
private String subCategoryName;
// 类别说明
private String description;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
RewardPunishmentCategory that = (RewardPunishmentCategory) o;
return Objects.equals(categoryId, that.categoryId);
}
@Override
public int hashCode() {
return Objects.hash(categoryId);
}
}

View File

@ -21,7 +21,9 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
public class Role {
@ColumnId(mode = IdType.AUTO, comment = "id主键")
private Integer id;
//管理员普通用户组员组长队长
@ColumnNotNull

View File

@ -21,7 +21,9 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
public class RolePermission {
@ColumnId(mode = IdType.AUTO, comment = "id主键")
private Integer id;
@ColumnNotNull
private Integer roleId;

View File

@ -1,8 +1,10 @@
package top.suyiiyii.sims.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.tangzc.mpe.autotable.annotation.Column;
import com.tangzc.mpe.autotable.annotation.ColumnId;
import com.tangzc.mpe.autotable.annotation.Table;
import com.tangzc.mpe.autotable.annotation.UniqueIndex;
import lombok.AllArgsConstructor;
@ -22,7 +24,9 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
public class User {
@ColumnId(mode = IdType.AUTO, comment = "id主键")
private Integer id;
@UniqueIndex
@Column(comment = "学生id", notNull = true)

View File

@ -21,7 +21,9 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
public class UserRole {
@ColumnId(mode = IdType.AUTO, comment = "id主键")
private Integer id;
@ColumnNotNull
private Integer userId;

View File

@ -1,7 +1,11 @@
package top.suyiiyii.sims.mapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
/**
* @Author tortoise
@ -13,12 +17,21 @@ import org.apache.ibatis.annotations.Select;
*/
@Mapper
public interface CategoryMapper {
@Select("SELECT * FROM reward_punishment_category WHERE category_id=#{id}")
@Select("SELECT category_name FROM reward_punishment_category WHERE category_id=#{id}")
String getCategoryName(Integer categoryId);
@Select("SELECT category_name FROM reward_punishment_category WHERE category_id=#{categoryId}")
@Select("SELECT sub_category_name FROM reward_punishment_category WHERE category_id=#{categoryId}")
String getSubCategoryName(Integer categoryId);
@Select("SELECT category_id FROM reward_punishment_category WHERE sub_category_name=#{subCategoryName}")
@Select("SELECT id FROM reward_punishment_category WHERE sub_category_name=#{subCategoryName}")
Integer getIdBySubCategoryName(String subCategoryName);
@Select("SELECT category_id FROM reward_punishment_category WHERE category_name=#{categoryName}")
List<Integer> getIdByCategoryName(String categoryName);
@Select("SELECT sub_category_name FROM reward_punishment_category WHERE sub_category_name=#{subCategoryName}")
String IsSubCategoryName(String subCategoryName);
@Insert("INSERT INTO reward_punishment_category (category_name, sub_category_name) VALUES (#{categoryName}, #{subCategoryName})")
void addsubcategory(String categoryName, String subCategoryName);
//把categoryId放入对应id下
@Update("update reward_punishment_category set category_id=#{categoryId} where id=#{categoryId}")
void addCategoryId(Integer categoryId);
}

View File

@ -0,0 +1,15 @@
package top.suyiiyii.sims.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import top.suyiiyii.sims.entity.RevokedRecord;
/**
* @Author tortoise
* @Date 2024/9/6 10:04
* @PackageName:top.suyiiyii.sims.mapper
* @ClassName: MpRevRecordMapper
* @Description: TODO
* @Version 1.0
*/
public interface MpRevRecordMapper extends BaseMapper<RevokedRecord> {
}

View File

@ -22,7 +22,6 @@ public interface RecordMapper {
//根据学号分页查询所以信息
@Select("select * from record where student_id = #{id} limit #{page},#{size}")
List<Record> getMyAllRecords(Integer page, Integer size, String id);
//根据id更新对应信息
@Update("UPDATE record SET "
@ -39,7 +38,6 @@ public interface RecordMapper {
+ "last_update_time = #{record.lastUpdateTime} "
+ "WHERE id = #{id}")
void updateRecord(Record record, Integer id);
@Delete("delete from record where id = #{id}")
void deleteRecord(Integer id);
@ -50,4 +48,37 @@ public interface RecordMapper {
"#{revokeDate}, #{revokeReason}, #{revokeRemark}, #{operatorUserId}, #{lastUpdateTime})"
})
void addRecord(Record record);
@Select({
"<script>",
"SELECT * FROM record WHERE 1=1",
"<if test='studentId != null '>",
"AND student_id = #{studentId}",
"</if>",
"<if test='userGroup != null and userGroup.trim() != \"\"'>",
"AND user_group LIKE CONCAT('%', #{userGroup}, '%')",
"</if>",
"<if test='grade != null and grade.trim() != \"\"'>",
"AND grade LIKE CONCAT('%', #{grade}, '%')",
"</if>",
"LIMIT #{size}, #{page}",
"</script>"
})
List<Record> getRecordsLike(
@Param("size") int size,
@Param("page") int page,
@Param("studentId") Integer studentId,
@Param("userGroup") String userGroup,
@Param("grade") String grade
);
@Select("select student_id from record where category_id = #{i}")
List<Integer> getSidByCategoryId(Integer i);
@Select("SELECT * FROM record WHERE student_id = #{sid} LIMIT #{page},#{size}")
List<Record> getRecordsById(int page, int size, Integer sid);
@Select("SELECT id FROM record WHERE id = #{id}")
Integer IsRecord(Integer id);
}

View File

@ -16,14 +16,6 @@ import java.util.List;
*/
@Mapper
public interface RoleMapper {
@Insert("INSERT INTO role(name) VALUES(#{name}")
void addRole(String name);
@Delete("DELETE FROM role WHERE name=#{name}")
void deleteRole(String name);
@Update("UPDATE role SET name=#{newName} WHERE name=#{name}")
void updateRole(String name, String newName);
/**
* @param
@ -32,28 +24,40 @@ public interface RoleMapper {
* @Description: TODO 查询用户信息
* @return: java.util.List<top.suyiiyii.sims.entity.User>
*/
@Select("SELECT u.username, u.name, u.userId, r.role_name " +
@Select("SELECT u.username, u.student_id, r.role_name " +
"FROM user u " +
"LEFT JOIN user_role ur ON u.user_id = ur.user_id " +
"LEFT JOIN role r ON ur.role_id = r.role_id")
"LEFT JOIN user_role ur ON u.student_id = ur.user_id " +
"LEFT JOIN role r ON ur.role_id = r.id")
@Results({
@Result(property = "username", column = "username"),
@Result(property = "name", column = "name"),
@Result(property = "userId", column = "userId"),
@Result(property = "group", column = "group"),
@Result(property = "roles", column = "role_name", many = @Many(select = "selectRolesByUser"))
@Result(property = "roles", column = "role_name", many = @Many(select = "selectRolesById"))
})
List<User> selectAllUsersWithRoles();
// 根据用户ID查询角色
@Select("SELECT role_id, role_name " +
"FROM role " +
"WHERE role_id IN " +
"(SELECT role_id FROM user_role WHERE user_id = #{user_id})")
List<Role> selectRolesById(@Param("user_id") int id);
"WHERE id IN " +
"(SELECT role_id FROM user_role WHERE user_id = #{student_id})")
List<Role> selectRolesById(@Param("student_id") int id);
@Select("SELECT role_name FROM role WHERE role_id=#{roleId}")
List<String> selectRoleNamesByRoleId(Integer roleId);
@Select("SELECT user_id " +
"FROM user_role " +
"WHERE role_id IN " +
"(SELECT role_id FROM role WHERE role_name=#{roleName})")
Integer getIdByrolename(String roleName);
@Select("SELECT student_id FROM user WHERE username=#{username}")
Integer getStudentIdByUsername(String username);
@Select("SELECT role_name " +
"FROM role " +
"WHERE id IN " +
"(SELECT role_id FROM user_role WHERE user_id = #{id})")
List<String> getRolesById(int id);
}

View File

@ -22,7 +22,9 @@ public interface UserMapper extends BaseMapper<User> {
* @param user 新用户对象
* @return 影响的行数
*/
@Insert("insert INTO user (id,student_id, username, password, username, email, user_group) VALUES (#{id},#{studentId}, #{username}, #{password}, #{name}, #{email}, #{userGroup})")
int addUser(User user);
/**
@ -43,7 +45,9 @@ public interface UserMapper extends BaseMapper<User> {
@Update("UPDATE user SET " +
"student_id = #{userId}, " +
"username = #{username}, " +
"username = #{name}, " +
"email = #{email}, " +
"grade = #{grade}, " +
"user_group = #{group} " +
@ -56,7 +60,9 @@ public interface UserMapper extends BaseMapper<User> {
* @param
* @return 用户对象
*/
@Select("SELECT id, student_id, username, password, username, email,grade,user_group from user WHERE student_id = #{id}")
User selectByUserId(Integer id);
/**
@ -65,7 +71,9 @@ public interface UserMapper extends BaseMapper<User> {
* @param
* @return 用户对象
*/
@Select("SELECT id, student_id, username, password, username, email,grade, user_group from user WHERE id = #{id}")
User selectById(Integer id);
/**
@ -73,7 +81,9 @@ public interface UserMapper extends BaseMapper<User> {
*
* @return 用户列表
*/
@Select("SELECT id, student_id, username, password, username, email, grade, user_group FROM user")
List<User> selectAll();
@Select("select * from user where username = #{username}")
@ -82,6 +92,10 @@ public interface UserMapper extends BaseMapper<User> {
@Update("update user set password = #{password} where username = #{username}")
void updatePassword(User user);
@Select("select student_id from user where id = #{userId}")
String getStudentIdById(String userId);
@Select("select student_id from user where id = #{userId}")
Integer getStudentIdByUserId(Integer userId);
}

View File

@ -4,6 +4,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import top.suyiiyii.sims.mapper.CategoryMapper;
import java.util.List;
/**
* @Author tortoise
* @Date 2024/8/16 23:32
@ -27,8 +29,12 @@ public class CategoryService {
}
public Integer getIdBySubCategoryName(String subCategoryName) {
return categoryMapper.getIdBySubCategoryName(subCategoryName);
public List<Integer> getIdByCategoryName(String categoryName) {
return categoryMapper.getIdByCategoryName(categoryName);
}
}

View File

@ -1,9 +1,13 @@
package top.suyiiyii.sims.service;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import top.suyiiyii.sims.dto.RecordDto;
import top.suyiiyii.sims.entity.Record;
import top.suyiiyii.sims.mapper.CategoryMapper;
import top.suyiiyii.sims.mapper.RecordMapper;
import top.suyiiyii.sims.mapper.UserMapper;
@ -23,7 +27,10 @@ public class RecordService {
RecordMapper recordMapper;
@Autowired
UserMapper userMapper;
@Autowired
ModelMapper modelMapper;
@Autowired
CategoryMapper categoryMapper;
public List<Record> getAllRecords(Integer page, Integer size) {
return recordMapper.getAllRecords(page, size);
@ -43,7 +50,39 @@ public class RecordService {
recordMapper.deleteRecord(id);
}
public void addRecord(Record record) {
public void addRecord(RecordDto recordDto) {
//把recordDto转化成Record
recordDto.setId(null);
Record record = modelMapper.map(recordDto, Record.class);
//查看数据库里面是否有这个类别
String subCategoryName = categoryMapper.IsSubCategoryName(recordDto.getSubCategoryName());
if(subCategoryName == null) {
//没有这个类别就加上
categoryMapper.addsubcategory(recordDto.getCategoryName(), recordDto.getSubCategoryName());
}
Integer categoryId = categoryMapper.getIdBySubCategoryName(recordDto.getSubCategoryName());
categoryMapper.addCategoryId(categoryId);
record.setCategoryId(categoryId);
recordMapper.addRecord(record);
}
public List<Record> getRecordsLike(int page, int size, Integer studentId, String userGroup, String grade) {
return recordMapper.getRecordsLike(page, size, studentId, userGroup,grade);
}
public List<Integer> getSidByCategoryId(Integer i) {
return recordMapper.getSidByCategoryId(i);
}
public List<Record> getRecordsById(int page, int size, Integer sid) {
return recordMapper.getRecordsById(page, size, sid);
}
public Integer IsRecord(Integer id) {
return recordMapper.IsRecord(id);
}
}

View File

@ -0,0 +1,20 @@
package top.suyiiyii.sims.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import top.suyiiyii.sims.mapper.MpRevRecordMapper;
import top.suyiiyii.sims.mapper.RoleMapper;
/**
* @Author tortoise
* @Date 2024/9/6 10:06
* @PackageName:top.suyiiyii.sims.service
* @ClassName: RevokedService
* @Description: TODO
* @Version 1.0
*/
@Service
public class RevokedService {
@Autowired
MpRevRecordMapper mpRevRecordMapper;
}

View File

@ -26,14 +26,14 @@ public class RoleService {
}
/**
* @param Id
* @param
* @author: tortoise
* @date: 2024/8/14 14:39
* @Description: TODO 查看自己身份
* @return: java.util.List<top.suyiiyii.sims.entity.Role>
*/
public List<Role> selectRolesById(int id) {
return roleMapper.selectRolesById(id);
public List<String> getRolesById(int id) {
return roleMapper.getRolesById(id);
}
@ -46,4 +46,12 @@ public class RoleService {
}
return false;
}
public Integer getIdByrolename(String roleName) {
return roleMapper.getIdByrolename(roleName);
}
public Integer getStudentIdByUsername(String username) {
return roleMapper.getStudentIdByUsername(username);
}
}

View File

@ -45,14 +45,6 @@ public class UserService {
@Autowired
private ModelMapper modelMapper;
public void addUser(User user) {
userMapper.addUser(user);
}
public void updateUser(User user) {
userMapper.updateUser(user);
}
public void deleteUser(int id) {
userMapper.deleteUser(id);
}
@ -82,19 +74,11 @@ public class UserService {
throw new ServiceException("账号已经存在");
}
User user = modelMapper.map(req, User.class);
mpUserMapper.insert(user);
user = mpUserMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getUsername, req.getUsername()));
rbacService.addRoleWithUserId(user.getId(), "user");
}
public User selectByUsername(String username) {
return userMapper.selectByUserName(username);
}
public void updatePassword(User user) {
userMapper.updatePassword(user);
}
public List<UserDto> findAllUsers() {
List<User> users = userMapper.selectAll();
@ -115,25 +99,33 @@ public class UserService {
public UserDto findUser(Integer id) {
UserDto UserDto = new UserDto();
UserDto userDto = new UserDto();
User user = userMapper.selectById(id);
if (user == null) {
throw new ServiceException("用户不存在");
}
UserDto.setUserId(user.getId());
UserDto.setUsername(user.getUsername());
UserDto.setGrade(user.getGrade());
UserDto.setUserGroup(user.getUserGroup());
UserDto.setRoles(new ArrayList<>());
//TODO: 获取用户角色
return UserDto;
userDto.setUserId(user.getId());
userDto.setUsername(user.getUsername());
userDto.setGrade(user.getGrade());
userDto.setUserGroup(user.getUserGroup());
userDto.setStudentId(user.getStudentId());
userDto.setRoles(new ArrayList<>());
List<String> roles = roleMapper.getRolesById(id);
userDto.setRoles(roles);
return userDto;
}
public User selectByUserId(Integer studentId) {
return userMapper.selectByUserId(studentId);
}
public List<Role> selectRolesById(Integer studentId) {
return roleMapper.selectRolesById(studentId);
}
public Integer getStudentIdByUserId(Integer userId) {
return userMapper.getStudentIdByUserId(userId);
}
}

View File

@ -42,7 +42,7 @@ public class JwtUtils {
public static String createToken(String userId, String sign) {
return JWT.create()
.withAudience(userId)
.withExpiresAt(DateUtil.offsetHour(new Date(), 2))
.withExpiresAt(DateUtil.offsetWeek(new Date(), 2))
.sign(Algorithm.HMAC256(sign));
// 设置令牌过期时间为2小时
}