Browse Source

Merge remote-tracking branch 'origin/master'

zhanglei
ligaode 4 months ago
parent
commit
5205645a12
  1. 275
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java

275
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java

@ -171,9 +171,11 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
String approver = getApproverForTask(approvers, i); // 动态获取会签候选人
taskService.claim(task2.getId(), approver); // 由会签候选人认领任务
isMultiInstanceTaskNext = true;
}
// 单一审批任务
else if ("单一审批任务".equals(isMultiInstanceTask)) {
}else if("或签任务".equals(isMultiInstanceTask)){
String userId = getApproverForTask(userIds, i);
taskService.claim(task2.getId(), userId);
isMultiInstanceTaskNext = true;
} else if("单一审批任务".equals(isMultiInstanceTask)) {
String userSidForNextNode = getNextNodeUser(bv).getData();
taskService.claim(task2.getId(), userSidForNextNode);
bv.setNextNodeUserSids(userSidForNextNode);
@ -268,7 +270,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
* @param bv
* @return
*/
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById2(BusinessVariables bv) {
/* public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById2(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
// 或签任务候选人
List<String> userIds = Arrays.asList(
@ -403,7 +405,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
updateFlowFieldVo.setSid(bv.getBusinessSid());
updateFlowFieldVo.setName(processDefinition.getName());
return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功");
}
}*/
/**
* 查询下一环节用户是否有转办用户若有转办用户则添加转办评论
@ -470,6 +472,222 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
"657bf5a5-7665-440e-9cbd-ab87eccfbdcc",
"2737e5ee-5ffd-4127-919b-e6694dfc8361");
// 会签任务候选人
List<String> approvers = Arrays.asList(
"1d85d1fe-e527-4ec5-a5e4-c37a76a36518",
"64e289bc-80cd-487a-9498-5ae61e260f71",
"7ffcd76a-4fa0-4c9c-87ca-a0c2116bb2ed");
//获取表单中的参数
Map<String, Object> formVariables = bv.getFormVariables();
formVariables = formVariables == null ? new HashMap<>() : formVariables;
formVariables.put("businessSid", bv.getBusinessSid());
formVariables.put("userSids", userIds);
formVariables.put("approvers", approvers);
String nextUserSid = bv.getNextNodeUserSids();
String taskId = bv.getTaskId();
String userSid = bv.getUserSid();
String instanceId = bv.getInstanceId();
String comment = bv.getComment();
String nodeState = "";
String taskDefKey = "";
String orgPath = bv.getOrgSidPath();
//设置下一环节审批人是否自动审批通过,默认否
boolean contains = false;
//设置是否是管理员自动审批,默认否
boolean adminContains = false;
//查询任务id为taskId的任务是否存在
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if (Objects.isNull(task)) {
return rb.setMsg("任务不存在");
}
//是否是多实例任务
String isMultiInstanceTask = isMultiInstanceTask(task);
boolean isMultiInstanceTaskNext = false;
String service = (String) formVariables.get("service");
String ydfOrgPath = (String) formVariables.get("ydfOrgPath");
String assignee = task.getAssignee();
if (b && (StringUtils.isNotBlank(assignee) && assignee.indexOf(userSid) < 0)) {
return rb.setMsg("当前用户不是环节的待办人,不能进行办理操作!");
}
if (DelegationState.PENDING.equals(task.getDelegationState())) {
adminContains = false;
//加签
Authentication.setAuthenticatedUserId(userSid);
taskService.addComment(taskId, instanceId,
FlowComment.DELEGATE.getType(), comment);
taskService.resolveTask(taskId, formVariables);
nodeState = task.getName();
taskDefKey = task.getTaskDefinitionKey();
} else {
boolean checkTask = false;//是否要查询当前任务是否是会签环节
List<Task> tasks = taskService.createTaskQuery().processInstanceId(instanceId).list();
if (tasks.size() == 1 || "或签任务".equals(isMultiInstanceTask)) {
checkTask = true;
}
taskService.addComment(taskId, instanceId, FlowComment.NORMAL.getType(), comment);
log.error("taskid:{},userSid:{}", taskId, userSid);
log.error("formVariables:{}", JSON.toJSONString(formVariables));
taskService.setAssignee(taskId, userSid);
taskService.complete(taskId, formVariables);
if (checkTask) {
tasks = taskService.createTaskQuery().processInstanceId(instanceId).list();
for (int i = 0; i < tasks.size(); i++) {
Task task2 = tasks.get(i);
isMultiInstanceTask = isMultiInstanceTask(task2);
if ("会签任务".equals(isMultiInstanceTask)) {
taskService.claim(task2.getId(), approvers.get(i)); // 由候选人认领任务
isMultiInstanceTaskNext = true;
} else if ("或签任务".equals(isMultiInstanceTask)) {
taskService.claim(task2.getId(), userIds.get(i)); // 由候选人认领任务
isMultiInstanceTaskNext = true;
} else {
if ("公司间调车".equals(service) && "Activity_0695qh4".equals(bv.getTaskDefKey())) {
if (StringUtils.isBlank(nextUserSid)) {
bv.setOrgSidPath(ydfOrgPath);
ResultBean<String> stringResultBean = getNextNodeUserSidsOfSubmit(bv);
if (!stringResultBean.getSuccess()) {
//下一环节用户为空的情况
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
adminContains = true;
} else {
nextUserSid = stringResultBean.getData();
}
}
} else if (StringUtils.isBlank(nextUserSid)) {
//获取下一环节用户
ResultBean<String> stringResultBean = getNextNodeUserSidsOfSubmit(bv);
if (!stringResultBean.getSuccess()) {
//下一环节用户为空的情况
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
adminContains = true;
} else {
nextUserSid = stringResultBean.getData();
}
} else {
//若下一环节用户与系统管理员一致,则自动审批
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextUserSid)) {
adminContains = true;
}
}
break;
}
}
}
//根据流程实例的id取最新的待办环节,给环节设置上用户sid
ResultBean<List<LatestTaskVo>> ll = flowTaskService.getLatestTasksNew(instanceId);
if (ll.getData().size() > 0) {
LatestTaskVo latestTaskVo = ll.getData().get(0);
String id_ = latestTaskVo.getId_();
if (!isMultiInstanceTaskNext && checkTask) {
//查询下一环节用户是否有转办人
nextUserSid = change(nextUserSid, bv.getInstanceId());
taskService.setAssignee(id_, nextUserSid);//将下一环节用户放入流程中
}
vo.setTaskId(id_);
//在act_ru_variable表中增加环节上的业务参数的变量
taskService.setVariablesLocal(id_, formVariables);
nodeState = latestTaskVo.getName_();
taskDefKey = latestTaskVo.getTask_def_key_();
} else {
nodeState = FlowComment.SETTLE.getRemark();
taskDefKey = "Event_end";
vo.setNodeState(FlowComment.SETTLE.getRemark());
}
}
if (!isMultiInstanceTaskNext) {
if (!DelegationState.PENDING.equals(task.getDelegationState())) {
//获取该流程所有要走的环节节点
List<FlowElement> flowElements = calApprovePath(bv.getModelId(),
bv.getFormVariables());
for (int i = 0; i < flowElements.size(); i++) {
FlowElement flowElement = flowElements.get(i);
String id = flowElement.getId();
// 如果当前环节匹配taskDefKey,并且后续环节存在
if (taskDefKey.equals(id) && i + 1 < flowElements.size()) {
FlowElement nextFlowElement = flowElements.get(i + 1); // 获取下一个环节
List<SysUserVo> nextUserList = getUserListFromFlowElement(nextFlowElement, orgPath); // 获取下一个环节的用户列表
// 获取下下一个环节的用户列表(如果存在)
List<SysUserVo> nextNextUserList = new ArrayList<>();
if (i + 2 < flowElements.size()) {
FlowElement nextNextFlowElement = flowElements.get(i + 2); // 获取下下一个环节
nextNextUserList = getUserListFromFlowElement(nextNextFlowElement, orgPath); // 获取下下一个环节的用户列表
}
// 如果下一个环节只有一个用户,并且其sid与下一级相同,则设置contains为true
if (nextUserList.size() == 1 && nextUserList.get(0).getSid().equals(nextUserSid)) {
contains = true; // 确定自动审批
break; // 跳出循环,不再检查后续环节
}
// 如果下下一个环节没有用户,且下下下一个环节与下一级相同,设置contains为true
if (nextUserList.isEmpty() && nextNextUserList.size() == 1 && nextNextUserList.get(0).getSid().equals(nextUserSid)) {
contains = true; // 确定自动审批
break; // 跳出循环
}
}
}
}
}
//设置管理员是否自动审批的字段是否是是。//若下一环节用户与系统管理员一致,则自动审批
if (adminContains) {
bv.setUserSid(nextUserSid);
bv.setTaskId(vo.getTaskId());
bv.setTaskDefKey(taskDefKey);
bv.setComment("系统自动跳过");
bv.setNextNodeUserSids("");
return handleProsess(bv, false);
}
if (contains) {
bv.setUserSid(nextUserSid);
bv.setTaskId(vo.getTaskId());
bv.setTaskDefKey(taskDefKey);
bv.setComment("因与下一级审批人相同,系统自动处理,需以下一级审批人审批意见为准!");
return handleProsess(bv, false);
}
vo.setProcInsId(instanceId);
vo.setProcDefId(bv.getModelId());
vo.setNodeState(nodeState);
vo.setTaskDefKey(taskDefKey);
vo.setSid(bv.getBusinessSid());
return rb.success().setData(vo);
}
/**
* 提取获取用户角色列表的公共方法避免重复代码
*
* @param flowElement 当前流程环节
* @param orgPath 当前用户的组织路径
* @return 用户列表
*/
private List<SysUserVo> getUserListFromFlowElement(FlowElement flowElement, String orgPath) {
List<SysUserVo> userList = new ArrayList<>(); // 初始化用户列表
if (flowElement instanceof UserTask) { // 判断当前环节是否为用户任务
UserTask userTask = (UserTask) flowElement; // 转换为用户任务类型
List<String> candidateGroups = userTask.getCandidateGroups(); // 获取候选组
UserssQuery userssQuery = new UserssQuery(); // 创建查询对象
userssQuery.setCandidateGroups(candidateGroups); // 设置候选组
userssQuery.setOrgSidPath(orgPath); // 设置组织路径
userList = sysUserFeign.getUsersByRoles(userssQuery).getData(); // 根据角色查询用户
}
return userList == null ? new ArrayList<>() : userList; // 如果返回为null,则返回空列表
}
/* public ResultBean<UpdateFlowFieldVo> handleProsess222(BusinessVariables bv, boolean b) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
UpdateFlowFieldVo vo = new UpdateFlowFieldVo();
// 或签任务候选人
List<String> userIds = Arrays.asList(
"dc6b9e36-1b31-4b94-908b-d2d7f78a0977",
"657bf5a5-7665-440e-9cbd-ab87eccfbdcc",
"2737e5ee-5ffd-4127-919b-e6694dfc8361");
// 会签任务候选人
List<String> approvers = Arrays.asList(
"1d85d1fe-e527-4ec5-a5e4-c37a76a36518",
@ -562,7 +780,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
tasks = taskService.createTaskQuery().processInstanceId(instanceId).list();
for (int i = 0; i < tasks.size(); i++) {
Task task2 = tasks.get(i);
isMultiInstanceTask = isMultiInstanceTask(task2);
isMultiInstanceTask = isMultiInstanceTask(task2);
if ("会签任务".equals(isMultiInstanceTask)) {
taskService.claim(task2.getId(), approvers.get(i)); // 由候选人认领任务
isMultiInstanceTaskNext = true;
@ -570,9 +788,15 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
taskService.claim(task2.getId(), userIds.get(i)); // 由候选人认领任务
isMultiInstanceTaskNext = true;
} else {
ResultBean<String> userResultBean = getNextNodeUser(bv);
bv.setNextNodeUserSids(userResultBean.getData());
nextUserSid = bv.getNextNodeUserSids();
//获取下一环节用户
ResultBean<String> stringResultBean = getNextNodeUserSidsOfSubmit(bv);
if (!stringResultBean.getSuccess()) {
//下一环节用户为空的情况
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
adminContains = true;
} else {
nextUserSid = stringResultBean.getData();
}
break;
}
}
@ -681,7 +905,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
vo.setTaskDefKey(taskDefKey);
vo.setSid(bv.getBusinessSid());
return rb.success().setData(vo);
}
}*/
/**
* 获取下一环节用户
@ -1285,7 +1509,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
}
public ResultBean submit222() {
/* public ResultBean submit222() {
String userSid = "7f56f6ec-4a5f-47b0-aaab-158d64cb97b1";
// 或签任务候选人
List<String> userIds = new ArrayList<>();
@ -1400,37 +1624,10 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
assertTrue(isEnded2);
return ResultBean.fireSuccess();
}
/* private boolean isMultiInstanceTask(Task task, boolean isSequential) {
// 获取任务节点的ID
String taskDefinitionKey = task.getTaskDefinitionKey();
// 获取流程定义对象
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(task.getProcessDefinitionId())
.singleResult();
// 获取BPMN模型,解析任务定义
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
FlowElement flowElement = bpmnModel.getFlowElement(taskDefinitionKey);
// 判断flowElement是否是UserTask,并且获取其multiInstanceLoopCharacteristics
if (flowElement instanceof UserTask) {
UserTask userTask = (UserTask) flowElement;
// 获取multiInstanceLoopCharacteristics
MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics();
if (multiInstance != null) {
boolean sequential = multiInstance.isSequential();
return sequential == isSequential;
}
}
return false;
}*/
public ResultBean submit333() {
public ResultBean submit333() {
String userSid = "7f56f6ec-4a5f-47b0-aaab-158d64cb97b1";
// 或签任务候选人
List<String> userIds = Arrays.asList(

Loading…
Cancel
Save