diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/ValidationConfig.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/ValidationConfig.java new file mode 100644 index 0000000..691498e --- /dev/null +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/ValidationConfig.java @@ -0,0 +1,20 @@ +package cn.edu.hfut.rmdjzz.projectmanagement.config; + +import org.hibernate.validator.HibernateValidator; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.validation.Validation; +import javax.validation.Validator; + +/** + * @author 佘语殊 + * @since 2022/7/7 17:38 + */ +@Configuration +public class ValidationConfig { + @Bean + public Validator validator() { + return Validation.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator(); + } +} diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/AnnouncementController.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/AnnouncementController.java index 5ca98f3..fda0eb7 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/AnnouncementController.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/AnnouncementController.java @@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.*; * @author 佘语殊 * @since 2022/7/7 11:29 */ +//TODO: TEST @RestController @RequestMapping("/project/{projectId}/announcement") public class AnnouncementController { @@ -41,11 +42,11 @@ public class AnnouncementController { @RequestHeader("Token") String token, @PathVariable Integer projectId, @PathVariable Long announcementId - ){ + ) { if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) { throw new ForbiddenException("无该项目访问权限"); } - return ResponseMap.ofSuccess("查询成功"); + return ResponseMap.ofSuccess("查询成功", announcementService.getAnnouncementById(announcementId)); } @SneakyThrows @@ -55,7 +56,8 @@ public class AnnouncementController { @PathVariable Integer projectId, @RequestBody Announcement announcement ) { - if (projectGroupService.getProjectAccessLevel(token, projectId) > 2) { + Integer accessLevel = projectGroupService.getProjectAccessLevel(token, projectId); + if (accessLevel == 0 || accessLevel > 2) { throw new ForbiddenException("无该操作权限"); } announcement.setProjectId(projectId); @@ -67,17 +69,33 @@ public class AnnouncementController { throw new BadRequestException("创建失败"); } - //TODO: 查询权限高低 + // 取消功能 + /*@SneakyThrows @PutMapping("/{announcementId}") public ResponseMap modifyAnnouncement( @RequestHeader("Token") String token, @PathVariable Integer projectId, @PathVariable Long announcementId, @RequestBody Announcement announcement - ){ + ) { + announcement.setAnnouncementId(announcementId); + if (announcementService.updateAnnouncement(token, projectId, announcement)) { + return ResponseMap.ofSuccess("更新成功"); + } + throw new BadRequestException("更新失败"); + }*/ - return ResponseMap.ofSuccess("更新成功"); + @SneakyThrows + @DeleteMapping("/{announcementId}") + public ResponseMap deleteAnnouncement( + @RequestHeader("Token") String token, + @PathVariable Integer projectId, + @PathVariable Long announcementId + ) { + if (announcementService.deleteAnnouncement(token, projectId, announcementId)) { + return ResponseMap.ofSuccess("删除成功"); + } + throw new BadRequestException("删除失败"); } - } diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java index 97f3ce2..fe9227d 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java @@ -2,24 +2,25 @@ package cn.edu.hfut.rmdjzz.projectmanagement.controller; import cn.edu.hfut.rmdjzz.projectmanagement.entity.ProjectGroup; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectGroupDto; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.StaffProcessDto; import cn.edu.hfut.rmdjzz.projectmanagement.entity.vo.GroupPositionVo; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException; import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectGroupService; import cn.edu.hfut.rmdjzz.projectmanagement.service.ITaskService; import cn.edu.hfut.rmdjzz.projectmanagement.utils.TokenUtils; +import cn.edu.hfut.rmdjzz.projectmanagement.utils.ValidateUtils; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.RequestPage; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseList; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseMap; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import lombok.SneakyThrows; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import java.util.List; +import java.util.Objects; /** * @author 史鹏辉 @@ -31,24 +32,29 @@ import java.util.List; public class ProjectGroupController { @Autowired private IProjectGroupService projectGroupService; - @Autowired private ITaskService taskService; + @Autowired + private ValidateUtils validateUtils; + @Operation(description = "传入合法page参数时分页查询,否则拉取整个列表") @SneakyThrows @GetMapping - public ResponseList getGroupNumber( + public ResponseList getGroupMembers( @PathVariable Integer projectId, @RequestHeader("Token") String token, - @Valid RequestPage page + RequestPage page ) { if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) { throw new ForbiddenException("无该项目访问权限"); } - Page res = projectGroupService.getOnePageProjectNumber(page, projectId); - return ResponseList.ofSuccess("查询成功", res); + if (validateUtils.validate(page).isEmpty()) { + return ResponseList.ofSuccess("查询成功", projectGroupService.pageProjectMembers(page, projectId)); + } + return ResponseList.ofSuccess("查询成功", projectGroupService.listProjectMembers(projectId)); } + @SneakyThrows @GetMapping("/{staffId}") public ResponseMap getDesignatedStaffPosition( @@ -102,12 +108,12 @@ public class ProjectGroupController { @SneakyThrows @GetMapping("/{staffId}/stats") - public ResponseList getProjectProcessOfStaff( + public ResponseList getProjectProcessOfStaff( @RequestHeader("Token") String token, @PathVariable Integer projectId, @PathVariable Integer staffId ) { - if(TokenUtils.getStaffId(token) != staffId) { + if (!Objects.equals(TokenUtils.getStaffId(token), staffId)) { throw new BadRequestException("错误请求"); } return ResponseList.ofSuccess("查询成功", taskService.getProjectProcessOfStaff(token, projectId)); diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/Announcement.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/Announcement.java index e1f2e1c..e724bd4 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/Announcement.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/Announcement.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableLogic; import lombok.Data; import java.time.LocalDateTime; +import java.util.Objects; /** * @author 佘语殊 @@ -24,4 +25,14 @@ public class Announcement { @TableField("is_deleted") @TableLogic private Boolean deleted; + + public boolean checkModification(Announcement rawAnnouncement) { + if (!Objects.equals(projectId, rawAnnouncement.projectId)) + return false; + if (!Objects.equals(announcementPublisherId, rawAnnouncement.announcementPublisherId)) + return false; + if (!Objects.equals(announcementPublishTime, rawAnnouncement.announcementPublishTime)) + return false; + return deleted == rawAnnouncement.deleted; + } } diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/Project.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/Project.java index 1935c37..9fd61dd 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/Project.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/Project.java @@ -57,8 +57,6 @@ public class Project { public Boolean checkModification(Project rawProject) { if (!this.checkProjectDate()) return false; - if (!Objects.equals(this.getProjectId(), rawProject.getProjectId())) - return false; if (!Objects.equals(this.getProjectCreator(), rawProject.getProjectCreator())) return false; if (!Objects.equals(this.getProjectCreatedTime(), rawProject.getProjectCreatedTime())) diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectGroupMapper.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectGroupMapper.java index b151f43..ef611d4 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectGroupMapper.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectGroupMapper.java @@ -21,5 +21,12 @@ public interface ProjectGroupMapper extends BaseMapper { FROM project_group inner join staff ON project_group.staff_id = staff.staff_id AND project_group.project_id = #{projectId} """) - Page findNumber(IPage pg, @Param("projectId") Integer projectId); + Page selectMembersByPage(IPage pg, @Param("projectId") Integer projectId); + + @Select(""" + SELECT staff.staff_id, staff_username, staff_fullname, project_staff_position, project_access_level + FROM project_group inner join staff + ON project_group.staff_id = staff.staff_id AND project_group.project_id = #{projectId} + """) + List selectMembersByList(@Param("projectId") Integer projectId); } diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IAnnouncementService.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IAnnouncementService.java index 6d25c68..d5c1c62 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IAnnouncementService.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IAnnouncementService.java @@ -2,6 +2,8 @@ package cn.edu.hfut.rmdjzz.projectmanagement.service; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Announcement; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.AnnouncementDto; +import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; +import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -11,7 +13,13 @@ import java.util.List; * @since 2022/7/7 11:27 */ public interface IAnnouncementService extends IService { + List getAnnouncementList(Integer projectId); AnnouncementDto getAnnouncementById(Long announcementId); + + Boolean updateAnnouncement(String token, Integer projectId, Announcement announcement) throws ForbiddenException, BadRequestException; + + Boolean deleteAnnouncement(String token, Integer projectId, Long announcementId) throws ForbiddenException, BadRequestException; + } diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectGroupService.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectGroupService.java index dbb6f82..b973d81 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectGroupService.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectGroupService.java @@ -2,7 +2,6 @@ package cn.edu.hfut.rmdjzz.projectmanagement.service; import cn.edu.hfut.rmdjzz.projectmanagement.entity.ProjectGroup; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectGroupDto; -import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.RequestPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,9 +28,18 @@ public interface IProjectGroupService extends IService { Integer getProjectAccessLevel(Integer staffId, Integer projectId); - Integer compareProjectAccessLevel(Integer projectId, Integer staffId1, Integer staffId2); + /** + * 比较token持有者与目标id在项目中的权限等级大小关系,一般用于当token持有者对目标id的某条目做危险操作时判断用 + *

+ * token持有者的判断受全局权限影响,目标id不会 + *

+ * 返回类似于{@link Integer#compare(int, int)} + */ + Integer compareProjectAccessLevel(Integer projectId, String token, Integer targetId); - Page getOnePageProjectNumber(RequestPage page, Integer projectId); + Page pageProjectMembers(RequestPage page, Integer projectId); + + List listProjectMembers(Integer projectId); /** * 统计小组中各岗位数量 diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/AnnouncementServiceImpl.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/AnnouncementServiceImpl.java index 2a2c9b8..c5ca655 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/AnnouncementServiceImpl.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/AnnouncementServiceImpl.java @@ -2,12 +2,19 @@ package cn.edu.hfut.rmdjzz.projectmanagement.service.impl; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Announcement; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.AnnouncementDto; +import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; +import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException; import cn.edu.hfut.rmdjzz.projectmanagement.mapper.AnnouncementMapper; import cn.edu.hfut.rmdjzz.projectmanagement.service.IAnnouncementService; +import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectGroupService; +import cn.edu.hfut.rmdjzz.projectmanagement.utils.TokenUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Objects; /** * @author 佘语殊 @@ -16,6 +23,9 @@ import java.util.List; @Service public class AnnouncementServiceImpl extends ServiceImpl implements IAnnouncementService { + @Autowired + private IProjectGroupService projectGroupService; + @Override public List getAnnouncementList(Integer projectId) { return baseMapper.selectAnnouncementList(projectId); @@ -23,6 +33,52 @@ public class AnnouncementServiceImpl extends ServiceImpl 2) { + throw new ForbiddenException("无权修改该公告"); + } + Announcement rawAnnouncement = baseMapper.selectById(announcement.getAnnouncementId()); + if (projectGroupService.compareProjectAccessLevel(projectId, token, rawAnnouncement.getAnnouncementPublisherId()) >= 0) { + if (!announcement.checkModification(rawAnnouncement)) { + throw new BadRequestException("请求参数错误"); + } + return updateById(announcement); + } + throw new ForbiddenException("无权修改该公告"); + } + + @Override + public Boolean deleteAnnouncement(String token, Integer projectId, Long announcementId) throws ForbiddenException, BadRequestException { + Integer staffId = TokenUtils.getStaffId(token); + Integer accessLevel = projectGroupService.getProjectAccessLevel(staffId, projectId); + if (accessLevel == 0) { + throw new ForbiddenException("无该项目访问权限"); + } + if (accessLevel > 2) { + throw new ForbiddenException("无权修改该公告"); + } + Announcement rawAnnouncement = baseMapper.selectOne(Wrappers.lambdaQuery() + .select(Announcement::getProjectId) + .select(Announcement::getAnnouncementPublisherId) + .eq(Announcement::getAnnouncementId, announcementId) + ); + if (!Objects.equals(projectId, rawAnnouncement.getProjectId())) { + throw new BadRequestException("请求参数错误"); + } + if (projectGroupService.compareProjectAccessLevel(projectId, token, rawAnnouncement.getAnnouncementPublisherId()) < 0) { + throw new ForbiddenException("无权修改该公告"); + } + return removeById(announcementId); + } + + } diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectGroupServiceImpl.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectGroupServiceImpl.java index 96cc4d1..4a59bc6 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectGroupServiceImpl.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectGroupServiceImpl.java @@ -1,21 +1,17 @@ package cn.edu.hfut.rmdjzz.projectmanagement.service.impl; import cn.edu.hfut.rmdjzz.projectmanagement.entity.ProjectGroup; -import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectDto; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectGroupDto; -import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException; import cn.edu.hfut.rmdjzz.projectmanagement.mapper.ProjectGroupMapper; import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectGroupService; import cn.edu.hfut.rmdjzz.projectmanagement.utils.TokenUtils; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.RequestPage; -import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -117,14 +113,27 @@ public class ProjectGroupServiceImpl extends ServiceImpllambdaQuery() + .select(ProjectGroup::getProjectAccessLevel) + .eq(ProjectGroup::getStaffId, targetId) + .eq(ProjectGroup::getProjectId, projectId) + ).getProjectAccessLevel(); + + if (targetLevel == null) { + targetLevel = 0; + } + return Integer.compare(getProjectAccessLevel(token, projectId), targetLevel); } @Override - public Page getOnePageProjectNumber(RequestPage page, Integer projectId){ - IPage numberPage = baseMapper.findNumber(page.getPage(), projectId); - return (Page) numberPage; + public Page pageProjectMembers(RequestPage page, Integer projectId) { + return baseMapper.selectMembersByPage(page.getPage(), projectId); + } + + @Override + public List listProjectMembers(Integer projectId) { + return baseMapper.selectMembersByList(projectId); } @Override diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectServiceImpl.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectServiceImpl.java index 1e8847d..f37c5f2 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectServiceImpl.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectServiceImpl.java @@ -40,7 +40,7 @@ public class ProjectServiceImpl extends ServiceImpl impl @Override public ProjectProcessDto getProjectProcess(String token, Integer projectId) throws ForbiddenException { - if(projectGroupService.getProjectAccessLevel(token, projectId) == 0) { + if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) { throw new ForbiddenException("无查看权限"); } return baseMapper.findProjectProcess(projectId); @@ -62,7 +62,7 @@ public class ProjectServiceImpl extends ServiceImpl impl Integer staffId = TokenUtils.getStaffId(token); Project project = new Project(); project.setProjectId(projectId); - Project targetProject = baseMapper.selectOne(Wrappers.lambdaQuery().eq(Project::getProjectId, project.getProjectId())); + Project targetProject = baseMapper.selectById(project.getProjectId()); if (targetProject == null) throw new BadRequestException("项目不存在"); if (!Objects.equals(staffId, targetProject.getProjectCreator())) @@ -87,7 +87,7 @@ public class ProjectServiceImpl extends ServiceImpl impl if (project.getExpectedCompletion() == null) { project.setExpectedCompletion((short) 100); } else if (project.getExpectedCompletion() < 0 || project.getExpectedCompletion() > 100 || - !project.checkProjectDate() || project.getProjectManMonth().compareTo(new BigDecimal("0")) == -1 + !project.checkProjectDate() || project.getProjectManMonth().compareTo(new BigDecimal("0")) < 0 ) { throw new BadRequestException("参数错误"); } @@ -107,7 +107,7 @@ public class ProjectServiceImpl extends ServiceImpl impl public Boolean checkOpenStatus(Integer projectId) { if (projectId == null || projectId < 1) return false; - Project project = baseMapper.selectOne(Wrappers.lambdaQuery().eq(Project::getProjectId, projectId)); + Project project = baseMapper.selectById(projectId); return project != null && !project.getCompleted(); } @@ -116,7 +116,7 @@ public class ProjectServiceImpl extends ServiceImpl impl if (!staffId.equals(project.getProjectCreator())) { throw new BadRequestException("无权操作"); } - Project rawProject = baseMapper.selectOne(Wrappers.lambdaQuery().eq(Project::getProjectId, project.getProjectId())); + Project rawProject = baseMapper.selectById(project.getProjectId()); if (!project.checkModification(rawProject)) { throw new BadRequestException("参数错误"); } diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/TokenUtils.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/TokenUtils.java index e76d9f3..b34cbda 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/TokenUtils.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/TokenUtils.java @@ -19,6 +19,7 @@ import java.util.Date; public final class TokenUtils { public final static String pvKey = "SignedByRMDJZZ"; + //TODO: 加个大权限 public static String getToken(String staffUsername, Integer staffId, Long duration) { return JWT.create() .withClaim("staffUsername", staffUsername) diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/ValidateUtils.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/ValidateUtils.java new file mode 100644 index 0000000..1181264 --- /dev/null +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/ValidateUtils.java @@ -0,0 +1,35 @@ +package cn.edu.hfut.rmdjzz.projectmanagement.utils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.validation.ConstraintViolation; +import javax.validation.Validator; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * @author 佘语殊 + * @since 2022/7/7 17:41 + */ +@Component +public class ValidateUtils { + + @Autowired + private Validator validator; + + /** + * 利用hibernate validator对对象进行手动校验 + * + * @return 返回校验失败的信息,若校验成功则返回空值 + */ + public List validate(T t) { + if (t == null) { + return List.of("null"); + } + Set> validate = validator.validate(t); + return validate.stream().map(ConstraintViolation::getMessage).collect(Collectors.toList()); + } + +} diff --git a/src/test/java/cn/edu/hfut/rmdjzz/projectmanagement/MybatisPlusTests.java b/src/test/java/cn/edu/hfut/rmdjzz/projectmanagement/MybatisPlusTests.java index 7f28710..980c6ba 100644 --- a/src/test/java/cn/edu/hfut/rmdjzz/projectmanagement/MybatisPlusTests.java +++ b/src/test/java/cn/edu/hfut/rmdjzz/projectmanagement/MybatisPlusTests.java @@ -1,8 +1,10 @@ package cn.edu.hfut.rmdjzz.projectmanagement; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Project; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.Task; import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectService; import cn.edu.hfut.rmdjzz.projectmanagement.service.IStaffService; +import cn.edu.hfut.rmdjzz.projectmanagement.service.ITaskService; import cn.edu.hfut.rmdjzz.projectmanagement.service.impl.ProjectServiceImpl; import cn.edu.hfut.rmdjzz.projectmanagement.utils.WrapperUtils; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.RequestPage; @@ -27,10 +29,12 @@ import java.util.Map; @SpringBootTest public class MybatisPlusTests { - @Resource + @Autowired private IStaffService staffService; @Autowired private IProjectService projectService; + @Autowired + private ITaskService taskService; @Resource private ObjectMapper objectMapper; @@ -87,4 +91,27 @@ public class MybatisPlusTests { .getOnePageProject("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkdXJhdGlvbiI6MTgwMDAsInN0YWZmVXNlcm5hbWUiOiJtaWtlIiwiZXhwIjoxNjU3MDkzNTU1LCJpYXQiOjE2NTcwNzU1NTUsInN0YWZmSWQiOjF9.g8l01dnHglt223469Z03i9gqZL8P13Fo7KoaA1pf310", page, map))); } + + @SneakyThrows + @Test + public void updateTest() { + Task task = objectMapper.readValue(""" + { + "taskType": "需求", + "taskFatherId": 16, + "taskName": "1-2", + "taskHolderId": 3, + "taskPriority": 2, + "taskStartTime": 1657137600, + "taskEndTime": 1657144800, + "taskDescription": "dasdasdsadasdasd", + "attachedInfo": { + "demandSource": "内部需求" + }, + "taskId": 23, + "taskStatus": "待进行" + } + """, Task.class); + taskService.updateById(task); + } } diff --git a/src/test/java/cn/edu/hfut/rmdjzz/projectmanagement/ValidateTests.java b/src/test/java/cn/edu/hfut/rmdjzz/projectmanagement/ValidateTests.java new file mode 100644 index 0000000..3ca16b6 --- /dev/null +++ b/src/test/java/cn/edu/hfut/rmdjzz/projectmanagement/ValidateTests.java @@ -0,0 +1,52 @@ +package cn.edu.hfut.rmdjzz.projectmanagement; + +import cn.edu.hfut.rmdjzz.projectmanagement.utils.ValidateUtils; +import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.RequestPage; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.SneakyThrows; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import javax.validation.ConstraintViolation; +import javax.validation.Validator; +import java.util.Set; + +/** + * @author 佘语殊 + * @since 2022/7/7 17:13 + */ +@SpringBootTest +public class ValidateTests { + + @Autowired + private ObjectMapper objectMapper; + @Autowired + private Validator validator; + @Autowired + private ValidateUtils validateUtils; + + @SneakyThrows + @Test + public void manuallyValidateTest() { + RequestPage page = new RequestPage(); + page.setPageCurrent(0); + page.setPageSize(0); + + Set> validate = validator.validate(page); + //System.out.println(objectMapper.writeValueAsString(validate)); + for (ConstraintViolation violation : validate) { + System.out.println(violation.getMessage()); + } + } + + @SneakyThrows + @Test + public void utilTest() { + RequestPage page = new RequestPage(); + page.setPageCurrent(0); + page.setPageSize(0); + + System.out.println(objectMapper.writeValueAsString(validateUtils.validate(page))); + } +}