diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/IFlowBizServiceImpl.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/IFlowBizServiceImpl.java index cb3ede5..bfbb070 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/IFlowBizServiceImpl.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/IFlowBizServiceImpl.java @@ -76,6 +76,9 @@ */ @Override public void updateCwsNodeLimitTime(ProcessDcmsDto dto) throws ParseException { + //更新历史节点状态 + SqlRunner.db().update("UPDATE DCM_CWS_CASE SET PRE_STATE = {0} WHERE ID = {1} ", new Object[]{dto.getCurrState(), dto.getBizId()}); + DictExpand dictExpand = caseSuportService.selectDictExpandByDictCode("caseState", String.valueOf(dto.getChangeState())); Integer limitTime = defaultLimitTime; if (dictExpand != null) { diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/IFlowBizServiceImpl.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/IFlowBizServiceImpl.java index cb3ede5..bfbb070 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/IFlowBizServiceImpl.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/IFlowBizServiceImpl.java @@ -76,6 +76,9 @@ */ @Override public void updateCwsNodeLimitTime(ProcessDcmsDto dto) throws ParseException { + //更新历史节点状态 + SqlRunner.db().update("UPDATE DCM_CWS_CASE SET PRE_STATE = {0} WHERE ID = {1} ", new Object[]{dto.getCurrState(), dto.getBizId()}); + DictExpand dictExpand = caseSuportService.selectDictExpandByDictCode("caseState", String.valueOf(dto.getChangeState())); Integer limitTime = defaultLimitTime; if (dictExpand != null) { diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java index da4920f..99c5d64 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java @@ -7,9 +7,11 @@ import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.flowable.dto.ProcessDcmsDto; +import com.casic.missiles.modular.flowable.dto.ProcessRecord; import com.casic.missiles.modular.flowable.service.IFlowNextnodeService; import com.casic.missiles.modular.system.model.FlowNextnode; import org.flowable.engine.history.HistoricActivityInstance; +import org.flowable.task.api.Task; import java.util.HashMap; import java.util.List; @@ -110,9 +112,10 @@ */ public static String getCurrTask(String processId) { //自动结束第一个task - List tasks = queryMyTaskHistory(processId, "userTask"); - String taskId = tasks.get(tasks.size() - 1).getTaskId(); - return taskId; +// List tasks = queryMyTaskHistory(processId, "userTask"); +// String taskId = tasks.get(tasks.size() - 1).getTaskId(); + Task task = FlowableUtil.getCurrTask(processId); + return task.getId(); } /** @@ -158,4 +161,25 @@ public static List queryMyTaskHistory(String instanceId, String taskType) { return FlowableUtil.queryMyTaskHistory(instanceId, taskType); } + + /** + * 查询上一个流程节点ID + * + * @param currentActivityId + */ + public static String findPreActivity(String currentActivityId, String processInstanceId) { + return FlowableUtil.findPreActivity(currentActivityId, processInstanceId); + } + + /** + * 单流程撤销调整 + * + * @param processInstanceId 流程实例ID + * @param currentActivityId 当前实例节点 + * @param targetTaskKey + * @return + */ + public static String moveSingleActivityId(String processInstanceId, String currentActivityId, String targetTaskKey) { + return FlowableUtil.moveSingleActivityId(processInstanceId, currentActivityId, targetTaskKey); + } } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/IFlowBizServiceImpl.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/IFlowBizServiceImpl.java index cb3ede5..bfbb070 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/IFlowBizServiceImpl.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/IFlowBizServiceImpl.java @@ -76,6 +76,9 @@ */ @Override public void updateCwsNodeLimitTime(ProcessDcmsDto dto) throws ParseException { + //更新历史节点状态 + SqlRunner.db().update("UPDATE DCM_CWS_CASE SET PRE_STATE = {0} WHERE ID = {1} ", new Object[]{dto.getCurrState(), dto.getBizId()}); + DictExpand dictExpand = caseSuportService.selectDictExpandByDictCode("caseState", String.valueOf(dto.getChangeState())); Integer limitTime = defaultLimitTime; if (dictExpand != null) { diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java index da4920f..99c5d64 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java @@ -7,9 +7,11 @@ import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.flowable.dto.ProcessDcmsDto; +import com.casic.missiles.modular.flowable.dto.ProcessRecord; import com.casic.missiles.modular.flowable.service.IFlowNextnodeService; import com.casic.missiles.modular.system.model.FlowNextnode; import org.flowable.engine.history.HistoricActivityInstance; +import org.flowable.task.api.Task; import java.util.HashMap; import java.util.List; @@ -110,9 +112,10 @@ */ public static String getCurrTask(String processId) { //自动结束第一个task - List tasks = queryMyTaskHistory(processId, "userTask"); - String taskId = tasks.get(tasks.size() - 1).getTaskId(); - return taskId; +// List tasks = queryMyTaskHistory(processId, "userTask"); +// String taskId = tasks.get(tasks.size() - 1).getTaskId(); + Task task = FlowableUtil.getCurrTask(processId); + return task.getId(); } /** @@ -158,4 +161,25 @@ public static List queryMyTaskHistory(String instanceId, String taskType) { return FlowableUtil.queryMyTaskHistory(instanceId, taskType); } + + /** + * 查询上一个流程节点ID + * + * @param currentActivityId + */ + public static String findPreActivity(String currentActivityId, String processInstanceId) { + return FlowableUtil.findPreActivity(currentActivityId, processInstanceId); + } + + /** + * 单流程撤销调整 + * + * @param processInstanceId 流程实例ID + * @param currentActivityId 当前实例节点 + * @param targetTaskKey + * @return + */ + public static String moveSingleActivityId(String processInstanceId, String currentActivityId, String targetTaskKey) { + return FlowableUtil.moveSingleActivityId(processInstanceId, currentActivityId, targetTaskKey); + } } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java index b153581..1a762d4 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java @@ -3,6 +3,10 @@ import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.flowable.constant.FlowConstants; +import com.casic.missiles.modular.flowable.dto.ProcessRecord; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.bpmn.model.FlowNode; +import org.flowable.bpmn.model.SequenceFlow; import org.flowable.engine.ProcessEngine; import org.flowable.engine.RepositoryService; import org.flowable.engine.history.HistoricActivityInstance; @@ -11,6 +15,7 @@ import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.task.Comment; +import org.flowable.task.api.Task; import org.flowable.task.api.TaskQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,7 +25,14 @@ public class FlowableUtil { private static final Logger logger = LoggerFactory.getLogger(FlowableUtil.class); - private static ProcessEngine processEngine = SpringContextHolder.getBean(ProcessEngine.class); + private static ProcessEngine processEngine = null; + + private static ProcessEngine getProcessEngine() { + if (processEngine == null) { + processEngine = SpringContextHolder.getBean(ProcessEngine.class); + } + return processEngine; + } public static void deployFlow(ProcessEngine processEngine, String bpm, String key) { RepositoryService repositoryService = processEngine.getRepositoryService(); @@ -42,7 +54,7 @@ */ public static void changeGroup(String taskId, String groupId) { if (ToolUtil.isNotEmpty(groupId)) { - processEngine.getTaskService().addCandidateGroup(taskId, groupId); + getProcessEngine().getTaskService().addCandidateGroup(taskId, groupId); } } @@ -53,8 +65,8 @@ * @param map */ public static String startFlow(HashMap map, String processKey, String userId) { - processEngine.getIdentityService().setAuthenticatedUserId(userId); - ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processKey, map); + getProcessEngine().getIdentityService().setAuthenticatedUserId(userId); + ProcessInstance processInstance = getProcessEngine().getRuntimeService().startProcessInstanceByKey(processKey, map); System.out.println("pid = " + processInstance.getId()); System.out.println("activityId = " + processInstance.getActivityId()); System.out.println("getProcessDefinitionId = " + processInstance.getProcessDefinitionId()); @@ -67,7 +79,7 @@ } public static void assigneeTask(String taskId, String userId) { - processEngine.getTaskService().setAssignee(taskId, userId); + getProcessEngine().getTaskService().setAssignee(taskId, userId); } /** @@ -79,21 +91,21 @@ * @return */ public static String completeTask(String taskId, String message, HashMap map, String operationType, String currDeptId, String CurrUserId, String roleTip) { - TaskQuery taskQuery = processEngine.getTaskService().createTaskQuery().taskId(taskId); + TaskQuery taskQuery = getProcessEngine().getTaskService().createTaskQuery().taskId(taskId); if (ToolUtil.isNotEmpty(message)) { - processEngine.getTaskService().addComment(taskId, taskQuery.singleResult().getProcessInstanceId(), message); + getProcessEngine().getTaskService().addComment(taskId, taskQuery.singleResult().getProcessInstanceId(), message); } - processEngine.getTaskService().addComment(taskId, taskQuery.singleResult().getProcessInstanceId(), FlowConstants.OPERATION_TYPE, operationType); + getProcessEngine().getTaskService().addComment(taskId, taskQuery.singleResult().getProcessInstanceId(), FlowConstants.OPERATION_TYPE, operationType); if (ToolUtil.isNotEmpty(CurrUserId)) { //设置当前操作人 - processEngine.getIdentityService().setAuthenticatedUserId(CurrUserId); + getProcessEngine().getIdentityService().setAuthenticatedUserId(CurrUserId); //保存当前操作用户节点 - processEngine.getTaskService().addComment(taskId, taskQuery.singleResult().getProcessInstanceId(), FlowConstants.DEPT_TYPE, currDeptId); + getProcessEngine().getTaskService().addComment(taskId, taskQuery.singleResult().getProcessInstanceId(), FlowConstants.DEPT_TYPE, currDeptId); //当前处理人角色 - processEngine.getTaskService().addComment(taskId, taskQuery.singleResult().getProcessInstanceId(), FlowConstants.ROLE_TYPE, roleTip); + getProcessEngine().getTaskService().addComment(taskId, taskQuery.singleResult().getProcessInstanceId(), FlowConstants.ROLE_TYPE, roleTip); } - processEngine.getTaskService().complete(taskId, map); + getProcessEngine().getTaskService().complete(taskId, map); return null; } @@ -107,14 +119,36 @@ * @return */ public static List queryMyTaskHistory(String instanceId, String taskType) { - HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(instanceId).activityType(taskType); + HistoricActivityInstanceQuery query = getProcessEngine().getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(instanceId).activityType(taskType); List list = query.list(); for (HistoricActivityInstance task : list) { System.out.println("name = " + task.getTaskId()); //查询审批意见 - List res = processEngine.getTaskService().getTaskComments(task.getTaskId()); + List res = getProcessEngine().getTaskService().getTaskComments(task.getTaskId()); } return list; } + + public static String findPreActivity(String currentActivityId, String processInstanceId) { + ProcessInstance processInstance = getProcessEngine().getRuntimeService().createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + BpmnModel bpmnModel = getProcessEngine().getRepositoryService().getBpmnModel(processInstance.getProcessDefinitionId()); + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(currentActivityId); + SequenceFlow sequenceFlow = flowNode.getIncomingFlows().get(0); + // 获取上一个节点的activityId + String sourceRef = sequenceFlow.getSourceRef(); + return sourceRef; + } + + public static String moveSingleActivityId(String processId, String currTaskActivityId, String targetTaskKey) { + getProcessEngine().getRuntimeService().createChangeActivityStateBuilder() + .processInstanceId(processId).cancelActivityId(currTaskActivityId) + .startActivityId(targetTaskKey).changeState(); + return null; + } + + public static Task getCurrTask(String processId) { + Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); + return task; + } }