From 296e46d5af15dde0b498a73306c2343611bcc938 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Wed, 27 Mar 2024 22:42:01 +0800 Subject: [PATCH] Bug --- .../admin/task/BpmTaskController.java | 7 --- .../bpm/dal/mysql/task/BpmTaskExtMapper.java | 6 +++ .../core/listener/BpmTaskEventListener.java | 11 ++++- .../bpm/service/task/BpmTaskService.java | 8 +++- .../bpm/service/task/BpmTaskServiceImpl.java | 47 +++++++++++++++++-- .../controller/admin/user/UserController.java | 15 +++++- .../system/service/dept/DeptServiceImpl.java | 9 ++-- .../system/service/dept/PostService.java | 2 - .../system/service/dept/PostServiceImpl.java | 6 --- 9 files changed, 85 insertions(+), 26 deletions(-) diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java index 060fb562..f38aa143 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java @@ -4,11 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; -import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionListReqVO; -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceMyPageReqVO; -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstancePageItemRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; -import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -34,9 +30,6 @@ public class BpmTaskController { @Resource private BpmTaskService taskService; - @Resource - private BpmProcessInstanceService processInstanceService; - /** * add by yaojun 2024.1.3 * 流程审核添加了抄送用户(多用户)的功能 diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java index 760403ca..a9ca5ba5 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java @@ -38,4 +38,10 @@ public interface BpmTaskExtMapper extends BaseMapperX { update(updateObj, new LambdaQueryWrapper().in(BpmTaskExtDO::getTaskId, taskIdList)); } + default Long selectListCount(Long userId, String processInstanceId){ + + return selectCount(new LambdaQueryWrapperX().eq(BpmTaskExtDO::getAssigneeUserId, userId) + .eq(BpmTaskExtDO::getProcessInstanceId, processInstanceId) + .eq(BpmTaskExtDO::getResult, BpmProcessInstanceResultEnum.APPROVE.getResult())); + } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmTaskEventListener.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmTaskEventListener.java index 74556199..4f207d61 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmTaskEventListener.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmTaskEventListener.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; import cn.iocoder.yudao.module.bpm.service.task.BpmActivityService; +import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; import com.google.common.collect.ImmutableSet; import lombok.extern.slf4j.Slf4j; @@ -37,6 +38,10 @@ public class BpmTaskEventListener extends AbstractFlowableEngineEventListener { @Lazy // 解决循环依赖 private BpmActivityService activityService; + @Resource + @Lazy // 解决循环依赖 + private BpmProcessInstanceService processInstanceService; + public static final Set TASK_EVENTS = ImmutableSet.builder() .add(FlowableEngineEventType.TASK_CREATED) .add(FlowableEngineEventType.TASK_ASSIGNED) @@ -50,7 +55,11 @@ public class BpmTaskEventListener extends AbstractFlowableEngineEventListener { @Override protected void taskCreated(FlowableEngineEntityEvent event) { - taskService.createTaskExt((Task) event.getEntity()); + Task task = (Task) event.getEntity(); + taskService.createTaskExt(task); + + //在TASK创建时, 监听审批人是否时发起人 + taskService.approveAuto(task); } @Override diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java index 107e2c59..45999724 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java @@ -2,8 +2,6 @@ package cn.iocoder.yudao.module.bpm.service.task; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceMyPageReqVO; -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstancePageItemRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; import org.flowable.task.api.Task; @@ -199,4 +197,10 @@ public interface BpmTaskService { */ String getCurrentTaskIdByProcessInstanceId(String processInstanceId) ; + + /** + * 监听 判断流程审批人是否是发起人 + * @param task + */ + void approveAuto(Task task); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java index 6d8673a8..905725a0 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java @@ -36,7 +36,6 @@ import org.flowable.engine.HistoryService; import org.flowable.engine.ManagementService; import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; -import org.flowable.engine.history.HistoricActivityInstance; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.task.api.DelegationState; @@ -660,8 +659,10 @@ public class BpmTaskServiceImpl implements BpmTaskService { */ private Task validateTask(Long userId, String taskId) { Task task = validateTaskExist(taskId); - if (!Objects.equals(userId, NumberUtils.parseLong(task.getAssignee()))) { - throw exception(TASK_OPERATE_FAIL_ASSIGN_NOT_SELF); + if( userId != null ) { + if (!Objects.equals(userId, NumberUtils.parseLong(task.getAssignee()))) { + throw exception(TASK_OPERATE_FAIL_ASSIGN_NOT_SELF); + } } return task; } @@ -1168,6 +1169,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { } + @Override public String getCurrentTaskIdByProcessInstanceId(String processInstanceId) { TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(processInstanceId).active(); List tasks = taskQuery.list(); @@ -1183,4 +1185,43 @@ public class BpmTaskServiceImpl implements BpmTaskService { throw exception(TASK_NOT_EXISTS); } } + + /** + * 监听 判断流程审批人是否是发起人 + * @param task + */ + @Override + public void approveAuto(Task task) { + + //在事务提交后, 进行判断 + TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { + + @Override + public void afterCommit() { + + ProcessInstance processInstance = processInstanceService.getProcessInstance(task.getProcessInstanceId()); + + //如果当前审批人是流程发起人,则自动通过当前审批节点 + if (processInstance.getStartUserId().equals(task.getAssignee())) { + + BpmTaskApproveReqVO reqVO = new BpmTaskApproveReqVO(); + reqVO.setId(task.getId()); + reqVO.setReason(BpmConstants.AUTO_APPRAVAL); + approveTask(Long.valueOf(task.getAssignee()), reqVO); + }else { + //判断 当前审批人是否在该流程中 已通过审批 + //如果有,则自动审批通过该审批人节点 + Long count = taskExtMapper.selectListCount(Long.valueOf(task.getAssignee()), task.getProcessInstanceId()); + + if (count > 0L) { + + BpmTaskApproveReqVO reqVO = new BpmTaskApproveReqVO(); + reqVO.setId(task.getId()); + reqVO.setReason(BpmConstants.AUTO_APPRAVAL); + approveTask(Long.valueOf(task.getAssignee()), reqVO); + } + } + } + }); + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java index 2a1a8721..6c5c9b09 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java @@ -29,7 +29,6 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; import java.util.*; -import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; @@ -126,7 +125,19 @@ public class UserController { // 拼接数据 DeptDO dept = deptService.getDept(user.getDeptId()); - return success(UserConvert.INSTANCE.convert(user, dept)); + // 获取岗位信息 + PostDO post = new PostDO(); + Set postIds = user.getPostIds(); + if (postIds != null && !postIds.isEmpty()) { + + ArrayList list = new ArrayList<>(postIds); + // 只获配置的首个岗位 + Long postId = list.get(0); + + post = postService.getPost(postId); + } + + return success(UserConvert.INSTANCE.convert(user, dept, post)); } @GetMapping("/export") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java index 8b0442a2..58d40585 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java @@ -49,6 +49,7 @@ public class DeptServiceImpl implements DeptService { // 插入部门 DeptDO dept = BeanUtils.toBean(createReqVO, DeptDO.class); + deptMapper.insert(dept); if (dept.getParentId().toString().equals("0")) { @@ -65,7 +66,8 @@ public class DeptServiceImpl implements DeptService { dept.setFlag(patentDeptDO.getFlag() + "-" + dept.getId().toString()); } - deptMapper.insert(dept); + //更新部门 信息 + deptMapper.updateById(dept); return dept.getId(); } @@ -89,8 +91,9 @@ public class DeptServiceImpl implements DeptService { // 更新部门 DeptDO updateObj = BeanUtils.toBean(updateReqVO, DeptDO.class); - if (updateObj.getLeaderUserId() == null) - updateObj.setLeaderUserId(new Long(0)); + if (updateObj.getLeaderUserId() == null) { + updateObj.setLeaderUserId(0L); + } // 如果变换上级部门 if (!updateObj.getParentId().toString().equals(oldDeptDO.getParentId().toString())) { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java index 5b4d5a01..2efb1e65 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java @@ -100,6 +100,4 @@ public interface PostService { */ void validatePostList(Collection ids); - PostDO getByPostName(String postName); - } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java index ebd97ca6..b93e05ce 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java @@ -150,10 +150,4 @@ public class PostServiceImpl implements PostService { } }); } - - @Override - public PostDO getByPostName(String postName) { - - return postMapper.selectOne(PostDO::getName, postName); - } }