add 添加设置下一审批人
This commit is contained in:
parent
ad01406fc1
commit
bcb97bc406
@ -58,9 +58,13 @@ public class CompleteTaskBo implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private Map<String, Object> variables;
|
private Map<String, Object> variables;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 弹窗选择的办理人
|
||||||
|
*/
|
||||||
|
private Map<String, Object> assigneeMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 扩展变量(此处为逗号分隔的ossId)
|
* 扩展变量(此处为逗号分隔的ossId)
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
private String ext;
|
private String ext;
|
||||||
|
|
||||||
|
@ -161,6 +161,11 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
if (BusinessStatusEnum.isDraftOrCancelOrBack(ins.getFlowStatus())) {
|
if (BusinessStatusEnum.isDraftOrCancelOrBack(ins.getFlowStatus())) {
|
||||||
flowProcessEventHandler.processHandler(definition.getFlowCode(), ins.getBusinessId(), ins.getFlowStatus(), null, true);
|
flowProcessEventHandler.processHandler(definition.getFlowCode(), ins.getBusinessId(), ins.getFlowStatus(), null, true);
|
||||||
}
|
}
|
||||||
|
// 设置弹窗处理人
|
||||||
|
Map<String, Object> assigneeMap = setPopAssigneeMap(completeTaskBo.getAssigneeMap(), ins.getVariableMap());
|
||||||
|
if (CollUtil.isNotEmpty(assigneeMap)) {
|
||||||
|
completeTaskBo.getVariables().putAll(assigneeMap);
|
||||||
|
}
|
||||||
// 构建流程参数,包括变量、跳转类型、消息、处理人、权限等信息
|
// 构建流程参数,包括变量、跳转类型、消息、处理人、权限等信息
|
||||||
FlowParams flowParams = new FlowParams();
|
FlowParams flowParams = new FlowParams();
|
||||||
flowParams.variable(completeTaskBo.getVariables());
|
flowParams.variable(completeTaskBo.getVariables());
|
||||||
@ -174,6 +179,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
this.setHandler(instance, flowTask, flowCopyList);
|
this.setHandler(instance, flowTask, flowCopyList);
|
||||||
// 消息通知
|
// 消息通知
|
||||||
WorkflowUtils.sendMessage(definition.getFlowName(), ins.getId(), messageType, notice);
|
WorkflowUtils.sendMessage(definition.getFlowName(), ins.getId(), messageType, notice);
|
||||||
|
//设置下一环节处理人
|
||||||
|
setNextHandler(ins.getId());
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
@ -181,6 +188,60 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置下一环节处理人
|
||||||
|
*
|
||||||
|
* @param instanceId 实例ID
|
||||||
|
*/
|
||||||
|
private void setNextHandler(Long instanceId) {
|
||||||
|
Instance inst = insService.getById(instanceId);
|
||||||
|
List<FlowTask> flowTaskList = selectByInstId(instanceId);
|
||||||
|
Map<String, Object> variableMap = inst.getVariableMap();
|
||||||
|
for (FlowTask task : flowTaskList) {
|
||||||
|
if (variableMap != null && variableMap.containsKey(task.getNodeCode())) {
|
||||||
|
String userIds = variableMap.get(task.getNodeCode()).toString();
|
||||||
|
// 批量删除现有任务的办理人记录
|
||||||
|
WorkflowUtils.getFlowUserService().deleteByTaskIds(List.of(task.getId()));
|
||||||
|
// 批量新增任务办理人记录
|
||||||
|
Set<User> users = WorkflowUtils.buildFlowUser(List.of(userIds.split(StringUtils.SEPARATOR)), task.getId());
|
||||||
|
WorkflowUtils.getFlowUserService().saveBatch(new ArrayList<>(users));
|
||||||
|
variableMap.remove(task.getNodeCode());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taskService.mergeVariable(inst, variableMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置弹窗处理人
|
||||||
|
*
|
||||||
|
* @param assigneeMap 处理人
|
||||||
|
* @param variablesMap 变量
|
||||||
|
*/
|
||||||
|
private Map<String, Object> setPopAssigneeMap(Map<String, Object> assigneeMap, Map<String, Object> variablesMap) {
|
||||||
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
if (CollUtil.isEmpty(assigneeMap)) {
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
for (Map.Entry<String, Object> entry : assigneeMap.entrySet()) {
|
||||||
|
if (variablesMap.containsKey(entry.getKey())) {
|
||||||
|
String userIds = variablesMap.get(entry.getKey()).toString();
|
||||||
|
if (StringUtils.isNotBlank(userIds)) {
|
||||||
|
Set<String> hashSet = new HashSet<>();
|
||||||
|
//弹窗传入的选人
|
||||||
|
List<String> popUserIds = Arrays.asList(entry.getValue().toString().split(StringUtils.SEPARATOR));
|
||||||
|
//已有的选人
|
||||||
|
List<String> variableUserIds = Arrays.asList(userIds.split(StringUtils.SEPARATOR));
|
||||||
|
hashSet.addAll(popUserIds);
|
||||||
|
hashSet.addAll(variableUserIds);
|
||||||
|
map.put(entry.getKey(), String.join(StringUtils.SEPARATOR, hashSet));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
map.put(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置办理人
|
* 设置办理人
|
||||||
*
|
*
|
||||||
|
@ -29,6 +29,7 @@ import org.dromara.warm.flow.orm.entity.FlowUser;
|
|||||||
import org.dromara.warm.flow.orm.mapper.FlowNodeMapper;
|
import org.dromara.warm.flow.orm.mapper.FlowNodeMapper;
|
||||||
import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
|
import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
|
||||||
import org.dromara.workflow.common.enums.MessageTypeEnum;
|
import org.dromara.workflow.common.enums.MessageTypeEnum;
|
||||||
|
import org.dromara.workflow.common.enums.TaskAssigneeType;
|
||||||
import org.dromara.workflow.service.IFlwTaskAssigneeService;
|
import org.dromara.workflow.service.IFlwTaskAssigneeService;
|
||||||
import org.dromara.workflow.service.IFlwTaskService;
|
import org.dromara.workflow.service.IFlwTaskService;
|
||||||
|
|
||||||
@ -96,6 +97,32 @@ public class WorkflowUtils {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建工作流用户
|
||||||
|
*
|
||||||
|
* @param userIdList 办理用户
|
||||||
|
* @param taskId 任务ID
|
||||||
|
* @return 用户
|
||||||
|
*/
|
||||||
|
public static Set<User> buildFlowUser(List<String> userIdList, Long taskId) {
|
||||||
|
if (CollUtil.isEmpty(userIdList)) {
|
||||||
|
return Set.of();
|
||||||
|
}
|
||||||
|
Set<User> list = new HashSet<>();
|
||||||
|
Set<String> processedBySet = new HashSet<>();
|
||||||
|
for (String userId : userIdList) {
|
||||||
|
if (!processedBySet.contains(userId)) {
|
||||||
|
FlowUser flowUser = new FlowUser();
|
||||||
|
flowUser.setType(TaskAssigneeType.APPROVER.getCode());
|
||||||
|
flowUser.setProcessedBy(String.valueOf(userId));
|
||||||
|
flowUser.setAssociated(taskId);
|
||||||
|
list.add(flowUser);
|
||||||
|
processedBySet.add(String.valueOf(userId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送消息
|
* 发送消息
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user