Compare commits

...

9 Commits

Author SHA1 Message Date
04a5eae117 Merge branch 'develop' into feature-jie
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 18s
2024-04-18 22:31:33 +08:00
f076baeccf Merge pull request 'feature-zrx' (#24) from feature-zrx into develop
Reviewed-on: #24
2024-04-18 22:30:34 +08:00
e61b478225 Merge branch 'develop' into feature-zrx
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 15s
2024-04-18 22:30:11 +08:00
xiangZr-hhh
84b2ab983a fix:审核模块查询接口修正
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 16s
返回数据增加部分属性
2024-04-18 17:32:08 +08:00
xiangZr-hhh
f491d9a97f fix:审核查询接口修正
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 18s
2024-04-18 17:04:30 +08:00
xiangZr-hhh
0d05ea08fb fix:审核查询接口修正
增加部分权限判断
2024-04-18 16:53:11 +08:00
xiangZr-hhh
9c4cb174eb feat:新增日报模块查询我的日报接口 2024-04-18 16:08:40 +08:00
xiangZr-hhh
121b87c683 feat:新增日志模块日志添加接口 2024-04-18 15:01:05 +08:00
xiangZr-hhh
71bd92d18e patch:修正review数据库表
删除部分错误外键
2024-04-18 10:18:35 +08:00
16 changed files with 497 additions and 8 deletions

View File

@ -0,0 +1,64 @@
package com.jsl.oa.controllers;
import com.jsl.oa.model.vodata.ProjectDailyAddVO;
import com.jsl.oa.services.ProjectDailyService;
import com.jsl.oa.utils.BaseResponse;
import com.jsl.oa.utils.ErrorCode;
import com.jsl.oa.utils.Processing;
import com.jsl.oa.utils.ResultUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/**
* 项目日报(ProjectDaily)表控制层
*
* @author zrx
* @since 2024-04-18 11:40:52
*/
@Slf4j
@RestController
@RequiredArgsConstructor
public class ProjectDailyController {
/**
* 服务对象
*/
private final ProjectDailyService projectDailyService;
/**
* 新增日报
*
* @param projectDailyAddVO 日报添加实体
* @return 新增结果
*/
@PostMapping("/daily/add")
public BaseResponse add(@RequestBody @Validated ProjectDailyAddVO projectDailyAddVO,
@NotNull BindingResult bindingResult,
HttpServletRequest request) {
// 判断是否有参数错误
if (bindingResult.hasErrors()) {
return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult));
}
return projectDailyService.addDaily(projectDailyAddVO, request);
}
@GetMapping("/daily/getMyDaily")
public BaseResponse getMyDaily(HttpServletRequest request) {
return projectDailyService.getMyDaily(request);
}
}

View File

@ -0,0 +1,77 @@
package com.jsl.oa.dao;
/*
张睿相 Java
*/
import com.jsl.oa.mapper.ProjectDailyMapper;
import com.jsl.oa.mapper.ProjectMapper;
import com.jsl.oa.model.dodata.ProjectDO;
import com.jsl.oa.model.dodata.ProjectDailyDO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* ProjectDailyDAO
* <hr/>
* 用于处理日报相关的请求, 包括获取日报添加日报信息编辑日报信息等
*
* @author zrx_hhh
* @version v1.0.0
* @since v1.0.0-SNAPSHOT
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class ProjectDailyDAO {
private final ProjectDailyMapper projectDailyMapper;
private final ProjectMapper projectMapper;
public void addProjectDaily(ProjectDailyDO projectDailyDO) {
projectDailyMapper.insert(projectDailyDO);
}
public List<ProjectDailyDO> getMyProjectDaily(Long userId) {
// 日报数据数组
List<ProjectDailyDO> projectDailyDOList = new ArrayList<>();
// 先获取我负责的项目下的日报数据
//获取我负责的项目
List<ProjectDO> projectDOS = projectMapper.getAllProjectByUserId(userId);
//获取项目下对应日报
for (ProjectDO projectDO:projectDOS) {
List dailyFromProject = projectDailyMapper.getProjectDailyByProject(projectDO.getId());
projectDailyDOList.addAll(dailyFromProject);
}
// 在获取本人的发布日报
List<ProjectDailyDO> myProjectDaily = projectDailyMapper.getProjectDailyByUser(userId);
projectDailyDOList.addAll(myProjectDaily);
// 去除重复的日报信息
projectDailyDOList = projectDailyDOList.stream()
// 根据 id 属性进行去重
.collect(Collectors.toMap(ProjectDailyDO::getId,
Function.identity(), (existing, replacement) -> existing))
.values().stream()
.collect(Collectors.toList());
return projectDailyDOList;
}
}

View File

@ -58,6 +58,11 @@ public class ReviewDAO {
result);
}
public List<ReviewDO> getReviewByUser(Long uid) {
return reviewMapper.selectReviewByUser(uid);
}
public void addReview(ReviewDO reviewDO) {
reviewMapper.addReview(reviewDO);

View File

@ -0,0 +1,29 @@
package com.jsl.oa.mapper;
import com.jsl.oa.model.dodata.ProjectDailyDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 项目日报(ProjectDaily)表数据库访问层
*
* @author zrx
* @since 2024-04-18 11:40:56
*/
@Mapper
public interface ProjectDailyMapper {
void insert(ProjectDailyDO projectDailyDO);
List<ProjectDailyDO> getProjectDailyByUser(Long uid);
List<ProjectDailyDO> getProjectDailyByProject(Long pid);
}

View File

@ -43,4 +43,8 @@ public interface ReviewMapper {
@Select("SELECT * FROM organize_oa.oa_review WHERE name = #{name} AND is_delete = 0")
List<ReviewDO> selectReviewByName(String name);
@Select("SELECT * FROM organize_oa.oa_review WHERE sender_id = #{uid} AND "
+ "is_delete = 0")
List<ReviewDO> selectReviewByUser(Long uid);
}

View File

@ -0,0 +1,55 @@
package com.jsl.oa.model.dodata;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* 项目日报(ProjectDaily)实体类
*
* @author zrx
* @since 2024-04-18 11:40:56
*/
@Data
@Accessors(chain = true)
public class ProjectDailyDO {
/**
* 日报主键 自增
*/
private Long id;
/**
* 用户id
*/
private Long userId;
/**
* 项目id
*/
private Long projectId;
/**
* 日报内容
*/
private String content;
/**
* 日志发布时间
*/
private Date dailyTime;
/**
* 创建时间
*/
private Date createdAt;
/**
* 修改时间
*/
private Date updatedAt;
/**
* 是否删除
*/
private Integer isDelete;
}

View File

@ -0,0 +1,21 @@
package com.jsl.oa.model.vodata;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
public class ProjectDailyAddVO {
@NotNull(message = "项目id不能为空")
private Long projectId;
@NotBlank(message = "日报内容不能为空")
private String content;
}

View File

@ -0,0 +1,16 @@
package com.jsl.oa.model.vodata;
/*
张睿相 Java
*/
/**
* 总体描述
* <p>创建时间2024/4/18 13:50</p>
*
* @author 张睿相
* @since v1.0
*/
public class ProjectDailyVO {
}

View File

@ -8,7 +8,11 @@ import java.util.List;
@Data
public class ReviewDataVO {
private Integer dataTotal;
private Integer totalCount;
private Integer currentPage;
private Integer pageSize;
private List<ReviewVO> reviews;
}

View File

@ -0,0 +1,26 @@
package com.jsl.oa.services;
import com.jsl.oa.model.vodata.ProjectDailyAddVO;
import com.jsl.oa.utils.BaseResponse;
import javax.servlet.http.HttpServletRequest;
/**
* 项目日报(ProjectDaily)表服务接口
*
* @author zrx
* @since 2024-04-18 11:40:53
*/
public interface ProjectDailyService {
BaseResponse addDaily(ProjectDailyAddVO projectDailyAddVO, HttpServletRequest request);
BaseResponse getMyDaily(HttpServletRequest request);
}

View File

@ -0,0 +1,84 @@
package com.jsl.oa.services.impl;
/*
张睿相 Java
*/
import com.jsl.oa.dao.ProjectDAO;
import com.jsl.oa.dao.ProjectDailyDAO;
import com.jsl.oa.exception.BusinessException;
import com.jsl.oa.model.dodata.ProjectDailyDO;
import com.jsl.oa.model.vodata.ProjectDailyAddVO;
import com.jsl.oa.services.ProjectDailyService;
import com.jsl.oa.utils.BaseResponse;
import com.jsl.oa.utils.ErrorCode;
import com.jsl.oa.utils.Processing;
import com.jsl.oa.utils.ResultUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;
/**
* <h1>日志服务层实现类</h1>
* <hr/>
* 用于日志服务层的实现类
*
* @author xiao_lfeng | 176yunxuan | xiangZr-hhh
* @version v1.1.0
* @see com.jsl.oa.services.ProjectService
* @since v1.1.0
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class ProjectDailyServiceImpl implements ProjectDailyService {
private final ProjectDAO projectDAO;
private final ProjectDailyDAO projectDailyDAO;
@Override
public BaseResponse addDaily(ProjectDailyAddVO projectDailyAddVO, HttpServletRequest request) {
// 获取用户id
Long userId = Processing.getAuthHeaderToUserId(request);
// 从请求体中获取项目id
Long projectId = projectDailyAddVO.getProjectId();
// 检查项目是否存在
if (!projectDAO.isExistProjectById(projectId)) {
throw new BusinessException(ErrorCode.PROJECT_NOT_EXIST);
}
// 赋值数据库表实体类相关属性
ProjectDailyDO projectDailyDO = new ProjectDailyDO();
Processing.copyProperties(projectDailyAddVO, projectDailyDO);
projectDailyDO.setUserId(userId)
.setDailyTime(new Date());
// 向数据库添加数据
projectDailyDAO.addProjectDaily(projectDailyDO);
return ResultUtil.success();
}
@Override
public BaseResponse getMyDaily(HttpServletRequest request) {
// 获取用户id
Long userId = Processing.getAuthHeaderToUserId(request);
// 获取 我发布的及自己负责的项目下 的日报
List<ProjectDailyDO> projectDailyDOList =
projectDailyDAO.getMyProjectDaily(userId);
return ResultUtil.success(projectDailyDOList);
}
}

View File

@ -5,6 +5,7 @@ import com.jsl.oa.common.constant.ReviewConstants;
import com.jsl.oa.dao.ProjectDAO;
import com.jsl.oa.dao.ReviewDAO;
import com.jsl.oa.dao.UserDAO;
import com.jsl.oa.exception.BusinessException;
import com.jsl.oa.mapper.ProjectMapper;
import com.jsl.oa.mapper.UserMapper;
import com.jsl.oa.model.dodata.ProjectChildDO;
@ -155,6 +156,11 @@ public class ReviewServiceImpl implements ReviewService {
reviewData.addAll(reviewDOS);
}
// 获取自己的审核记录
List<ReviewDO> myReviewDO = reviewDAO.getReviewByUser(userId);
reviewData.addAll(myReviewDO);
//根据id进行去重
reviewData = reviewData.stream()
.collect(Collectors.toMap(ReviewDO::getId, review -> review, (existing, replacement) -> existing))
@ -186,6 +192,24 @@ public class ReviewServiceImpl implements ReviewService {
//获取用户
Long userId = Processing.getAuthHeaderToUserId(request);
//检查对应项目子系统子模块是否存在
if (!projectDAO.isExistProjectById(reviewAddVO.getProjectId())) {
throw new BusinessException(ErrorCode.PROJECT_NOT_EXIST);
}
if (projectMapper.getProjectChildById(
Math.toIntExact(reviewAddVO.getProjectChildId())) != null) {
throw new BusinessException(ErrorCode.PROJECT_CHILD_NOT_EXIST);
}
// 子模块id不为空时查询否则直接跳过
if (reviewAddVO.getProjectModuleId() != null) {
if (projectMapper.getModuleById(
Math.toIntExact(reviewAddVO.getProjectModuleId())) != null) {
throw new BusinessException(ErrorCode.MODULE_NOT_EXIST);
}
}
//定义要添加的审核实体类
ReviewDO reviewDO = new ReviewDO();
//现将属性相同的值拷贝
@ -232,7 +256,6 @@ public class ReviewServiceImpl implements ReviewService {
}
@Override
public BaseResponse searchReview(String content,
Short statue,
@ -414,6 +437,9 @@ public class ReviewServiceImpl implements ReviewService {
reviewData.addAll(reviewDOS);
}
// 获取自己的审核记录
List<ReviewDO> myReviewDO = reviewDAO.getReviewByUser(userId);
reviewData.addAll(myReviewDO);
//根据id进行去重
reviewData = reviewData.stream()
@ -443,7 +469,9 @@ public class ReviewServiceImpl implements ReviewService {
List<ReviewVO> reviewsOnPage = allReviews.subList(startIndex, endIndex);
reviewDataVO.setReviews(reviewsOnPage);
reviewDataVO.setDataTotal(total);
reviewDataVO.setTotalCount(allReviews.size());
reviewDataVO.setPageSize(pageSize);
reviewDataVO.setCurrentPage(page);
return reviewDataVO;
}

View File

@ -53,6 +53,8 @@ public enum ErrorCode {
PROJECT_USER_NOT_EXIST("ProjectUserNotExist", 40018, "用户项目表无对应记录"),
PROJECT_FILE_JSON_ERROR("ProjectFileJsonError", 40019, "项目文件json格式错误"),
PROJECT_NOT_USER("ProjectNotUser", 40020, "项目无此用户"),
PROJECT_CHILD_NOT_EXIST("ProjectChildNotExist", 40021, "子系统不存在"),
MODULE_NOT_EXIST("ModuleNotExist", 40022, "模块不存在"),
REVIEW_NOT_EXIST("ReviewNotExit", 40101, "未找到对应审核信息");

View File

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jsl.oa.mapper.ProjectDailyMapper">
<!-- 插入方法的 SQL 语句 -->
<insert id="insert" parameterType="com.jsl.oa.model.dodata.ProjectDailyDO">
insert into oa_project_daily
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="userId != null">user_id,</if>
<if test="projectId != null">project_id,</if>
<if test="content != null">content,</if>
<if test="dailyTime != null">daily_time,</if>
created_at
</trim>
values
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="userId != null">#{userId},</if>
<if test="projectId != null">#{projectId},</if>
<if test="content != null">#{content},</if>
<if test="dailyTime != null">#{dailyTime},</if>
NOW()
</trim>
</insert>
<select id="getProjectDailyByUser" parameterType="java.lang.Long"
resultType="com.jsl.oa.model.dodata.ProjectDailyDO">
select * from oa_project_daily where user_id = #{uid}
and is_delete = 0
</select>
<select id="getProjectDailyByProject" parameterType="java.lang.Integer"
resultType="com.jsl.oa.model.dodata.ProjectDailyDO">
select * from oa_project_daily where user_id = #{pid}
and is_delete = 0
</select>
</mapper>

View File

@ -27,9 +27,4 @@ create table oa_review
create index oa_review_project_id_oa_project_id_fk
on oa_review (project_id);
create index oa_review_project_project_submodule_id_oa_project_work_id_fk
on oa_review (project_module_id);
create index oa_review_project_subsystem_id_oa_project_work_id_fk
on oa_review (project_child_id);

View File

@ -203,6 +203,44 @@ CREATE TABLE `oa_user`
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci COMMENT ='用户表';
-- --------------------------------------------------------
--
-- 表的结构 `oa_review`
--
create table oa_review
(
id bigint unsigned auto_increment comment '主键'
primary key,
name varchar(255) not null comment '申请名称',
content longtext not null comment '申请理由',
sender_id bigint unsigned not null comment '申请者用户id',
recipient_id bigint unsigned null comment '审核者用户id',
category tinyint default 1 null comment '审核类别0子系统1子模块',
project_id bigint unsigned not null comment '申请的项目id',
project_child_id bigint unsigned not null comment '申请的子系统id',
project_module_id bigint unsigned null comment '申请的子模块id',
application_time datetime default CURRENT_TIMESTAMP not null comment '申请时间',
review_time datetime null comment '审核时间',
review_result tinyint default 2 not null comment '审核结果0未通过1通过2未审批',
is_delete tinyint default 0 not null comment '是否删除0未删除1已删除',
created_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
updated_time datetime null comment '更新时间',
constraint oa_review_recipient_id_oa_user_id_fk
foreign key (recipient_id) references oa_user (id)
on update cascade on delete cascade,
constraint oa_review_sender_id_oa_user_id_fk
foreign key (sender_id) references oa_user (id)
on update cascade on delete cascade
);
create index oa_review_project_id_oa_project_id_fk
on oa_review (project_id);
--
-- 转储表的索引
--