Commit 0feec04b authored by Rensq's avatar Rensq

优化危险作业停止子任务

parent b9d3c53a
...@@ -64,8 +64,16 @@ import org.apache.poi.xwpf.usermodel.Document; ...@@ -64,8 +64,16 @@ import org.apache.poi.xwpf.usermodel.Document;
import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFPictureData; import org.apache.poi.xwpf.usermodel.XWPFPictureData;
import org.apache.xmlbeans.XmlOptions; import org.apache.xmlbeans.XmlOptions;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.EndEvent;
import org.flowable.bpmn.model.Process;
import org.flowable.common.engine.impl.identity.Authentication;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService; import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.runtime.Execution;
import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;
import org.quartz.*; import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -1022,6 +1030,7 @@ public class THazardWorkPlanServiceImpl extends SuperServiceImpl<THazardWorkPlan ...@@ -1022,6 +1030,7 @@ public class THazardWorkPlanServiceImpl extends SuperServiceImpl<THazardWorkPlan
} }
//关闭主流程数据 //关闭主流程数据
runtimeService.deleteProcessInstance(byId.getProcessId(), opinion); runtimeService.deleteProcessInstance(byId.getProcessId(), opinion);
ruTaskService.stopProcess(byId.getProcessId());
cancelChildTasks(completeTask); cancelChildTasks(completeTask);
THazardWorkPlan tHazardWorkPlan = new THazardWorkPlan(); THazardWorkPlan tHazardWorkPlan = new THazardWorkPlan();
tHazardWorkPlan.setId(completeTask.getBizId()); tHazardWorkPlan.setId(completeTask.getBizId());
...@@ -1037,7 +1046,8 @@ public class THazardWorkPlanServiceImpl extends SuperServiceImpl<THazardWorkPlan ...@@ -1037,7 +1046,8 @@ public class THazardWorkPlanServiceImpl extends SuperServiceImpl<THazardWorkPlan
List<THazardConditionConfirmationRecord> tHazardConditionConfirmationRecords = tHazardConditionConfirmationRecordService.list( List<THazardConditionConfirmationRecord> tHazardConditionConfirmationRecords = tHazardConditionConfirmationRecordService.list(
new QueryWrapper<THazardConditionConfirmationRecord>().eq(THazardConditionConfirmationRecord.PLAN_ID, bizId)); new QueryWrapper<THazardConditionConfirmationRecord>().eq(THazardConditionConfirmationRecord.PLAN_ID, bizId));
for (THazardConditionConfirmationRecord tHazardConditionConfirmationRecord : tHazardConditionConfirmationRecords) { for (THazardConditionConfirmationRecord tHazardConditionConfirmationRecord : tHazardConditionConfirmationRecords) {
runtimeService.deleteProcessInstance(tHazardConditionConfirmationRecord.getProcessId(), "取消作业"); ruTaskService.stopProcess(tHazardConditionConfirmationRecord.getProcessId());
//runtimeService.deleteProcessInstance(, "取消作业");
tHazardConditionConfirmationRecord.setRemarks("取消作业"); tHazardConditionConfirmationRecord.setRemarks("取消作业");
tHazardConditionConfirmationRecordService.updateById(tHazardConditionConfirmationRecord); tHazardConditionConfirmationRecordService.updateById(tHazardConditionConfirmationRecord);
} }
......
...@@ -50,4 +50,10 @@ public interface RuTaskService { ...@@ -50,4 +50,10 @@ public interface RuTaskService {
*/ */
List<String> getNextNameTasks(String taskId, Map<String, Object> variables); List<String> getNextNameTasks(String taskId, Map<String, Object> variables);
/**
* 停止流程
* @param processInstanceId
*/
void stopProcess(String processInstanceId);
} }
...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; ...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.xiaoymin.knife4j.core.util.StrUtil; import com.github.xiaoymin.knife4j.core.util.StrUtil;
import com.testor.common.core.utils.StringUtils; import com.testor.common.core.utils.StringUtils;
import com.testor.module.hazard.model.enums.WorkPlanStatusEnum;
import com.testor.module.wf.dao.RuTaskDao; import com.testor.module.wf.dao.RuTaskDao;
import com.testor.module.wf.service.RuTaskService; import com.testor.module.wf.service.RuTaskService;
import com.testor.module.wf.utils.CastUtils; import com.testor.module.wf.utils.CastUtils;
...@@ -14,6 +15,7 @@ import com.testor.module.wf.utils.VariableUtils; ...@@ -14,6 +15,7 @@ import com.testor.module.wf.utils.VariableUtils;
import com.testor.module.wf.vo.ProcessDefListRequestVO; import com.testor.module.wf.vo.ProcessDefListRequestVO;
import com.tongtech.tfw.backend.common.biz.constants.BizConstants; import com.tongtech.tfw.backend.common.biz.constants.BizConstants;
import com.tongtech.tfw.backend.common.biz.models.BaseResponseList; import com.tongtech.tfw.backend.common.biz.models.BaseResponseList;
import com.tongtech.tfw.backend.common.context.ContextUtils;
import com.tongtech.tfw.backend.core.helper.StringHelper; import com.tongtech.tfw.backend.core.helper.StringHelper;
import com.tongtech.tfw.backend.core.helper.bean.BeanHelper; import com.tongtech.tfw.backend.core.helper.bean.BeanHelper;
import com.tongtech.tfw.workflow.apis.definition.model.domain.ActReDeployment; import com.tongtech.tfw.workflow.apis.definition.model.domain.ActReDeployment;
...@@ -24,9 +26,14 @@ import com.tongtech.tfw.workflow.apis.definition.service.ActReProcdefService; ...@@ -24,9 +26,14 @@ import com.tongtech.tfw.workflow.apis.definition.service.ActReProcdefService;
import com.tongtech.tfw.workflow.apis.task.model.dto.HisTask; import com.tongtech.tfw.workflow.apis.task.model.dto.HisTask;
import com.tongtech.tfw.workflow.apis.task.model.dto.HisTaskListRequest; import com.tongtech.tfw.workflow.apis.task.model.dto.HisTaskListRequest;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.flowable.bpmn.model.*; import org.flowable.bpmn.model.*;
import org.flowable.bpmn.model.Process;
import org.flowable.common.engine.impl.identity.Authentication;
import org.flowable.engine.*; import org.flowable.engine.*;
import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.Execution;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.idm.api.Group; import org.flowable.idm.api.Group;
import org.flowable.idm.api.User; import org.flowable.idm.api.User;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
...@@ -248,6 +255,42 @@ public class RuTaskServiceImpl implements RuTaskService { ...@@ -248,6 +255,42 @@ public class RuTaskServiceImpl implements RuTaskService {
return nextFlowNodeNames; return nextFlowNodeNames;
} }
@Override
public void stopProcess(String processInstanceId) {
String loginUserId = ContextUtils.getLoginUserId();
List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInstanceId).list();
if (CollectionUtils.isEmpty(taskList)) {
throw new RuntimeException("流程未启动或已执行完成,取消申请失败");
}
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId).singleResult();
BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
if (Objects.nonNull(bpmnModel)) {
Process process = bpmnModel.getMainProcess();
List<EndEvent> endNodes = process.findFlowElementsOfType(EndEvent.class, false);
if (CollectionUtils.isNotEmpty(endNodes)) {
Authentication.setAuthenticatedUserId(loginUserId);
runtimeService.setVariable(processInstance.getId(), "processStatus", WorkPlanStatusEnum.CANCELED.getValue());
for (Task task : taskList) {
taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), WorkPlanStatusEnum.CANCELED.getValue() , "取消流程");
}
// 获取当前流程最后一个节点
String endId = endNodes.get(0).getId();
List<Execution> executions = runtimeService.createExecutionQuery()
.parentId(processInstance.getProcessInstanceId()).list();
List<String> executionIds = new ArrayList<>();
executions.forEach(execution -> executionIds.add(execution.getId()));
// 变更流程为已结束状态
runtimeService.createChangeActivityStateBuilder()
.moveExecutionsToSingleActivityId(executionIds, endId).changeState();
}
}
}
/** /**
* 获取下一任务节点集合 * 获取下一任务节点集合
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment