From 76c07eb0498b9fd93544d76806968d03cdbef3c6 Mon Sep 17 00:00:00 2001 From: 123 <123@qq.com> Date: Fri, 23 May 2025 11:26:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4=20?= =?UTF-8?q?=E9=83=A8=E9=97=A8=E4=B8=BB=E7=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysUserController.java | 12 +++++++ .../org/dromara/system/domain/SysUser.java | 5 +++ .../dromara/system/domain/bo/SysUserBo.java | 6 ++-- .../dromara/system/domain/vo/SysUserVo.java | 7 ++++ .../dromara/system/mapper/SysUserMapper.java | 7 ++++ .../system/service/ISysDeptService.java | 8 +++++ .../system/service/ISysUserService.java | 7 ++++ .../service/impl/SysDeptServiceImpl.java | 17 ++++++++++ .../service/impl/SysUserServiceImpl.java | 33 +++++++++++++++++++ .../resources/mapper/system/SysUserMapper.xml | 9 ++++- .../workflow/controller/TestController.java | 2 +- .../workflow/service/IFlwCommonService.java | 6 ++++ .../workflow/service/ILxOaLeaveService.java | 4 --- .../service/impl/FlwCommonServiceImpl.java | 13 ++++++++ .../service/impl/FlwTaskServiceImpl.java | 15 +++++++-- .../service/impl/LxOaLeaveServiceImpl.java | 9 ----- 16 files changed, 139 insertions(+), 21 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java index e1e868a6e..5c4ea102b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java @@ -297,4 +297,16 @@ public class SysUserController extends BaseController { return R.ok(userService.selectUserListByDept(deptId)); } + /** + * 设置部门主管 + * + * @param userIds 角色ID串 + */ + @SaCheckPermission("system:user:setDeptAdmin") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @GetMapping("/setDeptAdmin/{userIds}") + public R setDeptAdmin(@PathVariable Long[] userIds) { + return toAjax(userService.setDeptAdmin(userIds)); + } + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUser.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUser.java index 93a78c575..34cdd6546 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUser.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUser.java @@ -124,6 +124,11 @@ public class SysUser extends TenantEntity { */ private LocalDate employeeLeaveDate; + /** + * 是否部门主管 + */ + private String deptAdminFlag; + public SysUser(Long userId) { this.userId = userId; diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java index a57769345..730395657 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java @@ -45,9 +45,9 @@ public class SysUserBo extends BaseEntity { /** * 用户昵称 */ - @Xss(message = "用户昵称不能包含脚本字符") - @NotBlank(message = "用户昵称不能为空") - @Size(min = 0, max = 30, message = "用户昵称长度不能超过{max}个字符") +// @Xss(message = "用户昵称不能包含脚本字符") +// @NotBlank(message = "用户昵称不能为空") +// @Size(min = 0, max = 30, message = "用户昵称长度不能超过{max}个字符") private String nickName; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java index 1a561b43f..4464f0151 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java @@ -1,5 +1,6 @@ package org.dromara.system.domain.vo; +import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import io.github.linpeilie.annotations.AutoMapper; @@ -160,4 +161,10 @@ public class SysUserVo implements Serializable { */ private LocalDate employeeLeaveDate; + /** + * 部门主管 + */ + @TableField("dept_admin_flag") + private String deptAdminFlag; + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java index 46695aa4c..3d9296b91 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java @@ -120,4 +120,11 @@ public interface SysUserMapper extends BaseMapperPlus { }) int updateById(@Param(Constants.ENTITY) SysUser user); + /** + * 根据部门id获取部门主管 + * + * @param deptId 部门id + * @return 更新操作影响的行数 + */ + Long getDeptAdminByDeptId(@Param("deptId") Long deptId); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java index 1397443cb..84120054b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java @@ -134,4 +134,12 @@ public interface ISysDeptService { * @return 结果 */ int deleteDeptById(Long deptId); + + /** + * 根据角色ID查询部门主管 + * + * @param userId 角色ID + * @return 选中部门列表 + */ + public Long selectDeptAdminByUserId(Long userId); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java index 1fe554547..2b394baef 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java @@ -228,4 +228,11 @@ public interface ISysUserService { * @return 结果 */ List selectUserListByDept(Long deptId); + + /** + * 设置部门主管 + * + * @param userIds 角色ID串 + */ + int setDeptAdmin(Long[] userIds); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java index 98aad216b..689696cc8 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java @@ -26,6 +26,7 @@ import org.dromara.system.domain.SysRole; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.bo.SysDeptBo; import org.dromara.system.domain.vo.SysDeptVo; +import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.mapper.SysDeptMapper; import org.dromara.system.mapper.SysRoleMapper; import org.dromara.system.mapper.SysUserMapper; @@ -411,4 +412,20 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { return baseMapper.deleteById(deptId); } + /** + * 根据角色ID查询部门主管 + * + * @param userId 角色ID + * @return 选中部门列表 + */ + @Override + public Long selectDeptAdminByUserId(Long userId) { + // 查询用户所在部门 + SysUserVo sysUserVo = userMapper.selectVoById(userId); + Long deptId = sysUserVo.getDeptId(); + // 查询部门主管 + Long deptAdminId = userMapper.getDeptAdminByDeptId(deptId); + return deptAdminId; + } + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index d5b263b40..50d22e935 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -391,6 +392,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { .set(SysUser::getPhonenumber, user.getPhonenumber()) .set(SysUser::getEmail, user.getEmail()) .set(SysUser::getSex, user.getSex()) + .set(SysUser::getEmployeeName, user.getEmployeeName()) .eq(SysUser::getUserId, user.getUserId())); } @@ -553,6 +555,37 @@ public class SysUserServiceImpl implements ISysUserService, UserService { return baseMapper.selectVoList(lqw); } + /** + * 设置部门主管 + * + * @param userIds 角色ID串 + */ + @Override + @Transactional + public int setDeptAdmin(Long[] userIds) { + if (ArrayUtil.isNotEmpty(userIds)) { + for (Long userId : userIds) { + // 获取所属部门 + SysUserVo sysUserVo = baseMapper.selectVoById(userId); + String deptAdminFlag = sysUserVo.getDeptAdminFlag(); + Long deptId = sysUserVo.getDeptId(); + if (StrUtil.equals("0", deptAdminFlag)) { + // 将原先的部门主管设为0 + Long deptAdminId = baseMapper.getDeptAdminByDeptId(deptId); + SysUser userVo = new SysUser(); + userVo.setUserId(deptAdminId); + userVo.setDeptAdminFlag("0"); + baseMapper.updateById(userVo); + SysUser userVoNow = new SysUser(); + userVoNow.setUserId(userId); + userVoNow.setDeptAdminFlag("1"); + baseMapper.updateById(userVoNow); + } + } + } + return 1; + } + /** * 通过用户ID查询用户账户 * diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 5cb592d7d..14f8769ba 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -18,7 +18,7 @@ u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.employee_name, - u.employee_hire_date, u.employee_leave_date, u.employee_status, + u.employee_hire_date, u.employee_leave_date, u.employee_status,u.dept_admin_flag, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark from sys_user u @@ -101,6 +101,13 @@ where del_flag = '0' and user_id = #{userId} + diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestController.java index 5ec864f6b..523a3dc7f 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/TestController.java @@ -49,7 +49,7 @@ public class TestController extends BaseController { @GetMapping("/list1") public void list(Long userId) { userId = 1L; - String deptAdmin = lxOaLeaveService.getDeptAdmin(userId); +// String deptAdmin = lxOaLeaveService.getDeptAdmin(userId); // return null; } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java index 73201f43f..b29fc449c 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java @@ -73,4 +73,10 @@ public interface IFlwCommonService { * @param taskIds 任务id */ void deleteRunTask(List taskIds); + + + /** + * 校验并批量删除请假信息 + */ + Long getDeptAdmin(Long userId); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/ILxOaLeaveService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/ILxOaLeaveService.java index e105637ad..8e806b686 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/ILxOaLeaveService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/ILxOaLeaveService.java @@ -45,8 +45,4 @@ public interface ILxOaLeaveService { */ Boolean deleteWithValidByIds(List ids); - /** - * 校验并批量删除请假信息 - */ - String getDeptAdmin(Long userId); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java index bbc5734c9..ec7badb6b 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java @@ -12,6 +12,7 @@ import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mail.utils.MailUtils; import org.dromara.common.sse.dto.SseMessageDto; import org.dromara.common.sse.utils.SseMessageUtils; +import org.dromara.system.service.ISysDeptService; import org.dromara.warm.flow.core.constant.ExceptionCons; import org.dromara.warm.flow.core.dto.FlowParams; import org.dromara.warm.flow.core.entity.Node; @@ -59,6 +60,7 @@ public class FlwCommonServiceImpl implements IFlwCommonService { private final UserService userService; private final TaskService taskService; private final NodeService nodeService; + private final ISysDeptService iSysDeptService; /** * 获取工作流用户service @@ -244,4 +246,15 @@ public class FlwCommonServiceImpl implements IFlwCommonService { userService.deleteByTaskIds(taskIds); flowTaskMapper.deleteByIds(taskIds); } + + /** + * 获取部门主管 + * + * @param userId 用户id + */ + @Override + public Long getDeptAdmin(Long userId) { + Long deptAdmin = iSysDeptService.selectDeptAdminByUserId(userId); + return deptAdmin; + } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index d93ba00ab..ed18dbfbf 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -102,9 +102,17 @@ public class FlwTaskServiceImpl implements IFlwTaskService { // 启动流程实例(提交申请) Map variables = startProcessBo.getVariables(); // 流程发起人 - variables.put(INITIATOR, LoginHelper.getUserIdStr()); + String userIdStr = LoginHelper.getUserIdStr(); + variables.put(INITIATOR, userIdStr); // 业务id variables.put(BUSINESS_ID, businessId); + // 变量赋值 + Long userIdLong = Long.valueOf(userIdStr); + Long deptAdmin = flwCommonService.getDeptAdmin(userIdLong); + if (ObjectUtil.isNull(deptAdmin)) { + throw new ServiceException("流程失败,未指定部门主管!"); + } + variables.put("handler1", deptAdmin); FlowInstance flowInstance = flowInstanceMapper.selectOne(new LambdaQueryWrapper<>(FlowInstance.class) .eq(FlowInstance::getBusinessId, businessId)); if (ObjectUtil.isNotNull(flowInstance)) { @@ -166,12 +174,13 @@ public class FlwTaskServiceImpl implements IFlwTaskService { } // 设置弹窗处理人 Map assigneeMap = setPopAssigneeMap(completeTaskBo.getAssigneeMap(), ins.getVariableMap()); + Map variables = completeTaskBo.getVariables(); if (CollUtil.isNotEmpty(assigneeMap)) { - completeTaskBo.getVariables().putAll(assigneeMap); + variables.putAll(assigneeMap); } // 构建流程参数,包括变量、跳转类型、消息、处理人、权限等信息 FlowParams flowParams = new FlowParams(); - flowParams.variable(completeTaskBo.getVariables()); + flowParams.variable(variables); flowParams.skipType(SkipType.PASS.getKey()); flowParams.message(completeTaskBo.getMessage()); flowParams.flowStatus(BusinessStatusEnum.WAITING.getStatus()).hisStatus(TaskStatusEnum.PASS.getStatus()); diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/LxOaLeaveServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/LxOaLeaveServiceImpl.java index 4da7236e1..a74983418 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/LxOaLeaveServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/LxOaLeaveServiceImpl.java @@ -20,7 +20,6 @@ import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.system.service.ISysDeptService; import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.domain.LxOaLeave; import org.dromara.workflow.domain.bo.LxOaLeaveBo; @@ -50,8 +49,6 @@ public class LxOaLeaveServiceImpl implements ILxOaLeaveService { private final LxOaLeaveMapper baseMapper; private final WorkflowService workflowService; - private final ISysDeptService iSysDeptService; - /** * spel条件表达:判断小于2 * @@ -146,12 +143,6 @@ public class LxOaLeaveServiceImpl implements ILxOaLeaveService { return baseMapper.deleteByIds(ids) > 0; } - @Override - public String getDeptAdmin(Long userId) { - iSysDeptService.selectDeptListByRoleId(userId); - return null; - } - /** * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) * 正常使用只需#processEvent.flowCode=='leave1'