diff --git a/src/main/java/com/jsl/oa/controllers/ProjectDailyController.java b/src/main/java/com/jsl/oa/controllers/ProjectDailyController.java
new file mode 100644
index 0000000..88d12ba
--- /dev/null
+++ b/src/main/java/com/jsl/oa/controllers/ProjectDailyController.java
@@ -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);
+ }
+
+}
+
+
+
diff --git a/src/main/java/com/jsl/oa/dao/ProjectDailyDAO.java b/src/main/java/com/jsl/oa/dao/ProjectDailyDAO.java
new file mode 100644
index 0000000..ad6805d
--- /dev/null
+++ b/src/main/java/com/jsl/oa/dao/ProjectDailyDAO.java
@@ -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
+ *
+ * 用于处理日报相关的请求, 包括获取日报、添加日报信息、编辑日报信息等
+ *
+ * @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 getMyProjectDaily(Long userId) {
+
+// 日报数据数组
+ List projectDailyDOList = new ArrayList<>();
+
+// 先获取我负责的项目下的日报数据
+ //获取我负责的项目
+ List projectDOS = projectMapper.getAllProjectByUserId(userId);
+ //获取项目下对应日报
+ for (ProjectDO projectDO:projectDOS) {
+ List dailyFromProject = projectDailyMapper.getProjectDailyByProject(projectDO.getId());
+ projectDailyDOList.addAll(dailyFromProject);
+ }
+
+// 在获取本人的发布日报
+ List 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;
+ }
+
+
+
+
+}
+
+
diff --git a/src/main/java/com/jsl/oa/dao/ReviewDAO.java b/src/main/java/com/jsl/oa/dao/ReviewDAO.java
index 012825b..90f4055 100644
--- a/src/main/java/com/jsl/oa/dao/ReviewDAO.java
+++ b/src/main/java/com/jsl/oa/dao/ReviewDAO.java
@@ -58,6 +58,11 @@ public class ReviewDAO {
result);
}
+ public List getReviewByUser(Long uid) {
+ return reviewMapper.selectReviewByUser(uid);
+ }
+
+
public void addReview(ReviewDO reviewDO) {
reviewMapper.addReview(reviewDO);
diff --git a/src/main/java/com/jsl/oa/mapper/ProjectDailyMapper.java b/src/main/java/com/jsl/oa/mapper/ProjectDailyMapper.java
new file mode 100644
index 0000000..3425a7e
--- /dev/null
+++ b/src/main/java/com/jsl/oa/mapper/ProjectDailyMapper.java
@@ -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 getProjectDailyByUser(Long uid);
+
+ List getProjectDailyByProject(Long pid);
+
+}
+
+
+
diff --git a/src/main/java/com/jsl/oa/mapper/ReviewMapper.java b/src/main/java/com/jsl/oa/mapper/ReviewMapper.java
index 0561dda..aa6a2e9 100644
--- a/src/main/java/com/jsl/oa/mapper/ReviewMapper.java
+++ b/src/main/java/com/jsl/oa/mapper/ReviewMapper.java
@@ -43,4 +43,8 @@ public interface ReviewMapper {
@Select("SELECT * FROM organize_oa.oa_review WHERE name = #{name} AND is_delete = 0")
List selectReviewByName(String name);
+
+ @Select("SELECT * FROM organize_oa.oa_review WHERE sender_id = #{uid} AND "
+ + "is_delete = 0")
+ List selectReviewByUser(Long uid);
}
diff --git a/src/main/java/com/jsl/oa/model/dodata/ProjectDailyDO.java b/src/main/java/com/jsl/oa/model/dodata/ProjectDailyDO.java
new file mode 100644
index 0000000..4df4917
--- /dev/null
+++ b/src/main/java/com/jsl/oa/model/dodata/ProjectDailyDO.java
@@ -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;
+
+}
+
+
+
diff --git a/src/main/java/com/jsl/oa/model/vodata/ProjectDailyAddVO.java b/src/main/java/com/jsl/oa/model/vodata/ProjectDailyAddVO.java
new file mode 100644
index 0000000..ab4114e
--- /dev/null
+++ b/src/main/java/com/jsl/oa/model/vodata/ProjectDailyAddVO.java
@@ -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;
+
+}
+
+
diff --git a/src/main/java/com/jsl/oa/model/vodata/ProjectDailyVO.java b/src/main/java/com/jsl/oa/model/vodata/ProjectDailyVO.java
new file mode 100644
index 0000000..9bc827e
--- /dev/null
+++ b/src/main/java/com/jsl/oa/model/vodata/ProjectDailyVO.java
@@ -0,0 +1,16 @@
+package com.jsl.oa.model.vodata;
+/*
+ 张睿相 Java
+*/
+
+/**
+ * 总体描述
+ * 创建时间:2024/4/18 13:50
+ *
+ * @author 张睿相
+ * @since v1.0
+ */
+public class ProjectDailyVO {
+}
+
+
diff --git a/src/main/java/com/jsl/oa/model/vodata/ReviewDataVO.java b/src/main/java/com/jsl/oa/model/vodata/ReviewDataVO.java
index 7700711..6a45106 100644
--- a/src/main/java/com/jsl/oa/model/vodata/ReviewDataVO.java
+++ b/src/main/java/com/jsl/oa/model/vodata/ReviewDataVO.java
@@ -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 reviews;
}
diff --git a/src/main/java/com/jsl/oa/services/ProjectDailyService.java b/src/main/java/com/jsl/oa/services/ProjectDailyService.java
new file mode 100644
index 0000000..3d6fad9
--- /dev/null
+++ b/src/main/java/com/jsl/oa/services/ProjectDailyService.java
@@ -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);
+}
+
+
diff --git a/src/main/java/com/jsl/oa/services/impl/ProjectDailyServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/ProjectDailyServiceImpl.java
new file mode 100644
index 0000000..8194080
--- /dev/null
+++ b/src/main/java/com/jsl/oa/services/impl/ProjectDailyServiceImpl.java
@@ -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;
+
+/**
+ * 日志服务层实现类
+ *
+ * 用于日志服务层的实现类
+ *
+ * @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 projectDailyDOList =
+ projectDailyDAO.getMyProjectDaily(userId);
+
+ return ResultUtil.success(projectDailyDOList);
+
+ }
+
+
+}
+
+
diff --git a/src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java
index b537ee8..cc6c4d7 100644
--- a/src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java
+++ b/src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java
@@ -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 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 myReviewDO = reviewDAO.getReviewByUser(userId);
+ reviewData.addAll(myReviewDO);
//根据id进行去重
reviewData = reviewData.stream()
@@ -443,7 +469,9 @@ public class ReviewServiceImpl implements ReviewService {
List reviewsOnPage = allReviews.subList(startIndex, endIndex);
reviewDataVO.setReviews(reviewsOnPage);
- reviewDataVO.setDataTotal(total);
+ reviewDataVO.setTotalCount(allReviews.size());
+ reviewDataVO.setPageSize(pageSize);
+ reviewDataVO.setCurrentPage(page);
return reviewDataVO;
}
diff --git a/src/main/java/com/jsl/oa/utils/ErrorCode.java b/src/main/java/com/jsl/oa/utils/ErrorCode.java
index 05e988d..8bb67cc 100755
--- a/src/main/java/com/jsl/oa/utils/ErrorCode.java
+++ b/src/main/java/com/jsl/oa/utils/ErrorCode.java
@@ -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, "未找到对应审核信息");
diff --git a/src/main/resources/com/jsl/oa/mapper/ProjectDailyMapper.xml b/src/main/resources/com/jsl/oa/mapper/ProjectDailyMapper.xml
new file mode 100644
index 0000000..bc48bd9
--- /dev/null
+++ b/src/main/resources/com/jsl/oa/mapper/ProjectDailyMapper.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+ insert into oa_project_daily
+
+ user_id,
+ project_id,
+ content,
+ daily_time,
+ created_at
+
+ values
+
+ #{userId},
+ #{projectId},
+ #{content},
+ #{dailyTime},
+ NOW()
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mysql/oa_review.sql b/src/main/resources/mysql/oa_review.sql
index c2bd1ff..e8bdd59 100644
--- a/src/main/resources/mysql/oa_review.sql
+++ b/src/main/resources/mysql/oa_review.sql
@@ -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);
diff --git a/src/main/resources/mysql/organize_oa.sql b/src/main/resources/mysql/organize_oa.sql
index 8d09fa0..253153a 100755
--- a/src/main/resources/mysql/organize_oa.sql
+++ b/src/main/resources/mysql/organize_oa.sql
@@ -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);
+
+
+
--
-- 转储表的索引
--