diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 6e02720..ee4c4c8 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -21,15 +21,18 @@ jobs:
steps:
- uses: actions/checkout@v4
+ - run: rm -rf test.db
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
+ - run: mvn -B test --file pom.xml
- name: Build with Maven
run: mvn -B package -DskipTests --file pom.xml
+
# Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive
# - name: Update dependency graph
# uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6
diff --git a/.gitignore b/.gitignore
index df127dd..0d33ed4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,4 +31,5 @@ build/
### VS Code ###
.vscode/
-/src/main/resources/application.yaml
+/test.db
+/src/main/resources/application-prod.yaml
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000..8707a91
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,19 @@
+repos:
+
+ - repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v2.3.0
+ hooks:
+ - id: check-yaml
+ - id: end-of-file-fixer
+ - id: trailing-whitespace
+ - id: check-case-conflict
+ - id: check-merge-conflict
+ - id: check-executables-have-shebangs
+ args:
+ - --autofix
+ - repo: https://github.com/gherynos/pre-commit-java
+ rev: v0.5.4
+ hooks:
+ - id: pmd
+ - id: cpd
+ - id: checkstyle
diff --git a/pom.xml b/pom.xml
index 115a8bc..29aef43 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,6 +45,15 @@
mybatis-plus-ext-spring-boot3-starter
3.5.7-EXT691
+
+ org.springframework.session
+ spring-session-core
+
+
+ org.modelmapper
+ modelmapper
+ 2.3.9
+
com.mysql
mysql-connector-j
@@ -91,6 +100,11 @@
springdoc-openapi-starter-webmvc-ui
2.3.0
+
+ org.xerial
+ sqlite-jdbc
+ test
+
diff --git a/src/main/java/top/suyiiyii/sims/SimsApplication.java b/src/main/java/top/suyiiyii/sims/SimsApplication.java
index 8dba06d..adbe2d4 100644
--- a/src/main/java/top/suyiiyii/sims/SimsApplication.java
+++ b/src/main/java/top/suyiiyii/sims/SimsApplication.java
@@ -1,11 +1,13 @@
package top.suyiiyii.sims;
import com.tangzc.autotable.springboot.EnableAutoTable;
+import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableAutoTable
@SpringBootApplication
+@MapperScan("top.suyiiyii.sims.mapper")
public class SimsApplication {
public static void main(String[] args) {
SpringApplication.run(SimsApplication.class, args);
diff --git a/src/main/java/top/suyiiyii/sims/VO/UserVO.java b/src/main/java/top/suyiiyii/sims/VO/UserVO.java
deleted file mode 100644
index b465ef8..0000000
--- a/src/main/java/top/suyiiyii/sims/VO/UserVO.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package top.suyiiyii.sims.VO;
-
-import lombok.Data;
-import top.suyiiyii.sims.entity.Role;
-
-import java.util.List;
-
-/**
- * @Author tortoise
- * @Date 2024/8/15 16:04
- * @PackageName:top.suyiiyii.sims.VO
- * @ClassName: UserVO
- * @Description: TODO
- * @Version 1.0
- */
-@Data
-public class UserVO {
- private Integer userId;
- private String username;
- private String grade;
- private String group;
- private List roles; // 角色名称列表
-
-}
diff --git a/src/main/java/top/suyiiyii/sims/common/InterceptorConfig.java b/src/main/java/top/suyiiyii/sims/common/InterceptorConfig.java
index 0505380..5becb7b 100644
--- a/src/main/java/top/suyiiyii/sims/common/InterceptorConfig.java
+++ b/src/main/java/top/suyiiyii/sims/common/InterceptorConfig.java
@@ -1,9 +1,16 @@
package top.suyiiyii.sims.common;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
+import top.suyiiyii.sims.service.RoleService;
+import top.suyiiyii.sims.service.UserService;
+import top.suyiiyii.sims.utils.JwtUtils;
/**
* @Author tortoise
@@ -15,14 +22,23 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupp
*/
@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport {
+ @Autowired
+ private RoleService roleService;
+
+
+
+ //UserService userService;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
-// registry.addInterceptor(jwtInterceptor())
-// .addPathPatterns("/**")
-// .excludePathPatterns("/user/login") // 排除不需要验证的路径
-// .excludePathPatterns("/user/register")
-// .excludePathPatterns("/v3/api-docs/**");
+ registry.addInterceptor(jwtInterceptor())
+ .addPathPatterns("/**")
+ .excludePathPatterns("/user/login") // 排除不需要验证的路径
+ .excludePathPatterns("/user/register")
+ .excludePathPatterns("/v3/api-docs/**");
+ // 注册AdminInterceptor,只拦截以admin/开头的路径
+ registry.addInterceptor(new AdminInterceptor())
+ .addPathPatterns("/admin/**");
super.addInterceptors(registry);
}
@@ -31,5 +47,36 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupp
return new JwtInterceptor();
}
+ // AdminInterceptor的实现
+ public class AdminInterceptor implements HandlerInterceptor {
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+ String path = request.getRequestURI();
+ if (path.startsWith("/admin/") && !hasAdminPermission(request)) {
+ // 如果用户没有管理员权限,返回403 Forbidden
+ response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+ return false;
+ }
+ return true;
+ }
+
+ private boolean hasAdminPermission(HttpServletRequest request) {
+ // 这里应该实现检查用户权限的逻辑
+ // 例如,从session、token或者数据库中获取用户信息并判断权限
+ // 以下仅为示例
+ String token = (String) request.getAttribute("token");
+ //非空
+ if (token == null) {
+ return false;
+ }
+ try {
+ Integer userId = Integer.valueOf(JwtUtils.extractUserId(token));
+ return roleService.isRoleNameAdmin(userId);
+ } catch (Exception e) {
+ // 处理令牌解析过程中可能出现的异常
+ return false;
+ }
+ }
+ }
}
diff --git a/src/main/java/top/suyiiyii/sims/common/JwtInterceptor.java b/src/main/java/top/suyiiyii/sims/common/JwtInterceptor.java
index 9f9fa9a..a946758 100644
--- a/src/main/java/top/suyiiyii/sims/common/JwtInterceptor.java
+++ b/src/main/java/top/suyiiyii/sims/common/JwtInterceptor.java
@@ -42,10 +42,6 @@ public class JwtInterceptor implements HandlerInterceptor {
return true;
}
}
-
- // request.setAttribute();
- // request.getAttribute()
-
// 执行认证
if (StrUtil.isBlank(token)) {
//权限错误
@@ -65,6 +61,8 @@ public class JwtInterceptor implements HandlerInterceptor {
if (!JwtUtils.verifyToken(token, user.getPassword())) {
throw new ServiceException("401", "请登录");
}
+ // 验证token后,如果一切正常,将token存储到request的属性中
+ request.setAttribute("token", token);
return true;
}
}
diff --git a/src/main/java/top/suyiiyii/sims/common/ModelMapperConfig.java b/src/main/java/top/suyiiyii/sims/common/ModelMapperConfig.java
new file mode 100644
index 0000000..3241164
--- /dev/null
+++ b/src/main/java/top/suyiiyii/sims/common/ModelMapperConfig.java
@@ -0,0 +1,44 @@
+package top.suyiiyii.sims.common;
+
+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;
+import top.suyiiyii.sims.entity.User;
+
+/**
+ * @Author tortoise
+ * @Date 2024/8/20 21:19
+ * @PackageName:top.suyiiyii.sims.common
+ * @ClassName: ModelMapperConfig
+ * @Description: TODO
+ * @Version 1.0
+ */
+@Configuration
+public class ModelMapperConfig {
+ @Bean
+ public ModelMapper modelMapper() {
+ ModelMapper modelMapper = new ModelMapper();
+ // 设置完全匹配
+ modelMapper.getConfiguration().setFullTypeMatchingRequired(true);
+
+ // 设置匹配策略为严格模式
+ modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
+ // 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));
+ }
+}
diff --git a/src/main/java/top/suyiiyii/sims/controller/RecordController.java b/src/main/java/top/suyiiyii/sims/controller/RecordController.java
index d0f3914..52e18ea 100644
--- a/src/main/java/top/suyiiyii/sims/controller/RecordController.java
+++ b/src/main/java/top/suyiiyii/sims/controller/RecordController.java
@@ -1,45 +1,117 @@
package top.suyiiyii.sims.controller;
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.exceptions.JWTDecodeException;
+import com.auth0.jwt.interfaces.DecodedJWT;
+import io.swagger.v3.oas.annotations.Operation;
+
+import jakarta.servlet.http.HttpServletRequest;
+import org.modelmapper.ModelMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+
import org.springframework.web.bind.annotation.*;
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.entity.Role;
+import top.suyiiyii.sims.entity.User;
+import top.suyiiyii.sims.entity.UserRole;
+import top.suyiiyii.sims.mapper.CategoryMapper;
+import top.suyiiyii.sims.mapper.UserMapper;
+import top.suyiiyii.sims.service.CategoryService;
+import top.suyiiyii.sims.service.RecordService;
+import top.suyiiyii.sims.service.RoleService;
+import top.suyiiyii.sims.service.UserService;
+import top.suyiiyii.sims.utils.JwtUtils;
+import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
+import java.util.stream.Collectors;
@RestController
-public class RecordController {
-
+public class
+RecordController {
+ @Autowired
+ RecordService recordService;
+ @Autowired
+ UserService UserService;
+ @Autowired
+ RoleService roleService;
+ @Autowired
+ CategoryService categoryService;
+ @Autowired
+ ModelMapper modelMapper;
+ @Operation(summary = "获取所有奖惩记录")
@GetMapping("/admin/record")
- public Result> adminRecord(Integer page, Integer size) {
- return Result.success(new ArrayList<>());
+ public Result> adminRecord(
+ @RequestParam(defaultValue = "0") int page,
+ @RequestParam(defaultValue = "10") int size) {
+ List records = recordService.getAllRecords(page, size);
+ List 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);
}
+ @Operation(summary = "获取自己的奖惩记录")
@GetMapping("/record")
- public Result> record(Integer page, Integer size) {
- return Result.success(new ArrayList<>());
+ public Result> record(@RequestParam(defaultValue = "0") int page,
+ @RequestParam(defaultValue = "10") int size,
+ HttpServletRequest request) {
+ String token = (String) request.getAttribute("token");
+ String userId= JwtUtils.extractUserId(token);
+ List recordDtos=new ArrayList<>();
+
+ List records = recordService.getMyAllRecords(page, size,userId);
+ 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);
+
}
+ @Operation(summary = "更新单个奖惩记录")
@PutMapping("/admin/record/{id}")
public Result adminUpdateRecord(@PathVariable Integer id, @RequestBody RecordDto recordDto) {
-
+ Record record = modelMapper.map(recordDto, Record.class);
+ recordService.updateRecord(record,id);
return Result.msg("修改成功");
}
+ @Operation(summary = "删除单个奖惩记录")
@DeleteMapping("/admin/record/{id}")
public Result adminDeleteRecord(@PathVariable Integer id) {
-
+ recordService.deleteRecord(id);
return Result.msg("删除成功");
}
+ @Operation(summary = "添加奖惩记录")
@PostMapping("/admin/record")
public Result adminAddRecord(@RequestBody RecordDto recordDto) {
+ Integer categoryId = categoryService.getIdBySubCategoryName(recordDto.getSubCategoryName());
+ Record record = modelMapper.map(recordDto, Record.class);
+ if (categoryId == null) {
+ Result.error("请选择奖惩类别,以及类型");
+ }
+ record.setCategoryId(categoryId);
+ recordService.addRecord(record);
return Result.msg("添加成功");
}
-
}
diff --git a/src/main/java/top/suyiiyii/sims/controller/UserController.java b/src/main/java/top/suyiiyii/sims/controller/UserController.java
index ce18f52..c9e0362 100644
--- a/src/main/java/top/suyiiyii/sims/controller/UserController.java
+++ b/src/main/java/top/suyiiyii/sims/controller/UserController.java
@@ -1,6 +1,8 @@
package top.suyiiyii.sims.controller;
import cn.hutool.core.util.StrUtil;
+import io.swagger.v3.oas.annotations.Operation;
+import jakarta.servlet.http.HttpServletRequest;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -8,11 +10,14 @@ import org.springframework.web.bind.annotation.*;
import top.suyiiyii.sims.common.AuthAccess;
import top.suyiiyii.sims.common.Result;
import top.suyiiyii.sims.dto.CommonResponse;
+import top.suyiiyii.sims.dto.UserDto;
import top.suyiiyii.sims.entity.User;
import top.suyiiyii.sims.exception.ServiceException;
import top.suyiiyii.sims.service.RoleService;
import top.suyiiyii.sims.service.UserService;
+import java.util.List;
+
/**
* @Author tortoise
@@ -32,6 +37,7 @@ public class UserController {
@Autowired
RoleService roleService;
+
@AuthAccess
@GetMapping("/")
public Result hello() {
@@ -41,17 +47,20 @@ public class UserController {
}
@PostMapping("/user/login")
- public Result login(@RequestBody LoginRequest request) {
+ public Result login(@RequestBody LoginRequest request, HttpServletRequest httpServletRequest) {
log.info("login request:{}", request);
if (StrUtil.isBlank(request.getUsername()) || StrUtil.isBlank(request.getPassword())) {
return Result.error("用户名或密码不能为空");
}
-
- User user = userService.login(request.getUsername(), request.getPassword());
-
- return Result.success(new LoginResponse());
+ String token = userService.login(request.getUsername(), request.getPassword());
+ if (token == null) {
+ return Result.error("用户名或密码错误");
+ }
+ LoginResponse response = new LoginResponse();
+ response.setToken(token);
+ return Result.success(response);
}
@PostMapping("/user/register")
@@ -64,26 +73,46 @@ public class UserController {
if (request.getPassword() == null || request.getPassword().length() < 3) {
throw new ServiceException("密码长度不能小于3位");
}
-
- userService.register(new User());
+ User user = new User();
+ user.setUsername(request.getUsername());
+ user.setPassword(request.getPassword());
+ user.setEmail(request.getEmail());
+ user.setGrade(request.getGrade());
+ user.setUserGroup(request.getGroup());
+ userService.register(user);
return Result.success(CommonResponse.factory("注册成功"));
}
+ @Operation(description = "删除单个用户")
@DeleteMapping("/admin/user/{id}")
public Result adminDelete(@PathVariable Integer id) {
log.info("delete request:{}", id);
-// userService.deleteUser(user.getId());
+ userService.deleteUser(id);
return Result.success(CommonResponse.factory("删除成功"));
}
+ @Operation(description = "获取所有用户信息")
+ @GetMapping("/admin/user")
+ public Result> adminGet() {
+ List allUsers = userService.findAllUsers();
+ return Result.success(allUsers);
+ }
+
+ @Operation(description = "根据 id 获取用户信息")
@GetMapping("/admin/user/{id}")
- public Result adminGetById(@PathVariable Integer id) {
+ public Result adminGetById(@PathVariable Integer id) {
log.info("selectById request:{}", id);
- User user = userService.selectById(id);
+ UserDto user = userService.findUser(id);
return Result.success(user);
}
+ @Operation(description = "获取当前用户信息")
+ @GetMapping("/user/me")
+ public Result getSelf() {
+ UserDto user = userService.findUser(0);
+ return Result.success(user);
+ }
@Data
diff --git a/src/main/java/top/suyiiyii/sims/dto/RecordDto.java b/src/main/java/top/suyiiyii/sims/dto/RecordDto.java
index d0e4104..617668e 100644
--- a/src/main/java/top/suyiiyii/sims/dto/RecordDto.java
+++ b/src/main/java/top/suyiiyii/sims/dto/RecordDto.java
@@ -5,20 +5,22 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
+import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RecordDto {
- private Integer id;
+
// 用户ID
- private Integer userId;
- // 奖惩类型
- private String type;
- // 奖惩类别ID
- private Integer categoryId;
+ private Integer studentId;
+
+
+ private String categoryName;
+
+ private String subCategoryName;
// 奖惩日期
- private LocalDateTime date;
+ private Long date;
// 奖惩内容
private String content;
// 奖惩原因
@@ -30,7 +32,7 @@ public class RecordDto {
// 是否撤销
private Boolean isRevoked;
// 撤销日期
- private LocalDateTime revokeDate;
+ private Long revokeDate;
// 撤销原因
private String revokeReason;
// 撤销备注
@@ -38,5 +40,5 @@ public class RecordDto {
// 操作人ID
private Integer operatorUserId;
// 最近一次更新时间
- private LocalDateTime lastUpdateTime;
+ private Long lastUpdateTime;
}
diff --git a/src/main/java/top/suyiiyii/sims/dto/UserDto.java b/src/main/java/top/suyiiyii/sims/dto/UserDto.java
index 3ad3334..403a4c8 100644
--- a/src/main/java/top/suyiiyii/sims/dto/UserDto.java
+++ b/src/main/java/top/suyiiyii/sims/dto/UserDto.java
@@ -14,8 +14,9 @@ import java.util.List;
*/
@Data
public class UserDto {
- private Long userId;
+ private Integer userId;
private String username;
+ private String grade;
+ private String userGroup;
private List roles; // 角色名称列表
- private List permissions; // 权限列表
}
diff --git a/src/main/java/top/suyiiyii/sims/entity/Record.java b/src/main/java/top/suyiiyii/sims/entity/Record.java
index c6e8d9d..6390515 100644
--- a/src/main/java/top/suyiiyii/sims/entity/Record.java
+++ b/src/main/java/top/suyiiyii/sims/entity/Record.java
@@ -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;
@@ -12,7 +13,7 @@ import java.time.LocalDateTime;
* @Author tortoise
* @Date 2024/8/9 14:04
* @PackageName:top.suyiiyii.sims.entity
- * @ClassName: Record
+ * @ClassName: RecordMapper
* @Description: TODO
* @Version 1.0
*/
@@ -21,16 +22,15 @@ import java.time.LocalDateTime;
@AllArgsConstructor
@NoArgsConstructor
public class Record {
- @TableId("id")
+ @TableId(type = IdType.AUTO)
+ //自增
private Integer id;
// 用户ID
- private Integer userId;
- // 奖惩类型
- private String type;
+ private Integer StudentId;
// 奖惩类别ID
private Integer categoryId;
// 奖惩日期
- private LocalDateTime date;
+ private Long date;
// 奖惩内容
private String content;
// 奖惩原因
@@ -42,7 +42,7 @@ public class Record {
// 是否撤销
private Boolean isRevoked;
// 撤销日期
- private LocalDateTime revokeDate;
+ private Long revokeDate;
// 撤销原因
private String revokeReason;
// 撤销备注
@@ -50,7 +50,7 @@ public class Record {
// 操作人ID
private Integer operatorUserId;
// 最近一次更新时间
- private LocalDateTime lastUpdateTime;
+ private Long lastUpdateTime;
}
diff --git a/src/main/java/top/suyiiyii/sims/entity/User.java b/src/main/java/top/suyiiyii/sims/entity/User.java
index 6606503..d7bed55 100644
--- a/src/main/java/top/suyiiyii/sims/entity/User.java
+++ b/src/main/java/top/suyiiyii/sims/entity/User.java
@@ -1,14 +1,11 @@
package top.suyiiyii.sims.entity;
-import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.tangzc.mpe.autotable.annotation.Table;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
-import java.util.Set;
-
/**
* @Author tortoise
* @Date 2024/8/9 14:02
@@ -29,9 +26,5 @@ public class User {
private String password;
private String email;
private String grade;
- private String group;
- @TableField(exist = false)
- private String token;
- @TableField(exist = false)
- private Set permissions;
+ private String userGroup;
}
diff --git a/src/main/java/top/suyiiyii/sims/mapper/CategoryMapper.java b/src/main/java/top/suyiiyii/sims/mapper/CategoryMapper.java
new file mode 100644
index 0000000..902eadc
--- /dev/null
+++ b/src/main/java/top/suyiiyii/sims/mapper/CategoryMapper.java
@@ -0,0 +1,23 @@
+package top.suyiiyii.sims.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+/**
+ * @Author tortoise
+ * @Date 2024/8/16 23:31
+ * @PackageName:top.suyiiyii.sims.mapper
+ * @ClassName: CategoryMapper
+ * @Description: TODO
+ * @Version 1.0
+ */
+@Mapper
+public interface CategoryMapper {
+ @Select("SELECT * FROM reward_punishment_category WHERE category_id=#{id}")
+ String getCategoryName(Integer categoryId);
+
+ @Select("SELECT 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}")
+ Integer getIdBySubCategoryName(String subCategoryName);
+}
diff --git a/src/main/java/top/suyiiyii/sims/mapper/MpUserMapper.java b/src/main/java/top/suyiiyii/sims/mapper/MpUserMapper.java
new file mode 100644
index 0000000..651b14e
--- /dev/null
+++ b/src/main/java/top/suyiiyii/sims/mapper/MpUserMapper.java
@@ -0,0 +1,7 @@
+package top.suyiiyii.sims.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import top.suyiiyii.sims.entity.User;
+
+public interface MpUserMapper extends BaseMapper {
+}
diff --git a/src/main/java/top/suyiiyii/sims/mapper/RecordMapper.java b/src/main/java/top/suyiiyii/sims/mapper/RecordMapper.java
new file mode 100644
index 0000000..a4d635d
--- /dev/null
+++ b/src/main/java/top/suyiiyii/sims/mapper/RecordMapper.java
@@ -0,0 +1,52 @@
+package top.suyiiyii.sims.mapper;
+
+import org.apache.ibatis.annotations.*;
+import top.suyiiyii.sims.dto.RecordDto;
+import top.suyiiyii.sims.entity.Record;
+
+import java.util.List;
+
+/**
+ * @Author tortoise
+ * @Date 2024/8/16 21:39
+ * @PackageName:top.suyiiyii.sims.mapper
+ * @ClassName: RecordMapper
+ * @Description: TODO
+ * @Version 1.0
+ */
+@Mapper
+public interface RecordMapper {
+ //分页查询
+@Select("select * from record limit #{page},#{size}")
+ List getAllRecords(Integer page, Integer size);
+//根据学号分页查询所以信息
+ @Select("select * from record where student_id = #{id} limit #{page},#{size}")
+ List getMyAllRecords(Integer page, Integer size, String id);
+
+ //根据id,更新对应信息
+ @Update("UPDATE record SET "
+
+ + "date = #{record.date}, "
+ + "content = #{record.content}, "
+ + "reason = #{record.reason}, "
+ + "amount = #{record.amount}, "
+ + "remark = #{record.remark}, "
+ + "is_revoked = #{record.isRevoked}, "
+ + "revoke_date = #{record.revokeDate}, "
+ + "revoke_reason = #{record.revokeReason}, "
+ + "revoke_remark = #{record.revokeRemark}, "
+ + "operator_user_id = #{record.operatorUserId}, "
+ + "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);
+ @Insert({
+ "insert into record (student_id, category_id, `date`, content, reason, amount, remark, is_revoked,",
+ "revoke_date, revoke_reason, revoke_remark, operator_user_id, last_update_time)",
+ "VALUES (#{studentId}, #{categoryId}, #{date}, #{content}, #{reason}, #{amount}, #{remark}, #{isRevoked},",
+ "#{revokeDate}, #{revokeReason}, #{revokeRemark}, #{operatorUserId}, #{lastUpdateTime})"
+ })
+ void addRecord(Record record);
+}
diff --git a/src/main/java/top/suyiiyii/sims/mapper/RoleMapper.java b/src/main/java/top/suyiiyii/sims/mapper/RoleMapper.java
index d22fbfe..6a59928 100644
--- a/src/main/java/top/suyiiyii/sims/mapper/RoleMapper.java
+++ b/src/main/java/top/suyiiyii/sims/mapper/RoleMapper.java
@@ -51,8 +51,10 @@ public interface RoleMapper {
"FROM role " +
"WHERE role_id IN " +
"(SELECT role_id FROM user_role WHERE user_id = #{user_id})")
- List selectRolesById(@Param("user_id") int id);
+ List selectRolesById(@Param("user_id") int id);
@Select("SELECT role_name FROM role WHERE role_id=#{roleId}")
List selectRoleNamesByRoleId(Integer roleId);
+
+
}
diff --git a/src/main/java/top/suyiiyii/sims/mapper/UserMapper.java b/src/main/java/top/suyiiyii/sims/mapper/UserMapper.java
index 8d7746a..1aef24f 100644
--- a/src/main/java/top/suyiiyii/sims/mapper/UserMapper.java
+++ b/src/main/java/top/suyiiyii/sims/mapper/UserMapper.java
@@ -22,7 +22,7 @@ public interface UserMapper extends BaseMapper {
* @param user 新用户对象
* @return 影响的行数
*/
- @Insert("insert INTO user (id,user_id, username, password, name, email, `group`) VALUES (#{id},#{userId}, #{username}, #{password}, #{name}, #{email}, #{group})")
+ @Insert("insert INTO user (id,student_id, username, password, name, email, userGroup) VALUES (#{id},#{studentId}, #{username}, #{password}, #{name}, #{email}, #{userGroup})")
int addUser(User user);
/**
@@ -39,39 +39,41 @@ public interface UserMapper extends BaseMapper {
* @return 影响的行数
*/
@Update("UPDATE user SET " +
- "user_id = #{userId}, " +
+ "student_id = #{userId}, " +
"username = #{username}, " +
"name = #{name}, " +
"email = #{email}, " +
- "`group` = #{group} " +
+ "grade = #{grade}, " +
+ "userGroup = #{group} " +
"WHERE id = #{id}")
int updateUser(User user);
/**
* 根据ID查询用户信息
- * @param id 用户ID
+ * @param
* @return 用户对象
*/
- @Select("SELECT id, user_id, username, password, name, email, `group` from user WHERE id = #{Id}")
- User selectByUserId(Integer userId);
+ @Select("SELECT id, student_id, username, password, name, email,grade,user_group from user WHERE student_id = #{id}")
+ User selectByUserId(Integer id);
/**
* 根据iD查询用户信息
* @param
* @return 用户对象
*/
- @Select("SELECT id, user_id, username, password, name, email, `group` from user WHERE id = #{Id}")
- User selectById(Integer Id);
+ @Select("SELECT id, student_id, username, password, name, email,grade, user_group from user WHERE id = #{id}")
+ User selectById(Integer id);
/**
* 查询所有用户信息
* @return 用户列表
*/
- @Select("SELECT id, user_id, username, password, name, email,grade, `group` FROM user")
+ @Select("SELECT id, student_id, username, password, name, email, grade, user_group FROM user")
List selectAll();
@Select("select * from user where username = #{username}")
User selectByUserName(@Param("username") String username);
@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);
}
diff --git a/src/main/java/top/suyiiyii/sims/service/CategoryService.java b/src/main/java/top/suyiiyii/sims/service/CategoryService.java
new file mode 100644
index 0000000..98e20d1
--- /dev/null
+++ b/src/main/java/top/suyiiyii/sims/service/CategoryService.java
@@ -0,0 +1,34 @@
+package top.suyiiyii.sims.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import top.suyiiyii.sims.mapper.CategoryMapper;
+
+/**
+ * @Author tortoise
+ * @Date 2024/8/16 23:32
+ * @PackageName:top.suyiiyii.sims.service
+ * @ClassName: CategoryService
+ * @Description: TODO
+ * @Version 1.0
+ */
+@Service
+public class CategoryService {
+ @Autowired
+ CategoryMapper categoryMapper;
+
+
+ public String getCategoryName(Integer id) {
+ return categoryMapper.getCategoryName(id);
+ }
+
+ public String getsubCategoryName(Integer categoryId) {
+ return categoryMapper.getSubCategoryName(categoryId);
+ }
+
+
+ public Integer getIdBySubCategoryName(String subCategoryName) {
+ return categoryMapper.getIdBySubCategoryName(subCategoryName);
+
+ }
+}
diff --git a/src/main/java/top/suyiiyii/sims/service/RecordService.java b/src/main/java/top/suyiiyii/sims/service/RecordService.java
new file mode 100644
index 0000000..2afc0b7
--- /dev/null
+++ b/src/main/java/top/suyiiyii/sims/service/RecordService.java
@@ -0,0 +1,51 @@
+package top.suyiiyii.sims.service;
+
+
+import org.checkerframework.checker.units.qual.A;
+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.RecordMapper;
+import top.suyiiyii.sims.mapper.UserMapper;
+
+import java.util.List;
+
+/**
+ * @Author tortoise
+ * @Date 2024/8/16 21:47
+ * @PackageName:top.suyiiyii.sims.service
+ * @ClassName: RecordService
+ * @Description: TODO
+ * @Version 1.0
+ */
+@Service
+public class RecordService {
+ @Autowired
+ RecordMapper recordMapper;
+ @Autowired
+ UserMapper userMapper;
+
+ public List getAllRecords(Integer page, Integer size) {
+
+ return recordMapper.getAllRecords(page, size);
+ }
+
+
+ public List getMyAllRecords(Integer page, Integer size, String userId) {
+ String studentId = userMapper.getStudentIdById(userId);
+ return recordMapper.getMyAllRecords(page, size, studentId);
+ }
+
+ public void updateRecord(Record record, Integer id) {
+ recordMapper.updateRecord(record, id);
+ }
+
+ public void deleteRecord(Integer id) {
+ recordMapper.deleteRecord(id);
+ }
+
+ public void addRecord(Record record) {
+ recordMapper.addRecord(record);
+ }
+}
diff --git a/src/main/java/top/suyiiyii/sims/service/RoleService.java b/src/main/java/top/suyiiyii/sims/service/RoleService.java
index b8cdd70..e019e88 100644
--- a/src/main/java/top/suyiiyii/sims/service/RoleService.java
+++ b/src/main/java/top/suyiiyii/sims/service/RoleService.java
@@ -22,15 +22,7 @@ import java.util.List;
public class RoleService {
@Autowired
RoleMapper roleMapper;
- public void addRole(String name){
- roleMapper.addRole(name);
- }
- public void deleteRole(String name){
- roleMapper.deleteRole(name);
- }
- public void updateRole(String name,String newName){
- roleMapper.updateRole(name,newName);
- }
+
public List findAllUsersWithRoles(){
return roleMapper.selectAllUsersWithRoles();
}
@@ -41,9 +33,20 @@ public class RoleService {
* @param Id
* @return: java.util.List
*/
- List selectRolesById(int id){
+ public List selectRolesById(int id){
return roleMapper.selectRolesById(id);
}
+
+
+ public boolean isRoleNameAdmin(Integer id) {
+ List roles = roleMapper.selectRolesById(id);
+ for (Role role : roles) {
+ if (role.getRoleName().equals("admin")) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/src/main/java/top/suyiiyii/sims/service/UserService.java b/src/main/java/top/suyiiyii/sims/service/UserService.java
index 0dba25d..f870e76 100644
--- a/src/main/java/top/suyiiyii/sims/service/UserService.java
+++ b/src/main/java/top/suyiiyii/sims/service/UserService.java
@@ -5,7 +5,8 @@ package top.suyiiyii.sims.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import top.suyiiyii.sims.VO.UserVO;
+
+import top.suyiiyii.sims.dto.UserDto;
import top.suyiiyii.sims.entity.*;
import top.suyiiyii.sims.exception.ServiceException;
import top.suyiiyii.sims.mapper.PermissionsMapper;
@@ -38,10 +39,6 @@ public class UserService {
userMapper.addUser(user);
}
- public User selectById(int id) {
- return userMapper.selectById(id);
- }
-
public void updateUser(User user) {
userMapper.updateUser(user);
}
@@ -54,7 +51,8 @@ public class UserService {
return userMapper.selectAll();
}
//TODO:返回一个DTO,用户基本信息
- public User login(String username, String password) {
+ public String login(String username, String password) {
+
User dbUser = userMapper.selectByUserName(username);
if (dbUser == null) {
throw new ServiceException("账号不存在");
@@ -64,10 +62,10 @@ public class UserService {
}
HashSet permissionsSet = new HashSet<>();
Integer id = dbUser.getId();
- List UserRoles = roleMapper.selectRolesById(id);
- for (UserRole userRole : UserRoles) {
+ List roles = roleMapper.selectRolesById(id);
+ for (Role role : roles) {
//根据roleid找所有permissionId
- List rolePerminsion = permissionsMapper.getRolePerminsionByRoleId(userRole.getRoleId());
+ List rolePerminsion = permissionsMapper.getRolePerminsionByRoleId(role.getRoleId());
for (RolePermission rolePermission : rolePerminsion) {
Integer permissionId = rolePermission.getPermissionId();
//根据permissionId找permission
@@ -75,13 +73,15 @@ public class UserService {
permissionsSet.add(permissions);
}
}
- dbUser.setPermissions(permissionsSet);
String token = JwtUtils.createToken(dbUser.getId().toString(), dbUser.getPassword());
- dbUser.setToken(token);
- return dbUser;
+
+
+ return token;
+
}
+
public User register(User user) {
User dbUser = userMapper.selectByUserId(user.getStudentId());
@@ -101,7 +101,7 @@ public class UserService {
if (user.getEmail() == null || user.getEmail().equals("")) {
throw new ServiceException("邮箱不能为空");
}
- if (user.getGroup() == null || user.getGroup().equals("")) {
+ if (user.getUserGroup() == null || user.getUserGroup().equals("")) {
throw new ServiceException("组别不能为空");
}
@@ -114,29 +114,57 @@ public class UserService {
public void updatePassword(User user) {
userMapper.updatePassword(user);
}
- public List findAllUsers(){
+ public List findAllUsers(){
List users = userMapper.selectAll();
- List userVOS = new ArrayList<>();
+ List UserDtos = new ArrayList<>();
for (User user : users) {
- UserVO userVO = new UserVO();
- userVO.setUserId(user.getId());
- userVO.setUsername(user.getUsername());
- userVO.setGrade(user.getGrade());
- userVO.setGroup(user.getGroup());
- userVO.setRoles(new ArrayList<>());
+ UserDto UserDto = new UserDto();
+ UserDto.setUserId(user.getId());
+ UserDto.setUsername(user.getUsername());
+ UserDto.setGrade(user.getGrade());
+ UserDto.setUserGroup(user.getUserGroup());
+ UserDto.setRoles(new ArrayList<>());
Integer id = user.getId();
- List userRoles = roleMapper.selectRolesById(id);
- for (UserRole userRole : userRoles) {
- Integer roleId = userRole.getRoleId();
+ List roles = roleMapper.selectRolesById(id);
+ for (Role role : roles) {
+ Integer roleId = role.getRoleId();
// 获取一个角色的名称列表
List roleNameList = roleMapper.selectRoleNamesByRoleId(roleId);
// 累加角色名称到用户的角色列表中
- userVO.getRoles().addAll(roleNameList);
+ UserDto.getRoles().addAll(roleNameList);
}
- userVOS.add(userVO);
+ UserDtos.add(UserDto);
}
- return userVOS;
+ return UserDtos;
+ }
+ public UserDto findUser(Integer id) {
+
+ UserDto UserDto = new UserDto();
+ User user = userMapper.selectById(id);
+ UserDto.setUserId(user.getId());
+ UserDto.setUsername(user.getUsername());
+ UserDto.setGrade(user.getGrade());
+ UserDto.setUserGroup(user.getUserGroup());
+ UserDto.setRoles(new ArrayList<>());
+ List roles = roleMapper.selectRolesById(id);
+ for (Role role : roles) {
+ Integer roleId = role.getRoleId();
+ // 获取一个角色的名称列表
+ List roleNameList = roleMapper.selectRoleNamesByRoleId(roleId);
+ // 累加角色名称到用户的角色列表中
+ UserDto.getRoles().addAll(roleNameList);
+ }
+
+
+ return UserDto;
}
+ public User selectByUserId(Integer studentId) {
+ return userMapper.selectByUserId(studentId);
+ }
+
+ public List selectRolesById(Integer studentId) {
+ return roleMapper.selectRolesById(studentId);
+ }
}
diff --git a/src/main/resources/application-test.yaml b/src/main/resources/application-test.yaml
new file mode 100644
index 0000000..b73be74
--- /dev/null
+++ b/src/main/resources/application-test.yaml
@@ -0,0 +1,8 @@
+spring:
+ datasource:
+ url: jdbc:sqlite:test.db:testdb?cache=shared
+ driver-class-name: org.sqlite.JDBC
+ username:
+ password:
+
+
diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml
new file mode 100644
index 0000000..2b0fca7
--- /dev/null
+++ b/src/main/resources/application.yaml
@@ -0,0 +1,14 @@
+# datasource
+spring:
+ profiles:
+ active: prod
+ datasource:
+ url: ${DATASOURCE_URL}
+ username: ${DATASOURCE_USERNAME}
+ password: ${DATASOURCE_PASSWORD}
+ driver-class-name: ${DATASOURCE_DRIVER_CLASS_NAME}
+
+
+auto-table:
+ enable: true
+ model-package: top.suyiiyii.sims.entity
\ No newline at end of file
diff --git a/src/test/java/top/suyiiyii/sims/SimsApplicationTests.java b/src/test/java/top/suyiiyii/sims/SimsApplicationTests.java
deleted file mode 100644
index e7a4422..0000000
--- a/src/test/java/top/suyiiyii/sims/SimsApplicationTests.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package top.suyiiyii.sims;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class SimsApplicationTests {
-
- @Test
- void contextLoads() {
- }
-
-}
diff --git a/src/test/java/top/suyiiyii/sims/mapper/UserMapperTest.java b/src/test/java/top/suyiiyii/sims/mapper/UserMapperTest.java
new file mode 100644
index 0000000..bb51181
--- /dev/null
+++ b/src/test/java/top/suyiiyii/sims/mapper/UserMapperTest.java
@@ -0,0 +1,33 @@
+package top.suyiiyii.sims.mapper;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import top.suyiiyii.sims.entity.User;
+
+@SpringBootTest
+@ActiveProfiles("test")
+public class UserMapperTest {
+
+ @Autowired
+ private MpUserMapper userMapper;
+
+ @Test
+ public void testAddUser() {
+ User user = new User();
+ user.setStudentId(1);
+ user.setUsername("test");
+ user.setPassword("test");
+ user.setEmail("test");
+ user.setGrade("test");
+ user.setUserGroup("test");
+
+
+
+ int result = userMapper.insert(user);
+ Assertions.assertEquals(1, result);
+ }
+
+}
\ No newline at end of file