|
|
@@ -349,7 +349,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
if (!taskNodeConfigMap.isPresent()) {
|
|
|
throw new MyException("找不到当前节点的配置信息!");
|
|
|
}
|
|
|
- if(taskNodeConfigMap.get().get("styleType") != null){
|
|
|
+ if (taskNodeConfigMap.get().get("styleType") != null) {
|
|
|
vo.setStyleType(Integer.parseInt(taskNodeConfigMap.get().get("styleType").toString()));
|
|
|
}
|
|
|
|
|
|
@@ -382,10 +382,10 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
Optional<FormTemplate> templateOp = formTemplates.stream().filter(f -> Objects.equals(f.getId(), formConfig.getFormId())).findFirst();
|
|
|
templateOp.ifPresent(t -> formInfoVo.setFormJson(t.getFormJson()));
|
|
|
}
|
|
|
- if(formInfoVo.getFormData().containsKey("document_level") && formInfoVo.getFormData().containsKey("emergency_level")){
|
|
|
+ if (formInfoVo.getFormData().containsKey("document_level") && formInfoVo.getFormData().containsKey("emergency_level")) {
|
|
|
Object id = formInfoVo.getFormData().get("id");
|
|
|
OfficialDocumentReceived received = officialdocumentreceivedmapper.selectById(id.toString());
|
|
|
- if(received != null){
|
|
|
+ if (received != null) {
|
|
|
formInfoVo.getFormData().computeIfAbsent("document_level", k -> received.getDocumentLevel());
|
|
|
formInfoVo.getFormData().computeIfAbsent("emergency_level", k -> received.getEmergencyLevel());
|
|
|
}
|
|
|
@@ -619,7 +619,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
if (!taskNodeConfigMap.isPresent()) {
|
|
|
throw new MyException("找不到当前节点的配置信息!");
|
|
|
}
|
|
|
- if(taskNodeConfigMap.get().get("styleType") != null){
|
|
|
+ if (taskNodeConfigMap.get().get("styleType") != null) {
|
|
|
vo.setStyleType(Integer.parseInt(taskNodeConfigMap.get().get("styleType").toString()));
|
|
|
}
|
|
|
|
|
|
@@ -1610,7 +1610,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
// List<Task> tasks = taskQuery.orderByTaskCreateTime().desc().listPage(Convert.toInt((dto.getLimit() - 1) * dto.getSize()), dto.getSize());
|
|
|
// taskIds = tasks.stream().map(Task::getId).collect(Collectors.toList());
|
|
|
// }
|
|
|
- if(!taskIds.isEmpty()){
|
|
|
+ if (!taskIds.isEmpty()) {
|
|
|
dto.setTaskIds(taskIds);
|
|
|
return xjrWorkflowExtraMapper.myApproveRecord(page, dto);
|
|
|
}
|
|
|
@@ -1618,40 +1618,6 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
return new Page<>();
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 判断当前流程是否需要选择人员审批
|
|
|
- */
|
|
|
- public List<LaunchAndApproveVo> isChooseApprove(IsChooseApproveDto dto){
|
|
|
- //根据taskid 获取任务信息
|
|
|
- Task task = taskService.createTaskQuery().taskId(dto.getTaskId()).singleResult();
|
|
|
-
|
|
|
- //获取当前任务变量中的 schemaId
|
|
|
- Long schemaId = Convert.toLong(taskService.getVariable(task.getId(), WorkflowConstant.PROCESS_SCHEMA_ID_KEY));
|
|
|
-
|
|
|
- //排除xml 查出数据
|
|
|
- WorkflowSchema workflowSchema = workflowSchemaMapper.selectOne(Wrappers.lambdaQuery(WorkflowSchema.class).eq(WorkflowSchema::getId, schemaId).select(x -> !x.getProperty().startsWith(DB_FIELD_XML_PREFIX)));
|
|
|
-
|
|
|
- //获取到整个流程模板的配置
|
|
|
- WorkflowSchemaConfig workflowSchemaConfig = null;
|
|
|
- // TODO 判断当前流程是否发生了变更
|
|
|
- if (workflowSchema.getDefinitionId().equals(task.getProcessDefinitionId())) {
|
|
|
- workflowSchemaConfig = JSONUtil.toBean(workflowSchema.getJsonContent(), WorkflowSchemaConfig.class);
|
|
|
- } else {
|
|
|
- WorkflowSchemaHistory workflowSchemaHistory = workflowSchemaHistoryMapper.selectOne(Wrappers.lambdaQuery(WorkflowSchemaHistory.class).eq(WorkflowSchemaHistory::getDefinitionId, task.getProcessDefinitionId()));
|
|
|
- if (workflowSchemaHistory == null) {
|
|
|
- throw new MyException("流转历史记录已丢失!");
|
|
|
- }
|
|
|
- workflowSchemaConfig = JSONUtil.toBean(workflowSchemaHistory.getJsonContent(), WorkflowSchemaConfig.class);
|
|
|
- }
|
|
|
- List<Task> list = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list();
|
|
|
- List<LaunchAndApproveVo> result = new ArrayList<>();
|
|
|
- //如果是同意 || 拒绝 || 其他 默认都是流程往下走
|
|
|
- if (dto.getApprovedType() == WorkflowApproveType.AGREE.getCode() || dto.getApprovedType() == WorkflowApproveType.DISAGREE.getCode() || dto.getApprovedType() == WorkflowApproveType.OTHER.getCode()) {
|
|
|
- result = isPrevChooseApprove(workflowSchemaConfig, list, null);
|
|
|
- }
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
@SneakyThrows
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@@ -1974,13 +1940,13 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
//新增流程自定义发起流程记录
|
|
|
XjrWorkflowOperateRecord xjrWorkflowOperateRecord = new XjrWorkflowOperateRecord();
|
|
|
xjrWorkflowOperateRecord.setNodeId(task.getId());
|
|
|
- if(userTaskConfig.getShowNode() != null){
|
|
|
- if(userTaskConfig.getShowNode()){
|
|
|
+ if (userTaskConfig.getShowNode() != null) {
|
|
|
+ if (userTaskConfig.getShowNode()) {
|
|
|
xjrWorkflowOperateRecord.setShowNode(1);
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
xjrWorkflowOperateRecord.setShowNode(0);
|
|
|
}
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
xjrWorkflowOperateRecord.setShowNode(1);
|
|
|
}
|
|
|
xjrWorkflowOperateRecord.setNodeName(task.getName());
|
|
|
@@ -2688,7 +2654,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
/**
|
|
|
* 根据taskid发送审核通知
|
|
|
*/
|
|
|
- private void sendApproveNoticePolicy(String taskId){
|
|
|
+ private void sendApproveNoticePolicy(String taskId) {
|
|
|
//获取到审批人 发送消息
|
|
|
Object approvedIds = taskService.getVariableLocal(taskId, WorkflowConstant.TASK_ASSIGNEE_VAR_KEY);
|
|
|
|
|
|
@@ -2726,7 +2692,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
param.setStartUserName(MapUtil.get(variables, WorkflowConstant.PROCESS_START_USER_NAME_KEY, String.class));
|
|
|
param.setNoticePolicyConfigs(userTaskConfig.getNoticePolicyConfigs());
|
|
|
//发送消息
|
|
|
- WorkFlowUtil.sendApproveNoticePolicy(param,task.getName());
|
|
|
+ WorkFlowUtil.sendApproveNoticePolicy(param, task.getName());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -3310,7 +3276,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
.orderByDesc(WorkflowCirculated::getCreateTime)
|
|
|
.like(StrUtil.isNotBlank(dto.getTaskName()), WorkflowCirculated::getTaskName, dto.getTaskName())
|
|
|
.like(StrUtil.isNotBlank(dto.getName()), WorkflowSchema::getName, dto.getName())
|
|
|
- .and(StrUtil.isNotBlank(dto.getKeyword()),wp -> wp.like(WorkflowSchema::getName, dto.getKeyword())
|
|
|
+ .and(StrUtil.isNotBlank(dto.getKeyword()), wp -> wp.like(WorkflowSchema::getName, dto.getKeyword())
|
|
|
.or()
|
|
|
.like(WorkflowCirculated::getTaskName, dto.getKeyword())
|
|
|
.or()
|
|
|
@@ -3462,7 +3428,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
|
|
|
List<WorkflowExtra> workflowExtras = workflowExtraMapper.selectList(Wrappers.lambdaQuery(WorkflowExtra.class)
|
|
|
.in(WorkflowExtra::getProcessId, processIds)
|
|
|
- .and(StrUtil.isNotBlank(dto.getKeyword()),wp -> wp.like(WorkflowExtra::getSchemaName, dto.getKeyword())
|
|
|
+ .and(StrUtil.isNotBlank(dto.getKeyword()), wp -> wp.like(WorkflowExtra::getSchemaName, dto.getKeyword())
|
|
|
.or()
|
|
|
.like(WorkflowExtra::getTaskName, dto.getKeyword())
|
|
|
.or()
|
|
|
@@ -3493,7 +3459,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
new QueryWrapper<WorkflowApproveRecord>().lambda()
|
|
|
.eq(WorkflowApproveRecord::getProcessId, e.getProcessId())
|
|
|
);
|
|
|
- if(list.size() > 0){
|
|
|
+ if (list.size() > 0) {
|
|
|
vo.setIsApproval(1);
|
|
|
}
|
|
|
//如果是已经完成的任务 默认是100进度
|
|
|
@@ -4594,9 +4560,9 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
recordListVo.setComment(workflowOperateRecord.getOperateInfo());
|
|
|
recordListVo.setStartTime(workflowOperateRecord.getRecordTime());
|
|
|
|
|
|
- if(workflowOperateRecord.getShowNode() != null && workflowOperateRecord.getShowNode() == 0){
|
|
|
+ if (workflowOperateRecord.getShowNode() != null && workflowOperateRecord.getShowNode() == 0) {
|
|
|
recordListVo.setShowNode(false);
|
|
|
- }else if(workflowOperateRecord.getShowNode() != null && workflowOperateRecord.getShowNode() == 1){
|
|
|
+ } else if (workflowOperateRecord.getShowNode() != null && workflowOperateRecord.getShowNode() == 1) {
|
|
|
recordListVo.setShowNode(true);
|
|
|
}
|
|
|
|
|
|
@@ -5547,6 +5513,28 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
.asc()
|
|
|
.list();
|
|
|
|
|
|
+ // 该流程实例的所有走过的task
|
|
|
+// List<HistoricTaskInstance> taskInstanceList = historyService.createHistoricTaskInstanceQuery()
|
|
|
+// .processInstanceId(task.getProcessInstanceId())
|
|
|
+// .taskId()
|
|
|
+// .finished()
|
|
|
+// .orderByHistoricTaskInstanceEndTime()
|
|
|
+// .asc()
|
|
|
+// .singleResult();
|
|
|
+// for (HistoricTaskInstance h : taskInstanceList) {
|
|
|
+// Map<String, Object> variables = new HashMap<>();
|
|
|
+// // 获取act_hi_detail表中的信息,但是HistoricDetail还没有包含变量信息
|
|
|
+// List<HistoricDetail> details = historyService.createHistoricDetailQuery()
|
|
|
+// .variableUpdates()
|
|
|
+// .activityInstanceId(h.getActivityInstanceId())// 使用activityInstanceId可以获取到每个节点对应的detail信息
|
|
|
+// .list();
|
|
|
+// for (HistoricDetail historicDetail : details) {
|
|
|
+// // 所以需要将HistoricDetail转换为HistoricVariableUpdate才可以获取到variables
|
|
|
+// HistoricVariableUpdate historicVariableUpdate = (HistoricVariableUpdate) historicDetail;
|
|
|
+// variables.put(historicVariableUpdate.getVariableName(), historicVariableUpdate.getValue());
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
if (null == resultList || resultList.size() == 0) {
|
|
|
throw new MyException("当前任务之前不存在用户任务无法驳回!");
|
|
|
}
|
|
|
@@ -5564,6 +5552,28 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
}
|
|
|
String toActId = lastNode.get("toActId");
|
|
|
String assignee = lastNode.get("assignee");
|
|
|
+ String lastTaskId = lastNode.get("taskId");
|
|
|
+ // 获取历史任务信息
|
|
|
+ HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery()
|
|
|
+ .processInstanceId(task.getProcessInstanceId())
|
|
|
+ .taskId(lastTaskId)
|
|
|
+ .finished()
|
|
|
+ .orderByHistoricTaskInstanceEndTime()
|
|
|
+ .asc()
|
|
|
+ .singleResult();
|
|
|
+ // 获取act_hi_detail表中的信息,但是HistoricDetail还没有包含变量信息
|
|
|
+ List<HistoricDetail> details = historyService.createHistoricDetailQuery()
|
|
|
+ .variableUpdates()
|
|
|
+ .activityInstanceId(historicTaskInstance.getActivityInstanceId())// 使用activityInstanceId可以获取到每个节点对应的detail信息
|
|
|
+ .list();
|
|
|
+ Map<String, Object> variables = new HashMap<>();
|
|
|
+ for (HistoricDetail historicDetail : details) {
|
|
|
+ // 所以需要将HistoricDetail转换为HistoricVariableUpdate才可以获取到variables
|
|
|
+ HistoricVariableUpdate historicVariableUpdate = (HistoricVariableUpdate) historicDetail;
|
|
|
+ variables.put(historicVariableUpdate.getVariableName(), historicVariableUpdate.getValue());
|
|
|
+ }
|
|
|
+ assignee = variables.get("assignee").toString();
|
|
|
+
|
|
|
//设置流程中的可变参数
|
|
|
Map<String, Object> taskVariable = new HashMap<>(2);
|
|
|
taskVariable.put("user", assignee);
|
|
|
@@ -5687,15 +5697,15 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
for (ProcessRecordListVo p : processRecordListVos) {
|
|
|
String comment = p.getComment();
|
|
|
String approveComment = "";
|
|
|
- if(!"".equals(comment) && comment != null){
|
|
|
- approveComment = comment.substring(comment.indexOf("审批内容:")+5).replaceAll(", 未达到会签完成条件", "");
|
|
|
+ if (!"".equals(comment) && comment != null) {
|
|
|
+ approveComment = comment.substring(comment.indexOf("审批内容:") + 5).replaceAll(", 未达到会签完成条件", "");
|
|
|
}
|
|
|
|
|
|
String[] commentArr = comment.split(",");
|
|
|
if (commentArr.length > 1) {
|
|
|
String[] approveUserNameArr = commentArr[0].split(":");
|
|
|
String[] approveResultArr = commentArr[1].split(":");
|
|
|
- if(approveResultArr.length > 1 && "驳回".equals(approveResultArr[1])){
|
|
|
+ if (approveResultArr.length > 1 && "驳回".equals(approveResultArr[1])) {
|
|
|
continue;
|
|
|
}
|
|
|
String[] approveCommentArr = commentArr[2].split(":");
|
|
|
@@ -5844,10 +5854,11 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
HistoricActivityInstance historicActivityInstance = resultList.get(originSize - 1);
|
|
|
backNode.put("toActId", historicActivityInstance.getActivityId());
|
|
|
backNode.put("assignee", historicActivityInstance.getAssignee());
|
|
|
+ backNode.put("taskId", historicActivityInstance.getTaskId());
|
|
|
return backNode;
|
|
|
}
|
|
|
//情况2、当前节点在历史节点里(已回退过的)
|
|
|
- return currentNodeInHis(linkedHashMap, currentActivityId);
|
|
|
+ return currentNodeInHis(resultList, currentActivityId);
|
|
|
}
|
|
|
|
|
|
private String getInstanceIdForActivity(ActivityInstance activityInstance, String activityId) {
|
|
|
@@ -5871,18 +5882,20 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
- private static Map<String, String> currentNodeInHis(LinkedHashMap<String, String> linkedHashMap, String currentActivityId) {
|
|
|
+ private static Map<String, String> currentNodeInHis(List<HistoricActivityInstance> resultList, String currentActivityId) {
|
|
|
//情况2、当前节点在历史节点里(已回退过的)
|
|
|
Map<String, String> backNode = new HashMap<>();
|
|
|
- ListIterator<Map.Entry<String, String>> li = new ArrayList<>(linkedHashMap.entrySet()).listIterator();
|
|
|
+// ListIterator<Map.Entry<String, String>> li = new ArrayList<>(linkedHashMap.entrySet()).listIterator();
|
|
|
+ ListIterator<HistoricActivityInstance> li = resultList.listIterator();
|
|
|
//System.out.println("已回退过的");
|
|
|
while (li.hasNext()) {
|
|
|
- Map.Entry<String, String> entry = li.next();
|
|
|
- if (currentActivityId.equals(entry.getKey())) {
|
|
|
+ HistoricActivityInstance entry = li.next();
|
|
|
+ if (currentActivityId.equals(entry.getActivityId())) {
|
|
|
li.previous();
|
|
|
- Map.Entry<String, String> previousEntry = li.previous();
|
|
|
- backNode.put("toActId", previousEntry.getKey());
|
|
|
- backNode.put("assignee", previousEntry.getValue());
|
|
|
+ HistoricActivityInstance previousEntry = li.previous();
|
|
|
+ backNode.put("toActId", previousEntry.getActivityId());
|
|
|
+ backNode.put("assignee", previousEntry.getAssignee());
|
|
|
+ backNode.put("taskId", previousEntry.getTaskId());
|
|
|
return backNode;
|
|
|
}
|
|
|
}
|