feat: 新增从项目 id 获取项目详细信息的接口,并实现

This commit is contained in:
筱锋xiao_lfeng 2024-04-14 16:15:22 +08:00
parent 3d7f457ef3
commit fd22ba9dc6
Signed by: XiaoLFeng
GPG Key ID: F693AA12AABBFA87
6 changed files with 206 additions and 136 deletions

View File

@ -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<String> tags,
@RequestParam(required = false) List<String> isFinish,
@RequestParam(required = false, defaultValue = "1") Integer page,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
@RequestParam(required = false) List<String> tags,
@RequestParam(required = false) List<String> 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 获取项目详细信息
* <hr/>
* 根据项目 id 获取项目的详细信息在地址后面有 projectId path 部分需要补充完整不可缺少
*
* @param projectId 项目 id
* @param request 请求
* @return {@link BaseResponse}
*/
@GetMapping("/project/get")
public BaseResponse projectGet(
@RequestParam(required = false) List<String> tags,
@RequestParam(required = false) List<String> 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<String> tags,
@RequestParam(required = false) List<String> 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<String> tags,
@RequestParam(required = false) List<String> 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);
}

View File

@ -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;
/**
* <h1>project 数据表</h1>
* <hr/>
* 映射 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 {
/**
* 主键
* <hr/>
* 主键自增
*/
private Long id;
private Long principalId;
private String tags;
private Integer cycle;
/**
* 项目名称
* <hr/>
* 项目名称最长 255 字符
*/
private String name;
private String file;
/**
* 项目负责人
* <hr/>
* 项目负责人关联 user
*/
private Long principalId;
/**
* 项目描述
* <hr/>
* 项目描述需要存储 json 数据
*/
private String description;
private Integer isDelete;
/**
* 项目标签
* <hr/>
* 项目标签需要存储 json 数据项目类型web大数据等
*/
private String tags;
/**
* 项目周期
* <hr/>
* 项目周期单位
*/
private Integer cycle;
/**
* 项目工作量
* <hr/>
* 项目工作量单位人天
*/
private Integer workLoad;
/**
* 项目文件
* <hr/>
* 项目文件需要存储 json 数据文件名UUID 生成值对于 JSON 内部只需要存储 UUID 信息以及加上文件尾缀即可
* <p>
* 例如[UUID].pdf, [UUID].png, [UUID].docx
*/
private String files;
/**
* 项目开始时间
* <hr/>
* 项目开始时间, 格式yyyy-MM-dd
*/
private Date beginTime;
/**
* 项目完成时间
* <hr/>
* 项目完成时间, 格式yyyy-MM-dd
*/
private Date completeTime;
/**
* 项目截止时间
* <hr/>
* 项目截止时间, 格式yyyy-MM-dd
* <p>
* 项目截止时间为最终的截止时间即甲方要求的最终结束周期
*/
private Date deadline;
/**
* 项目状态
* <hr/>
* 项目状态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;
/**
* 创建时间
* <hr/>
* 创建时间格式1234567890123
*/
private Timestamp createdAt;
/**
* 更新时间
* <hr/>
* 更新时间格式1234567890123
*/
private Timestamp updatedAt;
/**
* 是否删除
* <hr/>
* 是否删除0: 1:
*/
private Boolean isDelete;
}

View File

@ -21,13 +21,6 @@ public interface ProjectService {
BaseResponse editHeader(HttpServletRequest request, ProjectShowVO projectShowVO, Integer id);
BaseResponse get(
HttpServletRequest request,
List<String> tags,
List<String> isFinish,
Integer page,
Integer pageSize);
BaseResponse getByName(String name);
BaseResponse projectDelete(HttpServletRequest request, List<Long> id);
@ -35,12 +28,12 @@ public interface ProjectService {
BaseResponse projectAdd(HttpServletRequest request, ProjectInfoVO projectVO);
BaseResponse workGet(
HttpServletRequest request,
List<String> tags,
List<String> isFinish,
Integer is,
Integer page,
Integer pageSize);
HttpServletRequest request,
List<String> tags,
List<String> 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 获取项目的详细信息
* <hr/>
* 根据项目所属 id 获取项目的详细信息根据用户所属角色组的不同返回不同的内容
*
* @param request 获取请求体
* @param projectId 项目 id
* @return 根据用户所属角色组的不同返回不同的内容
*/
BaseResponse getProjectById(HttpServletRequest request, Long projectId);
}

View File

@ -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<String> tags,
List<String> isFinish,
Integer page,
Integer pageSize
) {
log.info("\t> 执行 Service 层 ProjectService.get 方法");
//获取用户
Long userId = Processing.getAuthHeaderToUserId(request);
//根据标签查询
if (tags != null && !tags.isEmpty()) {
List<ProjectDO> projectDOList = projectDAO.get(userId, tags, isFinish);
List<ProjectSimpleVO> 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<ProjectSimpleVO> pageData = projectSimpleVOList.subList(start,
Math.min(end, projectSimpleVOList.size()));
return ResultUtil.success(pageData);
}
//根据状态查询
if (isFinish != null && !isFinish.isEmpty()) {
List<ProjectDO> projectDOList = projectDAO.get(userId, tags, isFinish);
List<ProjectSimpleVO> 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<ProjectSimpleVO> 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 方法");

View File

@ -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("==================================================");
}
}

View File

@ -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;
/**
* <h1>结果工具类</h1>
* <hr/>
* 用于返回结果
*
* @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<String, String> 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<String, String> 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<String, Object> 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<String, Object> map = new HashMap<>();
map.put("errorMessage", message);
map.put("errorData", data);
return new BaseResponse(output, code, message, map);
}
public static @NotNull ResponseEntity<BaseResponse> error(String output, Integer code, String message) {
log.warn("失败: 错误码[" + code + "] {} - {}", output, message);
log.info("==================================================");
logBack(code, output, message, null);
HashMap<String, Object> map = new HashMap<>();
map.put("errorMessage", message);
return ResponseEntity.status(500)
.body(new BaseResponse(output, code, message));
.body(new BaseResponse(output, code, message, map));
}
/**
* <h1>日志记录</h1>
* <hr/>
* 用户返回错误相关的日志内容
*
* @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);
}
}
}