feat:增加新业务功能获取审核列表 #10

Merged
XiaoLFeng merged 3 commits from feature-zrx into develop 2024-04-11 20:46:33 +08:00
28 changed files with 617 additions and 121 deletions

View File

@ -43,8 +43,8 @@ import java.util.Objects;
@Component @Component
@RequiredArgsConstructor @RequiredArgsConstructor
public class AnnotationsAspect { public class AnnotationsAspect {
private final RoleDAO roleDAO;
private final UserMapper userMapper; private final UserMapper userMapper;
private final RoleDAO roleDAO;
private final PermissionDAO permissionDAO; private final PermissionDAO permissionDAO;
/** /**

View File

@ -178,7 +178,8 @@ public class AuthController {
if (bindingResult.hasErrors()) { if (bindingResult.hasErrors()) {
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult)); return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
} }
return authService.authChangePassword(userChangePasswordVO, request); return authService.
authChangePassword((UserChangePasswordVO) request, (HttpServletRequest) userChangePasswordVO);
} }
/** /**

View File

@ -0,0 +1,41 @@
package com.jsl.oa.controllers;
import com.jsl.oa.services.ReviewService;
import com.jsl.oa.utils.BaseResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
/**
* 审核控制器
*
* @author xiangZr-hhh
* @version 1.1.0
* @since 1.1.0
*/
@Slf4j
@RestController
@RequiredArgsConstructor
public class ReviewController {
// 审核服务
private final ReviewService reviewService;
/**
* @Description: 获取我的审核列表
* @Date: 2024/4/11
* @Param request:
**/
@GetMapping("/review/getMyReview")
public BaseResponse getUserReview(@RequestParam Long projectId, HttpServletRequest request) {
log.info("请求接口[GET]: /review/getMyReview");
return reviewService.getUserReview(projectId, request);
}
}

View File

@ -136,7 +136,7 @@ public class UserController {
} }
} }
// 检查是否出现错误 // 检查是否出现错误
return userService.userCurrent(id, username, email, phone, request); return userService.userCurrent(request, id, username, email, phone);
} }
/** /**

View File

@ -52,8 +52,7 @@ public class PermissionDAO {
roleRedisUtil.setData(BusinessConstants.NONE, uid.toString(), gson.toJson(getPermissionForString), 1440); roleRedisUtil.setData(BusinessConstants.NONE, uid.toString(), gson.toJson(getPermissionForString), 1440);
} else { } else {
log.info("\t\t> 从 Redis 获取数据"); log.info("\t\t> 从 Redis 获取数据");
getPermissionForString = gson.fromJson(permissionRedisString, new TypeToken<List<String>>() { getPermissionForString = gson.fromJson(permissionRedisString, new TypeToken<List<String>>() { }.getType());
}.getType());
} }
return getPermissionForString; return getPermissionForString;
} }
@ -69,16 +68,43 @@ public class PermissionDAO {
getPermissionForString = new ArrayList<>(); getPermissionForString = new ArrayList<>();
forPermissionToBuildString(permissionList, getPermissionForString); forPermissionToBuildString(permissionList, getPermissionForString);
// 存入 Redis // 存入 Redis
roleRedisUtil roleRedisUtil.setData(
.setData(BusinessConstants.ALL_PERMISSION, "string", gson.toJson(getPermissionForString), 1440); BusinessConstants.ALL_PERMISSION,
"string",
gson.toJson(getPermissionForString),
1440);
} else { } else {
log.info("\t\t> 从 Redis 获取数据"); log.info("\t\t> 从 Redis 获取数据");
getPermissionForString = gson.fromJson(getRedisData, new TypeToken<List<String>>() { getPermissionForString = gson.fromJson(getRedisData, new TypeToken<List<String>>() { }.getType());
}.getType());
} }
return getPermissionForString; return getPermissionForString;
} }
public List<PermissionDO> getRootPermission() {
log.info("\t> 执行 DAO 层 PermissionDAO.getRootPermission 方法");
String getRedisData = roleRedisUtil.getData(BusinessConstants.ALL_PERMISSION, "all");
if (getRedisData == null) {
log.info("\t\t> 从 MySQL 获取数据");
List<PermissionDO> permissionList = permissionMapper.getAllPermission();
if (!permissionList.isEmpty()) {
List<PermissionDO> getPermissionList = new ArrayList<>();
for (PermissionDO permission : permissionList) {
if (permission.getPid() == null) {
getPermissionList.add(permission);
}
}
roleRedisUtil.setData(BusinessConstants.ALL_PERMISSION, "all", gson.toJson(getPermissionList), 1440);
return getPermissionList;
} else {
return null;
}
} else {
log.info("\t\t> 从 Redis 获取数据");
return gson.fromJson(getRedisData, new TypeToken<List<PermissionDO>>() {
}.getType());
}
}
/** /**
* <h2>获取全部权限信息</h2> * <h2>获取全部权限信息</h2>
* <hr/> * <hr/>
@ -89,8 +115,7 @@ public class PermissionDAO {
*/ */
private void forPermissionToBuildString( private void forPermissionToBuildString(
@NotNull List<PermissionDO> permissionList, @NotNull List<PermissionDO> permissionList,
List<String> getPermissionForString List<String> getPermissionForString) {
) {
for (PermissionDO permission : permissionList) { for (PermissionDO permission : permissionList) {
// 寻找是否存在父亲 // 寻找是否存在父亲
StringBuilder permissionString = new StringBuilder(); StringBuilder permissionString = new StringBuilder();

View File

@ -31,7 +31,6 @@ public class ProjectDAO {
log.info("\t> 执行 DAO 层 ProjectDAO.projectAdd 方法"); log.info("\t> 执行 DAO 层 ProjectDAO.projectAdd 方法");
log.info("\t\t> 从 MySQL 获取数据"); log.info("\t\t> 从 MySQL 获取数据");
projectMapper.projectAdd(projectAdd); projectMapper.projectAdd(projectAdd);
} }
@ -86,13 +85,14 @@ public class ProjectDAO {
log.info("\t> 执行 DAO 层 ProjectDAO.sortProject 方法"); log.info("\t> 执行 DAO 层 ProjectDAO.sortProject 方法");
for (int i = 0; i < projectShowDO.getData().size(); i++) { for (int i = 0; i < projectShowDO.getData().size(); i++) {
for (int j = 0; j < projectShowDO.getData().size(); j++) { for (int j = 0; j < projectShowDO.getData().size(); j++) {
ProjectShowDO.DataDO dataDO = projectShowDO.getData().get(i);
if ("desc".equals(projectShowDO.getOrder())) { if ("desc".equals(projectShowDO.getOrder())) {
if (dataDO.getDisplayOrder() > projectShowDO.getData().get(j).getDisplayOrder()) { if (projectShowDO.getData().get(i).getDisplayOrder()
> projectShowDO.getData().get(j).getDisplayOrder()) {
Collections.swap(projectShowDO.getData(), i, j); Collections.swap(projectShowDO.getData(), i, j);
} }
} else { } else {
if (dataDO.getDisplayOrder() < projectShowDO.getData().get(j).getDisplayOrder()) { if (projectShowDO.getData().get(i).getDisplayOrder()
< projectShowDO.getData().get(j).getDisplayOrder()) {
Collections.swap(projectShowDO.getData(), i, j); Collections.swap(projectShowDO.getData(), i, j);
} }
} }
@ -199,5 +199,22 @@ public class ProjectDAO {
return projectMapper.getProjectWorkById(id); return projectMapper.getProjectWorkById(id);
} }
public List<ProjectDO> getProjectByPrincipalUser(Long uid) {
log.info("\t> 执行 DAO 层 ProjectDAO.getProjectFromUser 方法");
log.info("\t\t> 从 MySQL 获取数据");
return projectMapper.getProjectByPrincipalUser(uid);
}
public List<ProjectWorkDO> getAllSubsystemByUserId(Long uid) {
log.info("\t> 执行 DAO 层 ProjectDAO.getAllSubsystemByUserId 方法");
log.info("\t\t> 从 MySQL 获取数据");
return projectMapper.getAllSubsystemByUserId(uid);
}
public List<ProjectWorkDO> getAllSubmoduleByUserId(Long uid) {
log.info("\t> 执行 DAO 层 ProjectDAO.getAllSubmoduleByUserId 方法");
log.info("\t\t> 从 MySQL 获取数据");
return projectMapper.getAllSubmoduleByUserId(uid);
}
} }

View File

@ -0,0 +1,49 @@
package com.jsl.oa.dao;
import com.jsl.oa.mapper.ProjectMapper;
import com.jsl.oa.mapper.ReviewMapper;
import com.jsl.oa.model.dodata.ReviewDO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* ReviewDAO
* <hr/>
* 用于处理审核相关的请求, 包括获取审核列表编辑审核信息等
*
* @author zrx_hhh
* @version v1.0.0
* @since v1.0.0-SNAPSHOT
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class ReviewDAO {
private final ReviewMapper reviewMapper;
private final ProjectMapper projectMapper;
public List<ReviewDO> getPrincipalUserReview(Long pid) {
return reviewMapper.selectAllReviewFromProject(pid);
}
public String getNameBySubproject(Long subId) {
if (subId != null) {
return projectMapper.getProjectWorkById(subId).getName();
}
if (subId == null) {
return "";
}
return "";
}
}

View File

@ -3,6 +3,8 @@ package com.jsl.oa.dao;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.jsl.oa.common.constant.BusinessConstants; import com.jsl.oa.common.constant.BusinessConstants;
import com.jsl.oa.mapper.UserMapper; import com.jsl.oa.mapper.UserMapper;
import com.jsl.oa.model.dodata.RoleDO;
import com.jsl.oa.model.dodata.RoleUserDO;
import com.jsl.oa.model.dodata.UserDO; import com.jsl.oa.model.dodata.UserDO;
import com.jsl.oa.model.vodata.UserAllCurrentVO; import com.jsl.oa.model.vodata.UserAllCurrentVO;
import com.jsl.oa.model.vodata.UserCurrentBackVO; import com.jsl.oa.model.vodata.UserCurrentBackVO;
@ -23,9 +25,9 @@ import java.util.List;
* 用于用户的增删改查,以及用户权限的获取,用户信息的获取,用户信息的修改,用户信息的删除,用户信息的锁定,用户信息的解锁,用户信息的添加,用户信息的 * 用于用户的增删改查,以及用户权限的获取,用户信息的获取,用户信息的修改,用户信息的删除,用户信息的锁定,用户信息的解锁,用户信息的添加,用户信息的
* 编辑等 * 编辑等
* *
* @author xiao_lfeng | 176yunxuan | xiangZr-hhh
* @version v1.1.0 * @version v1.1.0
* @since v1.1.0 * @since v1.1.0
* @author xiao_lfeng | 176yunxuan | xiangZr-hhh
*/ */
@Slf4j @Slf4j
@Component @Component
@ -49,11 +51,13 @@ public class UserDAO {
*/ */
public UserDO getUserInfoByUsername(String username) { public UserDO getUserInfoByUsername(String username) {
log.info("\t> 执行 DAO 层 UserDAO.getUserInfoByUsername 方法"); log.info("\t> 执行 DAO 层 UserDAO.getUserInfoByUsername 方法");
UserDO userDO; UserDO userDO = null;
// Redis 获取数据 // Redis 获取数据
// TODO: 10000-Redis: Redis 获取数据 // TODO: 10000-Redis: Redis 获取数据
// 从数据库获取用户信息 // 从数据库获取用户信息
userDO = userMapper.getUserInfoByUsername(username); if (userDO == null) {
userDO = userMapper.getUserInfoByUsername(username);
}
return userDO; return userDO;
} }
@ -112,7 +116,7 @@ public class UserDAO {
/** /**
* 用户账号锁定 * 用户账号锁定
* *
* @param id 用户id * @param id
*/ */
public void userLock(Long id, Long isLock) { public void userLock(Long id, Long isLock) {
log.info("\t> 执行 DAO 层 UserDAO.userLock 方法"); log.info("\t> 执行 DAO 层 UserDAO.userLock 方法");
@ -153,10 +157,10 @@ public class UserDAO {
/** /**
* Adds a new user to the database. * @return
* * @Description 用户添加
* @param userDO The UserDO object containing the user's information. * @Date: 2024/1/16
* @return True if the user is successfully added, false otherwise. * @Param userDO: user 数据库表实体类
*/ */
public boolean userAdd(UserDO userDO) { public boolean userAdd(UserDO userDO) {
log.info("\t> 执行 DAO 层 userAdd 方法"); log.info("\t> 执行 DAO 层 userAdd 方法");
@ -170,14 +174,12 @@ public class UserDAO {
userMapper.updateUser(userDO); userMapper.updateUser(userDO);
} }
/** /**
* <h2>用户名获取用户信息</h2> * @Description 根据username检测用户是否重复
* <hr/> * @Date: 2024/1/16
* 根据用户名获取用户信息 * @Param username: 用户名
* **/
* @param username 用户名
* @return {@link UserDO}
*/
public Boolean isRepeatUser(String username) { public Boolean isRepeatUser(String username) {
log.info("\t> 执行 DAO 层 isRepeatUser 方法"); log.info("\t> 执行 DAO 层 isRepeatUser 方法");
log.info("\t\t> 从 MySQL 获取数据"); log.info("\t\t> 从 MySQL 获取数据");
@ -186,21 +188,22 @@ public class UserDAO {
/** /**
* 通过用户编号获取用户信息 * @Description 检测用户工号是否重复
* * @Date 2024/1/18
* @param userNum 用户编号 * @Param userNum:
* @return UserDO **/
*/
public Boolean isRepeatUserNum(String userNum) { public Boolean isRepeatUserNum(String userNum) {
return userMapper.getUserByUserNum(userNum) != null; if (userMapper.getUserByUserNum(userNum) != null) {
return true;
}
return false;
} }
/** /**
* 通过 Id 获取用户信息 * @Description 根据用户id获取用户数据
* * @Date 2024/1/17
* @param userId 用户id * @Param userId
* @return UserDO **/
*/
public UserDO getUserById(Long userId) { public UserDO getUserById(Long userId) {
log.info("\t> 执行 DAO 层 getUserById 方法"); log.info("\t> 执行 DAO 层 getUserById 方法");
log.info("\t\t> 从 MySQL 获取数据"); log.info("\t\t> 从 MySQL 获取数据");
@ -208,6 +211,34 @@ public class UserDAO {
} }
/**
* @Description 根据用户id查询对应用户权限
* @Date 2024/1/18
* @Param uid:用户id
**/
public RoleUserDO getRoleFromUser(Long uid) {
log.info("\t> 执行 DAO 层 getRoleFromUser 方法");
log.info("\t\t> 从 MySQL 获取数据");
return userMapper.getRoleIdByUserId(uid);
}
/**
* @Description 检验用户权限是否为管理员
* @Date 2024/1/18
* @Param null:用户id
**/
public Boolean isManagerByRoleId(Long roleId) {
log.info("\t> 执行 DAO 层 isManagerByRoleId 方法");
log.info("\t\t> 从 MySQL 获取数据");
RoleDO role = userMapper.getRoleById(roleId);
if (role == null) {
return false;
}
return "admin".equals(role.getRoleName());
}
public List<UserDO> getRecommendUser() { public List<UserDO> getRecommendUser() {
log.info("\t> 执行 DAO 层 getRecommendUser 方法"); log.info("\t> 执行 DAO 层 getRecommendUser 方法");
log.info("\t\t> 从 MySQL 获取数据"); log.info("\t\t> 从 MySQL 获取数据");
@ -225,4 +256,10 @@ public class UserDAO {
log.info("\t\t> 从 MySQL 获取数据"); log.info("\t\t> 从 MySQL 获取数据");
return userMapper.getUserByPhone(phone); return userMapper.getUserByPhone(phone);
} }
public Long getUsersCount() {
log.info("\t> 执行 DAO 层 getUsersCount 方法");
log.info("\t\t> 从 MySQL 获取数据");
return userMapper.getUsersCount();
}
} }

View File

@ -54,8 +54,7 @@ public class ProcessException {
@ExceptionHandler(value = MissingServletRequestParameterException.class) @ExceptionHandler(value = MissingServletRequestParameterException.class)
public ResponseEntity<BaseResponse> businessMissingServletRequestParameterException( public ResponseEntity<BaseResponse> businessMissingServletRequestParameterException(
MissingServletRequestParameterException e MissingServletRequestParameterException e) {
) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
return ResponseEntity return ResponseEntity
.status(400) .status(400)
@ -100,8 +99,7 @@ public class ProcessException {
*/ */
@ExceptionHandler(value = MethodArgumentTypeMismatchException.class) @ExceptionHandler(value = MethodArgumentTypeMismatchException.class)
public ResponseEntity<BaseResponse> businessMethodArgumentTypeMismatchException( public ResponseEntity<BaseResponse> businessMethodArgumentTypeMismatchException(
@NotNull MethodArgumentTypeMismatchException e @NotNull MethodArgumentTypeMismatchException e) {
) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
return ResultUtil.error("ServerInternalError", 50002, "服务器内部错误"); return ResultUtil.error("ServerInternalError", 50002, "服务器内部错误");
} }

View File

@ -11,6 +11,7 @@ import java.util.List;
public interface ModuleMapper { public interface ModuleMapper {
List<ProjectWorkDO> getByProjectId(Integer projectId, Long userId, int is); List<ProjectWorkDO> getByProjectId(Integer projectId, Long userId, int is);
List<ProjectWorkDO> getBySysId(Integer sysId, Long userId, int is); List<ProjectWorkDO> getBySysId(Integer sysId, Long userId, int is);

View File

@ -38,22 +38,16 @@ public interface ProjectMapper {
ProjectDO tgetProjectById(Integer id); ProjectDO tgetProjectById(Integer id);
@Select("select * from organize_oa.oa_project_work where principal_id=#{uid}") @Select("select * from organize_oa.oa_project_work where principal_id=#{uid}")
//"(select id from organize_oa.oa_project_work where id in)")
List<ProjectCuttingDO> projectGetUserInCutting(Long uid); List<ProjectCuttingDO> projectGetUserInCutting(Long uid);
@Insert("update organize_oa.oa_project_work set principal_id =#{uid} where id=#{pid}")
void projectAddUserInCutting(Long uid, Long pid);
@Select("select data from organize_oa.oa_config where value='project_show'") @Select("select data from organize_oa.oa_config where value='project_show'")
String getHeader(); String getHeader();
@Insert("insert into organize_oa.oa_config(value, data, created_at)value ('project_show',null,NOW())") @Insert("insert into organize_oa.oa_config(value, data, created_at)value ('project_show',null,NOW())")
void insertProjectShow(); void insertProjectShow();
@Update("UPDATE organize_oa.oa_config" @Update("UPDATE organize_oa.oa_config SET data = #{setProjectShow},"
+ " SET data = #{setProjectShow}, updated_at = CURRENT_TIMESTAMP " + " updated_at = CURRENT_TIMESTAMP WHERE value = 'project_show'")
+ " WHERE value = 'project_show'"
)
boolean setProjectShow(String setProjectShow); boolean setProjectShow(String setProjectShow);
List<ProjectDO> getByIsfinish(Long userId, List<Integer> isFinish); List<ProjectDO> getByIsfinish(Long userId, List<Integer> isFinish);
@ -72,15 +66,6 @@ public interface ProjectMapper {
@Update("UPDATE organize_oa.oa_project SET is_delete = 1 where id=#{id}") @Update("UPDATE organize_oa.oa_project SET is_delete = 1 where id=#{id}")
boolean deleteProject(Long id); boolean deleteProject(Long id);
@Update("UPDATE organize_oa.oa_project_cutting SET name = #{name}, "
+ "tag = #{tag}, engineering = #{engineering}, estimated_time = #{estimatedTime}, "
+ "real_time = #{realTime}, updated_at = CURRENT_TIMESTAMP WHERE id = #{id}")
boolean projectCuttingUpdate(ProjectCuttingDO projectCuttingDO);
@Update("UPDATE organize_oa.oa_project_user SET uid = #{uid} , updated_at = CURRENT_TIMESTAMP WHERE id = #{id}")
boolean updateUserForProjectUser(Long uid, Long id);
List<ProjectDO> workgetByIsfinish(Long userId, List<Integer> isFinish, Integer is); List<ProjectDO> workgetByIsfinish(Long userId, List<Integer> isFinish, Integer is);
List<ProjectDO> workgetByTags(Long userId, List<String> tags, Integer is, List<Integer> isFinish); List<ProjectDO> workgetByTags(Long userId, List<String> tags, Integer is, List<Integer> isFinish);
@ -105,10 +90,12 @@ public interface ProjectMapper {
@Select("select principal_id from organize_oa.oa_project_work where id=#{pid}") @Select("select principal_id from organize_oa.oa_project_work where id=#{pid}")
Long getPirIdbyWorkid(Long pid); Long getPirIdbyWorkid(Long pid);
@Select("select principal_id from organize_oa.oa_project_work where id=#{id}") @Select("select principal_id from organize_oa.oa_project_work where id=#{id} "
+ "AND is_delete = 0")
Long getPid(Integer id); Long getPid(Integer id);
@Select("select * from organize_oa.oa_project_work where id=#{id}") @Select("select * from organize_oa.oa_project_work where id=#{id} "
+ "AND is_delete = 0")
ProjectWorkDO getProjectWorkById(Long id); ProjectWorkDO getProjectWorkById(Long id);
@Select("select principal_id from organize_oa.oa_project_work where project_id=#{id}") @Select("select principal_id from organize_oa.oa_project_work where project_id=#{id}")
@ -121,4 +108,9 @@ public interface ProjectMapper {
+ "where DATE(deadline) = DATE(#{threeDayLater}) and is_finish != 1") + "where DATE(deadline) = DATE(#{threeDayLater}) and is_finish != 1")
List<ProjectWorkDO> getProjectWorkByTime(LocalDateTime threeDayLater); List<ProjectWorkDO> getProjectWorkByTime(LocalDateTime threeDayLater);
List<ProjectWorkDO> getAllSubmoduleByUserId(Long uid);
List<ProjectDO> getProjectByPrincipalUser(Long uid);
List<ProjectWorkDO> getAllSubsystemByUserId(Long uid);
} }

View File

@ -0,0 +1,27 @@
package com.jsl.oa.mapper;
import com.jsl.oa.model.dodata.ReviewDO;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface ReviewMapper {
@Select("SELECT * FROM organize_oa.oa_review WHERE project_id = #{projectId}"
+ "AND is_delete = 0")
List<ReviewDO> selectAllReviewFromProject(Long projectId);
@Select("SELECT * FROM organize_oa.oa_review WHERE "
+ "project_subsystem_id = #{subsystemId} AND is_delete = 0")
List<ReviewDO> selectReviewFromSubsystem(Long subsystemId);
@Select("SELECT * FROM organize_oa.oa_review WHERE "
+ "project_submodule_id = #{subsystemId} AND is_delete = 0")
List<ReviewDO> selectReviewFromSubmodule(Long submoduleId);
@Select("SELECT * FROM organize_oa.oa_review WHERE id = #{id} AND is_delete = 0")
ReviewDO selectReviewById(Long id);
}

View File

@ -38,7 +38,8 @@ public interface UserMapper {
void userDelete(Long id); void userDelete(Long id);
@Update("UPDATE organize_oa.oa_user " @Update("UPDATE organize_oa.oa_user "
+ "SET account_no_locked = #{isLock} ,updated_at = CURRENT_TIMESTAMP WHERE id = #{id}") + "SET account_no_locked = #{isLock} "
+ ", updated_at = CURRENT_TIMESTAMP WHERE id = #{id} ")
void userLock(Long id, Long isLock); void userLock(Long id, Long isLock);
@Select("SELECT * FROM organize_oa.oa_user WHERE id = #{id}") @Select("SELECT * FROM organize_oa.oa_user WHERE id = #{id}")
@ -80,7 +81,8 @@ public interface UserMapper {
@Update("UPDATE organize_oa.oa_user " @Update("UPDATE organize_oa.oa_user "
+ "SET address = #{address}, phone = #{phone}, email = #{email}, age = #{age}, " + "SET address = #{address}, phone = #{phone}, email = #{email}, age = #{age}, "
+ "signature = #{signature}, sex = #{sex}, avatar = #{avatar}, nickname = #{nickname}, " + "signature = #{signature}, sex = #{sex}, "
+ "avatar = #{avatar}, nickname = #{nickname}, "
+ "description = #{description} ,updated_at = current_timestamp " + "description = #{description} ,updated_at = current_timestamp "
+ "WHERE id = #{id}") + "WHERE id = #{id}")
void updateUser(UserDO userDO); void updateUser(UserDO userDO);
@ -97,8 +99,8 @@ public interface UserMapper {
@Select("SELECT COUNT(*) FROM organize_oa.oa_user") @Select("SELECT COUNT(*) FROM organize_oa.oa_user")
Long getUsersCount(); Long getUsersCount();
@Select("select oa_user.id,oa_user.username,oa_role.role_name " @Select("select oa_user.id,oa_user.username,"
+ "from organize_oa.oa_user join organize_oa.oa_role_user " + "oa_role.role_name from organize_oa.oa_user join organize_oa.oa_role_user "
+ "on oa_user.id = oa_role_user.uid join organize_oa.oa_role on oa_role_user.rid = oa_role.id") + "on oa_user.id = oa_role_user.uid join organize_oa.oa_role on oa_role_user.rid = oa_role.id")
List<PrincipalSelectVO> getPrincipal(); List<PrincipalSelectVO> getPrincipal();
} }

View File

@ -14,8 +14,9 @@ import java.util.List;
* @since v1.1.0 * @since v1.1.0
* @version v1.1.0 * @version v1.1.0
* @author 176yunxuan * @author 176yunxuan
* @param <R> 对类型的泛型处理 * @param <R>
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor

View File

@ -0,0 +1,52 @@
package com.jsl.oa.model.dodata;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* <h1>oa_review 数据表</h1>
* <hr/>
* 映射 oa_permission 数据表内容进入自定义实体类
*
* @author 筱锋xiao_lfeng
* @since v1.1.0
* @version v1.1.0
*/
@Data
@Accessors(chain = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ReviewDO {
//主键
private Long id;
//申请名称
private String name;
//申请理由
private String content;
//申请者用户id
private Long senderId;
//审核者用户id
private Long recipientId;
//审核类别0子系统1子模块
private Integer category;
//申请的项目id
private Long projectId;
//申请的子系统id
private Long projectSubsystemId;
//申请的子模块id
private Long projectSubmoduleId;
//申请时间
private Date applicationTime;
//审核时间
private Date reviewTime;
//审核结果0未通过1通过2未审批
private Integer reviewResult;
//是否删除0未删除1已删除
private Integer isDelete;
}

View File

@ -0,0 +1,47 @@
package com.jsl.oa.model.vodata;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
@Data
@Accessors(chain = true)
public class ReviewVO {
private Long id;
//申请名称
private String name;
//申请理由
private String content;
//申请者用户id
private Long senderId;
//审请者用户名称
private String senderName;
//审核者用户id
private Long recipientId;
//审核者用户名称
private String recipientName;
//审核类别子系统 子模块
private String category;
//申请的项目id
private Long projectId;
//申请的项目名称
private String projectName;
//申请的子系统id
private Long projectSubsystemId;
//申请的子系统名称
private String subsystemName;
//申请的子模块id
private Long projectSubmoduleId;
//申请的模块名称
private String submoduleName;
//申请时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date applicationTime;
//审核结果0未通过1通过2未审批
private String result;
}

View File

@ -27,10 +27,10 @@ public class UserRegisterVO {
@NotBlank(message = "家乡不能为空") @NotBlank(message = "家乡不能为空")
private String address; private String address;
@Pattern( @NotBlank(message = "电话不能为空")
regexp = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", @Pattern(regexp =
message = "电话格式错误" "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$",
) message = "电话格式错误")
private String phone; private String phone;
@NotBlank(message = "邮箱不能为空") @NotBlank(message = "邮箱不能为空")

View File

@ -33,7 +33,6 @@ public interface InfoService {
* *
* @param request 请求 * @param request 请求
* @param carouselVO 轮播图VO * @param carouselVO 轮播图VO
* @param id 轮播图ID
* @return {@link BaseResponse} * @return {@link BaseResponse}
*/ */
BaseResponse editHeaderImage(HttpServletRequest request, CarouselVO carouselVO); BaseResponse editHeaderImage(HttpServletRequest request, CarouselVO carouselVO);

View File

@ -19,8 +19,12 @@ public interface ProjectService {
BaseResponse editHeader(HttpServletRequest request, ProjectShowVO projectShowVO, Integer id); BaseResponse editHeader(HttpServletRequest request, ProjectShowVO projectShowVO, Integer id);
BaseResponse get(Integer listAll, HttpServletRequest request, BaseResponse get(Integer listAll,
List<String> tags, List<Integer> isFinish, Integer page, Integer pageSize); HttpServletRequest request,
List<String> tags,
List<Integer> isFinish,
Integer page,
Integer pageSize);
BaseResponse getByName(String name); BaseResponse getByName(String name);
@ -28,8 +32,15 @@ public interface ProjectService {
BaseResponse projectAdd(HttpServletRequest request, ProjectInfoVO projectVO); BaseResponse projectAdd(HttpServletRequest request, ProjectInfoVO projectVO);
BaseResponse workget(Integer listAll, HttpServletRequest request, BaseResponse projectToOtherUserForCutting(HttpServletRequest request, Long oldUid, Long pid, Long newUid);
List<String> tags, List<Integer> isFinish, Integer is, Integer page, Integer pageSize);
BaseResponse workget(Integer listAll,
HttpServletRequest request,
List<String> tags,
List<Integer> isFinish,
Integer is,
Integer page,
Integer pageSize);
BaseResponse projecWorktAdd(HttpServletRequest request, ProjectWorkVO projectWorkVO); BaseResponse projecWorktAdd(HttpServletRequest request, ProjectWorkVO projectWorkVO);

View File

@ -0,0 +1,12 @@
package com.jsl.oa.services;
import com.jsl.oa.utils.BaseResponse;
import javax.servlet.http.HttpServletRequest;
public interface ReviewService {
BaseResponse getUserReview(Long projectId, HttpServletRequest request);
}

View File

@ -1,5 +1,6 @@
package com.jsl.oa.services; package com.jsl.oa.services;
import com.jsl.oa.model.dodata.UserDO;
import com.jsl.oa.model.vodata.UserAddVO; import com.jsl.oa.model.vodata.UserAddVO;
import com.jsl.oa.model.vodata.UserAllCurrentVO; import com.jsl.oa.model.vodata.UserAllCurrentVO;
import com.jsl.oa.model.vodata.UserEditProfileVO; import com.jsl.oa.model.vodata.UserEditProfileVO;
@ -17,6 +18,15 @@ import javax.servlet.http.HttpServletRequest;
* @since v1.1.0 * @since v1.1.0
*/ */
public interface UserService { public interface UserService {
/**
* <h2>根据用户名获取用户信息</h2>
* <hr/>
* 该方法用于根据用户名获取用户信息
*
* @param username 用户名
* @return 用户信息
*/
UserDO getUserInfoByUsername(String username);
/** /**
* <h2>用户账号删除</h2> * <h2>用户账号删除</h2>
@ -71,7 +81,7 @@ public interface UserService {
* @param phone 手机号 * @param phone 手机号
* @return {@link BaseResponse} * @return {@link BaseResponse}
*/ */
BaseResponse userCurrent(String id, String username, String email, String phone, HttpServletRequest request); BaseResponse userCurrent(HttpServletRequest request, String id, String username, String email, String phone);
BaseResponse userAdd(UserAddVO userAddVo, HttpServletRequest request); BaseResponse userAdd(UserAddVO userAddVo, HttpServletRequest request);

View File

@ -4,6 +4,7 @@ import com.jsl.oa.annotations.CheckUserAbleToUse;
import com.jsl.oa.common.constant.BusinessConstants; import com.jsl.oa.common.constant.BusinessConstants;
import com.jsl.oa.dao.PermissionDAO; import com.jsl.oa.dao.PermissionDAO;
import com.jsl.oa.dao.RoleDAO; import com.jsl.oa.dao.RoleDAO;
import com.jsl.oa.mapper.RoleMapper;
import com.jsl.oa.mapper.UserMapper; import com.jsl.oa.mapper.UserMapper;
import com.jsl.oa.model.dodata.RoleUserDO; import com.jsl.oa.model.dodata.RoleUserDO;
import com.jsl.oa.model.dodata.UserDO; import com.jsl.oa.model.dodata.UserDO;
@ -39,6 +40,7 @@ import java.util.regex.Pattern;
@RequiredArgsConstructor @RequiredArgsConstructor
public class AuthServiceImpl implements AuthService { public class AuthServiceImpl implements AuthService {
private final UserMapper userMapper; private final UserMapper userMapper;
private final RoleMapper roleMapper;
private final RoleDAO roleDAO; private final RoleDAO roleDAO;
private final PermissionDAO permissionDAO; private final PermissionDAO permissionDAO;

View File

@ -78,6 +78,11 @@ public class ProjectServiceImpl implements ProjectService {
return ResultUtil.success("添加成功"); return ResultUtil.success("添加成功");
} }
@Override
public BaseResponse projectToOtherUserForCutting(HttpServletRequest request, Long oldUid, Long pid, Long newUid) {
return null;
}
@Override @Override
public BaseResponse projecWorktAdd(HttpServletRequest request, ProjectWorkVO projectWorkVO) { public BaseResponse projecWorktAdd(HttpServletRequest request, ProjectWorkVO projectWorkVO) {
log.info("\t> 执行 Service 层 ProjectService.projectWorkAdd 方法"); log.info("\t> 执行 Service 层 ProjectService.projectWorkAdd 方法");
@ -336,8 +341,14 @@ public class ProjectServiceImpl implements ProjectService {
} }
@Override @Override
public BaseResponse get(Integer listAll, HttpServletRequest request, public BaseResponse get(
List<String> tags, List<Integer> isFinish, Integer page, Integer pageSize) { Integer listAll,
HttpServletRequest request,
List<String> tags,
List<Integer> isFinish,
Integer page,
Integer pageSize
) {
log.info("\t> 执行 Service 层 ProjectService.get 方法"); log.info("\t> 执行 Service 层 ProjectService.get 方法");
//获取用户 //获取用户
@ -413,9 +424,15 @@ public class ProjectServiceImpl implements ProjectService {
} }
@Override @Override
public BaseResponse workget(Integer listAll, HttpServletRequest request, public BaseResponse workget(
List<String> tags, List<Integer> isFinish, Integer is, Integer listAll,
Integer page, Integer pageSize) { HttpServletRequest request,
List<String> tags,
List<Integer> isFinish,
Integer is,
Integer page,
Integer pageSize
) {
log.info("\t> 执行 Service 层 ProjectService.workget 方法"); log.info("\t> 执行 Service 层 ProjectService.workget 方法");
//获取用户 //获取用户

View File

@ -0,0 +1,118 @@
package com.jsl.oa.services.impl;
import com.jsl.oa.dao.ProjectDAO;
import com.jsl.oa.dao.ReviewDAO;
import com.jsl.oa.dao.UserDAO;
import com.jsl.oa.mapper.ReviewMapper;
import com.jsl.oa.mapper.UserMapper;
import com.jsl.oa.model.dodata.ProjectDO;
import com.jsl.oa.model.dodata.ProjectWorkDO;
import com.jsl.oa.model.dodata.ReviewDO;
import com.jsl.oa.model.vodata.ReviewVO;
import com.jsl.oa.services.ReviewService;
import com.jsl.oa.utils.BaseResponse;
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.ArrayList;
import java.util.List;
@Slf4j
@Service
@RequiredArgsConstructor
public class ReviewServiceImpl implements ReviewService {
private final UserDAO userDAO;
private final ReviewDAO reviewDAO;
private final ProjectDAO projectDAO;
private final UserMapper userMapper;
private final ReviewMapper reviewMapper;
@Override
public BaseResponse getUserReview(Long projectId, HttpServletRequest request) {
log.info("\t> 执行 Service 层 ReviewService.getUserReview 方法");
//获取用户
Long userId = Processing.getAuthHeaderToUserId(request);
//存储审核数据的数组
List<ReviewVO> reviewData = new ArrayList<>();
//先获取用户为项目负责人的项目列表
projectDAO.getProjectByPrincipalUser(userId);
//先从用户为 项目负责人 的项目中获取对应 审核信息
for (ProjectDO projectDO : projectDAO.getProjectByPrincipalUser(userId)) {
//查询每个项目下所有的审核信息
List<ReviewDO> reviewDOS = reviewMapper.
selectAllReviewFromProject(projectDO.getId());
//封装VO类
reviewData.addAll(encapsulateArrayClass(reviewDOS));
}
//在从用户为 子系统负责人 的项目中获取对应 审核信息
for (ProjectWorkDO projectWorkDO : projectDAO.getAllSubsystemByUserId(userId)) {
//查询每个项目下所有的审核信息
List<ReviewDO> reviewDOS = reviewMapper.
selectReviewFromSubsystem(projectWorkDO.getId());
//封装VO类
reviewData.addAll(encapsulateArrayClass(reviewDOS));
}
//在从用户为 子模块负责人 的项目中获取对应 审核信息
for (ProjectWorkDO projectWorkDO : projectDAO.getAllSubmoduleByUserId(userId)) {
//查询每个项目下所有的审核信息
List<ReviewDO> reviewDOS = reviewMapper.
selectReviewFromSubmodule(projectWorkDO.getId());
//封装VO类
reviewData.addAll(encapsulateArrayClass(reviewDOS));
}
return ResultUtil.success(reviewData);
}
/**
* @Description: 封装审核的VO类
* @Date: 2024/4/11
* @Param reviewDOS:
**/
public List<ReviewVO> encapsulateArrayClass(List<ReviewDO> reviewDOS) {
// 定义封装类结果集数组
List<ReviewVO> resultData = new ArrayList<>();
for (ReviewDO reviewDO : reviewDOS) {
ReviewVO reviewVO = new ReviewVO();
// 现将相同的属性赋值
Processing.copyProperties(reviewDO, reviewVO);
// 赋值其他属性
reviewVO.setCategory(Processing.turnReviewCategory(reviewDO.getCategory()))
.setSenderName(userMapper.getUserById(reviewDO.getSenderId()).getNickname())
.setRecipientName(userMapper.getUserById(reviewDO.getRecipientId()).getNickname())
.setProjectName(projectDAO.getProjectById(reviewDO.getProjectId()).getName())
.setSubsystemName(reviewDAO.getNameBySubproject(reviewDO.getProjectSubsystemId()))
.setSubmoduleName(reviewDAO.getNameBySubproject(reviewDO.getProjectSubmoduleId()))
.setResult(Processing.turnReviewResult(reviewDO.getReviewResult()));
// 将封装好的结果添加到结果集
resultData.add(reviewVO);
}
return resultData;
}
}

View File

@ -41,11 +41,15 @@ import java.util.regex.Pattern;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class UserServiceImpl implements UserService { public class UserServiceImpl implements UserService {
private final UserDAO userDAO; private final UserDAO userDAO;
private final RoleDAO roleDAO; private final RoleDAO roleDAO;
private final PermissionDAO permissionDAO; private final PermissionDAO permissionDAO;
@Override
public UserDO getUserInfoByUsername(String username) {
return userDAO.getUserInfoByUsername(username);
}
@Override @Override
public BaseResponse userDelete(HttpServletRequest request, Long id) { public BaseResponse userDelete(HttpServletRequest request, Long id) {
log.info("\t> 执行 Service 层 UserService.userDelete 方法"); log.info("\t> 执行 Service 层 UserService.userDelete 方法");
@ -127,15 +131,14 @@ public class UserServiceImpl implements UserService {
return ResultUtil.success(userCurrentBackVO); return ResultUtil.success(userCurrentBackVO);
} }
@SuppressWarnings("checkstyle:NestedIfDepth")
@Override @Override
@CheckUserAbleToUse @CheckUserAbleToUse
public BaseResponse userCurrent( public BaseResponse userCurrent(HttpServletRequest request,
String id, String id,
String username, String username,
String email, String email,
String phone, String phone) {
HttpServletRequest request
) {
log.info("\t> 执行 Service 层 UserService.userCurrent 方法"); log.info("\t> 执行 Service 层 UserService.userCurrent 方法");
if (id == null && username == null && email == null && phone == null) { if (id == null && username == null && email == null && phone == null) {
// Token获取信息 // Token获取信息

View File

@ -51,7 +51,8 @@ public enum ErrorCode {
PROJECT_NOT_EXIST("ProjectNotExist", 40016, "项目不存在"), PROJECT_NOT_EXIST("ProjectNotExist", 40016, "项目不存在"),
PROJECT_CUTTING_NOT_EXIST("ProjectCuttingNotExist", 40017, "项目分割模块不存在"), PROJECT_CUTTING_NOT_EXIST("ProjectCuttingNotExist", 40017, "项目分割模块不存在"),
PROJECT_USER_NOT_EXIST("ProjectUserNotExist", 40018, "用户项目表无对应记录"), PROJECT_USER_NOT_EXIST("ProjectUserNotExist", 40018, "用户项目表无对应记录"),
PROJECT_FILE_JSON_ERROR("ProjectFileJsonError", 40019, "项目文件json格式错误"); PROJECT_FILE_JSON_ERROR("ProjectFileJsonError", 40019, "项目文件json格式错误"),
PROJECT_NOT_USER("ProjectNotUser", 40020, "项目无此用户");
private final String output; private final String output;

View File

@ -278,10 +278,7 @@ public class Processing {
* @return {@link BaseResponse} * @return {@link BaseResponse}
*/ */
public static @NotNull UserCurrentBackVO.UserCurrent returnUserInfo( public static @NotNull UserCurrentBackVO.UserCurrent returnUserInfo(
@NotNull UserDO userDO, @NotNull UserDO userDO, RoleDAO roleDAO, PermissionDAO permissionDAO) {
RoleDAO roleDAO,
PermissionDAO permissionDAO
) {
UserCurrentBackVO.UserCurrent userCurrent = new UserCurrentBackVO.UserCurrent(); UserCurrentBackVO.UserCurrent userCurrent = new UserCurrentBackVO.UserCurrent();
// 获取用户角色 // 获取用户角色
RoleUserDO getUserRole = roleDAO.getRoleUserByUid(userDO.getId()); RoleUserDO getUserRole = roleDAO.getRoleUserByUid(userDO.getId());
@ -301,29 +298,30 @@ public class Processing {
// 获取权限列表信息 // 获取权限列表信息
getPermissionForString = permissionDAO.getPermission(userDO.getId()); getPermissionForString = permissionDAO.getPermission(userDO.getId());
} }
userCurrent.setUser(new UserCurrentBackVO.ReturnUser() userCurrent.setUser(new UserCurrentBackVO.ReturnUser().
.setId(userDO.getId()) setId(userDO.getId()).
.setJobId(userDO.getJobId()) setJobId(userDO.getJobId()).
.setUsername(userDO.getUsername()) setUsername(userDO.getUsername()).
.setAddress(userDO.getAddress()) setAddress(userDO.getAddress()).
.setPhone(userDO.getPhone()) setPhone(userDO.getPhone()).
.setEmail(userDO.getEmail()) setEmail(userDO.getEmail()).
.setAge(userDO.getAge()) setAge(userDO.getAge()).
.setSignature(userDO.getSignature()) setSignature(userDO.getSignature()).
.setAvatar(userDO.getAvatar()) setAvatar(userDO.getAvatar()).
.setNickname(userDO.getNickname()) setNickname(userDO.getNickname()).
.setSex(userDO.getSex()) setSex(userDO.getSex()).
.setEnabled(userDO.getEnabled()) setEnabled(userDO.getEnabled()).
.setAccountNoExpired(userDO.getAccountNoExpired()) setAccountNoExpired(userDO.getAccountNoExpired()).
.setCredentialsNoExpired(userDO.getCredentialsNoExpired()) setCredentialsNoExpired(userDO.getCredentialsNoExpired()).
.setRecommend(userDO.getRecommend()) setRecommend(userDO.getRecommend()).
.setAccountNoLocked(userDO.getAccountNoLocked()) setAccountNoLocked(userDO.getAccountNoLocked()).
.setDescription(userDO.getDescription()) setDescription(userDO.getDescription()).
.setCreatedAt(userDO.getCreatedAt()) setCreatedAt(userDO.getCreatedAt()).
.setUpdatedAt(userDO.getUpdatedAt()) setUpdatedAt(userDO.getUpdatedAt()).
.setIsDelete(userDO.getIsDelete())) setIsDelete(userDO.getIsDelete())).
.setRole(new UserCurrentBackVO.ReturnUserRole().setRid(getUserRole.getRid())) setRole(new UserCurrentBackVO.ReturnUserRole().
.setPermission(getPermissionForString); setRid(getUserRole.getRid())).
setPermission(getPermissionForString);
return userCurrent; return userCurrent;
} }
@ -429,4 +427,39 @@ public class Processing {
return vo; return vo;
} }
/**
* @Description: 转换审核的类别属性为字符串
* @Date: 2024/4/11
* @Param category:
**/
public static String turnReviewCategory(Integer category) {
switch (category) {
case 0:
return "子系统";
case 1:
return "模块";
default:
return "其他";
}
}
public static String turnReviewResult(Integer result) {
switch (result) {
case 0:
return "已拒绝";
case 1:
return "已审批";
case 2:
return "待审核";
default:
return "其他";
}
}
} }

View File

@ -1,5 +1,5 @@
maven: maven:
timestamp: @buildDate@ timestamp: 2024/3/10
spring: spring:
profiles: profiles:
active: @profile.active@ active: @profile.active@