mirror of
https://gitee.com/hhyykk/ipms-sjy.git
synced 2025-02-03 04:04:58 +08:00
【功能修改】 整合流程详情接口
This commit is contained in:
parent
1c4bb2c80d
commit
1d815c2c22
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user