diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectController.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectController.java index 2802976..163a15c 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectController.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectController.java @@ -1,7 +1,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.controller; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Project; -import cn.edu.hfut.rmdjzz.projectmanagement.entity.ResultProject; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultProject; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectGroupService; import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectService; @@ -17,7 +17,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; -import java.util.HashMap; import java.util.Map; /** diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/TaskController.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/TaskController.java index 870b22b..8d12035 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/TaskController.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/TaskController.java @@ -1,7 +1,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.controller; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Task; -import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultTask; import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectGroupService; import cn.edu.hfut.rmdjzz.projectmanagement.service.ITaskService; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseList; @@ -26,13 +26,13 @@ public class TaskController { private IProjectGroupService projectGroupService; @SneakyThrows - @GetMapping("/subtask/{fatherId}") - public ResponseList getSubTaskList( + @GetMapping("/{fatherId}/subtask") + public ResponseList getSubTaskList( @RequestHeader("Token") String token, @PathVariable("projectId") Integer projectId, @PathVariable("fatherId") Long fatherId ) { - List result = taskService.getTaskList(token, projectId, fatherId); + List result = taskService.getSubTaskList(token, projectId, fatherId); return ResponseList.ofSuccess("查询成功", result); } @@ -55,7 +55,7 @@ public class TaskController { } @SneakyThrows - @PostMapping("/") + @PostMapping public ResponseMap createTask( @RequestHeader("Token") String token, @PathVariable("projectId") Integer projectId, @@ -67,7 +67,7 @@ public class TaskController { } @SneakyThrows - @PutMapping("/") + @PutMapping public ResponseMap modifyTask( @RequestHeader("Token") String token, @PathVariable("projectId") Integer projectId, @@ -77,4 +77,15 @@ public class TaskController { taskService.modifyTask(token,task); return ResponseMap.ofSuccess("操作成功"); } + @SneakyThrows + @DeleteMapping + public ResponseMap deleteTaskAndSubTask( + @RequestHeader("Token") String token, + @PathVariable("projectId") Integer projectId, + @RequestParam("taskId") Long taskId + ) { + taskService.deleteTaskAndSubTask(token, projectId, taskId); + return ResponseMap.ofSuccess("删除成功"); + } + } 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 59f15ee..a5b4746 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 @@ -20,12 +20,11 @@ public class Project { private Integer projectId; private String projectName; //TODO: 时间线顺序判断 - private LocalDate projectStartTime; - private LocalDate projectOnlineTime; - private LocalDate projectFirstTestTime; - private LocalDate projectFinalTestTime; - private LocalDate projectEndTime; - private LocalDate projectCloseTime; + private LocalDate projectStartDate; + private LocalDate projectOnlineDate; + private LocalDate projectFirstTestDate; + private LocalDate projectFinalTestDate; + private LocalDate projectEndDate; private String projectAbbreviation; private Integer projectClassId; private Integer projectSubclassId; @@ -44,5 +43,6 @@ public class Project { @TableLogic private Boolean deleted; private Integer projectCreator; - private LocalDateTime projectCreateTime; + private LocalDateTime projectCreatedTime; + private LocalDate projectClosedDate; } diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/ResultProject.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/query/ResultProject.java similarity index 66% rename from src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/ResultProject.java rename to src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/query/ResultProject.java index eabeed4..2fee21a 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/ResultProject.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/query/ResultProject.java @@ -1,5 +1,8 @@ -package cn.edu.hfut.rmdjzz.projectmanagement.entity; +package cn.edu.hfut.rmdjzz.projectmanagement.entity.query; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Data; @@ -11,7 +14,9 @@ import java.time.LocalDate; */ @Data @AllArgsConstructor +@TableName(autoResultMap = true) public class ResultProject { + @TableId Integer projectId; String projectName; Integer projectCreator; @@ -21,7 +26,7 @@ public class ResultProject { String projectSubclassName; Boolean deleted; Boolean completed; - LocalDate projectCloseTime; + LocalDate projectClosedDate; Integer completeNum; Integer totalNum; diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/query/ResultTask.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/query/ResultTask.java new file mode 100644 index 0000000..e986087 --- /dev/null +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/query/ResultTask.java @@ -0,0 +1,33 @@ +package cn.edu.hfut.rmdjzz.projectmanagement.entity.query; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Map; + +/** + * @author 佘语殊 + * @since 2022/7/6 10:25 + */ +@Data +public class ResultTask { + private Long taskId; + private String taskName; + private Integer taskProjectId; + private Integer taskHolderId; + private String taskHolderName; + private String taskStatus; + private String taskType; + private Long taskFatherId; + private LocalDateTime taskCreatedTime; + private LocalDateTime taskStartTime; + private LocalDateTime taskEndTime; + private LocalDateTime taskClosedTime; + private Integer taskPriority; + private String taskDescription; + @TableField(typeHandler = JacksonTypeHandler.class) + private Map attachedInfo; + private Boolean hasChildren; +} diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectMapper.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectMapper.java index d4fd88c..2457e2b 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectMapper.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectMapper.java @@ -1,7 +1,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.mapper; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Project; -import cn.edu.hfut.rmdjzz.projectmanagement.entity.ResultProject; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultProject; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -23,35 +23,5 @@ public interface ProjectMapper extends BaseMapper { """) Long findProjectCount(@Param("id") Integer staffId); - @Select(""" - SELECT * FROM - (SELECT project_id, - project_name, - contract_amount, - project_importance, - project_creator, - pt1.project_class_name as project_class_name, - pt2.project_class_name as project_subclass_name, - is_completed, - is_deleted, - project_close_time - FROM project join project_type pt1 on project.project_class_id = pt1.project_class_id - join project_type pt2 on project.project_subclass_id = pt2.project_class_id - WHERE project_id IN (SELECT DISTINCT project_id FROM project_group WHERE staff_id = #{id})) AS T - ${ew.customSqlSegment} - """) - @Results({ - @Result(column = "project_id", property = "projectId", id = true), - @Result(column = "project_name", property = "projectName"), - @Result(column = "contract_amount", property = "contractAmount"), - @Result(column = "project_importance", property = "projectImportance"), - @Result(column = "project_class_name", property = "projectClassName"), - @Result(column = "project_subclass_name", property = "projectSubclassName"), - @Result(column = "project_class_name", property = "projectClassName"), - @Result(column = "is_completed", property = "completed"), - @Result(column = "is_deleted", property = "deleted"), - @Result(column = "project_close_time", property = "projectCloseTime"), - @Result(column = "project_creator", property = "projectCreator") - }) IPage findMyProject(IPage pg, @Param("id") Integer staff_id, @Param(Constants.WRAPPER) Wrapper wrapper); } diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/TaskMapper.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/TaskMapper.java index 787e414..5b18bde 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/TaskMapper.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/TaskMapper.java @@ -1,11 +1,16 @@ package cn.edu.hfut.rmdjzz.projectmanagement.mapper; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Task; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultTask; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * @author 张韬 * created at 2022/7/4 14:52 */ public interface TaskMapper extends BaseMapper { + List selectSubTaskList(@Param("projectId") Integer projectId, @Param("fatherId") Long fatherId); } diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectService.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectService.java index f1791e8..c3423c7 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectService.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectService.java @@ -1,7 +1,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.service; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Project; -import cn.edu.hfut.rmdjzz.projectmanagement.entity.ResultProject; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultProject; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.RequestPage; diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/ITaskService.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/ITaskService.java index 7b6527f..5474d64 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/ITaskService.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/ITaskService.java @@ -1,7 +1,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.service; -import cn.edu.hfut.rmdjzz.projectmanagement.entity.Staff; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Task; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultTask; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import com.baomidou.mybatisplus.extension.service.IService; @@ -12,14 +12,23 @@ import java.util.List; * created at 2022/7/4 14:49 */ public interface ITaskService extends IService { - List getTaskList(String token,Integer projectId,Long fatherId) throws BadRequestException; + List getSubTaskList(String token, Integer projectId, Long fatherId) throws BadRequestException; + Boolean existSubTask(String token, Integer projectId, Long taskId) throws BadRequestException; + Boolean deleteTaskAndSubTask(String token, Integer projectId, Long taskId) throws BadRequestException; - Boolean closeTaskAndSubTask(String token, Integer projectId, Long taskId) throws BadRequestException; - Integer checkHolder(Integer staffId,Long taskId); - Integer checkHolder(String token,Long taskId); - List getMyTaskList(String token,Integer projectId) throws BadRequestException; + + Boolean closeTaskAndSubTask(String token, Integer projectId, Long taskId) throws BadRequestException; + + Integer checkHolder(Integer staffId, Long taskId); + + Integer checkHolder(String token, Long taskId); + + List getMyTaskList(String token, Integer projectId) throws BadRequestException; + Boolean canBeDone(Long taskId); - Task insertTask(String token,Task task) throws BadRequestException; - Task modifyTask(String token,Task task) throws BadRequestException; + + Task insertTask(String token, Task task) throws BadRequestException; + + Task modifyTask(String token, Task task) throws BadRequestException; } 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 15fdf13..6d05669 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 @@ -1,7 +1,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.service.impl; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Project; -import cn.edu.hfut.rmdjzz.projectmanagement.entity.ResultProject; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultProject; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException; import cn.edu.hfut.rmdjzz.projectmanagement.mapper.ProjectMapper; @@ -60,7 +60,7 @@ public class ProjectServiceImpl extends ServiceImpl impl if (targetProject.getCompleted()) throw new BadRequestException("该项目已结项"); targetProject.setCompleted(true); - targetProject.setProjectCloseTime(LocalDate.now()); + targetProject.setProjectClosedDate(LocalDate.now()); if (baseMapper.updateById(targetProject) == 1) return true; throw new BadRequestException("操作失败"); @@ -70,14 +70,14 @@ public class ProjectServiceImpl extends ServiceImpl impl public Boolean createProject(String token, Project project) throws TokenException, BadRequestException { project.setProjectId(null); project.setCompleted(false); - project.setProjectCreateTime(null); + project.setProjectCreatedTime(null); project.setProjectCreator(TokenUtils.getStaffId(token)); - project.setProjectCloseTime(null); + project.setProjectClosedDate(null); if (project.getExpectedCompletion() == null) { project.setExpectedCompletion((short) 100); } else if (project.getExpectedCompletion() < 0 || project.getExpectedCompletion() > 100 || - project.getProjectStartTime() == null || project.getProjectEndTime() == null || - project.getProjectStartTime().isAfter(project.getProjectEndTime()) + project.getProjectStartDate() == null || project.getProjectEndDate() == null || + project.getProjectStartDate().isAfter(project.getProjectEndDate()) ) { throw new BadRequestException("参数错误"); } diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/TaskServiceImpl.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/TaskServiceImpl.java index 057a856..439c13f 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/TaskServiceImpl.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/TaskServiceImpl.java @@ -1,6 +1,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.service.impl; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Task; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultTask; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException; import cn.edu.hfut.rmdjzz.projectmanagement.mapper.TaskMapper; @@ -30,11 +31,11 @@ public class TaskServiceImpl extends ServiceImpl implements IT //FIXME: 抛出未授权异常 @Override - public List getTaskList(String token, Integer projectId, Long fatherId) throws BadRequestException { + public List getSubTaskList(String token, Integer projectId, Long fatherId) throws BadRequestException { if (projectGroupService.getUserLevelInGroup(token, projectId) == 0 || fatherId == null) { throw new BadRequestException("错误的访问参数"); } - return baseMapper.selectList(Wrappers.lambdaQuery().eq(Task::getTaskProjectId, projectId).eq(Task::getTaskFatherId, fatherId)); + return baseMapper.selectSubTaskList(projectId, fatherId); } @Override @@ -97,7 +98,7 @@ public class TaskServiceImpl extends ServiceImpl implements IT Wrappers.lambdaUpdate() .in(Task::getTaskId, res) .set(Task::getTaskStatus, "关闭") - .set(Task::getTaskClosedTime,LocalDateTime.now()) + .set(Task::getTaskClosedTime, LocalDateTime.now()) ); if (list == null || list.isEmpty()) break; res = list.stream().map(Task::getTaskId).collect(Collectors.toList()); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 3157889..1e8f8be 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -20,6 +20,7 @@ spring: pathmatch: matching-strategy: ant_path_matcher mybatis-plus: + mapper-locations: classpath:mapper/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl server: @@ -30,4 +31,4 @@ server: encoding: charset: UTF-8 force: true - enabled: true \ No newline at end of file + enabled: true diff --git a/src/main/resources/mapper/ProjectMapper.xml b/src/main/resources/mapper/ProjectMapper.xml new file mode 100644 index 0000000..7f4eac7 --- /dev/null +++ b/src/main/resources/mapper/ProjectMapper.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + diff --git a/src/main/resources/mapper/TaskMapper.xml b/src/main/resources/mapper/TaskMapper.xml new file mode 100644 index 0000000..747c4af --- /dev/null +++ b/src/main/resources/mapper/TaskMapper.xml @@ -0,0 +1,28 @@ + + + + + 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 834d6ce..7f28710 100644 --- a/src/test/java/cn/edu/hfut/rmdjzz/projectmanagement/MybatisPlusTests.java +++ b/src/test/java/cn/edu/hfut/rmdjzz/projectmanagement/MybatisPlusTests.java @@ -1,11 +1,11 @@ package cn.edu.hfut.rmdjzz.projectmanagement; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Project; -import cn.edu.hfut.rmdjzz.projectmanagement.entity.Staff; import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectService; import cn.edu.hfut.rmdjzz.projectmanagement.service.IStaffService; 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; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -73,4 +73,18 @@ public class MybatisPlusTests { System.out.println(objectMapper.writeValueAsString(((ProjectServiceImpl) projectService).getBaseMapper() .findMyProject(new Page<>(1, 5), 1, Wrappers.query()))); } + + @SneakyThrows + @Test + public void findProjectTest() { + RequestPage page = new RequestPage(); + page.setPageCurrent(1); + page.setPageSize(5); + + Map map = new HashMap<>(); + map.put("completed", true); + System.out.println(objectMapper.writeValueAsString(projectService + .getOnePageProject("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkdXJhdGlvbiI6MTgwMDAsInN0YWZmVXNlcm5hbWUiOiJtaWtlIiwiZXhwIjoxNjU3MDkzNTU1LCJpYXQiOjE2NTcwNzU1NTUsInN0YWZmSWQiOjF9.g8l01dnHglt223469Z03i9gqZL8P13Fo7KoaA1pf310", + page, map))); + } }