refactor(flow): 优化flow api 方便业务侧无token 发起流程

This commit is contained in:
冷冷 committed 2024-11-25 14:11:24 +08:00
1 parent 79c8a64ed4
commit d7a2d060ac
9 files changed
+225 -169

No files matched your search

@@ -11,6 +11,7 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.security.annotation.Inner;
import com.pig4cloud.pigx.flow.engine.utils.ModelUtil;
import com.pig4cloud.pigx.flow.task.dto.*;
import com.pig4cloud.pigx.flow.task.entity.Process;
@@ -95,6 +96,7 @@ public class EngineFlowController {
* @param processInstanceParamDto 启动参数
* @return 流程实例ID
*/
@Inner
@PostMapping("/start")
public R start(@RequestBody ProcessInstanceParamDto processInstanceParamDto) {
Authentication.setAuthenticatedUserId(processInstanceParamDto.getStartUserId());
@@ -2,6 +2,7 @@ package com.pig4cloud.pigx.flow.task.api.feign;
import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.feign.annotation.NoToken;
import com.pig4cloud.pigx.flow.task.dto.ProcessInstanceParamDto;
import com.pig4cloud.pigx.flow.task.vo.FormGroupVo;
import com.pig4cloud.pigx.flow.task.vo.ProcessVO;
@@ -17,8 +18,8 @@ import java.util.List;
* @author lengleng
* @date 2023/7/14
*/
@FeignClient(contextId = "remoteAiTaskService", value = ServiceNameConstants.FLOW_TASK_SERVER)
public interface RemoteAiFlowService {
@FeignClient(contextId = "remoteAiFlowService", value = ServiceNameConstants.FLOW_TASK_SERVER)
public interface RemoteFlowApiFlowService {
/**
* 查询所有我可以发起的表单
@@ -38,7 +39,14 @@ public interface RemoteAiFlowService {
R<ProcessVO> getDetail(@RequestParam("flowId") String flowId);
@PostMapping("/process-instance/startProcessInstance")
R startProcessInstance(@RequestBody ProcessInstanceParamDto paramDto);
/**
* 启动流程实例
*
* @param paramDto param dto
* @return {@link R } 流程实例ID {@link String}
*/
@NoToken
@PostMapping("/process-instance/startInnerProcessInstance")
R<String> startInnerProcessInstance(@RequestBody ProcessInstanceParamDto paramDto);
}
@@ -3,6 +3,7 @@ package com.pig4cloud.pigx.flow.task.api.feign;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.feign.annotation.NoToken;
import com.pig4cloud.pigx.flow.task.dto.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@@ -48,6 +49,7 @@ public interface RemoteFlowEngineService {
* @param processInstanceParamDto 流程实例参数
* @return 启动流程结果
*/
@NoToken
@PostMapping("/flow/start")
R<String> startProcess(@RequestBody ProcessInstanceParamDto processInstanceParamDto);
@@ -2,6 +2,7 @@ package com.pig4cloud.pigx.flow.task.api.feign;
import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.feign.annotation.NoToken;
import com.pig4cloud.pigx.flow.task.dto.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@@ -22,6 +23,7 @@ public interface RemoteFlowTaskService {
* 节点开始事件
* @param nodeRecordParamDto
*/
@NoToken
@PostMapping("/remote/startNodeEvent")
void startNodeEvent(@RequestBody ProcessNodeRecordParamDto nodeRecordParamDto);
@@ -29,6 +31,7 @@ public interface RemoteFlowTaskService {
* 节点结束事件
* @param nodeRecordParamDto
*/
@NoToken
@PostMapping("/remote/endNodeEvent")
void endNodeEvent(@RequestBody ProcessNodeRecordParamDto nodeRecordParamDto);
@@ -43,6 +46,7 @@ public interface RemoteFlowTaskService {
* 创建流程事件
* @param processInstanceRecordParamDto
*/
@NoToken
@PostMapping("/remote/createProcessEvent")
void createProcessEvent(@RequestBody ProcessInstanceRecordParamDto processInstanceRecordParamDto);
@@ -73,6 +77,7 @@ public interface RemoteFlowTaskService {
* @param nodeId 节点id
* @return
*/
@NoToken
@GetMapping("/processNodeData/getNodeData")
R<Node> queryNodeOriData(@RequestParam("flowId") String flowId, @RequestParam("nodeId") String nodeId);
@@ -80,6 +85,7 @@ public interface RemoteFlowTaskService {
* 节点开始指派用户了
* @param processNodeRecordAssignUserParamDto
*/
@NoToken
@PostMapping("/remote/startAssignUser")
R startAssignUser(@RequestBody ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto);
@@ -87,6 +93,7 @@ public interface RemoteFlowTaskService {
* 任务结束事件
* @param processNodeRecordAssignUserParamDto
*/
@NoToken
@PostMapping("/remote/taskEndEvent")
R taskEndEvent(@RequestBody ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto);
@@ -1,3 +1,3 @@
com.pig4cloud.pigx.flow.task.api.feign.RemoteFlowTaskService
com.pig4cloud.pigx.flow.task.api.feign.RemoteFlowEngineService
com.pig4cloud.pigx.flow.task.api.feign.RemoteAiFlowService
com.pig4cloud.pigx.flow.task.api.feign.RemoteFlowApiFlowService
@@ -1,6 +1,7 @@
package com.pig4cloud.pigx.flow.task.controller;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.security.annotation.Inner;
import com.pig4cloud.pigx.flow.task.dto.ProcessInstanceParamDto;
import com.pig4cloud.pigx.flow.task.dto.TaskQueryParamDto;
import com.pig4cloud.pigx.flow.task.service.IProcessInstanceService;
@@ -30,6 +31,19 @@ public class ProcessInstanceController {
return processInstanceService.startProcessInstance(processInstanceParamDto);
}
/**
* 启动内部流程实例
*
* @param processInstanceParamDto 进程实例参数 DTO
* @return {@link R }
*/
@Inner
@SneakyThrows
@PostMapping("startInnerProcessInstance")
public R startInnerProcessInstance(@RequestBody ProcessInstanceParamDto processInstanceParamDto) {
return processInstanceService.startProcessInstance(processInstanceParamDto);
}
/**
* 查询当前登录用户的待办任务
* @param pageDto
@@ -1,6 +1,7 @@
package com.pig4cloud.pigx.flow.task.controller;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.security.annotation.Inner;
import com.pig4cloud.pigx.flow.task.dto.Node;
import com.pig4cloud.pigx.flow.task.dto.ProcessNodeDataDto;
import com.pig4cloud.pigx.flow.task.service.IProcessNodeDataService;
@@ -38,6 +39,7 @@ public class ProcessNodeDataController {
* @param nodeId
* @return
*/
@Inner
@GetMapping("getNodeData")
public R<Node> getNodeData(String flowId, String nodeId) {
return processNodeDataService.getNodeData(flowId, nodeId);
@@ -1,6 +1,7 @@
package com.pig4cloud.pigx.flow.task.controller;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.security.annotation.Inner;
import com.pig4cloud.pigx.flow.task.dto.*;
import com.pig4cloud.pigx.flow.task.service.IRemoteService;
import lombok.RequiredArgsConstructor;
@@ -17,136 +18,154 @@ import java.util.Map;
@RequestMapping("/remote")
public class RemoteController {
private final IRemoteService remoteService;
private final IRemoteService remoteService;
/**
* 根据角色id集合查询用户id集合
* @param roleIdList
* @return
*/
@PostMapping("queryUserIdListByRoleIdList")
public R<List<Long>> queryUserIdListByRoleIdList(@RequestBody List<Long> roleIdList) {
return remoteService.queryUserIdListByRoleIdList(roleIdList);
}
/**
* 根据角色id集合查询用户id集合
*
* @param roleIdList
* @return
*/
@PostMapping("queryUserIdListByRoleIdList")
public R<List<Long>> queryUserIdListByRoleIdList(@RequestBody List<Long> roleIdList) {
return remoteService.queryUserIdListByRoleIdList(roleIdList);
}
/**
* 保存抄送
* @param copyDto
* @return
*/
@PostMapping("savecc")
public R saveCC(@RequestBody ProcessCopyDto copyDto) {
return remoteService.saveCC(copyDto);
}
/**
* 保存抄送
*
* @param copyDto
* @return
*/
@PostMapping("savecc")
public R saveCC(@RequestBody ProcessCopyDto copyDto) {
return remoteService.saveCC(copyDto);
}
/**
* 检查是否是所有的父级
* @param checkParentDto
* @return
*/
@PostMapping("checkIsAllParent")
public R<Boolean> checkIsAllParent(@RequestBody CheckParentDto checkParentDto) {
return remoteService.checkIsAllParent(checkParentDto);
}
/**
* 检查是否是所有的父级
*
* @param checkParentDto
* @return
*/
@PostMapping("checkIsAllParent")
public R<Boolean> checkIsAllParent(@RequestBody CheckParentDto checkParentDto) {
return remoteService.checkIsAllParent(checkParentDto);
}
/**
* 根据部门id集合查询用户id集合
* @param depIdList
* @return
*/
@PostMapping("queryUserIdListByDepIdList")
public R<List<Long>> queryUserIdListByDepIdList(@RequestBody List<Long> depIdList) {
return remoteService.queryUserIdListByDepIdList(depIdList);
}
/**
* 根据部门id集合查询用户id集合
*
* @param depIdList
* @return
*/
@PostMapping("queryUserIdListByDepIdList")
public R<List<Long>> queryUserIdListByDepIdList(@RequestBody List<Long> depIdList) {
return remoteService.queryUserIdListByDepIdList(depIdList);
}
/**
* 检查是否是所有的子级
* @param checkChildDto
* @return
*/
@PostMapping("checkIsAllChild")
public R<Boolean> checkIsAllChild(@RequestBody CheckChildDto checkChildDto) {
return remoteService.checkIsAllChild(checkChildDto);
}
/**
* 检查是否是所有的子级
*
* @param checkChildDto
* @return
*/
@PostMapping("checkIsAllChild")
public R<Boolean> checkIsAllChild(@RequestBody CheckChildDto checkChildDto) {
return remoteService.checkIsAllChild(checkChildDto);
}
/**
* 获取用户的信息-包括扩展字段
* @param userId
* @return
*/
@GetMapping("queryUserAllInfo")
public R<Map<String, Object>> queryUserAllInfo(long userId) {
return remoteService.queryUserAllInfo(userId);
}
/**
* 获取用户的信息-包括扩展字段
*
* @param userId
* @return
*/
@GetMapping("queryUserAllInfo")
public R<Map<String, Object>> queryUserAllInfo(long userId) {
return remoteService.queryUserAllInfo(userId);
}
/**
* 开始节点事件
* @param recordParamDto
* @return
*/
@PostMapping("startNodeEvent")
public R startNodeEvent(@RequestBody ProcessNodeRecordParamDto recordParamDto) {
return remoteService.startNodeEvent(recordParamDto);
}
/**
* 开始节点事件
*
* @param recordParamDto
* @return
*/
@Inner
@PostMapping("/startNodeEvent")
public R startNodeEvent(@RequestBody ProcessNodeRecordParamDto recordParamDto) {
return remoteService.startNodeEvent(recordParamDto);
}
/**
* 流程创建了
* @param processInstanceRecordParamDto
* @return
*/
@PostMapping("createProcessEvent")
public R createProcessEvent(@RequestBody ProcessInstanceRecordParamDto processInstanceRecordParamDto) {
return remoteService.createProcessEvent(processInstanceRecordParamDto);
}
/**
* 流程创建了
*
* @param processInstanceRecordParamDto
* @return
*/
@Inner
@PostMapping("createProcessEvent")
public R createProcessEvent(@RequestBody ProcessInstanceRecordParamDto processInstanceRecordParamDto) {
return remoteService.createProcessEvent(processInstanceRecordParamDto);
}
/**
* 结束节点事件
* @param recordParamDto
* @return
*/
@PostMapping("endNodeEvent")
public R endNodeEvent(@RequestBody ProcessNodeRecordParamDto recordParamDto) {
return remoteService.endNodeEvent(recordParamDto);
}
/**
* 结束节点事件
*
* @param recordParamDto
* @return
*/
@Inner
@PostMapping("endNodeEvent")
public R endNodeEvent(@RequestBody ProcessNodeRecordParamDto recordParamDto) {
return remoteService.endNodeEvent(recordParamDto);
}
/**
* 开始设置执行人
* @param processNodeRecordAssignUserParamDto
* @return
*/
@PostMapping("startAssignUser")
public R startAssignUser(@RequestBody ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto) {
return remoteService.startAssignUser(processNodeRecordAssignUserParamDto);
}
/**
* 开始设置执行人
*
* @param processNodeRecordAssignUserParamDto
* @return
*/
@Inner
@PostMapping("startAssignUser")
public R startAssignUser(@RequestBody ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto) {
return remoteService.startAssignUser(processNodeRecordAssignUserParamDto);
}
/**
* 任务结束事件
* @param processNodeRecordAssignUserParamDto
* @return
*/
@PostMapping("taskEndEvent")
public R taskEndEvent(@RequestBody ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto) {
return remoteService.taskEndEvent(processNodeRecordAssignUserParamDto);
}
/**
* 任务结束事件
*
* @param processNodeRecordAssignUserParamDto
* @return
*/
@Inner
@PostMapping("taskEndEvent")
public R taskEndEvent(@RequestBody ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto) {
return remoteService.taskEndEvent(processNodeRecordAssignUserParamDto);
}
/**
* 实例结束
* @param processInstanceParamDto
* @return
*/
@PostMapping("endProcess")
public R endProcess(@RequestBody ProcessInstanceParamDto processInstanceParamDto) {
return remoteService.endProcess(processInstanceParamDto.getProcessInstanceId());
}
/**
* 实例结束
*
* @param processInstanceParamDto
* @return
*/
@PostMapping("endProcess")
public R endProcess(@RequestBody ProcessInstanceParamDto processInstanceParamDto) {
return remoteService.endProcess(processInstanceParamDto.getProcessInstanceId());
}
/**
* 查询流程管理员
* @param flowId
* @return
*/
@GetMapping("queryProcessAdmin")
public R<Long> queryProcessAdmin(String flowId) {
return remoteService.queryProcessAdmin(flowId);
}
/**
* 查询流程管理员
*
* @param flowId
* @return
*/
@GetMapping("queryProcessAdmin")
public R<Long> queryProcessAdmin(String flowId) {
return remoteService.queryProcessAdmin(flowId);
}
}
@@ -69,16 +69,18 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
*/
@Override
public R startProcessInstance(ProcessInstanceParamDto processInstanceParamDto) {
// 如果没有传递根节点(发起人),则根据当前用户初始化一个
if (StrUtil.isBlank(processInstanceParamDto.getStartUserId())) {
PigxUser user = SecurityUtils.getUser();
processInstanceParamDto.setStartUserId(String.valueOf(user.getId()));
Map<String, Object> paramMap = processInstanceParamDto.getParamMap();
Dict rootUser = Dict.create()
.set("id", user.getId())
.set("name", user.getUsername())
.set("type", NodeUserTypeEnum.USER.getKey());
paramMap.put("root", CollUtil.newArrayList(rootUser));
}
PigxUser user = SecurityUtils.getUser();
processInstanceParamDto.setStartUserId(String.valueOf(user.getId()));
Map<String, Object> paramMap = processInstanceParamDto.getParamMap();
Dict rootUser = Dict.create()
.set("id", user.getId())
.set("name", user.getUsername())
.set("type", NodeUserTypeEnum.USER.getKey());
paramMap.put("root", CollUtil.newArrayList(rootUser));
return flowEngineService.startProcess(processInstanceParamDto);
}
@@ -91,56 +93,56 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
@Override
public R queryMineTask(TaskQueryParamDto taskQueryParamDto) {
taskQueryParamDto.setAssign(SecurityUtils.getUser().getId().toString());
R<Page<TaskDto>> r = flowEngineService.queryAssignTask(taskQueryParamDto);
R<Page<TaskDto>> r = flowEngineService.queryAssignTask(taskQueryParamDto);
if (CollUtil.isEmpty(r.getData().getRecords())) {
return r;
}
if (CollUtil.isEmpty(r.getData().getRecords())) {
return r;
}
Set<String> processInstanceIdSet = r.getData()
.getRecords()
.stream()
.map(TaskDto::getProcessInstanceId)
.collect(Collectors.toSet());
Set<String> processInstanceIdSet = r.getData()
.getRecords()
.stream()
.map(TaskDto::getProcessInstanceId)
.collect(Collectors.toSet());
// 流程实例记录
List<ProcessInstanceRecord> processInstanceRecordList = processInstanceRecordService.lambdaQuery()
.in(ProcessInstanceRecord::getProcessInstanceId, processInstanceIdSet)
.list();
// 流程实例记录
List<ProcessInstanceRecord> processInstanceRecordList = processInstanceRecordService.lambdaQuery()
.in(ProcessInstanceRecord::getProcessInstanceId, processInstanceIdSet)
.list();
// 发起人
// 发起人
// 发起人
List<Long> collect = processInstanceRecordList.stream().map(ProcessInstanceRecord::getUserId).collect(Collectors.toList());
List<SysUser> startUserList = userService.getUserById(collect).getData();
Page<TaskDto> pageResultDto = r.getData();
List<TaskDto> taskDtoList = new ArrayList<>();
for (TaskDto record : r.getData().getRecords()) {
ProcessInstanceRecord processInstanceRecord = processInstanceRecordList.stream()
.filter(w -> StrUtil.equals(w.getProcessInstanceId(), record.getProcessInstanceId()))
.findAny()
.orElse(null);
Page<TaskDto> pageResultDto = r.getData();
List<TaskDto> taskDtoList = new ArrayList<>();
for (TaskDto record : r.getData().getRecords()) {
ProcessInstanceRecord processInstanceRecord = processInstanceRecordList.stream()
.filter(w -> StrUtil.equals(w.getProcessInstanceId(), record.getProcessInstanceId()))
.findAny()
.orElse(null);
if (processInstanceRecord != null) {
record.setProcessName(processInstanceRecord.getName());
SysUser startUser = startUserList.stream()
.filter(w -> w.getUserId().longValue() == processInstanceRecord.getUserId())
.findAny()
.orElse(null);
if (processInstanceRecord != null) {
record.setProcessName(processInstanceRecord.getName());
SysUser startUser = startUserList.stream()
.filter(w -> w.getUserId().longValue() == processInstanceRecord.getUserId())
.findAny()
.orElse(null);
record.setRootUserId(processInstanceRecord.getUserId());
record.setGroupName(processInstanceRecord.getGroupName());
record.setRootUserName(startUser.getUsername());
record.setRootUserAvatarUrl(startUser.getAvatar());
record.setStartTime(processInstanceRecord.getCreateTime());
record.setRootUserId(processInstanceRecord.getUserId());
record.setGroupName(processInstanceRecord.getGroupName());
record.setRootUserName(startUser.getUsername());
record.setRootUserAvatarUrl(startUser.getAvatar());
record.setStartTime(processInstanceRecord.getCreateTime());
taskDtoList.add(record);
}
}
taskDtoList.add(record);
}
}
pageResultDto.setRecords(taskDtoList);
pageResultDto.setRecords(taskDtoList);
return R.ok(pageResultDto);
return R.ok(pageResultDto);
}
/**