|
|
@ -10,6 +10,7 @@ import com.yxt.anrui.flowable.api.flowcomment.FlowCommentDto; |
|
|
|
import com.yxt.anrui.flowable.api.flowtask.*; |
|
|
|
import com.yxt.anrui.flowable.api.sysform.SysForm; |
|
|
|
import com.yxt.anrui.flowable.api.sysprourl.SysProUrlVo; |
|
|
|
import com.yxt.anrui.flowable.biz.flow.FlowableService; |
|
|
|
import com.yxt.anrui.flowable.biz.process.ProcessService; |
|
|
|
import com.yxt.anrui.flowable.biz.sysdeployform.SysDeployFormService; |
|
|
|
import com.yxt.anrui.flowable.biz.sysprourl.SysProUrlService; |
|
|
@ -110,7 +111,8 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask |
|
|
|
private SysStaffOrgFeign sysStaffOrgFeign; |
|
|
|
@Resource |
|
|
|
private SysOrganizationFeign sysOrganizationFeign; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private FlowableService flowableService; |
|
|
|
public ResultBean getProcessCirculationNodesByMap(BusinessVariables bv) { |
|
|
|
String modelId = null; |
|
|
|
if (bv.getModelId()!= null) { |
|
|
@ -272,6 +274,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask |
|
|
|
for( SysUserVo data:data1){ |
|
|
|
TaskUserInfo taskUserInfo=new TaskUserInfo(); |
|
|
|
taskUserInfo.setAssigneeName(data.getName()); |
|
|
|
taskUserInfo.setAssigneeSid(data.getSid()); |
|
|
|
if(!StringUtils.isBlank(data.getHeadImage())){ |
|
|
|
taskUserInfo.setAssigneeHeadImage(fileUploadComponent.getUrlPrefix() +data.getHeadImage()); |
|
|
|
} |
|
|
@ -1113,6 +1116,14 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask |
|
|
|
* @param flowTaskVo |
|
|
|
*/ |
|
|
|
public ResultBean<List<LatestTaskVo>> taskReject(FlowTaskVo flowTaskVo) { |
|
|
|
return taskReject_(flowTaskVo,false); |
|
|
|
} |
|
|
|
/** |
|
|
|
* 驳回任务 |
|
|
|
* |
|
|
|
* @param flowTaskVo |
|
|
|
*/ |
|
|
|
public ResultBean<List<LatestTaskVo>> taskReject_(FlowTaskVo flowTaskVo,boolean b) { |
|
|
|
// 当前任务 task
|
|
|
|
Task task = taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult(); |
|
|
|
if (task.isSuspended()) { |
|
|
@ -1230,18 +1241,38 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask |
|
|
|
} |
|
|
|
// 最近环节
|
|
|
|
parentUserTaskList.forEach(item -> { |
|
|
|
Map<String, Object> map2 = flowTaskMapper.getTaskByDefKey(task.getProcessInstanceId(), targetIds.get(0)); |
|
|
|
Map<String, Object> map = flowTaskMapper.getHistTaskByID(task.getProcessInstanceId(), targetIds.get(0)); |
|
|
|
String assignee_ =item.getAssignee(); |
|
|
|
if(map.get("ASSIGNEE_")!=null){ |
|
|
|
assignee_ = map.get("ASSIGNEE_").toString(); |
|
|
|
} |
|
|
|
// String assignee_ = map.get("ASSIGNEE_").toString();
|
|
|
|
String id_ = map2.get("id_").toString(); |
|
|
|
/* List<FlowElement> flowElements = processService.calApprovePath(flowTaskVo.getInstanceId(), flowTaskVo.getInstanceId(), |
|
|
|
flowTaskVo.getValues()); |
|
|
|
for(int i=0;i<flowElements.size();i++){ |
|
|
|
FlowElement flowElement = flowElements.get(i); |
|
|
|
System.out.println(flowElement.getId()); |
|
|
|
}*/ |
|
|
|
ResultBean<List<LatestTaskVo>> listResultBean_2=null; |
|
|
|
if(flowTaskVo.getUserSid().equals(assignee_)){ |
|
|
|
flowTaskVo.setTaskId(id_); |
|
|
|
flowTaskVo.setUserSid(assignee_); |
|
|
|
flowTaskVo.setTargetKey(item.getId()); |
|
|
|
listResultBean_2= taskReject_(flowTaskVo, true); |
|
|
|
}else{taskService.setAssignee(id_, assignee_);} |
|
|
|
LatestTaskVo latestTaskVo = new LatestTaskVo(); |
|
|
|
latestTaskVo.setASSIGNEE_(item.getAssignee()); |
|
|
|
// latestTaskVo.setId_(item.getId());
|
|
|
|
Map<String, Object> map = flowTaskMapper.getHistTaskByID(task.getProcessInstanceId(), targetIds.get(0)); |
|
|
|
Map<String, Object> map2 = flowTaskMapper.getTaskByDefKey(task.getProcessInstanceId(), targetIds.get(0)); |
|
|
|
String id_ = map2.get("id_").toString(); |
|
|
|
latestTaskVo.setId_(id_); |
|
|
|
String assignee_ = map.get("ASSIGNEE_").toString(); |
|
|
|
taskService.setAssignee(id_, assignee_); |
|
|
|
latestTaskVo.setName_(item.getName()); |
|
|
|
latestTaskVo.setTask_def_key_(item.getId()); |
|
|
|
latestTaskVo.setIncomingSourceRef(item.getIncomingFlows().get(0).getSourceRef()); |
|
|
|
latestTaskVo.setId_(listResultBean_2!=null?listResultBean_2.getData().get(0).getId_():id_); |
|
|
|
if(b){ |
|
|
|
taskService.setAssignee(id_, assignee_); |
|
|
|
} |
|
|
|
latestTaskVo.setName_(listResultBean_2!=null?listResultBean_2.getData().get(0).getName_():item.getName()); |
|
|
|
latestTaskVo.setTask_def_key_(listResultBean_2!=null?listResultBean_2.getData().get(0).getTask_def_key_():item.getId()); |
|
|
|
latestTaskVo.setIncomingSourceRef(listResultBean_2!=null?listResultBean_2.getData().get(0).getIncomingSourceRef():item.getIncomingFlows().get(0).getSourceRef()); |
|
|
|
|
|
|
|
latestTaskList.add(latestTaskVo); |
|
|
|
}); |
|
|
|
} catch (FlowableObjectNotFoundException e) { |
|
|
@ -1335,13 +1366,11 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask |
|
|
|
} |
|
|
|
return historicActivityInstance.getTaskId(); |
|
|
|
} |
|
|
|
|
|
|
|
// @Transactional(rollbackFor = Exception.class)
|
|
|
|
public ResultBean<List<LatestTaskVo>> revokeProcess(FlowTaskVo flowTaskVo) { |
|
|
|
public ResultBean<List<LatestTaskVo>> revokeProcess(FlowTaskVo flowTaskVo,int j) { |
|
|
|
HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().taskId(flowTaskVo.getTaskId()).singleResult(); |
|
|
|
Execution execution = runtimeService.createExecutionQuery().executionId(historicTaskInstance.getExecutionId()).singleResult(); |
|
|
|
DelegateExecution delegateExecution = (DelegateExecution) execution; |
|
|
|
if(delegateExecution==null){ |
|
|
|
if (delegateExecution == null) { |
|
|
|
return new ResultBean<List<LatestTaskVo>>().fail().setMsg("流程已办结,不能撤回!").setData(new ArrayList<>()); |
|
|
|
} |
|
|
|
// 获取当前节点的activityId,即xml中每个标签的ID
|
|
|
@ -1350,21 +1379,86 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask |
|
|
|
// taskService.addComment(currentTask.getId(), execution.getProcessInstanceId(), body.get("msg").toString());
|
|
|
|
// FlowNode flowNode2 = (FlowNode)bpmnModel.getFlowElement(sourceRef);
|
|
|
|
String taskId = getTaskId(currentActivityId, historicTaskInstance.getProcessInstanceId(), historicTaskInstance.getProcessDefinitionId()); |
|
|
|
if(StringUtils.isBlank(taskId)){ |
|
|
|
if (StringUtils.isBlank(taskId)) { |
|
|
|
return new ResultBean<List<LatestTaskVo>>().fail().setMsg("流程找不到上一环节,撤回操作失败!").setData(new ArrayList<>()); |
|
|
|
} |
|
|
|
HistoricTaskInstance historicTaskInstance1 = historyService.createHistoricTaskInstanceQuery().taskId(taskId).singleResult(); |
|
|
|
String assignee = historicTaskInstance1.getAssignee(); |
|
|
|
String userSid = flowTaskVo.getUserSid(); |
|
|
|
if (!assignee.equals(userSid)) { |
|
|
|
ResultBean<FlowRecordVo> flowRecordVoResultBean = flowableService.flowRecord(flowTaskVo.getInstanceId(), flowTaskVo.getInstanceId()); |
|
|
|
List<FlowTask> flowList = flowRecordVoResultBean.getData().getFlowList(); |
|
|
|
String ybrsid=""; |
|
|
|
int ii=0; |
|
|
|
|
|
|
|
FlowTask flowTask_1 = flowList.get(j+1); |
|
|
|
List<TaskUserInfo> taskUserInfos_1 = flowTask_1.getTaskUserInfos(); |
|
|
|
TaskUserInfo taskUserInfo_1 = taskUserInfos_1.get(0); |
|
|
|
|
|
|
|
FlowTask flowTask_0 = flowList.get(j); |
|
|
|
List<TaskUserInfo> taskUserInfos_0 = flowTask_0.getTaskUserInfos(); |
|
|
|
TaskUserInfo taskUserInfo_0 = taskUserInfos_0.get(0); |
|
|
|
String assigneeSid1 = taskUserInfo_1.getAssigneeSid(); |
|
|
|
String assigneeSid0 = taskUserInfo_0.getAssigneeSid(); |
|
|
|
/* if(assigneeSid1.equals(assigneeSid0)){ |
|
|
|
ii=1; |
|
|
|
ybrsid=userSid; |
|
|
|
}else{ |
|
|
|
ybrsid=assigneeSid1; |
|
|
|
}*/ |
|
|
|
|
|
|
|
if(!assigneeSid1.equals(assigneeSid0)){ |
|
|
|
ybrsid=assignee; |
|
|
|
}else{ |
|
|
|
for(int i=1;i<flowList.size();i++){ |
|
|
|
FlowTask flowTask = flowList.get(i); |
|
|
|
List<TaskUserInfo> taskUserInfos = flowTask.getTaskUserInfos(); |
|
|
|
TaskUserInfo taskUserInfo = taskUserInfos.get(0); |
|
|
|
if(assigneeSid0.equals(taskUserInfo.getAssigneeSid())){ |
|
|
|
ii++; |
|
|
|
continue; |
|
|
|
}else{ |
|
|
|
ybrsid=flowList.get(i).getTaskUserInfos().get(0).getAssigneeSid(); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (!ybrsid.equals(userSid)) { |
|
|
|
return new ResultBean<List<LatestTaskVo>>().fail().setMsg("您不是上一环节处理人,不能进行撤回操作!").setData(new ArrayList<>()); |
|
|
|
} else { |
|
|
|
ResultBean<List<LatestTaskVo>> listResultBean = null; |
|
|
|
for(int i=0;i<=ii;i++){ |
|
|
|
listResultBean = revokeProcess_(historicTaskInstance.getProcessInstanceId(),userSid); |
|
|
|
} |
|
|
|
return listResultBean; |
|
|
|
} |
|
|
|
} |
|
|
|
public ResultBean<List<LatestTaskVo>> revokeProcess(FlowTaskVo flowTaskVo) { |
|
|
|
return revokeProcess(flowTaskVo,0); |
|
|
|
} |
|
|
|
|
|
|
|
/* private ResultBean<List<LatestTaskVo>> getListResultBean(FlowTaskVo flowTaskVo, String assignee, ResultBean<List<LatestTaskVo>> listResultBean) { |
|
|
|
List<LatestTaskVo> data = listResultBean.getData(); |
|
|
|
LatestTaskVo latestTaskVo = data.get(0); |
|
|
|
flowTaskVo.setTaskId(latestTaskVo.getId_()); |
|
|
|
flowTaskVo.setUserSid(assignee); |
|
|
|
// ResultBean<List<LatestTaskVo>> listResultBean1 = revokeProcess(flowTaskVo);
|
|
|
|
LatestTaskVo latestTaskVo2 = data.get(0); |
|
|
|
String assignee_ = latestTaskVo2.getASSIGNEE_(); |
|
|
|
if(!assignee_.equals(assignee)){ |
|
|
|
return getListResultBean(flowTaskVo, assignee, listResultBean); |
|
|
|
} |
|
|
|
return listResultBean1; |
|
|
|
}*/ |
|
|
|
|
|
|
|
// @Transactional(rollbackFor = Exception.class)
|
|
|
|
private ResultBean<List<LatestTaskVo>> revokeProcess_( String processInstanceId, |
|
|
|
String assignee ) { |
|
|
|
// 流程回退到上一个节点,审批人继续审批
|
|
|
|
/* runtimeService.createChangeActivityStateBuilder().processInstanceId(historicTaskInstance.getProcessInstanceId()) |
|
|
|
.moveActivityIdTo(currentActivityId,sourceRef).changeState(); |
|
|
|
*/ |
|
|
|
// 获取流程定义信息
|
|
|
|
String processInstanceId = historicTaskInstance.getProcessInstanceId(); |
|
|
|
Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult(); |
|
|
|
ProcessDefinition processDefinition = repositoryService |
|
|
|
.createProcessDefinitionQuery() |
|
|
@ -1395,7 +1489,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask |
|
|
|
} |
|
|
|
// 如果流程已经结束,则得到结束节点
|
|
|
|
if (historyService.createHistoricProcessInstanceQuery().finished() |
|
|
|
.processInstanceId(task.getProcessInstanceId()).count() > 0) { |
|
|
|
.processInstanceId(processInstanceId).count() > 0) { |
|
|
|
return new ResultBean<List<LatestTaskVo>>().fail().setMsg("当前已经结束不能撤回").setData(new ArrayList<>()); |
|
|
|
} |
|
|
|
// 获取活动 ID 即节点 Key
|
|
|
@ -1403,7 +1497,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask |
|
|
|
parentUserTaskList.forEach(item -> parentUserTaskKeyList.add(item.getId())); |
|
|
|
// 获取全部历史节点活动实例,即已经走过的节点历史,数据采用开始时间升序
|
|
|
|
List<HistoricTaskInstance> historicTaskInstanceList = historyService.createHistoricTaskInstanceQuery() |
|
|
|
.processInstanceId(task.getProcessInstanceId()) |
|
|
|
.processInstanceId(processInstanceId) |
|
|
|
.orderByHistoricTaskInstanceStartTime().asc().list(); |
|
|
|
// 数据清洗,将回滚导致的脏数据清洗掉
|
|
|
|
List<String> lastHistoricTaskInstanceList = FlowableUtils.historicTaskInstanceClean(allElements, historicTaskInstanceList); |
|
|
@ -1437,7 +1531,7 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask |
|
|
|
UserTask oneUserTask = parentUserTaskList.get(0); |
|
|
|
// 获取所有正常进行的任务节点 Key,这些任务不能直接使用,需要找出其中需要撤回的任务
|
|
|
|
List<Task> runTaskList = taskService.createTaskQuery() |
|
|
|
.processInstanceId(task.getProcessInstanceId()).list(); |
|
|
|
.processInstanceId(processInstanceId).list(); |
|
|
|
List<String> runTaskKeyList = new ArrayList<>(); |
|
|
|
runTaskList.forEach(item -> runTaskKeyList.add(item.getTaskDefinitionKey())); |
|
|
|
// 需驳回任务列表
|
|
|
@ -1459,10 +1553,14 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask |
|
|
|
})); |
|
|
|
// 设置撤回意见
|
|
|
|
currentTaskIds.forEach(item -> { |
|
|
|
taskService.addComment(item, historicTaskInstance.getProcessInstanceId(), |
|
|
|
taskService.addComment(item, processInstanceId, |
|
|
|
FlowComment.RECALL.getType(), "撤回办理"); |
|
|
|
// 设置实际办理人
|
|
|
|
taskService.setAssignee(item, userSid); |
|
|
|
/* if(assignee.equals("0d8d8119-d476-47ce-89c2-075cd809dda6")){ |
|
|
|
taskService.setAssignee(item, assignee); |
|
|
|
}else{*/ |
|
|
|
taskService.setAssignee(item, assignee); |
|
|
|
/* }*/ |
|
|
|
}); |
|
|
|
|
|
|
|
// 最近环节
|
|
|
@ -1472,14 +1570,14 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask |
|
|
|
if (targetIds.size() > 1) { |
|
|
|
// 1 对 多任务跳转,currentIds 当前节点(1),targetIds 跳转到的节点(多)
|
|
|
|
runtimeService.createChangeActivityStateBuilder() |
|
|
|
.processInstanceId(task.getProcessInstanceId()). |
|
|
|
.processInstanceId(processInstanceId). |
|
|
|
moveSingleActivityIdToActivityIds(currentIds.get(0), targetIds).changeState(); |
|
|
|
} |
|
|
|
// 如果父级任务只有一个,因此当前任务可能为网关中的任务
|
|
|
|
if (targetIds.size() == 1) { |
|
|
|
// 1 对 1 或 多 对 1 情况,currentIds 当前要跳转的节点列表(1或多),targetIds.get(0) 跳转到的节点(1)
|
|
|
|
runtimeService.createChangeActivityStateBuilder() |
|
|
|
.processInstanceId(task.getProcessInstanceId()) |
|
|
|
.processInstanceId(processInstanceId) |
|
|
|
.moveActivityIdsToSingleActivityId(currentIds, targetIds.get(0)).changeState(); |
|
|
|
} |
|
|
|
// 最近环节
|
|
|
@ -1491,8 +1589,13 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask |
|
|
|
latestTaskVo.setTask_def_key_(item.getId()); |
|
|
|
latestTaskVo.setIncomingSourceRef(item.getIncomingFlows().get(0).getSourceRef()); |
|
|
|
|
|
|
|
Map<String, Object> task_map = flowTaskMapper.getTaskByDefKey(historicTaskInstance.getProcessInstanceId(), item.getId()); |
|
|
|
taskService.setAssignee(task_map.get("id_").toString(), userSid); |
|
|
|
Map<String, Object> task_map = flowTaskMapper.getTaskByDefKey(processInstanceId, item.getId()); |
|
|
|
/* if(assignee.equals("0d8d8119-d476-47ce-89c2-075cd809dda6")){ |
|
|
|
taskService.setAssignee(task_map.get("id_").toString(), assignee); |
|
|
|
}else{*/ |
|
|
|
taskService.setAssignee(task_map.get("id_").toString(), assignee); |
|
|
|
/* }*/ |
|
|
|
|
|
|
|
latestTaskVo.setId_(task_map.get("id_").toString()); |
|
|
|
latestTaskList.add(latestTaskVo); |
|
|
|
}); |
|
|
|