Merge remote-tracking branch 'origin/feature' into feature

# Conflicts:
#	src/main/java/com/jsl/oa/dao/ProjectDAO.java
This commit is contained in:
176yunxuan 2024-03-12 12:44:11 +08:00
commit dd16df0b88
12 changed files with 196 additions and 132 deletions

View File

@ -25,4 +25,6 @@ public class IndexController {
newMap.put("timestamp", "构建时间:" + timestamp);
return ResultUtil.success("欢迎使用JSL-OA系统服务器处于正常状态", newMap);
}
}

View File

@ -45,6 +45,9 @@ public class NewsController {
return newsService.newsAdd(newsAddVO, request);
}
}

View File

@ -1,9 +1,6 @@
package com.jsl.oa.controllers;
import com.jsl.oa.model.voData.ProjectCuttingAddVO;
import com.jsl.oa.model.voData.ProjectCuttingEditVO;
import com.jsl.oa.model.voData.ProjectInfoVO;
import com.jsl.oa.model.voData.ProjectWorkVO;
import com.jsl.oa.model.voData.*;
import com.jsl.oa.model.voData.business.info.ProjectShowVO;
import com.jsl.oa.services.ProjectService;
import com.jsl.oa.utils.BaseResponse;
@ -18,7 +15,6 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.List;
@Slf4j
@ -170,6 +166,26 @@ public class ProjectController {
return projectService.projectAdd(request, projectAdd);
}
/**
* @Description: 项目的修改
* @Date: 2024/3/10
* @Param request:
* @Param projectEdit:
* @Param bindingResult:
* @Param projectId:
**/
@PutMapping("/project/edit/{projectId}")
public BaseResponse projectEditById(HttpServletRequest request, @RequestBody @Validated ProjectEditVO projectEdit, @NotNull BindingResult bindingResult, @PathVariable("projectId") Long projectId) {
log.info("请求接口[PUT]: /project/edit/{projectId}");
// 判断是否有参数错误
if (bindingResult.hasErrors()) {
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
}
return projectService.projectEdit(request, projectEdit,projectId);
}
/**
* 子系统子模块的增加
* @param request
@ -186,22 +202,6 @@ public class ProjectController {
return projectService.projecWorktAdd(request, projectWorkVO);
}
/**
* 项目表进行项目的修改
*
* @param projectEdit
* @param bindingResult
* @return
*/
@PutMapping("/project/edit")
public BaseResponse projectEdit(HttpServletRequest request, @RequestBody @Validated ProjectInfoVO projectEdit, @NotNull BindingResult bindingResult) {
log.info("请求接口[PUT]: /project/edit");
// 判断是否有参数错误
if (bindingResult.hasErrors()) {
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
}
return projectService.projectEdit(request, projectEdit);
}
/**
* 用户获取所分到的项目模块

View File

@ -7,8 +7,10 @@ import com.jsl.oa.model.doData.ProjectDO;
import com.jsl.oa.model.doData.ProjectUserDO;
import com.jsl.oa.model.doData.ProjectWorkDO;
import com.jsl.oa.model.doData.info.ProjectShowDO;
import com.jsl.oa.model.voData.ProjectEditVO;
import com.jsl.oa.model.voData.ProjectInfoVO;
import com.jsl.oa.model.voData.ProjectWorkVO;
import com.jsl.oa.utils.Processing;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
@ -39,10 +41,14 @@ public class ProjectDAO {
projectMapper.projectWorkAdd(projectWorkVO);
}
public void projectEdit(ProjectInfoVO projectEdit) {
public ProjectDO projectEdit(@NotNull ProjectEditVO projectEdit, Long projectId) {
log.info("\t> 执行 DAO 层 ProjectDAO.projectEdit 方法");
log.info("\t\t> 从 MySQL 更新数据");
ProjectDO projectDO = new ProjectDO();
Processing.copyProperties(projectEdit,projectDO);
projectMapper.projectEdit(projectDO);
log.info("\t\t> 从 MySQL 获取数据");
projectMapper.projectEdit(projectEdit);
return projectMapper.getProjectById(projectId);
}
public boolean isExistProject(Long id) {
@ -197,15 +203,19 @@ public class ProjectDAO {
return projectMapper.updateUserForProjectUser(newUid,projectUserDO.getId());
}
public boolean isPrincipalUser(Long uid,Long projectId){
log.info("\t> 执行 DAO 层 ProjectDAO.isPrincipalUser 方法");
log.info("\t\t> 从 MySQL 获取数据");
ProjectDO projectDO = projectMapper.getProjectById(projectId);
if(uid == projectDO.getPrincipalId()){
return true;
}
return false;
}
public List<ProjectDO> tget(Integer id, List<String> tags, Integer isFinish) {
public List<ProjectDO> tget(Integer id) {
log.info("DAO层");
if(isFinish != null){
return projectMapper.tgetByIsfinish(isFinish);
}
if(tags != null && !tags.isEmpty()){
return projectMapper.tgetByTags(tags);
}
return projectMapper.tget(id);
}
}

View File

@ -7,7 +7,6 @@ import com.jsl.oa.model.doData.ProjectWorkDO;
import com.jsl.oa.model.voData.ProjectInfoVO;
import com.jsl.oa.model.voData.ProjectWorkVO;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -27,7 +26,7 @@ public interface ProjectMapper {
"#{description},#{cycle},#{completeTime},#{type},#{isFinish},#{status})")
void projectWorkAdd(ProjectWorkVO projectWorkVO);
void projectEdit(ProjectInfoVO projectEdit);
void projectEdit(ProjectDO projectEdit);
@Select("select * from organize_oa.oa_project where id=#{id}")
ProjectDO getProjectById(Long id);
@ -64,7 +63,7 @@ public interface ProjectMapper {
@Select("select * from organize_oa.oa_project where name=#{name}")
ProjectDO getByName(String name);
@Delete("DELETE FROM organize_oa.oa_project where id=#{id}")
@Update("UPDATE organize_oa.oa_project SET is_delete = 1 where id=#{id}")
boolean deleteProject(Long id);
@Insert("INSERT INTO organize_oa.oa_project_cutting (pid, name, tag, real_time) " +

View File

@ -1,5 +1,6 @@
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;
@ -29,7 +30,12 @@ public class ProjectDO {
private Integer isDelete;
private Integer isFinish;
private boolean 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;
}

View File

@ -0,0 +1,29 @@
package com.jsl.oa.model.voData;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.Getter;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.sql.Timestamp;
@Data
public class ProjectEditVO {
private String name;
private Long principalId;
private String tags;
private Long cycle;
private String file;
private String description;
private Integer isFinish;
private boolean status;
private Timestamp beginTime;
private Timestamp completeTime;
private Timestamp deadline;
}

View File

@ -1,9 +1,6 @@
package com.jsl.oa.services;
import com.jsl.oa.model.voData.ProjectCuttingAddVO;
import com.jsl.oa.model.voData.ProjectCuttingEditVO;
import com.jsl.oa.model.voData.ProjectInfoVO;
import com.jsl.oa.model.voData.ProjectWorkVO;
import com.jsl.oa.model.voData.*;
import com.jsl.oa.model.voData.business.info.ProjectShowVO;
import com.jsl.oa.utils.BaseResponse;
@ -13,7 +10,7 @@ import java.util.List;
public interface ProjectService {
BaseResponse projectAdd(HttpServletRequest request, ProjectInfoVO projectAdd);
BaseResponse projectEdit(HttpServletRequest request, ProjectInfoVO projectEdit);
BaseResponse projectEdit(HttpServletRequest request, ProjectEditVO projectEdit, Long projectId);
BaseResponse projectGetUserInCutting(Long uid);

View File

@ -9,10 +9,7 @@ import com.jsl.oa.model.doData.ProjectDO;
import com.jsl.oa.model.doData.ProjectWorkDO;
import com.jsl.oa.model.doData.UserDO;
import com.jsl.oa.model.doData.info.ProjectShowDO;
import com.jsl.oa.model.voData.ProjectCuttingAddVO;
import com.jsl.oa.model.voData.ProjectCuttingEditVO;
import com.jsl.oa.model.voData.ProjectInfoVO;
import com.jsl.oa.model.voData.ProjectWorkVO;
import com.jsl.oa.model.voData.*;
import com.jsl.oa.model.voData.business.info.ProjectShowVO;
import com.jsl.oa.services.ProjectService;
import com.jsl.oa.utils.BaseResponse;
@ -34,10 +31,10 @@ import java.util.List;
* <hr/>
* 用于项目服务层的实现类
*
* @since v1.1.0
* @author xiao_lfeng | 176yunxuan | xiangZr-hhh
* @version v1.1.0
* @see com.jsl.oa.services.ProjectService
* @author xiao_lfeng | 176yunxuan | xiangZr-hhh
* @since v1.1.0
*/
@Slf4j
@Service
@ -52,9 +49,8 @@ public class ProjectServiceImpl implements ProjectService {
@CheckUserHasPermission("project.add")
public BaseResponse projectAdd(HttpServletRequest request, ProjectInfoVO projectAdd) {
log.info("\t> 执行 Service 层 ProjectService.projectAdd 方法");
projectDAO.projectAdd(projectAdd);
return ResultUtil.success("添加成功");
projectDAO.projectAdd(projectAdd);
return ResultUtil.success("添加成功");
}
@Override
@ -84,16 +80,25 @@ public class ProjectServiceImpl implements ProjectService {
}
@Override
@CheckUserHasPermission("project.edit")
public BaseResponse projectEdit(HttpServletRequest request, @NotNull ProjectInfoVO projectEdit) {
public BaseResponse projectEdit(HttpServletRequest request, @NotNull ProjectEditVO projectEdit, Long projectId) {
log.info("\t> 执行 Service 层 ProjectService.projectEdit 方法");
//判断项目是否存在
if (projectDAO.isExistProject(projectEdit.getId())) {
projectDAO.projectEdit(projectEdit);
return ResultUtil.success("修改成功");
} else {
return ResultUtil.error(ErrorCode.PROJECT_NOT_EXIST);
}
//判断用户是否为老师 或者 项目负责人
if (!Processing.checkUserIsTeacher(request, roleMapper) ||
!projectDAO.isPrincipalUser(Processing.getAuthHeaderToUserId(request), projectId)) {
return ResultUtil.error(ErrorCode.NOT_PERMISSION);
}
//判断项目是否存在
if (projectDAO.isExistProject(projectId)) {
//更新数据
return ResultUtil.success(projectDAO.projectEdit(projectEdit,projectId));
} else {
return ResultUtil.error(ErrorCode.PROJECT_NOT_EXIST);
}
}
@Override
@ -112,12 +117,12 @@ public class ProjectServiceImpl implements ProjectService {
@CheckUserHasPermission("project.cutting.user.add")
public BaseResponse projectAddUserForCutting(HttpServletRequest request, Long uid, Long pid) {
log.info("\t> 执行 Service 层 ProjectService.projectAddUserForCutting 方法");
if (userDAO.isExistUser(uid)) {
projectDAO.projectAddUserForCutting(uid, pid);
return ResultUtil.success();
} else {
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
}
if (userDAO.isExistUser(uid)) {
projectDAO.projectAddUserForCutting(uid, pid);
return ResultUtil.success();
} else {
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
}
}
@Override
@ -215,25 +220,25 @@ public class ProjectServiceImpl implements ProjectService {
log.info("\t> 执行 Service 层 ProjectService.get 方法");
//获取用户
Long userId= Processing.getAuthHeaderToUserId(request);
Long userId = Processing.getAuthHeaderToUserId(request);
//根据状态查询
if(isFinish != null){
List<ProjectDO> projectDOList = projectDAO.get(userId,listAll,tags,isFinish);
if (isFinish != null) {
List<ProjectDO> projectDOList = projectDAO.get(userId, listAll, tags, isFinish);
return ResultUtil.success(projectDOList);
}
//根据标签查询
if(tags != null && !tags.isEmpty()){
List<ProjectDO> projectDOList = projectDAO.get(userId,listAll,tags,isFinish);
if (tags != null && !tags.isEmpty()) {
List<ProjectDO> projectDOList = projectDAO.get(userId, listAll, tags, isFinish);
return ResultUtil.success(projectDOList);
}
//判断是否是老师(项目负责人)
if(listAll != null && Processing.checkUserIsTeacher(request,roleMapper)){
List<ProjectDO> projectDOList = projectDAO.get(userId,listAll,tags,isFinish);
if (listAll != null && Processing.checkUserIsTeacher(request, roleMapper)) {
List<ProjectDO> projectDOList = projectDAO.get(userId, listAll, tags, isFinish);
return ResultUtil.success(projectDOList);
}else {
} else {
listAll = 0;
List<ProjectDO> projectDOList = projectDAO.get(userId,listAll,tags,isFinish);
List<ProjectDO> projectDOList = projectDAO.get(userId, listAll, tags, isFinish);
return ResultUtil.success(projectDOList);
}
@ -244,31 +249,30 @@ public class ProjectServiceImpl implements ProjectService {
log.info("\t> 执行 Service 层 ProjectService.workget 方法");
//获取用户
Long userId= Processing.getAuthHeaderToUserId(request);
Long userId = Processing.getAuthHeaderToUserId(request);
//根据状态查询
if(isFinish != null){
List<ProjectWorkDO> projectWorkDOList = projectDAO.workget(userId,listAll,tags,isFinish);
if (isFinish != null) {
List<ProjectWorkDO> projectWorkDOList = projectDAO.workget(userId, listAll, tags, isFinish);
return ResultUtil.success(projectWorkDOList);
}
//根据标签查询
if(tags != null && !tags.isEmpty()){
List<ProjectWorkDO> projectWorkDOList = projectDAO.workget(userId,listAll,tags,isFinish);
if (tags != null && !tags.isEmpty()) {
List<ProjectWorkDO> projectWorkDOList = projectDAO.workget(userId, listAll, tags, isFinish);
return ResultUtil.success(projectWorkDOList);
}
//判断是否是老师(项目负责人)
if(listAll != null && Processing.checkUserIsTeacher(request,roleMapper)){
List<ProjectWorkDO> projectWorkDOList = projectDAO.workget(userId,listAll,tags,isFinish);
if (listAll != null && Processing.checkUserIsTeacher(request, roleMapper)) {
List<ProjectWorkDO> projectWorkDOList = projectDAO.workget(userId, listAll, tags, isFinish);
return ResultUtil.success(projectWorkDOList);
}else {
} else {
listAll = 0;
List<ProjectWorkDO> projectWorkDOList = projectDAO.workget(userId,listAll,tags,isFinish);
List<ProjectWorkDO> projectWorkDOList = projectDAO.workget(userId, listAll, tags, isFinish);
return ResultUtil.success(projectWorkDOList);
}
}
@Override
public BaseResponse getByName(String name) {
log.info("\t> 执行 Service 层 ProjectService.getByName 方法");
@ -280,68 +284,73 @@ public class ProjectServiceImpl implements ProjectService {
}
@Override
@CheckUserHasPermission("project.delete")
public BaseResponse projectDelete(HttpServletRequest request, Long id) {
log.info("\t> 执行 Service 层 ProjectService.projectDelete 方法");
if (!projectDAO.projectDelete(id)) {
return ResultUtil.error(ErrorCode.DATABASE_DELETE_ERROR);
} else {
return ResultUtil.success();
}
//判断用户是否为老师 或者 项目负责人 或管理员
if (!Processing.checkUserIsTeacher(request, roleMapper) &&
!projectDAO.isPrincipalUser(Processing.getAuthHeaderToUserId(request), id)
&& !Processing.checkUserIsAdmin(request, roleMapper)) {
return ResultUtil.error(ErrorCode.NOT_PERMISSION);
}
if (!projectDAO.projectDelete(id)) {
return ResultUtil.error(ErrorCode.DATABASE_DELETE_ERROR);
} else {
return ResultUtil.success();
}
}
@Override
@CheckUserHasPermission("project.cutting.add")
public BaseResponse addProjectCutting(HttpServletRequest request, ProjectCuttingAddVO projectCuttingAddVO) {
log.info("\t> 执行 Service 层 ProjectService.projectCuttingAdd方法");
//赋值数据
ProjectCuttingDO projectCuttingDO = new ProjectCuttingDO();
Processing.copyProperties(projectCuttingAddVO, projectCuttingDO);
//根据pid检测项目是否存在
if (!projectDAO.isExistProjectById(projectCuttingAddVO.getPid())) {
return ResultUtil.error(ErrorCode.PROJECT_NOT_EXIST);
}
//向数据库添加数据
projectDAO.projectCuttingAdd(projectCuttingDO);
return ResultUtil.success();
//赋值数据
ProjectCuttingDO projectCuttingDO = new ProjectCuttingDO();
Processing.copyProperties(projectCuttingAddVO, projectCuttingDO);
//根据pid检测项目是否存在
if (!projectDAO.isExistProjectById(projectCuttingAddVO.getPid())) {
return ResultUtil.error(ErrorCode.PROJECT_NOT_EXIST);
}
//向数据库添加数据
projectDAO.projectCuttingAdd(projectCuttingDO);
return ResultUtil.success();
}
@Override
@CheckUserHasPermission("project.cutting.edit")
public BaseResponse editProjectCutting(HttpServletRequest request, ProjectCuttingEditVO projectCuttingEditVO) {
log.info("\t> 执行 Service 层 ProjectService.projectCuttingEdit方法");
//赋值数据
ProjectCuttingDO projectCuttingDO = new ProjectCuttingDO();
Processing.copyProperties(projectCuttingEditVO, projectCuttingDO);
//根据id检测项目模块是否存在
if (!projectDAO.isExistProjectCutting(projectCuttingEditVO.getId())) {
return ResultUtil.error(ErrorCode.PROJECT_CUTTING_NOT_EXIST);
}
//向数据库添加数据
projectDAO.updateProjectCutting(projectCuttingDO);
return ResultUtil.success();
//赋值数据
ProjectCuttingDO projectCuttingDO = new ProjectCuttingDO();
Processing.copyProperties(projectCuttingEditVO, projectCuttingDO);
//根据id检测项目模块是否存在
if (!projectDAO.isExistProjectCutting(projectCuttingEditVO.getId())) {
return ResultUtil.error(ErrorCode.PROJECT_CUTTING_NOT_EXIST);
}
//向数据库添加数据
projectDAO.updateProjectCutting(projectCuttingDO);
return ResultUtil.success();
}
@Override
@CheckUserHasPermission("project.cutting.delete")
public BaseResponse projectToOtherUserForCutting(HttpServletRequest request, Long oldUid, Long pid, Long newUid) {
log.info("\t> 执行 Service 层 ProjectService.projectToOtherUserForCutting方法");
//检测新旧用户是否存在
if (!userDAO.isExistUser(oldUid) || !userDAO.isExistUser(newUid)) {
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
}
//用户项目表是否含有对应记录
if (!projectDAO.isExistProjectUser(pid, oldUid)) {
return ResultUtil.error(ErrorCode.PROJECT_USER_NOT_EXIST);
}
//更新数据
if (!projectDAO.updateUserForProjectUserByPidAndUid(pid, oldUid, newUid)) {
return ResultUtil.error(ErrorCode.DATABASE_UPDATE_ERROR);
}
return ResultUtil.success();
//检测新旧用户是否存在
if (!userDAO.isExistUser(oldUid) || !userDAO.isExistUser(newUid)) {
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
}
//用户项目表是否含有对应记录
if (!projectDAO.isExistProjectUser(pid, oldUid)) {
return ResultUtil.error(ErrorCode.PROJECT_USER_NOT_EXIST);
}
//更新数据
if (!projectDAO.updateUserForProjectUserByPidAndUid(pid, oldUid, newUid)) {
return ResultUtil.error(ErrorCode.DATABASE_UPDATE_ERROR);
}
return ResultUtil.success();
}
}

View File

@ -257,6 +257,12 @@ public class UserServiceImpl implements UserService {
@Override
public BaseResponse userProfileGet(HttpServletRequest request) {
log.info("\t> 执行 Service 层 UserService.userProfileGet 方法");
//判断用户是否为 老师 管理员
if(!Processing.checkUserIsAdmin(request,roleDAO.roleMapper) &&
!Processing.checkUserIsTeacher(request,roleDAO.roleMapper)){
return ResultUtil.error(ErrorCode.NOT_PERMISSION);
}
// 获取用户Id
UserDO userDO = userDAO.getUserById(Processing.getAuthHeaderToUserId(request));
UserProfileVo userProfileVo = new UserProfileVo();
@ -264,4 +270,6 @@ public class UserServiceImpl implements UserService {
userProfileVo.setSex(Processing.getSex(userDO.getSex()));
return ResultUtil.success(userProfileVo);
}
}

View File

@ -193,6 +193,7 @@ public class Processing {
}
}
private static char getCharFromIndex(int index) {
// 生成字符集合可以根据需要自定义
String charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

View File

@ -13,8 +13,8 @@
<if test="description != null and description != ''">
description = #{description},
</if>
<if test="principal_id != null and principal_id != ''">
principal_id = #{principal_id},
<if test="principalId != null and principalId != ''">
principal_id = #{principalId},
</if>
<if test="tags != null and tags != ''">
tags = #{tags},
@ -25,11 +25,11 @@
<if test="file != null and file != ''">
file = #{file},
</if>
<if test="begin_time != null and begin_time != ''">
begin_time = #{begin_time},
<if test="beginTime != null and beginTime != ''">
begin_time = #{beginTime},
</if>
<if test="complete_time != null and complete_time != ''">
complete_time = #{complete_time},
<if test="completeTime != null and completeTime != ''">
complete_time = #{completeTime},
</if>
<if test="deadline != null and deadline != ''">
deadline = #{deadline},
@ -37,11 +37,11 @@
<if test="status != null and status != ''">
status = #{status},
</if>
<if test="is_finish != null and is_finish != ''">
is_finish = #{is_finish},
<if test="isFinish != null and isFinish != ''">
is_finish = #{isFinish},
</if>
<if test="is_delete != null and is_delete != ''">
is_delete = #{is_delete},
<if test="isDelete != null and isDelete != ''">
is_delete = #{isDelete},
</if>
</set>
where id = #{id}