mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 20:28:44 +08:00 
			
		
		
		
	【功能修改】 整合流程详情接口
This commit is contained in:
		@@ -8,7 +8,6 @@ import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*;
 | 
			
		||||
import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert;
 | 
			
		||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmCategoryDO;
 | 
			
		||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO;
 | 
			
		||||
import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils;
 | 
			
		||||
import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService;
 | 
			
		||||
import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService;
 | 
			
		||||
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
 | 
			
		||||
@@ -128,15 +127,13 @@ public class BpmProcessInstanceController {
 | 
			
		||||
                processInstance.getProcessDefinitionId());
 | 
			
		||||
        BpmProcessDefinitionInfoDO processDefinitionInfo = processDefinitionService.getProcessDefinitionInfo(
 | 
			
		||||
                processInstance.getProcessDefinitionId());
 | 
			
		||||
        String bpmnXml = BpmnModelUtils.getBpmnXml(
 | 
			
		||||
                processDefinitionService.getProcessDefinitionBpmnModel(processInstance.getProcessDefinitionId()));
 | 
			
		||||
        AdminUserRespDTO startUser = adminUserApi.getUser(NumberUtils.parseLong(processInstance.getStartUserId()));
 | 
			
		||||
        DeptRespDTO dept = null;
 | 
			
		||||
        if (startUser != null && startUser.getDeptId() != null) {
 | 
			
		||||
            dept = deptApi.getDept(startUser.getDeptId());
 | 
			
		||||
        }
 | 
			
		||||
        return success(BpmProcessInstanceConvert.INSTANCE.buildProcessInstance(processInstance,
 | 
			
		||||
                processDefinition, processDefinitionInfo, bpmnXml, startUser, dept));
 | 
			
		||||
                processDefinition, processDefinitionInfo, startUser, dept));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @DeleteMapping("/cancel-by-start-user")
 | 
			
		||||
@@ -157,14 +154,6 @@ public class BpmProcessInstanceController {
 | 
			
		||||
        return success(true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @GetMapping("/get-form-fields-permission")
 | 
			
		||||
    @Operation(summary = "获得表单字段权限")
 | 
			
		||||
    @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')")
 | 
			
		||||
    public CommonResult<Map<String, String>> getFormFieldsPermission(
 | 
			
		||||
            @Valid BpmFormFieldsPermissionReqVO reqVO) {
 | 
			
		||||
        return success(processInstanceService.getFormFieldsPermission(reqVO));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @GetMapping("/get-approval-detail")
 | 
			
		||||
    @Operation(summary = "获得审批详情")
 | 
			
		||||
    @Parameter(name = "id", description = "流程实例的编号", required = true)
 | 
			
		||||
 
 | 
			
		||||
@@ -79,8 +79,7 @@ public class BpmTaskController {
 | 
			
		||||
    @Parameter(name = "processInstanceId", description = "流程实例的编号", required = true)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermission('bpm:task:query')")
 | 
			
		||||
    public CommonResult<BpmTaskRespVO> getMyTodoTask(@RequestParam("processInstanceId") String processInstanceId) {
 | 
			
		||||
        List<BpmTaskRespVO> taskList = taskService.getTodoTask(getLoginUserId(), processInstanceId);
 | 
			
		||||
        return success(findFirst(taskList, Objects::nonNull));
 | 
			
		||||
        return success(taskService.getTodoTask(getLoginUserId(), processInstanceId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @GetMapping("done-page")
 | 
			
		||||
 
 | 
			
		||||
@@ -17,6 +17,12 @@ public class BpmApprovalDetailReqVO {
 | 
			
		||||
    @Schema(description = "流程实例的编号", example = "1024")
 | 
			
		||||
    private String processInstanceId;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "流程活动编号",  example = "StartUserNode")
 | 
			
		||||
    private String activityId; // 对应 BPMN XML 节点 Id
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "流程任务编号", example = "95f2f08b-621b-11ef-bf39-00ff4722db8b")
 | 
			
		||||
    private String taskId; // UserTask 对应的Id
 | 
			
		||||
 | 
			
		||||
    @AssertTrue(message = "流程定义的编号和流程实例的编号不能同时为空")
 | 
			
		||||
    @JsonIgnore
 | 
			
		||||
    public boolean isValidProcessParam() {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,14 @@
 | 
			
		||||
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO;
 | 
			
		||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO;
 | 
			
		||||
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@Schema(description = "管理后台 - 审批详情 Response VO")
 | 
			
		||||
@@ -18,6 +21,22 @@ public class BpmApprovalDetailRespVO {
 | 
			
		||||
    @Schema(description = "审批信息列表", requiredMode = Schema.RequiredMode.REQUIRED)
 | 
			
		||||
    private List<ApprovalNodeInfo> approveNodes;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "表单字段权限")
 | 
			
		||||
    private Map<String, String> formFieldsPermission;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "待办任务")
 | 
			
		||||
    private BpmTaskRespVO todoTask;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 所属流程定义信息
 | 
			
		||||
     */
 | 
			
		||||
    private BpmProcessDefinitionRespVO processDefinition;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 所属流程实例信息
 | 
			
		||||
     */
 | 
			
		||||
    private BpmProcessInstanceRespVO processInstance;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "审批节点信息")
 | 
			
		||||
    @Data
 | 
			
		||||
    public static class ApprovalNodeInfo {
 | 
			
		||||
 
 | 
			
		||||
@@ -75,7 +75,6 @@ public interface BpmProcessInstanceConvert {
 | 
			
		||||
    default BpmProcessInstanceRespVO buildProcessInstance(HistoricProcessInstance processInstance,
 | 
			
		||||
                                                          ProcessDefinition processDefinition,
 | 
			
		||||
                                                          BpmProcessDefinitionInfoDO processDefinitionExt,
 | 
			
		||||
                                                          String bpmnXml,
 | 
			
		||||
                                                          AdminUserRespDTO startUser,
 | 
			
		||||
                                                          DeptRespDTO dept) {
 | 
			
		||||
        BpmProcessInstanceRespVO respVO = BeanUtils.toBean(processInstance, BpmProcessInstanceRespVO.class);
 | 
			
		||||
@@ -84,7 +83,6 @@ public interface BpmProcessInstanceConvert {
 | 
			
		||||
        // definition
 | 
			
		||||
        respVO.setProcessDefinition(BeanUtils.toBean(processDefinition, BpmProcessDefinitionRespVO.class));
 | 
			
		||||
        copyTo(processDefinitionExt, respVO.getProcessDefinition());
 | 
			
		||||
        respVO.getProcessDefinition().setBpmnXml(bpmnXml);
 | 
			
		||||
        // user
 | 
			
		||||
        if (startUser != null) {
 | 
			
		||||
            respVO.setStartUser(BeanUtils.toBean(startUser, BpmProcessInstanceRespVO.User.class));
 | 
			
		||||
 
 | 
			
		||||
@@ -84,14 +84,6 @@ public interface BpmProcessInstanceService {
 | 
			
		||||
    PageResult<HistoricProcessInstance> getProcessInstancePage(Long userId,
 | 
			
		||||
                                                               @Valid BpmProcessInstancePageReqVO pageReqVO);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得表单字段权限
 | 
			
		||||
     *
 | 
			
		||||
     * @param reqVO 请求消息
 | 
			
		||||
     * @return 表单字段权限
 | 
			
		||||
     */
 | 
			
		||||
    Map<String, String> getFormFieldsPermission(@Valid BpmFormFieldsPermissionReqVO reqVO);
 | 
			
		||||
 | 
			
		||||
    // TODO @芋艿:重点在 review 下
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取审批详情。
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -33,13 +33,13 @@ public interface BpmTaskService {
 | 
			
		||||
    PageResult<Task> getTaskTodoPage(Long userId, BpmTaskPageReqVO pageReqVO);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得待办任务列表
 | 
			
		||||
     * 获得用户的待办任务, 多条待办任务按时间顺序返回第一条
 | 
			
		||||
     *
 | 
			
		||||
     * @param userId 用户编号
 | 
			
		||||
     * @param processInstanceId 流程实例编号
 | 
			
		||||
     * @return 流程任务列表
 | 
			
		||||
     * @return 待办任务
 | 
			
		||||
     */
 | 
			
		||||
    List<BpmTaskRespVO> getTodoTask(Long userId, String processInstanceId);
 | 
			
		||||
    BpmTaskRespVO getTodoTask(Long userId, String processInstanceId);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得已办的流程任务分页
 | 
			
		||||
@@ -82,7 +82,7 @@ public interface BpmTaskService {
 | 
			
		||||
     * 获得指定流程实例的流程任务列表,包括所有状态的
 | 
			
		||||
     *
 | 
			
		||||
     * @param processInstanceId 流程实例的编号
 | 
			
		||||
     * @param asc 是否升序
 | 
			
		||||
     * @param asc               是否升序
 | 
			
		||||
     * @return 流程任务列表
 | 
			
		||||
     */
 | 
			
		||||
    List<HistoricTaskInstance> getTaskListByProcessInstanceId(String processInstanceId, Boolean asc);
 | 
			
		||||
@@ -115,8 +115,8 @@ public interface BpmTaskService {
 | 
			
		||||
     * 根据条件查询正在进行中的任务
 | 
			
		||||
     *
 | 
			
		||||
     * @param processInstanceId 流程实例编号,不允许为空
 | 
			
		||||
     * @param assigned 是否分配了审批人,允许空
 | 
			
		||||
     * @param taskDefineKey 任务定义 Key,允许空
 | 
			
		||||
     * @param assigned          是否分配了审批人,允许空
 | 
			
		||||
     * @param taskDefineKey     任务定义 Key,允许空
 | 
			
		||||
     */
 | 
			
		||||
    List<Task> getRunningTaskListByProcessInstanceId(String processInstanceId,
 | 
			
		||||
                                                     Boolean assigned,
 | 
			
		||||
@@ -223,10 +223,10 @@ public interface BpmTaskService {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 处理 Task 创建事件,目前是
 | 
			
		||||
     *
 | 
			
		||||
     * <p>
 | 
			
		||||
     * 1. 更新它的状态为审批中
 | 
			
		||||
     * 2. 处理自动通过的情况,例如说:1)无审批人时,是否自动通过、不通过;2)非【人工审核】时,是否自动通过、不通过
 | 
			
		||||
     *
 | 
			
		||||
     * <p>
 | 
			
		||||
     * 注意:它的触发时机,晚于 {@link #processTaskAssigned(Task)} 之后
 | 
			
		||||
     *
 | 
			
		||||
     * @param task 任务实体
 | 
			
		||||
@@ -251,8 +251,8 @@ public interface BpmTaskService {
 | 
			
		||||
     * 处理 Task 审批超时事件,可能会处理多个当前审批中的任务
 | 
			
		||||
     *
 | 
			
		||||
     * @param processInstanceId 流程示例编号
 | 
			
		||||
     * @param taskDefineKey 任务 Key
 | 
			
		||||
     * @param handlerType 处理类型,参见 {@link BpmUserTaskTimeoutHandlerTypeEnum}
 | 
			
		||||
     * @param taskDefineKey     任务 Key
 | 
			
		||||
     * @param handlerType       处理类型,参见 {@link BpmUserTaskTimeoutHandlerTypeEnum}
 | 
			
		||||
     */
 | 
			
		||||
    void processTaskTimeout(String processInstanceId, String taskDefineKey, Integer handlerType);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,6 @@ import cn.hutool.core.lang.Assert;
 | 
			
		||||
import cn.hutool.core.util.*;
 | 
			
		||||
import cn.hutool.extra.spring.SpringUtil;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 | 
			
		||||
@@ -127,10 +126,12 @@ public class BpmTaskServiceImpl implements BpmTaskService {
 | 
			
		||||
    // TODO 1: @jason:这个,赞要不要放到 BpmApprovalDetailRespVO 里?然后 BpmApprovalDetailRespVO 返回流程实例的信息 processInstance、待审批的信息 todoTask、approveNodes 审批信息列表、以及 getFormFieldsPermission 也融合进去;
 | 
			
		||||
    // 类似我们现在新的 get-bpmn-model-view,就是给 bpmn xml 高亮用的。那 get-approval-detail 就是给审批第一个 tab 用的,基本信息 + 按钮 + 流程预测
 | 
			
		||||
 | 
			
		||||
    // TODO 2:是不是只返回一个 Task。按道理说,只会有一个审批?
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<BpmTaskRespVO> getTodoTask(Long userId, String processInstanceId) {
 | 
			
		||||
    public BpmTaskRespVO getTodoTask(Long userId, String processInstanceId) {
 | 
			
		||||
        // TODO 芋艿:暂未 review,后续再瞅瞅。先沟通完整体设计。
 | 
			
		||||
        if (processInstanceId == null) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        TaskQuery taskQuery = taskService.createTaskQuery()
 | 
			
		||||
                .active()
 | 
			
		||||
                .processInstanceId(processInstanceId)
 | 
			
		||||
@@ -153,7 +154,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
 | 
			
		||||
        Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds);
 | 
			
		||||
        Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(
 | 
			
		||||
                convertSet(userMap.values(), AdminUserRespDTO::getDeptId));
 | 
			
		||||
        return CollectionUtils.convertList(todoList, task -> {
 | 
			
		||||
        List<BpmTaskRespVO> taskList = convertList(todoList, task -> {
 | 
			
		||||
            // 找到分配给当前用户,或者当前用户加签的任务(为了减签)
 | 
			
		||||
            if (!userId.equals(NumberUtil.parseLong(task.getAssignee(), null)) &&
 | 
			
		||||
                    (!userId.equals(NumberUtil.parseLong(task.getOwner(), null)) || BpmTaskSignTypeEnum.of(task.getScopeType()) == null)) {
 | 
			
		||||
@@ -173,22 +174,23 @@ public class BpmTaskServiceImpl implements BpmTaskService {
 | 
			
		||||
                List<Task> childTasks = childrenTaskMap.get(task.getId());
 | 
			
		||||
                if (CollUtil.isNotEmpty(childTasks)) {
 | 
			
		||||
                    taskVO.setChildren(
 | 
			
		||||
                        CollectionUtils.convertList(childTasks, childTask -> {
 | 
			
		||||
                            BpmTaskRespVO childTaskVO = BeanUtils.toBean(task, BpmTaskRespVO.class);
 | 
			
		||||
                            childTaskVO.setStatus(FlowableUtils.getTaskStatus(task));
 | 
			
		||||
                            AdminUserRespDTO assignUser = userMap.get(NumberUtils.parseLong(childTask.getAssignee()));
 | 
			
		||||
                            if (assignUser != null) {
 | 
			
		||||
                                childTaskVO.setAssigneeUser(BeanUtils.toBean(assignUser, BpmProcessInstanceRespVO.User.class));
 | 
			
		||||
                                findAndThen(deptMap, assignUser.getDeptId(), dept -> childTaskVO.getAssigneeUser().setDeptName(dept.getName()));
 | 
			
		||||
                            }
 | 
			
		||||
                            return childTaskVO;
 | 
			
		||||
                        })
 | 
			
		||||
                            convertList(childTasks, childTask -> {
 | 
			
		||||
                                BpmTaskRespVO childTaskVO = BeanUtils.toBean(task, BpmTaskRespVO.class);
 | 
			
		||||
                                childTaskVO.setStatus(FlowableUtils.getTaskStatus(task));
 | 
			
		||||
                                AdminUserRespDTO assignUser = userMap.get(NumberUtils.parseLong(childTask.getAssignee()));
 | 
			
		||||
                                if (assignUser != null) {
 | 
			
		||||
                                    childTaskVO.setAssigneeUser(BeanUtils.toBean(assignUser, BpmProcessInstanceRespVO.User.class));
 | 
			
		||||
                                    findAndThen(deptMap, assignUser.getDeptId(), dept -> childTaskVO.getAssigneeUser().setDeptName(dept.getName()));
 | 
			
		||||
                                }
 | 
			
		||||
                                return childTaskVO;
 | 
			
		||||
                            })
 | 
			
		||||
                    );
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            return taskVO;
 | 
			
		||||
        });
 | 
			
		||||
        return findFirst(taskList, Objects::nonNull);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user