diff --git a/src/main/java/com/jsl/oa/controllers/ProjectController.java b/src/main/java/com/jsl/oa/controllers/ProjectController.java index 11c8ec6..cb201d5 100755 --- a/src/main/java/com/jsl/oa/controllers/ProjectController.java +++ b/src/main/java/com/jsl/oa/controllers/ProjectController.java @@ -51,7 +51,6 @@ public class ProjectController { } - /** * @param id 要查询的 id * @return {@link BaseResponse} @@ -77,28 +76,34 @@ public class ProjectController { */ @GetMapping("/project/get/custom") public BaseResponse projectGetCustom( - @RequestParam(required = false) List tags, - @RequestParam(required = false) List isFinish, - @RequestParam(required = false, defaultValue = "1") Integer page, - @RequestParam(required = false, defaultValue = "10") Integer pageSize) { + @RequestParam(required = false) List tags, + @RequestParam(required = false) List isFinish, + @RequestParam(required = false, defaultValue = "1") Integer page, + @RequestParam(required = false, defaultValue = "10") Integer pageSize) { log.info("请求接口[GET]: /project/get/custom"); return projectService.tGet(tags, isFinish, page, pageSize); } /** - * 我负责的界面的获取项目 + * 根据项目 id 获取项目详细信息 + *
+ * 根据项目 id 获取项目的详细信息,在地址后面有 projectId 的 path 部分需要补充完整(不可缺少) * + * @param projectId 项目 id + * @param request 请求 * @return {@link BaseResponse} */ - @GetMapping("/project/get") - public BaseResponse projectGet( - @RequestParam(required = false) List tags, - @RequestParam(required = false) List isFinish, - @RequestParam(required = false, defaultValue = "1") Integer page, - @RequestParam(required = false, defaultValue = "10") Integer pageSize, - HttpServletRequest request) { + @GetMapping("/project/get/{projectId}") + public BaseResponse getProjectById( + @PathVariable String projectId, + HttpServletRequest request + ) { log.info("请求接口[GET]: /project/get"); - return projectService.get(request, tags, isFinish, page, pageSize); + // 对 projectId 进行判断 + if (!projectId.matches("^[0-9]+$")) { + return ResultUtil.error("参数 projectId 不是一个数字", ErrorCode.PARAMETER_ERROR); + } + return projectService.getProjectById(request, Long.parseLong(projectId)); } /** @@ -108,12 +113,12 @@ public class ProjectController { */ @GetMapping("/project/child/get") public BaseResponse projectWorkGet( - @RequestParam(required = false) List tags, - @RequestParam(required = false) List isFinish, - @RequestParam(required = false) Integer is, - @RequestParam(required = false, defaultValue = "1") Integer page, - @RequestParam(required = false, defaultValue = "10") Integer pageSize, - HttpServletRequest request) { + @RequestParam(required = false) List tags, + @RequestParam(required = false) List isFinish, + @RequestParam(required = false) Integer is, + @RequestParam(required = false, defaultValue = "1") Integer page, + @RequestParam(required = false, defaultValue = "10") Integer pageSize, + HttpServletRequest request) { log.info("请求接口[GET]: /project/work/get"); return projectService.workGet(request, tags, isFinish, is, page, pageSize); } diff --git a/src/main/java/com/jsl/oa/model/dodata/ProjectDO.java b/src/main/java/com/jsl/oa/model/dodata/ProjectDO.java index b5d013c..b83fd08 100755 --- a/src/main/java/com/jsl/oa/model/dodata/ProjectDO.java +++ b/src/main/java/com/jsl/oa/model/dodata/ProjectDO.java @@ -1,16 +1,15 @@ package com.jsl.oa.model.dodata; -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Data; import lombok.experimental.Accessors; +import java.sql.Date; import java.sql.Timestamp; /** *

project 数据表

*
- * 映射 oa_project 数据表内容进入自定义实体类 + * 映射 oa_project 数据表内容进入自定义实体类, 该实体类用于存储数据表中的数据。 * * @author 筱锋xiao_lfeng * @since v1.1.0 @@ -18,24 +17,99 @@ import java.sql.Timestamp; */ @Data @Accessors(chain = true) -@JsonInclude(JsonInclude.Include.NON_NULL) public class ProjectDO { + /** + * 主键 + *
+ * 主键,自增 + */ private Long id; - private Long principalId; - private String tags; - private Integer cycle; + /** + * 项目名称 + *
+ * 项目名称,最长 255 字符 + */ private String name; - private String file; + /** + * 项目负责人 + *
+ * 项目负责人,关联 user 表 + */ + private Long principalId; + /** + * 项目描述 + *
+ * 项目描述,需要存储 json 数据 + */ private String description; - private Integer isDelete; + /** + * 项目标签 + *
+ * 项目标签,需要存储 json 数据(项目类型:web,大数据等) + */ + private String tags; + /** + * 项目周期 + *
+ * 项目周期,单位:天 + */ + private Integer cycle; + /** + * 项目工作量 + *
+ * 项目工作量,单位:人天 + */ private Integer workLoad; + /** + * 项目文件 + *
+ * 项目文件,需要存储 json 数据(文件名:UUID 生成值)。对于 JSON 内部只需要存储 UUID 信息以及加上文件尾缀即可。 + *

+ * 例如:[UUID].pdf, [UUID].png, [UUID].docx + */ + private String files; + /** + * 项目开始时间 + *


+ * 项目开始时间, 格式:yyyy-MM-dd + */ + private Date beginTime; + /** + * 项目完成时间 + *
+ * 项目完成时间, 格式:yyyy-MM-dd + */ + private Date completeTime; + /** + * 项目截止时间 + *
+ * 项目截止时间, 格式:yyyy-MM-dd + *

+ * 项目截止时间为最终的截止时间,即甲方要求的最终结束周期 + */ + private Date deadline; + /** + * 项目状态 + *


+ * 项目状态(draft: 草稿,progress: 进行,pause: 暂停,abnormal: 异常,complete: 完成) + */ private String status; - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") - private Timestamp beginTime; - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") - private Timestamp completeTime; - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") - private Timestamp deadline; + /** + * 创建时间 + *
+ * 创建时间,格式:1234567890123 + */ private Timestamp createdAt; + /** + * 更新时间 + *
+ * 更新时间,格式:1234567890123 + */ private Timestamp updatedAt; + /** + * 是否删除 + *
+ * 是否删除(0: 否,1: 是) + */ + private Boolean isDelete; } diff --git a/src/main/java/com/jsl/oa/services/ProjectService.java b/src/main/java/com/jsl/oa/services/ProjectService.java index 2e67be1..5e333bb 100644 --- a/src/main/java/com/jsl/oa/services/ProjectService.java +++ b/src/main/java/com/jsl/oa/services/ProjectService.java @@ -21,13 +21,6 @@ public interface ProjectService { BaseResponse editHeader(HttpServletRequest request, ProjectShowVO projectShowVO, Integer id); - BaseResponse get( - HttpServletRequest request, - List tags, - List isFinish, - Integer page, - Integer pageSize); - BaseResponse getByName(String name); BaseResponse projectDelete(HttpServletRequest request, List id); @@ -35,12 +28,12 @@ public interface ProjectService { BaseResponse projectAdd(HttpServletRequest request, ProjectInfoVO projectVO); BaseResponse workGet( - HttpServletRequest request, - List tags, - List isFinish, - Integer is, - Integer page, - Integer pageSize); + HttpServletRequest request, + List tags, + List isFinish, + Integer is, + Integer page, + Integer pageSize); BaseResponse projectWorkAdd(HttpServletRequest request, ProjectWorkVO projectWorkVO); @@ -53,4 +46,15 @@ public interface ProjectService { BaseResponse getWorkById(Integer id); BaseResponse projectPrincipalGet(); + + /** + * 从项目 id 获取项目的详细信息 + *
+ * 根据项目所属 id 获取项目的详细信息,根据用户所属角色组的不同返回不同的内容 + * + * @param request 获取请求体 + * @param projectId 项目 id + * @return 根据用户所属角色组的不同返回不同的内容 + */ + BaseResponse getProjectById(HttpServletRequest request, Long projectId); } diff --git a/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java index 48d6726..0f0697c 100644 --- a/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java @@ -136,13 +136,13 @@ public class ProjectServiceImpl implements ProjectService { ProjectDO projectDO = projectDAO.getProjectById(projectId); - if (projectDO.getFile() == null || projectDO.getFile().equals("{}")) { + if (projectDO.getFiles() == null || projectDO.getFiles().equals("{}")) { return ResultUtil.success(null); } // 将文件内容转换为 JSON 数组 try { - Object fileJson = new ObjectMapper().readValue(projectDO.getFile(), Object.class); + Object fileJson = new ObjectMapper().readValue(projectDO.getFiles(), Object.class); return ResultUtil.success(fileJson); } catch (JsonProcessingException e) { return ResultUtil.error(ErrorCode.PROJECT_FILE_JSON_ERROR); @@ -183,6 +183,22 @@ public class ProjectServiceImpl implements ProjectService { return ResultUtil.success(userMapper.getPrincipal()); } + @Override + public BaseResponse getProjectById(HttpServletRequest request, Long projectId) { + // 对项目 id 进行数据库校验 + ProjectDO getProject = projectDAO.getProjectById(projectId); + if (getProject == null) { + return ResultUtil.error(ErrorCode.PROJECT_NOT_EXIST); + } + // 检查项目是否被删除 + if (getProject.getIsDelete()) { + return ResultUtil.error("项目已删除", ErrorCode.PROJECT_NOT_EXIST); + } + // 对项目具体信息进行检查 + // TODO: [10001] 需要检查普通用户是否有权限可以看到这一篇项目内容 + return ResultUtil.success(getProject); + } + @Override public BaseResponse projectEdit(HttpServletRequest request, @NotNull ProjectEditVO projectEdit, Long projectId) { log.info("\t> 执行 Service 层 ProjectService.projectEdit 方法"); @@ -294,56 +310,6 @@ public class ProjectServiceImpl implements ProjectService { } } - @Override - public BaseResponse get( - HttpServletRequest request, - List tags, - List isFinish, - Integer page, - Integer pageSize - ) { - log.info("\t> 执行 Service 层 ProjectService.get 方法"); - - //获取用户 - Long userId = Processing.getAuthHeaderToUserId(request); - //根据标签查询 - if (tags != null && !tags.isEmpty()) { - List projectDOList = projectDAO.get(userId, tags, isFinish); - - List projectSimpleVOList = new ArrayList<>(); - for (ProjectDO projectDO : projectDOList) { - ProjectSimpleVO projectSimpleVO1 = new ProjectSimpleVO(); - Processing.projectTosimply(projectSimpleVO1, projectDO, userDAO, objectMapper); - projectSimpleVOList.add(projectSimpleVO1); - } - //分页返回 - int start = (page - 1) * pageSize; - int end = start + pageSize; - List pageData = projectSimpleVOList.subList(start, - Math.min(end, projectSimpleVOList.size())); - return ResultUtil.success(pageData); - } - - //根据状态查询 - if (isFinish != null && !isFinish.isEmpty()) { - List projectDOList = projectDAO.get(userId, tags, isFinish); - List projectSimpleVOList = new ArrayList<>(); - for (ProjectDO projectDO : projectDOList) { - ProjectSimpleVO projectSimpleVO1 = new ProjectSimpleVO(); - Processing.projectTosimply(projectSimpleVO1, projectDO, userDAO, objectMapper); - projectSimpleVOList.add(projectSimpleVO1); - } - //分页返回 - int start = (page - 1) * pageSize; - int end = start + pageSize; - List pageData = projectSimpleVOList.subList(start, - Math.min(end, projectSimpleVOList.size())); - return ResultUtil.success(pageData); - } - return ResultUtil.success(projectMapper.get(userId)); - - } - @Override public BaseResponse workGet( HttpServletRequest request, @@ -374,7 +340,6 @@ public class ProjectServiceImpl implements ProjectService { } - @Override public BaseResponse getByName(String name) { log.info("\t> 执行 Service 层 ProjectService.getByName 方法"); diff --git a/src/main/java/com/jsl/oa/utils/BaseResponse.java b/src/main/java/com/jsl/oa/utils/BaseResponse.java index 7ee8729..d0f1cac 100755 --- a/src/main/java/com/jsl/oa/utils/BaseResponse.java +++ b/src/main/java/com/jsl/oa/utils/BaseResponse.java @@ -2,7 +2,9 @@ package com.jsl.oa.utils; import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +@Slf4j @Getter @JsonInclude(JsonInclude.Include.NON_NULL) public class BaseResponse { @@ -16,12 +18,6 @@ public class BaseResponse { this.code = code; this.message = message; this.data = data; - } - - public BaseResponse(String output, Integer code, String message) { - this.output = output; - this.code = code; - this.message = message; - this.data = null; + log.info("=================================================="); } } diff --git a/src/main/java/com/jsl/oa/utils/ResultUtil.java b/src/main/java/com/jsl/oa/utils/ResultUtil.java index af924a4..e50c690 100755 --- a/src/main/java/com/jsl/oa/utils/ResultUtil.java +++ b/src/main/java/com/jsl/oa/utils/ResultUtil.java @@ -1,75 +1,101 @@ package com.jsl.oa.utils; import lombok.extern.slf4j.Slf4j; -import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.springframework.http.ResponseEntity; +import java.util.HashMap; + /** *

结果工具类

*
* 用于返回结果 * + * @author xiao_lfeng * @version v1.1.0 * @since v1.1.0 - * @author xiao_lfeng */ @Slf4j public class ResultUtil { - @Contract(" -> new") public static @NotNull BaseResponse success() { - log.info("成功: Success[200] {}", "操作成功"); + log.info("成功: Success[200] 操作成功 - 不带数据"); log.info("=================================================="); return new BaseResponse("Success", 200, "操作成功", null); } - @Contract("_ -> new") public static @NotNull BaseResponse success(String message) { - log.info("成功: Success[200] {}", message); - log.info("=================================================="); + log.info("成功: Success[200] {} - 不带数据", message); return new BaseResponse("Success", 200, message, null); } - @Contract(value = "_ -> new", pure = true) public static @NotNull BaseResponse success(Object data) { - log.info("成功: Success[200] {}", "操作成功"); - log.info("=================================================="); + log.info("成功: Success[200] 操作成功 - 带数据"); return new BaseResponse("Success", 200, "操作成功", data); } - @Contract(value = "_, _ -> new", pure = true) public static @NotNull BaseResponse success(String message, Object data) { - log.info("成功: Success[200] {}", message); - log.info("=================================================="); + log.info("成功: Success[200] {} - 带数据", message); return new BaseResponse("Success", 200, message, data); } - @Contract("_ -> new") + public static @NotNull BaseResponse error(@NotNull String errorMessage, @NotNull ErrorCode errorCode) { + log.warn("失败: 错误码[" + errorCode.getCode() + "] {} - {} - {}", + errorCode.getOutput(), + errorCode.getMessage(), + errorMessage + ); + HashMap map = new HashMap<>(); + map.put("errorMessage", errorMessage); + return new BaseResponse(errorCode.getOutput(), errorCode.getCode(), errorCode.getMessage(), map); + } + public static @NotNull BaseResponse error(@NotNull ErrorCode errorCode) { - log.warn("失败: 错误码[" + errorCode.getCode() + "] {} - {}", errorCode.getOutput(), errorCode.getMessage()); - log.info("=================================================="); - return new BaseResponse(errorCode.getOutput(), errorCode.getCode(), errorCode.getMessage()); + logBack(errorCode.getCode(), errorCode.getOutput(), errorCode.getMessage(), null); + HashMap map = new HashMap<>(); + map.put("errorMessage", errorCode.getMessage()); + return new BaseResponse(errorCode.getOutput(), errorCode.getCode(), errorCode.getMessage(), map); } - @Contract("_, _ -> new") public static @NotNull BaseResponse error(@NotNull ErrorCode errorCode, Object data) { - log.warn("失败: 错误码[" + errorCode.getCode() + "] {} - {}", errorCode.getOutput(), errorCode.getMessage()); - log.info("=================================================="); - return new BaseResponse(errorCode.getOutput(), errorCode.getCode(), errorCode.getMessage(), data); + logBack(errorCode.getCode(), errorCode.getOutput(), errorCode.getMessage(), data); + HashMap map = new HashMap<>(); + map.put("errorMessage", errorCode.getMessage()); + map.put("errorData", data); + return new BaseResponse(errorCode.getOutput(), errorCode.getCode(), errorCode.getMessage(), map); } - @Contract(value = "_, _, _, _ -> new", pure = true) public static @NotNull BaseResponse error(String output, Integer code, String message, Object data) { - log.warn("失败: 错误码[" + code + "] {} - {}", output, message); - log.info("=================================================="); - return new BaseResponse(output, code, message, data); + logBack(code, output, message, data); + HashMap map = new HashMap<>(); + map.put("errorMessage", message); + map.put("errorData", data); + return new BaseResponse(output, code, message, map); } public static @NotNull ResponseEntity error(String output, Integer code, String message) { - log.warn("失败: 错误码[" + code + "] {} - {}", output, message); - log.info("=================================================="); + logBack(code, output, message, null); + HashMap map = new HashMap<>(); + map.put("errorMessage", message); return ResponseEntity.status(500) - .body(new BaseResponse(output, code, message)); + .body(new BaseResponse(output, code, message, map)); + } + + /** + *

日志记录

+ *
+ * 用户返回错误相关的日志内容 + * + * @param code 错误码 + * @param output 英文输出状态信息 + * @param message 中文解释消息 + * @param data 是否有数据 + */ + private static void logBack(Integer code, String output, String message, Object data) { + if (data != null) { + log.warn("失败: 错误码[{}] {} - {} - 带数据", code, output, message); + } else { + log.warn("失败: 错误码[{}] {} - {} - 不带数据", code, output, message); + } } }